diff options
author | Thomas Bruederli <thomas@roundcube.net> | 2014-08-27 17:45:21 +0200 |
---|---|---|
committer | Thomas Bruederli <thomas@roundcube.net> | 2014-08-27 17:45:21 +0200 |
commit | a98a4f8bb56eacffff1765ff09dd29af26e5fc12 (patch) | |
tree | 68101a1906303dbd0255c77e61fb058a52296294 | |
parent | 812f37c5d1baa077f22a35240c5488f65d054260 (diff) |
Remove 3rd party libs from our repository and define the dependencies in composer.json-dist.
Also remove the ancient utf8 lib and replace it with 'Patchwork UTF-8 for PHP'.
For direct git checkouts, copy composer.json-dist into composer.json and run
`php composer.phar install` to install the dependencies.
71 files changed, 70 insertions, 49954 deletions
diff --git a/composer.json-dist b/composer.json-dist index e7462038d..7791ca907 100644 --- a/composer.json-dist +++ b/composer.json-dist @@ -4,13 +4,50 @@ "license": "GPL-3.0+", "repositories": [ { + "type": "pear", + "url": "http://pear.php.net/" + }, + { "type": "composer", "url": "http://plugins.roundcube.net/" + }, + { + "type": "vcs", + "url": "git@github.com:roundcube/sample-plugin.git" + }, + { + "type": "vcs", + "url": "git://git.kolab.org/git/pear/Net_LDAP3" + }, + { + "type": "package", + "package": { + "name": "Net_SMTP", + "version": "dev-master", + "source": { + "url": "http://github.com/pear/Net_SMTP", + "type": "git", + "reference": "master" + } + } } ], "require": { "php": ">=5.3.0", - "roundcube/plugin-installer": ">=0.1.3" + "roundcube/plugin-installer": ">=0.1.3", + "pear/mail_mime": ">=1.8.9", + "pear/mail_mime-decode": ">=1.5.5", + "pear/net_smtp": "dev-master", + "pear-pear.php.net/auth_sasl": ">=1.0.6", + "pear-pear.php.net/net_idna2": ">=0.1.1", + "pear-pear.php.net/net_sieve": ">=1.3.2", + "pear-pear.php.net/net_ldap2": ">=2.0.12", + "kolab/Net_LDAP3": "dev-master", + "patchwork/utf8": "1.2.x" + }, + "require-dev": { + "pear-pear.php.net/crypt_gpg": "*", + "phpunit/phpunit": "*" }, "minimum-stability": "dev" } diff --git a/installer/check.php b/installer/check.php index 31b4c2955..6974d3720 100644 --- a/installer/check.php +++ b/installer/check.php @@ -28,10 +28,13 @@ $optional_php_exts = array( ); $required_libs = array( - 'PEAR' => 'PEAR.php', - 'Net_SMTP' => 'Net/SMTP.php', - 'Net_IDNA2' => 'Net/IDNA2.php', - 'Mail_mime' => 'Mail/mime.php', + 'PEAR' => 'pear.php.net', + 'Auth_SASL' => 'pear.php.net', + 'Net_SMTP' => 'pear.php.net', + 'Net_IDNA2' => 'pear.php.net', + 'Net_LDAP3' => 'git.kolab.org', + 'Mail_mime' => 'pear.php.net', + 'Mail_mimeDecode' => 'pear.php.net', ); $ini_checks = array( @@ -160,13 +163,13 @@ if (empty($found_db_driver)) { <?php -foreach ($required_libs as $classname => $file) { +foreach ($required_libs as $classname => $vendor) { @include_once $file; if (class_exists($classname)) { $RCI->pass($classname); } else { - $RCI->fail($classname, "Failed to load $file", $source_urls[$classname]); + $RCI->fail($classname, "Failed to load class $classname from $vendor", $source_urls[$classname]); } echo "<br />"; } diff --git a/installer/index.php b/installer/index.php index 044eb3f57..b93ad2f94 100644 --- a/installer/index.php +++ b/installer/index.php @@ -3,9 +3,9 @@ /* +-------------------------------------------------------------------------+ | Roundcube Webmail setup tool | - | Version 0.9-git | + | Version 1.1-git | | | - | Copyright (C) 2009-2013, The Roundcube Dev Team | + | Copyright (C) 2009-2014, The Roundcube Dev Team | | | | This program is free software: you can redistribute it and/or modify | | it under the terms of the GNU General Public License (with exceptions | @@ -49,6 +49,11 @@ $include_path .= ini_get('include_path'); set_include_path($include_path); +// include composer autoloader (if available) +if (@file_exists(INSTALL_PATH . 'vendor/autoload.php')) { + require INSTALL_PATH . 'vendor/autoload.php'; +} + require_once 'Roundcube/bootstrap.php'; // deprecated aliases (to be removed) require_once 'bc.php'; diff --git a/program/include/iniset.php b/program/include/iniset.php index 5c3065489..b2cad4292 100644 --- a/program/include/iniset.php +++ b/program/include/iniset.php @@ -54,20 +54,25 @@ if (set_include_path($include_path) === false) { // (does not work in safe mode) @set_time_limit(120); +// include composer autoloader (if available) +if (@file_exists('vendor/autoload.php')) { + require 'vendor/autoload.php'; +} + // include Roundcube Framework require_once 'Roundcube/bootstrap.php'; // register autoloader for rcmail app classes spl_autoload_register('rcmail_autoload'); -// include composer autoloader (if available) -if (@file_exists('vendor/autoload.php')) { - require 'vendor/autoload.php'; -} - // backward compatybility (to be removed) require_once INSTALL_PATH . 'program/include/bc.php'; +// load the UTF-8 portablity layer from Patchwor +if (!function_exists('iconv') || !function_exists('utf8_encode') || !extension_loaded('mbstring')) { + \Patchwork\Utf8\Bootup::initAll(); +} + /** * PHP5 autoloader routine for dynamic class loading diff --git a/program/lib/Auth/SASL.php b/program/lib/Auth/SASL.php deleted file mode 100644 index 5bd6eb096..000000000 --- a/program/lib/Auth/SASL.php +++ /dev/null @@ -1,125 +0,0 @@ -<?php -// +-----------------------------------------------------------------------+ -// | Copyright (c) 2002-2003 Richard Heyes | -// | All rights reserved. | -// | | -// | Redistribution and use in source and binary forms, with or without | -// | modification, are permitted provided that the following conditions | -// | are met: | -// | | -// | o Redistributions of source code must retain the above copyright | -// | notice, this list of conditions and the following disclaimer. | -// | o 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.| -// | o The names of the authors may not be used to endorse or promote | -// | products derived from this software without specific prior written | -// | permission. | -// | | -// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | -// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | -// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | -// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | -// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | -// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | -// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | -// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | -// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | -// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | -// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | -// | | -// +-----------------------------------------------------------------------+ -// | Author: Richard Heyes <richard@php.net> | -// +-----------------------------------------------------------------------+ -// -// $Id$ - -/** -* Client implementation of various SASL mechanisms -* -* @author Richard Heyes <richard@php.net> -* @access public -* @version 1.0 -* @package Auth_SASL -*/ - -require_once('PEAR.php'); - -class Auth_SASL -{ - /** - * Factory class. Returns an object of the request - * type. - * - * @param string $type One of: Anonymous - * Plain - * CramMD5 - * DigestMD5 - * SCRAM-* (any mechanism of the SCRAM family) - * Types are not case sensitive - */ - function &factory($type) - { - switch (strtolower($type)) { - case 'anonymous': - $filename = 'Auth/SASL/Anonymous.php'; - $classname = 'Auth_SASL_Anonymous'; - break; - - case 'login': - $filename = 'Auth/SASL/Login.php'; - $classname = 'Auth_SASL_Login'; - break; - - case 'plain': - $filename = 'Auth/SASL/Plain.php'; - $classname = 'Auth_SASL_Plain'; - break; - - case 'external': - $filename = 'Auth/SASL/External.php'; - $classname = 'Auth_SASL_External'; - break; - - case 'crammd5': - // $msg = 'Deprecated mechanism name. Use IANA-registered name: CRAM-MD5.'; - // trigger_error($msg, E_USER_DEPRECATED); - case 'cram-md5': - $filename = 'Auth/SASL/CramMD5.php'; - $classname = 'Auth_SASL_CramMD5'; - break; - - case 'digestmd5': - // $msg = 'Deprecated mechanism name. Use IANA-registered name: DIGEST-MD5.'; - // trigger_error($msg, E_USER_DEPRECATED); - case 'digest-md5': - // $msg = 'DIGEST-MD5 is a deprecated SASL mechanism as per RFC-6331. Using it could be a security risk.'; - // trigger_error($msg, E_USER_NOTICE); - $filename = 'Auth/SASL/DigestMD5.php'; - $classname = 'Auth_SASL_DigestMD5'; - break; - - default: - $scram = '/^SCRAM-(.{1,9})$/i'; - if (preg_match($scram, $type, $matches)) - { - $hash = $matches[1]; - $filename = dirname(__FILE__) .'/SASL/SCRAM.php'; - $classname = 'Auth_SASL_SCRAM'; - $parameter = $hash; - break; - } - return PEAR::raiseError('Invalid SASL mechanism type'); - break; - } - - require_once($filename); - if (isset($parameter)) - $obj = new $classname($parameter); - else - $obj = new $classname(); - return $obj; - } -} - -?> diff --git a/program/lib/Auth/SASL/Anonymous.php b/program/lib/Auth/SASL/Anonymous.php deleted file mode 100644 index 081190936..000000000 --- a/program/lib/Auth/SASL/Anonymous.php +++ /dev/null @@ -1,71 +0,0 @@ -<?php -// +-----------------------------------------------------------------------+ -// | Copyright (c) 2002-2003 Richard Heyes | -// | All rights reserved. | -// | | -// | Redistribution and use in source and binary forms, with or without | -// | modification, are permitted provided that the following conditions | -// | are met: | -// | | -// | o Redistributions of source code must retain the above copyright | -// | notice, this list of conditions and the following disclaimer. | -// | o 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.| -// | o The names of the authors may not be used to endorse or promote | -// | products derived from this software without specific prior written | -// | permission. | -// | | -// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | -// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | -// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | -// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | -// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | -// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | -// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | -// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | -// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | -// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | -// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | -// | | -// +-----------------------------------------------------------------------+ -// | Author: Richard Heyes <richard@php.net> | -// +-----------------------------------------------------------------------+ -// -// $Id$ - -/** -* Implmentation of ANONYMOUS SASL mechanism -* -* @author Richard Heyes <richard@php.net> -* @access public -* @version 1.0 -* @package Auth_SASL -*/ - -require_once('Auth/SASL/Common.php'); - -class Auth_SASL_Anonymous extends Auth_SASL_Common -{ - /** - * Not much to do here except return the token supplied. - * No encoding, hashing or encryption takes place for this - * mechanism, simply one of: - * o An email address - * o An opaque string not containing "@" that can be interpreted - * by the sysadmin - * o Nothing - * - * We could have some logic here for the second option, but this - * would by no means create something interpretable. - * - * @param string $token Optional email address or string to provide - * as trace information. - * @return string The unaltered input token - */ - function getResponse($token = '') - { - return $token; - } -} -?>
\ No newline at end of file diff --git a/program/lib/Auth/SASL/Common.php b/program/lib/Auth/SASL/Common.php deleted file mode 100644 index d8c5610d1..000000000 --- a/program/lib/Auth/SASL/Common.php +++ /dev/null @@ -1,105 +0,0 @@ -<?php -// +-----------------------------------------------------------------------+ -// | Copyright (c) 2002-2003 Richard Heyes | -// | All rights reserved. | -// | | -// | Redistribution and use in source and binary forms, with or without | -// | modification, are permitted provided that the following conditions | -// | are met: | -// | | -// | o Redistributions of source code must retain the above copyright | -// | notice, this list of conditions and the following disclaimer. | -// | o 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.| -// | o The names of the authors may not be used to endorse or promote | -// | products derived from this software without specific prior written | -// | permission. | -// | | -// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | -// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | -// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | -// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | -// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | -// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | -// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | -// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | -// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | -// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | -// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | -// | | -// +-----------------------------------------------------------------------+ -// | Author: Richard Heyes <richard@php.net> | -// +-----------------------------------------------------------------------+ -// -// $Id$ - -/** -* Common functionality to SASL mechanisms -* -* @author Richard Heyes <richard@php.net> -* @access public -* @version 1.0 -* @package Auth_SASL -*/ - -class Auth_SASL_Common -{ - /** - * Function which implements HMAC MD5 digest - * - * @param string $key The secret key - * @param string $data The data to hash - * @param bool $raw_output Whether the digest is returned in binary or hexadecimal format. - * - * @return string The HMAC-MD5 digest - */ - function _HMAC_MD5($key, $data, $raw_output = FALSE) - { - if (strlen($key) > 64) { - $key = pack('H32', md5($key)); - } - - if (strlen($key) < 64) { - $key = str_pad($key, 64, chr(0)); - } - - $k_ipad = substr($key, 0, 64) ^ str_repeat(chr(0x36), 64); - $k_opad = substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64); - - $inner = pack('H32', md5($k_ipad . $data)); - $digest = md5($k_opad . $inner, $raw_output); - - return $digest; - } - - /** - * Function which implements HMAC-SHA-1 digest - * - * @param string $key The secret key - * @param string $data The data to hash - * @param bool $raw_output Whether the digest is returned in binary or hexadecimal format. - * @return string The HMAC-SHA-1 digest - * @author Jehan <jehan.marmottard@gmail.com> - * @access protected - */ - protected function _HMAC_SHA1($key, $data, $raw_output = FALSE) - { - if (strlen($key) > 64) { - $key = sha1($key, TRUE); - } - - if (strlen($key) < 64) { - $key = str_pad($key, 64, chr(0)); - } - - $k_ipad = substr($key, 0, 64) ^ str_repeat(chr(0x36), 64); - $k_opad = substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64); - - $inner = pack('H40', sha1($k_ipad . $data)); - $digest = sha1($k_opad . $inner, $raw_output); - - return $digest; - } -} -?> diff --git a/program/lib/Auth/SASL/CramMD5.php b/program/lib/Auth/SASL/CramMD5.php deleted file mode 100644 index d3fbf179b..000000000 --- a/program/lib/Auth/SASL/CramMD5.php +++ /dev/null @@ -1,68 +0,0 @@ -<?php -// +-----------------------------------------------------------------------+ -// | Copyright (c) 2002-2003 Richard Heyes | -// | All rights reserved. | -// | | -// | Redistribution and use in source and binary forms, with or without | -// | modification, are permitted provided that the following conditions | -// | are met: | -// | | -// | o Redistributions of source code must retain the above copyright | -// | notice, this list of conditions and the following disclaimer. | -// | o 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.| -// | o The names of the authors may not be used to endorse or promote | -// | products derived from this software without specific prior written | -// | permission. | -// | | -// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | -// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | -// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | -// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | -// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | -// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | -// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | -// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | -// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | -// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | -// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | -// | | -// +-----------------------------------------------------------------------+ -// | Author: Richard Heyes <richard@php.net> | -// +-----------------------------------------------------------------------+ -// -// $Id$ - -/** -* Implmentation of CRAM-MD5 SASL mechanism -* -* @author Richard Heyes <richard@php.net> -* @access public -* @version 1.0 -* @package Auth_SASL -*/ - -require_once('Auth/SASL/Common.php'); - -class Auth_SASL_CramMD5 extends Auth_SASL_Common -{ - /** - * Implements the CRAM-MD5 SASL mechanism - * This DOES NOT base64 encode the return value, - * you will need to do that yourself. - * - * @param string $user Username - * @param string $pass Password - * @param string $challenge The challenge supplied by the server. - * this should be already base64_decoded. - * - * @return string The string to pass back to the server, of the form - * "<user> <digest>". This is NOT base64_encoded. - */ - function getResponse($user, $pass, $challenge) - { - return $user . ' ' . $this->_HMAC_MD5($pass, $challenge); - } -} -?>
\ No newline at end of file diff --git a/program/lib/Auth/SASL/DigestMD5.php b/program/lib/Auth/SASL/DigestMD5.php deleted file mode 100644 index 07007b7c9..000000000 --- a/program/lib/Auth/SASL/DigestMD5.php +++ /dev/null @@ -1,197 +0,0 @@ -<?php -// +-----------------------------------------------------------------------+ -// | Copyright (c) 2002-2003 Richard Heyes | -// | All rights reserved. | -// | | -// | Redistribution and use in source and binary forms, with or without | -// | modification, are permitted provided that the following conditions | -// | are met: | -// | | -// | o Redistributions of source code must retain the above copyright | -// | notice, this list of conditions and the following disclaimer. | -// | o 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.| -// | o The names of the authors may not be used to endorse or promote | -// | products derived from this software without specific prior written | -// | permission. | -// | | -// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | -// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | -// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | -// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | -// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | -// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | -// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | -// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | -// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | -// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | -// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | -// | | -// +-----------------------------------------------------------------------+ -// | Author: Richard Heyes <richard@php.net> | -// +-----------------------------------------------------------------------+ -// -// $Id$ - -/** -* Implmentation of DIGEST-MD5 SASL mechanism -* -* @author Richard Heyes <richard@php.net> -* @access public -* @version 1.0 -* @package Auth_SASL -*/ - -require_once('Auth/SASL/Common.php'); - -class Auth_SASL_DigestMD5 extends Auth_SASL_Common -{ - /** - * Provides the (main) client response for DIGEST-MD5 - * requires a few extra parameters than the other - * mechanisms, which are unavoidable. - * - * @param string $authcid Authentication id (username) - * @param string $pass Password - * @param string $challenge The digest challenge sent by the server - * @param string $hostname The hostname of the machine you're connecting to - * @param string $service The servicename (eg. imap, pop, acap etc) - * @param string $authzid Authorization id (username to proxy as) - * @return string The digest response (NOT base64 encoded) - * @access public - */ - function getResponse($authcid, $pass, $challenge, $hostname, $service, $authzid = '') - { - $challenge = $this->_parseChallenge($challenge); - $authzid_string = ''; - if ($authzid != '') { - $authzid_string = ',authzid="' . $authzid . '"'; - } - - if (!empty($challenge)) { - $cnonce = $this->_getCnonce(); - $digest_uri = sprintf('%s/%s', $service, $hostname); - $response_value = $this->_getResponseValue($authcid, $pass, $challenge['realm'], $challenge['nonce'], $cnonce, $digest_uri, $authzid); - - if ($challenge['realm']) { - return sprintf('username="%s",realm="%s"' . $authzid_string . -',nonce="%s",cnonce="%s",nc=00000001,qop=auth,digest-uri="%s",response=%s,maxbuf=%d', $authcid, $challenge['realm'], $challenge['nonce'], $cnonce, $digest_uri, $response_value, $challenge['maxbuf']); - } else { - return sprintf('username="%s"' . $authzid_string . ',nonce="%s",cnonce="%s",nc=00000001,qop=auth,digest-uri="%s",response=%s,maxbuf=%d', $authcid, $challenge['nonce'], $cnonce, $digest_uri, $response_value, $challenge['maxbuf']); - } - } else { - return PEAR::raiseError('Invalid digest challenge'); - } - } - - /** - * Parses and verifies the digest challenge* - * - * @param string $challenge The digest challenge - * @return array The parsed challenge as an assoc - * array in the form "directive => value". - * @access private - */ - function _parseChallenge($challenge) - { - $tokens = array(); - while (preg_match('/^([a-z-]+)=("[^"]+(?<!\\\)"|[^,]+)/i', $challenge, $matches)) { - - // Ignore these as per rfc2831 - if ($matches[1] == 'opaque' OR $matches[1] == 'domain') { - $challenge = substr($challenge, strlen($matches[0]) + 1); - continue; - } - - // Allowed multiple "realm" and "auth-param" - if (!empty($tokens[$matches[1]]) AND ($matches[1] == 'realm' OR $matches[1] == 'auth-param')) { - if (is_array($tokens[$matches[1]])) { - $tokens[$matches[1]][] = preg_replace('/^"(.*)"$/', '\\1', $matches[2]); - } else { - $tokens[$matches[1]] = array($tokens[$matches[1]], preg_replace('/^"(.*)"$/', '\\1', $matches[2])); - } - - // Any other multiple instance = failure - } elseif (!empty($tokens[$matches[1]])) { - $tokens = array(); - break; - - } else { - $tokens[$matches[1]] = preg_replace('/^"(.*)"$/', '\\1', $matches[2]); - } - - // Remove the just parsed directive from the challenge - $challenge = substr($challenge, strlen($matches[0]) + 1); - } - - /** - * Defaults and required directives - */ - // Realm - if (empty($tokens['realm'])) { - $tokens['realm'] = ""; - } - - // Maxbuf - if (empty($tokens['maxbuf'])) { - $tokens['maxbuf'] = 65536; - } - - // Required: nonce, algorithm - if (empty($tokens['nonce']) OR empty($tokens['algorithm'])) { - return array(); - } - - return $tokens; - } - - /** - * Creates the response= part of the digest response - * - * @param string $authcid Authentication id (username) - * @param string $pass Password - * @param string $realm Realm as provided by the server - * @param string $nonce Nonce as provided by the server - * @param string $cnonce Client nonce - * @param string $digest_uri The digest-uri= value part of the response - * @param string $authzid Authorization id - * @return string The response= part of the digest response - * @access private - */ - function _getResponseValue($authcid, $pass, $realm, $nonce, $cnonce, $digest_uri, $authzid = '') - { - if ($authzid == '') { - $A1 = sprintf('%s:%s:%s', pack('H32', md5(sprintf('%s:%s:%s', $authcid, $realm, $pass))), $nonce, $cnonce); - } else { - $A1 = sprintf('%s:%s:%s:%s', pack('H32', md5(sprintf('%s:%s:%s', $authcid, $realm, $pass))), $nonce, $cnonce, $authzid); - } - $A2 = 'AUTHENTICATE:' . $digest_uri; - return md5(sprintf('%s:%s:00000001:%s:auth:%s', md5($A1), $nonce, $cnonce, md5($A2))); - } - - /** - * Creates the client nonce for the response - * - * @return string The cnonce value - * @access private - */ - function _getCnonce() - { - if (@file_exists('/dev/urandom') && $fd = @fopen('/dev/urandom', 'r')) { - return base64_encode(fread($fd, 32)); - - } elseif (@file_exists('/dev/random') && $fd = @fopen('/dev/random', 'r')) { - return base64_encode(fread($fd, 32)); - - } else { - $str = ''; - for ($i=0; $i<32; $i++) { - $str .= chr(mt_rand(0, 255)); - } - - return base64_encode($str); - } - } -} -?> diff --git a/program/lib/Auth/SASL/External.php b/program/lib/Auth/SASL/External.php deleted file mode 100644 index c5ae25e75..000000000 --- a/program/lib/Auth/SASL/External.php +++ /dev/null @@ -1,63 +0,0 @@ -<?php -// +-----------------------------------------------------------------------+ -// | Copyright (c) 2008 Christoph Schulz | -// | All rights reserved. | -// | | -// | Redistribution and use in source and binary forms, with or without | -// | modification, are permitted provided that the following conditions | -// | are met: | -// | | -// | o Redistributions of source code must retain the above copyright | -// | notice, this list of conditions and the following disclaimer. | -// | o 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.| -// | o The names of the authors may not be used to endorse or promote | -// | products derived from this software without specific prior written | -// | permission. | -// | | -// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | -// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | -// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | -// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | -// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | -// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | -// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | -// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | -// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | -// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | -// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | -// | | -// +-----------------------------------------------------------------------+ -// | Author: Christoph Schulz <develop@kristov.de> | -// +-----------------------------------------------------------------------+ -// -// $Id$ - -/** -* Implmentation of EXTERNAL SASL mechanism -* -* @author Christoph Schulz <develop@kristov.de> -* @access public -* @version 1.0.3 -* @package Auth_SASL -*/ - -require_once('Auth/SASL/Common.php'); - -class Auth_SASL_External extends Auth_SASL_Common -{ - /** - * Returns EXTERNAL response - * - * @param string $authcid Authentication id (username) - * @param string $pass Password - * @param string $authzid Autorization id - * @return string EXTERNAL Response - */ - function getResponse($authcid, $pass, $authzid = '') - { - return $authzid; - } -} -?> diff --git a/program/lib/Auth/SASL/Login.php b/program/lib/Auth/SASL/Login.php deleted file mode 100644 index 918daeedd..000000000 --- a/program/lib/Auth/SASL/Login.php +++ /dev/null @@ -1,65 +0,0 @@ -<?php -// +-----------------------------------------------------------------------+ -// | Copyright (c) 2002-2003 Richard Heyes | -// | All rights reserved. | -// | | -// | Redistribution and use in source and binary forms, with or without | -// | modification, are permitted provided that the following conditions | -// | are met: | -// | | -// | o Redistributions of source code must retain the above copyright | -// | notice, this list of conditions and the following disclaimer. | -// | o 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.| -// | o The names of the authors may not be used to endorse or promote | -// | products derived from this software without specific prior written | -// | permission. | -// | | -// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | -// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | -// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | -// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | -// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | -// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | -// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | -// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | -// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | -// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | -// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | -// | | -// +-----------------------------------------------------------------------+ -// | Author: Richard Heyes <richard@php.net> | -// +-----------------------------------------------------------------------+ -// -// $Id$ - -/** -* This is technically not a SASL mechanism, however -* it's used by Net_Sieve, Net_Cyrus and potentially -* other protocols , so here is a good place to abstract -* it. -* -* @author Richard Heyes <richard@php.net> -* @access public -* @version 1.0 -* @package Auth_SASL -*/ - -require_once('Auth/SASL/Common.php'); - -class Auth_SASL_Login extends Auth_SASL_Common -{ - /** - * Pseudo SASL LOGIN mechanism - * - * @param string $user Username - * @param string $pass Password - * @return string LOGIN string - */ - function getResponse($user, $pass) - { - return sprintf('LOGIN %s %s', $user, $pass); - } -} -?>
\ No newline at end of file diff --git a/program/lib/Auth/SASL/Plain.php b/program/lib/Auth/SASL/Plain.php deleted file mode 100644 index 57894d042..000000000 --- a/program/lib/Auth/SASL/Plain.php +++ /dev/null @@ -1,63 +0,0 @@ -<?php -// +-----------------------------------------------------------------------+ -// | Copyright (c) 2002-2003 Richard Heyes | -// | All rights reserved. | -// | | -// | Redistribution and use in source and binary forms, with or without | -// | modification, are permitted provided that the following conditions | -// | are met: | -// | | -// | o Redistributions of source code must retain the above copyright | -// | notice, this list of conditions and the following disclaimer. | -// | o 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.| -// | o The names of the authors may not be used to endorse or promote | -// | products derived from this software without specific prior written | -// | permission. | -// | | -// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | -// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | -// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | -// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | -// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | -// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | -// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | -// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | -// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | -// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | -// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | -// | | -// +-----------------------------------------------------------------------+ -// | Author: Richard Heyes <richard@php.net> | -// +-----------------------------------------------------------------------+ -// -// $Id$ - -/** -* Implmentation of PLAIN SASL mechanism -* -* @author Richard Heyes <richard@php.net> -* @access public -* @version 1.0 -* @package Auth_SASL -*/ - -require_once('Auth/SASL/Common.php'); - -class Auth_SASL_Plain extends Auth_SASL_Common -{ - /** - * Returns PLAIN response - * - * @param string $authcid Authentication id (username) - * @param string $pass Password - * @param string $authzid Autorization id - * @return string PLAIN Response - */ - function getResponse($authcid, $pass, $authzid = '') - { - return $authzid . chr(0) . $authcid . chr(0) . $pass; - } -} -?> diff --git a/program/lib/Auth/SASL/SCRAM.php b/program/lib/Auth/SASL/SCRAM.php deleted file mode 100644 index cbca500e4..000000000 --- a/program/lib/Auth/SASL/SCRAM.php +++ /dev/null @@ -1,306 +0,0 @@ -<?php -// +-----------------------------------------------------------------------+ -// | Copyright (c) 2011 Jehan | -// | All rights reserved. | -// | | -// | Redistribution and use in source and binary forms, with or without | -// | modification, are permitted provided that the following conditions | -// | are met: | -// | | -// | o Redistributions of source code must retain the above copyright | -// | notice, this list of conditions and the following disclaimer. | -// | o 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.| -// | o The names of the authors may not be used to endorse or promote | -// | products derived from this software without specific prior written | -// | permission. | -// | | -// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | -// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | -// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | -// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | -// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | -// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | -// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | -// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | -// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | -// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | -// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | -// | | -// +-----------------------------------------------------------------------+ -// | Author: Jehan <jehan.marmottard@gmail.com | -// +-----------------------------------------------------------------------+ -// -// $Id$ - -/** -* Implementation of SCRAM-* SASL mechanisms. -* SCRAM mechanisms have 3 main steps (initial response, response to the server challenge, then server signature -* verification) which keep state-awareness. Therefore a single class instanciation must be done and reused for the whole -* authentication process. -* -* @author Jehan <jehan.marmottard@gmail.com> -* @access public -* @version 1.0 -* @package Auth_SASL -*/ - -require_once('Auth/SASL/Common.php'); - -class Auth_SASL_SCRAM extends Auth_SASL_Common -{ - /** - * Construct a SCRAM-H client where 'H' is a cryptographic hash function. - * - * @param string $hash The name cryptographic hash function 'H' as registered by IANA in the "Hash Function Textual - * Names" registry. - * @link http://www.iana.org/assignments/hash-function-text-names/hash-function-text-names.xml "Hash Function Textual - * Names" - * format of core PHP hash function. - * @access public - */ - function __construct($hash) - { - // Though I could be strict, I will actually also accept the naming used in the PHP core hash framework. - // For instance "sha1" is accepted, while the registered hash name should be "SHA-1". - $hash = strtolower($hash); - $hashes = array('md2' => 'md2', - 'md5' => 'md5', - 'sha-1' => 'sha1', - 'sha1' => 'sha1', - 'sha-224' > 'sha224', - 'sha224' > 'sha224', - 'sha-256' => 'sha256', - 'sha256' => 'sha256', - 'sha-384' => 'sha384', - 'sha384' => 'sha384', - 'sha-512' => 'sha512', - 'sha512' => 'sha512'); - if (function_exists('hash_hmac') && isset($hashes[$hash])) - { - $this->hash = create_function('$data', 'return hash("' . $hashes[$hash] . '", $data, TRUE);'); - $this->hmac = create_function('$key,$str,$raw', 'return hash_hmac("' . $hashes[$hash] . '", $str, $key, $raw);'); - } - elseif ($hash == 'md5') - { - $this->hash = create_function('$data', 'return md5($data, true);'); - $this->hmac = array($this, '_HMAC_MD5'); - } - elseif (in_array($hash, array('sha1', 'sha-1'))) - { - $this->hash = create_function('$data', 'return sha1($data, true);'); - $this->hmac = array($this, '_HMAC_SHA1'); - } - else - return PEAR::raiseError('Invalid SASL mechanism type'); - } - - /** - * Provides the (main) client response for SCRAM-H. - * - * @param string $authcid Authentication id (username) - * @param string $pass Password - * @param string $challenge The challenge sent by the server. - * If the challenge is NULL or an empty string, the result will be the "initial response". - * @param string $authzid Authorization id (username to proxy as) - * @return string|false The response (binary, NOT base64 encoded) - * @access public - */ - public function getResponse($authcid, $pass, $challenge = NULL, $authzid = NULL) - { - $authcid = $this->_formatName($authcid); - if (empty($authcid)) - { - return false; - } - if (!empty($authzid)) - { - $authzid = $this->_formatName($authzid); - if (empty($authzid)) - { - return false; - } - } - - if (empty($challenge)) - { - return $this->_generateInitialResponse($authcid, $authzid); - } - else - { - return $this->_generateResponse($challenge, $pass); - } - - } - - /** - * Prepare a name for inclusion in a SCRAM response. - * - * @param string $username a name to be prepared. - * @return string the reformated name. - * @access private - */ - private function _formatName($username) - { - // TODO: prepare through the SASLprep profile of the stringprep algorithm. - // See RFC-4013. - - $username = str_replace('=', '=3D', $username); - $username = str_replace(',', '=2C', $username); - return $username; - } - - /** - * Generate the initial response which can be either sent directly in the first message or as a response to an empty - * server challenge. - * - * @param string $authcid Prepared authentication identity. - * @param string $authzid Prepared authorization identity. - * @return string The SCRAM response to send. - * @access private - */ - private function _generateInitialResponse($authcid, $authzid) - { - $init_rep = ''; - $gs2_cbind_flag = 'n,'; // TODO: support channel binding. - $this->gs2_header = $gs2_cbind_flag . (!empty($authzid)? 'a=' . $authzid : '') . ','; - - // I must generate a client nonce and "save" it for later comparison on second response. - $this->cnonce = $this->_getCnonce(); - // XXX: in the future, when mandatory and/or optional extensions are defined in any updated RFC, - // this message can be updated. - $this->first_message_bare = 'n=' . $authcid . ',r=' . $this->cnonce; - return $this->gs2_header . $this->first_message_bare; - } - - /** - * Parses and verifies a non-empty SCRAM challenge. - * - * @param string $challenge The SCRAM challenge - * @return string|false The response to send; false in case of wrong challenge or if an initial response has not - * been generated first. - * @access private - */ - private function _generateResponse($challenge, $password) - { - // XXX: as I don't support mandatory extension, I would fail on them. - // And I simply ignore any optional extension. - $server_message_regexp = "#^r=([\x21-\x2B\x2D-\x7E]+),s=((?:[A-Za-z0-9/+]{4})*(?:[A-Za-z0-9]{3}=|[A-Xa-z0-9]{2}==)?),i=([0-9]*)(,[A-Za-z]=[^,])*$#"; - if (!isset($this->cnonce, $this->gs2_header) - || !preg_match($server_message_regexp, $challenge, $matches)) - { - return false; - } - $nonce = $matches[1]; - $salt = base64_decode($matches[2]); - if (!$salt) - { - // Invalid Base64. - return false; - } - $i = intval($matches[3]); - - $cnonce = substr($nonce, 0, strlen($this->cnonce)); - if ($cnonce <> $this->cnonce) - { - // Invalid challenge! Are we under attack? - return false; - } - - $channel_binding = 'c=' . base64_encode($this->gs2_header); // TODO: support channel binding. - $final_message = $channel_binding . ',r=' . $nonce; // XXX: no extension. - - // TODO: $password = $this->normalize($password); // SASLprep profile of stringprep. - $saltedPassword = $this->hi($password, $salt, $i); - $this->saltedPassword = $saltedPassword; - $clientKey = call_user_func($this->hmac, $saltedPassword, "Client Key", TRUE); - $storedKey = call_user_func($this->hash, $clientKey, TRUE); - $authMessage = $this->first_message_bare . ',' . $challenge . ',' . $final_message; - $this->authMessage = $authMessage; - $clientSignature = call_user_func($this->hmac, $storedKey, $authMessage, TRUE); - $clientProof = $clientKey ^ $clientSignature; - $proof = ',p=' . base64_encode($clientProof); - - return $final_message . $proof; - } - - /** - * SCRAM has also a server verification step. On a successful outcome, it will send additional data which must - * absolutely be checked against this function. If this fails, the entity which we are communicating with is probably - * not the server as it has not access to your ServerKey. - * - * @param string $data The additional data sent along a successful outcome. - * @return bool Whether the server has been authenticated. - * If false, the client must close the connection and consider to be under a MITM attack. - * @access public - */ - public function processOutcome($data) - { - $verifier_regexp = '#^v=((?:[A-Za-z0-9/+]{4})*(?:[A-Za-z0-9]{3}=|[A-Xa-z0-9]{2}==)?)$#'; - if (!isset($this->saltedPassword, $this->authMessage) - || !preg_match($verifier_regexp, $data, $matches)) - { - // This cannot be an outcome, you never sent the challenge's response. - return false; - } - - $verifier = $matches[1]; - $proposed_serverSignature = base64_decode($verifier); - $serverKey = call_user_func($this->hmac, $this->saltedPassword, "Server Key", true); - $serverSignature = call_user_func($this->hmac, $serverKey, $this->authMessage, TRUE); - return ($proposed_serverSignature === $serverSignature); - } - - /** - * Hi() call, which is essentially PBKDF2 (RFC-2898) with HMAC-H() as the pseudorandom function. - * - * @param string $str The string to hash. - * @param string $hash The hash value. - * @param int $i The iteration count. - * @access private - */ - private function hi($str, $salt, $i) - { - $int1 = "\0\0\0\1"; - $ui = call_user_func($this->hmac, $str, $salt . $int1, true); - $result = $ui; - for ($k = 1; $k < $i; $k++) - { - $ui = call_user_func($this->hmac, $str, $ui, true); - $result = $result ^ $ui; - } - return $result; - } - - - /** - * Creates the client nonce for the response - * - * @return string The cnonce value - * @access private - * @author Richard Heyes <richard@php.net> - */ - private function _getCnonce() - { - // TODO: I reused the nonce function from the DigestMD5 class. - // I should probably make this a protected function in Common. - if (@file_exists('/dev/urandom') && $fd = @fopen('/dev/urandom', 'r')) { - return base64_encode(fread($fd, 32)); - - } elseif (@file_exists('/dev/random') && $fd = @fopen('/dev/random', 'r')) { - return base64_encode(fread($fd, 32)); - - } else { - $str = ''; - for ($i=0; $i<32; $i++) { - $str .= chr(mt_rand(0, 255)); - } - - return base64_encode($str); - } - } - -} - -?> diff --git a/program/lib/Crypt/GPG.php b/program/lib/Crypt/GPG.php deleted file mode 100644 index 5c2231289..000000000 --- a/program/lib/Crypt/GPG.php +++ /dev/null @@ -1,2386 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Crypt_GPG is a package to use GPG from PHP - * - * This package provides an object oriented interface to GNU Privacy - * Guard (GPG). It requires the GPG executable to be on the system. - * - * Though GPG can support symmetric-key cryptography, this package is intended - * only to facilitate public-key cryptography. - * - * This file contains the main GPG class. The class in this file lets you - * encrypt, decrypt, sign and verify data; import and delete keys; and perform - * other useful GPG tasks. - * - * Example usage: - * <code> - * <?php - * // encrypt some data - * $gpg = new Crypt_GPG(); - * $gpg->addEncryptKey($mySecretKeyId); - * $encryptedData = $gpg->encrypt($data); - * ?> - * </code> - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category Encryption - * @package Crypt_GPG - * @author Nathan Fredrickson <nathan@silverorange.com> - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2005-2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version CVS: $Id$ - * @link http://pear.php.net/package/Crypt_GPG - * @link http://pear.php.net/manual/en/package.encryption.crypt-gpg.php - * @link http://www.gnupg.org/ - */ - -/** - * Base class for GPG methods - */ -require_once 'Crypt/GPGAbstract.php'; - -/** - * Signature handler class - */ -require_once 'Crypt/GPG/VerifyStatusHandler.php'; - -/** - * Decryption handler class - */ -require_once 'Crypt/GPG/DecryptStatusHandler.php'; - -// {{{ class Crypt_GPG - -/** - * A class to use GPG from PHP - * - * This class provides an object oriented interface to GNU Privacy Guard (GPG). - * - * Though GPG can support symmetric-key cryptography, this class is intended - * only to facilitate public-key cryptography. - * - * @category Encryption - * @package Crypt_GPG - * @author Nathan Fredrickson <nathan@silverorange.com> - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2005-2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - * @link http://www.gnupg.org/ - */ -class Crypt_GPG extends Crypt_GPGAbstract -{ - // {{{ class constants for data signing modes - - /** - * Signing mode for normal signing of data. The signed message will not - * be readable without special software. - * - * This is the default signing mode. - * - * @see Crypt_GPG::sign() - * @see Crypt_GPG::signFile() - */ - const SIGN_MODE_NORMAL = 1; - - /** - * Signing mode for clearsigning data. Clearsigned signatures are ASCII - * armored data and are readable without special software. If the signed - * message is unencrypted, the message will still be readable. The message - * text will be in the original encoding. - * - * @see Crypt_GPG::sign() - * @see Crypt_GPG::signFile() - */ - const SIGN_MODE_CLEAR = 2; - - /** - * Signing mode for creating a detached signature. When using detached - * signatures, only the signature data is returned. The original message - * text may be distributed separately from the signature data. This is - * useful for miltipart/signed email messages as per - * {@link http://www.ietf.org/rfc/rfc3156.txt RFC 3156}. - * - * @see Crypt_GPG::sign() - * @see Crypt_GPG::signFile() - */ - const SIGN_MODE_DETACHED = 3; - - // }}} - // {{{ class constants for fingerprint formats - - /** - * No formatting is performed. - * - * Example: C3BC615AD9C766E5A85C1F2716D27458B1BBA1C4 - * - * @see Crypt_GPG::getFingerprint() - */ - const FORMAT_NONE = 1; - - /** - * Fingerprint is formatted in the format used by the GnuPG gpg command's - * default output. - * - * Example: C3BC 615A D9C7 66E5 A85C 1F27 16D2 7458 B1BB A1C4 - * - * @see Crypt_GPG::getFingerprint() - */ - const FORMAT_CANONICAL = 2; - - /** - * Fingerprint is formatted in the format used when displaying X.509 - * certificates - * - * Example: C3:BC:61:5A:D9:C7:66:E5:A8:5C:1F:27:16:D2:74:58:B1:BB:A1:C4 - * - * @see Crypt_GPG::getFingerprint() - */ - const FORMAT_X509 = 3; - - // }}} - // {{{ class constants for boolean options - - /** - * Use to specify ASCII armored mode for returned data - */ - const ARMOR_ASCII = true; - - /** - * Use to specify binary mode for returned data - */ - const ARMOR_BINARY = false; - - /** - * Use to specify that line breaks in signed text should be normalized - */ - const TEXT_NORMALIZED = true; - - /** - * Use to specify that line breaks in signed text should not be normalized - */ - const TEXT_RAW = false; - - // }}} - // {{{ protected class properties - - /** - * Engine used to control the GPG subprocess - * - * @var Crypt_GPG_Engine - * - * @see Crypt_GPG::setEngine() - */ - protected $engine = null; - - /** - * Keys used to encrypt - * - * The array is of the form: - * <code> - * array( - * $key_id => array( - * 'fingerprint' => $fingerprint, - * 'passphrase' => null - * ) - * ); - * </code> - * - * @var array - * @see Crypt_GPG::addEncryptKey() - * @see Crypt_GPG::clearEncryptKeys() - */ - protected $encryptKeys = array(); - - /** - * Keys used to decrypt - * - * The array is of the form: - * <code> - * array( - * $key_id => array( - * 'fingerprint' => $fingerprint, - * 'passphrase' => $passphrase - * ) - * ); - * </code> - * - * @var array - * @see Crypt_GPG::addSignKey() - * @see Crypt_GPG::clearSignKeys() - */ - protected $signKeys = array(); - - /** - * Keys used to sign - * - * The array is of the form: - * <code> - * array( - * $key_id => array( - * 'fingerprint' => $fingerprint, - * 'passphrase' => $passphrase - * ) - * ); - * </code> - * - * @var array - * @see Crypt_GPG::addDecryptKey() - * @see Crypt_GPG::clearDecryptKeys() - */ - protected $decryptKeys = array(); - - // }}} - // {{{ importKey() - - /** - * Imports a public or private key into the keyring - * - * Keys may be removed from the keyring using - * {@link Crypt_GPG::deletePublicKey()} or - * {@link Crypt_GPG::deletePrivateKey()}. - * - * @param string $data the key data to be imported. - * - * @return array an associative array containing the following elements: - * - <kbd>fingerprint</kbd> - the fingerprint of the - * imported key, - * - <kbd>public_imported</kbd> - the number of public - * keys imported, - * - <kbd>public_unchanged</kbd> - the number of unchanged - * public keys, - * - <kbd>private_imported</kbd> - the number of private - * keys imported, - * - <kbd>private_unchanged</kbd> - the number of unchanged - * private keys. - * - * @throws Crypt_GPG_NoDataException if the key data is missing or if the - * data is is not valid key data. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - */ - public function importKey($data) - { - return $this->_importKey($data, false); - } - - // }}} - // {{{ importKeyFile() - - /** - * Imports a public or private key file into the keyring - * - * Keys may be removed from the keyring using - * {@link Crypt_GPG::deletePublicKey()} or - * {@link Crypt_GPG::deletePrivateKey()}. - * - * @param string $filename the key file to be imported. - * - * @return array an associative array containing the following elements: - * - <kbd>fingerprint</kbd> - the fingerprint of the - * imported key, - * - <kbd>public_imported</kbd> - the number of public - * keys imported, - * - <kbd>public_unchanged</kbd> - the number of unchanged - * public keys, - * - <kbd>private_imported</kbd> - the number of private - * keys imported, - * - <kbd>private_unchanged</kbd> - the number of unchanged - * private keys. - * private keys. - * - * @throws Crypt_GPG_NoDataException if the key data is missing or if the - * data is is not valid key data. - * - * @throws Crypt_GPG_FileException if the key file is not readable. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - */ - public function importKeyFile($filename) - { - return $this->_importKey($filename, true); - } - - // }}} - // {{{ exportPublicKey() - - /** - * Exports a public key from the keyring - * - * The exported key remains on the keyring. To delete the public key, use - * {@link Crypt_GPG::deletePublicKey()}. - * - * If more than one key fingerprint is available for the specified - * <kbd>$keyId</kbd> (for example, if you use a non-unique uid) only the - * first public key is exported. - * - * @param string $keyId either the full uid of the public key, the email - * part of the uid of the public key or the key id of - * the public key. For example, - * "Test User (example) <test@example.com>", - * "test@example.com" or a hexadecimal string. - * @param boolean $armor optional. If true, ASCII armored data is returned; - * otherwise, binary data is returned. Defaults to - * true. - * - * @return string the public key data. - * - * @throws Crypt_GPG_KeyNotFoundException if a public key with the given - * <kbd>$keyId</kbd> is not found. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - */ - public function exportPublicKey($keyId, $armor = true) - { - $fingerprint = $this->getFingerprint($keyId); - - if ($fingerprint === null) { - throw new Crypt_GPG_KeyNotFoundException( - 'Public key not found: ' . $keyId, - self::ERROR_KEY_NOT_FOUND, - $keyId - ); - } - - $keyData = ''; - $operation = '--export ' . escapeshellarg($fingerprint); - $arguments = ($armor) ? array('--armor') : array(); - - $this->engine->reset(); - $this->engine->setOutput($keyData); - $this->engine->setOperation($operation, $arguments); - $this->engine->run(); - - $code = $this->engine->getErrorCode(); - - if ($code !== self::ERROR_NONE) { - throw new Crypt_GPG_Exception( - 'Unknown error exporting public key. Please use the ' . - '\'debug\' option when creating the Crypt_GPG object, and ' . - 'file a bug report at ' . self::BUG_URI, - $code - ); - } - - return $keyData; - } - - // }}} - // {{{ deletePublicKey() - - /** - * Deletes a public key from the keyring - * - * If more than one key fingerprint is available for the specified - * <kbd>$keyId</kbd> (for example, if you use a non-unique uid) only the - * first public key is deleted. - * - * The private key must be deleted first or an exception will be thrown. - * See {@link Crypt_GPG::deletePrivateKey()}. - * - * @param string $keyId either the full uid of the public key, the email - * part of the uid of the public key or the key id of - * the public key. For example, - * "Test User (example) <test@example.com>", - * "test@example.com" or a hexadecimal string. - * - * @return void - * - * @throws Crypt_GPG_KeyNotFoundException if a public key with the given - * <kbd>$keyId</kbd> is not found. - * - * @throws Crypt_GPG_DeletePrivateKeyException if the specified public key - * has an associated private key on the keyring. The private key - * must be deleted first. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - */ - public function deletePublicKey($keyId) - { - $fingerprint = $this->getFingerprint($keyId); - - if ($fingerprint === null) { - throw new Crypt_GPG_KeyNotFoundException( - 'Public key not found: ' . $keyId, - self::ERROR_KEY_NOT_FOUND, - $keyId - ); - } - - $operation = '--delete-key ' . escapeshellarg($fingerprint); - $arguments = array( - '--batch', - '--yes' - ); - - $this->engine->reset(); - $this->engine->setOperation($operation, $arguments); - $this->engine->run(); - - $code = $this->engine->getErrorCode(); - - switch ($code) { - case self::ERROR_NONE: - break; - case self::ERROR_DELETE_PRIVATE_KEY: - throw new Crypt_GPG_DeletePrivateKeyException( - 'Private key must be deleted before public key can be ' . - 'deleted.', - $code, - $keyId - ); - default: - throw new Crypt_GPG_Exception( - 'Unknown error deleting public key. Please use the ' . - '\'debug\' option when creating the Crypt_GPG object, and ' . - 'file a bug report at ' . self::BUG_URI, - $code - ); - } - } - - // }}} - // {{{ deletePrivateKey() - - /** - * Deletes a private key from the keyring - * - * If more than one key fingerprint is available for the specified - * <kbd>$keyId</kbd> (for example, if you use a non-unique uid) only the - * first private key is deleted. - * - * Calls GPG with the <kbd>--delete-secret-key</kbd> command. - * - * @param string $keyId either the full uid of the private key, the email - * part of the uid of the private key or the key id of - * the private key. For example, - * "Test User (example) <test@example.com>", - * "test@example.com" or a hexadecimal string. - * - * @return void - * - * @throws Crypt_GPG_KeyNotFoundException if a private key with the given - * <kbd>$keyId</kbd> is not found. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - */ - public function deletePrivateKey($keyId) - { - $fingerprint = $this->getFingerprint($keyId); - - if ($fingerprint === null) { - throw new Crypt_GPG_KeyNotFoundException( - 'Private key not found: ' . $keyId, - self::ERROR_KEY_NOT_FOUND, - $keyId - ); - } - - $operation = '--delete-secret-key ' . escapeshellarg($fingerprint); - $arguments = array( - '--batch', - '--yes' - ); - - $this->engine->reset(); - $this->engine->setOperation($operation, $arguments); - $this->engine->run(); - - $code = $this->engine->getErrorCode(); - - switch ($code) { - case self::ERROR_NONE: - break; - case self::ERROR_KEY_NOT_FOUND: - throw new Crypt_GPG_KeyNotFoundException( - 'Private key not found: ' . $keyId, - $code, - $keyId - ); - default: - throw new Crypt_GPG_Exception( - 'Unknown error deleting private key. Please use the ' . - '\'debug\' option when creating the Crypt_GPG object, and ' . - 'file a bug report at ' . self::BUG_URI, - $code - ); - } - } - - // }}} - // {{{ getKeys() - - /** - * Gets the available keys in the keyring - * - * Calls GPG with the <kbd>--list-keys</kbd> command and grabs keys. See - * the first section of <b>doc/DETAILS</b> in the - * {@link http://www.gnupg.org/download/ GPG package} for a detailed - * description of how the GPG command output is parsed. - * - * @param string $keyId optional. Only keys with that match the specified - * pattern are returned. The pattern may be part of - * a user id, a key id or a key fingerprint. If not - * specified, all keys are returned. - * - * @return array an array of {@link Crypt_GPG_Key} objects. If no keys - * match the specified <kbd>$keyId</kbd> an empty array is - * returned. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - * - * @see Crypt_GPG_Key - */ - public function getKeys($keyId = '') - { - return parent::_getKeys($keyId); - } - - // }}} - // {{{ getFingerprint() - - /** - * Gets a key fingerprint from the keyring - * - * If more than one key fingerprint is available (for example, if you use - * a non-unique user id) only the first key fingerprint is returned. - * - * Calls the GPG <kbd>--list-keys</kbd> command with the - * <kbd>--with-fingerprint</kbd> option to retrieve a public key - * fingerprint. - * - * @param string $keyId either the full user id of the key, the email - * part of the user id of the key, or the key id of - * the key. For example, - * "Test User (example) <test@example.com>", - * "test@example.com" or a hexadecimal string. - * @param integer $format optional. How the fingerprint should be formatted. - * Use {@link Crypt_GPG::FORMAT_X509} for X.509 - * certificate format, - * {@link Crypt_GPG::FORMAT_CANONICAL} for the format - * used by GnuPG output and - * {@link Crypt_GPG::FORMAT_NONE} for no formatting. - * Defaults to <code>Crypt_GPG::FORMAT_NONE</code>. - * - * @return string the fingerprint of the key, or null if no fingerprint - * is found for the given <kbd>$keyId</kbd>. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - */ - public function getFingerprint($keyId, $format = self::FORMAT_NONE) - { - $output = ''; - $operation = '--list-keys ' . escapeshellarg($keyId); - $arguments = array( - '--with-colons', - '--with-fingerprint' - ); - - $this->engine->reset(); - $this->engine->setOutput($output); - $this->engine->setOperation($operation, $arguments); - $this->engine->run(); - - $code = $this->engine->getErrorCode(); - - switch ($code) { - case self::ERROR_NONE: - case self::ERROR_KEY_NOT_FOUND: - // ignore not found key errors - break; - default: - throw new Crypt_GPG_Exception( - 'Unknown error getting key fingerprint. Please use the ' . - '\'debug\' option when creating the Crypt_GPG object, and ' . - 'file a bug report at ' . self::BUG_URI, - $code - ); - } - - $fingerprint = null; - - $lines = explode(PHP_EOL, $output); - foreach ($lines as $line) { - if (substr($line, 0, 3) == 'fpr') { - $lineExp = explode(':', $line); - $fingerprint = $lineExp[9]; - - switch ($format) { - case self::FORMAT_CANONICAL: - $fingerprintExp = str_split($fingerprint, 4); - $format = '%s %s %s %s %s %s %s %s %s %s'; - $fingerprint = vsprintf($format, $fingerprintExp); - break; - - case self::FORMAT_X509: - $fingerprintExp = str_split($fingerprint, 2); - $fingerprint = implode(':', $fingerprintExp); - break; - } - - break; - } - } - - return $fingerprint; - } - - // }}} - // {{{ encrypt() - - /** - * Encrypts string data - * - * Data is ASCII armored by default but may optionally be returned as - * binary. - * - * @param string $data the data to be encrypted. - * @param boolean $armor optional. If true, ASCII armored data is returned; - * otherwise, binary data is returned. Defaults to - * true. - * - * @return string the encrypted data. - * - * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified. - * See {@link Crypt_GPG::addEncryptKey()}. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - * - * @sensitive $data - */ - public function encrypt($data, $armor = self::ARMOR_ASCII) - { - return $this->_encrypt($data, false, null, $armor); - } - - // }}} - // {{{ encryptFile() - - /** - * Encrypts a file - * - * Encrypted data is ASCII armored by default but may optionally be saved - * as binary. - * - * @param string $filename the filename of the file to encrypt. - * @param string $encryptedFile optional. The filename of the file in - * which to store the encrypted data. If null - * or unspecified, the encrypted data is - * returned as a string. - * @param boolean $armor optional. If true, ASCII armored data is - * returned; otherwise, binary data is - * returned. Defaults to true. - * - * @return void|string if the <kbd>$encryptedFile</kbd> parameter is null, - * a string containing the encrypted data is returned. - * - * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified. - * See {@link Crypt_GPG::addEncryptKey()}. - * - * @throws Crypt_GPG_FileException if the output file is not writeable or - * if the input file is not readable. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - */ - public function encryptFile( - $filename, - $encryptedFile = null, - $armor = self::ARMOR_ASCII - ) { - return $this->_encrypt($filename, true, $encryptedFile, $armor); - } - - // }}} - // {{{ encryptAndSign() - - /** - * Encrypts and signs data - * - * Data is encrypted and signed in a single pass. - * - * NOTE: Until GnuPG version 1.4.10, it was not possible to verify - * encrypted-signed data without decrypting it at the same time. If you try - * to use {@link Crypt_GPG::verify()} method on encrypted-signed data with - * earlier GnuPG versions, you will get an error. Please use - * {@link Crypt_GPG::decryptAndVerify()} to verify encrypted-signed data. - * - * @param string $data the data to be encrypted and signed. - * @param boolean $armor optional. If true, ASCII armored data is returned; - * otherwise, binary data is returned. Defaults to - * true. - * - * @return string the encrypted signed data. - * - * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified - * or if no signing key is specified. See - * {@link Crypt_GPG::addEncryptKey()} and - * {@link Crypt_GPG::addSignKey()}. - * - * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is - * incorrect or if a required passphrase is not specified. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - * - * @see Crypt_GPG::decryptAndVerify() - */ - public function encryptAndSign($data, $armor = self::ARMOR_ASCII) - { - return $this->_encryptAndSign($data, false, null, $armor); - } - - // }}} - // {{{ encryptAndSignFile() - - /** - * Encrypts and signs a file - * - * The file is encrypted and signed in a single pass. - * - * NOTE: Until GnuPG version 1.4.10, it was not possible to verify - * encrypted-signed files without decrypting them at the same time. If you - * try to use {@link Crypt_GPG::verify()} method on encrypted-signed files - * with earlier GnuPG versions, you will get an error. Please use - * {@link Crypt_GPG::decryptAndVerifyFile()} to verify encrypted-signed - * files. - * - * @param string $filename the name of the file containing the data to - * be encrypted and signed. - * @param string $signedFile optional. The name of the file in which the - * encrypted, signed data should be stored. If - * null or unspecified, the encrypted, signed - * data is returned as a string. - * @param boolean $armor optional. If true, ASCII armored data is - * returned; otherwise, binary data is returned. - * Defaults to true. - * - * @return void|string if the <kbd>$signedFile</kbd> parameter is null, a - * string containing the encrypted, signed data is - * returned. - * - * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified - * or if no signing key is specified. See - * {@link Crypt_GPG::addEncryptKey()} and - * {@link Crypt_GPG::addSignKey()}. - * - * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is - * incorrect or if a required passphrase is not specified. - * - * @throws Crypt_GPG_FileException if the output file is not writeable or - * if the input file is not readable. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - * - * @see Crypt_GPG::decryptAndVerifyFile() - */ - public function encryptAndSignFile( - $filename, - $signedFile = null, - $armor = self::ARMOR_ASCII - ) { - return $this->_encryptAndSign($filename, true, $signedFile, $armor); - } - - // }}} - // {{{ decrypt() - - /** - * Decrypts string data - * - * This method assumes the required private key is available in the keyring - * and throws an exception if the private key is not available. To add a - * private key to the keyring, use the {@link Crypt_GPG::importKey()} or - * {@link Crypt_GPG::importKeyFile()} methods. - * - * @param string $encryptedData the data to be decrypted. - * - * @return string the decrypted data. - * - * @throws Crypt_GPG_KeyNotFoundException if the private key needed to - * decrypt the data is not in the user's keyring. - * - * @throws Crypt_GPG_NoDataException if specified data does not contain - * GPG encrypted data. - * - * @throws Crypt_GPG_BadPassphraseException if a required passphrase is - * incorrect or if a required passphrase is not specified. See - * {@link Crypt_GPG::addDecryptKey()}. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - */ - public function decrypt($encryptedData) - { - return $this->_decrypt($encryptedData, false, null); - } - - // }}} - // {{{ decryptFile() - - /** - * Decrypts a file - * - * This method assumes the required private key is available in the keyring - * and throws an exception if the private key is not available. To add a - * private key to the keyring, use the {@link Crypt_GPG::importKey()} or - * {@link Crypt_GPG::importKeyFile()} methods. - * - * @param string $encryptedFile the name of the encrypted file data to - * decrypt. - * @param string $decryptedFile optional. The name of the file to which the - * decrypted data should be written. If null - * or unspecified, the decrypted data is - * returned as a string. - * - * @return void|string if the <kbd>$decryptedFile</kbd> parameter is null, - * a string containing the decrypted data is returned. - * - * @throws Crypt_GPG_KeyNotFoundException if the private key needed to - * decrypt the data is not in the user's keyring. - * - * @throws Crypt_GPG_NoDataException if specified data does not contain - * GPG encrypted data. - * - * @throws Crypt_GPG_BadPassphraseException if a required passphrase is - * incorrect or if a required passphrase is not specified. See - * {@link Crypt_GPG::addDecryptKey()}. - * - * @throws Crypt_GPG_FileException if the output file is not writeable or - * if the input file is not readable. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - */ - public function decryptFile($encryptedFile, $decryptedFile = null) - { - return $this->_decrypt($encryptedFile, true, $decryptedFile); - } - - // }}} - // {{{ decryptAndVerify() - - /** - * Decrypts and verifies string data - * - * This method assumes the required private key is available in the keyring - * and throws an exception if the private key is not available. To add a - * private key to the keyring, use the {@link Crypt_GPG::importKey()} or - * {@link Crypt_GPG::importKeyFile()} methods. - * - * @param string $encryptedData the encrypted, signed data to be decrypted - * and verified. - * - * @return array two element array. The array has an element 'data' - * containing the decrypted data and an element - * 'signatures' containing an array of - * {@link Crypt_GPG_Signature} objects for the signed data. - * - * @throws Crypt_GPG_KeyNotFoundException if the private key needed to - * decrypt the data is not in the user's keyring. - * - * @throws Crypt_GPG_NoDataException if specified data does not contain - * GPG encrypted data. - * - * @throws Crypt_GPG_BadPassphraseException if a required passphrase is - * incorrect or if a required passphrase is not specified. See - * {@link Crypt_GPG::addDecryptKey()}. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - */ - public function decryptAndVerify($encryptedData) - { - return $this->_decryptAndVerify($encryptedData, false, null); - } - - // }}} - // {{{ decryptAndVerifyFile() - - /** - * Decrypts and verifies a signed, encrypted file - * - * This method assumes the required private key is available in the keyring - * and throws an exception if the private key is not available. To add a - * private key to the keyring, use the {@link Crypt_GPG::importKey()} or - * {@link Crypt_GPG::importKeyFile()} methods. - * - * @param string $encryptedFile the name of the signed, encrypted file to - * to decrypt and verify. - * @param string $decryptedFile optional. The name of the file to which the - * decrypted data should be written. If null - * or unspecified, the decrypted data is - * returned in the results array. - * - * @return array two element array. The array has an element 'data' - * containing the decrypted data and an element - * 'signatures' containing an array of - * {@link Crypt_GPG_Signature} objects for the signed data. - * If the decrypted data is written to a file, the 'data' - * element is null. - * - * @throws Crypt_GPG_KeyNotFoundException if the private key needed to - * decrypt the data is not in the user's keyring. - * - * @throws Crypt_GPG_NoDataException if specified data does not contain - * GPG encrypted data. - * - * @throws Crypt_GPG_BadPassphraseException if a required passphrase is - * incorrect or if a required passphrase is not specified. See - * {@link Crypt_GPG::addDecryptKey()}. - * - * @throws Crypt_GPG_FileException if the output file is not writeable or - * if the input file is not readable. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - */ - public function decryptAndVerifyFile($encryptedFile, $decryptedFile = null) - { - return $this->_decryptAndVerify($encryptedFile, true, $decryptedFile); - } - - // }}} - // {{{ sign() - - /** - * Signs data - * - * Data may be signed using any one of the three available signing modes: - * - {@link Crypt_GPG::SIGN_MODE_NORMAL} - * - {@link Crypt_GPG::SIGN_MODE_CLEAR} - * - {@link Crypt_GPG::SIGN_MODE_DETACHED} - * - * @param string $data the data to be signed. - * @param boolean $mode optional. The data signing mode to use. Should - * be one of {@link Crypt_GPG::SIGN_MODE_NORMAL}, - * {@link Crypt_GPG::SIGN_MODE_CLEAR} or - * {@link Crypt_GPG::SIGN_MODE_DETACHED}. If not - * specified, defaults to - * <kbd>Crypt_GPG::SIGN_MODE_NORMAL</kbd>. - * @param boolean $armor optional. If true, ASCII armored data is - * returned; otherwise, binary data is returned. - * Defaults to true. This has no effect if the - * mode <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is - * used. - * @param boolean $textmode optional. If true, line-breaks in signed data - * are normalized. Use this option when signing - * e-mail, or for greater compatibility between - * systems with different line-break formats. - * Defaults to false. This has no effect if the - * mode <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is - * used as clear-signing always uses textmode. - * - * @return string the signed data, or the signature data if a detached - * signature is requested. - * - * @throws Crypt_GPG_KeyNotFoundException if no signing key is specified. - * See {@link Crypt_GPG::addSignKey()}. - * - * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is - * incorrect or if a required passphrase is not specified. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - */ - public function sign( - $data, - $mode = self::SIGN_MODE_NORMAL, - $armor = self::ARMOR_ASCII, - $textmode = self::TEXT_RAW - ) { - return $this->_sign($data, false, null, $mode, $armor, $textmode); - } - - // }}} - // {{{ signFile() - - /** - * Signs a file - * - * The file may be signed using any one of the three available signing - * modes: - * - {@link Crypt_GPG::SIGN_MODE_NORMAL} - * - {@link Crypt_GPG::SIGN_MODE_CLEAR} - * - {@link Crypt_GPG::SIGN_MODE_DETACHED} - * - * @param string $filename the name of the file containing the data to - * be signed. - * @param string $signedFile optional. The name of the file in which the - * signed data should be stored. If null or - * unspecified, the signed data is returned as a - * string. - * @param boolean $mode optional. The data signing mode to use. Should - * be one of {@link Crypt_GPG::SIGN_MODE_NORMAL}, - * {@link Crypt_GPG::SIGN_MODE_CLEAR} or - * {@link Crypt_GPG::SIGN_MODE_DETACHED}. If not - * specified, defaults to - * <kbd>Crypt_GPG::SIGN_MODE_NORMAL</kbd>. - * @param boolean $armor optional. If true, ASCII armored data is - * returned; otherwise, binary data is returned. - * Defaults to true. This has no effect if the - * mode <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is - * used. - * @param boolean $textmode optional. If true, line-breaks in signed data - * are normalized. Use this option when signing - * e-mail, or for greater compatibility between - * systems with different line-break formats. - * Defaults to false. This has no effect if the - * mode <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is - * used as clear-signing always uses textmode. - * - * @return void|string if the <kbd>$signedFile</kbd> parameter is null, a - * string containing the signed data (or the signature - * data if a detached signature is requested) is - * returned. - * - * @throws Crypt_GPG_KeyNotFoundException if no signing key is specified. - * See {@link Crypt_GPG::addSignKey()}. - * - * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is - * incorrect or if a required passphrase is not specified. - * - * @throws Crypt_GPG_FileException if the output file is not writeable or - * if the input file is not readable. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - */ - public function signFile( - $filename, - $signedFile = null, - $mode = self::SIGN_MODE_NORMAL, - $armor = self::ARMOR_ASCII, - $textmode = self::TEXT_RAW - ) { - return $this->_sign( - $filename, - true, - $signedFile, - $mode, - $armor, - $textmode - ); - } - - // }}} - // {{{ verify() - - /** - * Verifies signed data - * - * The {@link Crypt_GPG::decrypt()} method may be used to get the original - * message if the signed data is not clearsigned and does not use a - * detached signature. - * - * @param string $signedData the signed data to be verified. - * @param string $signature optional. If verifying data signed using a - * detached signature, this must be the detached - * signature data. The data that was signed is - * specified in <kbd>$signedData</kbd>. - * - * @return array an array of {@link Crypt_GPG_Signature} objects for the - * signed data. For each signature that is valid, the - * {@link Crypt_GPG_Signature::isValid()} will return true. - * - * @throws Crypt_GPG_NoDataException if the provided data is not signed - * data. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - * - * @see Crypt_GPG_Signature - */ - public function verify($signedData, $signature = '') - { - return $this->_verify($signedData, false, $signature); - } - - // }}} - // {{{ verifyFile() - - /** - * Verifies a signed file - * - * The {@link Crypt_GPG::decryptFile()} method may be used to get the - * original message if the signed data is not clearsigned and does not use - * a detached signature. - * - * @param string $filename the signed file to be verified. - * @param string $signature optional. If verifying a file signed using a - * detached signature, this must be the detached - * signature data. The file that was signed is - * specified in <kbd>$filename</kbd>. - * - * @return array an array of {@link Crypt_GPG_Signature} objects for the - * signed data. For each signature that is valid, the - * {@link Crypt_GPG_Signature::isValid()} will return true. - * - * @throws Crypt_GPG_NoDataException if the provided data is not signed - * data. - * - * @throws Crypt_GPG_FileException if the input file is not readable. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - * - * @see Crypt_GPG_Signature - */ - public function verifyFile($filename, $signature = '') - { - return $this->_verify($filename, true, $signature); - } - - // }}} - // {{{ addDecryptKey() - - /** - * Adds a key to use for decryption - * - * @param mixed $key the key to use. This may be a key identifier, - * user id, fingerprint, {@link Crypt_GPG_Key} or - * {@link Crypt_GPG_SubKey}. The key must be able - * to encrypt. - * @param string $passphrase optional. The passphrase of the key required - * for decryption. - * - * @return Crypt_GPG the current object, for fluent interface. - * - * @see Crypt_GPG::decrypt() - * @see Crypt_GPG::decryptFile() - * @see Crypt_GPG::clearDecryptKeys() - * @see Crypt_GPG::_addKey() - * @see Crypt_GPG_DecryptStatusHandler - * - * @sensitive $passphrase - */ - public function addDecryptKey($key, $passphrase = null) - { - $this->_addKey($this->decryptKeys, true, false, $key, $passphrase); - return $this; - } - - // }}} - // {{{ addEncryptKey() - - /** - * Adds a key to use for encryption - * - * @param mixed $key the key to use. This may be a key identifier, user id - * user id, fingerprint, {@link Crypt_GPG_Key} or - * {@link Crypt_GPG_SubKey}. The key must be able to - * encrypt. - * - * @return Crypt_GPG the current object, for fluent interface. - * - * @see Crypt_GPG::encrypt() - * @see Crypt_GPG::encryptFile() - * @see Crypt_GPG::clearEncryptKeys() - * @see Crypt_GPG::_addKey() - */ - public function addEncryptKey($key) - { - $this->_addKey($this->encryptKeys, true, false, $key); - return $this; - } - - // }}} - // {{{ addSignKey() - - /** - * Adds a key to use for signing - * - * @param mixed $key the key to use. This may be a key identifier, - * user id, fingerprint, {@link Crypt_GPG_Key} or - * {@link Crypt_GPG_SubKey}. The key must be able - * to sign. - * @param string $passphrase optional. The passphrase of the key required - * for signing. - * - * @return Crypt_GPG the current object, for fluent interface. - * - * @see Crypt_GPG::sign() - * @see Crypt_GPG::signFile() - * @see Crypt_GPG::clearSignKeys() - * @see Crypt_GPG::handleSignStatus() - * @see Crypt_GPG::_addKey() - * - * @sensitive $passphrase - */ - public function addSignKey($key, $passphrase = null) - { - $this->_addKey($this->signKeys, false, true, $key, $passphrase); - return $this; - } - - // }}} - // {{{ clearDecryptKeys() - - /** - * Clears all decryption keys - * - * @return Crypt_GPG the current object, for fluent interface. - * - * @see Crypt_GPG::decrypt() - * @see Crypt_GPG::addDecryptKey() - */ - public function clearDecryptKeys() - { - $this->decryptKeys = array(); - return $this; - } - - // }}} - // {{{ clearEncryptKeys() - - /** - * Clears all encryption keys - * - * @return Crypt_GPG the current object, for fluent interface. - * - * @see Crypt_GPG::encrypt() - * @see Crypt_GPG::addEncryptKey() - */ - public function clearEncryptKeys() - { - $this->encryptKeys = array(); - return $this; - } - - // }}} - // {{{ clearSignKeys() - - /** - * Clears all signing keys - * - * @return Crypt_GPG the current object, for fluent interface. - * - * @see Crypt_GPG::sign() - * @see Crypt_GPG::addSignKey() - */ - public function clearSignKeys() - { - $this->signKeys = array(); - return $this; - } - - // }}} - // {{{ handleSignStatus() - - /** - * Handles the status output from GPG for the sign operation - * - * This method is responsible for sending the passphrase commands when - * required by the {@link Crypt_GPG::sign()} method. See <b>doc/DETAILS</b> - * in the {@link http://www.gnupg.org/download/ GPG distribution} for - * detailed information on GPG's status output. - * - * @param string $line the status line to handle. - * - * @return void - * - * @see Crypt_GPG::sign() - */ - public function handleSignStatus($line) - { - $tokens = explode(' ', $line); - switch ($tokens[0]) { - case 'NEED_PASSPHRASE': - $subKeyId = $tokens[1]; - if (array_key_exists($subKeyId, $this->signKeys)) { - $passphrase = $this->signKeys[$subKeyId]['passphrase']; - $this->engine->sendCommand($passphrase); - } else { - $this->engine->sendCommand(''); - } - break; - } - } - - // }}} - // {{{ handleImportKeyStatus() - - /** - * Handles the status output from GPG for the import operation - * - * This method is responsible for building the result array that is - * returned from the {@link Crypt_GPG::importKey()} method. See - * <b>doc/DETAILS</b> in the - * {@link http://www.gnupg.org/download/ GPG distribution} for detailed - * information on GPG's status output. - * - * @param string $line the status line to handle. - * @param array &$result the current result array being processed. - * - * @return void - * - * @see Crypt_GPG::importKey() - * @see Crypt_GPG::importKeyFile() - * @see Crypt_GPG_Engine::addStatusHandler() - */ - public function handleImportKeyStatus($line, array &$result) - { - $tokens = explode(' ', $line); - switch ($tokens[0]) { - case 'IMPORT_OK': - $result['fingerprint'] = $tokens[2]; - break; - - case 'IMPORT_RES': - $result['public_imported'] = intval($tokens[3]); - $result['public_unchanged'] = intval($tokens[5]); - $result['private_imported'] = intval($tokens[11]); - $result['private_unchanged'] = intval($tokens[12]); - break; - } - } - - // }}} - // {{{ _addKey() - - /** - * Adds a key to one of the internal key arrays - * - * This handles resolving full key objects from the provided - * <kbd>$key</kbd> value. - * - * @param array &$array the array to which the key should be added. - * @param boolean $encrypt whether or not the key must be able to - * encrypt. - * @param boolean $sign whether or not the key must be able to sign. - * @param mixed $key the key to add. This may be a key identifier, - * user id, fingerprint, {@link Crypt_GPG_Key} or - * {@link Crypt_GPG_SubKey}. - * @param string $passphrase optional. The passphrase associated with the - * key. - * - * @return void - * - * @sensitive $passphrase - */ - protected function _addKey(array &$array, $encrypt, $sign, $key, - $passphrase = null - ) { - $subKeys = array(); - - if (is_scalar($key)) { - $keys = $this->getKeys($key); - if (count($keys) == 0) { - throw new Crypt_GPG_KeyNotFoundException( - 'Key "' . $key . '" not found.', - 0, - $key - ); - } - $key = $keys[0]; - } - - if ($key instanceof Crypt_GPG_Key) { - if ($encrypt && !$key->canEncrypt()) { - throw new InvalidArgumentException( - 'Key "' . $key . '" cannot encrypt.' - ); - } - - if ($sign && !$key->canSign()) { - throw new InvalidArgumentException( - 'Key "' . $key . '" cannot sign.' - ); - } - - foreach ($key->getSubKeys() as $subKey) { - $canEncrypt = $subKey->canEncrypt(); - $canSign = $subKey->canSign(); - if ( ($encrypt && $sign && $canEncrypt && $canSign) - || ($encrypt && !$sign && $canEncrypt) - || (!$encrypt && $sign && $canSign) - ) { - // We add all subkeys that meet the requirements because we - // were not told which subkey is required. - $subKeys[] = $subKey; - } - } - } elseif ($key instanceof Crypt_GPG_SubKey) { - $subKeys[] = $key; - } - - if (count($subKeys) === 0) { - throw new InvalidArgumentException( - 'Key "' . $key . '" is not in a recognized format.' - ); - } - - foreach ($subKeys as $subKey) { - if ($encrypt && !$subKey->canEncrypt()) { - throw new InvalidArgumentException( - 'Key "' . $key . '" cannot encrypt.' - ); - } - - if ($sign && !$subKey->canSign()) { - throw new InvalidArgumentException( - 'Key "' . $key . '" cannot sign.' - ); - } - - $array[$subKey->getId()] = array( - 'fingerprint' => $subKey->getFingerprint(), - 'passphrase' => $passphrase - ); - } - } - - // }}} - // {{{ _setPinEntryEnv() - - /** - * Sets the PINENTRY_USER_DATA environment variable with the currently - * added keys and passphrases - * - * Keys and pasphrases are stored as an indexed array of associative - * arrays that is JSON encoded to a flat string. - * - * For GnuPG 2.x this is how passphrases are passed. For GnuPG 1.x the - * environment variable is set but not used. - * - * @param array $keys the internal key array to use. - * - * @return void - */ - protected function _setPinEntryEnv(array $keys) - { - $envKeys = array(); - foreach ($keys as $id => $key) { - $envKeys[] = array( - 'keyId' => $id, - 'fingerprint' => $key['fingerprint'], - 'passphrase' => $key['passphrase'] - ); - } - $envKeys = json_encode($envKeys); - $_ENV['PINENTRY_USER_DATA'] = $envKeys; - } - - // }}} - // {{{ _importKey() - - /** - * Imports a public or private key into the keyring - * - * @param string $key the key to be imported. - * @param boolean $isFile whether or not the input is a filename. - * - * @return array an associative array containing the following elements: - * - <kbd>fingerprint</kbd> - the fingerprint of the - * imported key, - * - <kbd>public_imported</kbd> - the number of public - * keys imported, - * - <kbd>public_unchanged</kbd> - the number of unchanged - * public keys, - * - <kbd>private_imported</kbd> - the number of private - * keys imported, - * - <kbd>private_unchanged</kbd> - the number of unchanged - * private keys. - * - * @throws Crypt_GPG_NoDataException if the key data is missing or if the - * data is is not valid key data. - * - * @throws Crypt_GPG_FileException if the key file is not readable. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - */ - protected function _importKey($key, $isFile) - { - $result = array(); - - if ($isFile) { - $input = @fopen($key, 'rb'); - if ($input === false) { - throw new Crypt_GPG_FileException( - 'Could not open key file "' . $key . '" for importing.', - 0, - $key - ); - } - } else { - $input = strval($key); - if ($input == '') { - throw new Crypt_GPG_NoDataException( - 'No valid GPG key data found.', - self::ERROR_NO_DATA - ); - } - } - - $arguments = array(); - $version = $this->engine->getVersion(); - - if ( version_compare($version, '1.0.5', 'ge') - && version_compare($version, '1.0.7', 'lt') - ) { - $arguments[] = '--allow-secret-key-import'; - } - - $this->engine->reset(); - $this->engine->addStatusHandler( - array($this, 'handleImportKeyStatus'), - array(&$result) - ); - - $this->engine->setOperation('--import', $arguments); - $this->engine->setInput($input); - $this->engine->run(); - - if ($isFile) { - fclose($input); - } - - $code = $this->engine->getErrorCode(); - - switch ($code) { - case self::ERROR_DUPLICATE_KEY: - case self::ERROR_NONE: - // ignore duplicate key import errors - break; - case self::ERROR_NO_DATA: - throw new Crypt_GPG_NoDataException( - 'No valid GPG key data found.', - $code - ); - default: - throw new Crypt_GPG_Exception( - 'Unknown error importing GPG key. Please use the \'debug\' ' . - 'option when creating the Crypt_GPG object, and file a bug ' . - 'report at ' . self::BUG_URI, - $code - ); - } - - return $result; - } - - // }}} - // {{{ _encrypt() - - /** - * Encrypts data - * - * @param string $data the data to encrypt. - * @param boolean $isFile whether or not the data is a filename. - * @param string $outputFile the filename of the file in which to store - * the encrypted data. If null, the encrypted - * data is returned as a string. - * @param boolean $armor if true, ASCII armored data is returned; - * otherwise, binary data is returned. - * - * @return void|string if the <kbd>$outputFile</kbd> parameter is null, a - * string containing the encrypted data is returned. - * - * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified. - * See {@link Crypt_GPG::addEncryptKey()}. - * - * @throws Crypt_GPG_FileException if the output file is not writeable or - * if the input file is not readable. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - */ - protected function _encrypt($data, $isFile, $outputFile, $armor) - { - if (count($this->encryptKeys) === 0) { - throw new Crypt_GPG_KeyNotFoundException( - 'No encryption keys specified.' - ); - } - - if ($isFile) { - $input = @fopen($data, 'rb'); - if ($input === false) { - throw new Crypt_GPG_FileException( - 'Could not open input file "' . $data . - '" for encryption.', - 0, - $data - ); - } - } else { - $input = strval($data); - } - - if ($outputFile === null) { - $output = ''; - } else { - $output = @fopen($outputFile, 'wb'); - if ($output === false) { - if ($isFile) { - fclose($input); - } - throw new Crypt_GPG_FileException( - 'Could not open output file "' . $outputFile . - '" for storing encrypted data.', - 0, - $outputFile - ); - } - } - - $arguments = ($armor) ? array('--armor') : array(); - foreach ($this->encryptKeys as $key) { - $arguments[] = '--recipient ' . escapeshellarg($key['fingerprint']); - } - - $this->engine->reset(); - $this->engine->setInput($input); - $this->engine->setOutput($output); - $this->engine->setOperation('--encrypt', $arguments); - $this->engine->run(); - - if ($isFile) { - fclose($input); - } - - if ($outputFile !== null) { - fclose($output); - } - - $code = $this->engine->getErrorCode(); - - if ($code !== self::ERROR_NONE) { - throw new Crypt_GPG_Exception( - 'Unknown error encrypting data. Please use the \'debug\' ' . - 'option when creating the Crypt_GPG object, and file a bug ' . - 'report at ' . self::BUG_URI, - $code - ); - } - - if ($outputFile === null) { - return $output; - } - } - - // }}} - // {{{ _decrypt() - - /** - * Decrypts data - * - * @param string $data the data to be decrypted. - * @param boolean $isFile whether or not the data is a filename. - * @param string $outputFile the name of the file to which the decrypted - * data should be written. If null, the decrypted - * data is returned as a string. - * - * @return void|string if the <kbd>$outputFile</kbd> parameter is null, a - * string containing the decrypted data is returned. - * - * @throws Crypt_GPG_KeyNotFoundException if the private key needed to - * decrypt the data is not in the user's keyring. - * - * @throws Crypt_GPG_NoDataException if specified data does not contain - * GPG encrypted data. - * - * @throws Crypt_GPG_BadPassphraseException if a required passphrase is - * incorrect or if a required passphrase is not specified. See - * {@link Crypt_GPG::addDecryptKey()}. - * - * @throws Crypt_GPG_FileException if the output file is not writeable or - * if the input file is not readable. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - */ - protected function _decrypt($data, $isFile, $outputFile) - { - if ($isFile) { - $input = @fopen($data, 'rb'); - if ($input === false) { - throw new Crypt_GPG_FileException( - 'Could not open input file "' . $data . - '" for decryption.', - 0, - $data - ); - } - } else { - $input = strval($data); - if ($input == '') { - throw new Crypt_GPG_NoDataException( - 'Cannot decrypt data. No PGP encrypted data was found in '. - 'the provided data.', - self::ERROR_NO_DATA - ); - } - } - - if ($outputFile === null) { - $output = ''; - } else { - $output = @fopen($outputFile, 'wb'); - if ($output === false) { - if ($isFile) { - fclose($input); - } - throw new Crypt_GPG_FileException( - 'Could not open output file "' . $outputFile . - '" for storing decrypted data.', - 0, - $outputFile - ); - } - } - - $handler = new Crypt_GPG_DecryptStatusHandler( - $this->engine, - $this->decryptKeys - ); - - // If using gpg-agent, set the decrypt pins used by the pinentry - $this->_setPinEntryEnv($this->decryptKeys); - - $this->engine->reset(); - $this->engine->addStatusHandler(array($handler, 'handle')); - $this->engine->setOperation('--decrypt'); - $this->engine->setInput($input); - $this->engine->setOutput($output); - $this->engine->run(); - - if ($isFile) { - fclose($input); - } - - if ($outputFile !== null) { - fclose($output); - } - - // if there was any problem decrypting the data, the handler will - // deal with it here. - $handler->throwException(); - - if ($outputFile === null) { - return $output; - } - } - - // }}} - // {{{ _sign() - - /** - * Signs data - * - * @param string $data the data to be signed. - * @param boolean $isFile whether or not the data is a filename. - * @param string $outputFile the name of the file in which the signed data - * should be stored. If null, the signed data is - * returned as a string. - * @param boolean $mode the data signing mode to use. Should be one of - * {@link Crypt_GPG::SIGN_MODE_NORMAL}, - * {@link Crypt_GPG::SIGN_MODE_CLEAR} or - * {@link Crypt_GPG::SIGN_MODE_DETACHED}. - * @param boolean $armor if true, ASCII armored data is returned; - * otherwise, binary data is returned. This has - * no effect if the mode - * <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is - * used. - * @param boolean $textmode if true, line-breaks in signed data be - * normalized. Use this option when signing - * e-mail, or for greater compatibility between - * systems with different line-break formats. - * Defaults to false. This has no effect if the - * mode <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is - * used as clear-signing always uses textmode. - * - * @return void|string if the <kbd>$outputFile</kbd> parameter is null, a - * string containing the signed data (or the signature - * data if a detached signature is requested) is - * returned. - * - * @throws Crypt_GPG_KeyNotFoundException if no signing key is specified. - * See {@link Crypt_GPG::addSignKey()}. - * - * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is - * incorrect or if a required passphrase is not specified. - * - * @throws Crypt_GPG_FileException if the output file is not writeable or - * if the input file is not readable. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - */ - protected function _sign($data, $isFile, $outputFile, $mode, $armor, - $textmode - ) { - if (count($this->signKeys) === 0) { - throw new Crypt_GPG_KeyNotFoundException( - 'No signing keys specified.' - ); - } - - if ($isFile) { - $input = @fopen($data, 'rb'); - if ($input === false) { - throw new Crypt_GPG_FileException( - 'Could not open input file "' . $data . '" for signing.', - 0, - $data - ); - } - } else { - $input = strval($data); - } - - if ($outputFile === null) { - $output = ''; - } else { - $output = @fopen($outputFile, 'wb'); - if ($output === false) { - if ($isFile) { - fclose($input); - } - throw new Crypt_GPG_FileException( - 'Could not open output file "' . $outputFile . - '" for storing signed data.', - 0, - $outputFile - ); - } - } - - switch ($mode) { - case self::SIGN_MODE_DETACHED: - $operation = '--detach-sign'; - break; - case self::SIGN_MODE_CLEAR: - $operation = '--clearsign'; - break; - case self::SIGN_MODE_NORMAL: - default: - $operation = '--sign'; - break; - } - - $arguments = array(); - - if ($armor) { - $arguments[] = '--armor'; - } - if ($textmode) { - $arguments[] = '--textmode'; - } - - foreach ($this->signKeys as $key) { - $arguments[] = '--local-user ' . - escapeshellarg($key['fingerprint']); - } - - // If using gpg-agent, set the sign pins used by the pinentry - $this->_setPinEntryEnv($this->signKeys); - - $this->engine->reset(); - $this->engine->addStatusHandler(array($this, 'handleSignStatus')); - $this->engine->setInput($input); - $this->engine->setOutput($output); - $this->engine->setOperation($operation, $arguments); - $this->engine->run(); - - if ($isFile) { - fclose($input); - } - - if ($outputFile !== null) { - fclose($output); - } - - $code = $this->engine->getErrorCode(); - - switch ($code) { - case self::ERROR_NONE: - break; - case self::ERROR_KEY_NOT_FOUND: - throw new Crypt_GPG_KeyNotFoundException( - 'Cannot sign data. Private key not found. Import the '. - 'private key before trying to sign data.', - $code, - $this->engine->getErrorKeyId() - ); - case self::ERROR_BAD_PASSPHRASE: - throw new Crypt_GPG_BadPassphraseException( - 'Cannot sign data. Incorrect passphrase provided.', - $code - ); - case self::ERROR_MISSING_PASSPHRASE: - throw new Crypt_GPG_BadPassphraseException( - 'Cannot sign data. No passphrase provided.', - $code - ); - default: - throw new Crypt_GPG_Exception( - 'Unknown error signing data. Please use the \'debug\' option ' . - 'when creating the Crypt_GPG object, and file a bug report ' . - 'at ' . self::BUG_URI, - $code - ); - } - - if ($outputFile === null) { - return $output; - } - } - - // }}} - // {{{ _encryptAndSign() - - /** - * Encrypts and signs data - * - * @param string $data the data to be encrypted and signed. - * @param boolean $isFile whether or not the data is a filename. - * @param string $outputFile the name of the file in which the encrypted, - * signed data should be stored. If null, the - * encrypted, signed data is returned as a - * string. - * @param boolean $armor if true, ASCII armored data is returned; - * otherwise, binary data is returned. - * - * @return void|string if the <kbd>$outputFile</kbd> parameter is null, a - * string containing the encrypted, signed data is - * returned. - * - * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified - * or if no signing key is specified. See - * {@link Crypt_GPG::addEncryptKey()} and - * {@link Crypt_GPG::addSignKey()}. - * - * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is - * incorrect or if a required passphrase is not specified. - * - * @throws Crypt_GPG_FileException if the output file is not writeable or - * if the input file is not readable. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - */ - protected function _encryptAndSign($data, $isFile, $outputFile, $armor) - { - if (count($this->signKeys) === 0) { - throw new Crypt_GPG_KeyNotFoundException( - 'No signing keys specified.' - ); - } - - if (count($this->encryptKeys) === 0) { - throw new Crypt_GPG_KeyNotFoundException( - 'No encryption keys specified.' - ); - } - - - if ($isFile) { - $input = @fopen($data, 'rb'); - if ($input === false) { - throw new Crypt_GPG_FileException( - 'Could not open input file "' . $data . - '" for encrypting and signing.', - 0, - $data - ); - } - } else { - $input = strval($data); - } - - if ($outputFile === null) { - $output = ''; - } else { - $output = @fopen($outputFile, 'wb'); - if ($output === false) { - if ($isFile) { - fclose($input); - } - throw new Crypt_GPG_FileException( - 'Could not open output file "' . $outputFile . - '" for storing encrypted, signed data.', - 0, - $outputFile - ); - } - } - - $arguments = ($armor) ? array('--armor') : array(); - - foreach ($this->signKeys as $key) { - $arguments[] = '--local-user ' . - escapeshellarg($key['fingerprint']); - } - - // If using gpg-agent, set the sign pins used by the pinentry - $this->_setPinEntryEnv($this->signKeys); - - foreach ($this->encryptKeys as $key) { - $arguments[] = '--recipient ' . escapeshellarg($key['fingerprint']); - } - - $this->engine->reset(); - $this->engine->addStatusHandler(array($this, 'handleSignStatus')); - $this->engine->setInput($input); - $this->engine->setOutput($output); - $this->engine->setOperation('--encrypt --sign', $arguments); - $this->engine->run(); - - if ($isFile) { - fclose($input); - } - - if ($outputFile !== null) { - fclose($output); - } - - $code = $this->engine->getErrorCode(); - - switch ($code) { - case self::ERROR_NONE: - break; - case self::ERROR_KEY_NOT_FOUND: - throw new Crypt_GPG_KeyNotFoundException( - 'Cannot sign encrypted data. Private key not found. Import '. - 'the private key before trying to sign the encrypted data.', - $code, - $this->engine->getErrorKeyId() - ); - case self::ERROR_BAD_PASSPHRASE: - throw new Crypt_GPG_BadPassphraseException( - 'Cannot sign encrypted data. Incorrect passphrase provided.', - $code - ); - case self::ERROR_MISSING_PASSPHRASE: - throw new Crypt_GPG_BadPassphraseException( - 'Cannot sign encrypted data. No passphrase provided.', - $code - ); - default: - throw new Crypt_GPG_Exception( - 'Unknown error encrypting and signing data. Please use the ' . - '\'debug\' option when creating the Crypt_GPG object, and ' . - 'file a bug report at ' . self::BUG_URI, - $code - ); - } - - if ($outputFile === null) { - return $output; - } - } - - // }}} - // {{{ _verify() - - /** - * Verifies data - * - * @param string $data the signed data to be verified. - * @param boolean $isFile whether or not the data is a filename. - * @param string $signature if verifying a file signed using a detached - * signature, this must be the detached signature - * data. Otherwise, specify ''. - * - * @return array an array of {@link Crypt_GPG_Signature} objects for the - * signed data. - * - * @throws Crypt_GPG_NoDataException if the provided data is not signed - * data. - * - * @throws Crypt_GPG_FileException if the input file is not readable. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - * - * @see Crypt_GPG_Signature - */ - protected function _verify($data, $isFile, $signature) - { - if ($signature == '') { - $operation = '--verify'; - $arguments = array(); - } else { - // Signed data goes in FD_MESSAGE, detached signature data goes in - // FD_INPUT. - $operation = '--verify - "-&' . Crypt_GPG_Engine::FD_MESSAGE. '"'; - $arguments = array('--enable-special-filenames'); - } - - $handler = new Crypt_GPG_VerifyStatusHandler(); - - if ($isFile) { - $input = @fopen($data, 'rb'); - if ($input === false) { - throw new Crypt_GPG_FileException( - 'Could not open input file "' . $data . '" for verifying.', - 0, - $data - ); - } - } else { - $input = strval($data); - if ($input == '') { - throw new Crypt_GPG_NoDataException( - 'No valid signature data found.', - self::ERROR_NO_DATA - ); - } - } - - $this->engine->reset(); - $this->engine->addStatusHandler(array($handler, 'handle')); - - if ($signature == '') { - // signed or clearsigned data - $this->engine->setInput($input); - } else { - // detached signature - $this->engine->setInput($signature); - $this->engine->setMessage($input); - } - - $this->engine->setOperation($operation, $arguments); - $this->engine->run(); - - if ($isFile) { - fclose($input); - } - - $code = $this->engine->getErrorCode(); - - switch ($code) { - case self::ERROR_NONE: - case self::ERROR_BAD_SIGNATURE: - break; - case self::ERROR_NO_DATA: - throw new Crypt_GPG_NoDataException( - 'No valid signature data found.', - $code - ); - case self::ERROR_KEY_NOT_FOUND: - throw new Crypt_GPG_KeyNotFoundException( - 'Public key required for data verification not in keyring.', - $code, - $this->engine->getErrorKeyId() - ); - default: - throw new Crypt_GPG_Exception( - 'Unknown error validating signature details. Please use the ' . - '\'debug\' option when creating the Crypt_GPG object, and ' . - 'file a bug report at ' . self::BUG_URI, - $code - ); - } - - return $handler->getSignatures(); - } - - // }}} - // {{{ _decryptAndVerify() - - /** - * Decrypts and verifies encrypted, signed data - * - * @param string $data the encrypted signed data to be decrypted and - * verified. - * @param boolean $isFile whether or not the data is a filename. - * @param string $outputFile the name of the file to which the decrypted - * data should be written. If null, the decrypted - * data is returned in the results array. - * - * @return array two element array. The array has an element 'data' - * containing the decrypted data and an element - * 'signatures' containing an array of - * {@link Crypt_GPG_Signature} objects for the signed data. - * If the decrypted data is written to a file, the 'data' - * element is null. - * - * @throws Crypt_GPG_KeyNotFoundException if the private key needed to - * decrypt the data is not in the user's keyring or it the public - * key needed for verification is not in the user's keyring. - * - * @throws Crypt_GPG_NoDataException if specified data does not contain - * GPG signed, encrypted data. - * - * @throws Crypt_GPG_BadPassphraseException if a required passphrase is - * incorrect or if a required passphrase is not specified. See - * {@link Crypt_GPG::addDecryptKey()}. - * - * @throws Crypt_GPG_FileException if the output file is not writeable or - * if the input file is not readable. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - * - * @see Crypt_GPG_Signature - */ - protected function _decryptAndVerify($data, $isFile, $outputFile) - { - if ($isFile) { - $input = @fopen($data, 'rb'); - if ($input === false) { - throw new Crypt_GPG_FileException( - 'Could not open input file "' . $data . - '" for decrypting and verifying.', - 0, - $data - ); - } - } else { - $input = strval($data); - if ($input == '') { - throw new Crypt_GPG_NoDataException( - 'No valid encrypted signed data found.', - self::ERROR_NO_DATA - ); - } - } - - if ($outputFile === null) { - $output = ''; - } else { - $output = @fopen($outputFile, 'wb'); - if ($output === false) { - if ($isFile) { - fclose($input); - } - throw new Crypt_GPG_FileException( - 'Could not open output file "' . $outputFile . - '" for storing decrypted data.', - 0, - $outputFile - ); - } - } - - $verifyHandler = new Crypt_GPG_VerifyStatusHandler(); - - $decryptHandler = new Crypt_GPG_DecryptStatusHandler( - $this->engine, - $this->decryptKeys - ); - - // If using gpg-agent, set the decrypt pins used by the pinentry - $this->_setPinEntryEnv($this->decryptKeys); - - $this->engine->reset(); - $this->engine->addStatusHandler(array($verifyHandler, 'handle')); - $this->engine->addStatusHandler(array($decryptHandler, 'handle')); - $this->engine->setInput($input); - $this->engine->setOutput($output); - $this->engine->setOperation('--decrypt'); - $this->engine->run(); - - if ($isFile) { - fclose($input); - } - - if ($outputFile !== null) { - fclose($output); - } - - $return = array( - 'data' => null, - 'signatures' => $verifyHandler->getSignatures() - ); - - // if there was any problem decrypting the data, the handler will - // deal with it here. - try { - $decryptHandler->throwException(); - } catch (Exception $e) { - if ($e instanceof Crypt_GPG_KeyNotFoundException) { - throw new Crypt_GPG_KeyNotFoundException( - 'Public key required for data verification not in ', - 'the keyring. Either no suitable private decryption key ' . - 'is in the keyring or the public key required for data ' . - 'verification is not in the keyring. Import a suitable ' . - 'key before trying to decrypt and verify this data.', - self::ERROR_KEY_NOT_FOUND, - $this->engine->getErrorKeyId() - ); - } - - if ($e instanceof Crypt_GPG_NoDataException) { - throw new Crypt_GPG_NoDataException( - 'Cannot decrypt and verify data. No PGP encrypted data ' . - 'was found in the provided data.', - self::ERROR_NO_DATA - ); - } - - throw $e; - } - - if ($outputFile === null) { - $return['data'] = $output; - } - - return $return; - } - - // }}} -} - -// }}} - -?> diff --git a/program/lib/Crypt/GPG/ByteUtils.php b/program/lib/Crypt/GPG/ByteUtils.php deleted file mode 100644 index 342905471..000000000 --- a/program/lib/Crypt/GPG/ByteUtils.php +++ /dev/null @@ -1,105 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * A class for performing byte-wise string operations - * - * GPG I/O streams are managed using bytes rather than characters. - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version CVS: $Id$ - * @link http://pear.php.net/package/Crypt_GPG - */ - -// {{{ class Crypt_GPG_ByteUtils - -/** - * A class for performing byte-wise string operations - * - * GPG I/O streams are managed using bytes rather than characters. This class - * requires the mbstring extension to be available. - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - * @link http://php.net/mbstring - */ -class Crypt_GPG_ByteUtils -{ - // {{{ strlen() - - /** - * Gets the length of a string in bytes - * - * This is used for stream-based communication with the GPG subprocess. - * - * @param string $string the string for which to get the length. - * - * @return integer the length of the string in bytes. - */ - public static function strlen($string) - { - return mb_strlen($string, '8bit'); - } - - // }}} - // {{{ substr() - - /** - * Gets the substring of a string in bytes - * - * This is used for stream-based communication with the GPG subprocess. - * - * @param string $string the input string. - * @param integer $start the starting point at which to get the substring. - * @param integer $length optional. The length of the substring. - * - * @return string the extracted part of the string. Unlike the default PHP - * <kbd>substr()</kbd> function, the returned value is - * always a string and never false. - */ - public static function substr($string, $start, $length = null) - { - if ($length === null) { - return mb_substr( - $string, - $start, - self::strlen($string) - $start, '8bit' - ); - } - - return mb_substr($string, $start, $length, '8bit'); - } - - // }}} -} - -// }}} - -?> diff --git a/program/lib/Crypt/GPG/DecryptStatusHandler.php b/program/lib/Crypt/GPG/DecryptStatusHandler.php deleted file mode 100644 index 67c0dd74b..000000000 --- a/program/lib/Crypt/GPG/DecryptStatusHandler.php +++ /dev/null @@ -1,344 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Crypt_GPG is a package to use GnuPG from PHP - * - * This file contains an object that handles GnuPG's status output for the - * decrypt operation. - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2008-2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version CVS: $Id$ - * @link http://pear.php.net/package/Crypt_GPG - * @link http://www.gnupg.org/ - */ - -/** - * Crypt_GPG base class - */ -require_once 'Crypt/GPG.php'; - -/** - * Crypt_GPG exception classes - */ -require_once 'Crypt/GPG/Exceptions.php'; - - -/** - * Status line handler for the decrypt operation - * - * This class is used internally by Crypt_GPG and does not need be used - * directly. See the {@link Crypt_GPG} class for end-user API. - * - * This class is responsible for sending the passphrase commands when required - * by the {@link Crypt_GPG::decrypt()} method. See <b>doc/DETAILS</b> in the - * {@link http://www.gnupg.org/download/ GnuPG distribution} for detailed - * information on GnuPG's status output for the decrypt operation. - * - * This class is also responsible for parsing error status and throwing a - * meaningful exception in the event that decryption fails. - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2008-2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - * @link http://www.gnupg.org/ - */ -class Crypt_GPG_DecryptStatusHandler -{ - // {{{ protected properties - - /** - * Keys used to decrypt - * - * The array is of the form: - * <code> - * array( - * $key_id => array( - * 'fingerprint' => $fingerprint, - * 'passphrase' => $passphrase - * ) - * ); - * </code> - * - * @var array - */ - protected $keys = array(); - - /** - * Engine used to which passphrases are passed - * - * @var Crypt_GPG_Engine - */ - protected $engine = null; - - /** - * The id of the current sub-key used for decryption - * - * @var string - */ - protected $currentSubKey = ''; - - /** - * Whether or not decryption succeeded - * - * If the message is only signed (compressed) and not encrypted, this is - * always true. If the message is encrypted, this flag is set to false - * until we know the decryption succeeded. - * - * @var boolean - */ - protected $decryptionOkay = true; - - /** - * Whether or not there was no data for decryption - * - * @var boolean - */ - protected $noData = false; - - /** - * Keys for which the passhprase is missing - * - * This contains primary user ids indexed by sub-key id and is used to - * create helpful exception messages. - * - * @var array - */ - protected $missingPassphrases = array(); - - /** - * Keys for which the passhprase is incorrect - * - * This contains primary user ids indexed by sub-key id and is used to - * create helpful exception messages. - * - * @var array - */ - protected $badPassphrases = array(); - - /** - * Keys that can be used to decrypt the data but are missing from the - * keychain - * - * This is an array with both the key and value being the sub-key id of - * the missing keys. - * - * @var array - */ - protected $missingKeys = array(); - - // }}} - // {{{ __construct() - - /** - * Creates a new decryption status handler - * - * @param Crypt_GPG_Engine $engine the GPG engine to which passphrases are - * passed. - * @param array $keys the decryption keys to use. - */ - public function __construct(Crypt_GPG_Engine $engine, array $keys) - { - $this->engine = $engine; - $this->keys = $keys; - } - - // }}} - // {{{ handle() - - /** - * Handles a status line - * - * @param string $line the status line to handle. - * - * @return void - */ - public function handle($line) - { - $tokens = explode(' ', $line); - switch ($tokens[0]) { - case 'ENC_TO': - // Now we know the message is encrypted. Set flag to check if - // decryption succeeded. - $this->decryptionOkay = false; - - // this is the new key message - $this->currentSubKeyId = $tokens[1]; - break; - - case 'NEED_PASSPHRASE': - // send passphrase to the GPG engine - $subKeyId = $tokens[1]; - if (array_key_exists($subKeyId, $this->keys)) { - $passphrase = $this->keys[$subKeyId]['passphrase']; - $this->engine->sendCommand($passphrase); - } else { - $this->engine->sendCommand(''); - } - break; - - case 'USERID_HINT': - // remember the user id for pretty exception messages - $this->badPassphrases[$tokens[1]] - = implode(' ', array_splice($tokens, 2)); - - break; - - case 'GOOD_PASSPHRASE': - // if we got a good passphrase, remove the key from the list of - // bad passphrases. - unset($this->badPassphrases[$this->currentSubKeyId]); - break; - - case 'MISSING_PASSPHRASE': - $this->missingPassphrases[$this->currentSubKeyId] - = $this->currentSubKeyId; - - break; - - case 'NO_SECKEY': - // note: this message is also received if there are multiple - // recipients and a previous key had a correct passphrase. - $this->missingKeys[$tokens[1]] = $tokens[1]; - break; - - case 'NODATA': - $this->noData = true; - break; - - case 'DECRYPTION_OKAY': - // If the message is encrypted, this is the all-clear signal. - $this->decryptionOkay = true; - break; - } - } - - // }}} - // {{{ throwException() - - /** - * Takes the final status of the decrypt operation and throws an - * appropriate exception - * - * If decryption was successful, no exception is thrown. - * - * @return void - * - * @throws Crypt_GPG_KeyNotFoundException if the private key needed to - * decrypt the data is not in the user's keyring. - * - * @throws Crypt_GPG_NoDataException if specified data does not contain - * GPG encrypted data. - * - * @throws Crypt_GPG_BadPassphraseException if a required passphrase is - * incorrect or if a required passphrase is not specified. See - * {@link Crypt_GPG::addDecryptKey()}. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <i>debug</i> option and file a bug report if these - * exceptions occur. - */ - public function throwException() - { - $code = Crypt_GPG::ERROR_NONE; - - if (!$this->decryptionOkay) { - if (count($this->badPassphrases) > 0) { - $code = Crypt_GPG::ERROR_BAD_PASSPHRASE; - } elseif (count($this->missingKeys) > 0) { - $code = Crypt_GPG::ERROR_KEY_NOT_FOUND; - } else { - $code = Crypt_GPG::ERROR_UNKNOWN; - } - } elseif ($this->noData) { - $code = Crypt_GPG::ERROR_NO_DATA; - } - - switch ($code) { - case Crypt_GPG::ERROR_NONE: - break; - - case Crypt_GPG::ERROR_KEY_NOT_FOUND: - if (count($this->missingKeys) > 0) { - $keyId = reset($this->missingKeys); - } else { - $keyId = ''; - } - throw new Crypt_GPG_KeyNotFoundException( - 'Cannot decrypt data. No suitable private key is in the ' . - 'keyring. Import a suitable private key before trying to ' . - 'decrypt this data.', - $code, - $keyId - ); - case Crypt_GPG::ERROR_BAD_PASSPHRASE: - $badPassphrases = array_diff_key( - $this->badPassphrases, - $this->missingPassphrases - ); - - $missingPassphrases = array_intersect_key( - $this->badPassphrases, - $this->missingPassphrases - ); - - $message = 'Cannot decrypt data.'; - if (count($badPassphrases) > 0) { - $message = ' Incorrect passphrase provided for keys: "' . - implode('", "', $badPassphrases) . '".'; - } - if (count($missingPassphrases) > 0) { - $message = ' No passphrase provided for keys: "' . - implode('", "', $badPassphrases) . '".'; - } - - throw new Crypt_GPG_BadPassphraseException( - $message, - $code, - $badPassphrases, - $missingPassphrases - ); - case Crypt_GPG::ERROR_NO_DATA: - throw new Crypt_GPG_NoDataException( - 'Cannot decrypt data. No PGP encrypted data was found in '. - 'the provided data.', - $code - ); - default: - throw new Crypt_GPG_Exception( - 'Unknown error decrypting data.', - $code - ); - } - } - - // }}} -} - -?> diff --git a/program/lib/Crypt/GPG/Engine.php b/program/lib/Crypt/GPG/Engine.php deleted file mode 100644 index 601541443..000000000 --- a/program/lib/Crypt/GPG/Engine.php +++ /dev/null @@ -1,2006 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Crypt_GPG is a package to use GPG from PHP - * - * This file contains an engine that handles GPG subprocess control and I/O. - * PHP's process manipulation functions are used to handle the GPG subprocess. - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category Encryption - * @package Crypt_GPG - * @author Nathan Fredrickson <nathan@silverorange.com> - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2005-2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version CVS: $Id$ - * @link http://pear.php.net/package/Crypt_GPG - * @link http://www.gnupg.org/ - */ - -/** - * Crypt_GPG base class. - */ -require_once 'Crypt/GPG.php'; - -/** - * GPG exception classes. - */ -require_once 'Crypt/GPG/Exceptions.php'; - -/** - * Byte string operations. - */ -require_once 'Crypt/GPG/ByteUtils.php'; - -/** - * Process control methods. - */ -require_once 'Crypt/GPG/ProcessControl.php'; - -/** - * Standard PEAR exception is used if GPG binary is not found. - */ -require_once 'PEAR/Exception.php'; - -// {{{ class Crypt_GPG_Engine - -/** - * Native PHP Crypt_GPG I/O engine - * - * This class is used internally by Crypt_GPG and does not need be used - * directly. See the {@link Crypt_GPG} class for end-user API. - * - * This engine uses PHP's native process control functions to directly control - * the GPG process. The GPG executable is required to be on the system. - * - * All data is passed to the GPG subprocess using file descriptors. This is the - * most secure method of passing data to the GPG subprocess. - * - * @category Encryption - * @package Crypt_GPG - * @author Nathan Fredrickson <nathan@silverorange.com> - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2005-2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - * @link http://www.gnupg.org/ - */ -class Crypt_GPG_Engine -{ - // {{{ constants - - /** - * Size of data chunks that are sent to and retrieved from the IPC pipes. - * - * PHP reads 8192 bytes. If this is set to less than 8192, PHP reads 8192 - * and buffers the rest so we might as well just read 8192. - * - * Using values other than 8192 also triggers PHP bugs. - * - * @see http://bugs.php.net/bug.php?id=35224 - */ - const CHUNK_SIZE = 8192; - - /** - * Standard input file descriptor. This is used to pass data to the GPG - * process. - */ - const FD_INPUT = 0; - - /** - * Standard output file descriptor. This is used to receive normal output - * from the GPG process. - */ - const FD_OUTPUT = 1; - - /** - * Standard output file descriptor. This is used to receive error output - * from the GPG process. - */ - const FD_ERROR = 2; - - /** - * GPG status output file descriptor. The status file descriptor outputs - * detailed information for many GPG commands. See the second section of - * the file <b>doc/DETAILS</b> in the - * {@link http://www.gnupg.org/download/ GPG package} for a detailed - * description of GPG's status output. - */ - const FD_STATUS = 3; - - /** - * Command input file descriptor. This is used for methods requiring - * passphrases. - */ - const FD_COMMAND = 4; - - /** - * Extra message input file descriptor. This is used for passing signed - * data when verifying a detached signature. - */ - const FD_MESSAGE = 5; - - /** - * Minimum version of GnuPG that is supported. - */ - const MIN_VERSION = '1.0.2'; - - // }}} - // {{{ private class properties - - /** - * Whether or not to use debugging mode - * - * When set to true, every GPG command is echoed before it is run. Sensitive - * data is always handled using pipes and is not specified as part of the - * command. As a result, sensitive data is never displayed when debug is - * enabled. Sensitive data includes private key data and passphrases. - * - * Debugging is off by default. - * - * @var boolean - * @see Crypt_GPG_Engine::__construct() - */ - private $_debug = false; - - /** - * Location of GPG binary - * - * @var string - * @see Crypt_GPG_Engine::__construct() - * @see Crypt_GPG_Engine::_getBinary() - */ - private $_binary = ''; - - /** - * Location of GnuPG agent binary - * - * Only used for GnuPG 2.x - * - * @var string - * @see Crypt_GPG_Engine::__construct() - * @see Crypt_GPG_Engine::_getAgent() - */ - private $_agent = ''; - - /** - * Directory containing the GPG key files - * - * This property only contains the path when the <i>homedir</i> option - * is specified in the constructor. - * - * @var string - * @see Crypt_GPG_Engine::__construct() - */ - private $_homedir = ''; - - /** - * File path of the public keyring - * - * This property only contains the file path when the <i>public_keyring</i> - * option is specified in the constructor. - * - * If the specified file path starts with <kbd>~/</kbd>, the path is - * relative to the <i>homedir</i> if specified, otherwise to - * <kbd>~/.gnupg</kbd>. - * - * @var string - * @see Crypt_GPG_Engine::__construct() - */ - private $_publicKeyring = ''; - - /** - * File path of the private (secret) keyring - * - * This property only contains the file path when the <i>private_keyring</i> - * option is specified in the constructor. - * - * If the specified file path starts with <kbd>~/</kbd>, the path is - * relative to the <i>homedir</i> if specified, otherwise to - * <kbd>~/.gnupg</kbd>. - * - * @var string - * @see Crypt_GPG_Engine::__construct() - */ - private $_privateKeyring = ''; - - /** - * File path of the trust database - * - * This property only contains the file path when the <i>trust_db</i> - * option is specified in the constructor. - * - * If the specified file path starts with <kbd>~/</kbd>, the path is - * relative to the <i>homedir</i> if specified, otherwise to - * <kbd>~/.gnupg</kbd>. - * - * @var string - * @see Crypt_GPG_Engine::__construct() - */ - private $_trustDb = ''; - - /** - * Array of pipes used for communication with the GPG binary - * - * This is an array of file descriptor resources. - * - * @var array - */ - private $_pipes = array(); - - /** - * Array of pipes used for communication with the gpg-agent binary - * - * This is an array of file descriptor resources. - * - * @var array - */ - private $_agentPipes = array(); - - /** - * Array of currently opened pipes - * - * This array is used to keep track of remaining opened pipes so they can - * be closed when the GPG subprocess is finished. This array is a subset of - * the {@link Crypt_GPG_Engine::$_pipes} array and contains opened file - * descriptor resources. - * - * @var array - * @see Crypt_GPG_Engine::_closePipe() - */ - private $_openPipes = array(); - - /** - * A handle for the GPG process - * - * @var resource - */ - private $_process = null; - - /** - * A handle for the gpg-agent process - * - * @var resource - */ - private $_agentProcess = null; - - /** - * GPG agent daemon socket and PID for running gpg-agent - * - * @var string - */ - private $_agentInfo = null; - - /** - * Whether or not the operating system is Darwin (OS X) - * - * @var boolean - */ - private $_isDarwin = false; - - /** - * Commands to be sent to GPG's command input stream - * - * @var string - * @see Crypt_GPG_Engine::sendCommand() - */ - private $_commandBuffer = ''; - - /** - * Array of status line handlers - * - * @var array - * @see Crypt_GPG_Engine::addStatusHandler() - */ - private $_statusHandlers = array(); - - /** - * Array of error line handlers - * - * @var array - * @see Crypt_GPG_Engine::addErrorHandler() - */ - private $_errorHandlers = array(); - - /** - * The error code of the current operation - * - * @var integer - * @see Crypt_GPG_Engine::getErrorCode() - */ - private $_errorCode = Crypt_GPG::ERROR_NONE; - - /** - * File related to the error code of the current operation - * - * @var string - * @see Crypt_GPG_Engine::getErrorFilename() - */ - private $_errorFilename = ''; - - /** - * Key id related to the error code of the current operation - * - * @var string - * @see Crypt_GPG_Engine::getErrorKeyId() - */ - private $_errorkeyId = ''; - - /** - * The number of currently needed passphrases - * - * If this is not zero when the GPG command is completed, the error code is - * set to {@link Crypt_GPG::ERROR_MISSING_PASSPHRASE}. - * - * @var integer - */ - private $_needPassphrase = 0; - - /** - * The input source - * - * This is data to send to GPG. Either a string or a stream resource. - * - * @var string|resource - * @see Crypt_GPG_Engine::setInput() - */ - private $_input = null; - - /** - * The extra message input source - * - * Either a string or a stream resource. - * - * @var string|resource - * @see Crypt_GPG_Engine::setMessage() - */ - private $_message = null; - - /** - * The output location - * - * This is where the output from GPG is sent. Either a string or a stream - * resource. - * - * @var string|resource - * @see Crypt_GPG_Engine::setOutput() - */ - private $_output = ''; - - /** - * The GPG operation to execute - * - * @var string - * @see Crypt_GPG_Engine::setOperation() - */ - private $_operation; - - /** - * Arguments for the current operation - * - * @var array - * @see Crypt_GPG_Engine::setOperation() - */ - private $_arguments = array(); - - /** - * The version number of the GPG binary - * - * @var string - * @see Crypt_GPG_Engine::getVersion() - */ - private $_version = ''; - - // }}} - // {{{ __construct() - - /** - * Creates a new GPG engine - * - * Available options are: - * - * - <kbd>string homedir</kbd> - the directory where the GPG - * keyring files are stored. If not - * specified, Crypt_GPG uses the - * default of <kbd>~/.gnupg</kbd>. - * - <kbd>string publicKeyring</kbd> - the file path of the public - * keyring. Use this if the public - * keyring is not in the homedir, or - * if the keyring is in a directory - * not writable by the process - * invoking GPG (like Apache). Then - * you can specify the path to the - * keyring with this option - * (/foo/bar/pubring.gpg), and specify - * a writable directory (like /tmp) - * using the <i>homedir</i> option. - * - <kbd>string privateKeyring</kbd> - the file path of the private - * keyring. Use this if the private - * keyring is not in the homedir, or - * if the keyring is in a directory - * not writable by the process - * invoking GPG (like Apache). Then - * you can specify the path to the - * keyring with this option - * (/foo/bar/secring.gpg), and specify - * a writable directory (like /tmp) - * using the <i>homedir</i> option. - * - <kbd>string trustDb</kbd> - the file path of the web-of-trust - * database. Use this if the trust - * database is not in the homedir, or - * if the database is in a directory - * not writable by the process - * invoking GPG (like Apache). Then - * you can specify the path to the - * trust database with this option - * (/foo/bar/trustdb.gpg), and specify - * a writable directory (like /tmp) - * using the <i>homedir</i> option. - * - <kbd>string binary</kbd> - the location of the GPG binary. If - * not specified, the driver attempts - * to auto-detect the GPG binary - * location using a list of known - * default locations for the current - * operating system. The option - * <kbd>gpgBinary</kbd> is a - * deprecated alias for this option. - * - <kbd>string agent</kbd> - the location of the GnuPG agent - * binary. The gpg-agent is only - * used for GnuPG 2.x. If not - * specified, the engine attempts - * to auto-detect the gpg-agent - * binary location using a list of - * know default locations for the - * current operating system. - * - <kbd>boolean debug</kbd> - whether or not to use debug mode. - * When debug mode is on, all - * communication to and from the GPG - * subprocess is logged. This can be - * useful to diagnose errors when - * using Crypt_GPG. - * - * @param array $options optional. An array of options used to create the - * GPG object. All options are optional and are - * represented as key-value pairs. - * - * @throws Crypt_GPG_FileException if the <kbd>homedir</kbd> does not exist - * and cannot be created. This can happen if <kbd>homedir</kbd> is - * not specified, Crypt_GPG is run as the web user, and the web - * user has no home directory. This exception is also thrown if any - * of the options <kbd>publicKeyring</kbd>, - * <kbd>privateKeyring</kbd> or <kbd>trustDb</kbd> options are - * specified but the files do not exist or are are not readable. - * This can happen if the user running the Crypt_GPG process (for - * example, the Apache user) does not have permission to read the - * files. - * - * @throws PEAR_Exception if the provided <kbd>binary</kbd> is invalid, or - * if no <kbd>binary</kbd> is provided and no suitable binary could - * be found. - * - * @throws PEAR_Exception if the provided <kbd>agent</kbd> is invalid, or - * if no <kbd>agent</kbd> is provided and no suitable gpg-agent - * cound be found. - */ - public function __construct(array $options = array()) - { - $this->_isDarwin = (strncmp(strtoupper(PHP_OS), 'DARWIN', 6) === 0); - - // get homedir - if (array_key_exists('homedir', $options)) { - $this->_homedir = (string)$options['homedir']; - } else { - if (extension_loaded('posix')) { - // note: this requires the package OS dep exclude 'windows' - $info = posix_getpwuid(posix_getuid()); - $this->_homedir = $info['dir'].'/.gnupg'; - } else { - if (isset($_SERVER['HOME'])) { - $this->_homedir = $_SERVER['HOME']; - } else { - $this->_homedir = getenv('HOME'); - } - } - - if ($this->_homedir === false) { - throw new Crypt_GPG_FileException( - 'Could not locate homedir. Please specify the homedir ' . - 'to use with the \'homedir\' option when instantiating ' . - 'the Crypt_GPG object.' - ); - } - } - - // attempt to create homedir if it does not exist - if (!is_dir($this->_homedir)) { - if (@mkdir($this->_homedir, 0777, true)) { - // Set permissions on homedir. Parent directories are created - // with 0777, homedir is set to 0700. - chmod($this->_homedir, 0700); - } else { - throw new Crypt_GPG_FileException( - 'The \'homedir\' "' . $this->_homedir . '" is not ' . - 'readable or does not exist and cannot be created. This ' . - 'can happen if \'homedir\' is not specified in the ' . - 'Crypt_GPG options, Crypt_GPG is run as the web user, ' . - 'and the web user has no home directory.', - 0, - $this->_homedir - ); - } - } - - // check homedir permissions (See Bug #19833) - if (!is_executable($this->_homedir)) { - throw new Crypt_GPG_FileException( - 'The \'homedir\' "' . $this->_homedir . '" is not enterable ' . - 'by the current user. Please check the permissions on your ' . - 'homedir and make sure the current user can both enter and ' . - 'write to the directory.', - 0, - $this->_homedir - ); - } - if (!is_writeable($this->_homedir)) { - throw new Crypt_GPG_FileException( - 'The \'homedir\' "' . $this->_homedir . '" is not writable ' . - 'by the current user. Please check the permissions on your ' . - 'homedir and make sure the current user can both enter and ' . - 'write to the directory.', - 0, - $this->_homedir - ); - } - - // get binary - if (array_key_exists('binary', $options)) { - $this->_binary = (string)$options['binary']; - } elseif (array_key_exists('gpgBinary', $options)) { - // deprecated alias - $this->_binary = (string)$options['gpgBinary']; - } else { - $this->_binary = $this->_getBinary(); - } - - if ($this->_binary == '' || !is_executable($this->_binary)) { - throw new PEAR_Exception( - 'GPG binary not found. If you are sure the GPG binary is ' . - 'installed, please specify the location of the GPG binary ' . - 'using the \'binary\' driver option.' - ); - } - - // get agent - if (array_key_exists('agent', $options)) { - $this->_agent = (string)$options['agent']; - } else { - $this->_agent = $this->_getAgent(); - } - - if ($this->_agent == '' || !is_executable($this->_agent)) { - throw new PEAR_Exception( - 'gpg-agent binary not found. If you are sure the gpg-agent ' . - 'is installed, please specify the location of the gpg-agent ' . - 'binary using the \'agent\' driver option.' - ); - } - - /* - * Note: - * - * Normally, GnuPG expects keyrings to be in the homedir and expects - * to be able to write temporary files in the homedir. Sometimes, - * keyrings are not in the homedir, or location of the keyrings does - * not allow writing temporary files. In this case, the <i>homedir</i> - * option by itself is not enough to specify the keyrings because GnuPG - * can not write required temporary files. Additional options are - * provided so you can specify the location of the keyrings separately - * from the homedir. - */ - - // get public keyring - if (array_key_exists('publicKeyring', $options)) { - $this->_publicKeyring = (string)$options['publicKeyring']; - if (!is_readable($this->_publicKeyring)) { - throw new Crypt_GPG_FileException('The \'publicKeyring\' "' . - $this->_publicKeyring . '" does not exist or is ' . - 'not readable. Check the location and ensure the file ' . - 'permissions are correct.', 0, $this->_publicKeyring); - } - } - - // get private keyring - if (array_key_exists('privateKeyring', $options)) { - $this->_privateKeyring = (string)$options['privateKeyring']; - if (!is_readable($this->_privateKeyring)) { - throw new Crypt_GPG_FileException('The \'privateKeyring\' "' . - $this->_privateKeyring . '" does not exist or is ' . - 'not readable. Check the location and ensure the file ' . - 'permissions are correct.', 0, $this->_privateKeyring); - } - } - - // get trust database - if (array_key_exists('trustDb', $options)) { - $this->_trustDb = (string)$options['trustDb']; - if (!is_readable($this->_trustDb)) { - throw new Crypt_GPG_FileException('The \'trustDb\' "' . - $this->_trustDb . '" does not exist or is not readable. ' . - 'Check the location and ensure the file permissions are ' . - 'correct.', 0, $this->_trustDb); - } - } - - if (array_key_exists('debug', $options)) { - $this->_debug = (boolean)$options['debug']; - } - } - - // }}} - // {{{ __destruct() - - /** - * Closes open GPG subprocesses when this object is destroyed - * - * Subprocesses should never be left open by this class unless there is - * an unknown error and unexpected script termination occurs. - */ - public function __destruct() - { - $this->_closeSubprocess(); - } - - // }}} - // {{{ addErrorHandler() - - /** - * Adds an error handler method - * - * The method is run every time a new error line is received from the GPG - * subprocess. The handler method must accept the error line to be handled - * as its first parameter. - * - * @param callback $callback the callback method to use. - * @param array $args optional. Additional arguments to pass as - * parameters to the callback method. - * - * @return void - */ - public function addErrorHandler($callback, array $args = array()) - { - $this->_errorHandlers[] = array( - 'callback' => $callback, - 'args' => $args - ); - } - - // }}} - // {{{ addStatusHandler() - - /** - * Adds a status handler method - * - * The method is run every time a new status line is received from the - * GPG subprocess. The handler method must accept the status line to be - * handled as its first parameter. - * - * @param callback $callback the callback method to use. - * @param array $args optional. Additional arguments to pass as - * parameters to the callback method. - * - * @return void - */ - public function addStatusHandler($callback, array $args = array()) - { - $this->_statusHandlers[] = array( - 'callback' => $callback, - 'args' => $args - ); - } - - // }}} - // {{{ sendCommand() - - /** - * Sends a command to the GPG subprocess over the command file-descriptor - * pipe - * - * @param string $command the command to send. - * - * @return void - * - * @sensitive $command - */ - public function sendCommand($command) - { - if (array_key_exists(self::FD_COMMAND, $this->_openPipes)) { - $this->_commandBuffer .= $command . PHP_EOL; - } - } - - // }}} - // {{{ reset() - - /** - * Resets the GPG engine, preparing it for a new operation - * - * @return void - * - * @see Crypt_GPG_Engine::run() - * @see Crypt_GPG_Engine::setOperation() - */ - public function reset() - { - $this->_operation = ''; - $this->_arguments = array(); - $this->_input = null; - $this->_message = null; - $this->_output = ''; - $this->_errorCode = Crypt_GPG::ERROR_NONE; - $this->_needPassphrase = 0; - $this->_commandBuffer = ''; - - $this->_statusHandlers = array(); - $this->_errorHandlers = array(); - - $this->addStatusHandler(array($this, '_handleErrorStatus')); - $this->addErrorHandler(array($this, '_handleErrorError')); - - if ($this->_debug) { - $this->addStatusHandler(array($this, '_handleDebugStatus')); - $this->addErrorHandler(array($this, '_handleDebugError')); - } - } - - // }}} - // {{{ run() - - /** - * Runs the current GPG operation - * - * This creates and manages the GPG subprocess. - * - * The operation must be set with {@link Crypt_GPG_Engine::setOperation()} - * before this method is called. - * - * @return void - * - * @throws Crypt_GPG_InvalidOperationException if no operation is specified. - * - * @see Crypt_GPG_Engine::reset() - * @see Crypt_GPG_Engine::setOperation() - */ - public function run() - { - if ($this->_operation === '') { - throw new Crypt_GPG_InvalidOperationException('No GPG operation ' . - 'specified. Use Crypt_GPG_Engine::setOperation() before ' . - 'calling Crypt_GPG_Engine::run().'); - } - - $this->_openSubprocess(); - $this->_process(); - $this->_closeSubprocess(); - } - - // }}} - // {{{ getErrorCode() - - /** - * Gets the error code of the last executed operation - * - * This value is only meaningful after {@link Crypt_GPG_Engine::run()} has - * been executed. - * - * @return integer the error code of the last executed operation. - */ - public function getErrorCode() - { - return $this->_errorCode; - } - - // }}} - // {{{ getErrorFilename() - - /** - * Gets the file related to the error code of the last executed operation - * - * This value is only meaningful after {@link Crypt_GPG_Engine::run()} has - * been executed. If there is no file related to the error, an empty string - * is returned. - * - * @return string the file related to the error code of the last executed - * operation. - */ - public function getErrorFilename() - { - return $this->_errorFilename; - } - - // }}} - // {{{ getErrorKeyId() - - /** - * Gets the key id related to the error code of the last executed operation - * - * This value is only meaningful after {@link Crypt_GPG_Engine::run()} has - * been executed. If there is no key id related to the error, an empty - * string is returned. - * - * @return string the key id related to the error code of the last executed - * operation. - */ - public function getErrorKeyId() - { - return $this->_errorKeyId; - } - - // }}} - // {{{ setInput() - - /** - * Sets the input source for the current GPG operation - * - * @param string|resource &$input either a reference to the string - * containing the input data or an open - * stream resource containing the input - * data. - * - * @return void - */ - public function setInput(&$input) - { - $this->_input =& $input; - } - - // }}} - // {{{ setMessage() - - /** - * Sets the message source for the current GPG operation - * - * Detached signature data should be specified here. - * - * @param string|resource &$message either a reference to the string - * containing the message data or an open - * stream resource containing the message - * data. - * - * @return void - */ - public function setMessage(&$message) - { - $this->_message =& $message; - } - - // }}} - // {{{ setOutput() - - /** - * Sets the output destination for the current GPG operation - * - * @param string|resource &$output either a reference to the string in - * which to store GPG output or an open - * stream resource to which the output data - * should be written. - * - * @return void - */ - public function setOutput(&$output) - { - $this->_output =& $output; - } - - // }}} - // {{{ setOperation() - - /** - * Sets the operation to perform - * - * @param string $operation the operation to perform. This should be one - * of GPG's operations. For example, - * <kbd>--encrypt</kbd>, <kbd>--decrypt</kbd>, - * <kbd>--sign</kbd>, etc. - * @param array $arguments optional. Additional arguments for the GPG - * subprocess. See the GPG manual for specific - * values. - * - * @return void - * - * @see Crypt_GPG_Engine::reset() - * @see Crypt_GPG_Engine::run() - */ - public function setOperation($operation, array $arguments = array()) - { - $this->_operation = $operation; - $this->_arguments = $arguments; - } - - // }}} - // {{{ getVersion() - - /** - * Gets the version of the GnuPG binary - * - * @return string a version number string containing the version of GnuPG - * being used. This value is suitable to use with PHP's - * version_compare() function. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - * - * @throws Crypt_GPG_UnsupportedException if the provided binary is not - * GnuPG or if the GnuPG version is less than 1.0.2. - */ - public function getVersion() - { - if ($this->_version == '') { - - $options = array( - 'homedir' => $this->_homedir, - 'binary' => $this->_binary, - 'debug' => $this->_debug - ); - - $engine = new self($options); - $info = ''; - - // Set a garbage version so we do not end up looking up the version - // recursively. - $engine->_version = '1.0.0'; - - $engine->reset(); - $engine->setOutput($info); - $engine->setOperation('--version'); - $engine->run(); - - $code = $this->getErrorCode(); - - if ($code !== Crypt_GPG::ERROR_NONE) { - throw new Crypt_GPG_Exception( - 'Unknown error getting GnuPG version information. Please ' . - 'use the \'debug\' option when creating the Crypt_GPG ' . - 'object, and file a bug report at ' . Crypt_GPG::BUG_URI, - $code); - } - - $matches = array(); - $expression = '#gpg \(GnuPG[A-Za-z0-9/]*?\) (\S+)#'; - - if (preg_match($expression, $info, $matches) === 1) { - $this->_version = $matches[1]; - } else { - throw new Crypt_GPG_Exception( - 'No GnuPG version information provided by the binary "' . - $this->_binary . '". Are you sure it is GnuPG?'); - } - - if (version_compare($this->_version, self::MIN_VERSION, 'lt')) { - throw new Crypt_GPG_Exception( - 'The version of GnuPG being used (' . $this->_version . - ') is not supported by Crypt_GPG. The minimum version ' . - 'required by Crypt_GPG is ' . self::MIN_VERSION); - } - } - - - return $this->_version; - } - - // }}} - // {{{ _handleErrorStatus() - - /** - * Handles error values in the status output from GPG - * - * This method is responsible for setting the - * {@link Crypt_GPG_Engine::$_errorCode}. See <b>doc/DETAILS</b> in the - * {@link http://www.gnupg.org/download/ GPG distribution} for detailed - * information on GPG's status output. - * - * @param string $line the status line to handle. - * - * @return void - */ - private function _handleErrorStatus($line) - { - $tokens = explode(' ', $line); - switch ($tokens[0]) { - case 'BAD_PASSPHRASE': - $this->_errorCode = Crypt_GPG::ERROR_BAD_PASSPHRASE; - break; - - case 'MISSING_PASSPHRASE': - $this->_errorCode = Crypt_GPG::ERROR_MISSING_PASSPHRASE; - break; - - case 'NODATA': - $this->_errorCode = Crypt_GPG::ERROR_NO_DATA; - break; - - case 'DELETE_PROBLEM': - if ($tokens[1] == '1') { - $this->_errorCode = Crypt_GPG::ERROR_KEY_NOT_FOUND; - break; - } elseif ($tokens[1] == '2') { - $this->_errorCode = Crypt_GPG::ERROR_DELETE_PRIVATE_KEY; - break; - } - break; - - case 'IMPORT_RES': - if ($tokens[12] > 0) { - $this->_errorCode = Crypt_GPG::ERROR_DUPLICATE_KEY; - } - break; - - case 'NO_PUBKEY': - case 'NO_SECKEY': - $this->_errorKeyId = $tokens[1]; - $this->_errorCode = Crypt_GPG::ERROR_KEY_NOT_FOUND; - break; - - case 'NEED_PASSPHRASE': - $this->_needPassphrase++; - break; - - case 'GOOD_PASSPHRASE': - $this->_needPassphrase--; - break; - - case 'EXPSIG': - case 'EXPKEYSIG': - case 'REVKEYSIG': - case 'BADSIG': - $this->_errorCode = Crypt_GPG::ERROR_BAD_SIGNATURE; - break; - - } - } - - // }}} - // {{{ _handleErrorError() - - /** - * Handles error values in the error output from GPG - * - * This method is responsible for setting the - * {@link Crypt_GPG_Engine::$_errorCode}. - * - * @param string $line the error line to handle. - * - * @return void - */ - private function _handleErrorError($line) - { - if ($this->_errorCode === Crypt_GPG::ERROR_NONE) { - $pattern = '/no valid OpenPGP data found/'; - if (preg_match($pattern, $line) === 1) { - $this->_errorCode = Crypt_GPG::ERROR_NO_DATA; - } - } - - if ($this->_errorCode === Crypt_GPG::ERROR_NONE) { - $pattern = '/No secret key|secret key not available/'; - if (preg_match($pattern, $line) === 1) { - $this->_errorCode = Crypt_GPG::ERROR_KEY_NOT_FOUND; - } - } - - if ($this->_errorCode === Crypt_GPG::ERROR_NONE) { - $pattern = '/No public key|public key not found/'; - if (preg_match($pattern, $line) === 1) { - $this->_errorCode = Crypt_GPG::ERROR_KEY_NOT_FOUND; - } - } - - if ($this->_errorCode === Crypt_GPG::ERROR_NONE) { - $matches = array(); - $pattern = '/can\'t (?:access|open) `(.*?)\'/'; - if (preg_match($pattern, $line, $matches) === 1) { - $this->_errorFilename = $matches[1]; - $this->_errorCode = Crypt_GPG::ERROR_FILE_PERMISSIONS; - } - } - } - - // }}} - // {{{ _handleDebugStatus() - - /** - * Displays debug output for status lines - * - * @param string $line the status line to handle. - * - * @return void - */ - private function _handleDebugStatus($line) - { - $this->_debug('STATUS: ' . $line); - } - - // }}} - // {{{ _handleDebugError() - - /** - * Displays debug output for error lines - * - * @param string $line the error line to handle. - * - * @return void - */ - private function _handleDebugError($line) - { - $this->_debug('ERROR: ' . $line); - } - - // }}} - // {{{ _process() - - /** - * Performs internal streaming operations for the subprocess using either - * strings or streams as input / output points - * - * This is the main I/O loop for streaming to and from the GPG subprocess. - * - * The implementation of this method is verbose mainly for performance - * reasons. Adding streams to a lookup array and looping the array inside - * the main I/O loop would be siginficantly slower for large streams. - * - * @return void - * - * @throws Crypt_GPG_Exception if there is an error selecting streams for - * reading or writing. If this occurs, please file a bug report at - * http://pear.php.net/bugs/report.php?package=Crypt_GPG. - */ - private function _process() - { - $this->_debug('BEGIN PROCESSING'); - - $this->_commandBuffer = ''; // buffers input to GPG - $messageBuffer = ''; // buffers input to GPG - $inputBuffer = ''; // buffers input to GPG - $outputBuffer = ''; // buffers output from GPG - $statusBuffer = ''; // buffers output from GPG - $errorBuffer = ''; // buffers output from GPG - $inputComplete = false; // input stream is completely buffered - $messageComplete = false; // message stream is completely buffered - - if (is_string($this->_input)) { - $inputBuffer = $this->_input; - $inputComplete = true; - } - - if (is_string($this->_message)) { - $messageBuffer = $this->_message; - $messageComplete = true; - } - - if (is_string($this->_output)) { - $outputBuffer =& $this->_output; - } - - // convenience variables - $fdInput = $this->_pipes[self::FD_INPUT]; - $fdOutput = $this->_pipes[self::FD_OUTPUT]; - $fdError = $this->_pipes[self::FD_ERROR]; - $fdStatus = $this->_pipes[self::FD_STATUS]; - $fdCommand = $this->_pipes[self::FD_COMMAND]; - $fdMessage = $this->_pipes[self::FD_MESSAGE]; - - // select loop delay in milliseconds - $delay = 0; - - while (true) { - - $inputStreams = array(); - $outputStreams = array(); - $exceptionStreams = array(); - - // set up input streams - if (is_resource($this->_input) && !$inputComplete) { - if (feof($this->_input)) { - $inputComplete = true; - } else { - $inputStreams[] = $this->_input; - } - } - - // close GPG input pipe if there is no more data - if ($inputBuffer == '' && $inputComplete) { - $this->_debug('=> closing GPG input pipe'); - $this->_closePipe(self::FD_INPUT); - } - - if (is_resource($this->_message) && !$messageComplete) { - if (feof($this->_message)) { - $messageComplete = true; - } else { - $inputStreams[] = $this->_message; - } - } - - // close GPG message pipe if there is no more data - if ($messageBuffer == '' && $messageComplete) { - $this->_debug('=> closing GPG message pipe'); - $this->_closePipe(self::FD_MESSAGE); - } - - if (!feof($fdOutput)) { - $inputStreams[] = $fdOutput; - } - - if (!feof($fdStatus)) { - $inputStreams[] = $fdStatus; - } - - if (!feof($fdError)) { - $inputStreams[] = $fdError; - } - - // set up output streams - if ($outputBuffer != '' && is_resource($this->_output)) { - $outputStreams[] = $this->_output; - } - - if ($this->_commandBuffer != '' && is_resource($fdCommand)) { - $outputStreams[] = $fdCommand; - } - - if ($messageBuffer != '' && is_resource($fdMessage)) { - $outputStreams[] = $fdMessage; - } - - if ($inputBuffer != '' && is_resource($fdInput)) { - $outputStreams[] = $fdInput; - } - - // no streams left to read or write, we're all done - if (count($inputStreams) === 0 && count($outputStreams) === 0) { - break; - } - - $this->_debug('selecting streams'); - - $ready = stream_select( - $inputStreams, - $outputStreams, - $exceptionStreams, - null - ); - - $this->_debug('=> got ' . $ready); - - if ($ready === false) { - throw new Crypt_GPG_Exception( - 'Error selecting stream for communication with GPG ' . - 'subprocess. Please file a bug report at: ' . - 'http://pear.php.net/bugs/report.php?package=Crypt_GPG'); - } - - if ($ready === 0) { - throw new Crypt_GPG_Exception( - 'stream_select() returned 0. This can not happen! Please ' . - 'file a bug report at: ' . - 'http://pear.php.net/bugs/report.php?package=Crypt_GPG'); - } - - // write input (to GPG) - if (in_array($fdInput, $outputStreams, true)) { - $this->_debug('GPG is ready for input'); - - $chunk = Crypt_GPG_ByteUtils::substr( - $inputBuffer, - 0, - self::CHUNK_SIZE - ); - - $length = Crypt_GPG_ByteUtils::strlen($chunk); - - $this->_debug( - '=> about to write ' . $length . ' bytes to GPG input' - ); - - $length = fwrite($fdInput, $chunk, $length); - if ($length === 0) { - // If we wrote 0 bytes it was either EAGAIN or EPIPE. Since - // the pipe was seleted for writing, we assume it was EPIPE. - // There's no way to get the actual erorr code in PHP. See - // PHP Bug #39598. https://bugs.php.net/bug.php?id=39598 - $this->_debug('=> broken pipe on GPG input'); - $this->_debug('=> closing pipe GPG input'); - $this->_closePipe(self::FD_INPUT); - } else { - $this->_debug('=> wrote ' . $length . ' bytes'); - $inputBuffer = Crypt_GPG_ByteUtils::substr( - $inputBuffer, - $length - ); - } - } - - // read input (from PHP stream) - if (in_array($this->_input, $inputStreams, true)) { - $this->_debug('input stream is ready for reading'); - $this->_debug( - '=> about to read ' . self::CHUNK_SIZE . - ' bytes from input stream' - ); - - $chunk = fread($this->_input, self::CHUNK_SIZE); - $length = Crypt_GPG_ByteUtils::strlen($chunk); - $inputBuffer .= $chunk; - - $this->_debug('=> read ' . $length . ' bytes'); - } - - // write message (to GPG) - if (in_array($fdMessage, $outputStreams, true)) { - $this->_debug('GPG is ready for message data'); - - $chunk = Crypt_GPG_ByteUtils::substr( - $messageBuffer, - 0, - self::CHUNK_SIZE - ); - - $length = Crypt_GPG_ByteUtils::strlen($chunk); - - $this->_debug( - '=> about to write ' . $length . ' bytes to GPG message' - ); - - $length = fwrite($fdMessage, $chunk, $length); - if ($length === 0) { - // If we wrote 0 bytes it was either EAGAIN or EPIPE. Since - // the pipe was seleted for writing, we assume it was EPIPE. - // There's no way to get the actual erorr code in PHP. See - // PHP Bug #39598. https://bugs.php.net/bug.php?id=39598 - $this->_debug('=> broken pipe on GPG message'); - $this->_debug('=> closing pipe GPG message'); - $this->_closePipe(self::FD_MESSAGE); - } else { - $this->_debug('=> wrote ' . $length . ' bytes'); - $messageBuffer = Crypt_GPG_ByteUtils::substr( - $messageBuffer, - $length - ); - } - } - - // read message (from PHP stream) - if (in_array($this->_message, $inputStreams, true)) { - $this->_debug('message stream is ready for reading'); - $this->_debug( - '=> about to read ' . self::CHUNK_SIZE . - ' bytes from message stream' - ); - - $chunk = fread($this->_message, self::CHUNK_SIZE); - $length = Crypt_GPG_ByteUtils::strlen($chunk); - $messageBuffer .= $chunk; - - $this->_debug('=> read ' . $length . ' bytes'); - } - - // read output (from GPG) - if (in_array($fdOutput, $inputStreams, true)) { - $this->_debug('GPG output stream ready for reading'); - $this->_debug( - '=> about to read ' . self::CHUNK_SIZE . - ' bytes from GPG output' - ); - - $chunk = fread($fdOutput, self::CHUNK_SIZE); - $length = Crypt_GPG_ByteUtils::strlen($chunk); - $outputBuffer .= $chunk; - - $this->_debug('=> read ' . $length . ' bytes'); - } - - // write output (to PHP stream) - if (in_array($this->_output, $outputStreams, true)) { - $this->_debug('output stream is ready for data'); - - $chunk = Crypt_GPG_ByteUtils::substr( - $outputBuffer, - 0, - self::CHUNK_SIZE - ); - - $length = Crypt_GPG_ByteUtils::strlen($chunk); - - $this->_debug( - '=> about to write ' . $length . ' bytes to output stream' - ); - - $length = fwrite($this->_output, $chunk, $length); - - $this->_debug('=> wrote ' . $length . ' bytes'); - - $outputBuffer = Crypt_GPG_ByteUtils::substr( - $outputBuffer, - $length - ); - } - - // read error (from GPG) - if (in_array($fdError, $inputStreams, true)) { - $this->_debug('GPG error stream ready for reading'); - $this->_debug( - '=> about to read ' . self::CHUNK_SIZE . - ' bytes from GPG error' - ); - - $chunk = fread($fdError, self::CHUNK_SIZE); - $length = Crypt_GPG_ByteUtils::strlen($chunk); - $errorBuffer .= $chunk; - - $this->_debug('=> read ' . $length . ' bytes'); - - // pass lines to error handlers - while (($pos = strpos($errorBuffer, PHP_EOL)) !== false) { - $line = Crypt_GPG_ByteUtils::substr($errorBuffer, 0, $pos); - foreach ($this->_errorHandlers as $handler) { - array_unshift($handler['args'], $line); - call_user_func_array( - $handler['callback'], - $handler['args'] - ); - - array_shift($handler['args']); - } - $errorBuffer = Crypt_GPG_ByteUtils::substr( - $errorBuffer, - $pos + Crypt_GPG_ByteUtils::strlen(PHP_EOL) - ); - } - } - - // read status (from GPG) - if (in_array($fdStatus, $inputStreams, true)) { - $this->_debug('GPG status stream ready for reading'); - $this->_debug( - '=> about to read ' . self::CHUNK_SIZE . - ' bytes from GPG status' - ); - - $chunk = fread($fdStatus, self::CHUNK_SIZE); - $length = Crypt_GPG_ByteUtils::strlen($chunk); - $statusBuffer .= $chunk; - - $this->_debug('=> read ' . $length . ' bytes'); - - // pass lines to status handlers - while (($pos = strpos($statusBuffer, PHP_EOL)) !== false) { - $line = Crypt_GPG_ByteUtils::substr($statusBuffer, 0, $pos); - // only pass lines beginning with magic prefix - if (Crypt_GPG_ByteUtils::substr($line, 0, 9) == '[GNUPG:] ') { - $line = Crypt_GPG_ByteUtils::substr($line, 9); - foreach ($this->_statusHandlers as $handler) { - array_unshift($handler['args'], $line); - call_user_func_array( - $handler['callback'], - $handler['args'] - ); - - array_shift($handler['args']); - } - } - $statusBuffer = Crypt_GPG_ByteUtils::substr( - $statusBuffer, - $pos + Crypt_GPG_ByteUtils::strlen(PHP_EOL) - ); - } - } - - // write command (to GPG) - if (in_array($fdCommand, $outputStreams, true)) { - $this->_debug('GPG is ready for command data'); - - // send commands - $chunk = Crypt_GPG_ByteUtils::substr( - $this->_commandBuffer, - 0, - self::CHUNK_SIZE - ); - - $length = Crypt_GPG_ByteUtils::strlen($chunk); - - $this->_debug( - '=> about to write ' . $length . ' bytes to GPG command' - ); - - $length = fwrite($fdCommand, $chunk, $length); - if ($length === 0) { - // If we wrote 0 bytes it was either EAGAIN or EPIPE. Since - // the pipe was seleted for writing, we assume it was EPIPE. - // There's no way to get the actual erorr code in PHP. See - // PHP Bug #39598. https://bugs.php.net/bug.php?id=39598 - $this->_debug('=> broken pipe on GPG command'); - $this->_debug('=> closing pipe GPG command'); - $this->_closePipe(self::FD_COMMAND); - } else { - $this->_debug('=> wrote ' . $length); - $this->_commandBuffer = Crypt_GPG_ByteUtils::substr( - $this->_commandBuffer, - $length - ); - } - } - - if (count($outputStreams) === 0 || count($inputStreams) === 0) { - // we have an I/O imbalance, increase the select loop delay - // to smooth things out - $delay += 10; - } else { - // things are running smoothly, decrease the delay - $delay -= 8; - $delay = max(0, $delay); - } - - if ($delay > 0) { - usleep($delay); - } - - } // end loop while streams are open - - $this->_debug('END PROCESSING'); - } - - // }}} - // {{{ _openSubprocess() - - /** - * Opens an internal GPG subprocess for the current operation - * - * Opens a GPG subprocess, then connects the subprocess to some pipes. Sets - * the private class property {@link Crypt_GPG_Engine::$_process} to - * the new subprocess. - * - * @return void - * - * @throws Crypt_GPG_OpenSubprocessException if the subprocess could not be - * opened. - * - * @see Crypt_GPG_Engine::setOperation() - * @see Crypt_GPG_Engine::_closeSubprocess() - * @see Crypt_GPG_Engine::$_process - */ - private function _openSubprocess() - { - $version = $this->getVersion(); - - // Binary operations will not work on Windows with PHP < 5.2.6. This is - // in case stream_select() ever works on Windows. - $rb = (version_compare(PHP_VERSION, '5.2.6') < 0) ? 'r' : 'rb'; - $wb = (version_compare(PHP_VERSION, '5.2.6') < 0) ? 'w' : 'wb'; - - $env = $_ENV; - - // Newer versions of GnuPG return localized results. Crypt_GPG only - // works with English, so set the locale to 'C' for the subprocess. - $env['LC_ALL'] = 'C'; - - // If using GnuPG 2.x start the gpg-agent - if (version_compare($version, '2.0.0', 'ge')) { - $agentCommandLine = $this->_agent; - - $agentArguments = array( - '--options /dev/null', // ignore any saved options - '--csh', // output is easier to parse - '--keep-display', // prevent passing --display to pinentry - '--no-grab', - '--ignore-cache-for-signing', - '--pinentry-touch-file /dev/null', - '--disable-scdaemon', - '--no-use-standard-socket', - '--pinentry-program ' . escapeshellarg($this->_getPinEntry()) - ); - - if ($this->_homedir) { - $agentArguments[] = '--homedir ' . - escapeshellarg($this->_homedir); - } - - - $agentCommandLine .= ' ' . implode(' ', $agentArguments) - . ' --daemon'; - - $agentDescriptorSpec = array( - self::FD_INPUT => array('pipe', $rb), // stdin - self::FD_OUTPUT => array('pipe', $wb), // stdout - self::FD_ERROR => array('pipe', $wb) // stderr - ); - - $this->_debug('OPENING GPG-AGENT SUBPROCESS WITH THE FOLLOWING COMMAND:'); - $this->_debug($agentCommandLine); - - $this->_agentProcess = proc_open( - $agentCommandLine, - $agentDescriptorSpec, - $this->_agentPipes, - null, - $env, - array('binary_pipes' => true) - ); - - if (!is_resource($this->_agentProcess)) { - throw new Crypt_GPG_OpenSubprocessException( - 'Unable to open gpg-agent subprocess.', - 0, - $agentCommandLine - ); - } - - // Get GPG_AGENT_INFO and set environment variable for gpg process. - // This is a blocking read, but is only 1 line. - $agentInfo = fread( - $this->_agentPipes[self::FD_OUTPUT], - self::CHUNK_SIZE - ); - - $agentInfo = explode(' ', $agentInfo, 3); - $this->_agentInfo = $agentInfo[2]; - $env['GPG_AGENT_INFO'] = $this->_agentInfo; - - // gpg-agent daemon is started, we can close the launching process - $this->_closeAgentLaunchProcess(); - } - - $commandLine = $this->_binary; - - $defaultArguments = array( - '--status-fd ' . escapeshellarg(self::FD_STATUS), - '--command-fd ' . escapeshellarg(self::FD_COMMAND), - '--no-secmem-warning', - '--no-tty', - '--no-default-keyring', // ignored if keying files are not specified - '--no-options' // prevent creation of ~/.gnupg directory - ); - - if (version_compare($version, '1.0.7', 'ge')) { - if (version_compare($version, '2.0.0', 'lt')) { - $defaultArguments[] = '--no-use-agent'; - } - $defaultArguments[] = '--no-permission-warning'; - } - - if (version_compare($version, '1.4.2', 'ge')) { - $defaultArguments[] = '--exit-on-status-write-error'; - } - - if (version_compare($version, '1.3.2', 'ge')) { - $defaultArguments[] = '--trust-model always'; - } else { - $defaultArguments[] = '--always-trust'; - } - - $arguments = array_merge($defaultArguments, $this->_arguments); - - if ($this->_homedir) { - $arguments[] = '--homedir ' . escapeshellarg($this->_homedir); - - // the random seed file makes subsequent actions faster so only - // disable it if we have to. - if (!is_writeable($this->_homedir)) { - $arguments[] = '--no-random-seed-file'; - } - } - - if ($this->_publicKeyring) { - $arguments[] = '--keyring ' . escapeshellarg($this->_publicKeyring); - } - - if ($this->_privateKeyring) { - $arguments[] = '--secret-keyring ' . - escapeshellarg($this->_privateKeyring); - } - - if ($this->_trustDb) { - $arguments[] = '--trustdb-name ' . escapeshellarg($this->_trustDb); - } - - $commandLine .= ' ' . implode(' ', $arguments) . ' ' . - $this->_operation; - - $descriptorSpec = array( - self::FD_INPUT => array('pipe', $rb), // stdin - self::FD_OUTPUT => array('pipe', $wb), // stdout - self::FD_ERROR => array('pipe', $wb), // stderr - self::FD_STATUS => array('pipe', $wb), // status - self::FD_COMMAND => array('pipe', $rb), // command - self::FD_MESSAGE => array('pipe', $rb) // message - ); - - $this->_debug('OPENING GPG SUBPROCESS WITH THE FOLLOWING COMMAND:'); - $this->_debug($commandLine); - - $this->_process = proc_open( - $commandLine, - $descriptorSpec, - $this->_pipes, - null, - $env, - array('binary_pipes' => true) - ); - - if (!is_resource($this->_process)) { - throw new Crypt_GPG_OpenSubprocessException( - 'Unable to open GPG subprocess.', 0, $commandLine); - } - - // Set streams as non-blocking. See Bug #18618. - foreach ($this->_pipes as $pipe) { - stream_set_blocking($pipe, 0); - } - - $this->_openPipes = $this->_pipes; - $this->_errorCode = Crypt_GPG::ERROR_NONE; - } - - // }}} - // {{{ _closeSubprocess() - - /** - * Closes a the internal GPG subprocess - * - * Closes the internal GPG subprocess. Sets the private class property - * {@link Crypt_GPG_Engine::$_process} to null. - * - * @return void - * - * @see Crypt_GPG_Engine::_openSubprocess() - * @see Crypt_GPG_Engine::$_process - */ - private function _closeSubprocess() - { - // clear PINs from environment if they were set - $_ENV['PINENTRY_USER_DATA'] = null; - - if (is_resource($this->_process)) { - $this->_debug('CLOSING GPG SUBPROCESS'); - - // close remaining open pipes - foreach (array_keys($this->_openPipes) as $pipeNumber) { - $this->_closePipe($pipeNumber); - } - - $exitCode = proc_close($this->_process); - - if ($exitCode != 0) { - $this->_debug( - '=> subprocess returned an unexpected exit code: ' . - $exitCode - ); - - if ($this->_errorCode === Crypt_GPG::ERROR_NONE) { - if ($this->_needPassphrase > 0) { - $this->_errorCode = Crypt_GPG::ERROR_MISSING_PASSPHRASE; - } else { - $this->_errorCode = Crypt_GPG::ERROR_UNKNOWN; - } - } - } - - $this->_process = null; - $this->_pipes = array(); - } - - $this->_closeAgentLaunchProcess(); - - if ($this->_agentInfo !== null) { - $this->_debug('STOPPING GPG-AGENT DAEMON'); - - $parts = explode(':', $this->_agentInfo, 3); - $pid = $parts[1]; - $process = new Crypt_GPG_ProcessControl($pid); - - // terminate agent daemon - $process->terminate(); - - while ($process->isRunning()) { - usleep(10000); // 10 ms - $process->terminate(); - } - - $this->_agentInfo = null; - - $this->_debug('GPG-AGENT DAEMON STOPPED'); - } - } - - // }}} - // {{ _closeAgentLaunchProcess() - - private function _closeAgentLaunchProcess() - { - if (is_resource($this->_agentProcess)) { - $this->_debug('CLOSING GPG-AGENT LAUNCH PROCESS'); - - // close agent pipes - foreach ($this->_agentPipes as $pipe) { - fflush($pipe); - fclose($pipe); - } - - // close agent launching process - proc_close($this->_agentProcess); - - $this->_agentProcess = null; - $this->_agentPipes = array(); - - $this->_debug('GPG-AGENT LAUNCH PROCESS CLOSED'); - } - } - - // }} - // {{{ _closePipe() - - /** - * Closes an opened pipe used to communicate with the GPG subprocess - * - * If the pipe is already closed, it is ignored. If the pipe is open, it - * is flushed and then closed. - * - * @param integer $pipeNumber the file descriptor number of the pipe to - * close. - * - * @return void - */ - private function _closePipe($pipeNumber) - { - $pipeNumber = intval($pipeNumber); - if (array_key_exists($pipeNumber, $this->_openPipes)) { - fflush($this->_openPipes[$pipeNumber]); - fclose($this->_openPipes[$pipeNumber]); - unset($this->_openPipes[$pipeNumber]); - } - } - - // }}} - // {{{ _getBinary() - - /** - * Gets the name of the GPG binary for the current operating system - * - * This method is called if the '<kbd>binary</kbd>' option is <i>not</i> - * specified when creating this driver. - * - * @return string the name of the GPG binary for the current operating - * system. If no suitable binary could be found, an empty - * string is returned. - */ - private function _getBinary() - { - $binary = ''; - - if ($this->_isDarwin) { - $binaryFiles = array( - '/opt/local/bin/gpg', // MacPorts - '/usr/local/bin/gpg', // Mac GPG - '/sw/bin/gpg', // Fink - '/usr/bin/gpg' - ); - } else { - $binaryFiles = array( - '/usr/bin/gpg', - '/usr/local/bin/gpg' - ); - } - - foreach ($binaryFiles as $binaryFile) { - if (is_executable($binaryFile)) { - $binary = $binaryFile; - break; - } - } - - return $binary; - } - - // }}} - // {{ _getAgent() - - private function _getAgent() - { - $agent = ''; - - if ($this->_isDarwin) { - $agentFiles = array( - '/opt/local/bin/gpg-agent', // MacPorts - '/usr/local/bin/gpg-agent', // Mac GPG - '/sw/bin/gpg-agent', // Fink - '/usr/bin/gpg-agent' - ); - } else { - $agentFiles = array( - '/usr/bin/gpg-agent', - '/usr/local/bin/gpg-agent' - ); - } - - foreach ($agentFiles as $agentFile) { - if (is_executable($agentFile)) { - $agent = $agentFile; - break; - } - } - - return $agent; - } - - // }} - // {{ _getPinEntry() - - private function _getPinEntry() - { - // Check if we're running directly from git or if we're using a - // PEAR-packaged version - $pinEntry = '@bin-dir@' . DIRECTORY_SEPARATOR . 'crypt-gpg-pinentry'; - - if ($pinEntry[0] === '@') { - $pinEntry = dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' - . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'scripts' - . DIRECTORY_SEPARATOR . 'crypt-gpg-pinentry'; - } - - return $pinEntry; - } - - // }} - // {{{ _debug() - - /** - * Displays debug text if debugging is turned on - * - * Debugging text is prepended with a debug identifier and echoed to stdout. - * - * @param string $text the debugging text to display. - * - * @return void - */ - private function _debug($text) - { - if ($this->_debug) { - if (php_sapi_name() === 'cli') { - foreach (explode(PHP_EOL, $text) as $line) { - echo "Crypt_GPG DEBUG: ", $line, PHP_EOL; - } - } else { - // running on a web server, format debug output nicely - foreach (explode(PHP_EOL, $text) as $line) { - echo "Crypt_GPG DEBUG: <strong>", $line, - '</strong><br />', PHP_EOL; - } - } - } - } - - // }}} -} - -// }}} - -?> diff --git a/program/lib/Crypt/GPG/Exceptions.php b/program/lib/Crypt/GPG/Exceptions.php deleted file mode 100644 index 0ca917db6..000000000 --- a/program/lib/Crypt/GPG/Exceptions.php +++ /dev/null @@ -1,598 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Various exception handling classes for Crypt_GPG - * - * Crypt_GPG provides an object oriented interface to GNU Privacy - * Guard (GPG). It requires the GPG executable to be on the system. - * - * This file contains various exception classes used by the Crypt_GPG package. - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category Encryption - * @package Crypt_GPG - * @author Nathan Fredrickson <nathan@silverorange.com> - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2005-2011 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version CVS: $Id$ - * @link http://pear.php.net/package/Crypt_GPG - */ - -/** - * PEAR Exception handler and base class - */ -require_once 'PEAR/Exception.php'; - -// {{{ class Crypt_GPG_Exception - -/** - * An exception thrown by the Crypt_GPG package - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2005 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - */ -class Crypt_GPG_Exception extends PEAR_Exception -{ -} - -// }}} -// {{{ class Crypt_GPG_FileException - -/** - * An exception thrown when a file is used in ways it cannot be used - * - * For example, if an output file is specified and the file is not writeable, or - * if an input file is specified and the file is not readable, this exception - * is thrown. - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2007-2008 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - */ -class Crypt_GPG_FileException extends Crypt_GPG_Exception -{ - // {{{ private class properties - - /** - * The name of the file that caused this exception - * - * @var string - */ - private $_filename = ''; - - // }}} - // {{{ __construct() - - /** - * Creates a new Crypt_GPG_FileException - * - * @param string $message an error message. - * @param integer $code a user defined error code. - * @param string $filename the name of the file that caused this exception. - */ - public function __construct($message, $code = 0, $filename = '') - { - $this->_filename = $filename; - parent::__construct($message, $code); - } - - // }}} - // {{{ getFilename() - - /** - * Returns the filename of the file that caused this exception - * - * @return string the filename of the file that caused this exception. - * - * @see Crypt_GPG_FileException::$_filename - */ - public function getFilename() - { - return $this->_filename; - } - - // }}} -} - -// }}} -// {{{ class Crypt_GPG_OpenSubprocessException - -/** - * An exception thrown when the GPG subprocess cannot be opened - * - * This exception is thrown when the {@link Crypt_GPG_Engine} tries to open a - * new subprocess and fails. - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2005 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - */ -class Crypt_GPG_OpenSubprocessException extends Crypt_GPG_Exception -{ - // {{{ private class properties - - /** - * The command used to try to open the subprocess - * - * @var string - */ - private $_command = ''; - - // }}} - // {{{ __construct() - - /** - * Creates a new Crypt_GPG_OpenSubprocessException - * - * @param string $message an error message. - * @param integer $code a user defined error code. - * @param string $command the command that was called to open the - * new subprocess. - * - * @see Crypt_GPG::_openSubprocess() - */ - public function __construct($message, $code = 0, $command = '') - { - $this->_command = $command; - parent::__construct($message, $code); - } - - // }}} - // {{{ getCommand() - - /** - * Returns the contents of the internal _command property - * - * @return string the command used to open the subprocess. - * - * @see Crypt_GPG_OpenSubprocessException::$_command - */ - public function getCommand() - { - return $this->_command; - } - - // }}} -} - -// }}} -// {{{ class Crypt_GPG_InvalidOperationException - -/** - * An exception thrown when an invalid GPG operation is attempted - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2008 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - */ -class Crypt_GPG_InvalidOperationException extends Crypt_GPG_Exception -{ - // {{{ private class properties - - /** - * The attempted operation - * - * @var string - */ - private $_operation = ''; - - // }}} - // {{{ __construct() - - /** - * Creates a new Crypt_GPG_OpenSubprocessException - * - * @param string $message an error message. - * @param integer $code a user defined error code. - * @param string $operation the operation. - */ - public function __construct($message, $code = 0, $operation = '') - { - $this->_operation = $operation; - parent::__construct($message, $code); - } - - // }}} - // {{{ getOperation() - - /** - * Returns the contents of the internal _operation property - * - * @return string the attempted operation. - * - * @see Crypt_GPG_InvalidOperationException::$_operation - */ - public function getOperation() - { - return $this->_operation; - } - - // }}} -} - -// }}} -// {{{ class Crypt_GPG_KeyNotFoundException - -/** - * An exception thrown when Crypt_GPG fails to find the key for various - * operations - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2005 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - */ -class Crypt_GPG_KeyNotFoundException extends Crypt_GPG_Exception -{ - // {{{ private class properties - - /** - * The key identifier that was searched for - * - * @var string - */ - private $_keyId = ''; - - // }}} - // {{{ __construct() - - /** - * Creates a new Crypt_GPG_KeyNotFoundException - * - * @param string $message an error message. - * @param integer $code a user defined error code. - * @param string $keyId the key identifier of the key. - */ - public function __construct($message, $code = 0, $keyId= '') - { - $this->_keyId = $keyId; - parent::__construct($message, $code); - } - - // }}} - // {{{ getKeyId() - - /** - * Gets the key identifier of the key that was not found - * - * @return string the key identifier of the key that was not found. - */ - public function getKeyId() - { - return $this->_keyId; - } - - // }}} -} - -// }}} -// {{{ class Crypt_GPG_NoDataException - -/** - * An exception thrown when Crypt_GPG cannot find valid data for various - * operations - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2006 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - */ -class Crypt_GPG_NoDataException extends Crypt_GPG_Exception -{ -} - -// }}} -// {{{ class Crypt_GPG_BadPassphraseException - -/** - * An exception thrown when a required passphrase is incorrect or missing - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2006-2008 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - */ -class Crypt_GPG_BadPassphraseException extends Crypt_GPG_Exception -{ - // {{{ private class properties - - /** - * Keys for which the passhprase is missing - * - * This contains primary user ids indexed by sub-key id. - * - * @var array - */ - private $_missingPassphrases = array(); - - /** - * Keys for which the passhprase is incorrect - * - * This contains primary user ids indexed by sub-key id. - * - * @var array - */ - private $_badPassphrases = array(); - - // }}} - // {{{ __construct() - - /** - * Creates a new Crypt_GPG_BadPassphraseException - * - * @param string $message an error message. - * @param integer $code a user defined error code. - * @param string $badPassphrases an array containing user ids of keys - * for which the passphrase is incorrect. - * @param string $missingPassphrases an array containing user ids of keys - * for which the passphrase is missing. - */ - public function __construct($message, $code = 0, - array $badPassphrases = array(), array $missingPassphrases = array() - ) { - $this->_badPassphrases = $badPassphrases; - $this->_missingPassphrases = $missingPassphrases; - - parent::__construct($message, $code); - } - - // }}} - // {{{ getBadPassphrases() - - /** - * Gets keys for which the passhprase is incorrect - * - * @return array an array of keys for which the passphrase is incorrect. - * The array contains primary user ids indexed by the sub-key - * id. - */ - public function getBadPassphrases() - { - return $this->_badPassphrases; - } - - // }}} - // {{{ getMissingPassphrases() - - /** - * Gets keys for which the passhprase is missing - * - * @return array an array of keys for which the passphrase is missing. - * The array contains primary user ids indexed by the sub-key - * id. - */ - public function getMissingPassphrases() - { - return $this->_missingPassphrases; - } - - // }}} -} - -// }}} -// {{{ class Crypt_GPG_DeletePrivateKeyException - -/** - * An exception thrown when an attempt is made to delete public key that has an - * associated private key on the keyring - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2008 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - */ -class Crypt_GPG_DeletePrivateKeyException extends Crypt_GPG_Exception -{ - // {{{ private class properties - - /** - * The key identifier the deletion attempt was made upon - * - * @var string - */ - private $_keyId = ''; - - // }}} - // {{{ __construct() - - /** - * Creates a new Crypt_GPG_DeletePrivateKeyException - * - * @param string $message an error message. - * @param integer $code a user defined error code. - * @param string $keyId the key identifier of the public key that was - * attempted to delete. - * - * @see Crypt_GPG::deletePublicKey() - */ - public function __construct($message, $code = 0, $keyId = '') - { - $this->_keyId = $keyId; - parent::__construct($message, $code); - } - - // }}} - // {{{ getKeyId() - - /** - * Gets the key identifier of the key that was not found - * - * @return string the key identifier of the key that was not found. - */ - public function getKeyId() - { - return $this->_keyId; - } - - // }}} -} - -// }}} -// {{{ class Crypt_GPG_KeyNotCreatedException - -/** - * An exception thrown when an attempt is made to generate a key and the - * attempt fails - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2011 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - */ -class Crypt_GPG_KeyNotCreatedException extends Crypt_GPG_Exception -{ -} - -// }}} -// {{{ class Crypt_GPG_InvalidKeyParamsException - -/** - * An exception thrown when an attempt is made to generate a key and the - * key parameters set on the key generator are invalid - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2011 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - */ -class Crypt_GPG_InvalidKeyParamsException extends Crypt_GPG_Exception -{ - // {{{ private class properties - - /** - * The key algorithm - * - * @var integer - */ - private $_algorithm = 0; - - /** - * The key size - * - * @var integer - */ - private $_size = 0; - - /** - * The key usage - * - * @var integer - */ - private $_usage = 0; - - // }}} - // {{{ __construct() - - /** - * Creates a new Crypt_GPG_InvalidKeyParamsException - * - * @param string $message an error message. - * @param integer $code a user defined error code. - * @param string $algorithm the key algorithm. - * @param string $size the key size. - * @param string $usage the key usage. - */ - public function __construct( - $message, - $code = 0, - $algorithm = 0, - $size = 0, - $usage = 0 - ) { - parent::__construct($message, $code); - - $this->_algorithm = $algorithm; - $this->_size = $size; - $this->_usage = $usage; - } - - // }}} - // {{{ getAlgorithm() - - /** - * Gets the key algorithm - * - * @return integer the key algorithm. - */ - public function getAlgorithm() - { - return $this->_algorithm; - } - - // }}} - // {{{ getSize() - - /** - * Gets the key size - * - * @return integer the key size. - */ - public function getSize() - { - return $this->_size; - } - - // }}} - // {{{ getUsage() - - /** - * Gets the key usage - * - * @return integer the key usage. - */ - public function getUsage() - { - return $this->_usage; - } - - // }}} -} - -// }}} - -?> diff --git a/program/lib/Crypt/GPG/Key.php b/program/lib/Crypt/GPG/Key.php deleted file mode 100644 index 6ecb538bc..000000000 --- a/program/lib/Crypt/GPG/Key.php +++ /dev/null @@ -1,223 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Contains a class representing GPG keys - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2008-2010 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version CVS: $Id$ - * @link http://pear.php.net/package/Crypt_GPG - */ - -/** - * Sub-key class definition - */ -require_once 'Crypt/GPG/SubKey.php'; - -/** - * User id class definition - */ -require_once 'Crypt/GPG/UserId.php'; - -// {{{ class Crypt_GPG_Key - -/** - * A data class for GPG key information - * - * This class is used to store the results of the {@link Crypt_GPG::getKeys()} - * method. - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2008-2010 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - * @see Crypt_GPG::getKeys() - */ -class Crypt_GPG_Key -{ - // {{{ class properties - - /** - * The user ids associated with this key - * - * This is an array of {@link Crypt_GPG_UserId} objects. - * - * @var array - * - * @see Crypt_GPG_Key::addUserId() - * @see Crypt_GPG_Key::getUserIds() - */ - private $_userIds = array(); - - /** - * The subkeys of this key - * - * This is an array of {@link Crypt_GPG_SubKey} objects. - * - * @var array - * - * @see Crypt_GPG_Key::addSubKey() - * @see Crypt_GPG_Key::getSubKeys() - */ - private $_subKeys = array(); - - // }}} - // {{{ getSubKeys() - - /** - * Gets the sub-keys of this key - * - * @return array the sub-keys of this key. - * - * @see Crypt_GPG_Key::addSubKey() - */ - public function getSubKeys() - { - return $this->_subKeys; - } - - // }}} - // {{{ getUserIds() - - /** - * Gets the user ids of this key - * - * @return array the user ids of this key. - * - * @see Crypt_GPG_Key::addUserId() - */ - public function getUserIds() - { - return $this->_userIds; - } - - // }}} - // {{{ getPrimaryKey() - - /** - * Gets the primary sub-key of this key - * - * The primary key is the first added sub-key. - * - * @return Crypt_GPG_SubKey the primary sub-key of this key. - */ - public function getPrimaryKey() - { - $primary_key = null; - if (count($this->_subKeys) > 0) { - $primary_key = $this->_subKeys[0]; - } - return $primary_key; - } - - // }}} - // {{{ canSign() - - /** - * Gets whether or not this key can sign data - * - * This key can sign data if any sub-key of this key can sign data. - * - * @return boolean true if this key can sign data and false if this key - * cannot sign data. - */ - public function canSign() - { - $canSign = false; - foreach ($this->_subKeys as $subKey) { - if ($subKey->canSign()) { - $canSign = true; - break; - } - } - return $canSign; - } - - // }}} - // {{{ canEncrypt() - - /** - * Gets whether or not this key can encrypt data - * - * This key can encrypt data if any sub-key of this key can encrypt data. - * - * @return boolean true if this key can encrypt data and false if this - * key cannot encrypt data. - */ - public function canEncrypt() - { - $canEncrypt = false; - foreach ($this->_subKeys as $subKey) { - if ($subKey->canEncrypt()) { - $canEncrypt = true; - break; - } - } - return $canEncrypt; - } - - // }}} - // {{{ addSubKey() - - /** - * Adds a sub-key to this key - * - * The first added sub-key will be the primary key of this key. - * - * @param Crypt_GPG_SubKey $subKey the sub-key to add. - * - * @return Crypt_GPG_Key the current object, for fluent interface. - */ - public function addSubKey(Crypt_GPG_SubKey $subKey) - { - $this->_subKeys[] = $subKey; - return $this; - } - - // }}} - // {{{ addUserId() - - /** - * Adds a user id to this key - * - * @param Crypt_GPG_UserId $userId the user id to add. - * - * @return Crypt_GPG_Key the current object, for fluent interface. - */ - public function addUserId(Crypt_GPG_UserId $userId) - { - $this->_userIds[] = $userId; - return $this; - } - - // }}} -} - -// }}} - -?> diff --git a/program/lib/Crypt/GPG/KeyGenerator.php b/program/lib/Crypt/GPG/KeyGenerator.php deleted file mode 100644 index f59c0ee3a..000000000 --- a/program/lib/Crypt/GPG/KeyGenerator.php +++ /dev/null @@ -1,790 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Crypt_GPG is a package to use GPG from PHP - * - * This file contains an object that handles GnuPG key generation. - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2011-2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version CVS: $Id:$ - * @link http://pear.php.net/package/Crypt_GPG - * @link http://www.gnupg.org/ - */ - -/** - * Base class for GPG methods - */ -require_once 'Crypt/GPGAbstract.php'; - -/** - * Status output handler for key generation - */ -require_once 'Crypt/GPG/KeyGeneratorStatusHandler.php'; - -/** - * Error output handler for key generation - */ -require_once 'Crypt/GPG/KeyGeneratorErrorHandler.php'; - -// {{{ class Crypt_GPG_KeyGenerator - -/** - * GnuPG key generator - * - * This class provides an object oriented interface for generating keys with - * the GNU Privacy Guard (GPG). - * - * Secure key generation requires true random numbers, and as such can be slow. - * If the operating system runs out of entropy, key generation will block until - * more entropy is available. - * - * If quick key generation is important, a hardware entropy generator, or an - * entropy gathering daemon may be installed. For example, administrators of - * Debian systems may want to install the 'randomsound' package. - * - * This class uses the experimental automated key generation support available - * in GnuPG. See <b>doc/DETAILS</b> in the - * {@link http://www.gnupg.org/download/ GPG distribution} for detailed - * information on the key generation format. - * - * @category Encryption - * @package Crypt_GPG - * @author Nathan Fredrickson <nathan@silverorange.com> - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2005-2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - * @link http://www.gnupg.org/ - */ -class Crypt_GPG_KeyGenerator extends Crypt_GPGAbstract -{ - // {{{ protected properties - - /** - * The expiration date of generated keys - * - * @var integer - * - * @see Crypt_GPG_KeyGenerator::setExpirationDate() - */ - protected $expirationDate = 0; - - /** - * The passphrase of generated keys - * - * @var string - * - * @see Crypt_GPG_KeyGenerator::setPassphrase() - */ - protected $passphrase = ''; - - /** - * The algorithm for generated primary keys - * - * @var integer - * - * @see Crypt_GPG_KeyGenerator::setKeyParams() - */ - protected $keyAlgorithm = Crypt_GPG_SubKey::ALGORITHM_DSA; - - /** - * The size of generated primary keys - * - * @var integer - * - * @see Crypt_GPG_KeyGenerator::setKeyParams() - */ - protected $keySize = 1024; - - /** - * The usages of generated primary keys - * - * This is a bitwise combination of the usage constants in - * {@link Crypt_GPG_SubKey}. - * - * @var integer - * - * @see Crypt_GPG_KeyGenerator::setKeyParams() - */ - protected $keyUsage = 6; // USAGE_SIGN | USAGE_CERTIFY - - /** - * The algorithm for generated sub-keys - * - * @var integer - * - * @see Crypt_GPG_KeyGenerator::setSubKeyParams() - */ - protected $subKeyAlgorithm = Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC; - - /** - * The size of generated sub-keys - * - * @var integer - * - * @see Crypt_GPG_KeyGenerator::setSubKeyParams() - */ - protected $subKeySize = 2048; - - /** - * The usages of generated sub-keys - * - * This is a bitwise combination of the usage constants in - * {@link Crypt_GPG_SubKey}. - * - * @var integer - * - * @see Crypt_GPG_KeyGenerator::setSubKeyParams() - */ - protected $subKeyUsage = Crypt_GPG_SubKey::USAGE_ENCRYPT; - - /** - * The GnuPG status handler to use for key generation - * - * @var Crypt_GPG_KeyGeneratorStatusHandler - * - * @see Crypt_GPG_KeyGenerator::setStatusHandler() - */ - protected $statusHandler = null; - - /** - * The GnuPG error handler to use for key generation - * - * @var Crypt_GPG_KeyGeneratorErrorHandler - * - * @see Crypt_GPG_KeyGenerator::setErrorHandler() - */ - protected $errorHandler = null; - - // }}} - // {{{ __construct() - - /** - * Creates a new GnuPG key generator - * - * Available options are: - * - * - <kbd>string homedir</kbd> - the directory where the GPG - * keyring files are stored. If not - * specified, Crypt_GPG uses the - * default of <kbd>~/.gnupg</kbd>. - * - <kbd>string publicKeyring</kbd> - the file path of the public - * keyring. Use this if the public - * keyring is not in the homedir, or - * if the keyring is in a directory - * not writable by the process - * invoking GPG (like Apache). Then - * you can specify the path to the - * keyring with this option - * (/foo/bar/pubring.gpg), and specify - * a writable directory (like /tmp) - * using the <i>homedir</i> option. - * - <kbd>string privateKeyring</kbd> - the file path of the private - * keyring. Use this if the private - * keyring is not in the homedir, or - * if the keyring is in a directory - * not writable by the process - * invoking GPG (like Apache). Then - * you can specify the path to the - * keyring with this option - * (/foo/bar/secring.gpg), and specify - * a writable directory (like /tmp) - * using the <i>homedir</i> option. - * - <kbd>string trustDb</kbd> - the file path of the web-of-trust - * database. Use this if the trust - * database is not in the homedir, or - * if the database is in a directory - * not writable by the process - * invoking GPG (like Apache). Then - * you can specify the path to the - * trust database with this option - * (/foo/bar/trustdb.gpg), and specify - * a writable directory (like /tmp) - * using the <i>homedir</i> option. - * - <kbd>string binary</kbd> - the location of the GPG binary. If - * not specified, the driver attempts - * to auto-detect the GPG binary - * location using a list of known - * default locations for the current - * operating system. The option - * <kbd>gpgBinary</kbd> is a - * deprecated alias for this option. - * - <kbd>string agent</kbd> - the location of the GnuPG agent - * binary. The gpg-agent is only - * used for GnuPG 2.x. If not - * specified, the engine attempts - * to auto-detect the gpg-agent - * binary location using a list of - * know default locations for the - * current operating system. - * - <kbd>boolean debug</kbd> - whether or not to use debug mode. - * When debug mode is on, all - * communication to and from the GPG - * subprocess is logged. This can be - * - * @param array $options optional. An array of options used to create the - * GPG object. All options are optional and are - * represented as key-value pairs. - * - * @throws Crypt_GPG_FileException if the <kbd>homedir</kbd> does not exist - * and cannot be created. This can happen if <kbd>homedir</kbd> is - * not specified, Crypt_GPG is run as the web user, and the web - * user has no home directory. This exception is also thrown if any - * of the options <kbd>publicKeyring</kbd>, - * <kbd>privateKeyring</kbd> or <kbd>trustDb</kbd> options are - * specified but the files do not exist or are are not readable. - * This can happen if the user running the Crypt_GPG process (for - * example, the Apache user) does not have permission to read the - * files. - * - * @throws PEAR_Exception if the provided <kbd>binary</kbd> is invalid, or - * if no <kbd>binary</kbd> is provided and no suitable binary could - * be found. - * - * @throws PEAR_Exception if the provided <kbd>agent</kbd> is invalid, or - * if no <kbd>agent</kbd> is provided and no suitable gpg-agent - * cound be found. - */ - public function __construct(array $options = array()) - { - parent::__construct($options); - - $this->statusHandler = new Crypt_GPG_KeyGeneratorStatusHandler(); - $this->errorHandler = new Crypt_GPG_KeyGeneratorErrorHandler(); - } - - // }}} - // {{{ setExpirationDate() - - /** - * Sets the expiration date of generated keys - * - * @param string|integer $date either a string that may be parsed by - * PHP's strtotime() function, or an integer - * timestamp representing the number of seconds - * since the UNIX epoch. This date must be at - * least one date in the future. Keys that - * expire in the past may not be generated. Use - * an expiration date of 0 for keys that do not - * expire. - * - * @throws InvalidArgumentException if the date is not a valid format, or - * if the date is not at least one day in - * the future, or if the date is greater - * than 2038-01-19T03:14:07. - * - * @return Crypt_GPG_KeyGenerator the current object, for fluent interface. - */ - public function setExpirationDate($date) - { - if (is_int($date) || ctype_digit(strval($date))) { - $expirationDate = intval($date); - } else { - $expirationDate = strtotime($date); - } - - if ($expirationDate === false) { - throw new InvalidArgumentException( - sprintf( - 'Invalid expiration date format: "%s". Please use a ' . - 'format compatible with PHP\'s strtotime().', - $date - ) - ); - } - - if ($expirationDate !== 0 && $expirationDate < time() + 86400) { - throw new InvalidArgumentException( - 'Expiration date must be at least a day in the future.' - ); - } - - // GnuPG suffers from the 2038 bug - if ($expirationDate > 2147483647) { - throw new InvalidArgumentException( - 'Expiration date must not be greater than 2038-01-19T03:14:07.' - ); - } - - $this->expirationDate = $expirationDate; - - return $this; - } - - // }}} - // {{{ setPassphrase() - - /** - * Sets the passphrase of generated keys - * - * @param string $passphrase the passphrase to use for generated keys. Use - * null or an empty string for no passphrase. - * - * @return Crypt_GPG_KeyGenerator the current object, for fluent interface. - */ - public function setPassphrase($passphrase) - { - $this->passphrase = strval($passphrase); - return $this; - } - - // }}} - // {{{ setKeyParams() - - /** - * Sets the parameters for the primary key of generated key-pairs - * - * @param integer $algorithm the algorithm used by the key. This should be - * one of the Crypt_GPG_SubKey::ALGORITHM_* - * constants. - * @param integer $size optional. The size of the key. Different - * algorithms have different size requirements. - * If not specified, the default size for the - * specified algorithm will be used. If an - * invalid key size is used, GnuPG will do its - * best to round it to a valid size. - * @param integer $usage optional. A bitwise combination of key usages. - * If not specified, the primary key will be used - * only to sign and certify. This is the default - * behavior of GnuPG in interactive mode. Use - * the Crypt_GPG_SubKey::USAGE_* constants here. - * The primary key may be used to certify even - * if the certify usage is not specified. - * - * @return Crypt_GPG_KeyGenerator the current object, for fluent interface. - */ - public function setKeyParams($algorithm, $size = 0, $usage = 0) - { - $apgorithm = intval($algorithm); - - if ($algorithm === Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC) { - throw new Crypt_GPG_InvalidKeyParamsException( - 'Primary key algorithm must be capable of signing. The ' . - 'Elgamal algorithm can only encrypt.', - 0, - $algorithm, - $size, - $usage - ); - } - - if ($size != 0) { - $size = intval($size); - } - - if ($usage != 0) { - $usage = intval($usage); - } - - $usageEncrypt = Crypt_GPG_SubKey::USAGE_ENCRYPT; - - if ( $algorithm === Crypt_GPG_SubKey::ALGORITHM_DSA - && ($usage & $usageEncrypt) === $usageEncrypt - ) { - throw new Crypt_GPG_InvalidKeyParamsException( - 'The DSA algorithm is not capable of encrypting. Please ' . - 'specify a different algorithm or do not include encryption ' . - 'as a usage for the primary key.', - 0, - $algorithm, - $size, - $usage - ); - } - - $this->keyAlgorithm = $algorithm; - - if ($size != 0) { - $this->keySize = $size; - } - - if ($usage != 0) { - $this->keyUsage = $usage; - } - - return $this; - } - - // }}} - // {{{ setSubKeyParams() - - /** - * Sets the parameters for the sub-key of generated key-pairs - * - * @param integer $algorithm the algorithm used by the key. This should be - * one of the Crypt_GPG_SubKey::ALGORITHM_* - * constants. - * @param integer $size optional. The size of the key. Different - * algorithms have different size requirements. - * If not specified, the default size for the - * specified algorithm will be used. If an - * invalid key size is used, GnuPG will do its - * best to round it to a valid size. - * @param integer $usage optional. A bitwise combination of key usages. - * If not specified, the sub-key will be used - * only to encrypt. This is the default behavior - * of GnuPG in interactive mode. Use the - * Crypt_GPG_SubKey::USAGE_* constants here. - * - * @return Crypt_GPG_KeyGenerator the current object, for fluent interface. - */ - public function setSubKeyParams($algorithm, $size = '', $usage = 0) - { - $apgorithm = intval($algorithm); - - if ($size != 0) { - $size = intval($size); - } - - if ($usage != 0) { - $usage = intval($usage); - } - - $usageSign = Crypt_GPG_SubKey::USAGE_SIGN; - - if ( $algorithm === Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC - && ($usage & $usageSign) === $usageSign - ) { - throw new Crypt_GPG_InvalidKeyParamsException( - 'The Elgamal algorithm is not capable of signing. Please ' . - 'specify a different algorithm or do not include signing ' . - 'as a usage for the sub-key.', - 0, - $algorithm, - $size, - $usage - ); - } - - $usageEncrypt = Crypt_GPG_SubKey::USAGE_ENCRYPT; - - if ( $algorithm === Crypt_GPG_SubKey::ALGORITHM_DSA - && ($usage & $usageEncrypt) === $usageEncrypt - ) { - throw new Crypt_GPG_InvalidKeyParamsException( - 'The DSA algorithm is not capable of encrypting. Please ' . - 'specify a different algorithm or do not include encryption ' . - 'as a usage for the sub-key.', - 0, - $algorithm, - $size, - $usage - ); - } - - $this->subKeyAlgorithm = $algorithm; - - if ($size != 0) { - $this->subKeySize = $size; - } - - if ($usage != 0) { - $this->subKeyUsage = $usage; - } - - return $this; - } - - // }}} - // {{{ setStatusHandler() - - /** - * Sets the status handler to use for key generation - * - * Normally this method does not need to be used. It provides a means for - * dependency injection. - * - * @param Crypt_GPG_KeyStatusHandler $handler the key status handler to - * use. - * - * @return Crypt_GPG_KeyGenerator the current object, for fluent interface. - */ - public function setStatusHandler( - Crypt_GPG_KeyGeneratorStatusHandler $handler - ) { - $this->statusHandler = $handler; - return $this; - } - - // }}} - // {{{ setErrorHandler() - - /** - * Sets the error handler to use for key generation - * - * Normally this method does not need to be used. It provides a means for - * dependency injection. - * - * @param Crypt_GPG_KeyErrorHandler $handler the key error handler to - * use. - * - * @return Crypt_GPG_KeyGenerator the current object, for fluent interface. - */ - public function setErrorHandler( - Crypt_GPG_KeyGeneratorErrorHandler $handler - ) { - $this->errorHandler = $handler; - return $this; - } - - // }}} - // {{{ generateKey() - - /** - * Generates a new key-pair in the current keyring - * - * Secure key generation requires true random numbers, and as such can be - * solw. If the operating system runs out of entropy, key generation will - * block until more entropy is available. - * - * If quick key generation is important, a hardware entropy generator, or - * an entropy gathering daemon may be installed. For example, - * administrators of Debian systems may want to install the 'randomsound' - * package. - * - * @param string|Crypt_GPG_UserId $name either a {@link Crypt_GPG_UserId} - * object, or a string containing - * the name of the user id. - * @param string $email optional. If <i>$name</i> is - * specified as a string, this is - * the email address of the user id. - * @param string $comment optional. If <i>$name</i> is - * specified as a string, this is - * the comment of the user id. - * - * @return Crypt_GPG_Key the newly generated key. - * - * @throws Crypt_GPG_KeyNotCreatedException if the key parameters are - * incorrect, if an unknown error occurs during key generation, or - * if the newly generated key is not found in the keyring. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - */ - public function generateKey($name, $email = '', $comment = '') - { - $handle = uniqid('key', true); - - $userId = $this->getUserId($name, $email, $comment); - - $keyParams = array( - 'Key-Type' => $this->keyAlgorithm, - 'Key-Length' => $this->keySize, - 'Key-Usage' => $this->getUsage($this->keyUsage), - 'Subkey-Type' => $this->subKeyAlgorithm, - 'Subkey-Length' => $this->subKeySize, - 'Subkey-Usage' => $this->getUsage($this->subKeyUsage), - 'Name-Real' => $userId->getName(), - 'Handle' => $handle, - ); - - if ($this->expirationDate != 0) { - // GnuPG only accepts granularity of days - $expirationDate = date('Y-m-d', $this->expirationDate); - $keyParams['Expire-Date'] = $expirationDate; - } - - if ($this->passphrase != '') { - $keyParams['Passphrase'] = $this->passphrase; - } - - if ($userId->getEmail() != '') { - $keyParams['Name-Email'] = $userId->getEmail(); - } - - if ($userId->getComment() != '') { - $keyParams['Name-Comment'] = $userId->getComment(); - } - - - $keyParamsFormatted = array(); - foreach ($keyParams as $name => $value) { - $keyParamsFormatted[] = $name . ': ' . $value; - } - - $input = implode("\n", $keyParamsFormatted) . "\n%commit\n"; - - $statusHandler = clone $this->statusHandler; - $statusHandler->setHandle($handle); - - $errorHandler = clone $this->errorHandler; - - $this->engine->reset(); - $this->engine->addStatusHandler(array($statusHandler, 'handle')); - $this->engine->addErrorHandler(array($errorHandler, 'handle')); - $this->engine->setInput($input); - $this->engine->setOutput($output); - $this->engine->setOperation('--gen-key', array('--batch')); - $this->engine->run(); - - $code = $errorHandler->getErrorCode(); - switch ($code) { - case self::ERROR_BAD_KEY_PARAMS: - switch ($errorHandler->getLineNumber()) { - case 1: - throw new Crypt_GPG_InvalidKeyParamsException( - 'Invalid primary key algorithm specified.', - 0, - $this->keyAlgorithm, - $this->keySize, - $this->keyUsage - ); - case 4: - throw new Crypt_GPG_InvalidKeyParamsException( - 'Invalid sub-key algorithm specified.', - 0, - $this->subKeyAlgorithm, - $this->subKeySize, - $this->subKeyUsage - ); - default: - throw new Crypt_GPG_InvalidKeyParamsException( - 'Invalid key algorithm specified.' - ); - } - } - - $code = $this->engine->getErrorCode(); - - switch ($code) { - case self::ERROR_NONE: - break; - default: - throw new Crypt_GPG_Exception( - 'Unknown error generating key-pair. Please use the \'debug\' ' . - 'option when creating the Crypt_GPG object, and file a bug ' . - 'report at ' . self::BUG_URI, - $code - ); - } - - $code = $statusHandler->getErrorCode(); - - switch ($code) { - case self::ERROR_NONE: - break; - case self::ERROR_KEY_NOT_CREATED: - throw new Crypt_GPG_KeyNotCreatedException( - 'Unable to create new key-pair. Invalid key parameters. ' . - 'Make sure the specified key algorithms and sizes are ' . - 'correct.', - $code - ); - } - - $fingerprint = $statusHandler->getKeyFingerprint(); - $keys = $this->_getKeys($fingerprint); - - if (count($keys) === 0) { - throw new Crypt_GPG_KeyNotCreatedException( - sprintf( - 'Newly created key "%s" not found in keyring.', - $fingerprint - ) - ); - } - - return $keys[0]; - } - - // }}} - // {{{ getUsage() - - /** - * Builds a GnuPG key usage string suitable for key generation - * - * See <b>doc/DETAILS</b> in the - * {@link http://www.gnupg.org/download/ GPG distribution} for detailed - * information on the key usage format. - * - * @param integer $usage a bitwise combination of the key usages. This is - * a combination of the Crypt_GPG_SubKey::USAGE_* - * constants. - * - * @return string the key usage string. - */ - protected function getUsage($usage) - { - $map = array( - Crypt_GPG_SubKey::USAGE_ENCRYPT => 'encrypt', - Crypt_GPG_SubKey::USAGE_SIGN => 'sign', - Crypt_GPG_SubKey::USAGE_CERTIFY => 'cert', - Crypt_GPG_SubKey::USAGE_AUTHENTICATION => 'auth', - ); - - // cert is always used for primary keys and does not need to be - // specified - $usage &= ~Crypt_GPG_SubKey::USAGE_CERTIFY; - - $usageArray = array(); - - foreach ($map as $key => $value) { - if (($usage & $key) === $key) { - $usageArray[] = $value; - } - } - - return implode(',', $usageArray); - } - - // }}} - // {{{ getUserId() - - /** - * Gets a user id object from parameters - * - * @param string|Crypt_GPG_UserId $name either a {@link Crypt_GPG_UserId} - * object, or a string containing - * the name of the user id. - * @param string $email optional. If <i>$name</i> is - * specified as a string, this is - * the email address of the user id. - * @param string $comment optional. If <i>$name</i> is - * specified as a string, this is - * the comment of the user id. - * - * @return Crypt_GPG_UserId a user id object for the specified parameters. - */ - protected function getUserId($name, $email = '', $comment = '') - { - if ($name instanceof Crypt_GPG_UserId) { - $userId = $name; - } else { - $userId = new Crypt_GPG_UserId(); - $userId->setName($name)->setEmail($email)->setComment($comment); - } - - return $userId; - } - - // }}} -} - -// }}} - -?> diff --git a/program/lib/Crypt/GPG/KeyGeneratorErrorHandler.php b/program/lib/Crypt/GPG/KeyGeneratorErrorHandler.php deleted file mode 100644 index ad9ebf395..000000000 --- a/program/lib/Crypt/GPG/KeyGeneratorErrorHandler.php +++ /dev/null @@ -1,121 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Crypt_GPG is a package to use GPG from PHP - * - * This file contains an object that handles GPG's error output for the - * key generation operation. - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2011-2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version CVS: $Id:$ - * @link http://pear.php.net/package/Crypt_GPG - * @link http://www.gnupg.org/ - */ - -/** - * Error line handler for the key generation operation - * - * This class is used internally by Crypt_GPG and does not need be used - * directly. See the {@link Crypt_GPG} class for end-user API. - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2011-2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - * @link http://www.gnupg.org/ - */ -class Crypt_GPG_KeyGeneratorErrorHandler -{ - // {{{ protected properties - - /** - * Error code (if any) caused by key generation - * - * @var integer - */ - protected $errorCode = Crypt_GPG::ERROR_NONE; - - /** - * Line number at which the error occurred - * - * @var integer - */ - protected $lineNumber = null; - - // }}} - // {{{ handle() - - /** - * Handles an error line - * - * @param string $line the error line to handle. - * - * @return void - */ - public function handle($line) - { - $matches = array(); - $pattern = '/:([0-9]+): invalid algorithm$/'; - if (preg_match($pattern, $line, $matches) === 1) { - $this->errorCode = Crypt_GPG::ERROR_BAD_KEY_PARAMS; - $this->lineNumber = intval($matches[1]); - } - } - - // }}} - // {{{ getErrorCode() - - /** - * Gets the error code resulting from key gneration - * - * @return integer the error code resulting from key generation. - */ - public function getErrorCode() - { - return $this->errorCode; - } - - // }}} - // {{{ getLineNumber() - - /** - * Gets the line number at which the error occurred - * - * @return integer the line number at which the error occurred. Null if - * no error occurred. - */ - public function getLineNumber() - { - return $this->lineNumber; - } - - // }}} -} - -?> diff --git a/program/lib/Crypt/GPG/KeyGeneratorStatusHandler.php b/program/lib/Crypt/GPG/KeyGeneratorStatusHandler.php deleted file mode 100644 index 8b4c85c7a..000000000 --- a/program/lib/Crypt/GPG/KeyGeneratorStatusHandler.php +++ /dev/null @@ -1,173 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Crypt_GPG is a package to use GPG from PHP - * - * This file contains an object that handles GPG's status output for the - * key generation operation. - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2011-2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version CVS: $Id:$ - * @link http://pear.php.net/package/Crypt_GPG - * @link http://www.gnupg.org/ - */ - -/** - * Status line handler for the key generation operation - * - * This class is used internally by Crypt_GPG and does not need be used - * directly. See the {@link Crypt_GPG} class for end-user API. - * - * This class is responsible for parsing the final key fingerprint from the - * status output and for updating the key generation progress file. See - * <b>doc/DETAILS</b> in the - * {@link http://www.gnupg.org/download/ GPG distribution} for detailed - * information on GPG's status output for the batch key generation operation. - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2011-2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - * @link http://www.gnupg.org/ - */ -class Crypt_GPG_KeyGeneratorStatusHandler -{ - // {{{ protected properties - - /** - * The key fingerprint - * - * Ths key fingerprint is emitted by GPG after the key generation is - * complete. - * - * @var string - */ - protected $keyFingerprint = ''; - - /** - * The unique key handle used by this handler - * - * The key handle is used to track GPG status output for a particular key - * before the key has its own identifier. - * - * @var string - * - * @see Crypt_GPG_KeyGeneratorStatusHandler::setHandle() - */ - protected $handle = ''; - - /** - * Error code (if any) caused by key generation - * - * @var integer - */ - protected $errorCode = Crypt_GPG::ERROR_NONE; - - // }}} - // {{{ setHandle() - - /** - * Sets the unique key handle used by this handler - * - * The key handle is used to track GPG status output for a particular key - * before the key has its own identifier. - * - * @param string $handle the key handle this status handle will use. - * - * @return Crypt_GPG_KeyGeneratorStatusHandler the current object, for - * fluent interface. - */ - public function setHandle($handle) - { - $this->handle = strval($handle); - return $this; - } - - // }}} - // {{{ handle() - - /** - * Handles a status line - * - * @param string $line the status line to handle. - * - * @return void - */ - public function handle($line) - { - $tokens = explode(' ', $line); - switch ($tokens[0]) { - case 'KEY_CREATED': - if ($tokens[3] == $this->handle) { - $this->keyFingerprint = $tokens[2]; - } - break; - - case 'KEY_NOT_CREATED': - if ($tokens[1] == $this->handle) { - $this->errorCode = Crypt_GPG::ERROR_KEY_NOT_CREATED; - } - break; - - case 'PROGRESS': - // todo: at some point, support reporting status async - break; - } - } - - // }}} - // {{{ getKeyFingerprint() - - /** - * Gets the key fingerprint parsed by this handler - * - * @return array the key fingerprint parsed by this handler. - */ - public function getKeyFingerprint() - { - return $this->keyFingerprint; - } - - // }}} - // {{{ getErrorCode() - - /** - * Gets the error code resulting from key gneration - * - * @return integer the error code resulting from key generation. - */ - public function getErrorCode() - { - return $this->errorCode; - } - - // }}} -} - -?> diff --git a/program/lib/Crypt/GPG/PinEntry.php b/program/lib/Crypt/GPG/PinEntry.php deleted file mode 100644 index c09703617..000000000 --- a/program/lib/Crypt/GPG/PinEntry.php +++ /dev/null @@ -1,875 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Contains a class implementing automatic pinentry for gpg-agent - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version CVS: $Id$ - * @link http://pear.php.net/package/Crypt_GPG - */ - -/** - * CLI user-interface and parser. - */ -require_once 'Console/CommandLine.php'; - -// {{{ class Crypt_GPG_PinEntry - -/** - * A command-line dummy pinentry program for use with gpg-agent and Crypt_GPG - * - * This pinentry receives passphrases through en environment variable and - * automatically enters the PIN in response to gpg-agent requests. No user- - * interaction required. - * - * Thie pinentry can be run independently for testing and debugging with the - * following syntax: - * - * <pre> - * Usage: - * crypt-gpg-pinentry [options] - * - * Options: - * -l log, --log=log Optional location to log pinentry activity. - * -v, --verbose Sets verbosity level. Use multiples for more detail - * (e.g. "-vv"). - * -h, --help show this help message and exit - * --version show the program version and exit - * </pre> - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - * @see Crypt_GPG::getKeys() - */ -class Crypt_GPG_PinEntry -{ - // {{{ class constants - - /** - * Verbosity level for showing no output. - */ - const VERBOSITY_NONE = 0; - - /** - * Verbosity level for showing error output. - */ - const VERBOSITY_ERRORS = 1; - - /** - * Verbosity level for showing all output, including Assuan protocol - * messages. - */ - const VERBOSITY_ALL = 2; - - /** - * Length of buffer for reading lines from the Assuan server. - * - * PHP reads 8192 bytes. If this is set to less than 8192, PHP reads 8192 - * and buffers the rest so we might as well just read 8192. - * - * Using values other than 8192 also triggers PHP bugs. - * - * @see http://bugs.php.net/bug.php?id=35224 - */ - const CHUNK_SIZE = 8192; - - // }}} - // {{{ protected properties - - /** - * File handle for the input stream - * - * @var resource - */ - protected $stdin = null; - - /** - * File handle for the output stream - * - * @var resource - */ - protected $stdout = null; - - /** - * File handle for the log file if a log file is used - * - * @var resource - */ - protected $logFile = null; - - /** - * Whether or not this pinentry is finished and is exiting - * - * @var boolean - */ - protected $moribund = false; - - /** - * Verbosity level - * - * One of: - * - {@link Crypt_GPG_PinEntry::VERBOSITY_NONE}, - * - {@link Crypt_GPG_PinEntry::VERBOSITY_ERRORS}, or - * - {@link Crypt_GPG_PinEntry::VERBOSITY_ALL} - * - * @var integer - */ - protected $verbosity = self::VERBOSITY_NONE; - - /** - * The command-line interface parser for this pinentry - * - * @var Console_CommandLine - * - * @see Crypt_GPG_PinEntry::getParser() - */ - protected $parser = null; - - /** - * PINs to be entered by this pinentry - * - * An indexed array of associative arrays in the form: - * <code> - * <?php - * array( - * array( - * 'keyId' => $keyId, - * 'passphrase' => $passphrase - * ), - * ... - * ); - * ?> - * </code> - * - * This array is parsed from the environment variable - * <kbd>PINENTRY_USER_DATA</kbd>. - * - * @var array - * - * @see Crypt_GPG_PinEntry::initPinsFromENV() - */ - protected $pins = array(); - - /** - * PINs that have been tried for the current PIN - * - * This is an associative array indexed by the key identifier with - * values being the same as elements in the {@link Crypt_GPG_PinEntry::$pins} - * array. - * - * @var array - */ - protected $triedPins = array(); - - /** - * The PIN currently being requested by the Assuan server - * - * If set, this is an associative array in the form: - * <code> - * <?php - * array( - * 'keyId' => $shortKeyId, - * 'userId' => $userIdString - * ); - * ?> - * </code> - * - * @var array|null - */ - protected $currentPin = null; - - // }}} - // {{{ __invoke() - - /** - * Runs this pinentry - * - * @return void - */ - public function __invoke() - { - $this->parser = $this->getCommandLineParser(); - - try { - $result = $this->parser->parse(); - - $this->setVerbosity($result->options['verbose']); - $this->setLogFilename($result->options['log']); - - $this->connect(); - $this->initPinsFromENV(); - - while (($line = fgets($this->stdin, self::CHUNK_SIZE)) !== false) { - $this->parseCommand(mb_substr($line, 0, -1, '8bit')); - if ($this->moribund) { - break; - } - } - - $this->disconnect(); - - } catch (Console_CommandLineException $e) { - $this->log($e->getMessage() . PHP_EOL, slf::VERBOSITY_ERRORS); - exit(1); - } catch (Exception $e) { - $this->log($e->getMessage() . PHP_EOL, self::VERBOSITY_ERRORS); - $this->log($e->getTraceAsString() . PHP_EOL, self::VERBOSITY_ERRORS); - exit(1); - } - } - - // }}} - // {{{ setVerbosity() - - /** - * Sets the verbosity of logging for this pinentry - * - * Verbosity levels are: - * - * - {@link Crypt_GPG_PinEntry::VERBOSITY_NONE} - no logging. - * - {@link Crypt_GPG_PinEntry::VERBOSITY_ERRORS} - log errors only. - * - {@link Crypt_GPG_PinEntry::VERBOSITY_ALL} - log everything, including - * the assuan protocol. - * - * @param integer $verbosity the level of verbosity of this pinentry. - * - * @return Crypt_GPG_PinEntry the current object, for fluent interface. - */ - public function setVerbosity($verbosity) - { - $this->verbosity = (integer)$verbosity; - return $this; - } - - // }}} - // {{{ setLogFilename() - - /** - * Sets the log file location - * - * @param string $filename the new log filename to use. If an empty string - * is used, file-based logging is disabled. - * - * @return Crypt_GPG_PinEntry the current object, for fluent interface. - */ - public function setLogFilename($filename) - { - if (is_resource($this->logFile)) { - fflush($this->logFile); - fclose($this->logFile); - $this->logFile = null; - } - - if ($filename != '') { - if (($this->logFile = fopen($filename, 'w')) === false) { - $this->log( - 'Unable to open log file "' . $filename . '" ' - . 'for writing.' . PHP_EOL, - self::VERBOSITY_ERRORS - ); - exit(1); - } else { - stream_set_write_buffer($this->logFile, 0); - } - } - - return $this; - } - - // }}} - // {{{ getUIXML() - - /** - * Gets the CLI user-interface definition for this pinentry - * - * Detects whether or not this package is PEAR-installed and appropriately - * locates the XML UI definition. - * - * @return string the location of the CLI user-interface definition XML. - */ - protected function getUIXML() - { - $dir = '@data-dir@' . DIRECTORY_SEPARATOR - . '@package-name@' . DIRECTORY_SEPARATOR . 'data'; - - // Check if we're running directly from a git checkout or if we're - // running from a PEAR-packaged version. - if ($dir[0] == '@') { - $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' - . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'data'; - } - - return $dir . DIRECTORY_SEPARATOR . 'pinentry-cli.xml'; - } - - // }}} - // {{{ getCommandLineParser() - - /** - * Gets the CLI parser for this pinentry - * - * @return Console_CommandLine the CLI parser for this pinentry. - */ - protected function getCommandLineParser() - { - return Console_CommandLine::fromXmlFile($this->getUIXML()); - } - - // }}} - // {{{ log() - - /** - * Logs a message at the specified verbosity level - * - * If a log file is used, the message is written to the log. Otherwise, - * the message is sent to STDERR. - * - * @param string $data the message to log. - * @param integer $level the verbosity level above which the message should - * be logged. - * - * @return Crypt_GPG_PinEntry the current object, for fluent interface. - */ - protected function log($data, $level) - { - if ($this->verbosity >= $level) { - if (is_resource($this->logFile)) { - fwrite($this->logFile, $data); - fflush($this->logFile); - } else { - $this->parser->outputter->stderr($data); - } - } - - return $this; - } - - // }}} - // {{{ connect() - - /** - * Connects this pinentry to the assuan server - * - * Opens I/O streams and sends initial handshake. - * - * @return Crypt_GPG_PinEntry the current object, for fluent interface. - */ - protected function connect() - { - // Binary operations will not work on Windows with PHP < 5.2.6. - $rb = (version_compare(PHP_VERSION, '5.2.6') < 0) ? 'r' : 'rb'; - $wb = (version_compare(PHP_VERSION, '5.2.6') < 0) ? 'w' : 'wb'; - - $this->stdin = fopen('php://stdin', $rb); - $this->stdout = fopen('php://stdout', $wb); - - if (function_exists('stream_set_read_buffer')) { - stream_set_read_buffer($this->stdin, 0); - } - stream_set_write_buffer($this->stdout, 0); - - // initial handshake - $this->send($this->getOK('Crypt_GPG pinentry ready and waiting')); - - return $this; - } - - // }}} - // {{{ parseCommand() - - /** - * Parses an assuan command and performs the appropriate action - * - * Documentation of the assuan commands for pinentry is limited to - * non-existent. Most of these commands were taken from the C source code - * to gpg-agent and pinentry. - * - * Additional context was provided by using strace -f when calling the - * gpg-agent. - * - * @param string $line the assuan command line to parse - * - * @return Crypt_GPG_PinEntry the current object, for fluent interface. - */ - protected function parseCommand($line) - { - $this->log('<- ' . $line . PHP_EOL, self::VERBOSITY_ALL); - - $parts = explode(' ', $line, 2); - - $command = $parts[0]; - - if (count($parts) === 2) { - $data = $parts[1]; - } else { - $data = null; - } - - switch ($command) { - case 'SETDESC': - return $this->sendSetDescription($data); - - case 'SETPROMPT': - case 'SETERROR': - case 'SETOK': - case 'SETNOTOK': - case 'SETCANCEL': - case 'SETQUALITYBAR': - case 'SETQUALITYBAR_TT': - case 'OPTION': - return $this->sendNotImplementedOK(); - - case 'MESSAGE': - return $this->sendMessage(); - - case 'CONFIRM': - return $this->sendConfirm(); - - case 'GETINFO': - return $this->sendGetInfo($data); - - case 'GETPIN': - return $this->sendGetPin($data); - - case 'RESET': - return $this->sendReset(); - - case 'BYE': - return $this->sendBye(); - } - } - - // }}} - // {{{ initPinsFromENV() - - /** - * Initializes the PINs to be entered by this pinentry from the environment - * variable PINENTRY_USER_DATA - * - * The PINs are parsed from a JSON-encoded string. - * - * @return Crypt_GPG_PinEntry the current object, for fluent interface. - */ - protected function initPinsFromENV() - { - if (($userData = getenv('PINENTRY_USER_DATA')) !== false) { - $pins = json_decode($userData, true); - if ($pins === null) { - $this->log( - '-- failed to parse user data' . PHP_EOL, - self::VERBOSITY_ERRORS - ); - } else { - $this->pins = $pins; - $this->log( - '-- got user data [not showing passphrases]' . PHP_EOL, - self::VERBOSITY_ALL - ); - } - } - - return $this; - } - - // }}} - // {{{ disconnect() - - /** - * Disconnects this pinentry from the Assuan server - * - * @return Crypt_GPG_PinEntry the current object, for fluent interface. - */ - protected function disconnect() - { - $this->log('-- disconnecting' . PHP_EOL, self::VERBOSITY_ALL); - - fflush($this->stdout); - fclose($this->stdout); - fclose($this->stdin); - - $this->stdin = null; - $this->stdout = null; - - $this->log('-- disconnected' . PHP_EOL, self::VERBOSITY_ALL); - - if (is_resource($this->logFile)) { - fflush($this->logFile); - fclose($this->logFile); - $this->logFile = null; - } - - return $this; - } - - // }}} - // {{{ sendNotImplementedOK() - - /** - * Sends an OK response for a not implemented feature - * - * @return Crypt_GPG_PinEntry the current object, for fluent interface. - */ - protected function sendNotImplementedOK() - { - return $this->send($this->getOK()); - } - - // }}} - // {{{ sendSetDescription() - - /** - * Parses the currently requested key identifier and user identifier from - * the description passed to this pinentry - * - * @param string $text the raw description sent from gpg-agent. - * - * @return Crypt_GPG_PinEntry the current object, for fluent interface. - */ - protected function sendSetDescription($text) - { - $text = rawurldecode($text); - $matches = array(); - // TODO: handle user id with quotation marks - $exp = '/\n"(.+)"\n.*\sID ([A-Z0-9]+),\n/mu'; - if (preg_match($exp, $text, $matches) === 1) { - $userId = $matches[1]; - $keyId = $matches[2]; - - // only reset tried pins for new requested pin - if ( $this->currentPin === null - || $this->currentPin['keyId'] !== $keyId - ) { - $this->currentPin = array( - 'userId' => $userId, - 'keyId' => $keyId - ); - $this->triedPins = array(); - $this->log( - '-- looking for PIN for ' . $keyId . PHP_EOL, - self::VERBOSITY_ALL - ); - } - } - - return $this->send($this->getOK()); - } - - // }}} - // {{{ sendConfirm() - - /** - * Tells the assuan server the PIN entry was confirmed (not cancelled) - * by pressing the fake 'close' button - * - * @return Crypt_GPG_PinEntry the current object, for fluent interface. - */ - protected function sendConfirm() - { - return $this->sendButtonInfo('close'); - } - - // }}} - // {{{ sendMessage() - - /** - * Tells the assuan server that any requested pop-up messages were confirmed - * by pressing the fake 'close' button - * - * @return Crypt_GPG_PinEntry the current object, for fluent interface. - */ - protected function sendMessage() - { - return $this->sendButtonInfo('close'); - } - - // }}} - // {{{ sendButtonInfo() - - /** - * Sends information about pressed buttons to the assuan server - * - * This is used to fake a user-interface for this pinentry. - * - * @param string $text the button status to send. - * - * @return Crypt_GPG_PinEntry the current object, for fluent interface. - */ - protected function sendButtonInfo($text) - { - return $this->send('BUTTON_INFO ' . $text . "\n"); - } - - // }}} - // {{{ sendGetPin() - - /** - * Sends the PIN value for the currently requested key - * - * @return Crypt_GPG_PinEntry the current object, for fluent interface. - */ - protected function sendGetPin() - { - $foundPin = ''; - - if (is_array($this->currentPin)) { - $keyIdLength = mb_strlen($this->currentPin['keyId'], '8bit'); - - // search for the pin - foreach ($this->pins as $pin) { - // only check pins we haven't tried - if (!isset($this->triedPins[$pin['keyId']])) { - - // get last X characters of key identifier to compare - $keyId = mb_substr( - $pin['keyId'], - -$keyIdLength, - mb_strlen($pin['keyId'], '8bit'), - '8bit' - ); - - if ($keyId === $this->currentPin['keyId']) { - $foundPin = $pin['passphrase']; - $this->triedPins[$pin['keyId']] = $pin; - break; - } - } - } - } - - return $this - ->send($this->getData($foundPin)) - ->send($this->getOK()); - } - - // }}} - // {{{ sendGetInfo() - - /** - * Sends information about this pinentry - * - * @param string $data the information requested by the assuan server. - * Currently only 'pid' is supported. Other requests - * return no information. - * - * @return Crypt_GPG_PinEntry the current object, for fluent interface. - */ - protected function sendGetInfo($data) - { - $parts = explode(' ', $data, 2); - $command = reset($parts); - - switch ($command) { - case 'pid': - return $this->sendGetInfoPID(); - default: - return $this->send($this->getOK()); - } - - return $this; - } - // }}} - // {{{ sendGetInfoPID() - - /** - * Sends the PID of this pinentry to the assuan server - * - * @return Crypt_GPG_PinEntry the current object, for fluent interface. - */ - protected function sendGetInfoPID() - { - return $this - ->send($this->getData(getmypid())) - ->send($this->getOK()); - } - - // }}} - // {{{ sendBye() - - /** - * Flags this pinentry for disconnection and sends an OK response - * - * @return Crypt_GPG_PinEntry the current object, for fluent interface. - */ - protected function sendBye() - { - $return = $this->send($this->getOK('closing connection')); - $this->moribund = true; - return $return; - } - - // }}} - // {{{ sendReset() - - /** - * Resets this pinentry and sends an OK response - * - * @return Crypt_GPG_PinEntry the current object, for fluent interface. - */ - protected function sendReset() - { - $this->currentPin = null; - $this->triedPins = array(); - return $this->send($this->getOK()); - } - - // }}} - // {{{ getOK() - - /** - * Gets an OK response to send to the assuan server - * - * @param string $data an optional message to include with the OK response. - * - * @return string the OK response. - */ - protected function getOK($data = null) - { - $return = 'OK'; - - if ($data) { - $return .= ' ' . $data; - } - - return $return . "\n"; - } - - // }}} - // {{{ getData() - - /** - * Gets data ready to send to the assuan server - * - * Data is appropriately escaped and long lines are wrapped. - * - * @param string $data the data to send to the assuan server. - * - * @return string the properly escaped, formatted data. - * - * @see http://www.gnupg.org/documentation/manuals/assuan/Server-responses.html - */ - protected function getData($data) - { - // Escape data. Only %, \n and \r need to be escaped but other - // values are allowed to be escaped. See - // http://www.gnupg.org/documentation/manuals/assuan/Server-responses.html - $data = rawurlencode($data); - $data = $this->getWordWrappedData($data, 'D'); - return $data; - } - - // }}} - // {{{ getComment() - - /** - * Gets a comment ready to send to the assuan server - * - * @param string $data the comment to send to the assuan server. - * - * @return string the properly formatted comment. - * - * @see http://www.gnupg.org/documentation/manuals/assuan/Server-responses.html - */ - protected function getComment($data) - { - return $this->getWordWrappedData($data, '#'); - } - - // }}} - // {{{ getWordWrappedData() - - /** - * Wraps strings at 1,000 bytes without splitting UTF-8 multibyte - * characters - * - * Each line is prepended with the specified line prefix. Wrapped lines - * are automatically appended with \ characters. - * - * Protocol strings are UTF-8 but maximum line length is 1,000 bytes. - * <kbd>mb_strcut()</kbd> is used so we can limit line length by bytes - * and not split characters across multiple lines. - * - * @param string $data the data to wrap. - * @param string $prefix a single character to use as the line prefix. For - * example, 'D' or '#'. - * - * @return string the word-wrapped, prefixed string. - * - * @see http://www.gnupg.org/documentation/manuals/assuan/Server-responses.html - */ - protected function getWordWrappedData($data, $prefix) - { - $lines = array(); - - do { - if (mb_strlen($data, '8bit') > 997) { - $line = $prefix . ' ' . mb_strcut($data, 0, 996, 'utf-8') . "\\\n"; - $lines[] = $line; - $lineLength = mb_strlen($line, '8bit') - 1; - $dataLength = mb_substr($data, '8bit'); - $data = mb_substr( - $data, - $lineLength, - $dataLength - $lineLength, - '8bit' - ); - } else { - $lines[] = $prefix . ' ' . $data . "\n"; - $data = ''; - } - } while ($data != ''); - - return implode('', $lines); - } - - // }}} - // {{{ send() - - /** - * Sends raw data to the assuan server - * - * @param string $data the data to send. - * - * @return Crypt_GPG_PinEntry the current object, for fluent interface. - */ - protected function send($data) - { - $this->log('-> ' . $data, self::VERBOSITY_ALL); - fwrite($this->stdout, $data); - fflush($this->stdout); - return $this; - } - - // }}} -} - -// }}} - -?> diff --git a/program/lib/Crypt/GPG/ProcessControl.php b/program/lib/Crypt/GPG/ProcessControl.php deleted file mode 100644 index d6dae0325..000000000 --- a/program/lib/Crypt/GPG/ProcessControl.php +++ /dev/null @@ -1,150 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * A class for monitoring and terminating processes - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version CVS: $Id$ - * @link http://pear.php.net/package/Crypt_GPG - */ - -// {{{ class Crypt_GPG_ProcessControl - -/** - * A class for monitoring and terminating processes by PID - * - * This is used to safely terminate the gpg-agent for GnuPG 2.x. This class - * is limited in its abilities and can only check if a PID is running and - * send a PID SIGTERM. - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - */ -class Crypt_GPG_ProcessControl -{ - // {{{ protected properties - - /** - * The PID (process identifier) being monitored - * - * @var integer - */ - protected $pid; - - // }}} - // {{{ __construct() - - /** - * Creates a new process controller from the given PID (process identifier) - * - * @param integer $pid the PID (process identifier). - */ - public function __construct($pid) - { - $this->pid = $pid; - } - - // }}} - // {{{ public function getPid() - - /** - * Gets the PID (process identifier) being controlled - * - * @return integer the PID being controlled. - */ - public function getPid() - { - return $this->pid; - } - - // }}} - // {{{ isRunning() - - /** - * Checks if the process is running - * - * Uses <kbd>ps</kbd> on UNIX-like systems and <kbd>tasklist</kbd> on - * Windows. - * - * @return boolean true if the process is running, false if not. - */ - public function isRunning() - { - $running = false; - - if (PHP_OS === 'WINNT') { - $command = 'tasklist /fo csv /nh /fi ' - . escapeshellarg('PID eq ' . $this->pid); - - $result = exec($command); - $parts = explode(',', $result); - $running = (count($parts) > 1 && trim($parts[1], '"') == $this->pid); - } else { - $result = exec('ps -p ' . escapeshellarg($this->pid) . ' -o pid='); - $running = (trim($result) == $this->pid); - } - - return $running; - } - - // }}} - // {{{ terminate() - - /** - * Ends the process gracefully - * - * The signal SIGTERM is sent to the process. The gpg-agent process will - * end gracefully upon receiving the SIGTERM signal. Upon 3 consecutive - * SIGTERM signals the gpg-agent will forcefully shut down. - * - * If the <kbd>posix</kbd> extension is available, <kbd>posix_kill()</kbd> - * is used. Otherwise <kbd>kill</kbd> is used on UNIX-like systems and - * <kbd>taskkill</kbd> is used in Windows. - * - * @return void - */ - public function terminate() - { - if (function_exists('posix_kill')) { - posix_kill($this->pid, 15); - } elseif (PHP_OS === 'WINNT') { - exec('taskkill /PID ' . escapeshellarg($this->pid)); - } else { - exec('kill -15 ' . escapeshellarg($this->pid)); - } - } - - // }}} -} - -// }}} - -?> diff --git a/program/lib/Crypt/GPG/Signature.php b/program/lib/Crypt/GPG/Signature.php deleted file mode 100644 index 1d28a1188..000000000 --- a/program/lib/Crypt/GPG/Signature.php +++ /dev/null @@ -1,427 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * A class representing GPG signatures - * - * This file contains a data class representing a GPG signature. - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category Encryption - * @package Crypt_GPG - * @author Nathan Fredrickson <nathan@silverorange.com> - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2005-2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version CVS: $Id$ - * @link http://pear.php.net/package/Crypt_GPG - */ - -/** - * User id class definition - */ -require_once 'Crypt/GPG/UserId.php'; - -// {{{ class Crypt_GPG_Signature - -/** - * A class for GPG signature information - * - * This class is used to store the results of the Crypt_GPG::verify() method. - * - * @category Encryption - * @package Crypt_GPG - * @author Nathan Fredrickson <nathan@silverorange.com> - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2005-2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - * @see Crypt_GPG::verify() - */ -class Crypt_GPG_Signature -{ - // {{{ class properties - - /** - * A base64-encoded string containing a unique id for this signature if - * this signature has been verified as ok - * - * This id is used to prevent replay attacks and is not present for all - * types of signatures. - * - * @var string - */ - private $_id = ''; - - /** - * The fingerprint of the key used to create the signature - * - * @var string - */ - private $_keyFingerprint = ''; - - /** - * The id of the key used to create the signature - * - * @var string - */ - private $_keyId = ''; - - /** - * The creation date of this signature - * - * This is a Unix timestamp. - * - * @var integer - */ - private $_creationDate = 0; - - /** - * The expiration date of the signature - * - * This is a Unix timestamp. If this signature does not expire, this will - * be zero. - * - * @var integer - */ - private $_expirationDate = 0; - - /** - * The user id associated with this signature - * - * @var Crypt_GPG_UserId - */ - private $_userId = null; - - /** - * Whether or not this signature is valid - * - * @var boolean - */ - private $_isValid = false; - - // }}} - // {{{ __construct() - - /** - * Creates a new signature - * - * Signatures can be initialized from an array of named values. Available - * names are: - * - * - <kbd>string id</kbd> - the unique id of this signature. - * - <kbd>string fingerprint</kbd> - the fingerprint of the key used to - * create the signature. The fingerprint - * should not contain formatting - * characters. - * - <kbd>string keyId</kbd> - the id of the key used to create the - * the signature. - * - <kbd>integer creation</kbd> - the date the signature was created. - * This is a UNIX timestamp. - * - <kbd>integer expiration</kbd> - the date the signature expired. This - * is a UNIX timestamp. If the signature - * does not expire, use 0. - * - <kbd>boolean valid</kbd> - whether or not the signature is valid. - * - <kbd>string userId</kbd> - the user id associated with the - * signature. This may also be a - * {@link Crypt_GPG_UserId} object. - * - * @param Crypt_GPG_Signature|array $signature optional. Either an existing - * signature object, which is copied; or an array of initial values. - */ - public function __construct($signature = null) - { - // copy from object - if ($signature instanceof Crypt_GPG_Signature) { - $this->_id = $signature->_id; - $this->_keyFingerprint = $signature->_keyFingerprint; - $this->_keyId = $signature->_keyId; - $this->_creationDate = $signature->_creationDate; - $this->_expirationDate = $signature->_expirationDate; - $this->_isValid = $signature->_isValid; - - if ($signature->_userId instanceof Crypt_GPG_UserId) { - $this->_userId = clone $signature->_userId; - } - } - - // initialize from array - if (is_array($signature)) { - if (array_key_exists('id', $signature)) { - $this->setId($signature['id']); - } - - if (array_key_exists('fingerprint', $signature)) { - $this->setKeyFingerprint($signature['fingerprint']); - } - - if (array_key_exists('keyId', $signature)) { - $this->setKeyId($signature['keyId']); - } - - if (array_key_exists('creation', $signature)) { - $this->setCreationDate($signature['creation']); - } - - if (array_key_exists('expiration', $signature)) { - $this->setExpirationDate($signature['expiration']); - } - - if (array_key_exists('valid', $signature)) { - $this->setValid($signature['valid']); - } - - if (array_key_exists('userId', $signature)) { - $userId = new Crypt_GPG_UserId($signature['userId']); - $this->setUserId($userId); - } - } - } - - // }}} - // {{{ getId() - - /** - * Gets the id of this signature - * - * @return string a base64-encoded string containing a unique id for this - * signature. This id is used to prevent replay attacks and - * is not present for all types of signatures. - */ - public function getId() - { - return $this->_id; - } - - // }}} - // {{{ getKeyFingerprint() - - /** - * Gets the fingerprint of the key used to create this signature - * - * @return string the fingerprint of the key used to create this signature. - */ - public function getKeyFingerprint() - { - return $this->_keyFingerprint; - } - - // }}} - // {{{ getKeyId() - - /** - * Gets the id of the key used to create this signature - * - * Whereas the fingerprint of the signing key may not always be available - * (for example if the signature is bad), the id should always be - * available. - * - * @return string the id of the key used to create this signature. - */ - public function getKeyId() - { - return $this->_keyId; - } - - // }}} - // {{{ getCreationDate() - - /** - * Gets the creation date of this signature - * - * @return integer the creation date of this signature. This is a Unix - * timestamp. - */ - public function getCreationDate() - { - return $this->_creationDate; - } - - // }}} - // {{{ getExpirationDate() - - /** - * Gets the expiration date of the signature - * - * @return integer the expiration date of this signature. This is a Unix - * timestamp. If this signature does not expire, this will - * be zero. - */ - public function getExpirationDate() - { - return $this->_expirationDate; - } - - // }}} - // {{{ getUserId() - - /** - * Gets the user id associated with this signature - * - * @return Crypt_GPG_UserId the user id associated with this signature. - */ - public function getUserId() - { - return $this->_userId; - } - - // }}} - // {{{ isValid() - - /** - * Gets whether or no this signature is valid - * - * @return boolean true if this signature is valid and false if it is not. - */ - public function isValid() - { - return $this->_isValid; - } - - // }}} - // {{{ setId() - - /** - * Sets the id of this signature - * - * @param string $id a base64-encoded string containing a unique id for - * this signature. - * - * @return Crypt_GPG_Signature the current object, for fluent interface. - * - * @see Crypt_GPG_Signature::getId() - */ - public function setId($id) - { - $this->_id = strval($id); - return $this; - } - - // }}} - // {{{ setKeyFingerprint() - - /** - * Sets the key fingerprint of this signature - * - * @param string $fingerprint the key fingerprint of this signature. This - * is the fingerprint of the primary key used to - * create this signature. - * - * @return Crypt_GPG_Signature the current object, for fluent interface. - */ - public function setKeyFingerprint($fingerprint) - { - $this->_keyFingerprint = strval($fingerprint); - return $this; - } - - // }}} - // {{{ setKeyId() - - /** - * Sets the key id of this signature - * - * @param string $id the key id of this signature. This is the id of the - * primary key used to create this signature. - * - * @return Crypt_GPG_Signature the current object, for fluent interface. - */ - public function setKeyId($id) - { - $this->_keyId = strval($id); - return $this; - } - - // }}} - // {{{ setCreationDate() - - /** - * Sets the creation date of this signature - * - * @param integer $creationDate the creation date of this signature. This - * is a Unix timestamp. - * - * @return Crypt_GPG_Signature the current object, for fluent interface. - */ - public function setCreationDate($creationDate) - { - $this->_creationDate = intval($creationDate); - return $this; - } - - // }}} - // {{{ setExpirationDate() - - /** - * Sets the expiration date of this signature - * - * @param integer $expirationDate the expiration date of this signature. - * This is a Unix timestamp. Specify zero if - * this signature does not expire. - * - * @return Crypt_GPG_Signature the current object, for fluent interface. - */ - public function setExpirationDate($expirationDate) - { - $this->_expirationDate = intval($expirationDate); - return $this; - } - - // }}} - // {{{ setUserId() - - /** - * Sets the user id associated with this signature - * - * @param Crypt_GPG_UserId $userId the user id associated with this - * signature. - * - * @return Crypt_GPG_Signature the current object, for fluent interface. - */ - public function setUserId(Crypt_GPG_UserId $userId) - { - $this->_userId = $userId; - return $this; - } - - // }}} - // {{{ setValid() - - /** - * Sets whether or not this signature is valid - * - * @param boolean $isValid true if this signature is valid and false if it - * is not. - * - * @return Crypt_GPG_Signature the current object, for fluent interface. - */ - public function setValid($isValid) - { - $this->_isValid = ($isValid) ? true : false; - return $this; - } - - // }}} -} - -// }}} - -?> diff --git a/program/lib/Crypt/GPG/SubKey.php b/program/lib/Crypt/GPG/SubKey.php deleted file mode 100644 index 59245cac1..000000000 --- a/program/lib/Crypt/GPG/SubKey.php +++ /dev/null @@ -1,672 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Contains a class representing GPG sub-keys and constants for GPG algorithms - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @author Nathan Fredrickson <nathan@silverorange.com> - * @copyright 2005-2010 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version CVS: $Id$ - * @link http://pear.php.net/package/Crypt_GPG - */ - -// {{{ class Crypt_GPG_SubKey - -/** - * A class for GPG sub-key information - * - * This class is used to store the results of the {@link Crypt_GPG::getKeys()} - * method. Sub-key objects are members of a {@link Crypt_GPG_Key} object. - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @author Nathan Fredrickson <nathan@silverorange.com> - * @copyright 2005-2010 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - * @see Crypt_GPG::getKeys() - * @see Crypt_GPG_Key::getSubKeys() - */ -class Crypt_GPG_SubKey -{ - // {{{ algorithm class constants - - /** - * RSA encryption algorithm. - */ - const ALGORITHM_RSA = 1; - - /** - * Elgamal encryption algorithm (encryption only). - */ - const ALGORITHM_ELGAMAL_ENC = 16; - - /** - * DSA encryption algorithm (sometimes called DH, sign only). - */ - const ALGORITHM_DSA = 17; - - /** - * Elgamal encryption algorithm (signage and encryption - should not be - * used). - */ - const ALGORITHM_ELGAMAL_ENC_SGN = 20; - - // }}} - // {{{ usage class constants - - /** - * Key can be used to encrypt - */ - const USAGE_ENCRYPT = 1; - - /** - * Key can be used to sign - */ - const USAGE_SIGN = 2; - - /** - * Key can be used to certify other keys - */ - const USAGE_CERTIFY = 4; - - /** - * Key can be used for authentication - */ - const USAGE_AUTHENTICATION = 8; - - // }}} - // {{{ class properties - - /** - * The id of this sub-key - * - * @var string - */ - private $_id = ''; - - /** - * The algorithm used to create this sub-key - * - * The value is one of the Crypt_GPG_SubKey::ALGORITHM_* constants. - * - * @var integer - */ - private $_algorithm = 0; - - /** - * The fingerprint of this sub-key - * - * @var string - */ - private $_fingerprint = ''; - - /** - * Length of this sub-key in bits - * - * @var integer - */ - private $_length = 0; - - /** - * Date this sub-key was created - * - * This is a Unix timestamp. - * - * @var integer - */ - private $_creationDate = 0; - - /** - * Date this sub-key expires - * - * This is a Unix timestamp. If this sub-key does not expire, this will be - * zero. - * - * @var integer - */ - private $_expirationDate = 0; - - /** - * Whether or not this sub-key can sign data - * - * @var boolean - */ - private $_canSign = false; - - /** - * Whether or not this sub-key can encrypt data - * - * @var boolean - */ - private $_canEncrypt = false; - - /** - * Whether or not the private key for this sub-key exists in the keyring - * - * @var boolean - */ - private $_hasPrivate = false; - - /** - * Whether or not this sub-key is revoked - * - * @var boolean - */ - private $_isRevoked = false; - - // }}} - // {{{ __construct() - - /** - * Creates a new sub-key object - * - * Sub-keys can be initialized from an array of named values. Available - * names are: - * - * - <kbd>string id</kbd> - the key id of the sub-key. - * - <kbd>integer algorithm</kbd> - the encryption algorithm of the - * sub-key. - * - <kbd>string fingerprint</kbd> - the fingerprint of the sub-key. The - * fingerprint should not contain - * formatting characters. - * - <kbd>integer length</kbd> - the length of the sub-key in bits. - * - <kbd>integer creation</kbd> - the date the sub-key was created. - * This is a UNIX timestamp. - * - <kbd>integer expiration</kbd> - the date the sub-key expires. This - * is a UNIX timestamp. If the sub-key - * does not expire, use 0. - * - <kbd>boolean canSign</kbd> - whether or not the sub-key can be - * used to sign data. - * - <kbd>boolean canEncrypt</kbd> - whether or not the sub-key can be - * used to encrypt data. - * - <kbd>boolean hasPrivate</kbd> - whether or not the private key for - * the sub-key exists in the keyring. - * - <kbd>boolean isRevoked</kbd> - whether or not this sub-key is - * revoked. - * - * @param Crypt_GPG_SubKey|string|array $key optional. Either an existing - * sub-key object, which is copied; a sub-key string, which is - * parsed; or an array of initial values. - */ - public function __construct($key = null) - { - // parse from string - if (is_string($key)) { - $key = self::parse($key); - } - - // copy from object - if ($key instanceof Crypt_GPG_SubKey) { - $this->_id = $key->_id; - $this->_algorithm = $key->_algorithm; - $this->_fingerprint = $key->_fingerprint; - $this->_length = $key->_length; - $this->_creationDate = $key->_creationDate; - $this->_expirationDate = $key->_expirationDate; - $this->_canSign = $key->_canSign; - $this->_canEncrypt = $key->_canEncrypt; - $this->_hasPrivate = $key->_hasPrivate; - $this->_isRevoked = $key->_isRevoked; - } - - // initialize from array - if (is_array($key)) { - if (array_key_exists('id', $key)) { - $this->setId($key['id']); - } - - if (array_key_exists('algorithm', $key)) { - $this->setAlgorithm($key['algorithm']); - } - - if (array_key_exists('fingerprint', $key)) { - $this->setFingerprint($key['fingerprint']); - } - - if (array_key_exists('length', $key)) { - $this->setLength($key['length']); - } - - if (array_key_exists('creation', $key)) { - $this->setCreationDate($key['creation']); - } - - if (array_key_exists('expiration', $key)) { - $this->setExpirationDate($key['expiration']); - } - - if (array_key_exists('canSign', $key)) { - $this->setCanSign($key['canSign']); - } - - if (array_key_exists('canEncrypt', $key)) { - $this->setCanEncrypt($key['canEncrypt']); - } - - if (array_key_exists('hasPrivate', $key)) { - $this->setHasPrivate($key['hasPrivate']); - } - - if (array_key_exists('isRevoked', $key)) { - $this->setRevoked($key['isRevoked']); - } - } - } - - // }}} - // {{{ getId() - - /** - * Gets the id of this sub-key - * - * @return string the id of this sub-key. - */ - public function getId() - { - return $this->_id; - } - - // }}} - // {{{ getAlgorithm() - - /** - * Gets the algorithm used by this sub-key - * - * The algorithm should be one of the Crypt_GPG_SubKey::ALGORITHM_* - * constants. - * - * @return integer the algorithm used by this sub-key. - */ - public function getAlgorithm() - { - return $this->_algorithm; - } - - // }}} - // {{{ getCreationDate() - - /** - * Gets the creation date of this sub-key - * - * This is a Unix timestamp. - * - * @return integer the creation date of this sub-key. - */ - public function getCreationDate() - { - return $this->_creationDate; - } - - // }}} - // {{{ getExpirationDate() - - /** - * Gets the date this sub-key expires - * - * This is a Unix timestamp. If this sub-key does not expire, this will be - * zero. - * - * @return integer the date this sub-key expires. - */ - public function getExpirationDate() - { - return $this->_expirationDate; - } - - // }}} - // {{{ getFingerprint() - - /** - * Gets the fingerprint of this sub-key - * - * @return string the fingerprint of this sub-key. - */ - public function getFingerprint() - { - return $this->_fingerprint; - } - - // }}} - // {{{ getLength() - - /** - * Gets the length of this sub-key in bits - * - * @return integer the length of this sub-key in bits. - */ - public function getLength() - { - return $this->_length; - } - - // }}} - // {{{ canSign() - - /** - * Gets whether or not this sub-key can sign data - * - * @return boolean true if this sub-key can sign data and false if this - * sub-key can not sign data. - */ - public function canSign() - { - return $this->_canSign; - } - - // }}} - // {{{ canEncrypt() - - /** - * Gets whether or not this sub-key can encrypt data - * - * @return boolean true if this sub-key can encrypt data and false if this - * sub-key can not encrypt data. - */ - public function canEncrypt() - { - return $this->_canEncrypt; - } - - // }}} - // {{{ hasPrivate() - - /** - * Gets whether or not the private key for this sub-key exists in the - * keyring - * - * @return boolean true the private key for this sub-key exists in the - * keyring and false if it does not. - */ - public function hasPrivate() - { - return $this->_hasPrivate; - } - - // }}} - // {{{ isRevoked() - - /** - * Gets whether or not this sub-key is revoked - * - * @return boolean true if this sub-key is revoked and false if it is not. - */ - public function isRevoked() - { - return $this->_isRevoked; - } - - // }}} - // {{{ setCreationDate() - - /** - * Sets the creation date of this sub-key - * - * The creation date is a Unix timestamp. - * - * @param integer $creationDate the creation date of this sub-key. - * - * @return Crypt_GPG_SubKey the current object, for fluent interface. - */ - public function setCreationDate($creationDate) - { - $this->_creationDate = intval($creationDate); - return $this; - } - - // }}} - // {{{ setExpirationDate() - - /** - * Sets the expiration date of this sub-key - * - * The expiration date is a Unix timestamp. Specify zero if this sub-key - * does not expire. - * - * @param integer $expirationDate the expiration date of this sub-key. - * - * @return Crypt_GPG_SubKey the current object, for fluent interface. - */ - public function setExpirationDate($expirationDate) - { - $this->_expirationDate = intval($expirationDate); - return $this; - } - - // }}} - // {{{ setId() - - /** - * Sets the id of this sub-key - * - * @param string $id the id of this sub-key. - * - * @return Crypt_GPG_SubKey the current object, for fluent interface. - */ - public function setId($id) - { - $this->_id = strval($id); - return $this; - } - - // }}} - // {{{ setAlgorithm() - - /** - * Sets the algorithm used by this sub-key - * - * @param integer $algorithm the algorithm used by this sub-key. - * - * @return Crypt_GPG_SubKey the current object, for fluent interface. - */ - public function setAlgorithm($algorithm) - { - $this->_algorithm = intval($algorithm); - return $this; - } - - // }}} - // {{{ setFingerprint() - - /** - * Sets the fingerprint of this sub-key - * - * @param string $fingerprint the fingerprint of this sub-key. - * - * @return Crypt_GPG_SubKey the current object, for fluent interface. - */ - public function setFingerprint($fingerprint) - { - $this->_fingerprint = strval($fingerprint); - return $this; - } - - // }}} - // {{{ setLength() - - /** - * Sets the length of this sub-key in bits - * - * @param integer $length the length of this sub-key in bits. - * - * @return Crypt_GPG_SubKey the current object, for fluent interface. - */ - public function setLength($length) - { - $this->_length = intval($length); - return $this; - } - - // }}} - // {{{ setCanSign() - - /** - * Sets whether of not this sub-key can sign data - * - * @param boolean $canSign true if this sub-key can sign data and false if - * it can not. - * - * @return Crypt_GPG_SubKey the current object, for fluent interface. - */ - public function setCanSign($canSign) - { - $this->_canSign = ($canSign) ? true : false; - return $this; - } - - // }}} - // {{{ setCanEncrypt() - - /** - * Sets whether of not this sub-key can encrypt data - * - * @param boolean $canEncrypt true if this sub-key can encrypt data and - * false if it can not. - * - * @return Crypt_GPG_SubKey the current object, for fluent interface. - */ - public function setCanEncrypt($canEncrypt) - { - $this->_canEncrypt = ($canEncrypt) ? true : false; - return $this; - } - - // }}} - // {{{ setHasPrivate() - - /** - * Sets whether of not the private key for this sub-key exists in the - * keyring - * - * @param boolean $hasPrivate true if the private key for this sub-key - * exists in the keyring and false if it does - * not. - * - * @return Crypt_GPG_SubKey the current object, for fluent interface. - */ - public function setHasPrivate($hasPrivate) - { - $this->_hasPrivate = ($hasPrivate) ? true : false; - return $this; - } - - // }}} - // {{{ setRevoked() - - /** - * Sets whether or not this sub-key is revoked - * - * @param boolean $isRevoked whether or not this sub-key is revoked. - * - * @return Crypt_GPG_SubKey the current object, for fluent interface. - */ - public function setRevoked($isRevoked) - { - $this->_isRevoked = ($isRevoked) ? true : false; - return $this; - } - - // }}} - // {{{ parse() - - /** - * Parses a sub-key object from a sub-key string - * - * See <b>doc/DETAILS</b> in the - * {@link http://www.gnupg.org/download/ GPG distribution} for information - * on how the sub-key string is parsed. - * - * @param string $string the string containing the sub-key. - * - * @return Crypt_GPG_SubKey the sub-key object parsed from the string. - */ - public static function parse($string) - { - $tokens = explode(':', $string); - - $subKey = new Crypt_GPG_SubKey(); - - $subKey->setId($tokens[4]); - $subKey->setLength($tokens[2]); - $subKey->setAlgorithm($tokens[3]); - $subKey->setCreationDate(self::_parseDate($tokens[5])); - $subKey->setExpirationDate(self::_parseDate($tokens[6])); - - if ($tokens[1] == 'r') { - $subKey->setRevoked(true); - } - - if (strpos($tokens[11], 's') !== false) { - $subKey->setCanSign(true); - } - - if (strpos($tokens[11], 'e') !== false) { - $subKey->setCanEncrypt(true); - } - - return $subKey; - } - - // }}} - // {{{ _parseDate() - - /** - * Parses a date string as provided by GPG into a UNIX timestamp - * - * @param string $string the date string. - * - * @return integer the UNIX timestamp corresponding to the provided date - * string. - */ - private static function _parseDate($string) - { - if ($string == '') { - $timestamp = 0; - } else { - // all times are in UTC according to GPG documentation - $timeZone = new DateTimeZone('UTC'); - - if (strpos($string, 'T') === false) { - // interpret as UNIX timestamp - $string = '@' . $string; - } - - $date = new DateTime($string, $timeZone); - - // convert to UNIX timestamp - $timestamp = intval($date->format('U')); - } - - return $timestamp; - } - - // }}} -} - -// }}} - -?> diff --git a/program/lib/Crypt/GPG/UserId.php b/program/lib/Crypt/GPG/UserId.php deleted file mode 100644 index a367bceb3..000000000 --- a/program/lib/Crypt/GPG/UserId.php +++ /dev/null @@ -1,373 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Contains a data class representing a GPG user id - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2008-2010 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version CVS: $Id$ - * @link http://pear.php.net/package/Crypt_GPG - */ - -// {{{ class Crypt_GPG_UserId - -/** - * A class for GPG user id information - * - * This class is used to store the results of the {@link Crypt_GPG::getKeys()} - * method. User id objects are members of a {@link Crypt_GPG_Key} object. - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2008-2010 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - * @see Crypt_GPG::getKeys() - * @see Crypt_GPG_Key::getUserIds() - */ -class Crypt_GPG_UserId -{ - // {{{ class properties - - /** - * The name field of this user id - * - * @var string - */ - private $_name = ''; - - /** - * The comment field of this user id - * - * @var string - */ - private $_comment = ''; - - /** - * The email field of this user id - * - * @var string - */ - private $_email = ''; - - /** - * Whether or not this user id is revoked - * - * @var boolean - */ - private $_isRevoked = false; - - /** - * Whether or not this user id is valid - * - * @var boolean - */ - private $_isValid = true; - - // }}} - // {{{ __construct() - - /** - * Creates a new user id - * - * User ids can be initialized from an array of named values. Available - * names are: - * - * - <kbd>string name</kbd> - the name field of the user id. - * - <kbd>string comment</kbd> - the comment field of the user id. - * - <kbd>string email</kbd> - the email field of the user id. - * - <kbd>boolean valid</kbd> - whether or not the user id is valid. - * - <kbd>boolean revoked</kbd> - whether or not the user id is revoked. - * - * @param Crypt_GPG_UserId|string|array $userId optional. Either an - * existing user id object, which is copied; a user id string, which - * is parsed; or an array of initial values. - */ - public function __construct($userId = null) - { - // parse from string - if (is_string($userId)) { - $userId = self::parse($userId); - } - - // copy from object - if ($userId instanceof Crypt_GPG_UserId) { - $this->_name = $userId->_name; - $this->_comment = $userId->_comment; - $this->_email = $userId->_email; - $this->_isRevoked = $userId->_isRevoked; - $this->_isValid = $userId->_isValid; - } - - // initialize from array - if (is_array($userId)) { - if (array_key_exists('name', $userId)) { - $this->setName($userId['name']); - } - - if (array_key_exists('comment', $userId)) { - $this->setComment($userId['comment']); - } - - if (array_key_exists('email', $userId)) { - $this->setEmail($userId['email']); - } - - if (array_key_exists('revoked', $userId)) { - $this->setRevoked($userId['revoked']); - } - - if (array_key_exists('valid', $userId)) { - $this->setValid($userId['valid']); - } - } - } - - // }}} - // {{{ getName() - - /** - * Gets the name field of this user id - * - * @return string the name field of this user id. - */ - public function getName() - { - return $this->_name; - } - - // }}} - // {{{ getComment() - - /** - * Gets the comments field of this user id - * - * @return string the comments field of this user id. - */ - public function getComment() - { - return $this->_comment; - } - - // }}} - // {{{ getEmail() - - /** - * Gets the email field of this user id - * - * @return string the email field of this user id. - */ - public function getEmail() - { - return $this->_email; - } - - // }}} - // {{{ isRevoked() - - /** - * Gets whether or not this user id is revoked - * - * @return boolean true if this user id is revoked and false if it is not. - */ - public function isRevoked() - { - return $this->_isRevoked; - } - - // }}} - // {{{ isValid() - - /** - * Gets whether or not this user id is valid - * - * @return boolean true if this user id is valid and false if it is not. - */ - public function isValid() - { - return $this->_isValid; - } - - // }}} - // {{{ __toString() - - /** - * Gets a string representation of this user id - * - * The string is formatted as: - * <b><kbd>name (comment) <email-address></kbd></b>. - * - * @return string a string representation of this user id. - */ - public function __toString() - { - $components = array(); - - if (strlen($this->_name) > 0) { - $components[] = $this->_name; - } - - if (strlen($this->_comment) > 0) { - $components[] = '(' . $this->_comment . ')'; - } - - if (strlen($this->_email) > 0) { - $components[] = '<' . $this->_email. '>'; - } - - return implode(' ', $components); - } - - // }}} - // {{{ setName() - - /** - * Sets the name field of this user id - * - * @param string $name the name field of this user id. - * - * @return Crypt_GPG_UserId the current object, for fluent interface. - */ - public function setName($name) - { - $this->_name = strval($name); - return $this; - } - - // }}} - // {{{ setComment() - - /** - * Sets the comment field of this user id - * - * @param string $comment the comment field of this user id. - * - * @return Crypt_GPG_UserId the current object, for fluent interface. - */ - public function setComment($comment) - { - $this->_comment = strval($comment); - return $this; - } - - // }}} - // {{{ setEmail() - - /** - * Sets the email field of this user id - * - * @param string $email the email field of this user id. - * - * @return Crypt_GPG_UserId the current object, for fluent interface. - */ - public function setEmail($email) - { - $this->_email = strval($email); - return $this; - } - - // }}} - // {{{ setRevoked() - - /** - * Sets whether or not this user id is revoked - * - * @param boolean $isRevoked whether or not this user id is revoked. - * - * @return Crypt_GPG_UserId the current object, for fluent interface. - */ - public function setRevoked($isRevoked) - { - $this->_isRevoked = ($isRevoked) ? true : false; - return $this; - } - - // }}} - // {{{ setValid() - - /** - * Sets whether or not this user id is valid - * - * @param boolean $isValid whether or not this user id is valid. - * - * @return Crypt_GPG_UserId the current object, for fluent interface. - */ - public function setValid($isValid) - { - $this->_isValid = ($isValid) ? true : false; - return $this; - } - - // }}} - // {{{ parse() - - /** - * Parses a user id object from a user id string - * - * A user id string is of the form: - * <b><kbd>name (comment) <email-address></kbd></b> with the <i>comment</i> - * and <i>email-address</i> fields being optional. - * - * @param string $string the user id string to parse. - * - * @return Crypt_GPG_UserId the user id object parsed from the string. - */ - public static function parse($string) - { - $userId = new Crypt_GPG_UserId(); - $email = ''; - $comment = ''; - - // get email address from end of string if it exists - $matches = array(); - if (preg_match('/^(.+?) <([^>]+)>$/', $string, $matches) === 1) { - $string = $matches[1]; - $email = $matches[2]; - } - - // get comment from end of string if it exists - $matches = array(); - if (preg_match('/^(.+?) \(([^\)]+)\)$/', $string, $matches) === 1) { - $string = $matches[1]; - $comment = $matches[2]; - } - - $name = $string; - - $userId->setName($name); - $userId->setComment($comment); - $userId->setEmail($email); - - return $userId; - } - - // }}} -} - -// }}} - -?> diff --git a/program/lib/Crypt/GPG/VerifyStatusHandler.php b/program/lib/Crypt/GPG/VerifyStatusHandler.php deleted file mode 100644 index 8904be149..000000000 --- a/program/lib/Crypt/GPG/VerifyStatusHandler.php +++ /dev/null @@ -1,216 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Crypt_GPG is a package to use GPG from PHP - * - * This file contains an object that handles GPG's status output for the verify - * operation. - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2008 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version CVS: $Id$ - * @link http://pear.php.net/package/Crypt_GPG - * @link http://www.gnupg.org/ - */ - -/** - * Signature object class definition - */ -require_once 'Crypt/GPG/Signature.php'; - -/** - * Status line handler for the verify operation - * - * This class is used internally by Crypt_GPG and does not need be used - * directly. See the {@link Crypt_GPG} class for end-user API. - * - * This class is responsible for building signature objects that are returned - * by the {@link Crypt_GPG::verify()} method. See <b>doc/DETAILS</b> in the - * {@link http://www.gnupg.org/download/ GPG distribution} for detailed - * information on GPG's status output for the verify operation. - * - * @category Encryption - * @package Crypt_GPG - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2008 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - * @link http://www.gnupg.org/ - */ -class Crypt_GPG_VerifyStatusHandler -{ - // {{{ protected properties - - /** - * The current signature id - * - * Ths signature id is emitted by GPG before the new signature line so we - * must remember it temporarily. - * - * @var string - */ - protected $signatureId = ''; - - /** - * List of parsed {@link Crypt_GPG_Signature} objects - * - * @var array - */ - protected $signatures = array(); - - /** - * Array index of the current signature - * - * @var integer - */ - protected $index = -1; - - // }}} - // {{{ handle() - - /** - * Handles a status line - * - * @param string $line the status line to handle. - * - * @return void - */ - public function handle($line) - { - $tokens = explode(' ', $line); - switch ($tokens[0]) { - case 'GOODSIG': - case 'EXPSIG': - case 'EXPKEYSIG': - case 'REVKEYSIG': - case 'BADSIG': - $signature = new Crypt_GPG_Signature(); - - // if there was a signature id, set it on the new signature - if ($this->signatureId != '') { - $signature->setId($this->signatureId); - $this->signatureId = ''; - } - - // Detect whether fingerprint or key id was returned and set - // signature values appropriately. Key ids are strings of either - // 16 or 8 hexadecimal characters. Fingerprints are strings of 40 - // hexadecimal characters. The key id is the last 16 characters of - // the key fingerprint. - if (strlen($tokens[1]) > 16) { - $signature->setKeyFingerprint($tokens[1]); - $signature->setKeyId(substr($tokens[1], -16)); - } else { - $signature->setKeyId($tokens[1]); - } - - // get user id string - $string = implode(' ', array_splice($tokens, 2)); - $string = rawurldecode($string); - - $signature->setUserId(Crypt_GPG_UserId::parse($string)); - - $this->index++; - $this->signatures[$this->index] = $signature; - break; - - case 'ERRSIG': - $signature = new Crypt_GPG_Signature(); - - // if there was a signature id, set it on the new signature - if ($this->signatureId != '') { - $signature->setId($this->signatureId); - $this->signatureId = ''; - } - - // Detect whether fingerprint or key id was returned and set - // signature values appropriately. Key ids are strings of either - // 16 or 8 hexadecimal characters. Fingerprints are strings of 40 - // hexadecimal characters. The key id is the last 16 characters of - // the key fingerprint. - if (strlen($tokens[1]) > 16) { - $signature->setKeyFingerprint($tokens[1]); - $signature->setKeyId(substr($tokens[1], -16)); - } else { - $signature->setKeyId($tokens[1]); - } - - $this->index++; - $this->signatures[$this->index] = $signature; - - break; - - case 'VALIDSIG': - if (!array_key_exists($this->index, $this->signatures)) { - break; - } - - $signature = $this->signatures[$this->index]; - - $signature->setValid(true); - $signature->setKeyFingerprint($tokens[1]); - - if (strpos($tokens[3], 'T') === false) { - $signature->setCreationDate($tokens[3]); - } else { - $signature->setCreationDate(strtotime($tokens[3])); - } - - if (array_key_exists(4, $tokens)) { - if (strpos($tokens[4], 'T') === false) { - $signature->setExpirationDate($tokens[4]); - } else { - $signature->setExpirationDate(strtotime($tokens[4])); - } - } - - break; - - case 'SIG_ID': - // note: signature id comes before new signature line and may not - // exist for some signature types - $this->signatureId = $tokens[1]; - break; - } - } - - // }}} - // {{{ getSignatures() - - /** - * Gets the {@link Crypt_GPG_Signature} objects parsed by this handler - * - * @return array the signature objects parsed by this handler. - */ - public function getSignatures() - { - return $this->signatures; - } - - // }}} -} - -?> diff --git a/program/lib/Crypt/GPGAbstract.php b/program/lib/Crypt/GPGAbstract.php deleted file mode 100644 index 214133936..000000000 --- a/program/lib/Crypt/GPGAbstract.php +++ /dev/null @@ -1,508 +0,0 @@ -<?php - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/** - * Crypt_GPG is a package to use GPG from PHP - * - * This package provides an object oriented interface to GNU Privacy - * Guard (GPG). It requires the GPG executable to be on the system. - * - * Though GPG can support symmetric-key cryptography, this package is intended - * only to facilitate public-key cryptography. - * - * This file contains an abstract implementation of a user of the - * {@link Crypt_GPG_Engine} class. - * - * PHP version 5 - * - * LICENSE: - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of the - * License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @category Encryption - * @package Crypt_GPG - * @author Nathan Fredrickson <nathan@silverorange.com> - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2005-2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version CVS: $Id: GPG.php 305428 2010-11-17 02:47:56Z gauthierm $ - * @link http://pear.php.net/package/Crypt_GPG - * @link http://pear.php.net/manual/en/package.encryption.crypt-gpg.php - * @link http://www.gnupg.org/ - */ - -/** - * GPG key class - */ -require_once 'Crypt/GPG/Key.php'; - -/** - * GPG sub-key class - */ -require_once 'Crypt/GPG/SubKey.php'; - -/** - * GPG user id class - */ -require_once 'Crypt/GPG/UserId.php'; - -/** - * GPG process and I/O engine class - */ -require_once 'Crypt/GPG/Engine.php'; - -/** - * GPG exception classes - */ -require_once 'Crypt/GPG/Exceptions.php'; - -// {{{ class Crypt_GPGAbstract - -/** - * Base class for implementing a user of {@link Crypt_GPG_Engine} - * - * @category Encryption - * @package Crypt_GPG - * @author Nathan Fredrickson <nathan@silverorange.com> - * @author Michael Gauthier <mike@silverorange.com> - * @copyright 2005-2013 silverorange - * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @link http://pear.php.net/package/Crypt_GPG - * @link http://www.gnupg.org/ - */ -abstract class Crypt_GPGAbstract -{ - // {{{ class error constants - - /** - * Error code returned when there is no error. - */ - const ERROR_NONE = 0; - - /** - * Error code returned when an unknown or unhandled error occurs. - */ - const ERROR_UNKNOWN = 1; - - /** - * Error code returned when a bad passphrase is used. - */ - const ERROR_BAD_PASSPHRASE = 2; - - /** - * Error code returned when a required passphrase is missing. - */ - const ERROR_MISSING_PASSPHRASE = 3; - - /** - * Error code returned when a key that is already in the keyring is - * imported. - */ - const ERROR_DUPLICATE_KEY = 4; - - /** - * Error code returned the required data is missing for an operation. - * - * This could be missing key data, missing encrypted data or missing - * signature data. - */ - const ERROR_NO_DATA = 5; - - /** - * Error code returned when an unsigned key is used. - */ - const ERROR_UNSIGNED_KEY = 6; - - /** - * Error code returned when a key that is not self-signed is used. - */ - const ERROR_NOT_SELF_SIGNED = 7; - - /** - * Error code returned when a public or private key that is not in the - * keyring is used. - */ - const ERROR_KEY_NOT_FOUND = 8; - - /** - * Error code returned when an attempt to delete public key having a - * private key is made. - */ - const ERROR_DELETE_PRIVATE_KEY = 9; - - /** - * Error code returned when one or more bad signatures are detected. - */ - const ERROR_BAD_SIGNATURE = 10; - - /** - * Error code returned when there is a problem reading GnuPG data files. - */ - const ERROR_FILE_PERMISSIONS = 11; - - /** - * Error code returned when a key could not be created. - */ - const ERROR_KEY_NOT_CREATED = 12; - - /** - * Error code returned when bad key parameters are used during key - * generation. - */ - const ERROR_BAD_KEY_PARAMS = 13; - - // }}} - // {{{ other class constants - - /** - * URI at which package bugs may be reported. - */ - const BUG_URI = 'http://pear.php.net/bugs/report.php?package=Crypt_GPG'; - - // }}} - // {{{ protected class properties - - /** - * Engine used to control the GPG subprocess - * - * @var Crypt_GPG_Engine - * - * @see Crypt_GPGAbstract::setEngine() - */ - protected $engine = null; - - // }}} - // {{{ __construct() - - /** - * Creates a new GPG object - * - * Available options are: - * - * - <kbd>string homedir</kbd> - the directory where the GPG - * keyring files are stored. If not - * specified, Crypt_GPG uses the - * default of <kbd>~/.gnupg</kbd>. - * - <kbd>string publicKeyring</kbd> - the file path of the public - * keyring. Use this if the public - * keyring is not in the homedir, or - * if the keyring is in a directory - * not writable by the process - * invoking GPG (like Apache). Then - * you can specify the path to the - * keyring with this option - * (/foo/bar/pubring.gpg), and specify - * a writable directory (like /tmp) - * using the <i>homedir</i> option. - * - <kbd>string privateKeyring</kbd> - the file path of the private - * keyring. Use this if the private - * keyring is not in the homedir, or - * if the keyring is in a directory - * not writable by the process - * invoking GPG (like Apache). Then - * you can specify the path to the - * keyring with this option - * (/foo/bar/secring.gpg), and specify - * a writable directory (like /tmp) - * using the <i>homedir</i> option. - * - <kbd>string trustDb</kbd> - the file path of the web-of-trust - * database. Use this if the trust - * database is not in the homedir, or - * if the database is in a directory - * not writable by the process - * invoking GPG (like Apache). Then - * you can specify the path to the - * trust database with this option - * (/foo/bar/trustdb.gpg), and specify - * a writable directory (like /tmp) - * using the <i>homedir</i> option. - * - <kbd>string binary</kbd> - the location of the GPG binary. If - * not specified, the driver attempts - * to auto-detect the GPG binary - * location using a list of known - * default locations for the current - * operating system. The option - * <kbd>gpgBinary</kbd> is a - * deprecated alias for this option. - * - <kbd>string agent</kbd> - the location of the GnuPG agent - * binary. The gpg-agent is only - * used for GnuPG 2.x. If not - * specified, the engine attempts - * to auto-detect the gpg-agent - * binary location using a list of - * know default locations for the - * current operating system. - * - <kbd>boolean debug</kbd> - whether or not to use debug mode. - * When debug mode is on, all - * communication to and from the GPG - * subprocess is logged. This can be - * - * @param array $options optional. An array of options used to create the - * GPG object. All options are optional and are - * represented as key-value pairs. - * - * @throws Crypt_GPG_FileException if the <kbd>homedir</kbd> does not exist - * and cannot be created. This can happen if <kbd>homedir</kbd> is - * not specified, Crypt_GPG is run as the web user, and the web - * user has no home directory. This exception is also thrown if any - * of the options <kbd>publicKeyring</kbd>, - * <kbd>privateKeyring</kbd> or <kbd>trustDb</kbd> options are - * specified but the files do not exist or are are not readable. - * This can happen if the user running the Crypt_GPG process (for - * example, the Apache user) does not have permission to read the - * files. - * - * @throws PEAR_Exception if the provided <kbd>binary</kbd> is invalid, or - * if no <kbd>binary</kbd> is provided and no suitable binary could - * be found. - * - * @throws PEAR_Exception if the provided <kbd>agent</kbd> is invalid, or - * if no <kbd>agent</kbd> is provided and no suitable gpg-agent - * cound be found. - */ - public function __construct(array $options = array()) - { - $this->setEngine(new Crypt_GPG_Engine($options)); - } - - // }}} - // {{{ setEngine() - - /** - * Sets the I/O engine to use for GnuPG operations - * - * Normally this method does not need to be used. It provides a means for - * dependency injection. - * - * @param Crypt_GPG_Engine $engine the engine to use. - * - * @return Crypt_GPGAbstract the current object, for fluent interface. - */ - public function setEngine(Crypt_GPG_Engine $engine) - { - $this->engine = $engine; - return $this; - } - - // }}} - // {{{ _getKeys() - - /** - * Gets the available keys in the keyring - * - * Calls GPG with the <kbd>--list-keys</kbd> command and grabs keys. See - * the first section of <b>doc/DETAILS</b> in the - * {@link http://www.gnupg.org/download/ GPG package} for a detailed - * description of how the GPG command output is parsed. - * - * @param string $keyId optional. Only keys with that match the specified - * pattern are returned. The pattern may be part of - * a user id, a key id or a key fingerprint. If not - * specified, all keys are returned. - * - * @return array an array of {@link Crypt_GPG_Key} objects. If no keys - * match the specified <kbd>$keyId</kbd> an empty array is - * returned. - * - * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs. - * Use the <kbd>debug</kbd> option and file a bug report if these - * exceptions occur. - * - * @see Crypt_GPG_Key - */ - protected function _getKeys($keyId = '') - { - // get private key fingerprints - if ($keyId == '') { - $operation = '--list-secret-keys'; - } else { - $operation = '--list-secret-keys ' . escapeshellarg($keyId); - } - - // According to The file 'doc/DETAILS' in the GnuPG distribution, using - // double '--with-fingerprint' also prints the fingerprint for subkeys. - $arguments = array( - '--with-colons', - '--with-fingerprint', - '--with-fingerprint', - '--fixed-list-mode' - ); - - $output = ''; - - $this->engine->reset(); - $this->engine->setOutput($output); - $this->engine->setOperation($operation, $arguments); - $this->engine->run(); - - $code = $this->engine->getErrorCode(); - - switch ($code) { - case self::ERROR_NONE: - case self::ERROR_KEY_NOT_FOUND: - // ignore not found key errors - break; - case self::ERROR_FILE_PERMISSIONS: - $filename = $this->engine->getErrorFilename(); - if ($filename) { - throw new Crypt_GPG_FileException( - sprintf( - 'Error reading GnuPG data file \'%s\'. Check to make ' . - 'sure it is readable by the current user.', - $filename - ), - $code, - $filename - ); - } - throw new Crypt_GPG_FileException( - 'Error reading GnuPG data file. Check to make GnuPG data ' . - 'files are readable by the current user.', - $code - ); - default: - throw new Crypt_GPG_Exception( - 'Unknown error getting keys. Please use the \'debug\' option ' . - 'when creating the Crypt_GPG object, and file a bug report ' . - 'at ' . self::BUG_URI, - $code - ); - } - - $privateKeyFingerprints = array(); - - $lines = explode(PHP_EOL, $output); - foreach ($lines as $line) { - $lineExp = explode(':', $line); - if ($lineExp[0] == 'fpr') { - $privateKeyFingerprints[] = $lineExp[9]; - } - } - - // get public keys - if ($keyId == '') { - $operation = '--list-public-keys'; - } else { - $operation = '--list-public-keys ' . escapeshellarg($keyId); - } - - $output = ''; - - $this->engine->reset(); - $this->engine->setOutput($output); - $this->engine->setOperation($operation, $arguments); - $this->engine->run(); - - $code = $this->engine->getErrorCode(); - - switch ($code) { - case self::ERROR_NONE: - case self::ERROR_KEY_NOT_FOUND: - // ignore not found key errors - break; - case self::ERROR_FILE_PERMISSIONS: - $filename = $this->engine->getErrorFilename(); - if ($filename) { - throw new Crypt_GPG_FileException( - sprintf( - 'Error reading GnuPG data file \'%s\'. Check to make ' . - 'sure it is readable by the current user.', - $filename - ), - $code, - $filename - ); - } - throw new Crypt_GPG_FileException( - 'Error reading GnuPG data file. Check to make GnuPG data ' . - 'files are readable by the current user.', - $code - ); - default: - throw new Crypt_GPG_Exception( - 'Unknown error getting keys. Please use the \'debug\' option ' . - 'when creating the Crypt_GPG object, and file a bug report ' . - 'at ' . self::BUG_URI, - $code - ); - } - - $keys = array(); - - $key = null; // current key - $subKey = null; // current sub-key - - $lines = explode(PHP_EOL, $output); - foreach ($lines as $line) { - $lineExp = explode(':', $line); - - if ($lineExp[0] == 'pub') { - - // new primary key means last key should be added to the array - if ($key !== null) { - $keys[] = $key; - } - - $key = new Crypt_GPG_Key(); - - $subKey = Crypt_GPG_SubKey::parse($line); - $key->addSubKey($subKey); - - } elseif ($lineExp[0] == 'sub') { - - $subKey = Crypt_GPG_SubKey::parse($line); - $key->addSubKey($subKey); - - } elseif ($lineExp[0] == 'fpr') { - - $fingerprint = $lineExp[9]; - - // set current sub-key fingerprint - $subKey->setFingerprint($fingerprint); - - // if private key exists, set has private to true - if (in_array($fingerprint, $privateKeyFingerprints)) { - $subKey->setHasPrivate(true); - } - - } elseif ($lineExp[0] == 'uid') { - - $string = stripcslashes($lineExp[9]); // as per documentation - $userId = new Crypt_GPG_UserId($string); - - if ($lineExp[1] == 'r') { - $userId->setRevoked(true); - } - - $key->addUserId($userId); - - } - } - - // add last key - if ($key !== null) { - $keys[] = $key; - } - - return $keys; - } - - // }}} -} - -// }}} - -?> diff --git a/program/lib/Mail/mime.php b/program/lib/Mail/mime.php deleted file mode 100644 index db0fd1fc2..000000000 --- a/program/lib/Mail/mime.php +++ /dev/null @@ -1,1499 +0,0 @@ -<?php -/** - * The Mail_Mime class is used to create MIME E-mail messages - * - * The Mail_Mime class provides an OO interface to create MIME - * enabled email messages. This way you can create emails that - * contain plain-text bodies, HTML bodies, attachments, inline - * images and specific headers. - * - * Compatible with PHP versions 4 and 5 - * - * LICENSE: This LICENSE is in the BSD license style. - * Copyright (c) 2002-2003, Richard Heyes <richard@phpguru.org> - * Copyright (c) 2003-2006, PEAR <pear-group@php.net> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - Neither the name of the authors, nor the names of its contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGE. - * - * @category Mail - * @package Mail_Mime - * @author Richard Heyes <richard@phpguru.org> - * @author Tomas V.V. Cox <cox@idecnet.com> - * @author Cipriano Groenendal <cipri@php.net> - * @author Sean Coates <sean@php.net> - * @author Aleksander Machniak <alec@php.net> - * @copyright 2003-2006 PEAR <pear-group@php.net> - * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version CVS: $Id$ - * @link http://pear.php.net/package/Mail_mime - * - * This class is based on HTML Mime Mail class from - * Richard Heyes <richard@phpguru.org> which was based also - * in the mime_mail.class by Tobias Ratschiller <tobias@dnet.it> - * and Sascha Schumann <sascha@schumann.cx> - */ - - -/** - * require PEAR - * - * This package depends on PEAR to raise errors. - */ -require_once 'PEAR.php'; - -/** - * require Mail_mimePart - * - * Mail_mimePart contains the code required to - * create all the different parts a mail can - * consist of. - */ -require_once 'Mail/mimePart.php'; - - -/** - * The Mail_Mime class provides an OO interface to create MIME - * enabled email messages. This way you can create emails that - * contain plain-text bodies, HTML bodies, attachments, inline - * images and specific headers. - * - * @category Mail - * @package Mail_Mime - * @author Richard Heyes <richard@phpguru.org> - * @author Tomas V.V. Cox <cox@idecnet.com> - * @author Cipriano Groenendal <cipri@php.net> - * @author Sean Coates <sean@php.net> - * @copyright 2003-2006 PEAR <pear-group@php.net> - * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: @package_version@ - * @link http://pear.php.net/package/Mail_mime - */ -class Mail_mime -{ - /** - * Contains the plain text part of the email - * - * @var string - * @access private - */ - var $_txtbody; - - /** - * Contains the html part of the email - * - * @var string - * @access private - */ - var $_htmlbody; - - /** - * list of the attached images - * - * @var array - * @access private - */ - var $_html_images = array(); - - /** - * list of the attachements - * - * @var array - * @access private - */ - var $_parts = array(); - - /** - * Headers for the mail - * - * @var array - * @access private - */ - var $_headers = array(); - - /** - * Build parameters - * - * @var array - * @access private - */ - var $_build_params = array( - // What encoding to use for the headers - // Options: quoted-printable or base64 - 'head_encoding' => 'quoted-printable', - // What encoding to use for plain text - // Options: 7bit, 8bit, base64, or quoted-printable - 'text_encoding' => 'quoted-printable', - // What encoding to use for html - // Options: 7bit, 8bit, base64, or quoted-printable - 'html_encoding' => 'quoted-printable', - // The character set to use for html - 'html_charset' => 'ISO-8859-1', - // The character set to use for text - 'text_charset' => 'ISO-8859-1', - // The character set to use for headers - 'head_charset' => 'ISO-8859-1', - // End-of-line sequence - 'eol' => "\r\n", - // Delay attachment files IO until building the message - 'delay_file_io' => false - ); - - /** - * Constructor function - * - * @param mixed $params Build parameters that change the way the email - * is built. Should be an associative array. - * See $_build_params. - * - * @return void - * @access public - */ - function Mail_mime($params = array()) - { - // Backward-compatible EOL setting - if (is_string($params)) { - $this->_build_params['eol'] = $params; - } else if (defined('MAIL_MIME_CRLF') && !isset($params['eol'])) { - $this->_build_params['eol'] = MAIL_MIME_CRLF; - } - - // Update build parameters - if (!empty($params) && is_array($params)) { - while (list($key, $value) = each($params)) { - $this->_build_params[$key] = $value; - } - } - } - - /** - * Set build parameter value - * - * @param string $name Parameter name - * @param string $value Parameter value - * - * @return void - * @access public - * @since 1.6.0 - */ - function setParam($name, $value) - { - $this->_build_params[$name] = $value; - } - - /** - * Get build parameter value - * - * @param string $name Parameter name - * - * @return mixed Parameter value - * @access public - * @since 1.6.0 - */ - function getParam($name) - { - return isset($this->_build_params[$name]) ? $this->_build_params[$name] : null; - } - - /** - * Accessor function to set the body text. Body text is used if - * it's not an html mail being sent or else is used to fill the - * text/plain part that emails clients who don't support - * html should show. - * - * @param string $data Either a string or - * the file name with the contents - * @param bool $isfile If true the first param should be treated - * as a file name, else as a string (default) - * @param bool $append If true the text or file is appended to - * the existing body, else the old body is - * overwritten - * - * @return mixed True on success or PEAR_Error object - * @access public - */ - function setTXTBody($data, $isfile = false, $append = false) - { - if (!$isfile) { - if (!$append) { - $this->_txtbody = $data; - } else { - $this->_txtbody .= $data; - } - } else { - $cont = $this->_file2str($data); - if ($this->_isError($cont)) { - return $cont; - } - if (!$append) { - $this->_txtbody = $cont; - } else { - $this->_txtbody .= $cont; - } - } - - return true; - } - - /** - * Get message text body - * - * @return string Text body - * @access public - * @since 1.6.0 - */ - function getTXTBody() - { - return $this->_txtbody; - } - - /** - * Adds a html part to the mail. - * - * @param string $data Either a string or the file name with the - * contents - * @param bool $isfile A flag that determines whether $data is a - * filename, or a string(false, default) - * - * @return bool True on success - * @access public - */ - function setHTMLBody($data, $isfile = false) - { - if (!$isfile) { - $this->_htmlbody = $data; - } else { - $cont = $this->_file2str($data); - if ($this->_isError($cont)) { - return $cont; - } - $this->_htmlbody = $cont; - } - - return true; - } - - /** - * Get message HTML body - * - * @return string HTML body - * @access public - * @since 1.6.0 - */ - function getHTMLBody() - { - return $this->_htmlbody; - } - - /** - * Adds an image to the list of embedded images. - * - * @param string $file The image file name OR image data itself - * @param string $c_type The content type - * @param string $name The filename of the image. - * Only used if $file is the image data. - * @param bool $isfile Whether $file is a filename or not. - * Defaults to true - * @param string $content_id Desired Content-ID of MIME part - * Defaults to generated unique ID - * - * @return bool True on success - * @access public - */ - function addHTMLImage($file, - $c_type='application/octet-stream', - $name = '', - $isfile = true, - $content_id = null - ) { - $bodyfile = null; - - if ($isfile) { - // Don't load file into memory - if ($this->_build_params['delay_file_io']) { - $filedata = null; - $bodyfile = $file; - } else { - if ($this->_isError($filedata = $this->_file2str($file))) { - return $filedata; - } - } - $filename = ($name ? $name : $file); - } else { - $filedata = $file; - $filename = $name; - } - - if (!$content_id) { - $content_id = preg_replace('/[^0-9a-zA-Z]/', '', uniqid(time(), true)); - } - - $this->_html_images[] = array( - 'body' => $filedata, - 'body_file' => $bodyfile, - 'name' => $filename, - 'c_type' => $c_type, - 'cid' => $content_id - ); - - return true; - } - - /** - * Adds a file to the list of attachments. - * - * @param string $file The file name of the file to attach - * or the file contents itself - * @param string $c_type The content type - * @param string $name The filename of the attachment - * Only use if $file is the contents - * @param bool $isfile Whether $file is a filename or not. Defaults to true - * @param string $encoding The type of encoding to use. Defaults to base64. - * Possible values: 7bit, 8bit, base64 or quoted-printable. - * @param string $disposition The content-disposition of this file - * Defaults to attachment. - * Possible values: attachment, inline. - * @param string $charset The character set of attachment's content. - * @param string $language The language of the attachment - * @param string $location The RFC 2557.4 location of the attachment - * @param string $n_encoding Encoding of the attachment's name in Content-Type - * By default filenames are encoded using RFC2231 method - * Here you can set RFC2047 encoding (quoted-printable - * or base64) instead - * @param string $f_encoding Encoding of the attachment's filename - * in Content-Disposition header. - * @param string $description Content-Description header - * @param string $h_charset The character set of the headers e.g. filename - * If not specified, $charset will be used - * @param array $add_headers Additional part headers. Array keys can be in form - * of <header_name>:<parameter_name> - * - * @return mixed True on success or PEAR_Error object - * @access public - */ - function addAttachment($file, - $c_type = 'application/octet-stream', - $name = '', - $isfile = true, - $encoding = 'base64', - $disposition = 'attachment', - $charset = '', - $language = '', - $location = '', - $n_encoding = null, - $f_encoding = null, - $description = '', - $h_charset = null, - $add_headers = array() - ) { - $bodyfile = null; - - if ($isfile) { - // Don't load file into memory - if ($this->_build_params['delay_file_io']) { - $filedata = null; - $bodyfile = $file; - } else { - if ($this->_isError($filedata = $this->_file2str($file))) { - return $filedata; - } - } - // Force the name the user supplied, otherwise use $file - $filename = ($name ? $name : $this->_basename($file)); - } else { - $filedata = $file; - $filename = $name; - } - - if (!strlen($filename)) { - $msg = "The supplied filename for the attachment can't be empty"; - return $this->_raiseError($msg); - } - - $this->_parts[] = array( - 'body' => $filedata, - 'body_file' => $bodyfile, - 'name' => $filename, - 'c_type' => $c_type, - 'charset' => $charset, - 'encoding' => $encoding, - 'language' => $language, - 'location' => $location, - 'disposition' => $disposition, - 'description' => $description, - 'add_headers' => $add_headers, - 'name_encoding' => $n_encoding, - 'filename_encoding' => $f_encoding, - 'headers_charset' => $h_charset, - ); - - return true; - } - - /** - * Get the contents of the given file name as string - * - * @param string $file_name Path of file to process - * - * @return string Contents of $file_name - * @access private - */ - function _file2str($file_name) - { - // Check state of file and raise an error properly - if (!file_exists($file_name)) { - return $this->_raiseError('File not found: ' . $file_name); - } - if (!is_file($file_name)) { - return $this->_raiseError('Not a regular file: ' . $file_name); - } - if (!is_readable($file_name)) { - return $this->_raiseError('File is not readable: ' . $file_name); - } - - // Temporarily reset magic_quotes_runtime and read file contents - if ($magic_quote_setting = get_magic_quotes_runtime()) { - @ini_set('magic_quotes_runtime', 0); - } - $cont = file_get_contents($file_name); - if ($magic_quote_setting) { - @ini_set('magic_quotes_runtime', $magic_quote_setting); - } - - return $cont; - } - - /** - * Adds a text subpart to the mimePart object and - * returns it during the build process. - * - * @param mixed &$obj The object to add the part to, or - * anything else if a new object is to be created. - * @param string $text The text to add. - * - * @return object The text mimePart object - * @access private - */ - function &_addTextPart(&$obj, $text = '') - { - $params['content_type'] = 'text/plain'; - $params['encoding'] = $this->_build_params['text_encoding']; - $params['charset'] = $this->_build_params['text_charset']; - $params['eol'] = $this->_build_params['eol']; - - if (is_object($obj)) { - $ret = $obj->addSubpart($text, $params); - } else { - $ret = new Mail_mimePart($text, $params); - } - - return $ret; - } - - /** - * Adds a html subpart to the mimePart object and - * returns it during the build process. - * - * @param mixed &$obj The object to add the part to, or - * anything else if a new object is to be created. - * - * @return object The html mimePart object - * @access private - */ - function &_addHtmlPart(&$obj) - { - $params['content_type'] = 'text/html'; - $params['encoding'] = $this->_build_params['html_encoding']; - $params['charset'] = $this->_build_params['html_charset']; - $params['eol'] = $this->_build_params['eol']; - - if (is_object($obj)) { - $ret = $obj->addSubpart($this->_htmlbody, $params); - } else { - $ret = new Mail_mimePart($this->_htmlbody, $params); - } - - return $ret; - } - - /** - * Creates a new mimePart object, using multipart/mixed as - * the initial content-type and returns it during the - * build process. - * - * @return object The multipart/mixed mimePart object - * @access private - */ - function &_addMixedPart() - { - $params['content_type'] = 'multipart/mixed'; - $params['eol'] = $this->_build_params['eol']; - - // Create empty multipart/mixed Mail_mimePart object to return - $ret = new Mail_mimePart('', $params); - return $ret; - } - - /** - * Adds a multipart/alternative part to a mimePart - * object (or creates one), and returns it during - * the build process. - * - * @param mixed &$obj The object to add the part to, or - * anything else if a new object is to be created. - * - * @return object The multipart/mixed mimePart object - * @access private - */ - function &_addAlternativePart(&$obj) - { - $params['content_type'] = 'multipart/alternative'; - $params['eol'] = $this->_build_params['eol']; - - if (is_object($obj)) { - $ret = $obj->addSubpart('', $params); - } else { - $ret = new Mail_mimePart('', $params); - } - - return $ret; - } - - /** - * Adds a multipart/related part to a mimePart - * object (or creates one), and returns it during - * the build process. - * - * @param mixed &$obj The object to add the part to, or - * anything else if a new object is to be created - * - * @return object The multipart/mixed mimePart object - * @access private - */ - function &_addRelatedPart(&$obj) - { - $params['content_type'] = 'multipart/related'; - $params['eol'] = $this->_build_params['eol']; - - if (is_object($obj)) { - $ret = $obj->addSubpart('', $params); - } else { - $ret = new Mail_mimePart('', $params); - } - - return $ret; - } - - /** - * Adds an html image subpart to a mimePart object - * and returns it during the build process. - * - * @param object &$obj The mimePart to add the image to - * @param array $value The image information - * - * @return object The image mimePart object - * @access private - */ - function &_addHtmlImagePart(&$obj, $value) - { - $params['content_type'] = $value['c_type']; - $params['encoding'] = 'base64'; - $params['disposition'] = 'inline'; - $params['filename'] = $value['name']; - $params['cid'] = $value['cid']; - $params['body_file'] = $value['body_file']; - $params['eol'] = $this->_build_params['eol']; - - if (!empty($value['name_encoding'])) { - $params['name_encoding'] = $value['name_encoding']; - } - if (!empty($value['filename_encoding'])) { - $params['filename_encoding'] = $value['filename_encoding']; - } - - $ret = $obj->addSubpart($value['body'], $params); - return $ret; - } - - /** - * Adds an attachment subpart to a mimePart object - * and returns it during the build process. - * - * @param object &$obj The mimePart to add the image to - * @param array $value The attachment information - * - * @return object The image mimePart object - * @access private - */ - function &_addAttachmentPart(&$obj, $value) - { - $params['eol'] = $this->_build_params['eol']; - $params['filename'] = $value['name']; - $params['encoding'] = $value['encoding']; - $params['content_type'] = $value['c_type']; - $params['body_file'] = $value['body_file']; - $params['disposition'] = isset($value['disposition']) ? - $value['disposition'] : 'attachment'; - - // content charset - if (!empty($value['charset'])) { - $params['charset'] = $value['charset']; - } - // headers charset (filename, description) - if (!empty($value['headers_charset'])) { - $params['headers_charset'] = $value['headers_charset']; - } - if (!empty($value['language'])) { - $params['language'] = $value['language']; - } - if (!empty($value['location'])) { - $params['location'] = $value['location']; - } - if (!empty($value['name_encoding'])) { - $params['name_encoding'] = $value['name_encoding']; - } - if (!empty($value['filename_encoding'])) { - $params['filename_encoding'] = $value['filename_encoding']; - } - if (!empty($value['description'])) { - $params['description'] = $value['description']; - } - if (is_array($value['add_headers'])) { - $params['headers'] = $value['add_headers']; - } - - $ret = $obj->addSubpart($value['body'], $params); - return $ret; - } - - /** - * Returns the complete e-mail, ready to send using an alternative - * mail delivery method. Note that only the mailpart that is made - * with Mail_Mime is created. This means that, - * YOU WILL HAVE NO TO: HEADERS UNLESS YOU SET IT YOURSELF - * using the $headers parameter! - * - * @param string $separation The separation between these two parts. - * @param array $params The Build parameters passed to the - * get() function. See get() for more info. - * @param array $headers The extra headers that should be passed - * to the headers() method. - * See that function for more info. - * @param bool $overwrite Overwrite the existing headers with new. - * - * @return mixed The complete e-mail or PEAR error object - * @access public - */ - function getMessage($separation = null, $params = null, $headers = null, - $overwrite = false - ) { - if ($separation === null) { - $separation = $this->_build_params['eol']; - } - - $body = $this->get($params); - - if ($this->_isError($body)) { - return $body; - } - - return $this->txtHeaders($headers, $overwrite) . $separation . $body; - } - - /** - * Returns the complete e-mail body, ready to send using an alternative - * mail delivery method. - * - * @param array $params The Build parameters passed to the - * get() method. See get() for more info. - * - * @return mixed The e-mail body or PEAR error object - * @access public - * @since 1.6.0 - */ - function getMessageBody($params = null) - { - return $this->get($params, null, true); - } - - /** - * Writes (appends) the complete e-mail into file. - * - * @param string $filename Output file location - * @param array $params The Build parameters passed to the - * get() method. See get() for more info. - * @param array $headers The extra headers that should be passed - * to the headers() function. - * See that function for more info. - * @param bool $overwrite Overwrite the existing headers with new. - * - * @return mixed True or PEAR error object - * @access public - * @since 1.6.0 - */ - function saveMessage($filename, $params = null, $headers = null, $overwrite = false) - { - // Check state of file and raise an error properly - if (file_exists($filename) && !is_writable($filename)) { - return $this->_raiseError('File is not writable: ' . $filename); - } - - // Temporarily reset magic_quotes_runtime and read file contents - if ($magic_quote_setting = get_magic_quotes_runtime()) { - @ini_set('magic_quotes_runtime', 0); - } - - if (!($fh = fopen($filename, 'ab'))) { - return $this->_raiseError('Unable to open file: ' . $filename); - } - - // Write message headers into file (skipping Content-* headers) - $head = $this->txtHeaders($headers, $overwrite, true); - if (fwrite($fh, $head) === false) { - return $this->_raiseError('Error writing to file: ' . $filename); - } - - fclose($fh); - - if ($magic_quote_setting) { - @ini_set('magic_quotes_runtime', $magic_quote_setting); - } - - // Write the rest of the message into file - $res = $this->get($params, $filename); - - return $res ? $res : true; - } - - /** - * Writes (appends) the complete e-mail body into file. - * - * @param string $filename Output file location - * @param array $params The Build parameters passed to the - * get() method. See get() for more info. - * - * @return mixed True or PEAR error object - * @access public - * @since 1.6.0 - */ - function saveMessageBody($filename, $params = null) - { - // Check state of file and raise an error properly - if (file_exists($filename) && !is_writable($filename)) { - return $this->_raiseError('File is not writable: ' . $filename); - } - - // Temporarily reset magic_quotes_runtime and read file contents - if ($magic_quote_setting = get_magic_quotes_runtime()) { - @ini_set('magic_quotes_runtime', 0); - } - - if (!($fh = fopen($filename, 'ab'))) { - return $this->_raiseError('Unable to open file: ' . $filename); - } - - // Write the rest of the message into file - $res = $this->get($params, $filename, true); - - return $res ? $res : true; - } - - /** - * Builds the multipart message from the list ($this->_parts) and - * returns the mime content. - * - * @param array $params Build parameters that change the way the email - * is built. Should be associative. See $_build_params. - * @param resource $filename Output file where to save the message instead of - * returning it - * @param boolean $skip_head True if you want to return/save only the message - * without headers - * - * @return mixed The MIME message content string, null or PEAR error object - * @access public - */ - function get($params = null, $filename = null, $skip_head = false) - { - if (isset($params)) { - while (list($key, $value) = each($params)) { - $this->_build_params[$key] = $value; - } - } - - if (isset($this->_headers['From'])) { - // Bug #11381: Illegal characters in domain ID - if (preg_match('#(@[0-9a-zA-Z\-\.]+)#', $this->_headers['From'], $matches)) { - $domainID = $matches[1]; - } else { - $domainID = '@localhost'; - } - foreach ($this->_html_images as $i => $img) { - $cid = $this->_html_images[$i]['cid']; - if (!preg_match('#'.preg_quote($domainID).'$#', $cid)) { - $this->_html_images[$i]['cid'] = $cid . $domainID; - } - } - } - - if (count($this->_html_images) && isset($this->_htmlbody)) { - foreach ($this->_html_images as $key => $value) { - $regex = array(); - $regex[] = '#(\s)((?i)src|background|href(?-i))\s*=\s*(["\']?)' . - preg_quote($value['name'], '#') . '\3#'; - $regex[] = '#(?i)url(?-i)\(\s*(["\']?)' . - preg_quote($value['name'], '#') . '\1\s*\)#'; - - $rep = array(); - $rep[] = '\1\2=\3cid:' . $value['cid'] .'\3'; - $rep[] = 'url(\1cid:' . $value['cid'] . '\1)'; - - $this->_htmlbody = preg_replace($regex, $rep, $this->_htmlbody); - $this->_html_images[$key]['name'] - = $this->_basename($this->_html_images[$key]['name']); - } - } - - $this->_checkParams(); - - $null = -1; - $attachments = count($this->_parts) > 0; - $html_images = count($this->_html_images) > 0; - $html = strlen($this->_htmlbody) > 0; - $text = !$html && strlen($this->_txtbody); - - switch (true) { - case $text && !$attachments: - $message =& $this->_addTextPart($null, $this->_txtbody); - break; - - case !$text && !$html && $attachments: - $message =& $this->_addMixedPart(); - for ($i = 0; $i < count($this->_parts); $i++) { - $this->_addAttachmentPart($message, $this->_parts[$i]); - } - break; - - case $text && $attachments: - $message =& $this->_addMixedPart(); - $this->_addTextPart($message, $this->_txtbody); - for ($i = 0; $i < count($this->_parts); $i++) { - $this->_addAttachmentPart($message, $this->_parts[$i]); - } - break; - - case $html && !$attachments && !$html_images: - if (isset($this->_txtbody)) { - $message =& $this->_addAlternativePart($null); - $this->_addTextPart($message, $this->_txtbody); - $this->_addHtmlPart($message); - } else { - $message =& $this->_addHtmlPart($null); - } - break; - - case $html && !$attachments && $html_images: - // * Content-Type: multipart/alternative; - // * text - // * Content-Type: multipart/related; - // * html - // * image... - if (isset($this->_txtbody)) { - $message =& $this->_addAlternativePart($null); - $this->_addTextPart($message, $this->_txtbody); - - $ht =& $this->_addRelatedPart($message); - $this->_addHtmlPart($ht); - for ($i = 0; $i < count($this->_html_images); $i++) { - $this->_addHtmlImagePart($ht, $this->_html_images[$i]); - } - } else { - // * Content-Type: multipart/related; - // * html - // * image... - $message =& $this->_addRelatedPart($null); - $this->_addHtmlPart($message); - for ($i = 0; $i < count($this->_html_images); $i++) { - $this->_addHtmlImagePart($message, $this->_html_images[$i]); - } - } - /* - // #13444, #9725: the code below was a non-RFC compliant hack - // * Content-Type: multipart/related; - // * Content-Type: multipart/alternative; - // * text - // * html - // * image... - $message =& $this->_addRelatedPart($null); - if (isset($this->_txtbody)) { - $alt =& $this->_addAlternativePart($message); - $this->_addTextPart($alt, $this->_txtbody); - $this->_addHtmlPart($alt); - } else { - $this->_addHtmlPart($message); - } - for ($i = 0; $i < count($this->_html_images); $i++) { - $this->_addHtmlImagePart($message, $this->_html_images[$i]); - } - */ - break; - - case $html && $attachments && !$html_images: - $message =& $this->_addMixedPart(); - if (isset($this->_txtbody)) { - $alt =& $this->_addAlternativePart($message); - $this->_addTextPart($alt, $this->_txtbody); - $this->_addHtmlPart($alt); - } else { - $this->_addHtmlPart($message); - } - for ($i = 0; $i < count($this->_parts); $i++) { - $this->_addAttachmentPart($message, $this->_parts[$i]); - } - break; - - case $html && $attachments && $html_images: - $message =& $this->_addMixedPart(); - if (isset($this->_txtbody)) { - $alt =& $this->_addAlternativePart($message); - $this->_addTextPart($alt, $this->_txtbody); - $rel =& $this->_addRelatedPart($alt); - } else { - $rel =& $this->_addRelatedPart($message); - } - $this->_addHtmlPart($rel); - for ($i = 0; $i < count($this->_html_images); $i++) { - $this->_addHtmlImagePart($rel, $this->_html_images[$i]); - } - for ($i = 0; $i < count($this->_parts); $i++) { - $this->_addAttachmentPart($message, $this->_parts[$i]); - } - break; - } - - if (!isset($message)) { - return null; - } - - // Use saved boundary - if (!empty($this->_build_params['boundary'])) { - $boundary = $this->_build_params['boundary']; - } else { - $boundary = null; - } - - // Write output to file - if ($filename) { - // Append mimePart message headers and body into file - $headers = $message->encodeToFile($filename, $boundary, $skip_head); - if ($this->_isError($headers)) { - return $headers; - } - $this->_headers = array_merge($this->_headers, $headers); - return null; - } else { - $output = $message->encode($boundary, $skip_head); - if ($this->_isError($output)) { - return $output; - } - $this->_headers = array_merge($this->_headers, $output['headers']); - return $output['body']; - } - } - - /** - * Returns an array with the headers needed to prepend to the email - * (MIME-Version and Content-Type). Format of argument is: - * $array['header-name'] = 'header-value'; - * - * @param array $xtra_headers Assoc array with any extra headers (optional) - * (Don't set Content-Type for multipart messages here!) - * @param bool $overwrite Overwrite already existing headers. - * @param bool $skip_content Don't return content headers: Content-Type, - * Content-Disposition and Content-Transfer-Encoding - * - * @return array Assoc array with the mime headers - * @access public - */ - function headers($xtra_headers = null, $overwrite = false, $skip_content = false) - { - // Add mime version header - $headers['MIME-Version'] = '1.0'; - - // Content-Type and Content-Transfer-Encoding headers should already - // be present if get() was called, but we'll re-set them to make sure - // we got them when called before get() or something in the message - // has been changed after get() [#14780] - if (!$skip_content) { - $headers += $this->_contentHeaders(); - } - - if (!empty($xtra_headers)) { - $headers = array_merge($headers, $xtra_headers); - } - - if ($overwrite) { - $this->_headers = array_merge($this->_headers, $headers); - } else { - $this->_headers = array_merge($headers, $this->_headers); - } - - $headers = $this->_headers; - - if ($skip_content) { - unset($headers['Content-Type']); - unset($headers['Content-Transfer-Encoding']); - unset($headers['Content-Disposition']); - } else if (!empty($this->_build_params['ctype'])) { - $headers['Content-Type'] = $this->_build_params['ctype']; - } - - $encodedHeaders = $this->_encodeHeaders($headers); - return $encodedHeaders; - } - - /** - * Get the text version of the headers - * (usefull if you want to use the PHP mail() function) - * - * @param array $xtra_headers Assoc array with any extra headers (optional) - * (Don't set Content-Type for multipart messages here!) - * @param bool $overwrite Overwrite the existing headers with new. - * @param bool $skip_content Don't return content headers: Content-Type, - * Content-Disposition and Content-Transfer-Encoding - * - * @return string Plain text headers - * @access public - */ - function txtHeaders($xtra_headers = null, $overwrite = false, $skip_content = false) - { - $headers = $this->headers($xtra_headers, $overwrite, $skip_content); - - // Place Received: headers at the beginning of the message - // Spam detectors often flag messages with it after the Subject: as spam - if (isset($headers['Received'])) { - $received = $headers['Received']; - unset($headers['Received']); - $headers = array('Received' => $received) + $headers; - } - - $ret = ''; - $eol = $this->_build_params['eol']; - - foreach ($headers as $key => $val) { - if (is_array($val)) { - foreach ($val as $value) { - $ret .= "$key: $value" . $eol; - } - } else { - $ret .= "$key: $val" . $eol; - } - } - - return $ret; - } - - /** - * Sets message Content-Type header. - * Use it to build messages with various content-types e.g. miltipart/raport - * not supported by _contentHeaders() function. - * - * @param string $type Type name - * @param array $params Hash array of header parameters - * - * @return void - * @access public - * @since 1.7.0 - */ - function setContentType($type, $params = array()) - { - $header = $type; - - $eol = !empty($this->_build_params['eol']) - ? $this->_build_params['eol'] : "\r\n"; - - // add parameters - $token_regexp = '#([^\x21\x23-\x27\x2A\x2B\x2D' - . '\x2E\x30-\x39\x41-\x5A\x5E-\x7E])#'; - if (is_array($params)) { - foreach ($params as $name => $value) { - if ($name == 'boundary') { - $this->_build_params['boundary'] = $value; - } - if (!preg_match($token_regexp, $value)) { - $header .= ";$eol $name=$value"; - } else { - $value = addcslashes($value, '\\"'); - $header .= ";$eol $name=\"$value\""; - } - } - } - - // add required boundary parameter if not defined - if (preg_match('/^multipart\//i', $type)) { - if (empty($this->_build_params['boundary'])) { - $this->_build_params['boundary'] = '=_' . md5(rand() . microtime()); - } - - $header .= ";$eol boundary=\"".$this->_build_params['boundary']."\""; - } - - $this->_build_params['ctype'] = $header; - } - - /** - * Sets the Subject header - * - * @param string $subject String to set the subject to. - * - * @return void - * @access public - */ - function setSubject($subject) - { - $this->_headers['Subject'] = $subject; - } - - /** - * Set an email to the From (the sender) header - * - * @param string $email The email address to use - * - * @return void - * @access public - */ - function setFrom($email) - { - $this->_headers['From'] = $email; - } - - /** - * Add an email to the To header - * (multiple calls to this method are allowed) - * - * @param string $email The email direction to add - * - * @return void - * @access public - */ - function addTo($email) - { - if (isset($this->_headers['To'])) { - $this->_headers['To'] .= ", $email"; - } else { - $this->_headers['To'] = $email; - } - } - - /** - * Add an email to the Cc (carbon copy) header - * (multiple calls to this method are allowed) - * - * @param string $email The email direction to add - * - * @return void - * @access public - */ - function addCc($email) - { - if (isset($this->_headers['Cc'])) { - $this->_headers['Cc'] .= ", $email"; - } else { - $this->_headers['Cc'] = $email; - } - } - - /** - * Add an email to the Bcc (blank carbon copy) header - * (multiple calls to this method are allowed) - * - * @param string $email The email direction to add - * - * @return void - * @access public - */ - function addBcc($email) - { - if (isset($this->_headers['Bcc'])) { - $this->_headers['Bcc'] .= ", $email"; - } else { - $this->_headers['Bcc'] = $email; - } - } - - /** - * Since the PHP send function requires you to specify - * recipients (To: header) separately from the other - * headers, the To: header is not properly encoded. - * To fix this, you can use this public method to - * encode your recipients before sending to the send - * function - * - * @param string $recipients A comma-delimited list of recipients - * - * @return string Encoded data - * @access public - */ - function encodeRecipients($recipients) - { - $input = array("To" => $recipients); - $retval = $this->_encodeHeaders($input); - return $retval["To"] ; - } - - /** - * Encodes headers as per RFC2047 - * - * @param array $input The header data to encode - * @param array $params Extra build parameters - * - * @return array Encoded data - * @access private - */ - function _encodeHeaders($input, $params = array()) - { - $build_params = $this->_build_params; - while (list($key, $value) = each($params)) { - $build_params[$key] = $value; - } - - foreach ($input as $hdr_name => $hdr_value) { - if (is_array($hdr_value)) { - foreach ($hdr_value as $idx => $value) { - $input[$hdr_name][$idx] = $this->encodeHeader( - $hdr_name, $value, - $build_params['head_charset'], $build_params['head_encoding'] - ); - } - } else { - $input[$hdr_name] = $this->encodeHeader( - $hdr_name, $hdr_value, - $build_params['head_charset'], $build_params['head_encoding'] - ); - } - } - - return $input; - } - - /** - * Encodes a header as per RFC2047 - * - * @param string $name The header name - * @param string $value The header data to encode - * @param string $charset Character set name - * @param string $encoding Encoding name (base64 or quoted-printable) - * - * @return string Encoded header data (without a name) - * @access public - * @since 1.5.3 - */ - function encodeHeader($name, $value, $charset, $encoding) - { - $mime_part = new Mail_mimePart; - return $mime_part->encodeHeader( - $name, $value, $charset, $encoding, $this->_build_params['eol'] - ); - } - - /** - * Get file's basename (locale independent) - * - * @param string $filename Filename - * - * @return string Basename - * @access private - */ - function _basename($filename) - { - // basename() is not unicode safe and locale dependent - if (stristr(PHP_OS, 'win') || stristr(PHP_OS, 'netware')) { - return preg_replace('/^.*[\\\\\\/]/', '', $filename); - } else { - return preg_replace('/^.*[\/]/', '', $filename); - } - } - - /** - * Get Content-Type and Content-Transfer-Encoding headers of the message - * - * @return array Headers array - * @access private - */ - function _contentHeaders() - { - $attachments = count($this->_parts) ? true : false; - $html_images = count($this->_html_images) ? true : false; - $html = strlen($this->_htmlbody) ? true : false; - $text = (!$html && strlen($this->_txtbody)) ? true : false; - $headers = array(); - - // See get() - switch (true) { - case $text && !$attachments: - $headers['Content-Type'] = 'text/plain'; - break; - - case !$text && !$html && $attachments: - case $text && $attachments: - case $html && $attachments && !$html_images: - case $html && $attachments && $html_images: - $headers['Content-Type'] = 'multipart/mixed'; - break; - - case $html && !$attachments && !$html_images && isset($this->_txtbody): - case $html && !$attachments && $html_images && isset($this->_txtbody): - $headers['Content-Type'] = 'multipart/alternative'; - break; - - case $html && !$attachments && !$html_images && !isset($this->_txtbody): - $headers['Content-Type'] = 'text/html'; - break; - - case $html && !$attachments && $html_images && !isset($this->_txtbody): - $headers['Content-Type'] = 'multipart/related'; - break; - - default: - return $headers; - } - - $this->_checkParams(); - - $eol = !empty($this->_build_params['eol']) - ? $this->_build_params['eol'] : "\r\n"; - - if ($headers['Content-Type'] == 'text/plain') { - // single-part message: add charset and encoding - if ($this->_build_params['text_charset']) { - $charset = 'charset=' . $this->_build_params['text_charset']; - // place charset parameter in the same line, if possible - // 26 = strlen("Content-Type: text/plain; ") - $headers['Content-Type'] - .= (strlen($charset) + 26 <= 76) ? "; $charset" : ";$eol $charset"; - } - - $headers['Content-Transfer-Encoding'] - = $this->_build_params['text_encoding']; - } else if ($headers['Content-Type'] == 'text/html') { - // single-part message: add charset and encoding - if ($this->_build_params['html_charset']) { - $charset = 'charset=' . $this->_build_params['html_charset']; - // place charset parameter in the same line, if possible - $headers['Content-Type'] - .= (strlen($charset) + 25 <= 76) ? "; $charset" : ";$eol $charset"; - } - $headers['Content-Transfer-Encoding'] - = $this->_build_params['html_encoding']; - } else { - // multipart message: and boundary - if (!empty($this->_build_params['boundary'])) { - $boundary = $this->_build_params['boundary']; - } else if (!empty($this->_headers['Content-Type']) - && preg_match('/boundary="([^"]+)"/', $this->_headers['Content-Type'], $m) - ) { - $boundary = $m[1]; - } else { - $boundary = '=_' . md5(rand() . microtime()); - } - - $this->_build_params['boundary'] = $boundary; - $headers['Content-Type'] .= ";$eol boundary=\"$boundary\""; - } - - return $headers; - } - - /** - * Validate and set build parameters - * - * @return void - * @access private - */ - function _checkParams() - { - $encodings = array('7bit', '8bit', 'base64', 'quoted-printable'); - - $this->_build_params['text_encoding'] - = strtolower($this->_build_params['text_encoding']); - $this->_build_params['html_encoding'] - = strtolower($this->_build_params['html_encoding']); - - if (!in_array($this->_build_params['text_encoding'], $encodings)) { - $this->_build_params['text_encoding'] = '7bit'; - } - if (!in_array($this->_build_params['html_encoding'], $encodings)) { - $this->_build_params['html_encoding'] = '7bit'; - } - - // text body - if ($this->_build_params['text_encoding'] == '7bit' - && !preg_match('/ascii/i', $this->_build_params['text_charset']) - && preg_match('/[^\x00-\x7F]/', $this->_txtbody) - ) { - $this->_build_params['text_encoding'] = 'quoted-printable'; - } - // html body - if ($this->_build_params['html_encoding'] == '7bit' - && !preg_match('/ascii/i', $this->_build_params['html_charset']) - && preg_match('/[^\x00-\x7F]/', $this->_htmlbody) - ) { - $this->_build_params['html_encoding'] = 'quoted-printable'; - } - } - - /** - * PEAR::isError implementation - * - * @param mixed $data Object - * - * @return bool True if object is an instance of PEAR_Error - * @access private - */ - function _isError($data) - { - // PEAR::isError() is not PHP 5.4 compatible (see Bug #19473) - if (is_object($data) && is_a($data, 'PEAR_Error')) { - return true; - } - - return false; - } - - /** - * PEAR::raiseError implementation - * - * @param $message A text error message - * - * @return PEAR_Error Instance of PEAR_Error - * @access private - */ - function _raiseError($message) - { - // PEAR::raiseError() is not PHP 5.4 compatible - return new PEAR_Error($message); - } - -} // End of class diff --git a/program/lib/Mail/mimeDecode.php b/program/lib/Mail/mimeDecode.php deleted file mode 100644 index 9f4589441..000000000 --- a/program/lib/Mail/mimeDecode.php +++ /dev/null @@ -1,1003 +0,0 @@ -<?php -/** - * The Mail_mimeDecode class is used to decode mail/mime messages - * - * This class will parse a raw mime email and return - * the structure. Returned structure is similar to - * that returned by imap_fetchstructure(). - * - * +----------------------------- IMPORTANT ------------------------------+ - * | Usage of this class compared to native php extensions such as | - * | mailparse or imap, is slow and may be feature deficient. If available| - * | you are STRONGLY recommended to use the php extensions. | - * +----------------------------------------------------------------------+ - * - * Compatible with PHP versions 4 and 5 - * - * LICENSE: This LICENSE is in the BSD license style. - * Copyright (c) 2002-2003, Richard Heyes <richard@phpguru.org> - * Copyright (c) 2003-2006, PEAR <pear-group@php.net> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - Neither the name of the authors, nor the names of its contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGE. - * - * @category Mail - * @package Mail_Mime - * @author Richard Heyes <richard@phpguru.org> - * @author George Schlossnagle <george@omniti.com> - * @author Cipriano Groenendal <cipri@php.net> - * @author Sean Coates <sean@php.net> - * @copyright 2003-2006 PEAR <pear-group@php.net> - * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version CVS: $Id: mimeDecode.php 305875 2010-12-01 07:17:10Z alan_k $ - * @link http://pear.php.net/package/Mail_mime - */ - - -/** - * require PEAR - * - * This package depends on PEAR to raise errors. - */ -require_once 'PEAR.php'; - - -/** - * The Mail_mimeDecode class is used to decode mail/mime messages - * - * This class will parse a raw mime email and return the structure. - * Returned structure is similar to that returned by imap_fetchstructure(). - * - * +----------------------------- IMPORTANT ------------------------------+ - * | Usage of this class compared to native php extensions such as | - * | mailparse or imap, is slow and may be feature deficient. If available| - * | you are STRONGLY recommended to use the php extensions. | - * +----------------------------------------------------------------------+ - * - * @category Mail - * @package Mail_Mime - * @author Richard Heyes <richard@phpguru.org> - * @author George Schlossnagle <george@omniti.com> - * @author Cipriano Groenendal <cipri@php.net> - * @author Sean Coates <sean@php.net> - * @copyright 2003-2006 PEAR <pear-group@php.net> - * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: 1.5.5 - * @link http://pear.php.net/package/Mail_mime - */ -class Mail_mimeDecode extends PEAR -{ - /** - * The raw email to decode - * - * @var string - * @access private - */ - var $_input; - - /** - * The header part of the input - * - * @var string - * @access private - */ - var $_header; - - /** - * The body part of the input - * - * @var string - * @access private - */ - var $_body; - - /** - * If an error occurs, this is used to store the message - * - * @var string - * @access private - */ - var $_error; - - /** - * Flag to determine whether to include bodies in the - * returned object. - * - * @var boolean - * @access private - */ - var $_include_bodies; - - /** - * Flag to determine whether to decode bodies - * - * @var boolean - * @access private - */ - var $_decode_bodies; - - /** - * Flag to determine whether to decode headers - * - * @var boolean - * @access private - */ - var $_decode_headers; - - /** - * Flag to determine whether to include attached messages - * as body in the returned object. Depends on $_include_bodies - * - * @var boolean - * @access private - */ - var $_rfc822_bodies; - - /** - * Constructor. - * - * Sets up the object, initialise the variables, and splits and - * stores the header and body of the input. - * - * @param string The input to decode - * @access public - */ - function Mail_mimeDecode($input) - { - list($header, $body) = $this->_splitBodyHeader($input); - - $this->_input = $input; - $this->_header = $header; - $this->_body = $body; - $this->_decode_bodies = false; - $this->_include_bodies = true; - $this->_rfc822_bodies = false; - } - - /** - * Begins the decoding process. If called statically - * it will create an object and call the decode() method - * of it. - * - * @param array An array of various parameters that determine - * various things: - * include_bodies - Whether to include the body in the returned - * object. - * decode_bodies - Whether to decode the bodies - * of the parts. (Transfer encoding) - * decode_headers - Whether to decode headers - * input - If called statically, this will be treated - * as the input - * @return object Decoded results - * @access public - */ - function decode($params = null) - { - // determine if this method has been called statically - $isStatic = empty($this) || !is_a($this, __CLASS__); - - // Have we been called statically? - // If so, create an object and pass details to that. - if ($isStatic AND isset($params['input'])) { - - $obj = new Mail_mimeDecode($params['input']); - $structure = $obj->decode($params); - - // Called statically but no input - } elseif ($isStatic) { - return PEAR::raiseError('Called statically and no input given'); - - // Called via an object - } else { - $this->_include_bodies = isset($params['include_bodies']) ? - $params['include_bodies'] : false; - $this->_decode_bodies = isset($params['decode_bodies']) ? - $params['decode_bodies'] : false; - $this->_decode_headers = isset($params['decode_headers']) ? - $params['decode_headers'] : false; - $this->_rfc822_bodies = isset($params['rfc_822bodies']) ? - $params['rfc_822bodies'] : false; - - $structure = $this->_decode($this->_header, $this->_body); - if ($structure === false) { - $structure = $this->raiseError($this->_error); - } - } - - return $structure; - } - - /** - * Performs the decoding. Decodes the body string passed to it - * If it finds certain content-types it will call itself in a - * recursive fashion - * - * @param string Header section - * @param string Body section - * @return object Results of decoding process - * @access private - */ - function _decode($headers, $body, $default_ctype = 'text/plain') - { - $return = new stdClass; - $return->headers = array(); - $headers = $this->_parseHeaders($headers); - - foreach ($headers as $value) { - $value['value'] = $this->_decode_headers ? $this->_decodeHeader($value['value']) : $value['value']; - if (isset($return->headers[strtolower($value['name'])]) AND !is_array($return->headers[strtolower($value['name'])])) { - $return->headers[strtolower($value['name'])] = array($return->headers[strtolower($value['name'])]); - $return->headers[strtolower($value['name'])][] = $value['value']; - - } elseif (isset($return->headers[strtolower($value['name'])])) { - $return->headers[strtolower($value['name'])][] = $value['value']; - - } else { - $return->headers[strtolower($value['name'])] = $value['value']; - } - } - - - foreach ($headers as $key => $value) { - $headers[$key]['name'] = strtolower($headers[$key]['name']); - switch ($headers[$key]['name']) { - - case 'content-type': - $content_type = $this->_parseHeaderValue($headers[$key]['value']); - - if (preg_match('/([0-9a-z+.-]+)\/([0-9a-z+.-]+)/i', $content_type['value'], $regs)) { - $return->ctype_primary = $regs[1]; - $return->ctype_secondary = $regs[2]; - } - - if (isset($content_type['other'])) { - foreach($content_type['other'] as $p_name => $p_value) { - $return->ctype_parameters[$p_name] = $p_value; - } - } - break; - - case 'content-disposition': - $content_disposition = $this->_parseHeaderValue($headers[$key]['value']); - $return->disposition = $content_disposition['value']; - if (isset($content_disposition['other'])) { - foreach($content_disposition['other'] as $p_name => $p_value) { - $return->d_parameters[$p_name] = $p_value; - } - } - break; - - case 'content-transfer-encoding': - $content_transfer_encoding = $this->_parseHeaderValue($headers[$key]['value']); - break; - } - } - - if (isset($content_type)) { - switch (strtolower($content_type['value'])) { - case 'text/plain': - $encoding = isset($content_transfer_encoding) ? $content_transfer_encoding['value'] : '7bit'; - $this->_include_bodies ? $return->body = ($this->_decode_bodies ? $this->_decodeBody($body, $encoding) : $body) : null; - break; - - case 'text/html': - $encoding = isset($content_transfer_encoding) ? $content_transfer_encoding['value'] : '7bit'; - $this->_include_bodies ? $return->body = ($this->_decode_bodies ? $this->_decodeBody($body, $encoding) : $body) : null; - break; - - case 'multipart/parallel': - case 'multipart/appledouble': // Appledouble mail - case 'multipart/report': // RFC1892 - case 'multipart/signed': // PGP - case 'multipart/digest': - case 'multipart/alternative': - case 'multipart/related': - case 'multipart/mixed': - case 'application/vnd.wap.multipart.related': - if(!isset($content_type['other']['boundary'])){ - $this->_error = 'No boundary found for ' . $content_type['value'] . ' part'; - return false; - } - - $default_ctype = (strtolower($content_type['value']) === 'multipart/digest') ? 'message/rfc822' : 'text/plain'; - - $parts = $this->_boundarySplit($body, $content_type['other']['boundary']); - for ($i = 0; $i < count($parts); $i++) { - list($part_header, $part_body) = $this->_splitBodyHeader($parts[$i]); - $part = $this->_decode($part_header, $part_body, $default_ctype); - if($part === false) - $part = $this->raiseError($this->_error); - $return->parts[] = $part; - } - break; - - case 'message/rfc822': - if ($this->_rfc822_bodies) { - $encoding = isset($content_transfer_encoding) ? $content_transfer_encoding['value'] : '7bit'; - $return->body = ($this->_decode_bodies ? $this->_decodeBody($body, $encoding) : $body); - } - $obj = new Mail_mimeDecode($body); - $return->parts[] = $obj->decode(array('include_bodies' => $this->_include_bodies, - 'decode_bodies' => $this->_decode_bodies, - 'decode_headers' => $this->_decode_headers)); - unset($obj); - break; - - default: - if(!isset($content_transfer_encoding['value'])) - $content_transfer_encoding['value'] = '7bit'; - $this->_include_bodies ? $return->body = ($this->_decode_bodies ? $this->_decodeBody($body, $content_transfer_encoding['value']) : $body) : null; - break; - } - - } else { - $ctype = explode('/', $default_ctype); - $return->ctype_primary = $ctype[0]; - $return->ctype_secondary = $ctype[1]; - $this->_include_bodies ? $return->body = ($this->_decode_bodies ? $this->_decodeBody($body) : $body) : null; - } - - return $return; - } - - /** - * Given the output of the above function, this will return an - * array of references to the parts, indexed by mime number. - * - * @param object $structure The structure to go through - * @param string $mime_number Internal use only. - * @return array Mime numbers - */ - function &getMimeNumbers(&$structure, $no_refs = false, $mime_number = '', $prepend = '') - { - $return = array(); - if (!empty($structure->parts)) { - if ($mime_number != '') { - $structure->mime_id = $prepend . $mime_number; - $return[$prepend . $mime_number] = &$structure; - } - for ($i = 0; $i < count($structure->parts); $i++) { - - - if (!empty($structure->headers['content-type']) AND substr(strtolower($structure->headers['content-type']), 0, 8) == 'message/') { - $prepend = $prepend . $mime_number . '.'; - $_mime_number = ''; - } else { - $_mime_number = ($mime_number == '' ? $i + 1 : sprintf('%s.%s', $mime_number, $i + 1)); - } - - $arr = &Mail_mimeDecode::getMimeNumbers($structure->parts[$i], $no_refs, $_mime_number, $prepend); - foreach ($arr as $key => $val) { - $no_refs ? $return[$key] = '' : $return[$key] = &$arr[$key]; - } - } - } else { - if ($mime_number == '') { - $mime_number = '1'; - } - $structure->mime_id = $prepend . $mime_number; - $no_refs ? $return[$prepend . $mime_number] = '' : $return[$prepend . $mime_number] = &$structure; - } - - return $return; - } - - /** - * Given a string containing a header and body - * section, this function will split them (at the first - * blank line) and return them. - * - * @param string Input to split apart - * @return array Contains header and body section - * @access private - */ - function _splitBodyHeader($input) - { - if (preg_match("/^(.*?)\r?\n\r?\n(.*)/s", $input, $match)) { - return array($match[1], $match[2]); - } - // bug #17325 - empty bodies are allowed. - we just check that at least one line - // of headers exist.. - if (count(explode("\n",$input))) { - return array($input, ''); - } - $this->_error = 'Could not split header and body'; - return false; - } - - /** - * Parse headers given in $input and return - * as assoc array. - * - * @param string Headers to parse - * @return array Contains parsed headers - * @access private - */ - function _parseHeaders($input) - { - - if ($input !== '') { - // Unfold the input - $input = preg_replace("/\r?\n/", "\r\n", $input); - //#7065 - wrapping.. with encoded stuff.. - probably not needed, - // wrapping space should only get removed if the trailing item on previous line is a - // encoded character - $input = preg_replace("/=\r\n(\t| )+/", '=', $input); - $input = preg_replace("/\r\n(\t| )+/", ' ', $input); - - $headers = explode("\r\n", trim($input)); - - foreach ($headers as $value) { - $hdr_name = substr($value, 0, $pos = strpos($value, ':')); - $hdr_value = substr($value, $pos+1); - if($hdr_value[0] == ' ') - $hdr_value = substr($hdr_value, 1); - - $return[] = array( - 'name' => $hdr_name, - 'value' => $hdr_value - ); - } - } else { - $return = array(); - } - - return $return; - } - - /** - * Function to parse a header value, - * extract first part, and any secondary - * parts (after ;) This function is not as - * robust as it could be. Eg. header comments - * in the wrong place will probably break it. - * - * @param string Header value to parse - * @return array Contains parsed result - * @access private - */ - function _parseHeaderValue($input) - { - - if (($pos = strpos($input, ';')) === false) { - $input = $this->_decode_headers ? $this->_decodeHeader($input) : $input; - $return['value'] = trim($input); - return $return; - } - - - - $value = substr($input, 0, $pos); - $value = $this->_decode_headers ? $this->_decodeHeader($value) : $value; - $return['value'] = trim($value); - $input = trim(substr($input, $pos+1)); - - if (!strlen($input) > 0) { - return $return; - } - // at this point input contains xxxx=".....";zzzz="...." - // since we are dealing with quoted strings, we need to handle this properly.. - $i = 0; - $l = strlen($input); - $key = ''; - $val = false; // our string - including quotes.. - $q = false; // in quote.. - $lq = ''; // last quote.. - - while ($i < $l) { - - $c = $input[$i]; - //var_dump(array('i'=>$i,'c'=>$c,'q'=>$q, 'lq'=>$lq, 'key'=>$key, 'val' =>$val)); - - $escaped = false; - if ($c == '\\') { - $i++; - if ($i == $l-1) { // end of string. - break; - } - $escaped = true; - $c = $input[$i]; - } - - - // state - in key.. - if ($val === false) { - if (!$escaped && $c == '=') { - $val = ''; - $key = trim($key); - $i++; - continue; - } - if (!$escaped && $c == ';') { - if ($key) { // a key without a value.. - $key= trim($key); - $return['other'][$key] = ''; - $return['other'][strtolower($key)] = ''; - } - $key = ''; - } - $key .= $c; - $i++; - continue; - } - - // state - in value.. (as $val is set..) - - if ($q === false) { - // not in quote yet. - if ((!strlen($val) || $lq !== false) && $c == ' ' || $c == "\t") { - $i++; - continue; // skip leading spaces after '=' or after '"' - } - if (!$escaped && ($c == '"' || $c == "'")) { - // start quoted area.. - $q = $c; - // in theory should not happen raw text in value part.. - // but we will handle it as a merged part of the string.. - $val = !strlen(trim($val)) ? '' : trim($val); - $i++; - continue; - } - // got end.... - if (!$escaped && $c == ';') { - - $val = trim($val); - $added = false; - if (preg_match('/\*[0-9]+$/', $key)) { - // this is the extended aaa*0=...;aaa*1=.... code - // it assumes the pieces arrive in order, and are valid... - $key = preg_replace('/\*[0-9]+$/', '', $key); - if (isset($return['other'][$key])) { - $return['other'][$key] .= $val; - if (strtolower($key) != $key) { - $return['other'][strtolower($key)] .= $val; - } - $added = true; - } - // continue and use standard setters.. - } - if (!$added) { - $return['other'][$key] = $val; - $return['other'][strtolower($key)] = $val; - } - $val = false; - $key = ''; - $lq = false; - $i++; - continue; - } - - $val .= $c; - $i++; - continue; - } - - // state - in quote.. - if (!$escaped && $c == $q) { // potential exit state.. - - // end of quoted string.. - $lq = $q; - $q = false; - $i++; - continue; - } - - // normal char inside of quoted string.. - $val.= $c; - $i++; - } - - // do we have anything left.. - if (strlen(trim($key)) || $val !== false) { - - $val = trim($val); - $added = false; - if ($val !== false && preg_match('/\*[0-9]+$/', $key)) { - // no dupes due to our crazy regexp. - $key = preg_replace('/\*[0-9]+$/', '', $key); - if (isset($return['other'][$key])) { - $return['other'][$key] .= $val; - if (strtolower($key) != $key) { - $return['other'][strtolower($key)] .= $val; - } - $added = true; - } - // continue and use standard setters.. - } - if (!$added) { - $return['other'][$key] = $val; - $return['other'][strtolower($key)] = $val; - } - } - // decode values. - foreach($return['other'] as $key =>$val) { - $return['other'][$key] = $this->_decode_headers ? $this->_decodeHeader($val) : $val; - } - //print_r($return); - return $return; - } - - /** - * This function splits the input based - * on the given boundary - * - * @param string Input to parse - * @return array Contains array of resulting mime parts - * @access private - */ - function _boundarySplit($input, $boundary) - { - $parts = array(); - - $bs_possible = substr($boundary, 2, -2); - $bs_check = '\"' . $bs_possible . '\"'; - - if ($boundary == $bs_check) { - $boundary = $bs_possible; - } - $tmp = preg_split("/--".preg_quote($boundary, '/')."((?=\s)|--)/", $input); - - $len = count($tmp) -1; - for ($i = 1; $i < $len; $i++) { - if (strlen(trim($tmp[$i]))) { - $parts[] = $tmp[$i]; - } - } - - // add the last part on if it does not end with the 'closing indicator' - if (!empty($tmp[$len]) && strlen(trim($tmp[$len])) && $tmp[$len][0] != '-') { - $parts[] = $tmp[$len]; - } - return $parts; - } - - /** - * Given a header, this function will decode it - * according to RFC2047. Probably not *exactly* - * conformant, but it does pass all the given - * examples (in RFC2047). - * - * @param string Input header value to decode - * @return string Decoded header value - * @access private - */ - function _decodeHeader($input) - { - // Remove white space between encoded-words - $input = preg_replace('/(=\?[^?]+\?(q|b)\?[^?]*\?=)(\s)+=\?/i', '\1=?', $input); - - // For each encoded-word... - while (preg_match('/(=\?([^?]+)\?(q|b)\?([^?]*)\?=)/i', $input, $matches)) { - - $encoded = $matches[1]; - $charset = $matches[2]; - $encoding = $matches[3]; - $text = $matches[4]; - - switch (strtolower($encoding)) { - case 'b': - $text = base64_decode($text); - break; - - case 'q': - $text = str_replace('_', ' ', $text); - preg_match_all('/=([a-f0-9]{2})/i', $text, $matches); - foreach($matches[1] as $value) - $text = str_replace('='.$value, chr(hexdec($value)), $text); - break; - } - - $input = str_replace($encoded, $text, $input); - } - - return $input; - } - - /** - * Given a body string and an encoding type, - * this function will decode and return it. - * - * @param string Input body to decode - * @param string Encoding type to use. - * @return string Decoded body - * @access private - */ - function _decodeBody($input, $encoding = '7bit') - { - switch (strtolower($encoding)) { - case '7bit': - return $input; - break; - - case 'quoted-printable': - return $this->_quotedPrintableDecode($input); - break; - - case 'base64': - return base64_decode($input); - break; - - default: - return $input; - } - } - - /** - * Given a quoted-printable string, this - * function will decode and return it. - * - * @param string Input body to decode - * @return string Decoded body - * @access private - */ - function _quotedPrintableDecode($input) - { - // Remove soft line breaks - $input = preg_replace("/=\r?\n/", '', $input); - - // Replace encoded characters - $input = preg_replace('/=([a-f0-9]{2})/ie', "chr(hexdec('\\1'))", $input); - - return $input; - } - - /** - * Checks the input for uuencoded files and returns - * an array of them. Can be called statically, eg: - * - * $files =& Mail_mimeDecode::uudecode($some_text); - * - * It will check for the begin 666 ... end syntax - * however and won't just blindly decode whatever you - * pass it. - * - * @param string Input body to look for attahcments in - * @return array Decoded bodies, filenames and permissions - * @access public - * @author Unknown - */ - function &uudecode($input) - { - // Find all uuencoded sections - preg_match_all("/begin ([0-7]{3}) (.+)\r?\n(.+)\r?\nend/Us", $input, $matches); - - for ($j = 0; $j < count($matches[3]); $j++) { - - $str = $matches[3][$j]; - $filename = $matches[2][$j]; - $fileperm = $matches[1][$j]; - - $file = ''; - $str = preg_split("/\r?\n/", trim($str)); - $strlen = count($str); - - for ($i = 0; $i < $strlen; $i++) { - $pos = 1; - $d = 0; - $len=(int)(((ord(substr($str[$i],0,1)) -32) - ' ') & 077); - - while (($d + 3 <= $len) AND ($pos + 4 <= strlen($str[$i]))) { - $c0 = (ord(substr($str[$i],$pos,1)) ^ 0x20); - $c1 = (ord(substr($str[$i],$pos+1,1)) ^ 0x20); - $c2 = (ord(substr($str[$i],$pos+2,1)) ^ 0x20); - $c3 = (ord(substr($str[$i],$pos+3,1)) ^ 0x20); - $file .= chr(((($c0 - ' ') & 077) << 2) | ((($c1 - ' ') & 077) >> 4)); - - $file .= chr(((($c1 - ' ') & 077) << 4) | ((($c2 - ' ') & 077) >> 2)); - - $file .= chr(((($c2 - ' ') & 077) << 6) | (($c3 - ' ') & 077)); - - $pos += 4; - $d += 3; - } - - if (($d + 2 <= $len) && ($pos + 3 <= strlen($str[$i]))) { - $c0 = (ord(substr($str[$i],$pos,1)) ^ 0x20); - $c1 = (ord(substr($str[$i],$pos+1,1)) ^ 0x20); - $c2 = (ord(substr($str[$i],$pos+2,1)) ^ 0x20); - $file .= chr(((($c0 - ' ') & 077) << 2) | ((($c1 - ' ') & 077) >> 4)); - - $file .= chr(((($c1 - ' ') & 077) << 4) | ((($c2 - ' ') & 077) >> 2)); - - $pos += 3; - $d += 2; - } - - if (($d + 1 <= $len) && ($pos + 2 <= strlen($str[$i]))) { - $c0 = (ord(substr($str[$i],$pos,1)) ^ 0x20); - $c1 = (ord(substr($str[$i],$pos+1,1)) ^ 0x20); - $file .= chr(((($c0 - ' ') & 077) << 2) | ((($c1 - ' ') & 077) >> 4)); - - } - } - $files[] = array('filename' => $filename, 'fileperm' => $fileperm, 'filedata' => $file); - } - - return $files; - } - - /** - * getSendArray() returns the arguments required for Mail::send() - * used to build the arguments for a mail::send() call - * - * Usage: - * $mailtext = Full email (for example generated by a template) - * $decoder = new Mail_mimeDecode($mailtext); - * $parts = $decoder->getSendArray(); - * if (!PEAR::isError($parts) { - * list($recipents,$headers,$body) = $parts; - * $mail = Mail::factory('smtp'); - * $mail->send($recipents,$headers,$body); - * } else { - * echo $parts->message; - * } - * @return mixed array of recipeint, headers,body or Pear_Error - * @access public - * @author Alan Knowles <alan@akbkhome.com> - */ - function getSendArray() - { - // prevent warning if this is not set - $this->_decode_headers = FALSE; - $headerlist =$this->_parseHeaders($this->_header); - $to = ""; - if (!$headerlist) { - return $this->raiseError("Message did not contain headers"); - } - foreach($headerlist as $item) { - $header[$item['name']] = $item['value']; - switch (strtolower($item['name'])) { - case "to": - case "cc": - case "bcc": - $to .= ",".$item['value']; - default: - break; - } - } - if ($to == "") { - return $this->raiseError("Message did not contain any recipents"); - } - $to = substr($to,1); - return array($to,$header,$this->_body); - } - - /** - * Returns a xml copy of the output of - * Mail_mimeDecode::decode. Pass the output in as the - * argument. This function can be called statically. Eg: - * - * $output = $obj->decode(); - * $xml = Mail_mimeDecode::getXML($output); - * - * The DTD used for this should have been in the package. Or - * alternatively you can get it from cvs, or here: - * http://www.phpguru.org/xmail/xmail.dtd. - * - * @param object Input to convert to xml. This should be the - * output of the Mail_mimeDecode::decode function - * @return string XML version of input - * @access public - */ - function getXML($input) - { - $crlf = "\r\n"; - $output = '<?xml version=\'1.0\'?>' . $crlf . - '<!DOCTYPE email SYSTEM "http://www.phpguru.org/xmail/xmail.dtd">' . $crlf . - '<email>' . $crlf . - Mail_mimeDecode::_getXML($input) . - '</email>'; - - return $output; - } - - /** - * Function that does the actual conversion to xml. Does a single - * mimepart at a time. - * - * @param object Input to convert to xml. This is a mimepart object. - * It may or may not contain subparts. - * @param integer Number of tabs to indent - * @return string XML version of input - * @access private - */ - function _getXML($input, $indent = 1) - { - $htab = "\t"; - $crlf = "\r\n"; - $output = ''; - $headers = @(array)$input->headers; - - foreach ($headers as $hdr_name => $hdr_value) { - - // Multiple headers with this name - if (is_array($headers[$hdr_name])) { - for ($i = 0; $i < count($hdr_value); $i++) { - $output .= Mail_mimeDecode::_getXML_helper($hdr_name, $hdr_value[$i], $indent); - } - - // Only one header of this sort - } else { - $output .= Mail_mimeDecode::_getXML_helper($hdr_name, $hdr_value, $indent); - } - } - - if (!empty($input->parts)) { - for ($i = 0; $i < count($input->parts); $i++) { - $output .= $crlf . str_repeat($htab, $indent) . '<mimepart>' . $crlf . - Mail_mimeDecode::_getXML($input->parts[$i], $indent+1) . - str_repeat($htab, $indent) . '</mimepart>' . $crlf; - } - } elseif (isset($input->body)) { - $output .= $crlf . str_repeat($htab, $indent) . '<body><![CDATA[' . - $input->body . ']]></body>' . $crlf; - } - - return $output; - } - - /** - * Helper function to _getXML(). Returns xml of a header. - * - * @param string Name of header - * @param string Value of header - * @param integer Number of tabs to indent - * @return string XML version of input - * @access private - */ - function _getXML_helper($hdr_name, $hdr_value, $indent) - { - $htab = "\t"; - $crlf = "\r\n"; - $return = ''; - - $new_hdr_value = ($hdr_name != 'received') ? Mail_mimeDecode::_parseHeaderValue($hdr_value) : array('value' => $hdr_value); - $new_hdr_name = str_replace(' ', '-', ucwords(str_replace('-', ' ', $hdr_name))); - - // Sort out any parameters - if (!empty($new_hdr_value['other'])) { - foreach ($new_hdr_value['other'] as $paramname => $paramvalue) { - $params[] = str_repeat($htab, $indent) . $htab . '<parameter>' . $crlf . - str_repeat($htab, $indent) . $htab . $htab . '<paramname>' . htmlspecialchars($paramname) . '</paramname>' . $crlf . - str_repeat($htab, $indent) . $htab . $htab . '<paramvalue>' . htmlspecialchars($paramvalue) . '</paramvalue>' . $crlf . - str_repeat($htab, $indent) . $htab . '</parameter>' . $crlf; - } - - $params = implode('', $params); - } else { - $params = ''; - } - - $return = str_repeat($htab, $indent) . '<header>' . $crlf . - str_repeat($htab, $indent) . $htab . '<headername>' . htmlspecialchars($new_hdr_name) . '</headername>' . $crlf . - str_repeat($htab, $indent) . $htab . '<headervalue>' . htmlspecialchars($new_hdr_value['value']) . '</headervalue>' . $crlf . - $params . - str_repeat($htab, $indent) . '</header>' . $crlf; - - return $return; - } - -} // End of class diff --git a/program/lib/Mail/mimePart.php b/program/lib/Mail/mimePart.php deleted file mode 100644 index 93e891bc6..000000000 --- a/program/lib/Mail/mimePart.php +++ /dev/null @@ -1,1260 +0,0 @@ -<?php -/** - * The Mail_mimePart class is used to create MIME E-mail messages - * - * This class enables you to manipulate and build a mime email - * from the ground up. The Mail_Mime class is a userfriendly api - * to this class for people who aren't interested in the internals - * of mime mail. - * This class however allows full control over the email. - * - * Compatible with PHP versions 4 and 5 - * - * LICENSE: This LICENSE is in the BSD license style. - * Copyright (c) 2002-2003, Richard Heyes <richard@phpguru.org> - * Copyright (c) 2003-2006, PEAR <pear-group@php.net> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - Neither the name of the authors, nor the names of its contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGE. - * - * @category Mail - * @package Mail_Mime - * @author Richard Heyes <richard@phpguru.org> - * @author Cipriano Groenendal <cipri@php.net> - * @author Sean Coates <sean@php.net> - * @author Aleksander Machniak <alec@php.net> - * @copyright 2003-2006 PEAR <pear-group@php.net> - * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version CVS: $Id$ - * @link http://pear.php.net/package/Mail_mime - */ - - -/** - * The Mail_mimePart class is used to create MIME E-mail messages - * - * This class enables you to manipulate and build a mime email - * from the ground up. The Mail_Mime class is a userfriendly api - * to this class for people who aren't interested in the internals - * of mime mail. - * This class however allows full control over the email. - * - * @category Mail - * @package Mail_Mime - * @author Richard Heyes <richard@phpguru.org> - * @author Cipriano Groenendal <cipri@php.net> - * @author Sean Coates <sean@php.net> - * @author Aleksander Machniak <alec@php.net> - * @copyright 2003-2006 PEAR <pear-group@php.net> - * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @version Release: @package_version@ - * @link http://pear.php.net/package/Mail_mime - */ -class Mail_mimePart -{ - /** - * The encoding type of this part - * - * @var string - * @access private - */ - var $_encoding; - - /** - * An array of subparts - * - * @var array - * @access private - */ - var $_subparts; - - /** - * The output of this part after being built - * - * @var string - * @access private - */ - var $_encoded; - - /** - * Headers for this part - * - * @var array - * @access private - */ - var $_headers; - - /** - * The body of this part (not encoded) - * - * @var string - * @access private - */ - var $_body; - - /** - * The location of file with body of this part (not encoded) - * - * @var string - * @access private - */ - var $_body_file; - - /** - * The end-of-line sequence - * - * @var string - * @access private - */ - var $_eol = "\r\n"; - - - /** - * Constructor. - * - * Sets up the object. - * - * @param string $body The body of the mime part if any. - * @param array $params An associative array of optional parameters: - * content_type - The content type for this part eg multipart/mixed - * encoding - The encoding to use, 7bit, 8bit, - * base64, or quoted-printable - * charset - Content character set - * cid - Content ID to apply - * disposition - Content disposition, inline or attachment - * filename - Filename parameter for content disposition - * description - Content description - * name_encoding - Encoding of the attachment name (Content-Type) - * By default filenames are encoded using RFC2231 - * Here you can set RFC2047 encoding (quoted-printable - * or base64) instead - * filename_encoding - Encoding of the attachment filename (Content-Disposition) - * See 'name_encoding' - * headers_charset - Charset of the headers e.g. filename, description. - * If not set, 'charset' will be used - * eol - End of line sequence. Default: "\r\n" - * headers - Hash array with additional part headers. Array keys can be - * in form of <header_name>:<parameter_name> - * body_file - Location of file with part's body (instead of $body) - * - * @access public - */ - function Mail_mimePart($body = '', $params = array()) - { - if (!empty($params['eol'])) { - $this->_eol = $params['eol']; - } else if (defined('MAIL_MIMEPART_CRLF')) { // backward-copat. - $this->_eol = MAIL_MIMEPART_CRLF; - } - - // Additional part headers - if (!empty($params['headers']) && is_array($params['headers'])) { - $headers = $params['headers']; - } - - foreach ($params as $key => $value) { - switch ($key) { - case 'encoding': - $this->_encoding = $value; - $headers['Content-Transfer-Encoding'] = $value; - break; - - case 'cid': - $headers['Content-ID'] = '<' . $value . '>'; - break; - - case 'location': - $headers['Content-Location'] = $value; - break; - - case 'body_file': - $this->_body_file = $value; - break; - - // for backward compatibility - case 'dfilename': - $params['filename'] = $value; - break; - } - } - - // Default content-type - if (empty($params['content_type'])) { - $params['content_type'] = 'text/plain'; - } - - // Content-Type - $headers['Content-Type'] = $params['content_type']; - if (!empty($params['charset'])) { - $charset = "charset={$params['charset']}"; - // place charset parameter in the same line, if possible - if ((strlen($headers['Content-Type']) + strlen($charset) + 16) <= 76) { - $headers['Content-Type'] .= '; '; - } else { - $headers['Content-Type'] .= ';' . $this->_eol . ' '; - } - $headers['Content-Type'] .= $charset; - - // Default headers charset - if (!isset($params['headers_charset'])) { - $params['headers_charset'] = $params['charset']; - } - } - - // header values encoding parameters - $h_charset = !empty($params['headers_charset']) ? $params['headers_charset'] : 'US-ASCII'; - $h_language = !empty($params['language']) ? $params['language'] : null; - $h_encoding = !empty($params['name_encoding']) ? $params['name_encoding'] : null; - - - if (!empty($params['filename'])) { - $headers['Content-Type'] .= ';' . $this->_eol; - $headers['Content-Type'] .= $this->_buildHeaderParam( - 'name', $params['filename'], $h_charset, $h_language, $h_encoding - ); - } - - // Content-Disposition - if (!empty($params['disposition'])) { - $headers['Content-Disposition'] = $params['disposition']; - if (!empty($params['filename'])) { - $headers['Content-Disposition'] .= ';' . $this->_eol; - $headers['Content-Disposition'] .= $this->_buildHeaderParam( - 'filename', $params['filename'], $h_charset, $h_language, - !empty($params['filename_encoding']) ? $params['filename_encoding'] : null - ); - } - - // add attachment size - $size = $this->_body_file ? filesize($this->_body_file) : strlen($body); - if ($size) { - $headers['Content-Disposition'] .= ';' . $this->_eol . ' size=' . $size; - } - } - - if (!empty($params['description'])) { - $headers['Content-Description'] = $this->encodeHeader( - 'Content-Description', $params['description'], $h_charset, $h_encoding, - $this->_eol - ); - } - - // Search and add existing headers' parameters - foreach ($headers as $key => $value) { - $items = explode(':', $key); - if (count($items) == 2) { - $header = $items[0]; - $param = $items[1]; - if (isset($headers[$header])) { - $headers[$header] .= ';' . $this->_eol; - } - $headers[$header] .= $this->_buildHeaderParam( - $param, $value, $h_charset, $h_language, $h_encoding - ); - unset($headers[$key]); - } - } - - // Default encoding - if (!isset($this->_encoding)) { - $this->_encoding = '7bit'; - } - - // Assign stuff to member variables - $this->_encoded = array(); - $this->_headers = $headers; - $this->_body = $body; - } - - /** - * Encodes and returns the email. Also stores - * it in the encoded member variable - * - * @param string $boundary Pre-defined boundary string - * - * @return An associative array containing two elements, - * body and headers. The headers element is itself - * an indexed array. On error returns PEAR error object. - * @access public - */ - function encode($boundary=null) - { - $encoded =& $this->_encoded; - - if (count($this->_subparts)) { - $boundary = $boundary ? $boundary : '=_' . md5(rand() . microtime()); - $eol = $this->_eol; - - $this->_headers['Content-Type'] .= ";$eol boundary=\"$boundary\""; - - $encoded['body'] = ''; - - for ($i = 0; $i < count($this->_subparts); $i++) { - $encoded['body'] .= '--' . $boundary . $eol; - $tmp = $this->_subparts[$i]->encode(); - if ($this->_isError($tmp)) { - return $tmp; - } - foreach ($tmp['headers'] as $key => $value) { - $encoded['body'] .= $key . ': ' . $value . $eol; - } - $encoded['body'] .= $eol . $tmp['body'] . $eol; - } - - $encoded['body'] .= '--' . $boundary . '--' . $eol; - - } else if ($this->_body) { - $encoded['body'] = $this->_getEncodedData($this->_body, $this->_encoding); - } else if ($this->_body_file) { - // Temporarily reset magic_quotes_runtime for file reads and writes - if ($magic_quote_setting = get_magic_quotes_runtime()) { - @ini_set('magic_quotes_runtime', 0); - } - $body = $this->_getEncodedDataFromFile($this->_body_file, $this->_encoding); - if ($magic_quote_setting) { - @ini_set('magic_quotes_runtime', $magic_quote_setting); - } - - if ($this->_isError($body)) { - return $body; - } - $encoded['body'] = $body; - } else { - $encoded['body'] = ''; - } - - // Add headers to $encoded - $encoded['headers'] =& $this->_headers; - - return $encoded; - } - - /** - * Encodes and saves the email into file. File must exist. - * Data will be appended to the file. - * - * @param string $filename Output file location - * @param string $boundary Pre-defined boundary string - * @param boolean $skip_head True if you don't want to save headers - * - * @return array An associative array containing message headers - * or PEAR error object - * @access public - * @since 1.6.0 - */ - function encodeToFile($filename, $boundary=null, $skip_head=false) - { - if (file_exists($filename) && !is_writable($filename)) { - $err = $this->_raiseError('File is not writeable: ' . $filename); - return $err; - } - - if (!($fh = fopen($filename, 'ab'))) { - $err = $this->_raiseError('Unable to open file: ' . $filename); - return $err; - } - - // Temporarily reset magic_quotes_runtime for file reads and writes - if ($magic_quote_setting = get_magic_quotes_runtime()) { - @ini_set('magic_quotes_runtime', 0); - } - - $res = $this->_encodePartToFile($fh, $boundary, $skip_head); - - fclose($fh); - - if ($magic_quote_setting) { - @ini_set('magic_quotes_runtime', $magic_quote_setting); - } - - return $this->_isError($res) ? $res : $this->_headers; - } - - /** - * Encodes given email part into file - * - * @param string $fh Output file handle - * @param string $boundary Pre-defined boundary string - * @param boolean $skip_head True if you don't want to save headers - * - * @return array True on sucess or PEAR error object - * @access private - */ - function _encodePartToFile($fh, $boundary=null, $skip_head=false) - { - $eol = $this->_eol; - - if (count($this->_subparts)) { - $boundary = $boundary ? $boundary : '=_' . md5(rand() . microtime()); - $this->_headers['Content-Type'] .= ";$eol boundary=\"$boundary\""; - } - - if (!$skip_head) { - foreach ($this->_headers as $key => $value) { - fwrite($fh, $key . ': ' . $value . $eol); - } - $f_eol = $eol; - } else { - $f_eol = ''; - } - - if (count($this->_subparts)) { - for ($i = 0; $i < count($this->_subparts); $i++) { - fwrite($fh, $f_eol . '--' . $boundary . $eol); - $res = $this->_subparts[$i]->_encodePartToFile($fh); - if ($this->_isError($res)) { - return $res; - } - $f_eol = $eol; - } - - fwrite($fh, $eol . '--' . $boundary . '--' . $eol); - - } else if ($this->_body) { - fwrite($fh, $f_eol . $this->_getEncodedData($this->_body, $this->_encoding)); - } else if ($this->_body_file) { - fwrite($fh, $f_eol); - $res = $this->_getEncodedDataFromFile( - $this->_body_file, $this->_encoding, $fh - ); - if ($this->_isError($res)) { - return $res; - } - } - - return true; - } - - /** - * Adds a subpart to current mime part and returns - * a reference to it - * - * @param string $body The body of the subpart, if any. - * @param array $params The parameters for the subpart, same - * as the $params argument for constructor. - * - * @return Mail_mimePart A reference to the part you just added. In PHP4, it is - * crucial if using multipart/* in your subparts that - * you use =& in your script when calling this function, - * otherwise you will not be able to add further subparts. - * @access public - */ - function &addSubpart($body, $params) - { - $this->_subparts[] = $part = new Mail_mimePart($body, $params); - return $part; - } - - /** - * Returns encoded data based upon encoding passed to it - * - * @param string $data The data to encode. - * @param string $encoding The encoding type to use, 7bit, base64, - * or quoted-printable. - * - * @return string - * @access private - */ - function _getEncodedData($data, $encoding) - { - switch ($encoding) { - case 'quoted-printable': - return $this->_quotedPrintableEncode($data); - break; - - case 'base64': - return rtrim(chunk_split(base64_encode($data), 76, $this->_eol)); - break; - - case '8bit': - case '7bit': - default: - return $data; - } - } - - /** - * Returns encoded data based upon encoding passed to it - * - * @param string $filename Data file location - * @param string $encoding The encoding type to use, 7bit, base64, - * or quoted-printable. - * @param resource $fh Output file handle. If set, data will be - * stored into it instead of returning it - * - * @return string Encoded data or PEAR error object - * @access private - */ - function _getEncodedDataFromFile($filename, $encoding, $fh=null) - { - if (!is_readable($filename)) { - $err = $this->_raiseError('Unable to read file: ' . $filename); - return $err; - } - - if (!($fd = fopen($filename, 'rb'))) { - $err = $this->_raiseError('Could not open file: ' . $filename); - return $err; - } - - $data = ''; - - switch ($encoding) { - case 'quoted-printable': - while (!feof($fd)) { - $buffer = $this->_quotedPrintableEncode(fgets($fd)); - if ($fh) { - fwrite($fh, $buffer); - } else { - $data .= $buffer; - } - } - break; - - case 'base64': - while (!feof($fd)) { - // Should read in a multiple of 57 bytes so that - // the output is 76 bytes per line. Don't use big chunks - // because base64 encoding is memory expensive - $buffer = fread($fd, 57 * 9198); // ca. 0.5 MB - $buffer = base64_encode($buffer); - $buffer = chunk_split($buffer, 76, $this->_eol); - if (feof($fd)) { - $buffer = rtrim($buffer); - } - - if ($fh) { - fwrite($fh, $buffer); - } else { - $data .= $buffer; - } - } - break; - - case '8bit': - case '7bit': - default: - while (!feof($fd)) { - $buffer = fread($fd, 1048576); // 1 MB - if ($fh) { - fwrite($fh, $buffer); - } else { - $data .= $buffer; - } - } - } - - fclose($fd); - - if (!$fh) { - return $data; - } - } - - /** - * Encodes data to quoted-printable standard. - * - * @param string $input The data to encode - * @param int $line_max Optional max line length. Should - * not be more than 76 chars - * - * @return string Encoded data - * - * @access private - */ - function _quotedPrintableEncode($input , $line_max = 76) - { - $eol = $this->_eol; - /* - // imap_8bit() is extremely fast, but doesn't handle properly some characters - if (function_exists('imap_8bit') && $line_max == 76) { - $input = preg_replace('/\r?\n/', "\r\n", $input); - $input = imap_8bit($input); - if ($eol != "\r\n") { - $input = str_replace("\r\n", $eol, $input); - } - return $input; - } - */ - $lines = preg_split("/\r?\n/", $input); - $escape = '='; - $output = ''; - - while (list($idx, $line) = each($lines)) { - $newline = ''; - $i = 0; - - while (isset($line[$i])) { - $char = $line[$i]; - $dec = ord($char); - $i++; - - if (($dec == 32) && (!isset($line[$i]))) { - // convert space at eol only - $char = '=20'; - } elseif ($dec == 9 && isset($line[$i])) { - ; // Do nothing if a TAB is not on eol - } elseif (($dec == 61) || ($dec < 32) || ($dec > 126)) { - $char = $escape . sprintf('%02X', $dec); - } elseif (($dec == 46) && (($newline == '') - || ((strlen($newline) + strlen("=2E")) >= $line_max)) - ) { - // Bug #9722: convert full-stop at bol, - // some Windows servers need this, won't break anything (cipri) - // Bug #11731: full-stop at bol also needs to be encoded - // if this line would push us over the line_max limit. - $char = '=2E'; - } - - // Note, when changing this line, also change the ($dec == 46) - // check line, as it mimics this line due to Bug #11731 - // EOL is not counted - if ((strlen($newline) + strlen($char)) >= $line_max) { - // soft line break; " =\r\n" is okay - $output .= $newline . $escape . $eol; - $newline = ''; - } - $newline .= $char; - } // end of for - $output .= $newline . $eol; - unset($lines[$idx]); - } - // Don't want last crlf - $output = substr($output, 0, -1 * strlen($eol)); - return $output; - } - - /** - * Encodes the parameter of a header. - * - * @param string $name The name of the header-parameter - * @param string $value The value of the paramter - * @param string $charset The characterset of $value - * @param string $language The language used in $value - * @param string $encoding Parameter encoding. If not set, parameter value - * is encoded according to RFC2231 - * @param int $maxLength The maximum length of a line. Defauls to 75 - * - * @return string - * - * @access private - */ - function _buildHeaderParam($name, $value, $charset=null, $language=null, - $encoding=null, $maxLength=75 - ) { - // RFC 2045: - // value needs encoding if contains non-ASCII chars or is longer than 78 chars - if (!preg_match('#[^\x20-\x7E]#', $value)) { - $token_regexp = '#([^\x21\x23-\x27\x2A\x2B\x2D' - . '\x2E\x30-\x39\x41-\x5A\x5E-\x7E])#'; - if (!preg_match($token_regexp, $value)) { - // token - if (strlen($name) + strlen($value) + 3 <= $maxLength) { - return " {$name}={$value}"; - } - } else { - // quoted-string - $quoted = addcslashes($value, '\\"'); - if (strlen($name) + strlen($quoted) + 5 <= $maxLength) { - return " {$name}=\"{$quoted}\""; - } - } - } - - // RFC2047: use quoted-printable/base64 encoding - if ($encoding == 'quoted-printable' || $encoding == 'base64') { - return $this->_buildRFC2047Param($name, $value, $charset, $encoding); - } - - // RFC2231: - $encValue = preg_replace_callback( - '/([^\x21\x23\x24\x26\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7E])/', - array($this, '_encodeReplaceCallback'), $value - ); - $value = "$charset'$language'$encValue"; - - $header = " {$name}*={$value}"; - if (strlen($header) <= $maxLength) { - return $header; - } - - $preLength = strlen(" {$name}*0*="); - $maxLength = max(16, $maxLength - $preLength - 3); - $maxLengthReg = "|(.{0,$maxLength}[^\%][^\%])|"; - - $headers = array(); - $headCount = 0; - while ($value) { - $matches = array(); - $found = preg_match($maxLengthReg, $value, $matches); - if ($found) { - $headers[] = " {$name}*{$headCount}*={$matches[0]}"; - $value = substr($value, strlen($matches[0])); - } else { - $headers[] = " {$name}*{$headCount}*={$value}"; - $value = ''; - } - $headCount++; - } - - $headers = implode(';' . $this->_eol, $headers); - return $headers; - } - - /** - * Encodes header parameter as per RFC2047 if needed - * - * @param string $name The parameter name - * @param string $value The parameter value - * @param string $charset The parameter charset - * @param string $encoding Encoding type (quoted-printable or base64) - * @param int $maxLength Encoded parameter max length. Default: 76 - * - * @return string Parameter line - * @access private - */ - function _buildRFC2047Param($name, $value, $charset, - $encoding='quoted-printable', $maxLength=76 - ) { - // WARNING: RFC 2047 says: "An 'encoded-word' MUST NOT be used in - // parameter of a MIME Content-Type or Content-Disposition field", - // but... it's supported by many clients/servers - $quoted = ''; - - if ($encoding == 'base64') { - $value = base64_encode($value); - $prefix = '=?' . $charset . '?B?'; - $suffix = '?='; - - // 2 x SPACE, 2 x '"', '=', ';' - $add_len = strlen($prefix . $suffix) + strlen($name) + 6; - $len = $add_len + strlen($value); - - while ($len > $maxLength) { - // We can cut base64-encoded string every 4 characters - $real_len = floor(($maxLength - $add_len) / 4) * 4; - $_quote = substr($value, 0, $real_len); - $value = substr($value, $real_len); - - $quoted .= $prefix . $_quote . $suffix . $this->_eol . ' '; - $add_len = strlen($prefix . $suffix) + 4; // 2 x SPACE, '"', ';' - $len = strlen($value) + $add_len; - } - $quoted .= $prefix . $value . $suffix; - - } else { - // quoted-printable - $value = $this->encodeQP($value); - $prefix = '=?' . $charset . '?Q?'; - $suffix = '?='; - - // 2 x SPACE, 2 x '"', '=', ';' - $add_len = strlen($prefix . $suffix) + strlen($name) + 6; - $len = $add_len + strlen($value); - - while ($len > $maxLength) { - $length = $maxLength - $add_len; - // don't break any encoded letters - if (preg_match("/^(.{0,$length}[^\=][^\=])/", $value, $matches)) { - $_quote = $matches[1]; - } - - $quoted .= $prefix . $_quote . $suffix . $this->_eol . ' '; - $value = substr($value, strlen($_quote)); - $add_len = strlen($prefix . $suffix) + 4; // 2 x SPACE, '"', ';' - $len = strlen($value) + $add_len; - } - - $quoted .= $prefix . $value . $suffix; - } - - return " {$name}=\"{$quoted}\""; - } - - /** - * Encodes a header as per RFC2047 - * - * @param string $name The header name - * @param string $value The header data to encode - * @param string $charset Character set name - * @param string $encoding Encoding name (base64 or quoted-printable) - * @param string $eol End-of-line sequence. Default: "\r\n" - * - * @return string Encoded header data (without a name) - * @access public - * @since 1.6.1 - */ - function encodeHeader($name, $value, $charset='ISO-8859-1', - $encoding='quoted-printable', $eol="\r\n" - ) { - // Structured headers - $comma_headers = array( - 'from', 'to', 'cc', 'bcc', 'sender', 'reply-to', - 'resent-from', 'resent-to', 'resent-cc', 'resent-bcc', - 'resent-sender', 'resent-reply-to', - 'mail-reply-to', 'mail-followup-to', - 'return-receipt-to', 'disposition-notification-to', - ); - $other_headers = array( - 'references', 'in-reply-to', 'message-id', 'resent-message-id', - ); - - $name = strtolower($name); - - if (in_array($name, $comma_headers)) { - $separator = ','; - } else if (in_array($name, $other_headers)) { - $separator = ' '; - } - - if (!$charset) { - $charset = 'ISO-8859-1'; - } - - // Structured header (make sure addr-spec inside is not encoded) - if (!empty($separator)) { - // Simple e-mail address regexp - $email_regexp = '([^\s<]+|("[^\r\n"]+"))@\S+'; - - $parts = Mail_mimePart::_explodeQuotedString("[\t$separator]", $value); - $value = ''; - - foreach ($parts as $part) { - $part = preg_replace('/\r?\n[\s\t]*/', $eol . ' ', $part); - $part = trim($part); - - if (!$part) { - continue; - } - if ($value) { - $value .= $separator == ',' ? $separator . ' ' : ' '; - } else { - $value = $name . ': '; - } - - // let's find phrase (name) and/or addr-spec - if (preg_match('/^<' . $email_regexp . '>$/', $part)) { - $value .= $part; - } else if (preg_match('/^' . $email_regexp . '$/', $part)) { - // address without brackets and without name - $value .= $part; - } else if (preg_match('/<*' . $email_regexp . '>*$/', $part, $matches)) { - // address with name (handle name) - $address = $matches[0]; - $word = str_replace($address, '', $part); - $word = trim($word); - // check if phrase requires quoting - if ($word) { - // non-ASCII: require encoding - if (preg_match('#([^\s\x21-\x7E]){1}#', $word)) { - if ($word[0] == '"' && $word[strlen($word)-1] == '"') { - // de-quote quoted-string, encoding changes - // string to atom - $search = array("\\\"", "\\\\"); - $replace = array("\"", "\\"); - $word = str_replace($search, $replace, $word); - $word = substr($word, 1, -1); - } - // find length of last line - if (($pos = strrpos($value, $eol)) !== false) { - $last_len = strlen($value) - $pos; - } else { - $last_len = strlen($value); - } - $word = Mail_mimePart::encodeHeaderValue( - $word, $charset, $encoding, $last_len, $eol - ); - } else if (($word[0] != '"' || $word[strlen($word)-1] != '"') - && preg_match('/[\(\)\<\>\\\.\[\]@,;:"]/', $word) - ) { - // ASCII: quote string if needed - $word = '"'.addcslashes($word, '\\"').'"'; - } - } - $value .= $word.' '.$address; - } else { - // addr-spec not found, don't encode (?) - $value .= $part; - } - - // RFC2822 recommends 78 characters limit, use 76 from RFC2047 - $value = wordwrap($value, 76, $eol . ' '); - } - - // remove header name prefix (there could be EOL too) - $value = preg_replace( - '/^'.$name.':('.preg_quote($eol, '/').')* /', '', $value - ); - } else { - // Unstructured header - // non-ASCII: require encoding - if (preg_match('#([^\s\x21-\x7E]){1}#', $value)) { - if ($value[0] == '"' && $value[strlen($value)-1] == '"') { - // de-quote quoted-string, encoding changes - // string to atom - $search = array("\\\"", "\\\\"); - $replace = array("\"", "\\"); - $value = str_replace($search, $replace, $value); - $value = substr($value, 1, -1); - } - $value = Mail_mimePart::encodeHeaderValue( - $value, $charset, $encoding, strlen($name) + 2, $eol - ); - } else if (strlen($name.': '.$value) > 78) { - // ASCII: check if header line isn't too long and use folding - $value = preg_replace('/\r?\n[\s\t]*/', $eol . ' ', $value); - $tmp = wordwrap($name.': '.$value, 78, $eol . ' '); - $value = preg_replace('/^'.$name.':\s*/', '', $tmp); - // hard limit 998 (RFC2822) - $value = wordwrap($value, 998, $eol . ' ', true); - } - } - - return $value; - } - - /** - * Explode quoted string - * - * @param string $delimiter Delimiter expression string for preg_match() - * @param string $string Input string - * - * @return array String tokens array - * @access private - */ - function _explodeQuotedString($delimiter, $string) - { - $result = array(); - $strlen = strlen($string); - - for ($q=$p=$i=0; $i < $strlen; $i++) { - if ($string[$i] == "\"" - && (empty($string[$i-1]) || $string[$i-1] != "\\") - ) { - $q = $q ? false : true; - } else if (!$q && preg_match("/$delimiter/", $string[$i])) { - $result[] = substr($string, $p, $i - $p); - $p = $i + 1; - } - } - - $result[] = substr($string, $p); - return $result; - } - - /** - * Encodes a header value as per RFC2047 - * - * @param string $value The header data to encode - * @param string $charset Character set name - * @param string $encoding Encoding name (base64 or quoted-printable) - * @param int $prefix_len Prefix length. Default: 0 - * @param string $eol End-of-line sequence. Default: "\r\n" - * - * @return string Encoded header data - * @access public - * @since 1.6.1 - */ - function encodeHeaderValue($value, $charset, $encoding, $prefix_len=0, $eol="\r\n") - { - // #17311: Use multibyte aware method (requires mbstring extension) - if ($result = Mail_mimePart::encodeMB($value, $charset, $encoding, $prefix_len, $eol)) { - return $result; - } - - // Generate the header using the specified params and dynamicly - // determine the maximum length of such strings. - // 75 is the value specified in the RFC. - $encoding = $encoding == 'base64' ? 'B' : 'Q'; - $prefix = '=?' . $charset . '?' . $encoding .'?'; - $suffix = '?='; - $maxLength = 75 - strlen($prefix . $suffix); - $maxLength1stLine = $maxLength - $prefix_len; - - if ($encoding == 'B') { - // Base64 encode the entire string - $value = base64_encode($value); - - // We can cut base64 every 4 characters, so the real max - // we can get must be rounded down. - $maxLength = $maxLength - ($maxLength % 4); - $maxLength1stLine = $maxLength1stLine - ($maxLength1stLine % 4); - - $cutpoint = $maxLength1stLine; - $output = ''; - - while ($value) { - // Split translated string at every $maxLength - $part = substr($value, 0, $cutpoint); - $value = substr($value, $cutpoint); - $cutpoint = $maxLength; - // RFC 2047 specifies that any split header should - // be separated by a CRLF SPACE. - if ($output) { - $output .= $eol . ' '; - } - $output .= $prefix . $part . $suffix; - } - $value = $output; - } else { - // quoted-printable encoding has been selected - $value = Mail_mimePart::encodeQP($value); - - // This regexp will break QP-encoded text at every $maxLength - // but will not break any encoded letters. - $reg1st = "|(.{0,$maxLength1stLine}[^\=][^\=])|"; - $reg2nd = "|(.{0,$maxLength}[^\=][^\=])|"; - - if (strlen($value) > $maxLength1stLine) { - // Begin with the regexp for the first line. - $reg = $reg1st; - $output = ''; - while ($value) { - // Split translated string at every $maxLength - // But make sure not to break any translated chars. - $found = preg_match($reg, $value, $matches); - - // After this first line, we need to use a different - // regexp for the first line. - $reg = $reg2nd; - - // Save the found part and encapsulate it in the - // prefix & suffix. Then remove the part from the - // $value_out variable. - if ($found) { - $part = $matches[0]; - $len = strlen($matches[0]); - $value = substr($value, $len); - } else { - $part = $value; - $value = ''; - } - - // RFC 2047 specifies that any split header should - // be separated by a CRLF SPACE - if ($output) { - $output .= $eol . ' '; - } - $output .= $prefix . $part . $suffix; - } - $value = $output; - } else { - $value = $prefix . $value . $suffix; - } - } - - return $value; - } - - /** - * Encodes the given string using quoted-printable - * - * @param string $str String to encode - * - * @return string Encoded string - * @access public - * @since 1.6.0 - */ - function encodeQP($str) - { - // Bug #17226 RFC 2047 restricts some characters - // if the word is inside a phrase, permitted chars are only: - // ASCII letters, decimal digits, "!", "*", "+", "-", "/", "=", and "_" - - // "=", "_", "?" must be encoded - $regexp = '/([\x22-\x29\x2C\x2E\x3A-\x40\x5B-\x60\x7B-\x7E\x80-\xFF])/'; - $str = preg_replace_callback( - $regexp, array('Mail_mimePart', '_qpReplaceCallback'), $str - ); - - return str_replace(' ', '_', $str); - } - - /** - * Encodes the given string using base64 or quoted-printable. - * This method makes sure that encoded-word represents an integral - * number of characters as per RFC2047. - * - * @param string $str String to encode - * @param string $charset Character set name - * @param string $encoding Encoding name (base64 or quoted-printable) - * @param int $prefix_len Prefix length. Default: 0 - * @param string $eol End-of-line sequence. Default: "\r\n" - * - * @return string Encoded string - * @access public - * @since 1.8.0 - */ - function encodeMB($str, $charset, $encoding, $prefix_len=0, $eol="\r\n") - { - if (!function_exists('mb_substr') || !function_exists('mb_strlen')) { - return; - } - - $encoding = $encoding == 'base64' ? 'B' : 'Q'; - // 75 is the value specified in the RFC - $prefix = '=?' . $charset . '?'.$encoding.'?'; - $suffix = '?='; - $maxLength = 75 - strlen($prefix . $suffix); - - // A multi-octet character may not be split across adjacent encoded-words - // So, we'll loop over each character - // mb_stlen() with wrong charset will generate a warning here and return null - $length = mb_strlen($str, $charset); - $result = ''; - $line_length = $prefix_len; - - if ($encoding == 'B') { - // base64 - $start = 0; - $prev = ''; - - for ($i=1; $i<=$length; $i++) { - // See #17311 - $chunk = mb_substr($str, $start, $i-$start, $charset); - $chunk = base64_encode($chunk); - $chunk_len = strlen($chunk); - - if ($line_length + $chunk_len == $maxLength || $i == $length) { - if ($result) { - $result .= "\n"; - } - $result .= $chunk; - $line_length = 0; - $start = $i; - } else if ($line_length + $chunk_len > $maxLength) { - if ($result) { - $result .= "\n"; - } - if ($prev) { - $result .= $prev; - } - $line_length = 0; - $start = $i - 1; - } else { - $prev = $chunk; - } - } - } else { - // quoted-printable - // see encodeQP() - $regexp = '/([\x22-\x29\x2C\x2E\x3A-\x40\x5B-\x60\x7B-\x7E\x80-\xFF])/'; - - for ($i=0; $i<=$length; $i++) { - $char = mb_substr($str, $i, 1, $charset); - // RFC recommends underline (instead of =20) in place of the space - // that's one of the reasons why we're not using iconv_mime_encode() - if ($char == ' ') { - $char = '_'; - $char_len = 1; - } else { - $char = preg_replace_callback( - $regexp, array('Mail_mimePart', '_qpReplaceCallback'), $char - ); - $char_len = strlen($char); - } - - if ($line_length + $char_len > $maxLength) { - if ($result) { - $result .= "\n"; - } - $line_length = 0; - } - - $result .= $char; - $line_length += $char_len; - } - } - - if ($result) { - $result = $prefix - .str_replace("\n", $suffix.$eol.' '.$prefix, $result).$suffix; - } - - return $result; - } - - /** - * Callback function to replace extended characters (\x80-xFF) with their - * ASCII values (RFC2047: quoted-printable) - * - * @param array $matches Preg_replace's matches array - * - * @return string Encoded character string - * @access private - */ - function _qpReplaceCallback($matches) - { - return sprintf('=%02X', ord($matches[1])); - } - - /** - * Callback function to replace extended characters (\x80-xFF) with their - * ASCII values (RFC2231) - * - * @param array $matches Preg_replace's matches array - * - * @return string Encoded character string - * @access private - */ - function _encodeReplaceCallback($matches) - { - return sprintf('%%%02X', ord($matches[1])); - } - - /** - * PEAR::isError implementation - * - * @param mixed $data Object - * - * @return bool True if object is an instance of PEAR_Error - * @access private - */ - function _isError($data) - { - // PEAR::isError() is not PHP 5.4 compatible (see Bug #19473) - if (is_object($data) && is_a($data, 'PEAR_Error')) { - return true; - } - - return false; - } - - /** - * PEAR::raiseError implementation - * - * @param $message A text error message - * - * @return PEAR_Error Instance of PEAR_Error - * @access private - */ - function _raiseError($message) - { - // PEAR::raiseError() is not PHP 5.4 compatible - return new PEAR_Error($message); - } - -} // End of class diff --git a/program/lib/Net/IDNA2.php b/program/lib/Net/IDNA2.php deleted file mode 100644 index 8c366fb8a..000000000 --- a/program/lib/Net/IDNA2.php +++ /dev/null @@ -1,3402 +0,0 @@ -<?php - -// {{{ license - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */ -// -// +----------------------------------------------------------------------+ -// | This library is free software; you can redistribute it and/or modify | -// | it under the terms of the GNU Lesser General Public License as | -// | published by the Free Software Foundation; either version 2.1 of the | -// | License, or (at your option) any later version. | -// | | -// | This library is distributed in the hope that it will be useful, but | -// | WITHOUT ANY WARRANTY; without even the implied warranty of | -// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | -// | Lesser General Public License for more details. | -// | | -// | You should have received a copy of the GNU Lesser General Public | -// | License along with this library; if not, write to the Free Software | -// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | -// | USA. | -// +----------------------------------------------------------------------+ -// - -// }}} -require_once 'Net/IDNA2/Exception.php'; -require_once 'Net/IDNA2/Exception/Nameprep.php'; - -/** - * Encode/decode Internationalized Domain Names. - * - * The class allows to convert internationalized domain names - * (see RFC 3490 for details) as they can be used with various registries worldwide - * to be translated between their original (localized) form and their encoded form - * as it will be used in the DNS (Domain Name System). - * - * The class provides two public methods, encode() and decode(), which do exactly - * what you would expect them to do. You are allowed to use complete domain names, - * simple strings and complete email addresses as well. That means, that you might - * use any of the following notations: - * - * - www.n�rgler.com - * - xn--nrgler-wxa - * - xn--brse-5qa.xn--knrz-1ra.info - * - * Unicode input might be given as either UTF-8 string, UCS-4 string or UCS-4 - * array. Unicode output is available in the same formats. - * You can select your preferred format via {@link set_paramter()}. - * - * ACE input and output is always expected to be ASCII. - * - * @package Net - * @author Markus Nix <mnix@docuverse.de> - * @author Matthias Sommerfeld <mso@phlylabs.de> - * @author Stefan Neufeind <pear.neufeind@speedpartner.de> - * @version $Id: IDNA2.php 305344 2010-11-14 23:52:42Z neufeind $ - */ -class Net_IDNA2 -{ - // {{{ npdata - /** - * These Unicode codepoints are - * mapped to nothing, See RFC3454 for details - * - * @static - * @var array - * @access private - */ - private static $_np_map_nothing = array( - 0xAD, - 0x34F, - 0x1806, - 0x180B, - 0x180C, - 0x180D, - 0x200B, - 0x200C, - 0x200D, - 0x2060, - 0xFE00, - 0xFE01, - 0xFE02, - 0xFE03, - 0xFE04, - 0xFE05, - 0xFE06, - 0xFE07, - 0xFE08, - 0xFE09, - 0xFE0A, - 0xFE0B, - 0xFE0C, - 0xFE0D, - 0xFE0E, - 0xFE0F, - 0xFEFF - ); - - /** - * Prohibited codepints - * - * @static - * @var array - * @access private - */ - private static $_general_prohibited = array( - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 0xA, - 0xB, - 0xC, - 0xD, - 0xE, - 0xF, - 0x10, - 0x11, - 0x12, - 0x13, - 0x14, - 0x15, - 0x16, - 0x17, - 0x18, - 0x19, - 0x1A, - 0x1B, - 0x1C, - 0x1D, - 0x1E, - 0x1F, - 0x20, - 0x21, - 0x22, - 0x23, - 0x24, - 0x25, - 0x26, - 0x27, - 0x28, - 0x29, - 0x2A, - 0x2B, - 0x2C, - 0x2F, - 0x3B, - 0x3C, - 0x3D, - 0x3E, - 0x3F, - 0x40, - 0x5B, - 0x5C, - 0x5D, - 0x5E, - 0x5F, - 0x60, - 0x7B, - 0x7C, - 0x7D, - 0x7E, - 0x7F, - 0x3002 - ); - - /** - * Codepints prohibited by Nameprep - * @static - * @var array - * @access private - */ - private static $_np_prohibit = array( - 0xA0, - 0x1680, - 0x2000, - 0x2001, - 0x2002, - 0x2003, - 0x2004, - 0x2005, - 0x2006, - 0x2007, - 0x2008, - 0x2009, - 0x200A, - 0x200B, - 0x202F, - 0x205F, - 0x3000, - 0x6DD, - 0x70F, - 0x180E, - 0x200C, - 0x200D, - 0x2028, - 0x2029, - 0xFEFF, - 0xFFF9, - 0xFFFA, - 0xFFFB, - 0xFFFC, - 0xFFFE, - 0xFFFF, - 0x1FFFE, - 0x1FFFF, - 0x2FFFE, - 0x2FFFF, - 0x3FFFE, - 0x3FFFF, - 0x4FFFE, - 0x4FFFF, - 0x5FFFE, - 0x5FFFF, - 0x6FFFE, - 0x6FFFF, - 0x7FFFE, - 0x7FFFF, - 0x8FFFE, - 0x8FFFF, - 0x9FFFE, - 0x9FFFF, - 0xAFFFE, - 0xAFFFF, - 0xBFFFE, - 0xBFFFF, - 0xCFFFE, - 0xCFFFF, - 0xDFFFE, - 0xDFFFF, - 0xEFFFE, - 0xEFFFF, - 0xFFFFE, - 0xFFFFF, - 0x10FFFE, - 0x10FFFF, - 0xFFF9, - 0xFFFA, - 0xFFFB, - 0xFFFC, - 0xFFFD, - 0x340, - 0x341, - 0x200E, - 0x200F, - 0x202A, - 0x202B, - 0x202C, - 0x202D, - 0x202E, - 0x206A, - 0x206B, - 0x206C, - 0x206D, - 0x206E, - 0x206F, - 0xE0001 - ); - - /** - * Codepoint ranges prohibited by nameprep - * - * @static - * @var array - * @access private - */ - private static $_np_prohibit_ranges = array( - array(0x80, 0x9F ), - array(0x2060, 0x206F ), - array(0x1D173, 0x1D17A ), - array(0xE000, 0xF8FF ), - array(0xF0000, 0xFFFFD ), - array(0x100000, 0x10FFFD), - array(0xFDD0, 0xFDEF ), - array(0xD800, 0xDFFF ), - array(0x2FF0, 0x2FFB ), - array(0xE0020, 0xE007F ) - ); - - /** - * Replacement mappings (casemapping, replacement sequences, ...) - * - * @static - * @var array - * @access private - */ - private static $_np_replacemaps = array( - 0x41 => array(0x61), - 0x42 => array(0x62), - 0x43 => array(0x63), - 0x44 => array(0x64), - 0x45 => array(0x65), - 0x46 => array(0x66), - 0x47 => array(0x67), - 0x48 => array(0x68), - 0x49 => array(0x69), - 0x4A => array(0x6A), - 0x4B => array(0x6B), - 0x4C => array(0x6C), - 0x4D => array(0x6D), - 0x4E => array(0x6E), - 0x4F => array(0x6F), - 0x50 => array(0x70), - 0x51 => array(0x71), - 0x52 => array(0x72), - 0x53 => array(0x73), - 0x54 => array(0x74), - 0x55 => array(0x75), - 0x56 => array(0x76), - 0x57 => array(0x77), - 0x58 => array(0x78), - 0x59 => array(0x79), - 0x5A => array(0x7A), - 0xB5 => array(0x3BC), - 0xC0 => array(0xE0), - 0xC1 => array(0xE1), - 0xC2 => array(0xE2), - 0xC3 => array(0xE3), - 0xC4 => array(0xE4), - 0xC5 => array(0xE5), - 0xC6 => array(0xE6), - 0xC7 => array(0xE7), - 0xC8 => array(0xE8), - 0xC9 => array(0xE9), - 0xCA => array(0xEA), - 0xCB => array(0xEB), - 0xCC => array(0xEC), - 0xCD => array(0xED), - 0xCE => array(0xEE), - 0xCF => array(0xEF), - 0xD0 => array(0xF0), - 0xD1 => array(0xF1), - 0xD2 => array(0xF2), - 0xD3 => array(0xF3), - 0xD4 => array(0xF4), - 0xD5 => array(0xF5), - 0xD6 => array(0xF6), - 0xD8 => array(0xF8), - 0xD9 => array(0xF9), - 0xDA => array(0xFA), - 0xDB => array(0xFB), - 0xDC => array(0xFC), - 0xDD => array(0xFD), - 0xDE => array(0xFE), - 0xDF => array(0x73, 0x73), - 0x100 => array(0x101), - 0x102 => array(0x103), - 0x104 => array(0x105), - 0x106 => array(0x107), - 0x108 => array(0x109), - 0x10A => array(0x10B), - 0x10C => array(0x10D), - 0x10E => array(0x10F), - 0x110 => array(0x111), - 0x112 => array(0x113), - 0x114 => array(0x115), - 0x116 => array(0x117), - 0x118 => array(0x119), - 0x11A => array(0x11B), - 0x11C => array(0x11D), - 0x11E => array(0x11F), - 0x120 => array(0x121), - 0x122 => array(0x123), - 0x124 => array(0x125), - 0x126 => array(0x127), - 0x128 => array(0x129), - 0x12A => array(0x12B), - 0x12C => array(0x12D), - 0x12E => array(0x12F), - 0x130 => array(0x69, 0x307), - 0x132 => array(0x133), - 0x134 => array(0x135), - 0x136 => array(0x137), - 0x139 => array(0x13A), - 0x13B => array(0x13C), - 0x13D => array(0x13E), - 0x13F => array(0x140), - 0x141 => array(0x142), - 0x143 => array(0x144), - 0x145 => array(0x146), - 0x147 => array(0x148), - 0x149 => array(0x2BC, 0x6E), - 0x14A => array(0x14B), - 0x14C => array(0x14D), - 0x14E => array(0x14F), - 0x150 => array(0x151), - 0x152 => array(0x153), - 0x154 => array(0x155), - 0x156 => array(0x157), - 0x158 => array(0x159), - 0x15A => array(0x15B), - 0x15C => array(0x15D), - 0x15E => array(0x15F), - 0x160 => array(0x161), - 0x162 => array(0x163), - 0x164 => array(0x165), - 0x166 => array(0x167), - 0x168 => array(0x169), - 0x16A => array(0x16B), - 0x16C => array(0x16D), - 0x16E => array(0x16F), - 0x170 => array(0x171), - 0x172 => array(0x173), - 0x174 => array(0x175), - 0x176 => array(0x177), - 0x178 => array(0xFF), - 0x179 => array(0x17A), - 0x17B => array(0x17C), - 0x17D => array(0x17E), - 0x17F => array(0x73), - 0x181 => array(0x253), - 0x182 => array(0x183), - 0x184 => array(0x185), - 0x186 => array(0x254), - 0x187 => array(0x188), - 0x189 => array(0x256), - 0x18A => array(0x257), - 0x18B => array(0x18C), - 0x18E => array(0x1DD), - 0x18F => array(0x259), - 0x190 => array(0x25B), - 0x191 => array(0x192), - 0x193 => array(0x260), - 0x194 => array(0x263), - 0x196 => array(0x269), - 0x197 => array(0x268), - 0x198 => array(0x199), - 0x19C => array(0x26F), - 0x19D => array(0x272), - 0x19F => array(0x275), - 0x1A0 => array(0x1A1), - 0x1A2 => array(0x1A3), - 0x1A4 => array(0x1A5), - 0x1A6 => array(0x280), - 0x1A7 => array(0x1A8), - 0x1A9 => array(0x283), - 0x1AC => array(0x1AD), - 0x1AE => array(0x288), - 0x1AF => array(0x1B0), - 0x1B1 => array(0x28A), - 0x1B2 => array(0x28B), - 0x1B3 => array(0x1B4), - 0x1B5 => array(0x1B6), - 0x1B7 => array(0x292), - 0x1B8 => array(0x1B9), - 0x1BC => array(0x1BD), - 0x1C4 => array(0x1C6), - 0x1C5 => array(0x1C6), - 0x1C7 => array(0x1C9), - 0x1C8 => array(0x1C9), - 0x1CA => array(0x1CC), - 0x1CB => array(0x1CC), - 0x1CD => array(0x1CE), - 0x1CF => array(0x1D0), - 0x1D1 => array(0x1D2), - 0x1D3 => array(0x1D4), - 0x1D5 => array(0x1D6), - 0x1D7 => array(0x1D8), - 0x1D9 => array(0x1DA), - 0x1DB => array(0x1DC), - 0x1DE => array(0x1DF), - 0x1E0 => array(0x1E1), - 0x1E2 => array(0x1E3), - 0x1E4 => array(0x1E5), - 0x1E6 => array(0x1E7), - 0x1E8 => array(0x1E9), - 0x1EA => array(0x1EB), - 0x1EC => array(0x1ED), - 0x1EE => array(0x1EF), - 0x1F0 => array(0x6A, 0x30C), - 0x1F1 => array(0x1F3), - 0x1F2 => array(0x1F3), - 0x1F4 => array(0x1F5), - 0x1F6 => array(0x195), - 0x1F7 => array(0x1BF), - 0x1F8 => array(0x1F9), - 0x1FA => array(0x1FB), - 0x1FC => array(0x1FD), - 0x1FE => array(0x1FF), - 0x200 => array(0x201), - 0x202 => array(0x203), - 0x204 => array(0x205), - 0x206 => array(0x207), - 0x208 => array(0x209), - 0x20A => array(0x20B), - 0x20C => array(0x20D), - 0x20E => array(0x20F), - 0x210 => array(0x211), - 0x212 => array(0x213), - 0x214 => array(0x215), - 0x216 => array(0x217), - 0x218 => array(0x219), - 0x21A => array(0x21B), - 0x21C => array(0x21D), - 0x21E => array(0x21F), - 0x220 => array(0x19E), - 0x222 => array(0x223), - 0x224 => array(0x225), - 0x226 => array(0x227), - 0x228 => array(0x229), - 0x22A => array(0x22B), - 0x22C => array(0x22D), - 0x22E => array(0x22F), - 0x230 => array(0x231), - 0x232 => array(0x233), - 0x345 => array(0x3B9), - 0x37A => array(0x20, 0x3B9), - 0x386 => array(0x3AC), - 0x388 => array(0x3AD), - 0x389 => array(0x3AE), - 0x38A => array(0x3AF), - 0x38C => array(0x3CC), - 0x38E => array(0x3CD), - 0x38F => array(0x3CE), - 0x390 => array(0x3B9, 0x308, 0x301), - 0x391 => array(0x3B1), - 0x392 => array(0x3B2), - 0x393 => array(0x3B3), - 0x394 => array(0x3B4), - 0x395 => array(0x3B5), - 0x396 => array(0x3B6), - 0x397 => array(0x3B7), - 0x398 => array(0x3B8), - 0x399 => array(0x3B9), - 0x39A => array(0x3BA), - 0x39B => array(0x3BB), - 0x39C => array(0x3BC), - 0x39D => array(0x3BD), - 0x39E => array(0x3BE), - 0x39F => array(0x3BF), - 0x3A0 => array(0x3C0), - 0x3A1 => array(0x3C1), - 0x3A3 => array(0x3C3), - 0x3A4 => array(0x3C4), - 0x3A5 => array(0x3C5), - 0x3A6 => array(0x3C6), - 0x3A7 => array(0x3C7), - 0x3A8 => array(0x3C8), - 0x3A9 => array(0x3C9), - 0x3AA => array(0x3CA), - 0x3AB => array(0x3CB), - 0x3B0 => array(0x3C5, 0x308, 0x301), - 0x3C2 => array(0x3C3), - 0x3D0 => array(0x3B2), - 0x3D1 => array(0x3B8), - 0x3D2 => array(0x3C5), - 0x3D3 => array(0x3CD), - 0x3D4 => array(0x3CB), - 0x3D5 => array(0x3C6), - 0x3D6 => array(0x3C0), - 0x3D8 => array(0x3D9), - 0x3DA => array(0x3DB), - 0x3DC => array(0x3DD), - 0x3DE => array(0x3DF), - 0x3E0 => array(0x3E1), - 0x3E2 => array(0x3E3), - 0x3E4 => array(0x3E5), - 0x3E6 => array(0x3E7), - 0x3E8 => array(0x3E9), - 0x3EA => array(0x3EB), - 0x3EC => array(0x3ED), - 0x3EE => array(0x3EF), - 0x3F0 => array(0x3BA), - 0x3F1 => array(0x3C1), - 0x3F2 => array(0x3C3), - 0x3F4 => array(0x3B8), - 0x3F5 => array(0x3B5), - 0x400 => array(0x450), - 0x401 => array(0x451), - 0x402 => array(0x452), - 0x403 => array(0x453), - 0x404 => array(0x454), - 0x405 => array(0x455), - 0x406 => array(0x456), - 0x407 => array(0x457), - 0x408 => array(0x458), - 0x409 => array(0x459), - 0x40A => array(0x45A), - 0x40B => array(0x45B), - 0x40C => array(0x45C), - 0x40D => array(0x45D), - 0x40E => array(0x45E), - 0x40F => array(0x45F), - 0x410 => array(0x430), - 0x411 => array(0x431), - 0x412 => array(0x432), - 0x413 => array(0x433), - 0x414 => array(0x434), - 0x415 => array(0x435), - 0x416 => array(0x436), - 0x417 => array(0x437), - 0x418 => array(0x438), - 0x419 => array(0x439), - 0x41A => array(0x43A), - 0x41B => array(0x43B), - 0x41C => array(0x43C), - 0x41D => array(0x43D), - 0x41E => array(0x43E), - 0x41F => array(0x43F), - 0x420 => array(0x440), - 0x421 => array(0x441), - 0x422 => array(0x442), - 0x423 => array(0x443), - 0x424 => array(0x444), - 0x425 => array(0x445), - 0x426 => array(0x446), - 0x427 => array(0x447), - 0x428 => array(0x448), - 0x429 => array(0x449), - 0x42A => array(0x44A), - 0x42B => array(0x44B), - 0x42C => array(0x44C), - 0x42D => array(0x44D), - 0x42E => array(0x44E), - 0x42F => array(0x44F), - 0x460 => array(0x461), - 0x462 => array(0x463), - 0x464 => array(0x465), - 0x466 => array(0x467), - 0x468 => array(0x469), - 0x46A => array(0x46B), - 0x46C => array(0x46D), - 0x46E => array(0x46F), - 0x470 => array(0x471), - 0x472 => array(0x473), - 0x474 => array(0x475), - 0x476 => array(0x477), - 0x478 => array(0x479), - 0x47A => array(0x47B), - 0x47C => array(0x47D), - 0x47E => array(0x47F), - 0x480 => array(0x481), - 0x48A => array(0x48B), - 0x48C => array(0x48D), - 0x48E => array(0x48F), - 0x490 => array(0x491), - 0x492 => array(0x493), - 0x494 => array(0x495), - 0x496 => array(0x497), - 0x498 => array(0x499), - 0x49A => array(0x49B), - 0x49C => array(0x49D), - 0x49E => array(0x49F), - 0x4A0 => array(0x4A1), - 0x4A2 => array(0x4A3), - 0x4A4 => array(0x4A5), - 0x4A6 => array(0x4A7), - 0x4A8 => array(0x4A9), - 0x4AA => array(0x4AB), - 0x4AC => array(0x4AD), - 0x4AE => array(0x4AF), - 0x4B0 => array(0x4B1), - 0x4B2 => array(0x4B3), - 0x4B4 => array(0x4B5), - 0x4B6 => array(0x4B7), - 0x4B8 => array(0x4B9), - 0x4BA => array(0x4BB), - 0x4BC => array(0x4BD), - 0x4BE => array(0x4BF), - 0x4C1 => array(0x4C2), - 0x4C3 => array(0x4C4), - 0x4C5 => array(0x4C6), - 0x4C7 => array(0x4C8), - 0x4C9 => array(0x4CA), - 0x4CB => array(0x4CC), - 0x4CD => array(0x4CE), - 0x4D0 => array(0x4D1), - 0x4D2 => array(0x4D3), - 0x4D4 => array(0x4D5), - 0x4D6 => array(0x4D7), - 0x4D8 => array(0x4D9), - 0x4DA => array(0x4DB), - 0x4DC => array(0x4DD), - 0x4DE => array(0x4DF), - 0x4E0 => array(0x4E1), - 0x4E2 => array(0x4E3), - 0x4E4 => array(0x4E5), - 0x4E6 => array(0x4E7), - 0x4E8 => array(0x4E9), - 0x4EA => array(0x4EB), - 0x4EC => array(0x4ED), - 0x4EE => array(0x4EF), - 0x4F0 => array(0x4F1), - 0x4F2 => array(0x4F3), - 0x4F4 => array(0x4F5), - 0x4F8 => array(0x4F9), - 0x500 => array(0x501), - 0x502 => array(0x503), - 0x504 => array(0x505), - 0x506 => array(0x507), - 0x508 => array(0x509), - 0x50A => array(0x50B), - 0x50C => array(0x50D), - 0x50E => array(0x50F), - 0x531 => array(0x561), - 0x532 => array(0x562), - 0x533 => array(0x563), - 0x534 => array(0x564), - 0x535 => array(0x565), - 0x536 => array(0x566), - 0x537 => array(0x567), - 0x538 => array(0x568), - 0x539 => array(0x569), - 0x53A => array(0x56A), - 0x53B => array(0x56B), - 0x53C => array(0x56C), - 0x53D => array(0x56D), - 0x53E => array(0x56E), - 0x53F => array(0x56F), - 0x540 => array(0x570), - 0x541 => array(0x571), - 0x542 => array(0x572), - 0x543 => array(0x573), - 0x544 => array(0x574), - 0x545 => array(0x575), - 0x546 => array(0x576), - 0x547 => array(0x577), - 0x548 => array(0x578), - 0x549 => array(0x579), - 0x54A => array(0x57A), - 0x54B => array(0x57B), - 0x54C => array(0x57C), - 0x54D => array(0x57D), - 0x54E => array(0x57E), - 0x54F => array(0x57F), - 0x550 => array(0x580), - 0x551 => array(0x581), - 0x552 => array(0x582), - 0x553 => array(0x583), - 0x554 => array(0x584), - 0x555 => array(0x585), - 0x556 => array(0x586), - 0x587 => array(0x565, 0x582), - 0x1E00 => array(0x1E01), - 0x1E02 => array(0x1E03), - 0x1E04 => array(0x1E05), - 0x1E06 => array(0x1E07), - 0x1E08 => array(0x1E09), - 0x1E0A => array(0x1E0B), - 0x1E0C => array(0x1E0D), - 0x1E0E => array(0x1E0F), - 0x1E10 => array(0x1E11), - 0x1E12 => array(0x1E13), - 0x1E14 => array(0x1E15), - 0x1E16 => array(0x1E17), - 0x1E18 => array(0x1E19), - 0x1E1A => array(0x1E1B), - 0x1E1C => array(0x1E1D), - 0x1E1E => array(0x1E1F), - 0x1E20 => array(0x1E21), - 0x1E22 => array(0x1E23), - 0x1E24 => array(0x1E25), - 0x1E26 => array(0x1E27), - 0x1E28 => array(0x1E29), - 0x1E2A => array(0x1E2B), - 0x1E2C => array(0x1E2D), - 0x1E2E => array(0x1E2F), - 0x1E30 => array(0x1E31), - 0x1E32 => array(0x1E33), - 0x1E34 => array(0x1E35), - 0x1E36 => array(0x1E37), - 0x1E38 => array(0x1E39), - 0x1E3A => array(0x1E3B), - 0x1E3C => array(0x1E3D), - 0x1E3E => array(0x1E3F), - 0x1E40 => array(0x1E41), - 0x1E42 => array(0x1E43), - 0x1E44 => array(0x1E45), - 0x1E46 => array(0x1E47), - 0x1E48 => array(0x1E49), - 0x1E4A => array(0x1E4B), - 0x1E4C => array(0x1E4D), - 0x1E4E => array(0x1E4F), - 0x1E50 => array(0x1E51), - 0x1E52 => array(0x1E53), - 0x1E54 => array(0x1E55), - 0x1E56 => array(0x1E57), - 0x1E58 => array(0x1E59), - 0x1E5A => array(0x1E5B), - 0x1E5C => array(0x1E5D), - 0x1E5E => array(0x1E5F), - 0x1E60 => array(0x1E61), - 0x1E62 => array(0x1E63), - 0x1E64 => array(0x1E65), - 0x1E66 => array(0x1E67), - 0x1E68 => array(0x1E69), - 0x1E6A => array(0x1E6B), - 0x1E6C => array(0x1E6D), - 0x1E6E => array(0x1E6F), - 0x1E70 => array(0x1E71), - 0x1E72 => array(0x1E73), - 0x1E74 => array(0x1E75), - 0x1E76 => array(0x1E77), - 0x1E78 => array(0x1E79), - 0x1E7A => array(0x1E7B), - 0x1E7C => array(0x1E7D), - 0x1E7E => array(0x1E7F), - 0x1E80 => array(0x1E81), - 0x1E82 => array(0x1E83), - 0x1E84 => array(0x1E85), - 0x1E86 => array(0x1E87), - 0x1E88 => array(0x1E89), - 0x1E8A => array(0x1E8B), - 0x1E8C => array(0x1E8D), - 0x1E8E => array(0x1E8F), - 0x1E90 => array(0x1E91), - 0x1E92 => array(0x1E93), - 0x1E94 => array(0x1E95), - 0x1E96 => array(0x68, 0x331), - 0x1E97 => array(0x74, 0x308), - 0x1E98 => array(0x77, 0x30A), - 0x1E99 => array(0x79, 0x30A), - 0x1E9A => array(0x61, 0x2BE), - 0x1E9B => array(0x1E61), - 0x1EA0 => array(0x1EA1), - 0x1EA2 => array(0x1EA3), - 0x1EA4 => array(0x1EA5), - 0x1EA6 => array(0x1EA7), - 0x1EA8 => array(0x1EA9), - 0x1EAA => array(0x1EAB), - 0x1EAC => array(0x1EAD), - 0x1EAE => array(0x1EAF), - 0x1EB0 => array(0x1EB1), - 0x1EB2 => array(0x1EB3), - 0x1EB4 => array(0x1EB5), - 0x1EB6 => array(0x1EB7), - 0x1EB8 => array(0x1EB9), - 0x1EBA => array(0x1EBB), - 0x1EBC => array(0x1EBD), - 0x1EBE => array(0x1EBF), - 0x1EC0 => array(0x1EC1), - 0x1EC2 => array(0x1EC3), - 0x1EC4 => array(0x1EC5), - 0x1EC6 => array(0x1EC7), - 0x1EC8 => array(0x1EC9), - 0x1ECA => array(0x1ECB), - 0x1ECC => array(0x1ECD), - 0x1ECE => array(0x1ECF), - 0x1ED0 => array(0x1ED1), - 0x1ED2 => array(0x1ED3), - 0x1ED4 => array(0x1ED5), - 0x1ED6 => array(0x1ED7), - 0x1ED8 => array(0x1ED9), - 0x1EDA => array(0x1EDB), - 0x1EDC => array(0x1EDD), - 0x1EDE => array(0x1EDF), - 0x1EE0 => array(0x1EE1), - 0x1EE2 => array(0x1EE3), - 0x1EE4 => array(0x1EE5), - 0x1EE6 => array(0x1EE7), - 0x1EE8 => array(0x1EE9), - 0x1EEA => array(0x1EEB), - 0x1EEC => array(0x1EED), - 0x1EEE => array(0x1EEF), - 0x1EF0 => array(0x1EF1), - 0x1EF2 => array(0x1EF3), - 0x1EF4 => array(0x1EF5), - 0x1EF6 => array(0x1EF7), - 0x1EF8 => array(0x1EF9), - 0x1F08 => array(0x1F00), - 0x1F09 => array(0x1F01), - 0x1F0A => array(0x1F02), - 0x1F0B => array(0x1F03), - 0x1F0C => array(0x1F04), - 0x1F0D => array(0x1F05), - 0x1F0E => array(0x1F06), - 0x1F0F => array(0x1F07), - 0x1F18 => array(0x1F10), - 0x1F19 => array(0x1F11), - 0x1F1A => array(0x1F12), - 0x1F1B => array(0x1F13), - 0x1F1C => array(0x1F14), - 0x1F1D => array(0x1F15), - 0x1F28 => array(0x1F20), - 0x1F29 => array(0x1F21), - 0x1F2A => array(0x1F22), - 0x1F2B => array(0x1F23), - 0x1F2C => array(0x1F24), - 0x1F2D => array(0x1F25), - 0x1F2E => array(0x1F26), - 0x1F2F => array(0x1F27), - 0x1F38 => array(0x1F30), - 0x1F39 => array(0x1F31), - 0x1F3A => array(0x1F32), - 0x1F3B => array(0x1F33), - 0x1F3C => array(0x1F34), - 0x1F3D => array(0x1F35), - 0x1F3E => array(0x1F36), - 0x1F3F => array(0x1F37), - 0x1F48 => array(0x1F40), - 0x1F49 => array(0x1F41), - 0x1F4A => array(0x1F42), - 0x1F4B => array(0x1F43), - 0x1F4C => array(0x1F44), - 0x1F4D => array(0x1F45), - 0x1F50 => array(0x3C5, 0x313), - 0x1F52 => array(0x3C5, 0x313, 0x300), - 0x1F54 => array(0x3C5, 0x313, 0x301), - 0x1F56 => array(0x3C5, 0x313, 0x342), - 0x1F59 => array(0x1F51), - 0x1F5B => array(0x1F53), - 0x1F5D => array(0x1F55), - 0x1F5F => array(0x1F57), - 0x1F68 => array(0x1F60), - 0x1F69 => array(0x1F61), - 0x1F6A => array(0x1F62), - 0x1F6B => array(0x1F63), - 0x1F6C => array(0x1F64), - 0x1F6D => array(0x1F65), - 0x1F6E => array(0x1F66), - 0x1F6F => array(0x1F67), - 0x1F80 => array(0x1F00, 0x3B9), - 0x1F81 => array(0x1F01, 0x3B9), - 0x1F82 => array(0x1F02, 0x3B9), - 0x1F83 => array(0x1F03, 0x3B9), - 0x1F84 => array(0x1F04, 0x3B9), - 0x1F85 => array(0x1F05, 0x3B9), - 0x1F86 => array(0x1F06, 0x3B9), - 0x1F87 => array(0x1F07, 0x3B9), - 0x1F88 => array(0x1F00, 0x3B9), - 0x1F89 => array(0x1F01, 0x3B9), - 0x1F8A => array(0x1F02, 0x3B9), - 0x1F8B => array(0x1F03, 0x3B9), - 0x1F8C => array(0x1F04, 0x3B9), - 0x1F8D => array(0x1F05, 0x3B9), - 0x1F8E => array(0x1F06, 0x3B9), - 0x1F8F => array(0x1F07, 0x3B9), - 0x1F90 => array(0x1F20, 0x3B9), - 0x1F91 => array(0x1F21, 0x3B9), - 0x1F92 => array(0x1F22, 0x3B9), - 0x1F93 => array(0x1F23, 0x3B9), - 0x1F94 => array(0x1F24, 0x3B9), - 0x1F95 => array(0x1F25, 0x3B9), - 0x1F96 => array(0x1F26, 0x3B9), - 0x1F97 => array(0x1F27, 0x3B9), - 0x1F98 => array(0x1F20, 0x3B9), - 0x1F99 => array(0x1F21, 0x3B9), - 0x1F9A => array(0x1F22, 0x3B9), - 0x1F9B => array(0x1F23, 0x3B9), - 0x1F9C => array(0x1F24, 0x3B9), - 0x1F9D => array(0x1F25, 0x3B9), - 0x1F9E => array(0x1F26, 0x3B9), - 0x1F9F => array(0x1F27, 0x3B9), - 0x1FA0 => array(0x1F60, 0x3B9), - 0x1FA1 => array(0x1F61, 0x3B9), - 0x1FA2 => array(0x1F62, 0x3B9), - 0x1FA3 => array(0x1F63, 0x3B9), - 0x1FA4 => array(0x1F64, 0x3B9), - 0x1FA5 => array(0x1F65, 0x3B9), - 0x1FA6 => array(0x1F66, 0x3B9), - 0x1FA7 => array(0x1F67, 0x3B9), - 0x1FA8 => array(0x1F60, 0x3B9), - 0x1FA9 => array(0x1F61, 0x3B9), - 0x1FAA => array(0x1F62, 0x3B9), - 0x1FAB => array(0x1F63, 0x3B9), - 0x1FAC => array(0x1F64, 0x3B9), - 0x1FAD => array(0x1F65, 0x3B9), - 0x1FAE => array(0x1F66, 0x3B9), - 0x1FAF => array(0x1F67, 0x3B9), - 0x1FB2 => array(0x1F70, 0x3B9), - 0x1FB3 => array(0x3B1, 0x3B9), - 0x1FB4 => array(0x3AC, 0x3B9), - 0x1FB6 => array(0x3B1, 0x342), - 0x1FB7 => array(0x3B1, 0x342, 0x3B9), - 0x1FB8 => array(0x1FB0), - 0x1FB9 => array(0x1FB1), - 0x1FBA => array(0x1F70), - 0x1FBB => array(0x1F71), - 0x1FBC => array(0x3B1, 0x3B9), - 0x1FBE => array(0x3B9), - 0x1FC2 => array(0x1F74, 0x3B9), - 0x1FC3 => array(0x3B7, 0x3B9), - 0x1FC4 => array(0x3AE, 0x3B9), - 0x1FC6 => array(0x3B7, 0x342), - 0x1FC7 => array(0x3B7, 0x342, 0x3B9), - 0x1FC8 => array(0x1F72), - 0x1FC9 => array(0x1F73), - 0x1FCA => array(0x1F74), - 0x1FCB => array(0x1F75), - 0x1FCC => array(0x3B7, 0x3B9), - 0x1FD2 => array(0x3B9, 0x308, 0x300), - 0x1FD3 => array(0x3B9, 0x308, 0x301), - 0x1FD6 => array(0x3B9, 0x342), - 0x1FD7 => array(0x3B9, 0x308, 0x342), - 0x1FD8 => array(0x1FD0), - 0x1FD9 => array(0x1FD1), - 0x1FDA => array(0x1F76), - 0x1FDB => array(0x1F77), - 0x1FE2 => array(0x3C5, 0x308, 0x300), - 0x1FE3 => array(0x3C5, 0x308, 0x301), - 0x1FE4 => array(0x3C1, 0x313), - 0x1FE6 => array(0x3C5, 0x342), - 0x1FE7 => array(0x3C5, 0x308, 0x342), - 0x1FE8 => array(0x1FE0), - 0x1FE9 => array(0x1FE1), - 0x1FEA => array(0x1F7A), - 0x1FEB => array(0x1F7B), - 0x1FEC => array(0x1FE5), - 0x1FF2 => array(0x1F7C, 0x3B9), - 0x1FF3 => array(0x3C9, 0x3B9), - 0x1FF4 => array(0x3CE, 0x3B9), - 0x1FF6 => array(0x3C9, 0x342), - 0x1FF7 => array(0x3C9, 0x342, 0x3B9), - 0x1FF8 => array(0x1F78), - 0x1FF9 => array(0x1F79), - 0x1FFA => array(0x1F7C), - 0x1FFB => array(0x1F7D), - 0x1FFC => array(0x3C9, 0x3B9), - 0x20A8 => array(0x72, 0x73), - 0x2102 => array(0x63), - 0x2103 => array(0xB0, 0x63), - 0x2107 => array(0x25B), - 0x2109 => array(0xB0, 0x66), - 0x210B => array(0x68), - 0x210C => array(0x68), - 0x210D => array(0x68), - 0x2110 => array(0x69), - 0x2111 => array(0x69), - 0x2112 => array(0x6C), - 0x2115 => array(0x6E), - 0x2116 => array(0x6E, 0x6F), - 0x2119 => array(0x70), - 0x211A => array(0x71), - 0x211B => array(0x72), - 0x211C => array(0x72), - 0x211D => array(0x72), - 0x2120 => array(0x73, 0x6D), - 0x2121 => array(0x74, 0x65, 0x6C), - 0x2122 => array(0x74, 0x6D), - 0x2124 => array(0x7A), - 0x2126 => array(0x3C9), - 0x2128 => array(0x7A), - 0x212A => array(0x6B), - 0x212B => array(0xE5), - 0x212C => array(0x62), - 0x212D => array(0x63), - 0x2130 => array(0x65), - 0x2131 => array(0x66), - 0x2133 => array(0x6D), - 0x213E => array(0x3B3), - 0x213F => array(0x3C0), - 0x2145 => array(0x64), - 0x2160 => array(0x2170), - 0x2161 => array(0x2171), - 0x2162 => array(0x2172), - 0x2163 => array(0x2173), - 0x2164 => array(0x2174), - 0x2165 => array(0x2175), - 0x2166 => array(0x2176), - 0x2167 => array(0x2177), - 0x2168 => array(0x2178), - 0x2169 => array(0x2179), - 0x216A => array(0x217A), - 0x216B => array(0x217B), - 0x216C => array(0x217C), - 0x216D => array(0x217D), - 0x216E => array(0x217E), - 0x216F => array(0x217F), - 0x24B6 => array(0x24D0), - 0x24B7 => array(0x24D1), - 0x24B8 => array(0x24D2), - 0x24B9 => array(0x24D3), - 0x24BA => array(0x24D4), - 0x24BB => array(0x24D5), - 0x24BC => array(0x24D6), - 0x24BD => array(0x24D7), - 0x24BE => array(0x24D8), - 0x24BF => array(0x24D9), - 0x24C0 => array(0x24DA), - 0x24C1 => array(0x24DB), - 0x24C2 => array(0x24DC), - 0x24C3 => array(0x24DD), - 0x24C4 => array(0x24DE), - 0x24C5 => array(0x24DF), - 0x24C6 => array(0x24E0), - 0x24C7 => array(0x24E1), - 0x24C8 => array(0x24E2), - 0x24C9 => array(0x24E3), - 0x24CA => array(0x24E4), - 0x24CB => array(0x24E5), - 0x24CC => array(0x24E6), - 0x24CD => array(0x24E7), - 0x24CE => array(0x24E8), - 0x24CF => array(0x24E9), - 0x3371 => array(0x68, 0x70, 0x61), - 0x3373 => array(0x61, 0x75), - 0x3375 => array(0x6F, 0x76), - 0x3380 => array(0x70, 0x61), - 0x3381 => array(0x6E, 0x61), - 0x3382 => array(0x3BC, 0x61), - 0x3383 => array(0x6D, 0x61), - 0x3384 => array(0x6B, 0x61), - 0x3385 => array(0x6B, 0x62), - 0x3386 => array(0x6D, 0x62), - 0x3387 => array(0x67, 0x62), - 0x338A => array(0x70, 0x66), - 0x338B => array(0x6E, 0x66), - 0x338C => array(0x3BC, 0x66), - 0x3390 => array(0x68, 0x7A), - 0x3391 => array(0x6B, 0x68, 0x7A), - 0x3392 => array(0x6D, 0x68, 0x7A), - 0x3393 => array(0x67, 0x68, 0x7A), - 0x3394 => array(0x74, 0x68, 0x7A), - 0x33A9 => array(0x70, 0x61), - 0x33AA => array(0x6B, 0x70, 0x61), - 0x33AB => array(0x6D, 0x70, 0x61), - 0x33AC => array(0x67, 0x70, 0x61), - 0x33B4 => array(0x70, 0x76), - 0x33B5 => array(0x6E, 0x76), - 0x33B6 => array(0x3BC, 0x76), - 0x33B7 => array(0x6D, 0x76), - 0x33B8 => array(0x6B, 0x76), - 0x33B9 => array(0x6D, 0x76), - 0x33BA => array(0x70, 0x77), - 0x33BB => array(0x6E, 0x77), - 0x33BC => array(0x3BC, 0x77), - 0x33BD => array(0x6D, 0x77), - 0x33BE => array(0x6B, 0x77), - 0x33BF => array(0x6D, 0x77), - 0x33C0 => array(0x6B, 0x3C9), - 0x33C1 => array(0x6D, 0x3C9), - /* 0x33C2 => array(0x61, 0x2E, 0x6D, 0x2E), */ - 0x33C3 => array(0x62, 0x71), - 0x33C6 => array(0x63, 0x2215, 0x6B, 0x67), - 0x33C7 => array(0x63, 0x6F, 0x2E), - 0x33C8 => array(0x64, 0x62), - 0x33C9 => array(0x67, 0x79), - 0x33CB => array(0x68, 0x70), - 0x33CD => array(0x6B, 0x6B), - 0x33CE => array(0x6B, 0x6D), - 0x33D7 => array(0x70, 0x68), - 0x33D9 => array(0x70, 0x70, 0x6D), - 0x33DA => array(0x70, 0x72), - 0x33DC => array(0x73, 0x76), - 0x33DD => array(0x77, 0x62), - 0xFB00 => array(0x66, 0x66), - 0xFB01 => array(0x66, 0x69), - 0xFB02 => array(0x66, 0x6C), - 0xFB03 => array(0x66, 0x66, 0x69), - 0xFB04 => array(0x66, 0x66, 0x6C), - 0xFB05 => array(0x73, 0x74), - 0xFB06 => array(0x73, 0x74), - 0xFB13 => array(0x574, 0x576), - 0xFB14 => array(0x574, 0x565), - 0xFB15 => array(0x574, 0x56B), - 0xFB16 => array(0x57E, 0x576), - 0xFB17 => array(0x574, 0x56D), - 0xFF21 => array(0xFF41), - 0xFF22 => array(0xFF42), - 0xFF23 => array(0xFF43), - 0xFF24 => array(0xFF44), - 0xFF25 => array(0xFF45), - 0xFF26 => array(0xFF46), - 0xFF27 => array(0xFF47), - 0xFF28 => array(0xFF48), - 0xFF29 => array(0xFF49), - 0xFF2A => array(0xFF4A), - 0xFF2B => array(0xFF4B), - 0xFF2C => array(0xFF4C), - 0xFF2D => array(0xFF4D), - 0xFF2E => array(0xFF4E), - 0xFF2F => array(0xFF4F), - 0xFF30 => array(0xFF50), - 0xFF31 => array(0xFF51), - 0xFF32 => array(0xFF52), - 0xFF33 => array(0xFF53), - 0xFF34 => array(0xFF54), - 0xFF35 => array(0xFF55), - 0xFF36 => array(0xFF56), - 0xFF37 => array(0xFF57), - 0xFF38 => array(0xFF58), - 0xFF39 => array(0xFF59), - 0xFF3A => array(0xFF5A), - 0x10400 => array(0x10428), - 0x10401 => array(0x10429), - 0x10402 => array(0x1042A), - 0x10403 => array(0x1042B), - 0x10404 => array(0x1042C), - 0x10405 => array(0x1042D), - 0x10406 => array(0x1042E), - 0x10407 => array(0x1042F), - 0x10408 => array(0x10430), - 0x10409 => array(0x10431), - 0x1040A => array(0x10432), - 0x1040B => array(0x10433), - 0x1040C => array(0x10434), - 0x1040D => array(0x10435), - 0x1040E => array(0x10436), - 0x1040F => array(0x10437), - 0x10410 => array(0x10438), - 0x10411 => array(0x10439), - 0x10412 => array(0x1043A), - 0x10413 => array(0x1043B), - 0x10414 => array(0x1043C), - 0x10415 => array(0x1043D), - 0x10416 => array(0x1043E), - 0x10417 => array(0x1043F), - 0x10418 => array(0x10440), - 0x10419 => array(0x10441), - 0x1041A => array(0x10442), - 0x1041B => array(0x10443), - 0x1041C => array(0x10444), - 0x1041D => array(0x10445), - 0x1041E => array(0x10446), - 0x1041F => array(0x10447), - 0x10420 => array(0x10448), - 0x10421 => array(0x10449), - 0x10422 => array(0x1044A), - 0x10423 => array(0x1044B), - 0x10424 => array(0x1044C), - 0x10425 => array(0x1044D), - 0x1D400 => array(0x61), - 0x1D401 => array(0x62), - 0x1D402 => array(0x63), - 0x1D403 => array(0x64), - 0x1D404 => array(0x65), - 0x1D405 => array(0x66), - 0x1D406 => array(0x67), - 0x1D407 => array(0x68), - 0x1D408 => array(0x69), - 0x1D409 => array(0x6A), - 0x1D40A => array(0x6B), - 0x1D40B => array(0x6C), - 0x1D40C => array(0x6D), - 0x1D40D => array(0x6E), - 0x1D40E => array(0x6F), - 0x1D40F => array(0x70), - 0x1D410 => array(0x71), - 0x1D411 => array(0x72), - 0x1D412 => array(0x73), - 0x1D413 => array(0x74), - 0x1D414 => array(0x75), - 0x1D415 => array(0x76), - 0x1D416 => array(0x77), - 0x1D417 => array(0x78), - 0x1D418 => array(0x79), - 0x1D419 => array(0x7A), - 0x1D434 => array(0x61), - 0x1D435 => array(0x62), - 0x1D436 => array(0x63), - 0x1D437 => array(0x64), - 0x1D438 => array(0x65), - 0x1D439 => array(0x66), - 0x1D43A => array(0x67), - 0x1D43B => array(0x68), - 0x1D43C => array(0x69), - 0x1D43D => array(0x6A), - 0x1D43E => array(0x6B), - 0x1D43F => array(0x6C), - 0x1D440 => array(0x6D), - 0x1D441 => array(0x6E), - 0x1D442 => array(0x6F), - 0x1D443 => array(0x70), - 0x1D444 => array(0x71), - 0x1D445 => array(0x72), - 0x1D446 => array(0x73), - 0x1D447 => array(0x74), - 0x1D448 => array(0x75), - 0x1D449 => array(0x76), - 0x1D44A => array(0x77), - 0x1D44B => array(0x78), - 0x1D44C => array(0x79), - 0x1D44D => array(0x7A), - 0x1D468 => array(0x61), - 0x1D469 => array(0x62), - 0x1D46A => array(0x63), - 0x1D46B => array(0x64), - 0x1D46C => array(0x65), - 0x1D46D => array(0x66), - 0x1D46E => array(0x67), - 0x1D46F => array(0x68), - 0x1D470 => array(0x69), - 0x1D471 => array(0x6A), - 0x1D472 => array(0x6B), - 0x1D473 => array(0x6C), - 0x1D474 => array(0x6D), - 0x1D475 => array(0x6E), - 0x1D476 => array(0x6F), - 0x1D477 => array(0x70), - 0x1D478 => array(0x71), - 0x1D479 => array(0x72), - 0x1D47A => array(0x73), - 0x1D47B => array(0x74), - 0x1D47C => array(0x75), - 0x1D47D => array(0x76), - 0x1D47E => array(0x77), - 0x1D47F => array(0x78), - 0x1D480 => array(0x79), - 0x1D481 => array(0x7A), - 0x1D49C => array(0x61), - 0x1D49E => array(0x63), - 0x1D49F => array(0x64), - 0x1D4A2 => array(0x67), - 0x1D4A5 => array(0x6A), - 0x1D4A6 => array(0x6B), - 0x1D4A9 => array(0x6E), - 0x1D4AA => array(0x6F), - 0x1D4AB => array(0x70), - 0x1D4AC => array(0x71), - 0x1D4AE => array(0x73), - 0x1D4AF => array(0x74), - 0x1D4B0 => array(0x75), - 0x1D4B1 => array(0x76), - 0x1D4B2 => array(0x77), - 0x1D4B3 => array(0x78), - 0x1D4B4 => array(0x79), - 0x1D4B5 => array(0x7A), - 0x1D4D0 => array(0x61), - 0x1D4D1 => array(0x62), - 0x1D4D2 => array(0x63), - 0x1D4D3 => array(0x64), - 0x1D4D4 => array(0x65), - 0x1D4D5 => array(0x66), - 0x1D4D6 => array(0x67), - 0x1D4D7 => array(0x68), - 0x1D4D8 => array(0x69), - 0x1D4D9 => array(0x6A), - 0x1D4DA => array(0x6B), - 0x1D4DB => array(0x6C), - 0x1D4DC => array(0x6D), - 0x1D4DD => array(0x6E), - 0x1D4DE => array(0x6F), - 0x1D4DF => array(0x70), - 0x1D4E0 => array(0x71), - 0x1D4E1 => array(0x72), - 0x1D4E2 => array(0x73), - 0x1D4E3 => array(0x74), - 0x1D4E4 => array(0x75), - 0x1D4E5 => array(0x76), - 0x1D4E6 => array(0x77), - 0x1D4E7 => array(0x78), - 0x1D4E8 => array(0x79), - 0x1D4E9 => array(0x7A), - 0x1D504 => array(0x61), - 0x1D505 => array(0x62), - 0x1D507 => array(0x64), - 0x1D508 => array(0x65), - 0x1D509 => array(0x66), - 0x1D50A => array(0x67), - 0x1D50D => array(0x6A), - 0x1D50E => array(0x6B), - 0x1D50F => array(0x6C), - 0x1D510 => array(0x6D), - 0x1D511 => array(0x6E), - 0x1D512 => array(0x6F), - 0x1D513 => array(0x70), - 0x1D514 => array(0x71), - 0x1D516 => array(0x73), - 0x1D517 => array(0x74), - 0x1D518 => array(0x75), - 0x1D519 => array(0x76), - 0x1D51A => array(0x77), - 0x1D51B => array(0x78), - 0x1D51C => array(0x79), - 0x1D538 => array(0x61), - 0x1D539 => array(0x62), - 0x1D53B => array(0x64), - 0x1D53C => array(0x65), - 0x1D53D => array(0x66), - 0x1D53E => array(0x67), - 0x1D540 => array(0x69), - 0x1D541 => array(0x6A), - 0x1D542 => array(0x6B), - 0x1D543 => array(0x6C), - 0x1D544 => array(0x6D), - 0x1D546 => array(0x6F), - 0x1D54A => array(0x73), - 0x1D54B => array(0x74), - 0x1D54C => array(0x75), - 0x1D54D => array(0x76), - 0x1D54E => array(0x77), - 0x1D54F => array(0x78), - 0x1D550 => array(0x79), - 0x1D56C => array(0x61), - 0x1D56D => array(0x62), - 0x1D56E => array(0x63), - 0x1D56F => array(0x64), - 0x1D570 => array(0x65), - 0x1D571 => array(0x66), - 0x1D572 => array(0x67), - 0x1D573 => array(0x68), - 0x1D574 => array(0x69), - 0x1D575 => array(0x6A), - 0x1D576 => array(0x6B), - 0x1D577 => array(0x6C), - 0x1D578 => array(0x6D), - 0x1D579 => array(0x6E), - 0x1D57A => array(0x6F), - 0x1D57B => array(0x70), - 0x1D57C => array(0x71), - 0x1D57D => array(0x72), - 0x1D57E => array(0x73), - 0x1D57F => array(0x74), - 0x1D580 => array(0x75), - 0x1D581 => array(0x76), - 0x1D582 => array(0x77), - 0x1D583 => array(0x78), - 0x1D584 => array(0x79), - 0x1D585 => array(0x7A), - 0x1D5A0 => array(0x61), - 0x1D5A1 => array(0x62), - 0x1D5A2 => array(0x63), - 0x1D5A3 => array(0x64), - 0x1D5A4 => array(0x65), - 0x1D5A5 => array(0x66), - 0x1D5A6 => array(0x67), - 0x1D5A7 => array(0x68), - 0x1D5A8 => array(0x69), - 0x1D5A9 => array(0x6A), - 0x1D5AA => array(0x6B), - 0x1D5AB => array(0x6C), - 0x1D5AC => array(0x6D), - 0x1D5AD => array(0x6E), - 0x1D5AE => array(0x6F), - 0x1D5AF => array(0x70), - 0x1D5B0 => array(0x71), - 0x1D5B1 => array(0x72), - 0x1D5B2 => array(0x73), - 0x1D5B3 => array(0x74), - 0x1D5B4 => array(0x75), - 0x1D5B5 => array(0x76), - 0x1D5B6 => array(0x77), - 0x1D5B7 => array(0x78), - 0x1D5B8 => array(0x79), - 0x1D5B9 => array(0x7A), - 0x1D5D4 => array(0x61), - 0x1D5D5 => array(0x62), - 0x1D5D6 => array(0x63), - 0x1D5D7 => array(0x64), - 0x1D5D8 => array(0x65), - 0x1D5D9 => array(0x66), - 0x1D5DA => array(0x67), - 0x1D5DB => array(0x68), - 0x1D5DC => array(0x69), - 0x1D5DD => array(0x6A), - 0x1D5DE => array(0x6B), - 0x1D5DF => array(0x6C), - 0x1D5E0 => array(0x6D), - 0x1D5E1 => array(0x6E), - 0x1D5E2 => array(0x6F), - 0x1D5E3 => array(0x70), - 0x1D5E4 => array(0x71), - 0x1D5E5 => array(0x72), - 0x1D5E6 => array(0x73), - 0x1D5E7 => array(0x74), - 0x1D5E8 => array(0x75), - 0x1D5E9 => array(0x76), - 0x1D5EA => array(0x77), - 0x1D5EB => array(0x78), - 0x1D5EC => array(0x79), - 0x1D5ED => array(0x7A), - 0x1D608 => array(0x61), - 0x1D609 => array(0x62), - 0x1D60A => array(0x63), - 0x1D60B => array(0x64), - 0x1D60C => array(0x65), - 0x1D60D => array(0x66), - 0x1D60E => array(0x67), - 0x1D60F => array(0x68), - 0x1D610 => array(0x69), - 0x1D611 => array(0x6A), - 0x1D612 => array(0x6B), - 0x1D613 => array(0x6C), - 0x1D614 => array(0x6D), - 0x1D615 => array(0x6E), - 0x1D616 => array(0x6F), - 0x1D617 => array(0x70), - 0x1D618 => array(0x71), - 0x1D619 => array(0x72), - 0x1D61A => array(0x73), - 0x1D61B => array(0x74), - 0x1D61C => array(0x75), - 0x1D61D => array(0x76), - 0x1D61E => array(0x77), - 0x1D61F => array(0x78), - 0x1D620 => array(0x79), - 0x1D621 => array(0x7A), - 0x1D63C => array(0x61), - 0x1D63D => array(0x62), - 0x1D63E => array(0x63), - 0x1D63F => array(0x64), - 0x1D640 => array(0x65), - 0x1D641 => array(0x66), - 0x1D642 => array(0x67), - 0x1D643 => array(0x68), - 0x1D644 => array(0x69), - 0x1D645 => array(0x6A), - 0x1D646 => array(0x6B), - 0x1D647 => array(0x6C), - 0x1D648 => array(0x6D), - 0x1D649 => array(0x6E), - 0x1D64A => array(0x6F), - 0x1D64B => array(0x70), - 0x1D64C => array(0x71), - 0x1D64D => array(0x72), - 0x1D64E => array(0x73), - 0x1D64F => array(0x74), - 0x1D650 => array(0x75), - 0x1D651 => array(0x76), - 0x1D652 => array(0x77), - 0x1D653 => array(0x78), - 0x1D654 => array(0x79), - 0x1D655 => array(0x7A), - 0x1D670 => array(0x61), - 0x1D671 => array(0x62), - 0x1D672 => array(0x63), - 0x1D673 => array(0x64), - 0x1D674 => array(0x65), - 0x1D675 => array(0x66), - 0x1D676 => array(0x67), - 0x1D677 => array(0x68), - 0x1D678 => array(0x69), - 0x1D679 => array(0x6A), - 0x1D67A => array(0x6B), - 0x1D67B => array(0x6C), - 0x1D67C => array(0x6D), - 0x1D67D => array(0x6E), - 0x1D67E => array(0x6F), - 0x1D67F => array(0x70), - 0x1D680 => array(0x71), - 0x1D681 => array(0x72), - 0x1D682 => array(0x73), - 0x1D683 => array(0x74), - 0x1D684 => array(0x75), - 0x1D685 => array(0x76), - 0x1D686 => array(0x77), - 0x1D687 => array(0x78), - 0x1D688 => array(0x79), - 0x1D689 => array(0x7A), - 0x1D6A8 => array(0x3B1), - 0x1D6A9 => array(0x3B2), - 0x1D6AA => array(0x3B3), - 0x1D6AB => array(0x3B4), - 0x1D6AC => array(0x3B5), - 0x1D6AD => array(0x3B6), - 0x1D6AE => array(0x3B7), - 0x1D6AF => array(0x3B8), - 0x1D6B0 => array(0x3B9), - 0x1D6B1 => array(0x3BA), - 0x1D6B2 => array(0x3BB), - 0x1D6B3 => array(0x3BC), - 0x1D6B4 => array(0x3BD), - 0x1D6B5 => array(0x3BE), - 0x1D6B6 => array(0x3BF), - 0x1D6B7 => array(0x3C0), - 0x1D6B8 => array(0x3C1), - 0x1D6B9 => array(0x3B8), - 0x1D6BA => array(0x3C3), - 0x1D6BB => array(0x3C4), - 0x1D6BC => array(0x3C5), - 0x1D6BD => array(0x3C6), - 0x1D6BE => array(0x3C7), - 0x1D6BF => array(0x3C8), - 0x1D6C0 => array(0x3C9), - 0x1D6D3 => array(0x3C3), - 0x1D6E2 => array(0x3B1), - 0x1D6E3 => array(0x3B2), - 0x1D6E4 => array(0x3B3), - 0x1D6E5 => array(0x3B4), - 0x1D6E6 => array(0x3B5), - 0x1D6E7 => array(0x3B6), - 0x1D6E8 => array(0x3B7), - 0x1D6E9 => array(0x3B8), - 0x1D6EA => array(0x3B9), - 0x1D6EB => array(0x3BA), - 0x1D6EC => array(0x3BB), - 0x1D6ED => array(0x3BC), - 0x1D6EE => array(0x3BD), - 0x1D6EF => array(0x3BE), - 0x1D6F0 => array(0x3BF), - 0x1D6F1 => array(0x3C0), - 0x1D6F2 => array(0x3C1), - 0x1D6F3 => array(0x3B8), - 0x1D6F4 => array(0x3C3), - 0x1D6F5 => array(0x3C4), - 0x1D6F6 => array(0x3C5), - 0x1D6F7 => array(0x3C6), - 0x1D6F8 => array(0x3C7), - 0x1D6F9 => array(0x3C8), - 0x1D6FA => array(0x3C9), - 0x1D70D => array(0x3C3), - 0x1D71C => array(0x3B1), - 0x1D71D => array(0x3B2), - 0x1D71E => array(0x3B3), - 0x1D71F => array(0x3B4), - 0x1D720 => array(0x3B5), - 0x1D721 => array(0x3B6), - 0x1D722 => array(0x3B7), - 0x1D723 => array(0x3B8), - 0x1D724 => array(0x3B9), - 0x1D725 => array(0x3BA), - 0x1D726 => array(0x3BB), - 0x1D727 => array(0x3BC), - 0x1D728 => array(0x3BD), - 0x1D729 => array(0x3BE), - 0x1D72A => array(0x3BF), - 0x1D72B => array(0x3C0), - 0x1D72C => array(0x3C1), - 0x1D72D => array(0x3B8), - 0x1D72E => array(0x3C3), - 0x1D72F => array(0x3C4), - 0x1D730 => array(0x3C5), - 0x1D731 => array(0x3C6), - 0x1D732 => array(0x3C7), - 0x1D733 => array(0x3C8), - 0x1D734 => array(0x3C9), - 0x1D747 => array(0x3C3), - 0x1D756 => array(0x3B1), - 0x1D757 => array(0x3B2), - 0x1D758 => array(0x3B3), - 0x1D759 => array(0x3B4), - 0x1D75A => array(0x3B5), - 0x1D75B => array(0x3B6), - 0x1D75C => array(0x3B7), - 0x1D75D => array(0x3B8), - 0x1D75E => array(0x3B9), - 0x1D75F => array(0x3BA), - 0x1D760 => array(0x3BB), - 0x1D761 => array(0x3BC), - 0x1D762 => array(0x3BD), - 0x1D763 => array(0x3BE), - 0x1D764 => array(0x3BF), - 0x1D765 => array(0x3C0), - 0x1D766 => array(0x3C1), - 0x1D767 => array(0x3B8), - 0x1D768 => array(0x3C3), - 0x1D769 => array(0x3C4), - 0x1D76A => array(0x3C5), - 0x1D76B => array(0x3C6), - 0x1D76C => array(0x3C7), - 0x1D76D => array(0x3C8), - 0x1D76E => array(0x3C9), - 0x1D781 => array(0x3C3), - 0x1D790 => array(0x3B1), - 0x1D791 => array(0x3B2), - 0x1D792 => array(0x3B3), - 0x1D793 => array(0x3B4), - 0x1D794 => array(0x3B5), - 0x1D795 => array(0x3B6), - 0x1D796 => array(0x3B7), - 0x1D797 => array(0x3B8), - 0x1D798 => array(0x3B9), - 0x1D799 => array(0x3BA), - 0x1D79A => array(0x3BB), - 0x1D79B => array(0x3BC), - 0x1D79C => array(0x3BD), - 0x1D79D => array(0x3BE), - 0x1D79E => array(0x3BF), - 0x1D79F => array(0x3C0), - 0x1D7A0 => array(0x3C1), - 0x1D7A1 => array(0x3B8), - 0x1D7A2 => array(0x3C3), - 0x1D7A3 => array(0x3C4), - 0x1D7A4 => array(0x3C5), - 0x1D7A5 => array(0x3C6), - 0x1D7A6 => array(0x3C7), - 0x1D7A7 => array(0x3C8), - 0x1D7A8 => array(0x3C9), - 0x1D7BB => array(0x3C3), - 0x3F9 => array(0x3C3), - 0x1D2C => array(0x61), - 0x1D2D => array(0xE6), - 0x1D2E => array(0x62), - 0x1D30 => array(0x64), - 0x1D31 => array(0x65), - 0x1D32 => array(0x1DD), - 0x1D33 => array(0x67), - 0x1D34 => array(0x68), - 0x1D35 => array(0x69), - 0x1D36 => array(0x6A), - 0x1D37 => array(0x6B), - 0x1D38 => array(0x6C), - 0x1D39 => array(0x6D), - 0x1D3A => array(0x6E), - 0x1D3C => array(0x6F), - 0x1D3D => array(0x223), - 0x1D3E => array(0x70), - 0x1D3F => array(0x72), - 0x1D40 => array(0x74), - 0x1D41 => array(0x75), - 0x1D42 => array(0x77), - 0x213B => array(0x66, 0x61, 0x78), - 0x3250 => array(0x70, 0x74, 0x65), - 0x32CC => array(0x68, 0x67), - 0x32CE => array(0x65, 0x76), - 0x32CF => array(0x6C, 0x74, 0x64), - 0x337A => array(0x69, 0x75), - 0x33DE => array(0x76, 0x2215, 0x6D), - 0x33DF => array(0x61, 0x2215, 0x6D) - ); - - /** - * Normalization Combining Classes; Code Points not listed - * got Combining Class 0. - * - * @static - * @var array - * @access private - */ - private static $_np_norm_combcls = array( - 0x334 => 1, - 0x335 => 1, - 0x336 => 1, - 0x337 => 1, - 0x338 => 1, - 0x93C => 7, - 0x9BC => 7, - 0xA3C => 7, - 0xABC => 7, - 0xB3C => 7, - 0xCBC => 7, - 0x1037 => 7, - 0x3099 => 8, - 0x309A => 8, - 0x94D => 9, - 0x9CD => 9, - 0xA4D => 9, - 0xACD => 9, - 0xB4D => 9, - 0xBCD => 9, - 0xC4D => 9, - 0xCCD => 9, - 0xD4D => 9, - 0xDCA => 9, - 0xE3A => 9, - 0xF84 => 9, - 0x1039 => 9, - 0x1714 => 9, - 0x1734 => 9, - 0x17D2 => 9, - 0x5B0 => 10, - 0x5B1 => 11, - 0x5B2 => 12, - 0x5B3 => 13, - 0x5B4 => 14, - 0x5B5 => 15, - 0x5B6 => 16, - 0x5B7 => 17, - 0x5B8 => 18, - 0x5B9 => 19, - 0x5BB => 20, - 0x5Bc => 21, - 0x5BD => 22, - 0x5BF => 23, - 0x5C1 => 24, - 0x5C2 => 25, - 0xFB1E => 26, - 0x64B => 27, - 0x64C => 28, - 0x64D => 29, - 0x64E => 30, - 0x64F => 31, - 0x650 => 32, - 0x651 => 33, - 0x652 => 34, - 0x670 => 35, - 0x711 => 36, - 0xC55 => 84, - 0xC56 => 91, - 0xE38 => 103, - 0xE39 => 103, - 0xE48 => 107, - 0xE49 => 107, - 0xE4A => 107, - 0xE4B => 107, - 0xEB8 => 118, - 0xEB9 => 118, - 0xEC8 => 122, - 0xEC9 => 122, - 0xECA => 122, - 0xECB => 122, - 0xF71 => 129, - 0xF72 => 130, - 0xF7A => 130, - 0xF7B => 130, - 0xF7C => 130, - 0xF7D => 130, - 0xF80 => 130, - 0xF74 => 132, - 0x321 => 202, - 0x322 => 202, - 0x327 => 202, - 0x328 => 202, - 0x31B => 216, - 0xF39 => 216, - 0x1D165 => 216, - 0x1D166 => 216, - 0x1D16E => 216, - 0x1D16F => 216, - 0x1D170 => 216, - 0x1D171 => 216, - 0x1D172 => 216, - 0x302A => 218, - 0x316 => 220, - 0x317 => 220, - 0x318 => 220, - 0x319 => 220, - 0x31C => 220, - 0x31D => 220, - 0x31E => 220, - 0x31F => 220, - 0x320 => 220, - 0x323 => 220, - 0x324 => 220, - 0x325 => 220, - 0x326 => 220, - 0x329 => 220, - 0x32A => 220, - 0x32B => 220, - 0x32C => 220, - 0x32D => 220, - 0x32E => 220, - 0x32F => 220, - 0x330 => 220, - 0x331 => 220, - 0x332 => 220, - 0x333 => 220, - 0x339 => 220, - 0x33A => 220, - 0x33B => 220, - 0x33C => 220, - 0x347 => 220, - 0x348 => 220, - 0x349 => 220, - 0x34D => 220, - 0x34E => 220, - 0x353 => 220, - 0x354 => 220, - 0x355 => 220, - 0x356 => 220, - 0x591 => 220, - 0x596 => 220, - 0x59B => 220, - 0x5A3 => 220, - 0x5A4 => 220, - 0x5A5 => 220, - 0x5A6 => 220, - 0x5A7 => 220, - 0x5AA => 220, - 0x655 => 220, - 0x656 => 220, - 0x6E3 => 220, - 0x6EA => 220, - 0x6ED => 220, - 0x731 => 220, - 0x734 => 220, - 0x737 => 220, - 0x738 => 220, - 0x739 => 220, - 0x73B => 220, - 0x73C => 220, - 0x73E => 220, - 0x742 => 220, - 0x744 => 220, - 0x746 => 220, - 0x748 => 220, - 0x952 => 220, - 0xF18 => 220, - 0xF19 => 220, - 0xF35 => 220, - 0xF37 => 220, - 0xFC6 => 220, - 0x193B => 220, - 0x20E8 => 220, - 0x1D17B => 220, - 0x1D17C => 220, - 0x1D17D => 220, - 0x1D17E => 220, - 0x1D17F => 220, - 0x1D180 => 220, - 0x1D181 => 220, - 0x1D182 => 220, - 0x1D18A => 220, - 0x1D18B => 220, - 0x59A => 222, - 0x5AD => 222, - 0x1929 => 222, - 0x302D => 222, - 0x302E => 224, - 0x302F => 224, - 0x1D16D => 226, - 0x5AE => 228, - 0x18A9 => 228, - 0x302B => 228, - 0x300 => 230, - 0x301 => 230, - 0x302 => 230, - 0x303 => 230, - 0x304 => 230, - 0x305 => 230, - 0x306 => 230, - 0x307 => 230, - 0x308 => 230, - 0x309 => 230, - 0x30A => 230, - 0x30B => 230, - 0x30C => 230, - 0x30D => 230, - 0x30E => 230, - 0x30F => 230, - 0x310 => 230, - 0x311 => 230, - 0x312 => 230, - 0x313 => 230, - 0x314 => 230, - 0x33D => 230, - 0x33E => 230, - 0x33F => 230, - 0x340 => 230, - 0x341 => 230, - 0x342 => 230, - 0x343 => 230, - 0x344 => 230, - 0x346 => 230, - 0x34A => 230, - 0x34B => 230, - 0x34C => 230, - 0x350 => 230, - 0x351 => 230, - 0x352 => 230, - 0x357 => 230, - 0x363 => 230, - 0x364 => 230, - 0x365 => 230, - 0x366 => 230, - 0x367 => 230, - 0x368 => 230, - 0x369 => 230, - 0x36A => 230, - 0x36B => 230, - 0x36C => 230, - 0x36D => 230, - 0x36E => 230, - 0x36F => 230, - 0x483 => 230, - 0x484 => 230, - 0x485 => 230, - 0x486 => 230, - 0x592 => 230, - 0x593 => 230, - 0x594 => 230, - 0x595 => 230, - 0x597 => 230, - 0x598 => 230, - 0x599 => 230, - 0x59C => 230, - 0x59D => 230, - 0x59E => 230, - 0x59F => 230, - 0x5A0 => 230, - 0x5A1 => 230, - 0x5A8 => 230, - 0x5A9 => 230, - 0x5AB => 230, - 0x5AC => 230, - 0x5AF => 230, - 0x5C4 => 230, - 0x610 => 230, - 0x611 => 230, - 0x612 => 230, - 0x613 => 230, - 0x614 => 230, - 0x615 => 230, - 0x653 => 230, - 0x654 => 230, - 0x657 => 230, - 0x658 => 230, - 0x6D6 => 230, - 0x6D7 => 230, - 0x6D8 => 230, - 0x6D9 => 230, - 0x6DA => 230, - 0x6DB => 230, - 0x6DC => 230, - 0x6DF => 230, - 0x6E0 => 230, - 0x6E1 => 230, - 0x6E2 => 230, - 0x6E4 => 230, - 0x6E7 => 230, - 0x6E8 => 230, - 0x6EB => 230, - 0x6EC => 230, - 0x730 => 230, - 0x732 => 230, - 0x733 => 230, - 0x735 => 230, - 0x736 => 230, - 0x73A => 230, - 0x73D => 230, - 0x73F => 230, - 0x740 => 230, - 0x741 => 230, - 0x743 => 230, - 0x745 => 230, - 0x747 => 230, - 0x749 => 230, - 0x74A => 230, - 0x951 => 230, - 0x953 => 230, - 0x954 => 230, - 0xF82 => 230, - 0xF83 => 230, - 0xF86 => 230, - 0xF87 => 230, - 0x170D => 230, - 0x193A => 230, - 0x20D0 => 230, - 0x20D1 => 230, - 0x20D4 => 230, - 0x20D5 => 230, - 0x20D6 => 230, - 0x20D7 => 230, - 0x20DB => 230, - 0x20DC => 230, - 0x20E1 => 230, - 0x20E7 => 230, - 0x20E9 => 230, - 0xFE20 => 230, - 0xFE21 => 230, - 0xFE22 => 230, - 0xFE23 => 230, - 0x1D185 => 230, - 0x1D186 => 230, - 0x1D187 => 230, - 0x1D189 => 230, - 0x1D188 => 230, - 0x1D1AA => 230, - 0x1D1AB => 230, - 0x1D1AC => 230, - 0x1D1AD => 230, - 0x315 => 232, - 0x31A => 232, - 0x302C => 232, - 0x35F => 233, - 0x362 => 233, - 0x35D => 234, - 0x35E => 234, - 0x360 => 234, - 0x361 => 234, - 0x345 => 240 - ); - // }}} - - // {{{ properties - /** - * @var string - * @access private - */ - private $_punycode_prefix = 'xn--'; - - /** - * @access private - */ - private $_invalid_ucs = 0x80000000; - - /** - * @access private - */ - private $_max_ucs = 0x10FFFF; - - /** - * @var int - * @access private - */ - private $_base = 36; - - /** - * @var int - * @access private - */ - private $_tmin = 1; - - /** - * @var int - * @access private - */ - private $_tmax = 26; - - /** - * @var int - * @access private - */ - private $_skew = 38; - - /** - * @var int - * @access private - */ - private $_damp = 700; - - /** - * @var int - * @access private - */ - private $_initial_bias = 72; - - /** - * @var int - * @access private - */ - private $_initial_n = 0x80; - - /** - * @var int - * @access private - */ - private $_slast; - - /** - * @access private - */ - private $_sbase = 0xAC00; - - /** - * @access private - */ - private $_lbase = 0x1100; - - /** - * @access private - */ - private $_vbase = 0x1161; - - /** - * @access private - */ - private $_tbase = 0x11a7; - - /** - * @var int - * @access private - */ - private $_lcount = 19; - - /** - * @var int - * @access private - */ - private $_vcount = 21; - - /** - * @var int - * @access private - */ - private $_tcount = 28; - - /** - * vcount * tcount - * - * @var int - * @access private - */ - private $_ncount = 588; - - /** - * lcount * tcount * vcount - * - * @var int - * @access private - */ - private $_scount = 11172; - - /** - * Default encoding for encode()'s input and decode()'s output is UTF-8; - * Other possible encodings are ucs4_string and ucs4_array - * See {@link setParams()} for how to select these - * - * @var bool - * @access private - */ - private $_api_encoding = 'utf8'; - - /** - * Overlong UTF-8 encodings are forbidden - * - * @var bool - * @access private - */ - private $_allow_overlong = false; - - /** - * Behave strict or not - * - * @var bool - * @access private - */ - private $_strict_mode = false; - - /** - * IDNA-version to use - * - * Values are "2003" and "2008". - * Defaults to "2003", since that was the original version and for - * compatibility with previous versions of this library. - * If you need to encode "new" characters like the German "Eszett", - * please switch to 2008 first before encoding. - * - * @var bool - * @access private - */ - private $_version = '2003'; - - /** - * Cached value indicating whether or not mbstring function overloading is - * on for strlen - * - * This is cached for optimal performance. - * - * @var boolean - * @see Net_IDNA2::_byteLength() - */ - private static $_mb_string_overload = null; - // }}} - - - // {{{ constructor - /** - * Constructor - * - * @param array $options Options to initialise the object with - * - * @access public - * @see setParams() - */ - public function __construct($options = null) - { - $this->_slast = $this->_sbase + $this->_lcount * $this->_vcount * $this->_tcount; - - if (is_array($options)) { - $this->setParams($options); - } - - // populate mbstring overloading cache if not set - if (self::$_mb_string_overload === null) { - self::$_mb_string_overload = (extension_loaded('mbstring') - && (ini_get('mbstring.func_overload') & 0x02) === 0x02); - } - } - // }}} - - - /** - * Sets a new option value. Available options and values: - * - * [utf8 - Use either UTF-8 or ISO-8859-1 as input (true for UTF-8, false - * otherwise); The output is always UTF-8] - * [overlong - Unicode does not allow unnecessarily long encodings of chars, - * to allow this, set this parameter to true, else to false; - * default is false.] - * [strict - true: strict mode, good for registration purposes - Causes errors - * on failures; false: loose mode, ideal for "wildlife" applications - * by silently ignoring errors and returning the original input instead] - * - * @param mixed $option Parameter to set (string: single parameter; array of Parameter => Value pairs) - * @param string $value Value to use (if parameter 1 is a string) - * - * @return boolean true on success, false otherwise - * @access public - */ - public function setParams($option, $value = false) - { - if (!is_array($option)) { - $option = array($option => $value); - } - - foreach ($option as $k => $v) { - switch ($k) { - case 'encoding': - switch ($v) { - case 'utf8': - case 'ucs4_string': - case 'ucs4_array': - $this->_api_encoding = $v; - break; - - default: - throw new InvalidArgumentException('Set Parameter: Unknown parameter '.$v.' for option '.$k); - } - - break; - - case 'overlong': - $this->_allow_overlong = ($v) ? true : false; - break; - - case 'strict': - $this->_strict_mode = ($v) ? true : false; - break; - - case 'version': - if (in_array($v, array('2003', '2008'))) { - $this->_version = $v; - } else { - throw new InvalidArgumentException('Set Parameter: Invalid parameter '.$v.' for option '.$k); - } - break; - - default: - return false; - } - } - - return true; - } - - /** - * Encode a given UTF-8 domain name. - * - * @param string $decoded Domain name (UTF-8 or UCS-4) - * @param string $one_time_encoding Desired input encoding, see {@link set_parameter} - * If not given will use default-encoding - * - * @return string Encoded Domain name (ACE string) - * @return mixed processed string - * @throws Exception - * @access public - */ - public function encode($decoded, $one_time_encoding = false) - { - // Forcing conversion of input to UCS4 array - // If one time encoding is given, use this, else the objects property - switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) { - case 'utf8': - $decoded = $this->_utf8_to_ucs4($decoded); - break; - case 'ucs4_string': - $decoded = $this->_ucs4_string_to_ucs4($decoded); - case 'ucs4_array': // No break; before this line. Catch case, but do nothing - break; - default: - throw new InvalidArgumentException('Unsupported input format'); - } - - // No input, no output, what else did you expect? - if (empty($decoded)) return ''; - - // Anchors for iteration - $last_begin = 0; - // Output string - $output = ''; - - foreach ($decoded as $k => $v) { - // Make sure to use just the plain dot - switch($v) { - case 0x3002: - case 0xFF0E: - case 0xFF61: - $decoded[$k] = 0x2E; - // It's right, no break here - // The codepoints above have to be converted to dots anyway - - // Stumbling across an anchoring character - case 0x2E: - case 0x2F: - case 0x3A: - case 0x3F: - case 0x40: - // Neither email addresses nor URLs allowed in strict mode - if ($this->_strict_mode) { - throw new InvalidArgumentException('Neither email addresses nor URLs are allowed in strict mode.'); - } - // Skip first char - if ($k) { - $encoded = ''; - $encoded = $this->_encode(array_slice($decoded, $last_begin, (($k)-$last_begin))); - if ($encoded) { - $output .= $encoded; - } else { - $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k)-$last_begin))); - } - $output .= chr($decoded[$k]); - } - $last_begin = $k + 1; - } - } - // Catch the rest of the string - if ($last_begin) { - $inp_len = sizeof($decoded); - $encoded = ''; - $encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len)-$last_begin))); - if ($encoded) { - $output .= $encoded; - } else { - $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len)-$last_begin))); - } - return $output; - } - - if ($output = $this->_encode($decoded)) { - return $output; - } - - return $this->_ucs4_to_utf8($decoded); - } - - /** - * Decode a given ACE domain name. - * - * @param string $input Domain name (ACE string) - * @param string $one_time_encoding Desired output encoding, see {@link set_parameter} - * - * @return string Decoded Domain name (UTF-8 or UCS-4) - * @throws Exception - * @access public - */ - public function decode($input, $one_time_encoding = false) - { - // Optionally set - if ($one_time_encoding) { - switch ($one_time_encoding) { - case 'utf8': - case 'ucs4_string': - case 'ucs4_array': - break; - default: - throw new InvalidArgumentException('Unknown encoding '.$one_time_encoding); - } - } - // Make sure to drop any newline characters around - $input = trim($input); - - // Negotiate input and try to determine, wether it is a plain string, - // an email address or something like a complete URL - if (strpos($input, '@')) { // Maybe it is an email address - // No no in strict mode - if ($this->_strict_mode) { - throw new InvalidArgumentException('Only simple domain name parts can be handled in strict mode'); - } - list($email_pref, $input) = explode('@', $input, 2); - $arr = explode('.', $input); - foreach ($arr as $k => $v) { - $conv = $this->_decode($v); - if ($conv) $arr[$k] = $conv; - } - $return = $email_pref . '@' . join('.', $arr); - } elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters) - // No no in strict mode - if ($this->_strict_mode) { - throw new InvalidArgumentException('Only simple domain name parts can be handled in strict mode'); - } - - $parsed = parse_url($input); - if (isset($parsed['host'])) { - $arr = explode('.', $parsed['host']); - foreach ($arr as $k => $v) { - $conv = $this->_decode($v); - if ($conv) $arr[$k] = $conv; - } - $parsed['host'] = join('.', $arr); - if (isset($parsed['scheme'])) { - $parsed['scheme'] .= (strtolower($parsed['scheme']) == 'mailto') ? ':' : '://'; - } - $return = $this->_unparse_url($parsed); - } else { // parse_url seems to have failed, try without it - $arr = explode('.', $input); - foreach ($arr as $k => $v) { - $conv = $this->_decode($v); - if ($conv) $arr[$k] = $conv; - } - $return = join('.', $arr); - } - } else { // Otherwise we consider it being a pure domain name string - $return = $this->_decode($input); - } - // The output is UTF-8 by default, other output formats need conversion here - // If one time encoding is given, use this, else the objects property - switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) { - case 'utf8': - return $return; - break; - case 'ucs4_string': - return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return)); - break; - case 'ucs4_array': - return $this->_utf8_to_ucs4($return); - break; - default: - throw new InvalidArgumentException('Unsupported output format'); - } - } - - - // {{{ private - /** - * Opposite function to parse_url() - * - * Inspired by code from comments of php.net-documentation for parse_url() - * - * @param array $parts_arr parts (strings) as returned by parse_url() - * - * @return string - * @access private - */ - private function _unparse_url($parts_arr) - { - if (!empty($parts_arr['scheme'])) { - $ret_url = $parts_arr['scheme']; - } - if (!empty($parts_arr['user'])) { - $ret_url .= $parts_arr['user']; - if (!empty($parts_arr['pass'])) { - $ret_url .= ':' . $parts_arr['pass']; - } - $ret_url .= '@'; - } - $ret_url .= $parts_arr['host']; - if (!empty($parts_arr['port'])) { - $ret_url .= ':' . $parts_arr['port']; - } - $ret_url .= $parts_arr['path']; - if (!empty($parts_arr['query'])) { - $ret_url .= '?' . $parts_arr['query']; - } - if (!empty($parts_arr['fragment'])) { - $ret_url .= '#' . $parts_arr['fragment']; - } - return $ret_url; - } - - /** - * The actual encoding algorithm. - * - * @param string $decoded Decoded string which should be encoded - * - * @return string Encoded string - * @throws Exception - * @access private - */ - private function _encode($decoded) - { - // We cannot encode a domain name containing the Punycode prefix - $extract = self::_byteLength($this->_punycode_prefix); - $check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix); - $check_deco = array_slice($decoded, 0, $extract); - - if ($check_pref == $check_deco) { - throw new InvalidArgumentException('This is already a punycode string'); - } - - // We will not try to encode strings consisting of basic code points only - $encodable = false; - foreach ($decoded as $k => $v) { - if ($v > 0x7a) { - $encodable = true; - break; - } - } - if (!$encodable) { - if ($this->_strict_mode) { - throw new InvalidArgumentException('The given string does not contain encodable chars'); - } - - return false; - } - - // Do NAMEPREP - $decoded = $this->_nameprep($decoded); - - $deco_len = count($decoded); - - // Empty array - if (!$deco_len) { - return false; - } - - // How many chars have been consumed - $codecount = 0; - - // Start with the prefix; copy it to output - $encoded = $this->_punycode_prefix; - - $encoded = ''; - // Copy all basic code points to output - for ($i = 0; $i < $deco_len; ++$i) { - $test = $decoded[$i]; - // Will match [0-9a-zA-Z-] - if ((0x2F < $test && $test < 0x40) - || (0x40 < $test && $test < 0x5B) - || (0x60 < $test && $test <= 0x7B) - || (0x2D == $test) - ) { - $encoded .= chr($decoded[$i]); - $codecount++; - } - } - - // All codepoints were basic ones - if ($codecount == $deco_len) { - return $encoded; - } - - // Start with the prefix; copy it to output - $encoded = $this->_punycode_prefix . $encoded; - - // If we have basic code points in output, add an hyphen to the end - if ($codecount) { - $encoded .= '-'; - } - - // Now find and encode all non-basic code points - $is_first = true; - $cur_code = $this->_initial_n; - $bias = $this->_initial_bias; - $delta = 0; - - while ($codecount < $deco_len) { - // Find the smallest code point >= the current code point and - // remember the last ouccrence of it in the input - for ($i = 0, $next_code = $this->_max_ucs; $i < $deco_len; $i++) { - if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) { - $next_code = $decoded[$i]; - } - } - - $delta += ($next_code - $cur_code) * ($codecount + 1); - $cur_code = $next_code; - - // Scan input again and encode all characters whose code point is $cur_code - for ($i = 0; $i < $deco_len; $i++) { - if ($decoded[$i] < $cur_code) { - $delta++; - } else if ($decoded[$i] == $cur_code) { - for ($q = $delta, $k = $this->_base; 1; $k += $this->_base) { - $t = ($k <= $bias)? - $this->_tmin : - (($k >= $bias + $this->_tmax)? $this->_tmax : $k - $bias); - - if ($q < $t) { - break; - } - - $encoded .= $this->_encodeDigit(ceil($t + (($q - $t) % ($this->_base - $t)))); - $q = ($q - $t) / ($this->_base - $t); - } - - $encoded .= $this->_encodeDigit($q); - $bias = $this->_adapt($delta, $codecount + 1, $is_first); - $codecount++; - $delta = 0; - $is_first = false; - } - } - - $delta++; - $cur_code++; - } - - return $encoded; - } - - /** - * The actual decoding algorithm. - * - * @param string $encoded Encoded string which should be decoded - * - * @return string Decoded string - * @throws Exception - * @access private - */ - private function _decode($encoded) - { - // We do need to find the Punycode prefix - if (!preg_match('!^' . preg_quote($this->_punycode_prefix, '!') . '!', $encoded)) { - return false; - } - - $encode_test = preg_replace('!^' . preg_quote($this->_punycode_prefix, '!') . '!', '', $encoded); - - // If nothing left after removing the prefix, it is hopeless - if (!$encode_test) { - return false; - } - - // Find last occurence of the delimiter - $delim_pos = strrpos($encoded, '-'); - - if ($delim_pos > self::_byteLength($this->_punycode_prefix)) { - for ($k = self::_byteLength($this->_punycode_prefix); $k < $delim_pos; ++$k) { - $decoded[] = ord($encoded{$k}); - } - } else { - $decoded = array(); - } - - $deco_len = count($decoded); - $enco_len = self::_byteLength($encoded); - - // Wandering through the strings; init - $is_first = true; - $bias = $this->_initial_bias; - $idx = 0; - $char = $this->_initial_n; - - for ($enco_idx = ($delim_pos)? ($delim_pos + 1) : 0; $enco_idx < $enco_len; ++$deco_len) { - for ($old_idx = $idx, $w = 1, $k = $this->_base; 1 ; $k += $this->_base) { - $digit = $this->_decodeDigit($encoded{$enco_idx++}); - $idx += $digit * $w; - - $t = ($k <= $bias) ? - $this->_tmin : - (($k >= $bias + $this->_tmax)? $this->_tmax : ($k - $bias)); - - if ($digit < $t) { - break; - } - - $w = (int)($w * ($this->_base - $t)); - } - - $bias = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first); - $is_first = false; - $char += (int) ($idx / ($deco_len + 1)); - $idx %= ($deco_len + 1); - - if ($deco_len > 0) { - // Make room for the decoded char - for ($i = $deco_len; $i > $idx; $i--) { - $decoded[$i] = $decoded[($i - 1)]; - } - } - - $decoded[$idx++] = $char; - } - - return $this->_ucs4_to_utf8($decoded); - } - - /** - * Adapt the bias according to the current code point and position. - * - * @param int $delta ... - * @param int $npoints ... - * @param boolean $is_first ... - * - * @return int - * @access private - */ - private function _adapt($delta, $npoints, $is_first) - { - $delta = (int) ($is_first ? ($delta / $this->_damp) : ($delta / 2)); - $delta += (int) ($delta / $npoints); - - for ($k = 0; $delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2; $k += $this->_base) { - $delta = (int) ($delta / ($this->_base - $this->_tmin)); - } - - return (int) ($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew)); - } - - /** - * Encoding a certain digit. - * - * @param int $d One digit to encode - * - * @return char Encoded digit - * @access private - */ - private function _encodeDigit($d) - { - return chr($d + 22 + 75 * ($d < 26)); - } - - /** - * Decode a certain digit. - * - * @param char $cp One digit (character) to decode - * - * @return int Decoded digit - * @access private - */ - private function _decodeDigit($cp) - { - $cp = ord($cp); - return ($cp - 48 < 10)? $cp - 22 : (($cp - 65 < 26)? $cp - 65 : (($cp - 97 < 26)? $cp - 97 : $this->_base)); - } - - /** - * Do Nameprep according to RFC3491 and RFC3454. - * - * @param array $input Unicode Characters - * - * @return string Unicode Characters, Nameprep'd - * @throws Exception - * @access private - */ - private function _nameprep($input) - { - $output = array(); - - // Walking through the input array, performing the required steps on each of - // the input chars and putting the result into the output array - // While mapping required chars we apply the cannonical ordering - - foreach ($input as $v) { - // Map to nothing == skip that code point - if (in_array($v, self::$_np_map_nothing)) { - continue; - } - - // Try to find prohibited input - if (in_array($v, self::$_np_prohibit) || in_array($v, self::$_general_prohibited)) { - throw new Net_IDNA2_Exception_Nameprep('Prohibited input U+' . sprintf('%08X', $v)); - } - - foreach (self::$_np_prohibit_ranges as $range) { - if ($range[0] <= $v && $v <= $range[1]) { - throw new Net_IDNA2_Exception_Nameprep('Prohibited input U+' . sprintf('%08X', $v)); - } - } - - // Hangul syllable decomposition - if (0xAC00 <= $v && $v <= 0xD7AF) { - foreach ($this->_hangulDecompose($v) as $out) { - $output[] = $out; - } - } else if (($this->_version == '2003') && isset(self::$_np_replacemaps[$v])) { - // There's a decomposition mapping for that code point - // Decompositions only in version 2003 (original) of IDNA - foreach ($this->_applyCannonicalOrdering(self::$_np_replacemaps[$v]) as $out) { - $output[] = $out; - } - } else { - $output[] = $v; - } - } - - // Combine code points - - $last_class = 0; - $last_starter = 0; - $out_len = count($output); - - for ($i = 0; $i < $out_len; ++$i) { - $class = $this->_getCombiningClass($output[$i]); - - if ((!$last_class || $last_class != $class) && $class) { - // Try to match - $seq_len = $i - $last_starter; - $out = $this->_combine(array_slice($output, $last_starter, $seq_len)); - - // On match: Replace the last starter with the composed character and remove - // the now redundant non-starter(s) - if ($out) { - $output[$last_starter] = $out; - - if (count($out) != $seq_len) { - for ($j = $i + 1; $j < $out_len; ++$j) { - $output[$j - 1] = $output[$j]; - } - - unset($output[$out_len]); - } - - // Rewind the for loop by one, since there can be more possible compositions - $i--; - $out_len--; - $last_class = ($i == $last_starter)? 0 : $this->_getCombiningClass($output[$i - 1]); - - continue; - } - } - - // The current class is 0 - if (!$class) { - $last_starter = $i; - } - - $last_class = $class; - } - - return $output; - } - - /** - * Decomposes a Hangul syllable - * (see http://www.unicode.org/unicode/reports/tr15/#Hangul). - * - * @param integer $char 32bit UCS4 code point - * - * @return array Either Hangul Syllable decomposed or original 32bit - * value as one value array - * @access private - */ - private function _hangulDecompose($char) - { - $sindex = $char - $this->_sbase; - - if ($sindex < 0 || $sindex >= $this->_scount) { - return array($char); - } - - $result = array(); - $T = $this->_tbase + $sindex % $this->_tcount; - $result[] = (int)($this->_lbase + $sindex / $this->_ncount); - $result[] = (int)($this->_vbase + ($sindex % $this->_ncount) / $this->_tcount); - - if ($T != $this->_tbase) { - $result[] = $T; - } - - return $result; - } - - /** - * Ccomposes a Hangul syllable - * (see http://www.unicode.org/unicode/reports/tr15/#Hangul). - * - * @param array $input Decomposed UCS4 sequence - * - * @return array UCS4 sequence with syllables composed - * @access private - */ - private function _hangulCompose($input) - { - $inp_len = count($input); - - if (!$inp_len) { - return array(); - } - - $result = array(); - $last = $input[0]; - $result[] = $last; // copy first char from input to output - - for ($i = 1; $i < $inp_len; ++$i) { - $char = $input[$i]; - - // Find out, wether two current characters from L and V - $lindex = $last - $this->_lbase; - - if (0 <= $lindex && $lindex < $this->_lcount) { - $vindex = $char - $this->_vbase; - - if (0 <= $vindex && $vindex < $this->_vcount) { - // create syllable of form LV - $last = ($this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount); - $out_off = count($result) - 1; - $result[$out_off] = $last; // reset last - - // discard char - continue; - } - } - - // Find out, wether two current characters are LV and T - $sindex = $last - $this->_sbase; - - if (0 <= $sindex && $sindex < $this->_scount && ($sindex % $this->_tcount) == 0) { - $tindex = $char - $this->_tbase; - - if (0 <= $tindex && $tindex <= $this->_tcount) { - // create syllable of form LVT - $last += $tindex; - $out_off = count($result) - 1; - $result[$out_off] = $last; // reset last - - // discard char - continue; - } - } - - // if neither case was true, just add the character - $last = $char; - $result[] = $char; - } - - return $result; - } - - /** - * Returns the combining class of a certain wide char. - * - * @param integer $char Wide char to check (32bit integer) - * - * @return integer Combining class if found, else 0 - * @access private - */ - private function _getCombiningClass($char) - { - return isset(self::$_np_norm_combcls[$char])? self::$_np_norm_combcls[$char] : 0; - } - - /** - * Apllies the cannonical ordering of a decomposed UCS4 sequence. - * - * @param array $input Decomposed UCS4 sequence - * - * @return array Ordered USC4 sequence - * @access private - */ - private function _applyCannonicalOrdering($input) - { - $swap = true; - $size = count($input); - - while ($swap) { - $swap = false; - $last = $this->_getCombiningClass($input[0]); - - for ($i = 0; $i < $size - 1; ++$i) { - $next = $this->_getCombiningClass($input[$i + 1]); - - if ($next != 0 && $last > $next) { - // Move item leftward until it fits - for ($j = $i + 1; $j > 0; --$j) { - if ($this->_getCombiningClass($input[$j - 1]) <= $next) { - break; - } - - $t = $input[$j]; - $input[$j] = $input[$j - 1]; - $input[$j - 1] = $t; - $swap = 1; - } - - // Reentering the loop looking at the old character again - $next = $last; - } - - $last = $next; - } - } - - return $input; - } - - /** - * Do composition of a sequence of starter and non-starter. - * - * @param array $input UCS4 Decomposed sequence - * - * @return array Ordered USC4 sequence - * @access private - */ - private function _combine($input) - { - $inp_len = count($input); - - // Is it a Hangul syllable? - if (1 != $inp_len) { - $hangul = $this->_hangulCompose($input); - - // This place is probably wrong - if (count($hangul) != $inp_len) { - return $hangul; - } - } - - foreach (self::$_np_replacemaps as $np_src => $np_target) { - if ($np_target[0] != $input[0]) { - continue; - } - - if (count($np_target) != $inp_len) { - continue; - } - - $hit = false; - - foreach ($input as $k2 => $v2) { - if ($v2 == $np_target[$k2]) { - $hit = true; - } else { - $hit = false; - break; - } - } - - if ($hit) { - return $np_src; - } - } - - return false; - } - - /** - * This converts an UTF-8 encoded string to its UCS-4 (array) representation - * By talking about UCS-4 we mean arrays of 32bit integers representing - * each of the "chars". This is due to PHP not being able to handle strings with - * bit depth different from 8. This applies to the reverse method _ucs4_to_utf8(), too. - * The following UTF-8 encodings are supported: - * - * bytes bits representation - * 1 7 0xxxxxxx - * 2 11 110xxxxx 10xxxxxx - * 3 16 1110xxxx 10xxxxxx 10xxxxxx - * 4 21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - * 5 26 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - * 6 31 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - * - * Each x represents a bit that can be used to store character data. - * - * @param string $input utf8-encoded string - * - * @return array ucs4-encoded array - * @throws Exception - * @access private - */ - private function _utf8_to_ucs4($input) - { - $output = array(); - $out_len = 0; - $inp_len = self::_byteLength($input, '8bit'); - $mode = 'next'; - $test = 'none'; - for ($k = 0; $k < $inp_len; ++$k) { - $v = ord($input{$k}); // Extract byte from input string - - if ($v < 128) { // We found an ASCII char - put into stirng as is - $output[$out_len] = $v; - ++$out_len; - if ('add' == $mode) { - throw new UnexpectedValueException('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k); - } - continue; - } - if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char - $start_byte = $v; - $mode = 'add'; - $test = 'range'; - if ($v >> 5 == 6) { // &110xxxxx 10xxxxx - $next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left - $v = ($v - 192) << 6; - } elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx - $next_byte = 1; - $v = ($v - 224) << 12; - } elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - $next_byte = 2; - $v = ($v - 240) << 18; - } elseif ($v >> 2 == 62) { // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - $next_byte = 3; - $v = ($v - 248) << 24; - } elseif ($v >> 1 == 126) { // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - $next_byte = 4; - $v = ($v - 252) << 30; - } else { - throw new UnexpectedValueException('This might be UTF-8, but I don\'t understand it at byte '.$k); - } - if ('add' == $mode) { - $output[$out_len] = (int) $v; - ++$out_len; - continue; - } - } - if ('add' == $mode) { - if (!$this->_allow_overlong && $test == 'range') { - $test = 'none'; - if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) { - throw new OutOfRangeException('Bogus UTF-8 character detected (out of legal range) at byte '.$k); - } - } - if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx - $v = ($v - 128) << ($next_byte * 6); - $output[($out_len - 1)] += $v; - --$next_byte; - } else { - throw new UnexpectedValueException('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k); - } - if ($next_byte < 0) { - $mode = 'next'; - } - } - } // for - return $output; - } - - /** - * Convert UCS-4 array into UTF-8 string - * - * @param array $input ucs4-encoded array - * - * @return string utf8-encoded string - * @throws Exception - * @access private - */ - private function _ucs4_to_utf8($input) - { - $output = ''; - - foreach ($input as $v) { - // $v = ord($v); - - if ($v < 128) { - // 7bit are transferred literally - $output .= chr($v); - } else if ($v < 1 << 11) { - // 2 bytes - $output .= chr(192 + ($v >> 6)) - . chr(128 + ($v & 63)); - } else if ($v < 1 << 16) { - // 3 bytes - $output .= chr(224 + ($v >> 12)) - . chr(128 + (($v >> 6) & 63)) - . chr(128 + ($v & 63)); - } else if ($v < 1 << 21) { - // 4 bytes - $output .= chr(240 + ($v >> 18)) - . chr(128 + (($v >> 12) & 63)) - . chr(128 + (($v >> 6) & 63)) - . chr(128 + ($v & 63)); - } else if ($v < 1 << 26) { - // 5 bytes - $output .= chr(248 + ($v >> 24)) - . chr(128 + (($v >> 18) & 63)) - . chr(128 + (($v >> 12) & 63)) - . chr(128 + (($v >> 6) & 63)) - . chr(128 + ($v & 63)); - } else if ($v < 1 << 31) { - // 6 bytes - $output .= chr(252 + ($v >> 30)) - . chr(128 + (($v >> 24) & 63)) - . chr(128 + (($v >> 18) & 63)) - . chr(128 + (($v >> 12) & 63)) - . chr(128 + (($v >> 6) & 63)) - . chr(128 + ($v & 63)); - } else { - throw new UnexpectedValueException('Conversion from UCS-4 to UTF-8 failed: malformed input'); - } - } - - return $output; - } - - /** - * Convert UCS-4 array into UCS-4 string - * - * @param array $input ucs4-encoded array - * - * @return string ucs4-encoded string - * @throws Exception - * @access private - */ - private function _ucs4_to_ucs4_string($input) - { - $output = ''; - // Take array values and split output to 4 bytes per value - // The bit mask is 255, which reads &11111111 - foreach ($input as $v) { - $output .= ($v & (255 << 24) >> 24) . ($v & (255 << 16) >> 16) . ($v & (255 << 8) >> 8) . ($v & 255); - } - return $output; - } - - /** - * Convert UCS-4 string into UCS-4 array - * - * @param string $input ucs4-encoded string - * - * @return array ucs4-encoded array - * @throws InvalidArgumentException - * @access private - */ - private function _ucs4_string_to_ucs4($input) - { - $output = array(); - - $inp_len = self::_byteLength($input); - // Input length must be dividable by 4 - if ($inp_len % 4) { - throw new InvalidArgumentException('Input UCS4 string is broken'); - } - - // Empty input - return empty output - if (!$inp_len) { - return $output; - } - - for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) { - // Increment output position every 4 input bytes - if (!$i % 4) { - $out_len++; - $output[$out_len] = 0; - } - $output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) ); - } - return $output; - } - - /** - * Echo hex representation of UCS4 sequence. - * - * @param array $input UCS4 sequence - * @param boolean $include_bit Include bitmask in output - * - * @return void - * @static - * @access private - */ - private static function _showHex($input, $include_bit = false) - { - foreach ($input as $k => $v) { - echo '[', $k, '] => ', sprintf('%X', $v); - - if ($include_bit) { - echo ' (', Net_IDNA2::_showBitmask($v), ')'; - } - - echo "\n"; - } - } - - /** - * Gives you a bit representation of given Byte (8 bits), Word (16 bits) or DWord (32 bits) - * Output width is automagically determined - * - * @param int $octet ... - * - * @return string Bitmask-representation - * @static - * @access private - */ - private static function _showBitmask($octet) - { - if ($octet >= (1 << 16)) { - $w = 31; - } else if ($octet >= (1 << 8)) { - $w = 15; - } else { - $w = 7; - } - - $return = ''; - - for ($i = $w; $i > -1; $i--) { - $return .= ($octet & (1 << $i))? '1' : '0'; - } - - return $return; - } - - /** - * Gets the length of a string in bytes even if mbstring function - * overloading is turned on - * - * @param string $string the string for which to get the length. - * - * @return integer the length of the string in bytes. - * - * @see Net_IDNA2::$_mb_string_overload - */ - private static function _byteLength($string) - { - if (self::$_mb_string_overload) { - return mb_strlen($string, '8bit'); - } - return strlen((binary)$string); - } - - // }}}} - - // {{{ factory - /** - * Attempts to return a concrete IDNA instance for either php4 or php5. - * - * @param array $params Set of paramaters - * - * @return Net_IDNA2 - * @access public - */ - function getInstance($params = array()) - { - return new Net_IDNA2($params); - } - // }}} - - // {{{ singleton - /** - * Attempts to return a concrete IDNA instance for either php4 or php5, - * only creating a new instance if no IDNA instance with the same - * parameters currently exists. - * - * @param array $params Set of paramaters - * - * @return object Net_IDNA2 - * @access public - */ - function singleton($params = array()) - { - static $instances; - if (!isset($instances)) { - $instances = array(); - } - - $signature = serialize($params); - if (!isset($instances[$signature])) { - $instances[$signature] = Net_IDNA2::getInstance($params); - } - - return $instances[$signature]; - } - // }}} -} - -?> diff --git a/program/lib/Net/IDNA2/Exception.php b/program/lib/Net/IDNA2/Exception.php deleted file mode 100644 index 72cb1ae75..000000000 --- a/program/lib/Net/IDNA2/Exception.php +++ /dev/null @@ -1,4 +0,0 @@ -<?php -class Net_IDNA2_Exception extends Exception -{ -} diff --git a/program/lib/Net/IDNA2/Exception/Nameprep.php b/program/lib/Net/IDNA2/Exception/Nameprep.php deleted file mode 100644 index 44cbd6bb9..000000000 --- a/program/lib/Net/IDNA2/Exception/Nameprep.php +++ /dev/null @@ -1,6 +0,0 @@ -<?php -require_once 'Net/IDNA2/Exception.php'; - -class Net_IDNA2_Exception_Nameprep extends Net_IDNA2_Exception -{ -} diff --git a/program/lib/Net/LDAP3.php b/program/lib/Net/LDAP3.php deleted file mode 100644 index 3202f5aaf..000000000 --- a/program/lib/Net/LDAP3.php +++ /dev/null @@ -1,2618 +0,0 @@ -<?php -/* - +-----------------------------------------------------------------------+ - | Net/LDAP3.php | - | | - | Based on code created by the Roundcube Webmail team. | - | | - | Copyright (C) 2006-2014, The Roundcube Dev Team | - | Copyright (C) 2012-2014, Kolab Systems AG | - | | - | Licensed under the GNU General Public License version 3 or | - | any later version with exceptions for plugins. | - | See the README file for a full license statement. | - | | - | PURPOSE: | - | Provide advanced functionality for accessing LDAP directories | - | | - +-----------------------------------------------------------------------+ - | Authors: Thomas Bruederli <roundcube@gmail.com> | - | Aleksander Machniak <machniak@kolabsys.com> | - | Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> | - +-----------------------------------------------------------------------+ -*/ - -require_once __DIR__ . '/LDAP3/Result.php'; - -/** - * Model class to access a LDAP directories - * - * @package Net_LDAP3 - */ -class Net_LDAP3 -{ - public $conn; - public $vlv_active = false; - - private $attribute_level_rights_map = array( - "r" => "read", - "s" => "search", - "w" => "write", - "o" => "delete", - "c" => "compare", - "W" => "write", - "O" => "delete" - ); - - private $entry_level_rights_map = array( - "a" => "add", - "d" => "delete", - "n" => "modrdn", - "v" => "read" - ); - - /* - * Manipulate configuration through the config_set and config_get methods. - * Available options: - * 'debug' => false, - * 'hosts' => array(), - * 'port' => 389, - * 'use_tls' => false, - * 'ldap_version' => 3, // using LDAPv3 - * 'auth_method' => '', // SASL authentication method (for proxy auth), e.g. DIGEST-MD5 - * 'numsub_filter' => '(objectClass=organizationalUnit)', // with VLV, we also use numSubOrdinates to query the total number of records. Set this filter to get all numSubOrdinates attributes for counting - * 'referrals' => false, // Sets the LDAP_OPT_REFERRALS option. Mostly used in multi-domain Active Directory setups - * 'network_timeout' => 10, // The timeout (in seconds) for connect + bind arrempts. This is only supported in PHP >= 5.3.0 with OpenLDAP 2.x - * 'sizelimit' => 0, // Enables you to limit the count of entries fetched. Setting this to 0 means no limit. - * 'timelimit' => 0, // Sets the number of seconds how long is spend on the search. Setting this to 0 means no limit. - * 'vlv' => false, // force VLV off - * 'config_root_dn' => 'cn=config', // Root DN to read config (e.g. vlv indexes) from - * 'service_bind_dn' => 'uid=kolab-service,ou=Special Users,dc=example,dc=org', - * 'service_bind_pw' => 'Welcome2KolabSystems', - * 'root_dn' => 'dc=example,dc=org', - */ - protected $config = array( - 'sizelimit' => 0, - 'timelimit' => 0, - ); - - protected $debug_level = false; - protected $list_page = 1; - protected $page_size = 10; - protected $cache; - - // Use public method config_set('log_hook', $callback) to have $callback be - // call_user_func'ed instead of the local log functions. - protected $_log_hook; - - // Use public method config_set('config_get_hook', $callback) to have - // $callback be call_user_func'ed instead of the local config_get function. - protected $_config_get_hook; - - // Use public method config_set('config_set_hook', $callback) to have - // $callback be call_user_func'ed instead of the local config_set function. - protected $_config_set_hook; - - // Not Yet Implemented - // Intended to allow hooking in for the purpose of caching. - protected $_result_hook; - - // Runtime. These are not the variables you're looking for. - protected $_current_bind_dn; - protected $_current_bind_pw; - protected $_current_host; - protected $_supported_control = array(); - protected $_vlv_indexes_and_searches; - - /** - * Constructor - * - * @param array $config Configuration parameters that have not already - * been initialized. For configuration parameters - * that have in fact been set, use the config_set() - * method after initialization. - */ - public function __construct($config = array()) - { - if (!empty($config) && is_array($config)) { - foreach ($config as $key => $value) { - if (empty($this->config[$key])) { - $setter = 'config_set_' . $key; - if (method_exists($this, $setter)) { - $this->$setter($value); - } - else if (isset($this->$key)) { - $this->$key = $value; - } - else { - $this->config[$key] = $value; - } - } - } - } - } - - /** - * Add multiple entries to the directory information tree in one go. - */ - public function add_entries($entries, $attributes = array()) - { - // If $entries is an associative array, it's keys are DNs and its - // values are the attributes for that DN. - // - // If $entries is a non-associative array, the attributes are expected - // to be positional in $attributes. - - $result_set = array(); - - if (array_keys($entries) == range(0, count($entries) - 1)) { - // $entries is sequential - if (count($entries) !== count($attributes)) { - $this->_error("Wrong entry/attribute count in " . __FUNCTION__); - return false; - } - - for ($i = 0; $i < count($entries); $i++) { - $result_set[$i] = $this->add_entry($entries[$i], $attributes[$i]); - } - } - else { - // $entries is associative - foreach ($entries as $entry_dn => $entry_attributes) { - if (array_keys($attributes) !== range(0, count($attributes)-1)) { - // $attributes is associative as well, let's merge these - // - // $entry_attributes takes precedence, so is in the second - // position in array_merge() - $entry_attributes = array_merge($attributes, $entry_attributes); - } - - $result_set[$entry_dn] = $this->add_entry($entry_dn, $entry_attributes); - } - } - - return $result_set; - } - - /** - * Add an entry to the directory information tree. - */ - public function add_entry($entry_dn, $attributes) - { - // TODO: - // - Get entry rdn attribute value from entry_dn and see if it exists in - // attributes -> issue warning if so (but not block the operation). - $this->_debug("Entry DN", $entry_dn); - $this->_debug("Attributes", $attributes); - - foreach ($attributes as $attr_name => $attr_value) { - if (empty($attr_value)) { - unset($attributes[$attr_name]); - } - } - - $this->_debug("C: Add $entry_dn: " . json_encode($attributes)); - - if (($add_result = ldap_add($this->conn, $entry_dn, $attributes)) == false) { - $this->_debug("S: " . ldap_error($this->conn)); - $this->_debug("S: Adding entry $entry_dn failed. " . ldap_error($this->conn)); - - return false; - } - - $this->_debug("LDAP: S: OK"); - - return true; - } - - /** - * Add replication agreements and initialize the consumer(s) for - * $domain_root_dn. - * - * Searches the configured replicas for any of the current domain/config - * databases, and uses this information to configure the additional - * replication for the (new) domain database (at $domain_root_dn). - * - * Very specific to Netscape-based directory servers, and currently also - * very specific to multi-master replication. - */ - public function add_replication_agreements($domain_root_dn) - { - $replica_hosts = $this->list_replicas(); - - if (empty($replica_hosts)) { - return; - } - - $result = $this->search($this->config_get('config_root_dn'), "(&(objectclass=nsDS5Replica)(nsDS5ReplicaType=3))", "sub"); - - if (!$result) { - $this->_debug("No replication configuration found."); - return; - } - - // Preserve the number of replicated databases we have, because the replication ID - // can be calculated from the number of databases replicated, and the number of - // servers. - $num_replica_dbs = $result->count(); - $replicas = $result->entries(true); - $max_replica_agreements = 0; - - foreach ($replicas as $replica_dn => $replica_attrs) { - $result = $this->search($replica_dn, "(objectclass=nsDS5ReplicationAgreement)", "sub"); - if ($result) { - if ($max_replica_agreements < $result->count()) { - $max_replica_agreements = $result->count(); - $max_replica_agreements_dn = $replica_dn; - } - } - } - - $max_repl_id = $num_replica_dbs * count($replica_hosts); - - $this->_debug("The current maximum replication ID is $max_repl_id"); - $this->_debug("The current maximum number of replication agreements for any database is $max_replica_agreements (for $max_replica_agreements_dn)"); - $this->_debug("With " . count($replica_hosts) . " replicas, the next is " . ($max_repl_id + 1) . " and the last one is " . ($max_repl_id + count($replica_hosts))); - - // Then add the replication agreements - foreach ($replica_hosts as $num => $replica_host) { - $ldap = new Net_LDAP3($this->config); - $ldap->config_set('hosts', array($replica_host)); - $ldap->connect(); - $ldap->bind($this->_current_bind_dn, $this->_current_bind_pw); - - $replica_attrs = array( - 'cn' => 'replica', - 'objectclass' => array( - 'top', - 'nsds5replica', - 'extensibleobject', - ), - 'nsDS5ReplicaBindDN' => $ldap->get_entry_attribute($replica_dn, "nsDS5ReplicaBindDN"), - 'nsDS5ReplicaId' => ($max_repl_id + $num + 1), - 'nsDS5ReplicaRoot' => $domain_root_dn, - 'nsDS5ReplicaType' => $ldap->get_entry_attribute($replica_dn, "nsDS5ReplicaType"), - 'nsds5ReplicaPurgeDelay' => $ldap->get_entry_attribute($replica_dn, "nsds5ReplicaPurgeDelay"), - 'nsDS5Flags' => $ldap->get_entry_attribute($replica_dn, "nsDS5Flags") - ); - - $new_replica_dn = 'cn=replica,cn="' . $domain_root_dn . '",cn=mapping tree,cn=config'; - - $this->_debug("Adding $new_replica_dn to $replica_host with attributes: " . var_export($replica_attrs, true)); - - $result = $ldap->add_entry($new_replica_dn, $replica_attrs); - - if (!$result) { - $this->_error("Could not add replication configuration to database for $domain_root_dn on $replica_host"); - continue; - } - - $result = $ldap->search($replica_dn, "(objectclass=nsDS5ReplicationAgreement)", "sub"); - - if (!$result) { - $this->_error("Host $replica_host does not have any replication agreements"); - continue; - } - - $entries = $result->entries(true); - $replica_agreement_tpl_dn = key($entries); - - $this->_debug("Using " . var_export($replica_agreement_tpl_dn, true) . " as the template for new replication agreements"); - - foreach ($replica_hosts as $replicate_to_host) { - // Skip the current server - if ($replicate_to_host == $replica_host) { - continue; - } - - $this->_debug("Adding a replication agreement for $domain_root_dn to $replicate_to_host on " . $replica_host); - - $attrs = array( - 'objectclass', - 'nsDS5ReplicaBindDN', - 'nsDS5ReplicaCredentials', - 'nsDS5ReplicaTransportInfo', - 'nsDS5ReplicaBindMethod', - 'nsDS5ReplicaHost', - 'nsDS5ReplicaPort' - ); - - $replica_agreement_attrs = $ldap->get_entry_attributes($replica_agreement_tpl_dn, $attrs); - $replica_agreement_attrs['cn'] = array_shift(explode('.', $replicate_to_host)) . str_replace(array('dc=',','), array('_',''), $domain_root_dn); - $replica_agreement_attrs['nsDS5ReplicaRoot'] = $domain_root_dn; - $replica_agreement_dn = "cn=" . $replica_agreement_attrs['cn'] . "," . $new_replica_dn; - - $this->_debug("Adding $replica_agreement_dn to $replica_host with attributes: " . var_export($replica_agreement_attrs, true)); - - $result = $ldap->add_entry($replica_agreement_dn, $replica_agreement_attrs); - - if (!$result) { - $this->_error("Failed adding $replica_agreement_dn"); - } - } - } - - $server_id = implode('', array_diff($replica_hosts, $this->_server_id_not)); - - $this->_debug("About to trigger consumer initialization for replicas on current 'parent': $server_id"); - - $result = $this->search($this->config_get('config_root_dn'), "(&(objectclass=nsDS5ReplicationAgreement)(nsds5replicaroot=$domain_root_dn))", "sub"); - - if ($result) { - foreach ($result->entries(true) as $agreement_dn => $agreement_attrs) { - $this->modify_entry_attributes( - $agreement_dn, - array( - 'replace' => array( - 'nsds5BeginReplicaRefresh' => 'start', - ), - ) - ); - } - } - } - - public function attribute_details($attributes = array()) - { - $schema = $this->init_schema(); - - if (!$schema) { - return array(); - } - - $attribs = $schema->getAll('attributes'); - - $attributes_details = array(); - - foreach ($attributes as $attribute) { - if (array_key_exists($attribute, $attribs)) { - $attrib_details = $attribs[$attribute]; - - if (!empty($attrib_details['sup'])) { - foreach ($attrib_details['sup'] as $super_attrib) { - $_attrib_details = $attribs[$super_attrib]; - if (is_array($_attrib_details)) { - $attrib_details = array_merge($_attrib_details, $attrib_details); - } - } - } - } - else if (array_key_exists(strtolower($attribute), $attribs)) { - $attrib_details = $attribs[strtolower($attribute)]; - - if (!empty($attrib_details['sup'])) { - foreach ($attrib_details['sup'] as $super_attrib) { - $_attrib_details = $attribs[$super_attrib]; - if (is_array($_attrib_details)) { - $attrib_details = array_merge($_attrib_details, $attrib_details); - } - } - } - } - else { - $this->_warning("LDAP: No schema details exist for attribute $attribute (which is strange)"); - } - - // The relevant parts only, please - $attributes_details[$attribute] = array( - 'type' => !empty($attrib_details['single-value']) ? 'text' : 'list', - 'description' => $attrib_details['desc'], - 'syntax' => $attrib_details['syntax'], - 'max-length' => $attrib_details['max-length'] ?: false, - ); - } - - return $attributes_details; - } - - public function attributes_allowed($objectclasses = array()) - { - $this->_debug("Listing allowed_attributes for objectclasses", $objectclasses); - - if (!is_array($objectclasses) || empty($objectclasses)) { - return false; - } - - $schema = $this->init_schema(); - if (!$schema) { - return false; - } - - $may = array(); - $must = array(); - $superclasses = array(); - - foreach ($objectclasses as $objectclass) { - $superclass = $schema->superclass($objectclass); - if (!empty($superclass)) { - $superclasses = array_merge($superclass, $superclasses); - } - - $_may = $schema->may($objectclass); - $_must = $schema->must($objectclass); - - if (is_array($_may)) { - $may = array_merge($may, $_may); - } - if (is_array($_must)) { - $must = array_merge($must, $_must); - } - } - - $may = array_unique($may); - $must = array_unique($must); - $superclasses = array_unique($superclasses); - - return array('may' => $may, 'must' => $must, 'super' => $superclasses); - } - - public function classes_allowed() - { - $schema = $this->init_schema(); - if (!$schema) { - return false; - } - - $list = $schema->getAll('objectclasses'); - $classes = array(); - - foreach ($list as $class) { - $classes[] = $class['name']; - } - - return $classes; - } - - /** - * Bind connection with DN and password - * - * @param string $dn Bind DN - * @param string $pass Bind password - * - * @return boolean True on success, False on error - */ - public function bind($bind_dn, $bind_pw) - { - if (!$this->conn) { - return false; - } - - if ($bind_dn == $this->_current_bind_dn) { - return true; - } - - $this->_debug("C: Bind [dn: $bind_dn]"); - - if (@ldap_bind($this->conn, $bind_dn, $bind_pw)) { - $this->_debug("S: OK"); - $this->_current_bind_dn = $bind_dn; - $this->_current_bind_pw = $bind_pw; - - return true; - } - - $this->_debug("S: ".ldap_error($this->conn)); - $this->_error("Bind failed for dn=$bind_dn: ".ldap_error($this->conn)); - - return false; - } - - /** - * Close connection to LDAP server - */ - public function close() - { - if ($this->conn) { - $this->_debug("C: Close"); - ldap_unbind($this->conn); - - $this->_current_bind_dn = null; - $this->_current_bind_pw = null; - $this->conn = null; - } - } - - /** - * Get the value of a configuration item. - * - * @param string $key Configuration key - * @param mixed $default Default value to return - */ - public function config_get($key, $default = null) - { - if (!empty($this->_config_get_hook)) { - return call_user_func_array($this->_config_get_hook, array($key, $value)); - } - else if (method_exists($this, "config_get_{$key}")) { - return call_user_func(array($this, "config_get_$key"), $value); - } - else if (!isset($this->config[$key])) { - return $default; - } - else { - return $this->config[$key]; - } - } - - /** - * Set a configuration item to value. - * - * @param string $key Configuration key - * @param mixed $value Configuration value - */ - public function config_set($key, $value = null) - { - if (is_array($key)) { - foreach ($key as $k => $v) { - $this->config_set($k, $v); - } - return; - } - - if (!empty($this->_config_set_hook)) { - call_user_func($this->_config_set_hook, array($key, $value)); - } - else if (method_exists($this, "config_set_{$key}")) { - call_user_func_array(array($this, "config_set_$key"), array($value)); - } - else if (isset($this->$key)) { - $this->$key = $value; - } - else { - // 'host' option is deprecated - if ($key == 'host') { - $this->config['hosts'] = (array) $value; - } - else { - $this->config[$key] = $value; - } - } - } - - /** - * Establish a connection to the LDAP server - */ - public function connect($host = null) - { - if (!function_exists('ldap_connect')) { - $this->_error("No ldap support in this PHP installation"); - return false; - } - - if (is_resource($this->conn)) { - $this->_debug("Connection already exists"); - return true; - } - - $hosts = !empty($host) ? $host : $this->config_get('hosts', array()); - $port = $this->config_get('port', 389); - - foreach ((array) $hosts as $host) { - $this->_debug("C: Connect [$host:$port]"); - - if ($lc = @ldap_connect($host, $port)) { - if ($this->config_get('use_tls', false) === true) { - if (!ldap_start_tls($lc)) { - $this->_debug("S: Could not start TLS. " . ldap_error($lc)); - continue; - } - } - - $this->_debug("S: OK"); - - $ldap_version = $this->config_get('ldap_version', 3); - $timeout = $this->config_get('network_timeout'); - $referrals = $this->config_get('referrals'); - - ldap_set_option($lc, LDAP_OPT_PROTOCOL_VERSION, $ldap_version); - - if ($timeout) { - ldap_set_option($lc, LDAP_OPT_NETWORK_TIMEOUT, $timeout); - } - - if ($referrals !== null) { - ldap_set_option($lc, LDAP_OPT_REFERRALS, (bool) $referrals); - } - - $this->_current_host = $host; - $this->conn = $lc; - - break; - } - - $this->_debug("S: NOT OK"); - } - - if (!is_resource($this->conn)) { - $this->_error("Could not connect to LDAP"); - return false; - } - - return true; - } - - /** - * Shortcut to ldap_delete() - */ - public function delete_entry($entry_dn) - { - $this->_debug("LDAP: C: Delete $entry_dn"); - - if (ldap_delete($this->conn, $entry_dn) === false) { - $this->_debug("LDAP: S: " . ldap_error($this->conn)); - return false; - } - - $this->_debug("LDAP: S: OK"); - - return true; - } - - /** - * Deletes specified entry and all entries in the tree - */ - public function delete_entry_recursive($entry_dn) - { - // searching for sub entries, but not scope sub, just one level - $result = $this->search($entry_dn, '(objectclass=*)', 'one'); - - if ($result) { - $entries = $result->entries(true); - - foreach (array_keys($entries) as $sub_dn) { - if (!$this->delete_entry_recursive($sub_dn)) { - return false; - } - } - } - - if (!$this->delete_entry($entry_dn)) { - return false; - } - - return true; - } - - public function effective_rights($subject) - { - $effective_rights_control_oid = "1.3.6.1.4.1.42.2.27.9.5.2"; - - $supported_controls = $this->supported_controls(); - - if (!in_array($effective_rights_control_oid, $supported_controls)) { - $this->_debug("LDAP: No getEffectiveRights control in supportedControls"); - return false; - } - - $attributes = array( - 'attributeLevelRights' => array(), - 'entryLevelRights' => array(), - ); - - $output = array(); - $entry_dn = $this->entry_dn($subject); - - if (!$entry_dn) { - $entry_dn = $this->config_get($subject . "_base_dn"); - } - if (!$entry_dn) { - $entry_dn = $this->config_get("base_dn"); - } - if (!$entry_dn) { - $entry_dn = $this->config_get("root_dn"); - } - - $this->_debug("effective_rights for subject $subject resolves to entry dn $entry_dn"); - - $moz_ldapsearch = "/usr/lib64/mozldap/ldapsearch"; - if (!is_file($moz_ldapsearch)) { - $moz_ldapsearch = "/usr/lib/mozldap/ldapsearch"; - } - if (!is_file($moz_ldapsearch)) { - $moz_ldapsearch = null; - } - - if (empty($moz_ldapsearch)) { - $this->_error("Mozilla LDAP C SDK binary ldapsearch not found, cannot get effective rights on subject $subject"); - return null; - } - - $command = array( - $moz_ldapsearch, - '-x', - '-h', - $this->_ldap_server, - '-p', - $this->_ldap_port, - '-b', - escapeshellarg($entry_dn), - '-D', - escapeshellarg($this->_current_bind_dn), - '-w', - escapeshellarg($this->_current_bind_pw), - '-J', - escapeshellarg(implode(':', array( - $effective_rights_control_oid, // OID - 'true', // Criticality - 'dn:' . $this->_current_bind_dn // User DN - ))), - '-s', - 'base', - '"(objectclass=*)"', - '"*"', - ); - - $command = implode(' ', $command); - - $this->_debug("LDAP: Executing command: $command"); - - exec($command, $output, $return_code); - - $this->_debug("LDAP: Command output:" . var_export($output, true)); - $this->_debug("Return code: " . $return_code); - - if ($return_code) { - $this->_error("Command $moz_ldapsearch returned error code: $return_code"); - return null; - } - - $lines = array(); - foreach ($output as $line_num => $line) { - if (substr($line, 0, 1) == " ") { - $lines[count($lines)-1] .= trim($line); - } - else { - $lines[] = trim($line); - } - } - - foreach ($lines as $line) { - $line_components = explode(':', $line); - $attribute_name = array_shift($line_components); - $attribute_value = trim(implode(':', $line_components)); - - switch ($attribute_name) { - case "attributeLevelRights": - $attributes[$attribute_name] = $this->parse_attribute_level_rights($attribute_value); - break; - case "dn": - $attributes[$attribute_name] = $attribute_value; - break; - case "entryLevelRights": - $attributes[$attribute_name] = $this->parse_entry_level_rights($attribute_value); - break; - - default: - break; - } - } - - return $attributes; - } - - /** - * Resolve entry data to entry DN - * - * @param string $subject Entry string (e.g. entry DN or unique attribute value) - * @param array $attributes Additional attributes - * @param string $base_dn Optional base DN - * - * @return string Entry DN string - */ - public function entry_dn($subject, $attributes = array(), $base_dn = null) - { - $this->_debug("entry_dn on subject $subject"); - $is_dn = ldap_explode_dn($subject, 1); - - if (is_array($is_dn) && array_key_exists("count", $is_dn) && $is_dn["count"] > 0) { - $this->_debug("$subject is a dn"); - return $subject; - } - - $this->_debug("$subject is not a dn"); - - if (strlen($subject) < 32 || preg_match('/[^a-fA-F0-9-]/', $subject)) { - $this->_debug("$subject is not a unique identifier"); - return; - } - - $unique_attr = $this->config_get('unique_attribute', 'nsuniqueid'); - - $this->_debug("Using unique_attribute " . var_export($unique_attr, true) . " at " . __FILE__ . ":" . __LINE__); - - $attributes = array_merge(array($unique_attr => $subject), (array)$attributes); - $subject = $this->entry_find_by_attribute($attributes, $base_dn); - - if (!empty($subject)) { - return key($subject); - } - } - - public function entry_find_by_attribute($attributes, $base_dn = null) - { - $this->_debug("Net_LDAP3::entry_find_by_attribute(\$attributes, \$base_dn) called with base_dn", $base_dn, "and attributes", $attributes); - - if (empty($attributes) || !is_array($attributes)) { - return false; - } - - if (empty($attributes[key($attributes)])) { - return false; - } - - $filter = count($attributes) ? "(&" : ""; - - foreach ($attributes as $key => $value) { - $filter .= "(" . $key . "=" . $value . ")"; - } - - $filter .= count($attributes) ? ")" : ""; - - if (empty($base_dn)) { - $base_dn = $this->config_get('root_dn'); - $this->_debug("Using base_dn from domain " . $this->domain . ": " . $base_dn); - } - - $result = $this->search($base_dn, $filter, 'sub', array_keys($attributes)); - - if ($result && $result->count() > 0) { - $this->_debug("Results found: " . implode(', ', array_keys($result->entries(true)))); - return $result->entries(true); - } - else { - $this->_debug("No result"); - return false; - } - } - - public function find_user_groups($member_dn) - { - $groups = array(); - $root_dn = $this->config_get('root_dn'); - - // TODO: Do not query for both, it's either one or the other - $entries = $this->search($root_dn, "(|" . - "(&(objectclass=groupofnames)(member=$member_dn))" . - "(&(objectclass=groupofuniquenames)(uniquemember=$member_dn))" . - ")" - ); - - if ($entries) { - $groups = array_keys($entries->entries(true)); - } - - return $groups; - } - - public function get_entry_attribute($subject_dn, $attribute) - { - $entry = $this->get_entry_attributes($subject_dn, (array)$attribute); - - return $entry[strtolower($attribute)]; - } - - public function get_entry_attributes($subject_dn, $attributes) - { - // @TODO: use get_entry? - $result = $this->search($subject_dn, '(objectclass=*)', 'base', $attributes); - - if (!$result) { - return array(); - } - - $entries = $result->entries(true); - $entry_dn = key($entries); - $entry = $entries[$entry_dn]; - - return $entry; - } - - /** - * Get a specific LDAP entry, identified by its DN - * - * @param string $dn Record identifier - * @param array $attributes Attributes to return - * - * @return array Hash array - */ - public function get_entry($dn, $attributes = array()) - { - $rec = null; - - if ($this->conn && $dn) { - $this->_debug("C: Read [dn: $dn] [(objectclass=*)]"); - - if ($ldap_result = @ldap_read($this->conn, $dn, '(objectclass=*)', $attributes)) { - $this->_debug("S: OK"); - - if ($entry = ldap_first_entry($this->conn, $ldap_result)) { - $rec = ldap_get_attributes($this->conn, $entry); - } - } - else { - $this->_debug("S: ".ldap_error($this->conn)); - } - - if (!empty($rec)) { - $rec['dn'] = $dn; // Add in the dn for the entry. - } - } - - return $rec; - } - - public function list_replicas() - { - $this->_debug("Finding replicas for this server."); - - // Search any host that is a replica for the current host - $replica_hosts = $this->config_get('replica_hosts', array()); - $root_dn = $this->config_get('config_root_dn'); - - if (!empty($replica_hosts)) { - return $replica_hosts; - } - - $ldap = new Net_LDAP3($this->config); - $ldap->connect(); - $ldap->bind($this->_current_bind_dn, $this->_current_bind_pw); - - $result = $ldap->search($root_dn, '(objectclass=nsds5replicationagreement)', 'sub', array('nsds5replicahost')); - - if (!$result) { - $this->_debug("No replicas configured"); - return $replica_hosts; - } - - $this->_debug("Replication agreements found: " . var_export($result->entries(true), true)); - - foreach ($result->entries(true) as $dn => $attrs) { - if (!in_array($attrs['nsds5replicahost'], $replica_hosts)) { - $replica_hosts[] = $attrs['nsds5replicahost']; - } - } - - // $replica_hosts now holds the IDs of servers we are currently NOT - // connected to. We might need this later in order to set - $this->_server_id_not = $replica_hosts; - - $this->_debug("So far, we have the following replicas: " . var_export($replica_hosts, true)); - - $ldap->close(); - - foreach ($replica_hosts as $replica_host) { - $ldap->config_set('hosts', array($replica_host)); - $ldap->connect(); - $ldap->bind($this->_current_bind_dn, $this->_current_bind_pw); - - $result = $ldap->search($root_dn, '(objectclass=nsds5replicationagreement)', 'sub', array('nsds5replicahost')); - if (!$result) { - $this->_debug("No replicas configured"); - } - - foreach ($result->entries(true) as $dn => $attrs) { - if (!in_array($attrs['nsds5replicahost'], $replica_hosts)) { - $replica_hosts[] = $attrs['nsds5replicahost']; - } - } - - $ldap->close(); - } - - $this->config_set('replica_hosts', $replica_hosts); - - return $replica_hosts; - } - - public function login($username, $password, $domain = null) - { - $this->_debug("Net_LDAP3::login(\$username = '" . $username . "', \$password = '****', \$domain = '" . $domain . "')"); - - $_bind_dn = $this->config_get('service_bind_dn'); - $_bind_pw = $this->config_get('service_bind_pw'); - - if (empty($_bind_dn)) { - $this->_debug("No valid service bind dn found."); - return null; - } - - if (empty($_bind_pw)) { - $this->_debug("No valid service bind password found."); - return null; - } - - $bound = $this->bind($_bind_dn, $_bind_pw); - - if (!$bound) { - $this->_debug("Could not bind with service bind credentials."); - return null; - } - - $entry_dn = $this->entry_dn($username); - - if (!empty($entry_dn)) { - $bound = $this->bind($entry_dn, $password); - - if (!$bound) { - $this->_error("Could not bind with " . $entry_dn); - return null; - } - - return $entry_dn; - } - - $base_dn = $this->config_get('root_dn'); - - if (empty($base_dn)) { - $this->_debug("Could not get a valid base dn to search."); - return null; - } - - $localpart = $username; - - if (empty($domain) ) { - if (count(explode('@', $username)) > 1) { - $_parts = explode('@', $username); - $localpart = $_parts[0]; - $domain = $_parts[1]; - } - else { - $localpart = $username; - $domain = ''; - } - } - - $realm = $domain; - $filter = $this->config_get("login_filter", null); - - if (empty($filter)) { - $filter = $this->config_get("filter", null); - } - if (empty($filter)) { - $filter = "(&(|(mail=%s)(mail=%U@%d)(alias=%s)(alias=%U@%d)(uid=%s))(objectclass=inetorgperson))"; - } - - $this->_debug("Net::LDAP3::login() original filter: " . $filter); - - $replace_patterns = array( - '/%s/' => $username, - '/%d/' => $domain, - '/%U/' => $localpart, - '/%r/' => $realm - ); - - $filter = preg_replace(array_keys($replace_patterns), array_values($replace_patterns), $filter); - - $this->_debug("Net::LDAP3::login() actual filter: " . $filter); - - $result = $this->search($base_dn, $filter, 'sub'); - - if (!$result) { - $this->_debug("Could not search $base_dn with $filter"); - return null; - } - - if ($result->count() > 1) { - $this->_debug("Multiple entries found."); - return null; - } - else if ($result->count() < 1) { - $this->_debug("No entries found."); - return null; - } - - $entries = $result->entries(); - $entry = self::normalize_result($entries); - $entry_dn = key($entry); - - $bound = $this->bind($entry_dn, $password); - - if (!$bound) { - $this->_debug("Could not bind with " . $entry_dn); - return null; - } - - return $entry_dn; - } - - public function list_group_members($dn, $entry = null, $recurse = true) - { - $this->_debug("Called list_group_members(" . $dn . ")"); - - if (is_array($entry) && in_array('objectclass', $entry)) { - if (!in_array(array('groupofnames', 'groupofuniquenames', 'groupofurls'), $entry['objectclass'])) { - $this->_debug("Called list_group_members on a non-group!"); - return array(); - } - } - else { - $entry = $this->get_entry($dn, array('member', 'uniquemember', 'memberurl', 'objectclass')); - - if (!$entry) { - return array(); - } - } - - $group_members = array(); - - foreach ((array)$entry['objectclass'] as $objectclass) { - switch (strtolower($objectclass)) { - case "groupofnames": - case "kolabgroupofnames": - $group_members = array_merge($group_members, $this->list_group_member($dn, $entry['member'], $recurse)); - break; - case "groupofuniquenames": - case "kolabgroupofuniquenames": - $group_members = array_merge($group_members, $this->list_group_uniquemember($dn, $entry['uniquemember'], $recurse)); - break; - case "groupofurls": - $group_members = array_merge($group_members, $this->list_group_memberurl($dn, $entry['memberurl'], $recurse)); - break; - } - } - - return array_values(array_filter($group_members)); - } - - public function modify_entry($subject_dn, $old_attrs, $new_attrs) - { - $this->_debug("OLD ATTRIBUTES", $old_attrs); - $this->_debug("NEW ATTRIBUTES", $new_attrs); - - // TODO: Get $rdn_attr - we have type_id in $new_attrs - $dn_components = ldap_explode_dn($subject_dn, 0); - $rdn_components = explode('=', $dn_components[0]); - $rdn_attr = $rdn_components[0]; - - $this->_debug("Net_LDAP3::modify_entry() using rdn attribute: " . $rdn_attr); - - $mod_array = array( - 'add' => array(), // For use with ldap_mod_add() - 'del' => array(), // For use with ldap_mod_del() - 'replace' => array(), // For use with ldap_mod_replace() - 'rename' => array(), // For use with ldap_rename() - ); - - // This is me cheating. Remove this special attribute. - if (array_key_exists('ou', $old_attrs) || array_key_exists('ou', $new_attrs)) { - $old_ou = $old_attrs['ou']; - $new_ou = $new_attrs['ou']; - unset($old_attrs['ou']); - unset($new_attrs['ou']); - } - else { - $old_ou = null; - $new_ou = null; - } - - // Compare each attribute value of the old attrs with the corresponding value - // in the new attrs, if any. - foreach ($old_attrs as $attr => $old_attr_value) { - if (is_array($old_attr_value)) { - if (count($old_attr_value) == 1) { - $old_attrs[$attr] = $old_attr_value[0]; - $old_attr_value = $old_attrs[$attr]; - } - } - - if (array_key_exists($attr, $new_attrs)) { - if (is_array($new_attrs[$attr])) { - if (count($new_attrs[$attr]) == 1) { - $new_attrs[$attr] = $new_attrs[$attr][0]; - } - } - - if (is_array($old_attrs[$attr]) && is_array($new_attrs[$attr])) { - $_sort1 = $new_attrs[$attr]; - sort($_sort1); - $_sort2 = $old_attr_value; - sort($_sort2); - } - else { - $_sort1 = true; - $_sort2 = false; - } - - if ($new_attrs[$attr] !== $old_attr_value && $_sort1 !== $_sort2) { - $this->_debug("Attribute $attr changed from " . var_export($old_attr_value, true) . " to " . var_export($new_attrs[$attr], true)); - if ($attr === $rdn_attr) { - $this->_debug("This attribute is the RDN attribute. Let's see if it is multi-valued, and if the original still exists in the new value."); - if (is_array($old_attrs[$attr])) { - if (!is_array($new_attrs[$attr])) { - if (in_array($new_attrs[$attr], $old_attrs[$attr])) { - // TODO: Need to remove all $old_attrs[$attr] values not equal to $new_attrs[$attr], and not equal to the current $rdn_attr value [0] - - $this->_debug("old attrs. is array, new attrs. is not array. new attr. exists in old attrs."); - - $rdn_attr_value = array_shift($old_attrs[$attr]); - $_attr_to_remove = array(); - - foreach ($old_attrs[$attr] as $value) { - if (strtolower($value) != strtolower($new_attrs[$attr])) { - $_attr_to_remove[] = $value; - } - } - - $this->_debug("Adding to delete attribute $attr values:" . implode(', ', $_attr_to_remove)); - - $mod_array['del'][$attr] = $_attr_to_remove; - - if (strtolower($new_attrs[$attr]) !== strtolower($rdn_attr_value)) { - $this->_debug("new attrs is not the same as the old rdn value, issuing a rename"); - $mod_array['rename']['dn'] = $subject_dn; - $mod_array['rename']['new_rdn'] = $rdn_attr . '=' . $new_attrs[$attr][0]; - } - } - else { - $this->_debug("new attrs is not the same as any of the old rdn value, issuing a full rename"); - $mod_array['rename']['dn'] = $subject_dn; - $mod_array['rename']['new_rdn'] = $rdn_attr . '=' . $new_attrs[$attr]; - } - } - else { - // TODO: See if the rdn attr. value is still in $new_attrs[$attr] - if (in_array($old_attrs[$attr][0], $new_attrs[$attr])) { - $this->_debug("Simply replacing attr $attr as rdn attr value is preserved."); - $mod_array['replace'][$attr] = $new_attrs[$attr]; - } - else { - // TODO: This fails. - $mod_array['rename']['dn'] = $subject_dn; - $mod_array['rename']['new_rdn'] = $rdn_attr . '=' . $new_attrs[$attr][0]; - $mod_array['del'][$attr] = $old_attrs[$attr][0]; - } - } - } - else { - if (!is_array($new_attrs[$attr])) { - $this->_debug("Renaming " . $old_attrs[$attr] . " to " . $new_attrs[$attr]); - $mod_array['rename']['dn'] = $subject_dn; - $mod_array['rename']['new_rdn'] = $rdn_attr . '=' . $new_attrs[$attr]; - } - else { - $this->_debug("Adding to replace"); - // An additional attribute value is being supplied. Just replace and continue. - $mod_array['replace'][$attr] = $new_attrs[$attr]; - continue; - } - } - - } - else { - if (!isset($new_attrs[$attr]) || $new_attrs[$attr] === '' || (is_array($new_attrs[$attr]) && empty($new_attrs[$attr]))) { - switch ($attr) { - case "userpassword": - break; - default: - $this->_debug("Adding to del: $attr"); - $mod_array['del'][$attr] = (array)($old_attr_value); - break; - } - } - else { - $this->_debug("Adding to replace: $attr"); - $mod_array['replace'][$attr] = (array)($new_attrs[$attr]); - } - } - } - else { - $this->_debug("Attribute $attr unchanged"); - } - } - else { - // TODO: Since we're not shipping the entire object back and forth, and only post - // part of the data... we don't know what is actually removed (think modifiedtimestamp, etc.) - $this->_debug("Group attribute $attr not mentioned in \$new_attrs..., but not explicitly removed... by assumption"); - } - } - - foreach ($new_attrs as $attr => $value) { - // OU's parent base dn - if ($attr == 'base_dn') { - continue; - } - - if (is_array($value)) { - if (count($value) == 1) { - $new_attrs[$attr] = $value[0]; - $value = $new_attrs[$attr]; - } - } - - if (array_key_exists($attr, $old_attrs)) { - if (is_array($old_attrs[$attr])) { - if (count($old_attrs[$attr]) == 1) { - $old_attrs[$attr] = $old_attrs[$attr][0]; - } - } - - if (is_array($new_attrs[$attr]) && is_array($old_attrs[$attr])) { - $_sort1 = $old_attrs[$attr]; - sort($_sort1); - $_sort2 = $value; - sort($_sort2); - } - else { - $_sort1 = true; - $_sort2 = false; - } - - if ($value === null || $value === '' || (is_array($value) && empty($value))) { - if (!array_key_exists($attr, $mod_array['del'])) { - switch ($attr) { - case 'userpassword': - break; - default: - $this->_debug("Adding to del(2): $attr"); - $mod_array['del'][$attr] = (array)($old_attrs[$attr]); - break; - } - } - } - else { - if (!($old_attrs[$attr] === $value) && !($attr === $rdn_attr) && !($_sort1 === $_sort2)) { - if (!array_key_exists($attr, $mod_array['replace'])) { - $this->_debug("Adding to replace(2): $attr"); - $mod_array['replace'][$attr] = $value; - } - } - } - } - else { - if (!empty($value)) { - $mod_array['add'][$attr] = $value; - } - } - } - - if (empty($old_ou)) { - $subject_dn_components = ldap_explode_dn($subject_dn, 0); - unset($subject_dn_components["count"]); - $subject_rdn = array_shift($subject_dn_components); - $old_ou = implode(',', $subject_dn_components); - } - - // object is an organizational unit - if (strpos($subject_dn, 'ou=' . $old_ou) === 0) { - $root = substr($subject_dn, strlen($old_ou) + 4); // remove ou=*, - - if ((!empty($new_attrs['base_dn']) && strtolower($new_attrs['base_dn']) !== strtolower($root)) - || (strtolower($old_ou) !== strtolower($new_ou)) - ) { - if (!empty($new_attrs['base_dn'])) { - $root = $new_attrs['base_dn']; - } - - $mod_array['rename']['new_parent'] = $root; - $mod_array['rename']['dn'] = $subject_dn; - $mod_array['rename']['new_rdn'] = 'ou=' . $new_ou; - } - } - // not OU object, but changed ou attribute - else if ((!empty($old_ou) && !empty($new_ou)) && strtolower($old_ou) !== strtolower($new_ou)) { - $mod_array['rename']['new_parent'] = $new_ou; - if (empty($mod_array['rename']['dn']) || empty($mod_array['rename']['new_rdn'])) { - $mod_array['rename']['dn'] = $subject_dn; - $mod_array['rename']['new_rdn'] = $rdn_attr . '=' . $new_attrs[$rdn_attr]; - } - } - - $this->_debug($mod_array); - - $result = $this->modify_entry_attributes($subject_dn, $mod_array); - - if ($result) { - return $mod_array; - } - } - - /** - * Bind connection with (SASL-) user and password - * - * @param string $authc Authentication user - * @param string $pass Bind password - * @param string $authz Autorization user - * - * @return boolean True on success, False on error - */ - public function sasl_bind($authc, $pass, $authz=null) - { - if (!$this->conn) { - return false; - } - - if (!function_exists('ldap_sasl_bind')) { - $this->_error("Unable to bind: ldap_sasl_bind() not exists"); - return false; - } - - if (!empty($authz)) { - $authz = 'u:' . $authz; - } - - $method = $this->config_get('auth_method'); - if (empty($method)) { - $method = 'DIGEST-MD5'; - } - - $this->_debug("C: Bind [mech: $method, authc: $authc, authz: $authz]"); - - if (ldap_sasl_bind($this->conn, null, $pass, $method, null, $authc, $authz)) { - $this->_debug("S: OK"); - return true; - } - - $this->_debug("S: ".ldap_error($this->conn)); - $this->_error("Bind failed for authcid=$authc ".ldap_error($this->conn)); - - return false; - } - - /** - * Execute LDAP search - * - * @param string $base_dn Base DN to use for searching - * @param string $filter Filter string to query - * @param string $scope The LDAP scope (list|sub|base) - * @param array $attrs List of entry attributes to read - * @param array $prop Hash array with query configuration properties: - * - sort: array of sort attributes (has to be in sync with the VLV index) - * - search: search string used for VLV controls - * @param bool $count_only Set to true if only entry count is requested - * - * @return mixed Net_LDAP3_Result object or number of entries (if $count_only=true) or False on failure - */ - public function search($base_dn, $filter = '(objectclass=*)', $scope = 'sub', $attrs = array('dn'), $props = array(), $count_only = false) - { - if (!$this->conn) { - $this->_debug("No active connection for " . __CLASS__ . "::" . __FUNCTION__); - return false; - } - - $this->_debug("C: Search base dn: [$base_dn] scope [$scope] with filter [$filter]"); - - // make sure attributes list is not empty - if (empty($attrs)) { - $attrs = array('dn'); - } - - if (!$count_only && ($sort = $this->find_vlv($base_dn, $filter, $scope, $props['sort']))) { - // when using VLV, we get the total count by... - // ...either reading numSubOrdinates attribute - if (($sub_filter = $this->config_get('numsub_filter')) && - ($result_count = @$ns_function($this->conn, $base_dn, $sub_filter, array('numSubOrdinates'), 0, 0, 0)) - ) { - $counts = ldap_get_entries($this->conn, $result_count); - for ($vlv_count = $j = 0; $j < $counts['count']; $j++) { - $vlv_count += $counts[$j]['numsubordinates'][0]; - } - $this->_debug("D: total numsubordinates = " . $vlv_count); - } - // ...or by fetching all records dn and count them - else if (!function_exists('ldap_parse_virtuallist_control')) { - $vlv_count = $this->search($base_dn, $filter, $scope, array('dn'), $props, true); - } - - $this->vlv_active = $this->_vlv_set_controls($sort, $this->list_page, $this->page_size, - $this->_vlv_search($sort, $props['search'])); - } - else { - $this->vlv_active = false; - } - - $function = self::scope_to_function($scope, $ns_function); - $sizelimit = (int) $this->config['sizelimit']; - $timelimit = (int) $this->config['timelimit']; - - $this->_debug("Using function $function on scope $scope (\$ns_function is $ns_function)"); - - if ($this->vlv_active) { - if (!empty($this->additional_filter)) { - $filter = "(&" . $filter . $this->additional_filter . ")"; - $this->_debug("C: (With VLV) Setting a filter (with additional filter) of " . $filter); - } - else { - $this->_debug("C: (With VLV) Setting a filter (without additional filter) of " . $filter); - } - } - else { - if (!empty($this->additional_filter)) { - $filter = "(&" . $filter . $this->additional_filter . ")"; - } - $this->_debug("C: (Without VLV) Setting a filter of " . $filter); - } - - $this->_debug("Executing search with return attributes: " . var_export($attrs, true)); - - $ldap_result = @$function($this->conn, $base_dn, $filter, $attrs, 0, $sizelimit, $timelimit); - - if (!$ldap_result) { - $this->_debug("$function failed for dn=$base_dn: ".ldap_error($this->conn)); - return false; - } - - // when running on a patched PHP we can use the extended functions - // to retrieve the total count from the LDAP search result - if ($this->vlv_active && function_exists('ldap_parse_virtuallist_control')) { - if (ldap_parse_result($this->conn, $ldap_result, $errcode, $matcheddn, $errmsg, $referrals, $serverctrls)) { - ldap_parse_virtuallist_control($this->conn, $serverctrls, $last_offset, $vlv_count, $vresult); - $this->_debug("S: VLV result: last_offset=$last_offset; content_count=$vlv_count"); - } - else { - $this->_debug("S: ".($errmsg ? $errmsg : ldap_error($this->conn))); - } - } - else if ($this->debug) { - $this->_debug("S: ".ldap_count_entries($this->conn, $ldap_result)." record(s) found"); - } - - $result = new Net_LDAP3_Result($this->conn, $base_dn, $filter, $scope, $ldap_result); - $result->set('offset', $last_offset); - $result->set('count', $vlv_count); - $result->set('vlv', true); - - return $count_only ? $result->count() : $result; - } - - /** - * Similar to Net_LDAP3::search() but using a search array with multiple - * keys and values that to continue to use the VLV but with an original - * filter adding the search stuff to an additional filter. - * - * @see Net_LDAP3::search() - */ - public function search_entries($base_dn, $filter = '(objectclass=*)', $scope = 'sub', $attrs = array('dn'), $props = array()) - { - $this->_debug("Net_LDAP3::search_entries with search " . var_export($props, true)); - - if (is_array($props['search']) && array_key_exists('params', $props['search'])) { - $_search = $this->search_filter($props['search']); - $this->_debug("C: Search filter: $_search"); - - if (!empty($_search)) { - $this->additional_filter = $_search; - } - else { - $this->additional_filter = "(|"; - - foreach ($props['search'] as $attr => $value) { - $this->additional_filter .= "(" . $attr . "=" . $this->_fuzzy_search_prefix() . $value . $this->_fuzzy_search_suffix() . ")"; - } - - $this->additional_filter .= ")"; - } - - $this->_debug("C: Setting an additional filter " . $this->additional_filter); - } - - $search = $this->search($base_dn, $filter, $scope, $attrs, $props); - - $this->additional_filter = null; - - if (!$search) { - $this->_debug("Net_LDAP3: Search did not succeed!"); - return false; - } - - return $search; - } - - /** - * Create LDAP search filter string according to defined parameters. - */ - public function search_filter($search) - { - if (empty($search) || !is_array($search) || empty($search['params'])) { - return null; - } - - $operators = array('=', '~=', '>=', '<='); - $filter = ''; - - foreach ((array) $search['params'] as $field => $param) { - switch ((string)$param['type']) { - case 'prefix': - $prefix = ''; - $suffix = '*'; - break; - - case 'suffix': - $prefix = '*'; - $suffix = ''; - break; - - case 'exact': - case '=': - case '~=': - case '>=': - case '<=': - $prefix = ''; - $suffix = ''; - break; - - case 'exists': - $prefix = '*'; - $suffix = ''; - $param['value'] = ''; - break; - - case 'both': - default: - $prefix = '*'; - $suffix = '*'; - break; - } - - $operator = $param['type'] && in_array($param['type'], $operators) ? $param['type'] : '='; - - if (is_array($param['value'])) { - $val_filter = array(); - foreach ($param['value'] as $val) { - $value = self::quote_string($val); - $val_filter[] = "(" . $field . $operator . $prefix . $value . $suffix . ")"; - } - $filter .= "(|" . implode($val_filter, '') . ")"; - } - else { - $value = self::quote_string($param['value']); - $filter .= "(" . $field . $operator . $prefix . $value . $suffix . ")"; - } - } - - // join search parameters with specified operator ('OR' or 'AND') - if (count($search['params']) > 1) { - $filter = '(' . ($search['operator'] == 'AND' ? '&' : '|') . $filter . ')'; - } - - return $filter; - } - - /** - * Set properties for VLV-based paging - * - * @param number $page Page number to list (starting at 1) - * @param number $size Number of entries to display on one page - */ - public function set_vlv_page($page, $size = 10) - { - $this->list_page = $page; - $this->page_size = $size; - } - - /** - * Turn an LDAP entry into a regular PHP array with attributes as keys. - * - * @param array $entry Attributes array as retrieved from ldap_get_attributes() or ldap_get_entries() - * - * @return array Hash array with attributes as keys - */ - public static function normalize_entry($entry) - { - $rec = array(); - for ($i=0; $i < $entry['count']; $i++) { - $attr = $entry[$i]; - for ($j=0; $j < $entry[$attr]['count']; $j++) { - $rec[$attr][$j] = $entry[$attr][$j]; - } - } - - return $rec; - } - - /** - * Normalize a ldap result by converting entry attribute arrays into single values - */ - public static function normalize_result($_result) - { - if (!is_array($_result)) { - return array(); - } - - $result = array(); - - for ($x = 0; $x < $_result['count']; $x++) { - $dn = $_result[$x]['dn']; - $result[$dn] = array(); - for ($y = 0; $y < $_result[$x]['count']; $y++) { - $attr = $_result[$x][$y]; - if ($_result[$x][$attr]['count'] == 1) { - switch ($attr) { - case 'objectclass': - $result[$dn][$attr] = array(strtolower($_result[$x][$attr][0])); - break; - default: - $result[$dn][$attr] = $_result[$x][$attr][0]; - break; - } - } - else { - $result[$dn][$attr] = array(); - for ($z = 0; $z < $_result[$x][$attr]['count']; $z++) { - switch ($attr) { - case 'objectclass': - $result[$dn][$attr][] = strtolower($_result[$x][$attr][$z]); - break; - default: - $result[$dn][$attr][] = $_result[$x][$attr][$z]; - break; - } - } - } - } - } - - return $result; - } - - public static function scopeint2str($scope) - { - switch ($scope) { - case 2: - return 'sub'; - break; - case 1: - return 'one'; - break; - case 0: - return 'base'; - break; - default: - $this->_debug("Scope $scope is not a valid scope integer"); - break; - } - } - - /** - * Choose the right PHP function according to scope property - * - * @param string $scope The LDAP scope (sub|base|list) - * @param string $ns_function Function to be used for numSubOrdinates queries - * @return string PHP function to be used to query directory - */ - public static function scope_to_function($scope, &$ns_function = null) - { - switch ($scope) { - case 'sub': - $function = $ns_function = 'ldap_search'; - break; - case 'base': - $function = $ns_function = 'ldap_read'; - break; - case 'one': - case 'list': - default: - $function = 'ldap_list'; - $ns_function = 'ldap_read'; - break; - } - - return $function; - } - - private function config_set_config_get_hook($callback) - { - $this->_config_get_hook = $callback; - } - - private function config_set_config_set_hook($callback) - { - $this->_config_set_hook = $callback; - } - - /** - * Sets the debug level both for this class and the ldap connection. - */ - private function config_set_debug($value) - { - $this->config['debug'] = (bool) $value; - if ((int)($value) > 0) { - ldap_set_option(null, LDAP_OPT_DEBUG_LEVEL, (int)($value)); - } - } - - /** - * Sets a log hook that is called with every log message in this module. - */ - private function config_set_log_hook($callback) - { - $this->_log_hook = $callback; - } - - /** - * Find a matching VLV - */ - protected function find_vlv($base_dn, $filter, $scope, $sort_attrs = null) - { - if ($scope == 'base') { - return false; - } - - $vlv_indexes = $this->find_vlv_indexes_and_searches(); - - if (empty($vlv_indexes)) { - return false; - } - - $this->_debug("Existing vlv index and search information", $vlv_indexes); - - $filter = strtolower($filter); - - foreach ($vlv_indexes as $vlv_index) { - if (!empty($vlv_index[$base_dn])) { - $this->_debug("Found a VLV for base_dn: " . $base_dn); - if ($vlv_index[$base_dn]['filter'] == $filter) { - if ($vlv_index[$base_dn]['scope'] == $scope) { - $this->_debug("Scope and filter matches"); - - // Not passing any sort attributes means you don't care - if (!empty($sort_attrs)) { - $sort_attrs = (array) $sort_attrs; - foreach ($vlv_index[$base_dn]['sort'] as $sss_config) { - if (count(array_intersect($sort_attrs, $sss_config)) == count($sort_attrs)) { - return $sort_attrs; - } - } - - $this->_error("The requested sorting does not match any server-side sorting configuration"); - - return false; - } - else { - return $vlv_index[$base_dn]['sort'][0]; - } - } - else { - $this->_debug("Scope does not match. VLV: " . var_export($vlv_index[$base_dn]['scope'], true) - . " while looking for " . var_export($scope, true)); - return false; - } - } - else { - $this->_debug("Filter does not match"); - } - } - } - - return false; - } - - /** - * Return VLV indexes and searches including necessary configuration - * details. - */ - protected function find_vlv_indexes_and_searches() - { - if ($this->config['vlv'] === false) { - return false; - } - - if (is_array($this->config['vlv'])) { - return $this->config['vlv']; - } - - if ($this->_vlv_indexes_and_searches !== null) { - return $this->_vlv_indexes_and_searches; - } - - $this->_vlv_indexes_and_searches = array(); - - $config_root_dn = $this->config_get('config_root_dn'); - - if (empty($config_root_dn)) { - return array(); - } - - if ($this->cache && ($cached_config = $this->cache->get('vlvconfig'))) { - $this->_vlv_indexes_and_searches = $cached_config; - return $this->_vlv_indexes_and_searches; - } - - $this->_debug("No VLV information available yet, refreshing"); - - $search_filter = '(objectclass=vlvsearch)'; - $search_result = ldap_search($this->conn, $config_root_dn, $search_filter, array('*'), 0, 0, 0); - - if ($search_result === false) { - $this->_debug("Search for '$search_filter' on '$config_root_dn' failed:".ldap_error($this->conn)); - return; - } - - $vlv_searches = new Net_LDAP3_Result($this->conn, $config_root_dn, $search_filter, 'sub', $search_result); - - if ($vlv_searches->count() < 1) { - $this->_debug("Empty result from search for '(objectclass=vlvsearch)' on '$config_root_dn'"); - return; - } - - $index_filter = '(objectclass=vlvindex)'; - - foreach ($vlv_searches->entries(true) as $vlv_search_dn => $vlv_search_attrs) { - // The attributes we are interested in are as follows: - $_vlv_base_dn = $vlv_search_attrs['vlvbase']; - $_vlv_scope = $vlv_search_attrs['vlvscope']; - $_vlv_filter = $vlv_search_attrs['vlvfilter']; - - // Multiple indexes may exist - $index_result = ldap_search($this->conn, $vlv_search_dn, $index_filter, array('*'), 0, 0, 0); - - if ($index_result === false) { - $this->_debug("Search for '$index_filter' on '$vlv_search_dn' failed:".ldap_error($this->conn)); - continue; - } - - $vlv_indexes = new Net_LDAP3_Result($this->conn, $vlv_search_dn, $index_filter, 'sub', $index_result); - $vlv_indexes = $vlv_indexes->entries(true); - - // Reset this one for each VLV search. - $_vlv_sort = array(); - - foreach ($vlv_indexes as $vlv_index_dn => $vlv_index_attrs) { - $_vlv_sort[] = explode(' ', $vlv_index_attrs['vlvsort']); - } - - $this->_vlv_indexes_and_searches[] = array( - $_vlv_base_dn => array( - 'scope' => self::scopeint2str($_vlv_scope), - 'filter' => strtolower($_vlv_filter), - 'sort' => $_vlv_sort, - ), - ); - } - - // cache this - if ($this->cache) { - $this->cache->set('vlvconfig', $this->_vlv_indexes_and_searches); - } - - return $this->_vlv_indexes_and_searches; - } - - private function init_schema() - { - // use PEAR include if autoloading failed - if (!class_exists('Net_LDAP2')) { - require_once('Net/LDAP2.php'); - } - - $port = $this->config_get('port', 389); - $tls = $this->config_get('use_tls', false); - - foreach ((array) $this->config_get('hosts') as $host) { - $this->_debug("C: Connect [$host:$port]"); - - $_ldap_cfg = array( - 'host' => $host, - 'port' => $port, - 'tls' => $tls, - 'version' => 3, - 'binddn' => $this->config_get('service_bind_dn'), - 'bindpw' => $this->config_get('service_bind_pw') - ); - - $_ldap_schema_cache_cfg = array( - 'path' => "/tmp/" . $host . ":" . ($port ? $port : '389') . "-Net_LDAP2_Schema.cache", - 'max_age' => 86400, - ); - - $_ldap = Net_LDAP2::connect($_ldap_cfg); - - if (!is_a($_ldap, 'Net_LDAP2_Error')) { - $this->_debug("S: OK"); - break; - } - - $this->_debug("S: NOT OK"); - $this->_debug($_ldap->getMessage()); - } - - if (is_a($_ldap, 'Net_LDAP2_Error')) { - return null; - } - - $_ldap_schema_cache = new Net_LDAP2_SimpleFileSchemaCache($_ldap_schema_cache_cfg); - - $_ldap->registerSchemaCache($_ldap_schema_cache); - - // TODO: We should learn what LDAP tech. we're running against. - // Perhaps with a scope base objectclass recognize rootdse entry - $schema_root_dn = $this->config_get('schema_root_dn'); - - if (!$schema_root_dn) { - $_schema = $_ldap->schema(); - } - - return $_schema; - } - - private function list_group_member($dn, $members, $recurse = true) - { - $this->_debug("Called list_group_member(" . $dn . ")"); - - $members = (array) $members; - $group_members = array(); - - // remove possible 'count' item - unset($members['count']); - - // Use the member attributes to return an array of member ldap objects - // NOTE that the member attribute is supposed to contain a DN - foreach ($members as $member) { - $member_entry = $this->get_entry($member, array('member', 'uniquemember', 'memberurl', 'objectclass')); - - if (empty($member_entry)) { - continue; - } - - $group_members[$member] = $member; - - if ($recurse) { - // Nested groups - $group_group_members = $this->list_group_members($member, $member_entry); - if ($group_group_members) { - $group_members = array_merge($group_group_members, $group_members); - } - } - } - - return array_filter($group_members); - } - - private function list_group_uniquemember($dn, $uniquemembers, $recurse = true) - { - $this->_debug("Called list_group_uniquemember(" . $dn . ")", $entry); - - $uniquemembers = (array)($uniquemembers); - $group_members = array(); - - // remove possible 'count' item - unset($uniquemembers['count']); - - foreach ($uniquemembers as $member) { - $member_entry = $this->get_entry($member, array('member', 'uniquemember', 'memberurl', 'objectclass')); - - if (empty($member_entry)) { - continue; - } - - $group_members[$member] = $member; - - if ($recurse) { - // Nested groups - $group_group_members = $this->list_group_members($member, $member_entry); - if ($group_group_members) { - $group_members = array_merge($group_group_members, $group_members); - } - } - } - - return array_filter($group_members); - } - - private function list_group_memberurl($dn, $memberurls, $recurse = true) - { - $this->_debug("Called list_group_memberurl(" . $dn . ")"); - - $group_members = array(); - $memberurls = (array) $memberurls; - $attributes = array('member', 'uniquemember', 'memberurl', 'objectclass'); - - // remove possible 'count' item - unset($memberurls['count']); - - foreach ($memberurls as $url) { - $ldap_uri = $this->parse_memberurl($url); - $result = $this->search($ldap_uri[3], $ldap_uri[6], 'sub', $attributes); - - if (!$result) { - continue; - } - - foreach ($result->entries(true) as $entry_dn => $_entry) { - $group_members[$entry_dn] = $entry_dn; - $this->_debug("Found " . $entry_dn); - - if ($recurse) { - // Nested group - $group_group_members = $this->list_group_members($entry_dn, $_entry); - if ($group_group_members) { - $group_members = array_merge($group_members, $group_group_members); - } - } - } - } - - return array_filter($group_members); - } - - /** - * memberUrl attribute parser - * - * @param string $url URL string - * - * @return array URL elements - */ - private function parse_memberurl($url) - { - preg_match('/(.*):\/\/(.*)\/(.*)\?(.*)\?(.*)\?(.*)/', $url, $matches); - return $matches; - } - - private function modify_entry_attributes($subject_dn, $attributes) - { - // Opportunities to set false include failed ldap commands. - $result = true; - - if (is_array($attributes['rename']) && !empty($attributes['rename'])) { - $olddn = $attributes['rename']['dn']; - $newrdn = $attributes['rename']['new_rdn']; - - if (!empty($attributes['rename']['new_parent'])) { - $new_parent = $attributes['rename']['new_parent']; - } - else { - $new_parent = null; - } - - $this->_debug("LDAP: C: Rename $olddn to $newrdn,$new_parent"); - - $result = ldap_rename($this->conn, $olddn, $newrdn, $new_parent, true); - - if ($result) { - $this->_debug("LDAP: S: OK"); - - if ($new_parent) { - $subject_dn = $newrdn . ',' . $new_parent; - } - else { - $old_parent_dn_components = ldap_explode_dn($olddn, 0); - unset($old_parent_dn_components["count"]); - $old_rdn = array_shift($old_parent_dn_components); - $old_parent_dn = implode(",", $old_parent_dn_components); - $subject_dn = $newrdn . ',' . $old_parent_dn; - } - } - else { - $this->_debug("LDAP: S: " . ldap_error($this->conn)); - $this->_warning("LDAP: Failed to rename $olddn to $newrdn,$new_parent"); - return false; - } - } - - if (is_array($attributes['replace']) && !empty($attributes['replace'])) { - $this->_debug("LDAP: C: Mod-Replace $subject_dn: " . json_encode($attributes['replace'])); - - $result = ldap_mod_replace($this->conn, $subject_dn, $attributes['replace']); - - if ($result) { - $this->_debug("LDAP: S: OK"); - } - else { - $this->_debug("LDAP: S: " . ldap_error($this->conn)); - $this->_warning("LDAP: Failed to replace attributes on $subject_dn: " . json_encode($attributes['replace'])); - return false; - } - } - - if (is_array($attributes['del']) && !empty($attributes['del'])) { - $this->_debug("LDAP: C: Mod-Delete $subject_dn: " . json_encode($attributes['del'])); - - $result = ldap_mod_del($this->conn, $subject_dn, $attributes['del']); - - if ($result) { - $this->_debug("LDAP: S: OK"); - } - else { - $this->_debug("LDAP: S: " . ldap_error($this->conn)); - $this->_warning("LDAP: Failed to delete attributes on $subject_dn: " . json_encode($attributes['del'])); - return false; - } - } - - if (is_array($attributes['add']) && !empty($attributes['add'])) { - $this->_debug("LDAP: C: Mod-Add $subject_dn: " . json_encode($attributes['add'])); - - $result = ldap_mod_add($this->conn, $subject_dn, $attributes['add']); - - if ($result) { - $this->_debug("LDAP: S: OK"); - } - else { - $this->_debug("LDAP: S: " . ldap_error($this->conn)); - $this->_warning("LDAP: Failed to add attributes on $subject_dn: " . json_encode($attributes['add'])); - return false; - } - } - - return true; - } - - private function parse_attribute_level_rights($attribute_value) - { - $attribute_value = str_replace(", ", ",", $attribute_value); - $attribute_values = explode(",", $attribute_value); - $attribute_value = array(); - - foreach ($attribute_values as $access_right) { - $access_right_components = explode(":", $access_right); - $access_attribute = strtolower(array_shift($access_right_components)); - $access_value = array_shift($access_right_components); - - $attribute_value[$access_attribute] = array(); - - for ($i = 0; $i < strlen($access_value); $i++) { - $method = $this->attribute_level_rights_map[substr($access_value, $i, 1)]; - - if (!in_array($method, $attribute_value[$access_attribute])) { - $attribute_value[$access_attribute][] = $method; - } - } - } - - return $attribute_value; - } - - private function parse_entry_level_rights($attribute_value) - { - $_attribute_value = array(); - - for ($i = 0; $i < strlen($attribute_value); $i++) { - $method = $this->entry_level_rights_map[substr($attribute_value, $i, 1)]; - - if (!in_array($method, $_attribute_value)) { - $_attribute_value[] = $method; - } - } - - return $_attribute_value; - } - - private function supported_controls() - { - if (!empty($this->supported_controls)) { - return $this->supported_controls; - } - - $this->_info("Obtaining supported controls"); - - if ($result = $this->search('', '(objectclass=*)', 'base', array('supportedcontrol'))) { - $result = $result->entries(true); - $control = $result['']['supportedcontrol']; - } - else { - $control = array(); - } - - $this->_info("Obtained " . count($control) . " supported controls"); - $this->supported_controls = $control; - - return $control; - } - - protected function _alert() - { - $this->__log(LOG_ALERT, func_get_args()); - } - - protected function _critical() - { - $this->__log(LOG_CRIT, func_get_args()); - } - - protected function _debug() - { - $this->__log(LOG_DEBUG, func_get_args()); - } - - protected function _emergency() - { - $this->__log(LOG_EMERG, func_get_args()); - } - - protected function _error() - { - $this->__log(LOG_ERR, func_get_args()); - } - - protected function _info() - { - $this->__log(LOG_INFO, func_get_args()); - } - - protected function _notice() - { - $this->__log(LOG_NOTICE, func_get_args()); - } - - protected function _warning() - { - $this->__log(LOG_WARNING, func_get_args()); - } - - /** - * Log a message. - */ - private function __log($level, $args) - { - $msg = array(); - - foreach ($args as $arg) { - $msg[] = !is_string($arg) ? var_export($arg, true) : $arg; - } - - if (!empty($this->_log_hook)) { - call_user_func_array($this->_log_hook, array($level, $msg)); - return; - } - - if ($this->debug_level > 0) { - syslog($level, implode("\n", $msg)); - } - } - - /** - * Add BER sequence with correct length and the given identifier - */ - private static function _ber_addseq($str, $identifier) - { - $len = dechex(strlen($str)/2); - if (strlen($len) % 2 != 0) { - $len = '0'.$len; - } - - return $identifier . $len . $str; - } - - /** - * Returns BER encoded integer value in hex format - */ - private static function _ber_encode_int($offset) - { - $val = dechex($offset); - $prefix = ''; - - // check if bit 8 of high byte is 1 - if (preg_match('/^[89abcdef]/', $val)) { - $prefix = '00'; - } - - if (strlen($val)%2 != 0) { - $prefix .= '0'; - } - - return $prefix . $val; - } - - /** - * Quotes attribute value string - * - * @param string $str Attribute value - * @param bool $dn True if the attribute is a DN - * - * @return string Quoted string - */ - public static function quote_string($str, $is_dn = false) - { - // take firt entry if array given - if (is_array($str)) { - $str = reset($str); - } - - if ($is_dn) { - $replace = array( - ',' => '\2c', - '=' => '\3d', - '+' => '\2b', - '<' => '\3c', - '>' => '\3e', - ';' => '\3b', - "\\"=> '\5c', - '"' => '\22', - '#' => '\23' - ); - } - else { - $replace = array( - '*' => '\2a', - '(' => '\28', - ')' => '\29', - "\\" => '\5c', - '/' => '\2f' - ); - } - - return strtr($str, $replace); - } - - /** - * create ber encoding for sort control - * - * @param array List of cols to sort by - * @return string BER encoded option value - */ - private static function _sort_ber_encode($sortcols) - { - $str = ''; - foreach (array_reverse((array)$sortcols) as $col) { - $ber_val = self::_string2hex($col); - - // 30 = ber sequence with a length of octet value - // 04 = octet string with a length of the ascii value - $oct = self::_ber_addseq($ber_val, '04'); - $str = self::_ber_addseq($oct, '30') . $str; - } - - // now tack on sequence identifier and length - $str = self::_ber_addseq($str, '30'); - - return pack('H'.strlen($str), $str); - } - - /** - * Returns ascii string encoded in hex - */ - private static function _string2hex($str) - { - $hex = ''; - for ($i=0; $i < strlen($str); $i++) - $hex .= dechex(ord($str[$i])); - - return $hex; - } - - /** - * Generate BER encoded string for Virtual List View option - * - * @param integer List offset (first record) - * @param integer Records per page - * @return string BER encoded option value - */ - private static function _vlv_ber_encode($offset, $rpp, $search = '') - { - // This string is ber-encoded, php will prefix this value with: - // 04 (octet string) and 10 (length of 16 bytes) - // the code behind this string is broken down as follows: - // 30 = ber sequence with a length of 0e (14) bytes following - // 02 = type integer (in two's complement form) with 2 bytes following (beforeCount): 01 00 (ie 0) - // 02 = type integer (in two's complement form) with 2 bytes following (afterCount): 01 18 (ie 25-1=24) - // a0 = type context-specific/constructed with a length of 06 (6) bytes following - // 02 = type integer with 2 bytes following (offset): 01 01 (ie 1) - // 02 = type integer with 2 bytes following (contentCount): 01 00 - - // whith a search string present: - // 81 = type context-specific/constructed with a length of 04 (4) bytes following (the length will change here) - // 81 indicates a user string is present where as a a0 indicates just a offset search - // 81 = type context-specific/constructed with a length of 06 (6) bytes following - - // the following info was taken from the ISO/IEC 8825-1:2003 x.690 standard re: the - // encoding of integer values (note: these values are in - // two-complement form so since offset will never be negative bit 8 of the - // leftmost octet should never by set to 1): - // 8.3.2: If the contents octets of an integer value encoding consist - // of more than one octet, then the bits of the first octet (rightmost) and bit 8 - // of the second (to the left of first octet) octet: - // a) shall not all be ones; and - // b) shall not all be zero - - if ($search) { - $search = preg_replace('/[^-[:alpha:] ,.()0-9]+/', '', $search); - $ber_val = self::_string2hex($search); - $str = self::_ber_addseq($ber_val, '81'); - } - else { - // construct the string from right to left - $str = "020100"; # contentCount - - // returns encoded integer value in hex format - $ber_val = self::_ber_encode_int($offset); - - // calculate octet length of $ber_val - $str = self::_ber_addseq($ber_val, '02') . $str; - - // now compute length over $str - $str = self::_ber_addseq($str, 'a0'); - } - - // now tack on records per page - $str = "020100" . self::_ber_addseq(self::_ber_encode_int($rpp-1), '02') . $str; - - // now tack on sequence identifier and length - $str = self::_ber_addseq($str, '30'); - - return pack('H'.strlen($str), $str); - } - - private function _fuzzy_search_prefix() - { - switch ($this->config_get("fuzzy_search", 2)) { - case 2: - return "*"; - break; - case 1: - case 0: - default: - return ""; - break; - } - } - - private function _fuzzy_search_suffix() - { - switch ($this->config_get("fuzzy_search", 2)) { - case 2: - return "*"; - break; - case 1: - return "*"; - case 0: - default: - return ""; - break; - } - } - - /** - * Return the search string value to be used in VLV controls - */ - private function _vlv_search($sort, $search) - { - if (!empty($this->additional_filter)) { - $this->_debug("Not setting a VLV search filter because we already have a filter"); - return; - } - - if (empty($search)) { - return; - } - - $search_suffix = $this->_fuzzy_search_suffix(); - - foreach ($search as $attr => $value) { - if (!in_array(strtolower($attr), $sort)) { - $this->_debug("Cannot use VLV search using attribute not indexed: $attr (not in " . var_export($sort, true) . ")"); - return; - } - else { - return $value . $search_suffix; - } - } - } - - /** - * Set server controls for Virtual List View (paginated listing) - */ - private function _vlv_set_controls($sort, $list_page, $page_size, $search = null) - { - $sort_ctrl = array( - 'oid' => "1.2.840.113556.1.4.473", - 'value' => self::_sort_ber_encode($sort) - ); - - if (!empty($search)) { - $this->_debug("_vlv_set_controls to include search: " . var_export($search, true)); - } - - $vlv_ctrl = array( - 'oid' => "2.16.840.1.113730.3.4.9", - 'value' => self::_vlv_ber_encode( - $offset = ($list_page-1) * $page_size + 1, - $page_size, - $search - ), - 'iscritical' => true - ); - - $this->_debug("C: set controls sort=" . join(' ', unpack('H'.(strlen($sort_ctrl['value'])*2), $sort_ctrl['value'])) - . " (" . implode(',', (array) $sort) . ");" - . " vlv=" . join(' ', (unpack('H'.(strlen($vlv_ctrl['value'])*2), $vlv_ctrl['value']))) . " ($offset/$page_size)"); - - if (!ldap_set_option($this->conn, LDAP_OPT_SERVER_CONTROLS, array($sort_ctrl, $vlv_ctrl))) { - $this->_debug("S: ".ldap_error($this->conn)); - $this->set_error(self::ERROR_SEARCH, 'vlvnotsupported'); - - return false; - } - - return true; - } - -} diff --git a/program/lib/Net/LDAP3/Result.php b/program/lib/Net/LDAP3/Result.php deleted file mode 100644 index 0759df087..000000000 --- a/program/lib/Net/LDAP3/Result.php +++ /dev/null @@ -1,152 +0,0 @@ -<?php - -/* - +-----------------------------------------------------------------------+ - | Net/LDAP3/Result.php | - | | - | Based on code created by the Roundcube Webmail team. | - | | - | Copyright (C) 2006-2014, The Roundcube Dev Team | - | Copyright (C) 2012-2014, Kolab Systems AG | - | | - | Licensed under the GNU General Public License version 3 or | - | any later version with exceptions for plugins. | - | See the README file for a full license statement. | - | | - | PURPOSE: | - | Provide advanced functionality for accessing LDAP directories | - | | - +-----------------------------------------------------------------------+ - | Authors: Thomas Bruederli <roundcube@gmail.com> | - | Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> | - +-----------------------------------------------------------------------+ -*/ - -/** - * Model class representing an LDAP search result - * - * @package LDAP - */ -class Net_LDAP3_Result implements Iterator -{ - protected $conn; - protected $base_dn; - protected $filter; - protected $scope; - - private $count; - private $current; - private $iteratorkey = 0; - - /** - * Default constructor - * - * @param resource $conn LDAP link identifier - * @param string $base_dn Base DN used to get this result - * @param string $filter Filter query used to get this result - * @param string $scope Scope of the result - * @param resource $result LDAP result entry identifier - */ - function __construct($conn, $base_dn, $filter, $scope, $result) - { - $this->conn = $conn; - $this->base_dn = $base_dn; - $this->filter = $filter; - $this->scope = $scope; - $this->result = $result; - } - - public function get($property, $default = null) - { - if (isset($this->$property)) { - return $this->$property; - } else { - return $default; - } - } - - public function set($property, $value) - { - $this->$property = $value; - } - - /** - * Wrapper for ldap_sort() - */ - public function sort($attr) - { - return ldap_sort($this->conn, $this->result, $attr); - } - - /** - * Get entries count - */ - public function count() - { - if (!isset($this->count)) { - $this->count = ldap_count_entries($this->conn, $this->result); - } - - return $this->count; - } - - /** - * Wrapper for ldap_get_entries() - * - * @param bool $normalize Optionally normalize the entries to a list of hash arrays - * - * @return array List of LDAP entries - */ - public function entries($normalize = false) - { - $entries = ldap_get_entries($this->conn, $this->result); - - if ($normalize) { - return Net_LDAP3::normalize_result($entries); - } - - return $entries; - } - - /** - * Wrapper for ldap_get_dn() using the current entry pointer - */ - public function get_dn() - { - return $this->current ? ldap_get_dn($this->conn, $this->current) : null; - } - - - /*** Implement PHP 5 Iterator interface to make foreach work ***/ - - function current() - { - $attrib = ldap_get_attributes($this->conn, $this->current); - $attrib['dn'] = ldap_get_dn($this->conn, $this->current); - - return $attrib; - } - - function key() - { - return $this->iteratorkey; - } - - function rewind() - { - $this->iteratorkey = 0; - $this->current = ldap_first_entry($this->conn, $this->result); - } - - function next() - { - $this->iteratorkey++; - $this->current = ldap_next_entry($this->conn, $this->current); - } - - function valid() - { - return (bool)$this->current; - } - -} diff --git a/program/lib/Net/SMTP.php b/program/lib/Net/SMTP.php deleted file mode 100644 index 2c1ef5c55..000000000 --- a/program/lib/Net/SMTP.php +++ /dev/null @@ -1,1338 +0,0 @@ -<?php -/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ -// +----------------------------------------------------------------------+ -// | PHP Version 4 | -// +----------------------------------------------------------------------+ -// | Copyright (c) 1997-2003 The PHP Group | -// +----------------------------------------------------------------------+ -// | This source file is subject to version 2.02 of the PHP license, | -// | that is bundled with this package in the file LICENSE, and is | -// | available at through the world-wide-web at | -// | http://www.php.net/license/2_02.txt. | -// | If you did not receive a copy of the PHP license and are unable to | -// | obtain it through the world-wide-web, please send a note to | -// | license@php.net so we can mail you a copy immediately. | -// +----------------------------------------------------------------------+ -// | Authors: Chuck Hagenbuch <chuck@horde.org> | -// | Jon Parise <jon@php.net> | -// | Damian Alejandro Fernandez Sosa <damlists@cnba.uba.ar> | -// +----------------------------------------------------------------------+ - -require_once 'PEAR.php'; -require_once 'Net/Socket.php'; - -/** - * Provides an implementation of the SMTP protocol using PEAR's - * Net_Socket:: class. - * - * @package Net_SMTP - * @author Chuck Hagenbuch <chuck@horde.org> - * @author Jon Parise <jon@php.net> - * @author Damian Alejandro Fernandez Sosa <damlists@cnba.uba.ar> - * - * @example basic.php A basic implementation of the Net_SMTP package. - */ -class Net_SMTP -{ - /** - * The server to connect to. - * @var string - * @access public - */ - var $host = 'localhost'; - - /** - * The port to connect to. - * @var int - * @access public - */ - var $port = 25; - - /** - * The value to give when sending EHLO or HELO. - * @var string - * @access public - */ - var $localhost = 'localhost'; - - /** - * List of supported authentication methods, in preferential order. - * @var array - * @access public - */ - var $auth_methods = array(); - - /** - * Use SMTP command pipelining (specified in RFC 2920) if the SMTP - * server supports it. - * - * When pipeling is enabled, rcptTo(), mailFrom(), sendFrom(), - * somlFrom() and samlFrom() do not wait for a response from the - * SMTP server but return immediately. - * - * @var bool - * @access public - */ - var $pipelining = false; - - /** - * Number of pipelined commands. - * @var int - * @access private - */ - var $_pipelined_commands = 0; - - /** - * Should debugging output be enabled? - * @var boolean - * @access private - */ - var $_debug = false; - - /** - * Debug output handler. - * @var callback - * @access private - */ - var $_debug_handler = null; - - /** - * The socket resource being used to connect to the SMTP server. - * @var resource - * @access private - */ - var $_socket = null; - - /** - * Array of socket options that will be passed to Net_Socket::connect(). - * @see stream_context_create() - * @var array - * @access private - */ - var $_socket_options = null; - - /** - * The socket I/O timeout value in seconds. - * @var int - * @access private - */ - var $_timeout = 0; - - /** - * The most recent server response code. - * @var int - * @access private - */ - var $_code = -1; - - /** - * The most recent server response arguments. - * @var array - * @access private - */ - var $_arguments = array(); - - /** - * Stores the SMTP server's greeting string. - * @var string - * @access private - */ - var $_greeting = null; - - /** - * Stores detected features of the SMTP server. - * @var array - * @access private - */ - var $_esmtp = array(); - - /** - * Instantiates a new Net_SMTP object, overriding any defaults - * with parameters that are passed in. - * - * If you have SSL support in PHP, you can connect to a server - * over SSL using an 'ssl://' prefix: - * - * // 465 is a common smtps port. - * $smtp = new Net_SMTP('ssl://mail.host.com', 465); - * $smtp->connect(); - * - * @param string $host The server to connect to. - * @param integer $port The port to connect to. - * @param string $localhost The value to give when sending EHLO or HELO. - * @param boolean $pipeling Use SMTP command pipelining - * @param integer $timeout Socket I/O timeout in seconds. - * @param array $socket_options Socket stream_context_create() options. - * - * @access public - * @since 1.0 - */ - function Net_SMTP($host = null, $port = null, $localhost = null, - $pipelining = false, $timeout = 0, $socket_options = null) - { - if (isset($host)) { - $this->host = $host; - } - if (isset($port)) { - $this->port = $port; - } - if (isset($localhost)) { - $this->localhost = $localhost; - } - $this->pipelining = $pipelining; - - $this->_socket = new Net_Socket(); - $this->_socket_options = $socket_options; - $this->_timeout = $timeout; - - /* Include the Auth_SASL package. If the package is available, we - * enable the authentication methods that depend upon it. */ - if (@include_once 'Auth/SASL.php') { - $this->setAuthMethod('CRAM-MD5', array($this, '_authCram_MD5')); - $this->setAuthMethod('DIGEST-MD5', array($this, '_authDigest_MD5')); - } - - /* These standard authentication methods are always available. */ - $this->setAuthMethod('LOGIN', array($this, '_authLogin'), false); - $this->setAuthMethod('PLAIN', array($this, '_authPlain'), false); - } - - /** - * Set the socket I/O timeout value in seconds plus microseconds. - * - * @param integer $seconds Timeout value in seconds. - * @param integer $microseconds Additional value in microseconds. - * - * @access public - * @since 1.5.0 - */ - function setTimeout($seconds, $microseconds = 0) { - return $this->_socket->setTimeout($seconds, $microseconds); - } - - /** - * Set the value of the debugging flag. - * - * @param boolean $debug New value for the debugging flag. - * - * @access public - * @since 1.1.0 - */ - function setDebug($debug, $handler = null) - { - $this->_debug = $debug; - $this->_debug_handler = $handler; - } - - /** - * Write the given debug text to the current debug output handler. - * - * @param string $message Debug mesage text. - * - * @access private - * @since 1.3.3 - */ - function _debug($message) - { - if ($this->_debug) { - if ($this->_debug_handler) { - call_user_func_array($this->_debug_handler, - array(&$this, $message)); - } else { - echo "DEBUG: $message\n"; - } - } - } - - /** - * Send the given string of data to the server. - * - * @param string $data The string of data to send. - * - * @return mixed The number of bytes that were actually written, - * or a PEAR_Error object on failure. - * - * @access private - * @since 1.1.0 - */ - function _send($data) - { - $this->_debug("Send: $data"); - - $result = $this->_socket->write($data); - if (!$result || PEAR::isError($result)) { - $msg = ($result) ? $result->getMessage() : "unknown error"; - return PEAR::raiseError("Failed to write to socket: $msg", - null, PEAR_ERROR_RETURN); - } - - return $result; - } - - /** - * Send a command to the server with an optional string of - * arguments. A carriage return / linefeed (CRLF) sequence will - * be appended to each command string before it is sent to the - * SMTP server - an error will be thrown if the command string - * already contains any newline characters. Use _send() for - * commands that must contain newlines. - * - * @param string $command The SMTP command to send to the server. - * @param string $args A string of optional arguments to append - * to the command. - * - * @return mixed The result of the _send() call. - * - * @access private - * @since 1.1.0 - */ - function _put($command, $args = '') - { - if (!empty($args)) { - $command .= ' ' . $args; - } - - if (strcspn($command, "\r\n") !== strlen($command)) { - return PEAR::raiseError('Commands cannot contain newlines', - null, PEAR_ERROR_RETURN); - } - - return $this->_send($command . "\r\n"); - } - - /** - * Read a reply from the SMTP server. The reply consists of a response - * code and a response message. - * - * @param mixed $valid The set of valid response codes. These - * may be specified as an array of integer - * values or as a single integer value. - * @param bool $later Do not parse the response now, but wait - * until the last command in the pipelined - * command group - * - * @return mixed True if the server returned a valid response code or - * a PEAR_Error object is an error condition is reached. - * - * @access private - * @since 1.1.0 - * - * @see getResponse - */ - function _parseResponse($valid, $later = false) - { - $this->_code = -1; - $this->_arguments = array(); - - if ($later) { - $this->_pipelined_commands++; - return true; - } - - for ($i = 0; $i <= $this->_pipelined_commands; $i++) { - while ($line = $this->_socket->readLine()) { - $this->_debug("Recv: $line"); - - /* If we receive an empty line, the connection was closed. */ - if (empty($line)) { - $this->disconnect(); - return PEAR::raiseError('Connection was closed', - null, PEAR_ERROR_RETURN); - } - - /* Read the code and store the rest in the arguments array. */ - $code = substr($line, 0, 3); - $this->_arguments[] = trim(substr($line, 4)); - - /* Check the syntax of the response code. */ - if (is_numeric($code)) { - $this->_code = (int)$code; - } else { - $this->_code = -1; - break; - } - - /* If this is not a multiline response, we're done. */ - if (substr($line, 3, 1) != '-') { - break; - } - } - } - - $this->_pipelined_commands = 0; - - /* Compare the server's response code with the valid code/codes. */ - if (is_int($valid) && ($this->_code === $valid)) { - return true; - } elseif (is_array($valid) && in_array($this->_code, $valid, true)) { - return true; - } - - return PEAR::raiseError('Invalid response code received from server', - $this->_code, PEAR_ERROR_RETURN); - } - - /** - * Issue an SMTP command and verify its response. - * - * @param string $command The SMTP command string or data. - * @param mixed $valid The set of valid response codes. These - * may be specified as an array of integer - * values or as a single integer value. - * - * @return mixed True on success or a PEAR_Error object on failure. - * - * @access public - * @since 1.6.0 - */ - function command($command, $valid) - { - if (PEAR::isError($error = $this->_put($command))) { - return $error; - } - if (PEAR::isError($error = $this->_parseResponse($valid))) { - return $error; - } - - return true; - } - - /** - * Return a 2-tuple containing the last response from the SMTP server. - * - * @return array A two-element array: the first element contains the - * response code as an integer and the second element - * contains the response's arguments as a string. - * - * @access public - * @since 1.1.0 - */ - function getResponse() - { - return array($this->_code, join("\n", $this->_arguments)); - } - - /** - * Return the SMTP server's greeting string. - * - * @return string A string containing the greeting string, or null if a - * greeting has not been received. - * - * @access public - * @since 1.3.3 - */ - function getGreeting() - { - return $this->_greeting; - } - - /** - * Attempt to connect to the SMTP server. - * - * @param int $timeout The timeout value (in seconds) for the - * socket connection attempt. - * @param bool $persistent Should a persistent socket connection - * be used? - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * @access public - * @since 1.0 - */ - function connect($timeout = null, $persistent = false) - { - $this->_greeting = null; - $result = $this->_socket->connect($this->host, $this->port, - $persistent, $timeout, - $this->_socket_options); - if (PEAR::isError($result)) { - return PEAR::raiseError('Failed to connect socket: ' . - $result->getMessage()); - } - - /* - * Now that we're connected, reset the socket's timeout value for - * future I/O operations. This allows us to have different socket - * timeout values for the initial connection (our $timeout parameter) - * and all other socket operations. - */ - if ($this->_timeout > 0) { - if (PEAR::isError($error = $this->setTimeout($this->_timeout))) { - return $error; - } - } - - if (PEAR::isError($error = $this->_parseResponse(220))) { - return $error; - } - - /* Extract and store a copy of the server's greeting string. */ - list(, $this->_greeting) = $this->getResponse(); - - if (PEAR::isError($error = $this->_negotiate())) { - return $error; - } - - return true; - } - - /** - * Attempt to disconnect from the SMTP server. - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * @access public - * @since 1.0 - */ - function disconnect() - { - if (PEAR::isError($error = $this->_put('QUIT'))) { - return $error; - } - if (PEAR::isError($error = $this->_parseResponse(221))) { - return $error; - } - if (PEAR::isError($error = $this->_socket->disconnect())) { - return PEAR::raiseError('Failed to disconnect socket: ' . - $error->getMessage()); - } - - return true; - } - - /** - * Attempt to send the EHLO command and obtain a list of ESMTP - * extensions available, and failing that just send HELO. - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * - * @access private - * @since 1.1.0 - */ - function _negotiate() - { - if (PEAR::isError($error = $this->_put('EHLO', $this->localhost))) { - return $error; - } - - if (PEAR::isError($this->_parseResponse(250))) { - /* If we receive a 503 response, we're already authenticated. */ - if ($this->_code === 503) { - return true; - } - - /* If the EHLO failed, try the simpler HELO command. */ - if (PEAR::isError($error = $this->_put('HELO', $this->localhost))) { - return $error; - } - if (PEAR::isError($this->_parseResponse(250))) { - return PEAR::raiseError('HELO was not accepted: ', $this->_code, - PEAR_ERROR_RETURN); - } - - return true; - } - - foreach ($this->_arguments as $argument) { - $verb = strtok($argument, ' '); - $arguments = substr($argument, strlen($verb) + 1, - strlen($argument) - strlen($verb) - 1); - $this->_esmtp[$verb] = $arguments; - } - - if (!isset($this->_esmtp['PIPELINING'])) { - $this->pipelining = false; - } - - return true; - } - - /** - * Returns the name of the best authentication method that the server - * has advertised. - * - * @return mixed Returns a string containing the name of the best - * supported authentication method or a PEAR_Error object - * if a failure condition is encountered. - * @access private - * @since 1.1.0 - */ - function _getBestAuthMethod() - { - $available_methods = explode(' ', $this->_esmtp['AUTH']); - - foreach ($this->auth_methods as $method => $callback) { - if (in_array($method, $available_methods)) { - return $method; - } - } - - return PEAR::raiseError('No supported authentication methods', - null, PEAR_ERROR_RETURN); - } - - /** - * Attempt to do SMTP authentication. - * - * @param string The userid to authenticate as. - * @param string The password to authenticate with. - * @param string The requested authentication method. If none is - * specified, the best supported method will be used. - * @param bool Flag indicating whether or not TLS should be attempted. - * @param string An optional authorization identifier. If specified, this - * identifier will be used as the authorization proxy. - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * @access public - * @since 1.0 - */ - function auth($uid, $pwd , $method = '', $tls = true, $authz = '') - { - /* We can only attempt a TLS connection if one has been requested, - * we're running PHP 5.1.0 or later, have access to the OpenSSL - * extension, are connected to an SMTP server which supports the - * STARTTLS extension, and aren't already connected over a secure - * (SSL) socket connection. */ - if ($tls && version_compare(PHP_VERSION, '5.1.0', '>=') && - extension_loaded('openssl') && isset($this->_esmtp['STARTTLS']) && - strncasecmp($this->host, 'ssl://', 6) !== 0) { - /* Start the TLS connection attempt. */ - if (PEAR::isError($result = $this->_put('STARTTLS'))) { - return $result; - } - if (PEAR::isError($result = $this->_parseResponse(220))) { - return $result; - } - if (PEAR::isError($result = $this->_socket->enableCrypto(true, STREAM_CRYPTO_METHOD_TLS_CLIENT))) { - return $result; - } elseif ($result !== true) { - return PEAR::raiseError('STARTTLS failed'); - } - - /* Send EHLO again to recieve the AUTH string from the - * SMTP server. */ - $this->_negotiate(); - } - - if (empty($this->_esmtp['AUTH'])) { - return PEAR::raiseError('SMTP server does not support authentication'); - } - - /* If no method has been specified, get the name of the best - * supported method advertised by the SMTP server. */ - if (empty($method)) { - if (PEAR::isError($method = $this->_getBestAuthMethod())) { - /* Return the PEAR_Error object from _getBestAuthMethod(). */ - return $method; - } - } else { - $method = strtoupper($method); - if (!array_key_exists($method, $this->auth_methods)) { - return PEAR::raiseError("$method is not a supported authentication method"); - } - } - - if (!isset($this->auth_methods[$method])) { - return PEAR::raiseError("$method is not a supported authentication method"); - } - - if (!is_callable($this->auth_methods[$method], false)) { - return PEAR::raiseError("$method authentication method cannot be called"); - } - - if (is_array($this->auth_methods[$method])) { - list($object, $method) = $this->auth_methods[$method]; - $result = $object->{$method}($uid, $pwd, $authz, $this); - } else { - $func = $this->auth_methods[$method]; - $result = $func($uid, $pwd, $authz, $this); - } - - /* If an error was encountered, return the PEAR_Error object. */ - if (PEAR::isError($result)) { - return $result; - } - - return true; - } - - /** - * Add a new authentication method. - * - * @param string The authentication method name (e.g. 'PLAIN') - * @param mixed The authentication callback (given as the name of a - * function or as an (object, method name) array). - * @param bool Should the new method be prepended to the list of - * available methods? This is the default behavior, - * giving the new method the highest priority. - * - * @return mixed True on success or a PEAR_Error object on failure. - * - * @access public - * @since 1.6.0 - */ - function setAuthMethod($name, $callback, $prepend = true) - { - if (!is_string($name)) { - return PEAR::raiseError('Method name is not a string'); - } - - if (!is_string($callback) && !is_array($callback)) { - return PEAR::raiseError('Method callback must be string or array'); - } - - if (is_array($callback)) { - if (!is_object($callback[0]) || !is_string($callback[1])) - return PEAR::raiseError('Bad mMethod callback array'); - } - - if ($prepend) { - $this->auth_methods = array_merge(array($name => $callback), - $this->auth_methods); - } else { - $this->auth_methods[$name] = $callback; - } - - return true; - } - - /** - * Authenticates the user using the DIGEST-MD5 method. - * - * @param string The userid to authenticate as. - * @param string The password to authenticate with. - * @param string The optional authorization proxy identifier. - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * @access private - * @since 1.1.0 - */ - function _authDigest_MD5($uid, $pwd, $authz = '') - { - if (PEAR::isError($error = $this->_put('AUTH', 'DIGEST-MD5'))) { - return $error; - } - /* 334: Continue authentication request */ - if (PEAR::isError($error = $this->_parseResponse(334))) { - /* 503: Error: already authenticated */ - if ($this->_code === 503) { - return true; - } - return $error; - } - - $challenge = base64_decode($this->_arguments[0]); - $digest = &Auth_SASL::factory('digest-md5'); - $auth_str = base64_encode($digest->getResponse($uid, $pwd, $challenge, - $this->host, "smtp", - $authz)); - - if (PEAR::isError($error = $this->_put($auth_str))) { - return $error; - } - /* 334: Continue authentication request */ - if (PEAR::isError($error = $this->_parseResponse(334))) { - return $error; - } - - /* We don't use the protocol's third step because SMTP doesn't - * allow subsequent authentication, so we just silently ignore - * it. */ - if (PEAR::isError($error = $this->_put(''))) { - return $error; - } - /* 235: Authentication successful */ - if (PEAR::isError($error = $this->_parseResponse(235))) { - return $error; - } - } - - /** - * Authenticates the user using the CRAM-MD5 method. - * - * @param string The userid to authenticate as. - * @param string The password to authenticate with. - * @param string The optional authorization proxy identifier. - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * @access private - * @since 1.1.0 - */ - function _authCRAM_MD5($uid, $pwd, $authz = '') - { - if (PEAR::isError($error = $this->_put('AUTH', 'CRAM-MD5'))) { - return $error; - } - /* 334: Continue authentication request */ - if (PEAR::isError($error = $this->_parseResponse(334))) { - /* 503: Error: already authenticated */ - if ($this->_code === 503) { - return true; - } - return $error; - } - - $challenge = base64_decode($this->_arguments[0]); - $cram = &Auth_SASL::factory('cram-md5'); - $auth_str = base64_encode($cram->getResponse($uid, $pwd, $challenge)); - - if (PEAR::isError($error = $this->_put($auth_str))) { - return $error; - } - - /* 235: Authentication successful */ - if (PEAR::isError($error = $this->_parseResponse(235))) { - return $error; - } - } - - /** - * Authenticates the user using the LOGIN method. - * - * @param string The userid to authenticate as. - * @param string The password to authenticate with. - * @param string The optional authorization proxy identifier. - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * @access private - * @since 1.1.0 - */ - function _authLogin($uid, $pwd, $authz = '') - { - if (PEAR::isError($error = $this->_put('AUTH', 'LOGIN'))) { - return $error; - } - /* 334: Continue authentication request */ - if (PEAR::isError($error = $this->_parseResponse(334))) { - /* 503: Error: already authenticated */ - if ($this->_code === 503) { - return true; - } - return $error; - } - - if (PEAR::isError($error = $this->_put(base64_encode($uid)))) { - return $error; - } - /* 334: Continue authentication request */ - if (PEAR::isError($error = $this->_parseResponse(334))) { - return $error; - } - - if (PEAR::isError($error = $this->_put(base64_encode($pwd)))) { - return $error; - } - - /* 235: Authentication successful */ - if (PEAR::isError($error = $this->_parseResponse(235))) { - return $error; - } - - return true; - } - - /** - * Authenticates the user using the PLAIN method. - * - * @param string The userid to authenticate as. - * @param string The password to authenticate with. - * @param string The optional authorization proxy identifier. - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * @access private - * @since 1.1.0 - */ - function _authPlain($uid, $pwd, $authz = '') - { - if (PEAR::isError($error = $this->_put('AUTH', 'PLAIN'))) { - return $error; - } - /* 334: Continue authentication request */ - if (PEAR::isError($error = $this->_parseResponse(334))) { - /* 503: Error: already authenticated */ - if ($this->_code === 503) { - return true; - } - return $error; - } - - $auth_str = base64_encode($authz . chr(0) . $uid . chr(0) . $pwd); - - if (PEAR::isError($error = $this->_put($auth_str))) { - return $error; - } - - /* 235: Authentication successful */ - if (PEAR::isError($error = $this->_parseResponse(235))) { - return $error; - } - - return true; - } - - /** - * Send the HELO command. - * - * @param string The domain name to say we are. - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * @access public - * @since 1.0 - */ - function helo($domain) - { - if (PEAR::isError($error = $this->_put('HELO', $domain))) { - return $error; - } - if (PEAR::isError($error = $this->_parseResponse(250))) { - return $error; - } - - return true; - } - - /** - * Return the list of SMTP service extensions advertised by the server. - * - * @return array The list of SMTP service extensions. - * @access public - * @since 1.3 - */ - function getServiceExtensions() - { - return $this->_esmtp; - } - - /** - * Send the MAIL FROM: command. - * - * @param string $sender The sender (reverse path) to set. - * @param string $params String containing additional MAIL parameters, - * such as the NOTIFY flags defined by RFC 1891 - * or the VERP protocol. - * - * If $params is an array, only the 'verp' option - * is supported. If 'verp' is true, the XVERP - * parameter is appended to the MAIL command. If - * the 'verp' value is a string, the full - * XVERP=value parameter is appended. - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * @access public - * @since 1.0 - */ - function mailFrom($sender, $params = null) - { - $args = "FROM:<$sender>"; - - /* Support the deprecated array form of $params. */ - if (is_array($params) && isset($params['verp'])) { - /* XVERP */ - if ($params['verp'] === true) { - $args .= ' XVERP'; - - /* XVERP=something */ - } elseif (trim($params['verp'])) { - $args .= ' XVERP=' . $params['verp']; - } - } elseif (is_string($params) && !empty($params)) { - $args .= ' ' . $params; - } - - if (PEAR::isError($error = $this->_put('MAIL', $args))) { - return $error; - } - if (PEAR::isError($error = $this->_parseResponse(250, $this->pipelining))) { - return $error; - } - - return true; - } - - /** - * Send the RCPT TO: command. - * - * @param string $recipient The recipient (forward path) to add. - * @param string $params String containing additional RCPT parameters, - * such as the NOTIFY flags defined by RFC 1891. - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * - * @access public - * @since 1.0 - */ - function rcptTo($recipient, $params = null) - { - $args = "TO:<$recipient>"; - if (is_string($params)) { - $args .= ' ' . $params; - } - - if (PEAR::isError($error = $this->_put('RCPT', $args))) { - return $error; - } - if (PEAR::isError($error = $this->_parseResponse(array(250, 251), $this->pipelining))) { - return $error; - } - - return true; - } - - /** - * Quote the data so that it meets SMTP standards. - * - * This is provided as a separate public function to facilitate - * easier overloading for the cases where it is desirable to - * customize the quoting behavior. - * - * @param string $data The message text to quote. The string must be passed - * by reference, and the text will be modified in place. - * - * @access public - * @since 1.2 - */ - function quotedata(&$data) - { - /* Because a single leading period (.) signifies an end to the - * data, legitimate leading periods need to be "doubled" ('..'). */ - $data = preg_replace('/^\./m', '..', $data); - - /* Change Unix (\n) and Mac (\r) linefeeds into CRLF's (\r\n). */ - $data = preg_replace('/(?:\r\n|\n|\r(?!\n))/', "\r\n", $data); - } - - /** - * Send the DATA command. - * - * @param mixed $data The message data, either as a string or an open - * file resource. - * @param string $headers The message headers. If $headers is provided, - * $data is assumed to contain only body data. - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * @access public - * @since 1.0 - */ - function data($data, $headers = null) - { - /* Verify that $data is a supported type. */ - if (!is_string($data) && !is_resource($data)) { - return PEAR::raiseError('Expected a string or file resource'); - } - - /* Start by considering the size of the optional headers string. We - * also account for the addition 4 character "\r\n\r\n" separator - * sequence. */ - $size = (is_null($headers)) ? 0 : strlen($headers) + 4; - - if (is_resource($data)) { - $stat = fstat($data); - if ($stat === false) { - return PEAR::raiseError('Failed to get file size'); - } - $size += $stat['size']; - } else { - $size += strlen($data); - } - - /* RFC 1870, section 3, subsection 3 states "a value of zero indicates - * that no fixed maximum message size is in force". Furthermore, it - * says that if "the parameter is omitted no information is conveyed - * about the server's fixed maximum message size". */ - $limit = (isset($this->_esmtp['SIZE'])) ? $this->_esmtp['SIZE'] : 0; - if ($limit > 0 && $size >= $limit) { - $this->disconnect(); - return PEAR::raiseError('Message size exceeds server limit'); - } - - /* Initiate the DATA command. */ - if (PEAR::isError($error = $this->_put('DATA'))) { - return $error; - } - if (PEAR::isError($error = $this->_parseResponse(354))) { - return $error; - } - - /* If we have a separate headers string, send it first. */ - if (!is_null($headers)) { - $this->quotedata($headers); - if (PEAR::isError($result = $this->_send($headers . "\r\n\r\n"))) { - return $result; - } - } - - /* Now we can send the message body data. */ - if (is_resource($data)) { - /* Stream the contents of the file resource out over our socket - * connection, line by line. Each line must be run through the - * quoting routine. */ - while (strlen($line = fread($data, 8192)) > 0) { - /* If the last character is an newline, we need to grab the - * next character to check to see if it is a period. */ - while (!feof($data)) { - $char = fread($data, 1); - $line .= $char; - if ($char != "\n") { - break; - } - } - $this->quotedata($line); - if (PEAR::isError($result = $this->_send($line))) { - return $result; - } - } - } else { - /* - * Break up the data by sending one chunk (up to 512k) at a time. - * This approach reduces our peak memory usage. - */ - for ($offset = 0; $offset < $size;) { - $end = $offset + 512000; - - /* - * Ensure we don't read beyond our data size or span multiple - * lines. quotedata() can't properly handle character data - * that's split across two line break boundaries. - */ - if ($end >= $size) { - $end = $size; - } else { - for (; $end < $size; $end++) { - if ($data[$end] != "\n") { - break; - } - } - } - - /* Extract our chunk and run it through the quoting routine. */ - $chunk = substr($data, $offset, $end - $offset); - $this->quotedata($chunk); - - /* If we run into a problem along the way, abort. */ - if (PEAR::isError($result = $this->_send($chunk))) { - return $result; - } - - /* Advance the offset to the end of this chunk. */ - $offset = $end; - } - } - - /* Finally, send the DATA terminator sequence. */ - if (PEAR::isError($result = $this->_send("\r\n.\r\n"))) { - return $result; - } - - /* Verify that the data was successfully received by the server. */ - if (PEAR::isError($error = $this->_parseResponse(250, $this->pipelining))) { - return $error; - } - - return true; - } - - /** - * Send the SEND FROM: command. - * - * @param string The reverse path to send. - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * @access public - * @since 1.2.6 - */ - function sendFrom($path) - { - if (PEAR::isError($error = $this->_put('SEND', "FROM:<$path>"))) { - return $error; - } - if (PEAR::isError($error = $this->_parseResponse(250, $this->pipelining))) { - return $error; - } - - return true; - } - - /** - * Backwards-compatibility wrapper for sendFrom(). - * - * @param string The reverse path to send. - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * - * @access public - * @since 1.0 - * @deprecated 1.2.6 - */ - function send_from($path) - { - return sendFrom($path); - } - - /** - * Send the SOML FROM: command. - * - * @param string The reverse path to send. - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * @access public - * @since 1.2.6 - */ - function somlFrom($path) - { - if (PEAR::isError($error = $this->_put('SOML', "FROM:<$path>"))) { - return $error; - } - if (PEAR::isError($error = $this->_parseResponse(250, $this->pipelining))) { - return $error; - } - - return true; - } - - /** - * Backwards-compatibility wrapper for somlFrom(). - * - * @param string The reverse path to send. - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * - * @access public - * @since 1.0 - * @deprecated 1.2.6 - */ - function soml_from($path) - { - return somlFrom($path); - } - - /** - * Send the SAML FROM: command. - * - * @param string The reverse path to send. - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * @access public - * @since 1.2.6 - */ - function samlFrom($path) - { - if (PEAR::isError($error = $this->_put('SAML', "FROM:<$path>"))) { - return $error; - } - if (PEAR::isError($error = $this->_parseResponse(250, $this->pipelining))) { - return $error; - } - - return true; - } - - /** - * Backwards-compatibility wrapper for samlFrom(). - * - * @param string The reverse path to send. - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * - * @access public - * @since 1.0 - * @deprecated 1.2.6 - */ - function saml_from($path) - { - return samlFrom($path); - } - - /** - * Send the RSET command. - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * @access public - * @since 1.0 - */ - function rset() - { - if (PEAR::isError($error = $this->_put('RSET'))) { - return $error; - } - if (PEAR::isError($error = $this->_parseResponse(250, $this->pipelining))) { - return $error; - } - - return true; - } - - /** - * Send the VRFY command. - * - * @param string The string to verify - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * @access public - * @since 1.0 - */ - function vrfy($string) - { - /* Note: 251 is also a valid response code */ - if (PEAR::isError($error = $this->_put('VRFY', $string))) { - return $error; - } - if (PEAR::isError($error = $this->_parseResponse(array(250, 252)))) { - return $error; - } - - return true; - } - - /** - * Send the NOOP command. - * - * @return mixed Returns a PEAR_Error with an error message on any - * kind of failure, or true on success. - * @access public - * @since 1.0 - */ - function noop() - { - if (PEAR::isError($error = $this->_put('NOOP'))) { - return $error; - } - if (PEAR::isError($error = $this->_parseResponse(250))) { - return $error; - } - - return true; - } - - /** - * Backwards-compatibility method. identifySender()'s functionality is - * now handled internally. - * - * @return boolean This method always return true. - * - * @access public - * @since 1.0 - */ - function identifySender() - { - return true; - } - -} diff --git a/program/lib/Net/Sieve.php b/program/lib/Net/Sieve.php deleted file mode 100644 index 8ebdf0958..000000000 --- a/program/lib/Net/Sieve.php +++ /dev/null @@ -1,1274 +0,0 @@ -<?php -/** - * This file contains the Net_Sieve class. - * - * PHP version 4 - * - * +-----------------------------------------------------------------------+ - * | All rights reserved. | - * | | - * | Redistribution and use in source and binary forms, with or without | - * | modification, are permitted provided that the following conditions | - * | are met: | - * | | - * | o Redistributions of source code must retain the above copyright | - * | notice, this list of conditions and the following disclaimer. | - * | o 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 | - * | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | - * | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | - * | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | - * | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | - * | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | - * | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | - * | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | - * +-----------------------------------------------------------------------+ - * - * @category Networking - * @package Net_Sieve - * @author Richard Heyes <richard@phpguru.org> - * @author Damian Fernandez Sosa <damlists@cnba.uba.ar> - * @author Anish Mistry <amistry@am-productions.biz> - * @author Jan Schneider <jan@horde.org> - * @copyright 2002-2003 Richard Heyes - * @copyright 2006-2008 Anish Mistry - * @license http://www.opensource.org/licenses/bsd-license.php BSD - * @version SVN: $Id$ - * @link http://pear.php.net/package/Net_Sieve - */ - -require_once 'PEAR.php'; -require_once 'Net/Socket.php'; - -/** - * TODO - * - * o supportsAuthMech() - */ - -/** - * Disconnected state - * @const NET_SIEVE_STATE_DISCONNECTED - */ -define('NET_SIEVE_STATE_DISCONNECTED', 1, true); - -/** - * Authorisation state - * @const NET_SIEVE_STATE_AUTHORISATION - */ -define('NET_SIEVE_STATE_AUTHORISATION', 2, true); - -/** - * Transaction state - * @const NET_SIEVE_STATE_TRANSACTION - */ -define('NET_SIEVE_STATE_TRANSACTION', 3, true); - - -/** - * A class for talking to the timsieved server which comes with Cyrus IMAP. - * - * @category Networking - * @package Net_Sieve - * @author Richard Heyes <richard@phpguru.org> - * @author Damian Fernandez Sosa <damlists@cnba.uba.ar> - * @author Anish Mistry <amistry@am-productions.biz> - * @author Jan Schneider <jan@horde.org> - * @copyright 2002-2003 Richard Heyes - * @copyright 2006-2008 Anish Mistry - * @license http://www.opensource.org/licenses/bsd-license.php BSD - * @version Release: 1.3.2 - * @link http://pear.php.net/package/Net_Sieve - * @link http://tools.ietf.org/html/rfc5228 RFC 5228 (Sieve: An Email - * Filtering Language) - * @link http://tools.ietf.org/html/rfc5804 RFC 5804 A Protocol for - * Remotely Managing Sieve Scripts - */ -class Net_Sieve -{ - /** - * The authentication methods this class supports. - * - * Can be overwritten if having problems with certain methods. - * - * @var array - */ - var $supportedAuthMethods = array('DIGEST-MD5', 'CRAM-MD5', 'EXTERNAL', - 'PLAIN' , 'LOGIN'); - - /** - * SASL authentication methods that require Auth_SASL. - * - * @var array - */ - var $supportedSASLAuthMethods = array('DIGEST-MD5', 'CRAM-MD5'); - - /** - * The socket handle. - * - * @var resource - */ - var $_sock; - - /** - * Parameters and connection information. - * - * @var array - */ - var $_data; - - /** - * Current state of the connection. - * - * One of the NET_SIEVE_STATE_* constants. - * - * @var integer - */ - var $_state; - - /** - * Constructor error. - * - * @var PEAR_Error - */ - var $_error; - - /** - * Whether to enable debugging. - * - * @var boolean - */ - var $_debug = false; - - /** - * Debug output handler. - * - * This has to be a valid callback. - * - * @var string|array - */ - var $_debug_handler = null; - - /** - * Whether to pick up an already established connection. - * - * @var boolean - */ - var $_bypassAuth = false; - - /** - * Whether to use TLS if available. - * - * @var boolean - */ - var $_useTLS = true; - - /** - * Additional options for stream_context_create(). - * - * @var array - */ - var $_options = null; - - /** - * Maximum number of referral loops - * - * @var array - */ - var $_maxReferralCount = 15; - - /** - * Constructor. - * - * Sets up the object, connects to the server and logs in. Stores any - * generated error in $this->_error, which can be retrieved using the - * getError() method. - * - * @param string $user Login username. - * @param string $pass Login password. - * @param string $host Hostname of server. - * @param string $port Port of server. - * @param string $logintype Type of login to perform (see - * $supportedAuthMethods). - * @param string $euser Effective user. If authenticating as an - * administrator, login as this user. - * @param boolean $debug Whether to enable debugging (@see setDebug()). - * @param string $bypassAuth Skip the authentication phase. Useful if the - * socket is already open. - * @param boolean $useTLS Use TLS if available. - * @param array $options Additional options for - * stream_context_create(). - * @param mixed $handler A callback handler for the debug output. - */ - function Net_Sieve($user = null, $pass = null, $host = 'localhost', - $port = 2000, $logintype = '', $euser = '', - $debug = false, $bypassAuth = false, $useTLS = true, - $options = null, $handler = null) - { - $this->_state = NET_SIEVE_STATE_DISCONNECTED; - $this->_data['user'] = $user; - $this->_data['pass'] = $pass; - $this->_data['host'] = $host; - $this->_data['port'] = $port; - $this->_data['logintype'] = $logintype; - $this->_data['euser'] = $euser; - $this->_sock = new Net_Socket(); - $this->_bypassAuth = $bypassAuth; - $this->_useTLS = $useTLS; - $this->_options = $options; - $this->setDebug($debug, $handler); - - /* Try to include the Auth_SASL package. If the package is not - * available, we disable the authentication methods that depend upon - * it. */ - if ((@include_once 'Auth/SASL.php') === false) { - $this->_debug('Auth_SASL not present'); - foreach ($this->supportedSASLAuthMethods as $SASLMethod) { - $pos = array_search($SASLMethod, $this->supportedAuthMethods); - $this->_debug('Disabling method ' . $SASLMethod); - unset($this->supportedAuthMethods[$pos]); - } - } - - if (strlen($user) && strlen($pass)) { - $this->_error = $this->_handleConnectAndLogin(); - } - } - - /** - * Returns any error that may have been generated in the constructor. - * - * @return boolean|PEAR_Error False if no error, PEAR_Error otherwise. - */ - function getError() - { - return PEAR::isError($this->_error) ? $this->_error : false; - } - - /** - * Sets the debug state and handler function. - * - * @param boolean $debug Whether to enable debugging. - * @param string $handler A custom debug handler. Must be a valid callback. - * - * @return void - */ - function setDebug($debug = true, $handler = null) - { - $this->_debug = $debug; - $this->_debug_handler = $handler; - } - - /** - * Connects to the server and logs in. - * - * @return boolean True on success, PEAR_Error on failure. - */ - function _handleConnectAndLogin() - { - if (PEAR::isError($res = $this->connect($this->_data['host'], $this->_data['port'], $this->_options, $this->_useTLS))) { - return $res; - } - if ($this->_bypassAuth === false) { - if (PEAR::isError($res = $this->login($this->_data['user'], $this->_data['pass'], $this->_data['logintype'], $this->_data['euser'], $this->_bypassAuth))) { - return $res; - } - } - return true; - } - - /** - * Handles connecting to the server and checks the response validity. - * - * @param string $host Hostname of server. - * @param string $port Port of server. - * @param array $options List of options to pass to - * stream_context_create(). - * @param boolean $useTLS Use TLS if available. - * - * @return boolean True on success, PEAR_Error otherwise. - */ - function connect($host, $port, $options = null, $useTLS = true) - { - $this->_data['host'] = $host; - $this->_data['port'] = $port; - $this->_useTLS = $useTLS; - if (is_array($options)) { - $this->_options = array_merge($this->_options, $options); - } - - if (NET_SIEVE_STATE_DISCONNECTED != $this->_state) { - return PEAR::raiseError('Not currently in DISCONNECTED state', 1); - } - - if (PEAR::isError($res = $this->_sock->connect($host, $port, false, 5, $options))) { - return $res; - } - - if ($this->_bypassAuth) { - $this->_state = NET_SIEVE_STATE_TRANSACTION; - } else { - $this->_state = NET_SIEVE_STATE_AUTHORISATION; - if (PEAR::isError($res = $this->_doCmd())) { - return $res; - } - } - - // Explicitly ask for the capabilities in case the connection is - // picked up from an existing connection. - if (PEAR::isError($res = $this->_cmdCapability())) { - return PEAR::raiseError( - 'Failed to connect, server said: ' . $res->getMessage(), 2 - ); - } - - // Check if we can enable TLS via STARTTLS. - if ($useTLS && !empty($this->_capability['starttls']) - && function_exists('stream_socket_enable_crypto') - ) { - if (PEAR::isError($res = $this->_startTLS())) { - return $res; - } - } - - return true; - } - - /** - * Disconnect from the Sieve server. - * - * @param boolean $sendLogoutCMD Whether to send LOGOUT command before - * disconnecting. - * - * @return boolean True on success, PEAR_Error otherwise. - */ - function disconnect($sendLogoutCMD = true) - { - return $this->_cmdLogout($sendLogoutCMD); - } - - /** - * Logs into server. - * - * @param string $user Login username. - * @param string $pass Login password. - * @param string $logintype Type of login method to use. - * @param string $euser Effective UID (perform on behalf of $euser). - * @param boolean $bypassAuth Do not perform authentication. - * - * @return boolean True on success, PEAR_Error otherwise. - */ - function login($user, $pass, $logintype = null, $euser = '', $bypassAuth = false) - { - $this->_data['user'] = $user; - $this->_data['pass'] = $pass; - $this->_data['logintype'] = $logintype; - $this->_data['euser'] = $euser; - $this->_bypassAuth = $bypassAuth; - - if (NET_SIEVE_STATE_AUTHORISATION != $this->_state) { - return PEAR::raiseError('Not currently in AUTHORISATION state', 1); - } - - if (!$bypassAuth ) { - if (PEAR::isError($res = $this->_cmdAuthenticate($user, $pass, $logintype, $euser))) { - return $res; - } - } - $this->_state = NET_SIEVE_STATE_TRANSACTION; - - return true; - } - - /** - * Returns an indexed array of scripts currently on the server. - * - * @return array Indexed array of scriptnames. - */ - function listScripts() - { - if (is_array($scripts = $this->_cmdListScripts())) { - $this->_active = $scripts[1]; - return $scripts[0]; - } else { - return $scripts; - } - } - - /** - * Returns the active script. - * - * @return string The active scriptname. - */ - function getActive() - { - if (!empty($this->_active)) { - return $this->_active; - } - if (is_array($scripts = $this->_cmdListScripts())) { - $this->_active = $scripts[1]; - return $scripts[1]; - } - } - - /** - * Sets the active script. - * - * @param string $scriptname The name of the script to be set as active. - * - * @return boolean True on success, PEAR_Error on failure. - */ - function setActive($scriptname) - { - return $this->_cmdSetActive($scriptname); - } - - /** - * Retrieves a script. - * - * @param string $scriptname The name of the script to be retrieved. - * - * @return string The script on success, PEAR_Error on failure. - */ - function getScript($scriptname) - { - return $this->_cmdGetScript($scriptname); - } - - /** - * Adds a script to the server. - * - * @param string $scriptname Name of the script. - * @param string $script The script content. - * @param boolean $makeactive Whether to make this the active script. - * - * @return boolean True on success, PEAR_Error on failure. - */ - function installScript($scriptname, $script, $makeactive = false) - { - if (PEAR::isError($res = $this->_cmdPutScript($scriptname, $script))) { - return $res; - } - if ($makeactive) { - return $this->_cmdSetActive($scriptname); - } - return true; - } - - /** - * Removes a script from the server. - * - * @param string $scriptname Name of the script. - * - * @return boolean True on success, PEAR_Error on failure. - */ - function removeScript($scriptname) - { - return $this->_cmdDeleteScript($scriptname); - } - - /** - * Checks if the server has space to store the script by the server. - * - * @param string $scriptname The name of the script to mark as active. - * @param integer $size The size of the script. - * - * @return boolean|PEAR_Error True if there is space, PEAR_Error otherwise. - * - * @todo Rename to hasSpace() - */ - function haveSpace($scriptname, $size) - { - if (NET_SIEVE_STATE_TRANSACTION != $this->_state) { - return PEAR::raiseError('Not currently in TRANSACTION state', 1); - } - - if (PEAR::isError($res = $this->_doCmd(sprintf('HAVESPACE %s %d', $this->_escape($scriptname), $size)))) { - return $res; - } - return true; - } - - /** - * Returns the list of extensions the server supports. - * - * @return array List of extensions or PEAR_Error on failure. - */ - function getExtensions() - { - if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) { - return PEAR::raiseError('Not currently connected', 7); - } - return $this->_capability['extensions']; - } - - /** - * Returns whether the server supports an extension. - * - * @param string $extension The extension to check. - * - * @return boolean Whether the extension is supported or PEAR_Error on - * failure. - */ - function hasExtension($extension) - { - if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) { - return PEAR::raiseError('Not currently connected', 7); - } - - $extension = trim($this->_toUpper($extension)); - if (is_array($this->_capability['extensions'])) { - foreach ($this->_capability['extensions'] as $ext) { - if ($ext == $extension) { - return true; - } - } - } - - return false; - } - - /** - * Returns the list of authentication methods the server supports. - * - * @return array List of authentication methods or PEAR_Error on failure. - */ - function getAuthMechs() - { - if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) { - return PEAR::raiseError('Not currently connected', 7); - } - return $this->_capability['sasl']; - } - - /** - * Returns whether the server supports an authentication method. - * - * @param string $method The method to check. - * - * @return boolean Whether the method is supported or PEAR_Error on - * failure. - */ - function hasAuthMech($method) - { - if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) { - return PEAR::raiseError('Not currently connected', 7); - } - - $method = trim($this->_toUpper($method)); - if (is_array($this->_capability['sasl'])) { - foreach ($this->_capability['sasl'] as $sasl) { - if ($sasl == $method) { - return true; - } - } - } - - return false; - } - - /** - * Handles the authentication using any known method. - * - * @param string $uid The userid to authenticate as. - * @param string $pwd The password to authenticate with. - * @param string $userMethod The method to use. If empty, the class chooses - * the best (strongest) available method. - * @param string $euser The effective uid to authenticate as. - * - * @return void - */ - function _cmdAuthenticate($uid, $pwd, $userMethod = null, $euser = '') - { - if (PEAR::isError($method = $this->_getBestAuthMethod($userMethod))) { - return $method; - } - switch ($method) { - case 'DIGEST-MD5': - return $this->_authDigestMD5($uid, $pwd, $euser); - case 'CRAM-MD5': - $result = $this->_authCRAMMD5($uid, $pwd, $euser); - break; - case 'LOGIN': - $result = $this->_authLOGIN($uid, $pwd, $euser); - break; - case 'PLAIN': - $result = $this->_authPLAIN($uid, $pwd, $euser); - break; - case 'EXTERNAL': - $result = $this->_authEXTERNAL($uid, $pwd, $euser); - break; - default : - $result = PEAR::raiseError( - $method . ' is not a supported authentication method' - ); - break; - } - - if (PEAR::isError($res = $this->_doCmd())) { - return $res; - } - - // Query the server capabilities again now that we are authenticated. - if (PEAR::isError($res = $this->_cmdCapability())) { - return PEAR::raiseError( - 'Failed to connect, server said: ' . $res->getMessage(), 2 - ); - } - - return $result; - } - - /** - * Authenticates the user using the PLAIN method. - * - * @param string $user The userid to authenticate as. - * @param string $pass The password to authenticate with. - * @param string $euser The effective uid to authenticate as. - * - * @return void - */ - function _authPLAIN($user, $pass, $euser) - { - return $this->_sendCmd( - sprintf( - 'AUTHENTICATE "PLAIN" "%s"', - base64_encode($euser . chr(0) . $user . chr(0) . $pass) - ) - ); - } - - /** - * Authenticates the user using the LOGIN method. - * - * @param string $user The userid to authenticate as. - * @param string $pass The password to authenticate with. - * @param string $euser The effective uid to authenticate as. - * - * @return void - */ - function _authLOGIN($user, $pass, $euser) - { - if (PEAR::isError($result = $this->_sendCmd('AUTHENTICATE "LOGIN"'))) { - return $result; - } - if (PEAR::isError($result = $this->_doCmd('"' . base64_encode($user) . '"', true))) { - return $result; - } - return $this->_doCmd('"' . base64_encode($pass) . '"', true); - } - - /** - * Authenticates the user using the CRAM-MD5 method. - * - * @param string $user The userid to authenticate as. - * @param string $pass The password to authenticate with. - * @param string $euser The effective uid to authenticate as. - * - * @return void - */ - function _authCRAMMD5($user, $pass, $euser) - { - if (PEAR::isError($challenge = $this->_doCmd('AUTHENTICATE "CRAM-MD5"', true))) { - return $challenge; - } - - $challenge = base64_decode(trim($challenge)); - $cram = Auth_SASL::factory('crammd5'); - if (PEAR::isError($response = $cram->getResponse($user, $pass, $challenge))) { - return $response; - } - - return $this->_sendStringResponse(base64_encode($response)); - } - - /** - * Authenticates the user using the DIGEST-MD5 method. - * - * @param string $user The userid to authenticate as. - * @param string $pass The password to authenticate with. - * @param string $euser The effective uid to authenticate as. - * - * @return void - */ - function _authDigestMD5($user, $pass, $euser) - { - if (PEAR::isError($challenge = $this->_doCmd('AUTHENTICATE "DIGEST-MD5"', true))) { - return $challenge; - } - - $challenge = base64_decode(trim($challenge)); - $digest = Auth_SASL::factory('digestmd5'); - // @todo Really 'localhost'? - if (PEAR::isError($response = $digest->getResponse($user, $pass, $challenge, 'localhost', 'sieve', $euser))) { - return $response; - } - - if (PEAR::isError($result = $this->_sendStringResponse(base64_encode($response)))) { - return $result; - } - if (PEAR::isError($result = $this->_doCmd('', true))) { - return $result; - } - if ($this->_toUpper(substr($result, 0, 2)) == 'OK') { - return; - } - - /* We don't use the protocol's third step because SIEVE doesn't allow - * subsequent authentication, so we just silently ignore it. */ - if (PEAR::isError($result = $this->_sendStringResponse(''))) { - return $result; - } - - return $this->_doCmd(); - } - - /** - * Authenticates the user using the EXTERNAL method. - * - * @param string $user The userid to authenticate as. - * @param string $pass The password to authenticate with. - * @param string $euser The effective uid to authenticate as. - * - * @return void - * - * @since 1.1.7 - */ - function _authEXTERNAL($user, $pass, $euser) - { - $cmd = sprintf( - 'AUTHENTICATE "EXTERNAL" "%s"', - base64_encode(strlen($euser) ? $euser : $user) - ); - return $this->_sendCmd($cmd); - } - - /** - * Removes a script from the server. - * - * @param string $scriptname Name of the script to delete. - * - * @return boolean True on success, PEAR_Error otherwise. - */ - function _cmdDeleteScript($scriptname) - { - if (NET_SIEVE_STATE_TRANSACTION != $this->_state) { - return PEAR::raiseError('Not currently in AUTHORISATION state', 1); - } - - if (PEAR::isError($res = $this->_doCmd(sprintf('DELETESCRIPT %s', $this->_escape($scriptname))))) { - return $res; - } - return true; - } - - /** - * Retrieves the contents of the named script. - * - * @param string $scriptname Name of the script to retrieve. - * - * @return string The script if successful, PEAR_Error otherwise. - */ - function _cmdGetScript($scriptname) - { - if (NET_SIEVE_STATE_TRANSACTION != $this->_state) { - return PEAR::raiseError('Not currently in AUTHORISATION state', 1); - } - - if (PEAR::isError($res = $this->_doCmd(sprintf('GETSCRIPT %s', $this->_escape($scriptname))))) { - return $res; - } - - return preg_replace('/^{[0-9]+}\r\n/', '', $res); - } - - /** - * Sets the active script, i.e. the one that gets run on new mail by the - * server. - * - * @param string $scriptname The name of the script to mark as active. - * - * @return boolean True on success, PEAR_Error otherwise. - */ - function _cmdSetActive($scriptname) - { - if (NET_SIEVE_STATE_TRANSACTION != $this->_state) { - return PEAR::raiseError('Not currently in AUTHORISATION state', 1); - } - - if (PEAR::isError($res = $this->_doCmd(sprintf('SETACTIVE %s', $this->_escape($scriptname))))) { - return $res; - } - - $this->_activeScript = $scriptname; - return true; - } - - /** - * Returns the list of scripts on the server. - * - * @return array An array with the list of scripts in the first element - * and the active script in the second element on success, - * PEAR_Error otherwise. - */ - function _cmdListScripts() - { - if (NET_SIEVE_STATE_TRANSACTION != $this->_state) { - return PEAR::raiseError('Not currently in AUTHORISATION state', 1); - } - - if (PEAR::isError($res = $this->_doCmd('LISTSCRIPTS'))) { - return $res; - } - - $scripts = array(); - $activescript = null; - $res = explode("\r\n", $res); - foreach ($res as $value) { - if (preg_match('/^"(.*)"( ACTIVE)?$/i', $value, $matches)) { - $script_name = stripslashes($matches[1]); - $scripts[] = $script_name; - if (!empty($matches[2])) { - $activescript = $script_name; - } - } - } - - return array($scripts, $activescript); - } - - /** - * Adds a script to the server. - * - * @param string $scriptname Name of the new script. - * @param string $scriptdata The new script. - * - * @return boolean True on success, PEAR_Error otherwise. - */ - function _cmdPutScript($scriptname, $scriptdata) - { - if (NET_SIEVE_STATE_TRANSACTION != $this->_state) { - return PEAR::raiseError('Not currently in AUTHORISATION state', 1); - } - - $stringLength = $this->_getLineLength($scriptdata); - $command = sprintf("PUTSCRIPT %s {%d+}\r\n%s", - $this->_escape($scriptname), - $stringLength, - $scriptdata); - if (PEAR::isError($res = $this->_doCmd($command))) { - return $res; - } - - return true; - } - - /** - * Logs out of the server and terminates the connection. - * - * @param boolean $sendLogoutCMD Whether to send LOGOUT command before - * disconnecting. - * - * @return boolean True on success, PEAR_Error otherwise. - */ - function _cmdLogout($sendLogoutCMD = true) - { - if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) { - return PEAR::raiseError('Not currently connected', 1); - } - - if ($sendLogoutCMD) { - if (PEAR::isError($res = $this->_doCmd('LOGOUT'))) { - return $res; - } - } - - $this->_sock->disconnect(); - $this->_state = NET_SIEVE_STATE_DISCONNECTED; - - return true; - } - - /** - * Sends the CAPABILITY command - * - * @return boolean True on success, PEAR_Error otherwise. - */ - function _cmdCapability() - { - if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) { - return PEAR::raiseError('Not currently connected', 1); - } - if (PEAR::isError($res = $this->_doCmd('CAPABILITY'))) { - return $res; - } - $this->_parseCapability($res); - return true; - } - - /** - * Parses the response from the CAPABILITY command and stores the result - * in $_capability. - * - * @param string $data The response from the capability command. - * - * @return void - */ - function _parseCapability($data) - { - // Clear the cached capabilities. - $this->_capability = array('sasl' => array(), - 'extensions' => array()); - - $data = preg_split('/\r?\n/', $this->_toUpper($data), -1, PREG_SPLIT_NO_EMPTY); - - for ($i = 0; $i < count($data); $i++) { - if (!preg_match('/^"([A-Z]+)"( "(.*)")?$/', $data[$i], $matches)) { - continue; - } - switch ($matches[1]) { - case 'IMPLEMENTATION': - $this->_capability['implementation'] = $matches[3]; - break; - - case 'SASL': - $this->_capability['sasl'] = preg_split('/\s+/', $matches[3]); - break; - - case 'SIEVE': - $this->_capability['extensions'] = preg_split('/\s+/', $matches[3]); - break; - - case 'STARTTLS': - $this->_capability['starttls'] = true; - break; - } - } - } - - /** - * Sends a command to the server - * - * @param string $cmd The command to send. - * - * @return void - */ - function _sendCmd($cmd) - { - $status = $this->_sock->getStatus(); - if (PEAR::isError($status) || $status['eof']) { - return PEAR::raiseError('Failed to write to socket: connection lost'); - } - if (PEAR::isError($error = $this->_sock->write($cmd . "\r\n"))) { - return PEAR::raiseError( - 'Failed to write to socket: ' . $error->getMessage() - ); - } - $this->_debug("C: $cmd"); - } - - /** - * Sends a string response to the server. - * - * @param string $str The string to send. - * - * @return void - */ - function _sendStringResponse($str) - { - return $this->_sendCmd('{' . $this->_getLineLength($str) . "+}\r\n" . $str); - } - - /** - * Receives a single line from the server. - * - * @return string The server response line. - */ - function _recvLn() - { - if (PEAR::isError($lastline = $this->_sock->gets(8192))) { - return PEAR::raiseError( - 'Failed to read from socket: ' . $lastline->getMessage() - ); - } - - $lastline = rtrim($lastline); - $this->_debug("S: $lastline"); - - if ($lastline === '') { - return PEAR::raiseError('Failed to read from socket'); - } - - return $lastline; - } - - /** - * Receives a number of bytes from the server. - * - * @param integer $length Number of bytes to read. - * - * @return string The server response. - */ - function _recvBytes($length) - { - $response = ''; - $response_length = 0; - while ($response_length < $length) { - $response .= $this->_sock->read($length - $response_length); - $response_length = $this->_getLineLength($response); - } - $this->_debug('S: ' . rtrim($response)); - return $response; - } - - /** - * Send a command and retrieves a response from the server. - * - * @param string $cmd The command to send. - * @param boolean $auth Whether this is an authentication command. - * - * @return string|PEAR_Error Reponse string if an OK response, PEAR_Error - * if a NO response. - */ - function _doCmd($cmd = '', $auth = false) - { - $referralCount = 0; - while ($referralCount < $this->_maxReferralCount) { - if (strlen($cmd)) { - if (PEAR::isError($error = $this->_sendCmd($cmd))) { - return $error; - } - } - - $response = ''; - while (true) { - if (PEAR::isError($line = $this->_recvLn())) { - return $line; - } - $uc_line = $this->_toUpper($line); - - if ('OK' == substr($uc_line, 0, 2)) { - $response .= $line; - return rtrim($response); - } - - if ('NO' == substr($uc_line, 0, 2)) { - // Check for string literal error message. - if (preg_match('/{([0-9]+)}$/', $line, $matches)) { - $line = substr($line, 0, -(strlen($matches[1])+2)) - . str_replace( - "\r\n", ' ', $this->_recvBytes($matches[1] + 2) - ); - } - return PEAR::raiseError(trim($response . substr($line, 2)), 3); - } - - if ('BYE' == substr($uc_line, 0, 3)) { - if (PEAR::isError($error = $this->disconnect(false))) { - return PEAR::raiseError( - 'Cannot handle BYE, the error was: ' - . $error->getMessage(), - 4 - ); - } - // Check for referral, then follow it. Otherwise, carp an - // error. - if (preg_match('/^bye \(referral "(sieve:\/\/)?([^"]+)/i', $line, $matches)) { - // Replace the old host with the referral host - // preserving any protocol prefix. - $this->_data['host'] = preg_replace( - '/\w+(?!(\w|\:\/\/)).*/', $matches[2], - $this->_data['host'] - ); - if (PEAR::isError($error = $this->_handleConnectAndLogin())) { - return PEAR::raiseError( - 'Cannot follow referral to ' - . $this->_data['host'] . ', the error was: ' - . $error->getMessage(), - 5 - ); - } - break; - } - return PEAR::raiseError(trim($response . $line), 6); - } - - if (preg_match('/^{([0-9]+)}/', $line, $matches)) { - // Matches literal string responses. - $line = $this->_recvBytes($matches[1] + 2); - if (!$auth) { - // Receive the pending OK only if we aren't - // authenticating since string responses during - // authentication don't need an OK. - $this->_recvLn(); - } - return $line; - } - - if ($auth) { - // String responses during authentication don't need an - // OK. - $response .= $line; - return rtrim($response); - } - - $response .= $line . "\r\n"; - $referralCount++; - } - } - - return PEAR::raiseError('Max referral count (' . $referralCount . ') reached. Cyrus murder loop error?', 7); - } - - /** - * Returns the name of the best authentication method that the server - * has advertised. - * - * @param string $userMethod Only consider this method as available. - * - * @return string The name of the best supported authentication method or - * a PEAR_Error object on failure. - */ - function _getBestAuthMethod($userMethod = null) - { - if (!isset($this->_capability['sasl'])) { - return PEAR::raiseError('This server doesn\'t support any authentication methods. SASL problem?'); - } - if (!$this->_capability['sasl']) { - return PEAR::raiseError('This server doesn\'t support any authentication methods.'); - } - - if ($userMethod) { - if (in_array($userMethod, $this->_capability['sasl'])) { - return $userMethod; - } - return PEAR::raiseError( - sprintf('No supported authentication method found. The server supports these methods: %s, but we want to use: %s', - implode(', ', $this->_capability['sasl']), - $userMethod)); - } - - foreach ($this->supportedAuthMethods as $method) { - if (in_array($method, $this->_capability['sasl'])) { - return $method; - } - } - - return PEAR::raiseError( - sprintf('No supported authentication method found. The server supports these methods: %s, but we only support: %s', - implode(', ', $this->_capability['sasl']), - implode(', ', $this->supportedAuthMethods))); - } - - /** - * Starts a TLS connection. - * - * @return boolean True on success, PEAR_Error on failure. - */ - function _startTLS() - { - if (PEAR::isError($res = $this->_doCmd('STARTTLS'))) { - return $res; - } - - if (!stream_socket_enable_crypto($this->_sock->fp, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) { - return PEAR::raiseError('Failed to establish TLS connection', 2); - } - - $this->_debug('STARTTLS negotiation successful'); - - // The server should be sending a CAPABILITY response after - // negotiating TLS. Read it, and ignore if it doesn't. - // Unfortunately old Cyrus versions are broken and don't send a - // CAPABILITY response, thus we would wait here forever. Parse the - // Cyrus version and work around this broken behavior. - if (!preg_match('/^CYRUS TIMSIEVED V([0-9.]+)/', $this->_capability['implementation'], $matches) || - version_compare($matches[1], '2.3.10', '>=')) { - $this->_doCmd(); - } - - // Query the server capabilities again now that we are under - // encryption. - if (PEAR::isError($res = $this->_cmdCapability())) { - return PEAR::raiseError( - 'Failed to connect, server said: ' . $res->getMessage(), 2 - ); - } - - return true; - } - - /** - * Returns the length of a string. - * - * @param string $string A string. - * - * @return integer The length of the string. - */ - function _getLineLength($string) - { - if (extension_loaded('mbstring')) { - return mb_strlen($string, 'latin1'); - } else { - return strlen($string); - } - } - - /** - * Locale independant strtoupper() implementation. - * - * @param string $string The string to convert to lowercase. - * - * @return string The lowercased string, based on ASCII encoding. - */ - function _toUpper($string) - { - $language = setlocale(LC_CTYPE, 0); - setlocale(LC_CTYPE, 'C'); - $string = strtoupper($string); - setlocale(LC_CTYPE, $language); - return $string; - } - - /** - * Converts strings into RFC's quoted-string or literal-c2s form. - * - * @param string $string The string to convert. - * - * @return string Result string. - */ - function _escape($string) - { - // Some implementations don't allow UTF-8 characters in quoted-string, - // use literal-c2s. - if (preg_match('/[^\x01-\x09\x0B-\x0C\x0E-\x7F]/', $string)) { - return sprintf("{%d+}\r\n%s", $this->_getLineLength($string), $string); - } - - return '"' . addcslashes($string, '\\"') . '"'; - } - - /** - * Write debug text to the current debug output handler. - * - * @param string $message Debug message text. - * - * @return void - */ - function _debug($message) - { - if ($this->_debug) { - if ($this->_debug_handler) { - call_user_func_array($this->_debug_handler, array(&$this, $message)); - } else { - echo "$message\n"; - } - } - } -} diff --git a/program/lib/Net/Socket.php b/program/lib/Net/Socket.php deleted file mode 100644 index bf1d1bbcd..000000000 --- a/program/lib/Net/Socket.php +++ /dev/null @@ -1,686 +0,0 @@ -<?php -/** - * Net_Socket - * - * PHP Version 4 - * - * Copyright (c) 1997-2013 The PHP Group - * - * This source file is subject to version 2.0 of the PHP license, - * that is bundled with this package in the file LICENSE, and is - * available at through the world-wide-web at - * http://www.php.net/license/2_02.txt. - * If you did not receive a copy of the PHP license and are unable to - * obtain it through the world-wide-web, please send a note to - * license@php.net so we can mail you a copy immediately. - * - * Authors: Stig Bakken <ssb@php.net> - * Chuck Hagenbuch <chuck@horde.org> - * - * @category Net - * @package Net_Socket - * @author Stig Bakken <ssb@php.net> - * @author Chuck Hagenbuch <chuck@horde.org> - * @copyright 1997-2003 The PHP Group - * @license http://www.php.net/license/2_02.txt PHP 2.02 - * @link http://pear.php.net/packages/Net_Socket - */ - -require_once 'PEAR.php'; - -define('NET_SOCKET_READ', 1); -define('NET_SOCKET_WRITE', 2); -define('NET_SOCKET_ERROR', 4); - -/** - * Generalized Socket class. - * - * @category Net - * @package Net_Socket - * @author Stig Bakken <ssb@php.net> - * @author Chuck Hagenbuch <chuck@horde.org> - * @copyright 1997-2003 The PHP Group - * @license http://www.php.net/license/2_02.txt PHP 2.02 - * @link http://pear.php.net/packages/Net_Socket - */ -class Net_Socket extends PEAR -{ - /** - * Socket file pointer. - * @var resource $fp - */ - var $fp = null; - - /** - * Whether the socket is blocking. Defaults to true. - * @var boolean $blocking - */ - var $blocking = true; - - /** - * Whether the socket is persistent. Defaults to false. - * @var boolean $persistent - */ - var $persistent = false; - - /** - * The IP address to connect to. - * @var string $addr - */ - var $addr = ''; - - /** - * The port number to connect to. - * @var integer $port - */ - var $port = 0; - - /** - * Number of seconds to wait on socket operations before assuming - * there's no more data. Defaults to no timeout. - * @var integer|float $timeout - */ - var $timeout = null; - - /** - * Number of bytes to read at a time in readLine() and - * readAll(). Defaults to 2048. - * @var integer $lineLength - */ - var $lineLength = 2048; - - /** - * The string to use as a newline terminator. Usually "\r\n" or "\n". - * @var string $newline - */ - var $newline = "\r\n"; - - /** - * Connect to the specified port. If called when the socket is - * already connected, it disconnects and connects again. - * - * @param string $addr IP address or host name (may be with protocol prefix). - * @param integer $port TCP port number. - * @param boolean $persistent (optional) Whether the connection is - * persistent (kept open between requests - * by the web server). - * @param integer $timeout (optional) Connection socket timeout. - * @param array $options See options for stream_context_create. - * - * @access public - * - * @return boolean|PEAR_Error True on success or a PEAR_Error on failure. - */ - function connect($addr, $port = 0, $persistent = null, - $timeout = null, $options = null) - { - if (is_resource($this->fp)) { - @fclose($this->fp); - $this->fp = null; - } - - if (!$addr) { - return $this->raiseError('$addr cannot be empty'); - } else if (strspn($addr, ':.0123456789') == strlen($addr)) { - $this->addr = strpos($addr, ':') !== false ? '['.$addr.']' : $addr; - } else { - $this->addr = $addr; - } - - $this->port = $port % 65536; - - if ($persistent !== null) { - $this->persistent = $persistent; - } - - $openfunc = $this->persistent ? 'pfsockopen' : 'fsockopen'; - $errno = 0; - $errstr = ''; - - $old_track_errors = @ini_set('track_errors', 1); - - if ($timeout <= 0) { - $timeout = @ini_get('default_socket_timeout'); - } - - if ($options && function_exists('stream_context_create')) { - $context = stream_context_create($options); - - // Since PHP 5 fsockopen doesn't allow context specification - if (function_exists('stream_socket_client')) { - $flags = STREAM_CLIENT_CONNECT; - - if ($this->persistent) { - $flags = STREAM_CLIENT_PERSISTENT; - } - - $addr = $this->addr . ':' . $this->port; - $fp = stream_socket_client($addr, $errno, $errstr, - $timeout, $flags, $context); - } else { - $fp = @$openfunc($this->addr, $this->port, $errno, - $errstr, $timeout, $context); - } - } else { - $fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $timeout); - } - - if (!$fp) { - if ($errno == 0 && !strlen($errstr) && isset($php_errormsg)) { - $errstr = $php_errormsg; - } - @ini_set('track_errors', $old_track_errors); - return $this->raiseError($errstr, $errno); - } - - @ini_set('track_errors', $old_track_errors); - $this->fp = $fp; - $this->setTimeout(); - return $this->setBlocking($this->blocking); - } - - /** - * Disconnects from the peer, closes the socket. - * - * @access public - * @return mixed true on success or a PEAR_Error instance otherwise - */ - function disconnect() - { - if (!is_resource($this->fp)) { - return $this->raiseError('not connected'); - } - - @fclose($this->fp); - $this->fp = null; - return true; - } - - /** - * Set the newline character/sequence to use. - * - * @param string $newline Newline character(s) - * @return boolean True - */ - function setNewline($newline) - { - $this->newline = $newline; - return true; - } - - /** - * Find out if the socket is in blocking mode. - * - * @access public - * @return boolean The current blocking mode. - */ - function isBlocking() - { - return $this->blocking; - } - - /** - * Sets whether the socket connection should be blocking or - * not. A read call to a non-blocking socket will return immediately - * if there is no data available, whereas it will block until there - * is data for blocking sockets. - * - * @param boolean $mode True for blocking sockets, false for nonblocking. - * - * @access public - * @return mixed true on success or a PEAR_Error instance otherwise - */ - function setBlocking($mode) - { - if (!is_resource($this->fp)) { - return $this->raiseError('not connected'); - } - - $this->blocking = $mode; - stream_set_blocking($this->fp, (int)$this->blocking); - return true; - } - - /** - * Sets the timeout value on socket descriptor, - * expressed in the sum of seconds and microseconds - * - * @param integer $seconds Seconds. - * @param integer $microseconds Microseconds, optional. - * - * @access public - * @return mixed True on success or false on failure or - * a PEAR_Error instance when not connected - */ - function setTimeout($seconds = null, $microseconds = null) - { - if (!is_resource($this->fp)) { - return $this->raiseError('not connected'); - } - - if ($seconds === null && $microseconds === null) { - $seconds = (int) $this->timeout; - $microseconds = (int) (($this->timeout - $seconds) * 1000000); - } else { - $this->timeout = $seconds + $microseconds/1000000; - } - - if ($this->timeout > 0) { - return stream_set_timeout($this->fp, (int) $seconds, (int) $microseconds); - } - else { - return false; - } - } - - /** - * Sets the file buffering size on the stream. - * See php's stream_set_write_buffer for more information. - * - * @param integer $size Write buffer size. - * - * @access public - * @return mixed on success or an PEAR_Error object otherwise - */ - function setWriteBuffer($size) - { - if (!is_resource($this->fp)) { - return $this->raiseError('not connected'); - } - - $returned = stream_set_write_buffer($this->fp, $size); - if ($returned == 0) { - return true; - } - return $this->raiseError('Cannot set write buffer.'); - } - - /** - * Returns information about an existing socket resource. - * Currently returns four entries in the result array: - * - * <p> - * timed_out (bool) - The socket timed out waiting for data<br> - * blocked (bool) - The socket was blocked<br> - * eof (bool) - Indicates EOF event<br> - * unread_bytes (int) - Number of bytes left in the socket buffer<br> - * </p> - * - * @access public - * @return mixed Array containing information about existing socket - * resource or a PEAR_Error instance otherwise - */ - function getStatus() - { - if (!is_resource($this->fp)) { - return $this->raiseError('not connected'); - } - - return stream_get_meta_data($this->fp); - } - - /** - * Get a specified line of data - * - * @param int $size Reading ends when size - 1 bytes have been read, - * or a newline or an EOF (whichever comes first). - * If no size is specified, it will keep reading from - * the stream until it reaches the end of the line. - * - * @access public - * @return mixed $size bytes of data from the socket, or a PEAR_Error if - * not connected. If an error occurs, FALSE is returned. - */ - function gets($size = null) - { - if (!is_resource($this->fp)) { - return $this->raiseError('not connected'); - } - - if (is_null($size)) { - return @fgets($this->fp); - } else { - return @fgets($this->fp, $size); - } - } - - /** - * Read a specified amount of data. This is guaranteed to return, - * and has the added benefit of getting everything in one fread() - * chunk; if you know the size of the data you're getting - * beforehand, this is definitely the way to go. - * - * @param integer $size The number of bytes to read from the socket. - * - * @access public - * @return $size bytes of data from the socket, or a PEAR_Error if - * not connected. - */ - function read($size) - { - if (!is_resource($this->fp)) { - return $this->raiseError('not connected'); - } - - return @fread($this->fp, $size); - } - - /** - * Write a specified amount of data. - * - * @param string $data Data to write. - * @param integer $blocksize Amount of data to write at once. - * NULL means all at once. - * - * @access public - * @return mixed If the socket is not connected, returns an instance of - * PEAR_Error. - * If the write succeeds, returns the number of bytes written. - * If the write fails, returns false. - * If the socket times out, returns an instance of PEAR_Error. - */ - function write($data, $blocksize = null) - { - if (!is_resource($this->fp)) { - return $this->raiseError('not connected'); - } - - if (is_null($blocksize) && !OS_WINDOWS) { - $written = @fwrite($this->fp, $data); - - // Check for timeout or lost connection - if (!$written) { - $meta_data = $this->getStatus(); - - if (!is_array($meta_data)) { - return $meta_data; // PEAR_Error - } - - if (!empty($meta_data['timed_out'])) { - return $this->raiseError('timed out'); - } - } - - return $written; - } else { - if (is_null($blocksize)) { - $blocksize = 1024; - } - - $pos = 0; - $size = strlen($data); - while ($pos < $size) { - $written = @fwrite($this->fp, substr($data, $pos, $blocksize)); - - // Check for timeout or lost connection - if (!$written) { - $meta_data = $this->getStatus(); - - if (!is_array($meta_data)) { - return $meta_data; // PEAR_Error - } - - if (!empty($meta_data['timed_out'])) { - return $this->raiseError('timed out'); - } - - return $written; - } - - $pos += $written; - } - - return $pos; - } - } - - /** - * Write a line of data to the socket, followed by a trailing newline. - * - * @param string $data Data to write - * - * @access public - * @return mixed fwrite() result, or PEAR_Error when not connected - */ - function writeLine($data) - { - if (!is_resource($this->fp)) { - return $this->raiseError('not connected'); - } - - return fwrite($this->fp, $data . $this->newline); - } - - /** - * Tests for end-of-file on a socket descriptor. - * - * Also returns true if the socket is disconnected. - * - * @access public - * @return bool - */ - function eof() - { - return (!is_resource($this->fp) || feof($this->fp)); - } - - /** - * Reads a byte of data - * - * @access public - * @return 1 byte of data from the socket, or a PEAR_Error if - * not connected. - */ - function readByte() - { - if (!is_resource($this->fp)) { - return $this->raiseError('not connected'); - } - - return ord(@fread($this->fp, 1)); - } - - /** - * Reads a word of data - * - * @access public - * @return 1 word of data from the socket, or a PEAR_Error if - * not connected. - */ - function readWord() - { - if (!is_resource($this->fp)) { - return $this->raiseError('not connected'); - } - - $buf = @fread($this->fp, 2); - return (ord($buf[0]) + (ord($buf[1]) << 8)); - } - - /** - * Reads an int of data - * - * @access public - * @return integer 1 int of data from the socket, or a PEAR_Error if - * not connected. - */ - function readInt() - { - if (!is_resource($this->fp)) { - return $this->raiseError('not connected'); - } - - $buf = @fread($this->fp, 4); - return (ord($buf[0]) + (ord($buf[1]) << 8) + - (ord($buf[2]) << 16) + (ord($buf[3]) << 24)); - } - - /** - * Reads a zero-terminated string of data - * - * @access public - * @return string, or a PEAR_Error if - * not connected. - */ - function readString() - { - if (!is_resource($this->fp)) { - return $this->raiseError('not connected'); - } - - $string = ''; - while (($char = @fread($this->fp, 1)) != "\x00") { - $string .= $char; - } - return $string; - } - - /** - * Reads an IP Address and returns it in a dot formatted string - * - * @access public - * @return Dot formatted string, or a PEAR_Error if - * not connected. - */ - function readIPAddress() - { - if (!is_resource($this->fp)) { - return $this->raiseError('not connected'); - } - - $buf = @fread($this->fp, 4); - return sprintf('%d.%d.%d.%d', ord($buf[0]), ord($buf[1]), - ord($buf[2]), ord($buf[3])); - } - - /** - * Read until either the end of the socket or a newline, whichever - * comes first. Strips the trailing newline from the returned data. - * - * @access public - * @return All available data up to a newline, without that - * newline, or until the end of the socket, or a PEAR_Error if - * not connected. - */ - function readLine() - { - if (!is_resource($this->fp)) { - return $this->raiseError('not connected'); - } - - $line = ''; - - $timeout = time() + $this->timeout; - - while (!feof($this->fp) && (!$this->timeout || time() < $timeout)) { - $line .= @fgets($this->fp, $this->lineLength); - if (substr($line, -1) == "\n") { - return rtrim($line, $this->newline); - } - } - return $line; - } - - /** - * Read until the socket closes, or until there is no more data in - * the inner PHP buffer. If the inner buffer is empty, in blocking - * mode we wait for at least 1 byte of data. Therefore, in - * blocking mode, if there is no data at all to be read, this - * function will never exit (unless the socket is closed on the - * remote end). - * - * @access public - * - * @return string All data until the socket closes, or a PEAR_Error if - * not connected. - */ - function readAll() - { - if (!is_resource($this->fp)) { - return $this->raiseError('not connected'); - } - - $data = ''; - while (!feof($this->fp)) { - $data .= @fread($this->fp, $this->lineLength); - } - return $data; - } - - /** - * Runs the equivalent of the select() system call on the socket - * with a timeout specified by tv_sec and tv_usec. - * - * @param integer $state Which of read/write/error to check for. - * @param integer $tv_sec Number of seconds for timeout. - * @param integer $tv_usec Number of microseconds for timeout. - * - * @access public - * @return False if select fails, integer describing which of read/write/error - * are ready, or PEAR_Error if not connected. - */ - function select($state, $tv_sec, $tv_usec = 0) - { - if (!is_resource($this->fp)) { - return $this->raiseError('not connected'); - } - - $read = null; - $write = null; - $except = null; - if ($state & NET_SOCKET_READ) { - $read[] = $this->fp; - } - if ($state & NET_SOCKET_WRITE) { - $write[] = $this->fp; - } - if ($state & NET_SOCKET_ERROR) { - $except[] = $this->fp; - } - if (false === ($sr = stream_select($read, $write, $except, - $tv_sec, $tv_usec))) { - return false; - } - - $result = 0; - if (count($read)) { - $result |= NET_SOCKET_READ; - } - if (count($write)) { - $result |= NET_SOCKET_WRITE; - } - if (count($except)) { - $result |= NET_SOCKET_ERROR; - } - return $result; - } - - /** - * Turns encryption on/off on a connected socket. - * - * @param bool $enabled Set this parameter to true to enable encryption - * and false to disable encryption. - * @param integer $type Type of encryption. See stream_socket_enable_crypto() - * for values. - * - * @see http://se.php.net/manual/en/function.stream-socket-enable-crypto.php - * @access public - * @return false on error, true on success and 0 if there isn't enough data - * and the user should try again (non-blocking sockets only). - * A PEAR_Error object is returned if the socket is not - * connected - */ - function enableCrypto($enabled, $type) - { - if (version_compare(phpversion(), "5.1.0", ">=")) { - if (!is_resource($this->fp)) { - return $this->raiseError('not connected'); - } - return @stream_socket_enable_crypto($this->fp, $enabled, $type); - } else { - $msg = 'Net_Socket::enableCrypto() requires php version >= 5.1.0'; - return $this->raiseError($msg); - } - } - -} diff --git a/program/lib/PEAR.php b/program/lib/PEAR.php deleted file mode 100644 index f4dfd968a..000000000 --- a/program/lib/PEAR.php +++ /dev/null @@ -1,1137 +0,0 @@ -<?php -/** - * PEAR, the PHP Extension and Application Repository - * - * PEAR class and PEAR_Error class - * - * PHP versions 4 and 5 - * - * @category pear - * @package PEAR - * @author Sterling Hughes <sterling@php.net> - * @author Stig Bakken <ssb@php.net> - * @author Tomas V.V.Cox <cox@idecnet.com> - * @author Greg Beaver <cellog@php.net> - * @copyright 1997-2009 The Authors - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id$ - * @link http://pear.php.net/package/PEAR - * @since File available since Release 0.1 - */ - -/**#@+ - * ERROR constants - */ -define('PEAR_ERROR_RETURN', 1); -define('PEAR_ERROR_PRINT', 2); -define('PEAR_ERROR_TRIGGER', 4); -define('PEAR_ERROR_DIE', 8); -define('PEAR_ERROR_CALLBACK', 16); -/** - * WARNING: obsolete - * @deprecated - */ -define('PEAR_ERROR_EXCEPTION', 32); -/**#@-*/ -define('PEAR_ZE2', (function_exists('version_compare') && - version_compare(zend_version(), "2-dev", "ge"))); - -if (substr(PHP_OS, 0, 3) == 'WIN') { - define('OS_WINDOWS', true); - define('OS_UNIX', false); - define('PEAR_OS', 'Windows'); -} else { - define('OS_WINDOWS', false); - define('OS_UNIX', true); - define('PEAR_OS', 'Unix'); // blatant assumption -} - -$GLOBALS['_PEAR_default_error_mode'] = PEAR_ERROR_RETURN; -$GLOBALS['_PEAR_default_error_options'] = E_USER_NOTICE; -$GLOBALS['_PEAR_destructor_object_list'] = array(); -$GLOBALS['_PEAR_shutdown_funcs'] = array(); -$GLOBALS['_PEAR_error_handler_stack'] = array(); - -@ini_set('track_errors', true); - -/** - * Base class for other PEAR classes. Provides rudimentary - * emulation of destructors. - * - * If you want a destructor in your class, inherit PEAR and make a - * destructor method called _yourclassname (same name as the - * constructor, but with a "_" prefix). Also, in your constructor you - * have to call the PEAR constructor: $this->PEAR();. - * The destructor method will be called without parameters. Note that - * at in some SAPI implementations (such as Apache), any output during - * the request shutdown (in which destructors are called) seems to be - * discarded. If you need to get any debug information from your - * destructor, use error_log(), syslog() or something similar. - * - * IMPORTANT! To use the emulated destructors you need to create the - * objects by reference: $obj =& new PEAR_child; - * - * @category pear - * @package PEAR - * @author Stig Bakken <ssb@php.net> - * @author Tomas V.V. Cox <cox@idecnet.com> - * @author Greg Beaver <cellog@php.net> - * @copyright 1997-2006 The PHP Group - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.9.0 - * @link http://pear.php.net/package/PEAR - * @see PEAR_Error - * @since Class available since PHP 4.0.2 - * @link http://pear.php.net/manual/en/core.pear.php#core.pear.pear - */ -class PEAR -{ - // {{{ properties - - /** - * Whether to enable internal debug messages. - * - * @var bool - * @access private - */ - var $_debug = false; - - /** - * Default error mode for this object. - * - * @var int - * @access private - */ - var $_default_error_mode = null; - - /** - * Default error options used for this object when error mode - * is PEAR_ERROR_TRIGGER. - * - * @var int - * @access private - */ - var $_default_error_options = null; - - /** - * Default error handler (callback) for this object, if error mode is - * PEAR_ERROR_CALLBACK. - * - * @var string - * @access private - */ - var $_default_error_handler = ''; - - /** - * Which class to use for error objects. - * - * @var string - * @access private - */ - var $_error_class = 'PEAR_Error'; - - /** - * An array of expected errors. - * - * @var array - * @access private - */ - var $_expected_errors = array(); - - // }}} - - // {{{ constructor - - /** - * Constructor. Registers this object in - * $_PEAR_destructor_object_list for destructor emulation if a - * destructor object exists. - * - * @param string $error_class (optional) which class to use for - * error objects, defaults to PEAR_Error. - * @access public - * @return void - */ - function PEAR($error_class = null) - { - $classname = strtolower(get_class($this)); - if ($this->_debug) { - print "PEAR constructor called, class=$classname\n"; - } - if ($error_class !== null) { - $this->_error_class = $error_class; - } - while ($classname && strcasecmp($classname, "pear")) { - $destructor = "_$classname"; - if (method_exists($this, $destructor)) { - global $_PEAR_destructor_object_list; - $_PEAR_destructor_object_list[] = &$this; - if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) { - register_shutdown_function("_PEAR_call_destructors"); - $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true; - } - break; - } else { - $classname = get_parent_class($classname); - } - } - } - - // }}} - // {{{ destructor - - /** - * Destructor (the emulated type of...). Does nothing right now, - * but is included for forward compatibility, so subclass - * destructors should always call it. - * - * See the note in the class desciption about output from - * destructors. - * - * @access public - * @return void - */ - function _PEAR() { - if ($this->_debug) { - printf("PEAR destructor called, class=%s\n", strtolower(get_class($this))); - } - } - - // }}} - // {{{ getStaticProperty() - - /** - * If you have a class that's mostly/entirely static, and you need static - * properties, you can use this method to simulate them. Eg. in your method(s) - * do this: $myVar = &PEAR::getStaticProperty('myclass', 'myVar'); - * You MUST use a reference, or they will not persist! - * - * @access public - * @param string $class The calling classname, to prevent clashes - * @param string $var The variable to retrieve. - * @return mixed A reference to the variable. If not set it will be - * auto initialised to NULL. - */ - function &getStaticProperty($class, $var) - { - static $properties; - if (!isset($properties[$class])) { - $properties[$class] = array(); - } - - if (!array_key_exists($var, $properties[$class])) { - $properties[$class][$var] = null; - } - - return $properties[$class][$var]; - } - - // }}} - // {{{ registerShutdownFunc() - - /** - * Use this function to register a shutdown method for static - * classes. - * - * @access public - * @param mixed $func The function name (or array of class/method) to call - * @param mixed $args The arguments to pass to the function - * @return void - */ - function registerShutdownFunc($func, $args = array()) - { - // if we are called statically, there is a potential - // that no shutdown func is registered. Bug #6445 - if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) { - register_shutdown_function("_PEAR_call_destructors"); - $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true; - } - $GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args); - } - - // }}} - // {{{ isError() - - /** - * Tell whether a value is a PEAR error. - * - * @param mixed $data the value to test - * @param int $code if $data is an error object, return true - * only if $code is a string and - * $obj->getMessage() == $code or - * $code is an integer and $obj->getCode() == $code - * @access public - * @return bool true if parameter is an error - */ - static function isError($data, $code = null) - { - if (!is_object($data) || !is_a($data, 'PEAR_Error')) { - return false; - } - - if (is_null($code)) { - return true; - } elseif (is_string($code)) { - return $data->getMessage() == $code; - } - - return $data->getCode() == $code; - } - - // }}} - // {{{ setErrorHandling() - - /** - * Sets how errors generated by this object should be handled. - * Can be invoked both in objects and statically. If called - * statically, setErrorHandling sets the default behaviour for all - * PEAR objects. If called in an object, setErrorHandling sets - * the default behaviour for that object. - * - * @param int $mode - * One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT, - * PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE, - * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION. - * - * @param mixed $options - * When $mode is PEAR_ERROR_TRIGGER, this is the error level (one - * of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR). - * - * When $mode is PEAR_ERROR_CALLBACK, this parameter is expected - * to be the callback function or method. A callback - * function is a string with the name of the function, a - * callback method is an array of two elements: the element - * at index 0 is the object, and the element at index 1 is - * the name of the method to call in the object. - * - * When $mode is PEAR_ERROR_PRINT or PEAR_ERROR_DIE, this is - * a printf format string used when printing the error - * message. - * - * @access public - * @return void - * @see PEAR_ERROR_RETURN - * @see PEAR_ERROR_PRINT - * @see PEAR_ERROR_TRIGGER - * @see PEAR_ERROR_DIE - * @see PEAR_ERROR_CALLBACK - * @see PEAR_ERROR_EXCEPTION - * - * @since PHP 4.0.5 - */ - - function setErrorHandling($mode = null, $options = null) - { - if (isset($this) && is_a($this, 'PEAR')) { - $setmode = &$this->_default_error_mode; - $setoptions = &$this->_default_error_options; - } else { - $setmode = &$GLOBALS['_PEAR_default_error_mode']; - $setoptions = &$GLOBALS['_PEAR_default_error_options']; - } - - switch ($mode) { - case PEAR_ERROR_EXCEPTION: - case PEAR_ERROR_RETURN: - case PEAR_ERROR_PRINT: - case PEAR_ERROR_TRIGGER: - case PEAR_ERROR_DIE: - case null: - $setmode = $mode; - $setoptions = $options; - break; - - case PEAR_ERROR_CALLBACK: - $setmode = $mode; - // class/object method callback - if (is_callable($options)) { - $setoptions = $options; - } else { - trigger_error("invalid error callback", E_USER_WARNING); - } - break; - - default: - trigger_error("invalid error mode", E_USER_WARNING); - break; - } - } - - // }}} - // {{{ expectError() - - /** - * This method is used to tell which errors you expect to get. - * Expected errors are always returned with error mode - * PEAR_ERROR_RETURN. Expected error codes are stored in a stack, - * and this method pushes a new element onto it. The list of - * expected errors are in effect until they are popped off the - * stack with the popExpect() method. - * - * Note that this method can not be called statically - * - * @param mixed $code a single error code or an array of error codes to expect - * - * @return int the new depth of the "expected errors" stack - * @access public - */ - function expectError($code = '*') - { - if (is_array($code)) { - array_push($this->_expected_errors, $code); - } else { - array_push($this->_expected_errors, array($code)); - } - return sizeof($this->_expected_errors); - } - - // }}} - // {{{ popExpect() - - /** - * This method pops one element off the expected error codes - * stack. - * - * @return array the list of error codes that were popped - */ - function popExpect() - { - return array_pop($this->_expected_errors); - } - - // }}} - // {{{ _checkDelExpect() - - /** - * This method checks unsets an error code if available - * - * @param mixed error code - * @return bool true if the error code was unset, false otherwise - * @access private - * @since PHP 4.3.0 - */ - function _checkDelExpect($error_code) - { - $deleted = false; - - foreach ($this->_expected_errors AS $key => $error_array) { - if (in_array($error_code, $error_array)) { - unset($this->_expected_errors[$key][array_search($error_code, $error_array)]); - $deleted = true; - } - - // clean up empty arrays - if (0 == count($this->_expected_errors[$key])) { - unset($this->_expected_errors[$key]); - } - } - return $deleted; - } - - // }}} - // {{{ delExpect() - - /** - * This method deletes all occurences of the specified element from - * the expected error codes stack. - * - * @param mixed $error_code error code that should be deleted - * @return mixed list of error codes that were deleted or error - * @access public - * @since PHP 4.3.0 - */ - function delExpect($error_code) - { - $deleted = false; - if ((is_array($error_code) && (0 != count($error_code)))) { - // $error_code is a non-empty array here; - // we walk through it trying to unset all - // values - foreach($error_code as $key => $error) { - if ($this->_checkDelExpect($error)) { - $deleted = true; - } else { - $deleted = false; - } - } - return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME - } elseif (!empty($error_code)) { - // $error_code comes alone, trying to unset it - if ($this->_checkDelExpect($error_code)) { - return true; - } else { - return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME - } - } - - // $error_code is empty - return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME - } - - // }}} - // {{{ raiseError() - - /** - * This method is a wrapper that returns an instance of the - * configured error class with this object's default error - * handling applied. If the $mode and $options parameters are not - * specified, the object's defaults are used. - * - * @param mixed $message a text error message or a PEAR error object - * - * @param int $code a numeric error code (it is up to your class - * to define these if you want to use codes) - * - * @param int $mode One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT, - * PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE, - * PEAR_ERROR_CALLBACK, PEAR_ERROR_EXCEPTION. - * - * @param mixed $options If $mode is PEAR_ERROR_TRIGGER, this parameter - * specifies the PHP-internal error level (one of - * E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR). - * If $mode is PEAR_ERROR_CALLBACK, this - * parameter specifies the callback function or - * method. In other error modes this parameter - * is ignored. - * - * @param string $userinfo If you need to pass along for example debug - * information, this parameter is meant for that. - * - * @param string $error_class The returned error object will be - * instantiated from this class, if specified. - * - * @param bool $skipmsg If true, raiseError will only pass error codes, - * the error message parameter will be dropped. - * - * @access public - * @return object a PEAR error object - * @see PEAR::setErrorHandling - * @since PHP 4.0.5 - */ - function &raiseError($message = null, - $code = null, - $mode = null, - $options = null, - $userinfo = null, - $error_class = null, - $skipmsg = false) - { - // The error is yet a PEAR error object - if (is_object($message)) { - $code = $message->getCode(); - $userinfo = $message->getUserInfo(); - $error_class = $message->getType(); - $message->error_message_prefix = ''; - $message = $message->getMessage(); - } - - if (isset($this) && isset($this->_expected_errors) && sizeof($this->_expected_errors) > 0 && sizeof($exp = end($this->_expected_errors))) { - if ($exp[0] == "*" || - (is_int(reset($exp)) && in_array($code, $exp)) || - (is_string(reset($exp)) && in_array($message, $exp))) { - $mode = PEAR_ERROR_RETURN; - } - } - - // No mode given, try global ones - if ($mode === null) { - // Class error handler - if (isset($this) && isset($this->_default_error_mode)) { - $mode = $this->_default_error_mode; - $options = $this->_default_error_options; - // Global error handler - } elseif (isset($GLOBALS['_PEAR_default_error_mode'])) { - $mode = $GLOBALS['_PEAR_default_error_mode']; - $options = $GLOBALS['_PEAR_default_error_options']; - } - } - - if ($error_class !== null) { - $ec = $error_class; - } elseif (isset($this) && isset($this->_error_class)) { - $ec = $this->_error_class; - } else { - $ec = 'PEAR_Error'; - } - - if (intval(PHP_VERSION) < 5) { - // little non-eval hack to fix bug #12147 - include 'PEAR/FixPHP5PEARWarnings.php'; - return $a; - } - - if ($skipmsg) { - $a = new $ec($code, $mode, $options, $userinfo); - } else { - $a = new $ec($message, $code, $mode, $options, $userinfo); - } - - return $a; - } - - // }}} - // {{{ throwError() - - /** - * Simpler form of raiseError with fewer options. In most cases - * message, code and userinfo are enough. - * - * @param string $message - * - */ - function &throwError($message = null, - $code = null, - $userinfo = null) - { - if (isset($this) && is_a($this, 'PEAR')) { - $a = &$this->raiseError($message, $code, null, null, $userinfo); - return $a; - } - - $a = &PEAR::raiseError($message, $code, null, null, $userinfo); - return $a; - } - - // }}} - function staticPushErrorHandling($mode, $options = null) - { - $stack = &$GLOBALS['_PEAR_error_handler_stack']; - $def_mode = &$GLOBALS['_PEAR_default_error_mode']; - $def_options = &$GLOBALS['_PEAR_default_error_options']; - $stack[] = array($def_mode, $def_options); - switch ($mode) { - case PEAR_ERROR_EXCEPTION: - case PEAR_ERROR_RETURN: - case PEAR_ERROR_PRINT: - case PEAR_ERROR_TRIGGER: - case PEAR_ERROR_DIE: - case null: - $def_mode = $mode; - $def_options = $options; - break; - - case PEAR_ERROR_CALLBACK: - $def_mode = $mode; - // class/object method callback - if (is_callable($options)) { - $def_options = $options; - } else { - trigger_error("invalid error callback", E_USER_WARNING); - } - break; - - default: - trigger_error("invalid error mode", E_USER_WARNING); - break; - } - $stack[] = array($mode, $options); - return true; - } - - function staticPopErrorHandling() - { - $stack = &$GLOBALS['_PEAR_error_handler_stack']; - $setmode = &$GLOBALS['_PEAR_default_error_mode']; - $setoptions = &$GLOBALS['_PEAR_default_error_options']; - array_pop($stack); - list($mode, $options) = $stack[sizeof($stack) - 1]; - array_pop($stack); - switch ($mode) { - case PEAR_ERROR_EXCEPTION: - case PEAR_ERROR_RETURN: - case PEAR_ERROR_PRINT: - case PEAR_ERROR_TRIGGER: - case PEAR_ERROR_DIE: - case null: - $setmode = $mode; - $setoptions = $options; - break; - - case PEAR_ERROR_CALLBACK: - $setmode = $mode; - // class/object method callback - if (is_callable($options)) { - $setoptions = $options; - } else { - trigger_error("invalid error callback", E_USER_WARNING); - } - break; - - default: - trigger_error("invalid error mode", E_USER_WARNING); - break; - } - return true; - } - - // {{{ pushErrorHandling() - - /** - * Push a new error handler on top of the error handler options stack. With this - * you can easily override the actual error handler for some code and restore - * it later with popErrorHandling. - * - * @param mixed $mode (same as setErrorHandling) - * @param mixed $options (same as setErrorHandling) - * - * @return bool Always true - * - * @see PEAR::setErrorHandling - */ - function pushErrorHandling($mode, $options = null) - { - $stack = &$GLOBALS['_PEAR_error_handler_stack']; - if (isset($this) && is_a($this, 'PEAR')) { - $def_mode = &$this->_default_error_mode; - $def_options = &$this->_default_error_options; - } else { - $def_mode = &$GLOBALS['_PEAR_default_error_mode']; - $def_options = &$GLOBALS['_PEAR_default_error_options']; - } - $stack[] = array($def_mode, $def_options); - - if (isset($this) && is_a($this, 'PEAR')) { - $this->setErrorHandling($mode, $options); - } else { - PEAR::setErrorHandling($mode, $options); - } - $stack[] = array($mode, $options); - return true; - } - - // }}} - // {{{ popErrorHandling() - - /** - * Pop the last error handler used - * - * @return bool Always true - * - * @see PEAR::pushErrorHandling - */ - function popErrorHandling() - { - $stack = &$GLOBALS['_PEAR_error_handler_stack']; - array_pop($stack); - list($mode, $options) = $stack[sizeof($stack) - 1]; - array_pop($stack); - if (isset($this) && is_a($this, 'PEAR')) { - $this->setErrorHandling($mode, $options); - } else { - PEAR::setErrorHandling($mode, $options); - } - return true; - } - - // }}} - // {{{ loadExtension() - - /** - * OS independant PHP extension load. Remember to take care - * on the correct extension name for case sensitive OSes. - * - * @param string $ext The extension name - * @return bool Success or not on the dl() call - */ - function loadExtension($ext) - { - if (!extension_loaded($ext)) { - // if either returns true dl() will produce a FATAL error, stop that - if ((ini_get('enable_dl') != 1) || (ini_get('safe_mode') == 1)) { - return false; - } - - if (OS_WINDOWS) { - $suffix = '.dll'; - } elseif (PHP_OS == 'HP-UX') { - $suffix = '.sl'; - } elseif (PHP_OS == 'AIX') { - $suffix = '.a'; - } elseif (PHP_OS == 'OSX') { - $suffix = '.bundle'; - } else { - $suffix = '.so'; - } - - return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix); - } - - return true; - } - - // }}} -} - -if (PEAR_ZE2) { - include_once 'PEAR5.php'; -} - -// {{{ _PEAR_call_destructors() - -function _PEAR_call_destructors() -{ - global $_PEAR_destructor_object_list; - if (is_array($_PEAR_destructor_object_list) && - sizeof($_PEAR_destructor_object_list)) - { - reset($_PEAR_destructor_object_list); - if (PEAR_ZE2) { - $destructLifoExists = PEAR5::getStaticProperty('PEAR', 'destructlifo'); - } else { - $destructLifoExists = PEAR::getStaticProperty('PEAR', 'destructlifo'); - } - - if ($destructLifoExists) { - $_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list); - } - - while (list($k, $objref) = each($_PEAR_destructor_object_list)) { - $classname = get_class($objref); - while ($classname) { - $destructor = "_$classname"; - if (method_exists($objref, $destructor)) { - $objref->$destructor(); - break; - } else { - $classname = get_parent_class($classname); - } - } - } - // Empty the object list to ensure that destructors are - // not called more than once. - $_PEAR_destructor_object_list = array(); - } - - // Now call the shutdown functions - if (isset($GLOBALS['_PEAR_shutdown_funcs']) AND is_array($GLOBALS['_PEAR_shutdown_funcs']) AND !empty($GLOBALS['_PEAR_shutdown_funcs'])) { - foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) { - call_user_func_array($value[0], $value[1]); - } - } -} - -// }}} -/** - * Standard PEAR error class for PHP 4 - * - * This class is supserseded by {@link PEAR_Exception} in PHP 5 - * - * @category pear - * @package PEAR - * @author Stig Bakken <ssb@php.net> - * @author Tomas V.V. Cox <cox@idecnet.com> - * @author Gregory Beaver <cellog@php.net> - * @copyright 1997-2006 The PHP Group - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version Release: 1.9.0 - * @link http://pear.php.net/manual/en/core.pear.pear-error.php - * @see PEAR::raiseError(), PEAR::throwError() - * @since Class available since PHP 4.0.2 - */ -class PEAR_Error -{ - // {{{ properties - - var $error_message_prefix = ''; - var $mode = PEAR_ERROR_RETURN; - var $level = E_USER_NOTICE; - var $code = -1; - var $message = ''; - var $userinfo = ''; - var $backtrace = null; - - // }}} - // {{{ constructor - - /** - * PEAR_Error constructor - * - * @param string $message message - * - * @param int $code (optional) error code - * - * @param int $mode (optional) error mode, one of: PEAR_ERROR_RETURN, - * PEAR_ERROR_PRINT, PEAR_ERROR_DIE, PEAR_ERROR_TRIGGER, - * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION - * - * @param mixed $options (optional) error level, _OR_ in the case of - * PEAR_ERROR_CALLBACK, the callback function or object/method - * tuple. - * - * @param string $userinfo (optional) additional user/debug info - * - * @access public - * - */ - function PEAR_Error($message = 'unknown error', $code = null, - $mode = null, $options = null, $userinfo = null) - { - if ($mode === null) { - $mode = PEAR_ERROR_RETURN; - } - $this->message = $message; - $this->code = $code; - $this->mode = $mode; - $this->userinfo = $userinfo; - - if (PEAR_ZE2) { - $skiptrace = PEAR5::getStaticProperty('PEAR_Error', 'skiptrace'); - } else { - $skiptrace = PEAR::getStaticProperty('PEAR_Error', 'skiptrace'); - } - - if (!$skiptrace) { - $this->backtrace = debug_backtrace(); - if (isset($this->backtrace[0]) && isset($this->backtrace[0]['object'])) { - unset($this->backtrace[0]['object']); - } - } - - if ($mode & PEAR_ERROR_CALLBACK) { - $this->level = E_USER_NOTICE; - $this->callback = $options; - } else { - if ($options === null) { - $options = E_USER_NOTICE; - } - - $this->level = $options; - $this->callback = null; - } - - if ($this->mode & PEAR_ERROR_PRINT) { - if (is_null($options) || is_int($options)) { - $format = "%s"; - } else { - $format = $options; - } - - printf($format, $this->getMessage()); - } - - if ($this->mode & PEAR_ERROR_TRIGGER) { - trigger_error($this->getMessage(), $this->level); - } - - if ($this->mode & PEAR_ERROR_DIE) { - $msg = $this->getMessage(); - if (is_null($options) || is_int($options)) { - $format = "%s"; - if (substr($msg, -1) != "\n") { - $msg .= "\n"; - } - } else { - $format = $options; - } - die(sprintf($format, $msg)); - } - - if ($this->mode & PEAR_ERROR_CALLBACK) { - if (is_callable($this->callback)) { - call_user_func($this->callback, $this); - } - } - - if ($this->mode & PEAR_ERROR_EXCEPTION) { - trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING); - eval('$e = new Exception($this->message, $this->code);throw($e);'); - } - } - - // }}} - // {{{ getMode() - - /** - * Get the error mode from an error object. - * - * @return int error mode - * @access public - */ - function getMode() { - return $this->mode; - } - - // }}} - // {{{ getCallback() - - /** - * Get the callback function/method from an error object. - * - * @return mixed callback function or object/method array - * @access public - */ - function getCallback() { - return $this->callback; - } - - // }}} - // {{{ getMessage() - - - /** - * Get the error message from an error object. - * - * @return string full error message - * @access public - */ - function getMessage() - { - return ($this->error_message_prefix . $this->message); - } - - - // }}} - // {{{ getCode() - - /** - * Get error code from an error object - * - * @return int error code - * @access public - */ - function getCode() - { - return $this->code; - } - - // }}} - // {{{ getType() - - /** - * Get the name of this error/exception. - * - * @return string error/exception name (type) - * @access public - */ - function getType() - { - return get_class($this); - } - - // }}} - // {{{ getUserInfo() - - /** - * Get additional user-supplied information. - * - * @return string user-supplied information - * @access public - */ - function getUserInfo() - { - return $this->userinfo; - } - - // }}} - // {{{ getDebugInfo() - - /** - * Get additional debug information supplied by the application. - * - * @return string debug information - * @access public - */ - function getDebugInfo() - { - return $this->getUserInfo(); - } - - // }}} - // {{{ getBacktrace() - - /** - * Get the call backtrace from where the error was generated. - * Supported with PHP 4.3.0 or newer. - * - * @param int $frame (optional) what frame to fetch - * @return array Backtrace, or NULL if not available. - * @access public - */ - function getBacktrace($frame = null) - { - if (defined('PEAR_IGNORE_BACKTRACE')) { - return null; - } - if ($frame === null) { - return $this->backtrace; - } - return $this->backtrace[$frame]; - } - - // }}} - // {{{ addUserInfo() - - function addUserInfo($info) - { - if (empty($this->userinfo)) { - $this->userinfo = $info; - } else { - $this->userinfo .= " ** $info"; - } - } - - // }}} - // {{{ toString() - function __toString() - { - return $this->getMessage(); - } - // }}} - // {{{ toString() - - /** - * Make a string representation of this object. - * - * @return string a string with an object summary - * @access public - */ - function toString() { - $modes = array(); - $levels = array(E_USER_NOTICE => 'notice', - E_USER_WARNING => 'warning', - E_USER_ERROR => 'error'); - if ($this->mode & PEAR_ERROR_CALLBACK) { - if (is_array($this->callback)) { - $callback = (is_object($this->callback[0]) ? - strtolower(get_class($this->callback[0])) : - $this->callback[0]) . '::' . - $this->callback[1]; - } else { - $callback = $this->callback; - } - return sprintf('[%s: message="%s" code=%d mode=callback '. - 'callback=%s prefix="%s" info="%s"]', - strtolower(get_class($this)), $this->message, $this->code, - $callback, $this->error_message_prefix, - $this->userinfo); - } - if ($this->mode & PEAR_ERROR_PRINT) { - $modes[] = 'print'; - } - if ($this->mode & PEAR_ERROR_TRIGGER) { - $modes[] = 'trigger'; - } - if ($this->mode & PEAR_ERROR_DIE) { - $modes[] = 'die'; - } - if ($this->mode & PEAR_ERROR_RETURN) { - $modes[] = 'return'; - } - return sprintf('[%s: message="%s" code=%d mode=%s level=%s '. - 'prefix="%s" info="%s"]', - strtolower(get_class($this)), $this->message, $this->code, - implode("|", $modes), $levels[$this->level], - $this->error_message_prefix, - $this->userinfo); - } - - // }}} -} - -/* - * Local Variables: - * mode: php - * tab-width: 4 - * c-basic-offset: 4 - * End: - */ diff --git a/program/lib/PEAR5.php b/program/lib/PEAR5.php deleted file mode 100644 index 428606780..000000000 --- a/program/lib/PEAR5.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php -/** - * This is only meant for PHP 5 to get rid of certain strict warning - * that doesn't get hidden since it's in the shutdown function - */ -class PEAR5 -{ - /** - * If you have a class that's mostly/entirely static, and you need static - * properties, you can use this method to simulate them. Eg. in your method(s) - * do this: $myVar = &PEAR5::getStaticProperty('myclass', 'myVar'); - * You MUST use a reference, or they will not persist! - * - * @access public - * @param string $class The calling classname, to prevent clashes - * @param string $var The variable to retrieve. - * @return mixed A reference to the variable. If not set it will be - * auto initialised to NULL. - */ - static function &getStaticProperty($class, $var) - { - static $properties; - if (!isset($properties[$class])) { - $properties[$class] = array(); - } - - if (!array_key_exists($var, $properties[$class])) { - $properties[$class][$var] = null; - } - - return $properties[$class][$var]; - } -}
\ No newline at end of file diff --git a/program/lib/Roundcube/bootstrap.php b/program/lib/Roundcube/bootstrap.php index 65ef98ebd..0aa5cb1de 100644 --- a/program/lib/Roundcube/bootstrap.php +++ b/program/lib/Roundcube/bootstrap.php @@ -464,16 +464,14 @@ function rcube_autoload($classname) '/Net_(.+)/', '/Auth_(.+)/', '/^html_.+/', - '/^rcube(.*)/', - '/^utf8$/', + '/^rcube(.*)/' ), array( 'Mail/\\1', 'Net/\\1', 'Auth/\\1', 'Roundcube/html', - 'Roundcube/rcube\\1', - 'utf8.class', + 'Roundcube/rcube\\1' ), $classname ); diff --git a/program/lib/Roundcube/rcube_charset.php b/program/lib/Roundcube/rcube_charset.php index ffec67376..d6ca3c052 100644 --- a/program/lib/Roundcube/rcube_charset.php +++ b/program/lib/Roundcube/rcube_charset.php @@ -273,17 +273,8 @@ class rcube_charset else if ($from == 'ISO-8859-1' && function_exists('utf8_encode')) { return utf8_encode($str); } - else if (class_exists('utf8')) { - if (!$conv) { - $conv = new utf8($from); - } - else { - $conv->loadCharset($from); - } - - if ($_str = $conv->strToUtf8($str)) { - return $_str; - } + else { + user_error("No suitable function found for UTF-8 encoding", E_USER_WARNING); } } @@ -298,17 +289,8 @@ class rcube_charset else if ($to == 'ISO-8859-1' && function_exists('utf8_decode')) { return utf8_decode($str); } - else if (class_exists('utf8')) { - if (!$conv) { - $conv = new utf8($to); - } - else { - $conv->loadCharset($from); - } - - if ($_str = $conv->strToUtf8($str)) { - return $_str; - } + else { + user_error("No suitable function found for UTF-8 decoding", E_USER_WARNING); } } diff --git a/program/lib/encoding/CP1250.map b/program/lib/encoding/CP1250.map deleted file mode 100644 index 081d7763b..000000000 --- a/program/lib/encoding/CP1250.map +++ /dev/null @@ -1,274 +0,0 @@ -# -# Name: cp1250 to Unicode table -# Unicode version: 2.0 -# Table version: 2.01 -# Table format: Format A -# Date: 04/15/98 -# -# Contact: cpxlate@microsoft.com -# -# General notes: none -# -# Format: Three tab-separated columns -# Column #1 is the cp1250 code (in hex) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 is the Unicode name (follows a comment sign, '#') -# -# The entries are in cp1250 order -# -0x00 0x0000 #NULL -0x01 0x0001 #START OF HEADING -0x02 0x0002 #START OF TEXT -0x03 0x0003 #END OF TEXT -0x04 0x0004 #END OF TRANSMISSION -0x05 0x0005 #ENQUIRY -0x06 0x0006 #ACKNOWLEDGE -0x07 0x0007 #BELL -0x08 0x0008 #BACKSPACE -0x09 0x0009 #HORIZONTAL TABULATION -0x0A 0x000A #LINE FEED -0x0B 0x000B #VERTICAL TABULATION -0x0C 0x000C #FORM FEED -0x0D 0x000D #CARRIAGE RETURN -0x0E 0x000E #SHIFT OUT -0x0F 0x000F #SHIFT IN -0x10 0x0010 #DATA LINK ESCAPE -0x11 0x0011 #DEVICE CONTROL ONE -0x12 0x0012 #DEVICE CONTROL TWO -0x13 0x0013 #DEVICE CONTROL THREE -0x14 0x0014 #DEVICE CONTROL FOUR -0x15 0x0015 #NEGATIVE ACKNOWLEDGE -0x16 0x0016 #SYNCHRONOUS IDLE -0x17 0x0017 #END OF TRANSMISSION BLOCK -0x18 0x0018 #CANCEL -0x19 0x0019 #END OF MEDIUM -0x1A 0x001A #SUBSTITUTE -0x1B 0x001B #ESCAPE -0x1C 0x001C #FILE SEPARATOR -0x1D 0x001D #GROUP SEPARATOR -0x1E 0x001E #RECORD SEPARATOR -0x1F 0x001F #UNIT SEPARATOR -0x20 0x0020 #SPACE -0x21 0x0021 #EXCLAMATION MARK -0x22 0x0022 #QUOTATION MARK -0x23 0x0023 #NUMBER SIGN -0x24 0x0024 #DOLLAR SIGN -0x25 0x0025 #PERCENT SIGN -0x26 0x0026 #AMPERSAND -0x27 0x0027 #APOSTROPHE -0x28 0x0028 #LEFT PARENTHESIS -0x29 0x0029 #RIGHT PARENTHESIS -0x2A 0x002A #ASTERISK -0x2B 0x002B #PLUS SIGN -0x2C 0x002C #COMMA -0x2D 0x002D #HYPHEN-MINUS -0x2E 0x002E #FULL STOP -0x2F 0x002F #SOLIDUS -0x30 0x0030 #DIGIT ZERO -0x31 0x0031 #DIGIT ONE -0x32 0x0032 #DIGIT TWO -0x33 0x0033 #DIGIT THREE -0x34 0x0034 #DIGIT FOUR -0x35 0x0035 #DIGIT FIVE -0x36 0x0036 #DIGIT SIX -0x37 0x0037 #DIGIT SEVEN -0x38 0x0038 #DIGIT EIGHT -0x39 0x0039 #DIGIT NINE -0x3A 0x003A #COLON -0x3B 0x003B #SEMICOLON -0x3C 0x003C #LESS-THAN SIGN -0x3D 0x003D #EQUALS SIGN -0x3E 0x003E #GREATER-THAN SIGN -0x3F 0x003F #QUESTION MARK -0x40 0x0040 #COMMERCIAL AT -0x41 0x0041 #LATIN CAPITAL LETTER A -0x42 0x0042 #LATIN CAPITAL LETTER B -0x43 0x0043 #LATIN CAPITAL LETTER C -0x44 0x0044 #LATIN CAPITAL LETTER D -0x45 0x0045 #LATIN CAPITAL LETTER E -0x46 0x0046 #LATIN CAPITAL LETTER F -0x47 0x0047 #LATIN CAPITAL LETTER G -0x48 0x0048 #LATIN CAPITAL LETTER H -0x49 0x0049 #LATIN CAPITAL LETTER I -0x4A 0x004A #LATIN CAPITAL LETTER J -0x4B 0x004B #LATIN CAPITAL LETTER K -0x4C 0x004C #LATIN CAPITAL LETTER L -0x4D 0x004D #LATIN CAPITAL LETTER M -0x4E 0x004E #LATIN CAPITAL LETTER N -0x4F 0x004F #LATIN CAPITAL LETTER O -0x50 0x0050 #LATIN CAPITAL LETTER P -0x51 0x0051 #LATIN CAPITAL LETTER Q -0x52 0x0052 #LATIN CAPITAL LETTER R -0x53 0x0053 #LATIN CAPITAL LETTER S -0x54 0x0054 #LATIN CAPITAL LETTER T -0x55 0x0055 #LATIN CAPITAL LETTER U -0x56 0x0056 #LATIN CAPITAL LETTER V -0x57 0x0057 #LATIN CAPITAL LETTER W -0x58 0x0058 #LATIN CAPITAL LETTER X -0x59 0x0059 #LATIN CAPITAL LETTER Y -0x5A 0x005A #LATIN CAPITAL LETTER Z -0x5B 0x005B #LEFT SQUARE BRACKET -0x5C 0x005C #REVERSE SOLIDUS -0x5D 0x005D #RIGHT SQUARE BRACKET -0x5E 0x005E #CIRCUMFLEX ACCENT -0x5F 0x005F #LOW LINE -0x60 0x0060 #GRAVE ACCENT -0x61 0x0061 #LATIN SMALL LETTER A -0x62 0x0062 #LATIN SMALL LETTER B -0x63 0x0063 #LATIN SMALL LETTER C -0x64 0x0064 #LATIN SMALL LETTER D -0x65 0x0065 #LATIN SMALL LETTER E -0x66 0x0066 #LATIN SMALL LETTER F -0x67 0x0067 #LATIN SMALL LETTER G -0x68 0x0068 #LATIN SMALL LETTER H -0x69 0x0069 #LATIN SMALL LETTER I -0x6A 0x006A #LATIN SMALL LETTER J -0x6B 0x006B #LATIN SMALL LETTER K -0x6C 0x006C #LATIN SMALL LETTER L -0x6D 0x006D #LATIN SMALL LETTER M -0x6E 0x006E #LATIN SMALL LETTER N -0x6F 0x006F #LATIN SMALL LETTER O -0x70 0x0070 #LATIN SMALL LETTER P -0x71 0x0071 #LATIN SMALL LETTER Q -0x72 0x0072 #LATIN SMALL LETTER R -0x73 0x0073 #LATIN SMALL LETTER S -0x74 0x0074 #LATIN SMALL LETTER T -0x75 0x0075 #LATIN SMALL LETTER U -0x76 0x0076 #LATIN SMALL LETTER V -0x77 0x0077 #LATIN SMALL LETTER W -0x78 0x0078 #LATIN SMALL LETTER X -0x79 0x0079 #LATIN SMALL LETTER Y -0x7A 0x007A #LATIN SMALL LETTER Z -0x7B 0x007B #LEFT CURLY BRACKET -0x7C 0x007C #VERTICAL LINE -0x7D 0x007D #RIGHT CURLY BRACKET -0x7E 0x007E #TILDE -0x7F 0x007F #DELETE -0x80 0x20AC #EURO SIGN -0x81 #UNDEFINED -0x82 0x201A #SINGLE LOW-9 QUOTATION MARK -0x83 #UNDEFINED -0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK -0x85 0x2026 #HORIZONTAL ELLIPSIS -0x86 0x2020 #DAGGER -0x87 0x2021 #DOUBLE DAGGER -0x88 #UNDEFINED -0x89 0x2030 #PER MILLE SIGN -0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON -0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK -0x8C 0x015A #LATIN CAPITAL LETTER S WITH ACUTE -0x8D 0x0164 #LATIN CAPITAL LETTER T WITH CARON -0x8E 0x017D #LATIN CAPITAL LETTER Z WITH CARON -0x8F 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE -0x90 #UNDEFINED -0x91 0x2018 #LEFT SINGLE QUOTATION MARK -0x92 0x2019 #RIGHT SINGLE QUOTATION MARK -0x93 0x201C #LEFT DOUBLE QUOTATION MARK -0x94 0x201D #RIGHT DOUBLE QUOTATION MARK -0x95 0x2022 #BULLET -0x96 0x2013 #EN DASH -0x97 0x2014 #EM DASH -0x98 #UNDEFINED -0x99 0x2122 #TRADE MARK SIGN -0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON -0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -0x9C 0x015B #LATIN SMALL LETTER S WITH ACUTE -0x9D 0x0165 #LATIN SMALL LETTER T WITH CARON -0x9E 0x017E #LATIN SMALL LETTER Z WITH CARON -0x9F 0x017A #LATIN SMALL LETTER Z WITH ACUTE -0xA0 0x00A0 #NO-BREAK SPACE -0xA1 0x02C7 #CARON -0xA2 0x02D8 #BREVE -0xA3 0x0141 #LATIN CAPITAL LETTER L WITH STROKE -0xA4 0x00A4 #CURRENCY SIGN -0xA5 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK -0xA6 0x00A6 #BROKEN BAR -0xA7 0x00A7 #SECTION SIGN -0xA8 0x00A8 #DIAERESIS -0xA9 0x00A9 #COPYRIGHT SIGN -0xAA 0x015E #LATIN CAPITAL LETTER S WITH CEDILLA -0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -0xAC 0x00AC #NOT SIGN -0xAD 0x00AD #SOFT HYPHEN -0xAE 0x00AE #REGISTERED SIGN -0xAF 0x017B #LATIN CAPITAL LETTER Z WITH DOT ABOVE -0xB0 0x00B0 #DEGREE SIGN -0xB1 0x00B1 #PLUS-MINUS SIGN -0xB2 0x02DB #OGONEK -0xB3 0x0142 #LATIN SMALL LETTER L WITH STROKE -0xB4 0x00B4 #ACUTE ACCENT -0xB5 0x00B5 #MICRO SIGN -0xB6 0x00B6 #PILCROW SIGN -0xB7 0x00B7 #MIDDLE DOT -0xB8 0x00B8 #CEDILLA -0xB9 0x0105 #LATIN SMALL LETTER A WITH OGONEK -0xBA 0x015F #LATIN SMALL LETTER S WITH CEDILLA -0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -0xBC 0x013D #LATIN CAPITAL LETTER L WITH CARON -0xBD 0x02DD #DOUBLE ACUTE ACCENT -0xBE 0x013E #LATIN SMALL LETTER L WITH CARON -0xBF 0x017C #LATIN SMALL LETTER Z WITH DOT ABOVE -0xC0 0x0154 #LATIN CAPITAL LETTER R WITH ACUTE -0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE -0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX -0xC3 0x0102 #LATIN CAPITAL LETTER A WITH BREVE -0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS -0xC5 0x0139 #LATIN CAPITAL LETTER L WITH ACUTE -0xC6 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE -0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA -0xC8 0x010C #LATIN CAPITAL LETTER C WITH CARON -0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE -0xCA 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK -0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS -0xCC 0x011A #LATIN CAPITAL LETTER E WITH CARON -0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE -0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX -0xCF 0x010E #LATIN CAPITAL LETTER D WITH CARON -0xD0 0x0110 #LATIN CAPITAL LETTER D WITH STROKE -0xD1 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE -0xD2 0x0147 #LATIN CAPITAL LETTER N WITH CARON -0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE -0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX -0xD5 0x0150 #LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS -0xD7 0x00D7 #MULTIPLICATION SIGN -0xD8 0x0158 #LATIN CAPITAL LETTER R WITH CARON -0xD9 0x016E #LATIN CAPITAL LETTER U WITH RING ABOVE -0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE -0xDB 0x0170 #LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS -0xDD 0x00DD #LATIN CAPITAL LETTER Y WITH ACUTE -0xDE 0x0162 #LATIN CAPITAL LETTER T WITH CEDILLA -0xDF 0x00DF #LATIN SMALL LETTER SHARP S -0xE0 0x0155 #LATIN SMALL LETTER R WITH ACUTE -0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE -0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX -0xE3 0x0103 #LATIN SMALL LETTER A WITH BREVE -0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS -0xE5 0x013A #LATIN SMALL LETTER L WITH ACUTE -0xE6 0x0107 #LATIN SMALL LETTER C WITH ACUTE -0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA -0xE8 0x010D #LATIN SMALL LETTER C WITH CARON -0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE -0xEA 0x0119 #LATIN SMALL LETTER E WITH OGONEK -0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS -0xEC 0x011B #LATIN SMALL LETTER E WITH CARON -0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE -0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX -0xEF 0x010F #LATIN SMALL LETTER D WITH CARON -0xF0 0x0111 #LATIN SMALL LETTER D WITH STROKE -0xF1 0x0144 #LATIN SMALL LETTER N WITH ACUTE -0xF2 0x0148 #LATIN SMALL LETTER N WITH CARON -0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE -0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX -0xF5 0x0151 #LATIN SMALL LETTER O WITH DOUBLE ACUTE -0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS -0xF7 0x00F7 #DIVISION SIGN -0xF8 0x0159 #LATIN SMALL LETTER R WITH CARON -0xF9 0x016F #LATIN SMALL LETTER U WITH RING ABOVE -0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE -0xFB 0x0171 #LATIN SMALL LETTER U WITH DOUBLE ACUTE -0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS -0xFD 0x00FD #LATIN SMALL LETTER Y WITH ACUTE -0xFE 0x0163 #LATIN SMALL LETTER T WITH CEDILLA -0xFF 0x02D9 #DOT ABOVE diff --git a/program/lib/encoding/CP1251.map b/program/lib/encoding/CP1251.map deleted file mode 100644 index e7d4f2c5b..000000000 --- a/program/lib/encoding/CP1251.map +++ /dev/null @@ -1,274 +0,0 @@ -# -# Name: cp1251 to Unicode table -# Unicode version: 2.0 -# Table version: 2.01 -# Table format: Format A -# Date: 04/15/98 -# -# Contact: cpxlate@microsoft.com -# -# General notes: none -# -# Format: Three tab-separated columns -# Column #1 is the cp1251 code (in hex) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 is the Unicode name (follows a comment sign, '#') -# -# The entries are in cp1251 order -# -0x00 0x0000 #NULL -0x01 0x0001 #START OF HEADING -0x02 0x0002 #START OF TEXT -0x03 0x0003 #END OF TEXT -0x04 0x0004 #END OF TRANSMISSION -0x05 0x0005 #ENQUIRY -0x06 0x0006 #ACKNOWLEDGE -0x07 0x0007 #BELL -0x08 0x0008 #BACKSPACE -0x09 0x0009 #HORIZONTAL TABULATION -0x0A 0x000A #LINE FEED -0x0B 0x000B #VERTICAL TABULATION -0x0C 0x000C #FORM FEED -0x0D 0x000D #CARRIAGE RETURN -0x0E 0x000E #SHIFT OUT -0x0F 0x000F #SHIFT IN -0x10 0x0010 #DATA LINK ESCAPE -0x11 0x0011 #DEVICE CONTROL ONE -0x12 0x0012 #DEVICE CONTROL TWO -0x13 0x0013 #DEVICE CONTROL THREE -0x14 0x0014 #DEVICE CONTROL FOUR -0x15 0x0015 #NEGATIVE ACKNOWLEDGE -0x16 0x0016 #SYNCHRONOUS IDLE -0x17 0x0017 #END OF TRANSMISSION BLOCK -0x18 0x0018 #CANCEL -0x19 0x0019 #END OF MEDIUM -0x1A 0x001A #SUBSTITUTE -0x1B 0x001B #ESCAPE -0x1C 0x001C #FILE SEPARATOR -0x1D 0x001D #GROUP SEPARATOR -0x1E 0x001E #RECORD SEPARATOR -0x1F 0x001F #UNIT SEPARATOR -0x20 0x0020 #SPACE -0x21 0x0021 #EXCLAMATION MARK -0x22 0x0022 #QUOTATION MARK -0x23 0x0023 #NUMBER SIGN -0x24 0x0024 #DOLLAR SIGN -0x25 0x0025 #PERCENT SIGN -0x26 0x0026 #AMPERSAND -0x27 0x0027 #APOSTROPHE -0x28 0x0028 #LEFT PARENTHESIS -0x29 0x0029 #RIGHT PARENTHESIS -0x2A 0x002A #ASTERISK -0x2B 0x002B #PLUS SIGN -0x2C 0x002C #COMMA -0x2D 0x002D #HYPHEN-MINUS -0x2E 0x002E #FULL STOP -0x2F 0x002F #SOLIDUS -0x30 0x0030 #DIGIT ZERO -0x31 0x0031 #DIGIT ONE -0x32 0x0032 #DIGIT TWO -0x33 0x0033 #DIGIT THREE -0x34 0x0034 #DIGIT FOUR -0x35 0x0035 #DIGIT FIVE -0x36 0x0036 #DIGIT SIX -0x37 0x0037 #DIGIT SEVEN -0x38 0x0038 #DIGIT EIGHT -0x39 0x0039 #DIGIT NINE -0x3A 0x003A #COLON -0x3B 0x003B #SEMICOLON -0x3C 0x003C #LESS-THAN SIGN -0x3D 0x003D #EQUALS SIGN -0x3E 0x003E #GREATER-THAN SIGN -0x3F 0x003F #QUESTION MARK -0x40 0x0040 #COMMERCIAL AT -0x41 0x0041 #LATIN CAPITAL LETTER A -0x42 0x0042 #LATIN CAPITAL LETTER B -0x43 0x0043 #LATIN CAPITAL LETTER C -0x44 0x0044 #LATIN CAPITAL LETTER D -0x45 0x0045 #LATIN CAPITAL LETTER E -0x46 0x0046 #LATIN CAPITAL LETTER F -0x47 0x0047 #LATIN CAPITAL LETTER G -0x48 0x0048 #LATIN CAPITAL LETTER H -0x49 0x0049 #LATIN CAPITAL LETTER I -0x4A 0x004A #LATIN CAPITAL LETTER J -0x4B 0x004B #LATIN CAPITAL LETTER K -0x4C 0x004C #LATIN CAPITAL LETTER L -0x4D 0x004D #LATIN CAPITAL LETTER M -0x4E 0x004E #LATIN CAPITAL LETTER N -0x4F 0x004F #LATIN CAPITAL LETTER O -0x50 0x0050 #LATIN CAPITAL LETTER P -0x51 0x0051 #LATIN CAPITAL LETTER Q -0x52 0x0052 #LATIN CAPITAL LETTER R -0x53 0x0053 #LATIN CAPITAL LETTER S -0x54 0x0054 #LATIN CAPITAL LETTER T -0x55 0x0055 #LATIN CAPITAL LETTER U -0x56 0x0056 #LATIN CAPITAL LETTER V -0x57 0x0057 #LATIN CAPITAL LETTER W -0x58 0x0058 #LATIN CAPITAL LETTER X -0x59 0x0059 #LATIN CAPITAL LETTER Y -0x5A 0x005A #LATIN CAPITAL LETTER Z -0x5B 0x005B #LEFT SQUARE BRACKET -0x5C 0x005C #REVERSE SOLIDUS -0x5D 0x005D #RIGHT SQUARE BRACKET -0x5E 0x005E #CIRCUMFLEX ACCENT -0x5F 0x005F #LOW LINE -0x60 0x0060 #GRAVE ACCENT -0x61 0x0061 #LATIN SMALL LETTER A -0x62 0x0062 #LATIN SMALL LETTER B -0x63 0x0063 #LATIN SMALL LETTER C -0x64 0x0064 #LATIN SMALL LETTER D -0x65 0x0065 #LATIN SMALL LETTER E -0x66 0x0066 #LATIN SMALL LETTER F -0x67 0x0067 #LATIN SMALL LETTER G -0x68 0x0068 #LATIN SMALL LETTER H -0x69 0x0069 #LATIN SMALL LETTER I -0x6A 0x006A #LATIN SMALL LETTER J -0x6B 0x006B #LATIN SMALL LETTER K -0x6C 0x006C #LATIN SMALL LETTER L -0x6D 0x006D #LATIN SMALL LETTER M -0x6E 0x006E #LATIN SMALL LETTER N -0x6F 0x006F #LATIN SMALL LETTER O -0x70 0x0070 #LATIN SMALL LETTER P -0x71 0x0071 #LATIN SMALL LETTER Q -0x72 0x0072 #LATIN SMALL LETTER R -0x73 0x0073 #LATIN SMALL LETTER S -0x74 0x0074 #LATIN SMALL LETTER T -0x75 0x0075 #LATIN SMALL LETTER U -0x76 0x0076 #LATIN SMALL LETTER V -0x77 0x0077 #LATIN SMALL LETTER W -0x78 0x0078 #LATIN SMALL LETTER X -0x79 0x0079 #LATIN SMALL LETTER Y -0x7A 0x007A #LATIN SMALL LETTER Z -0x7B 0x007B #LEFT CURLY BRACKET -0x7C 0x007C #VERTICAL LINE -0x7D 0x007D #RIGHT CURLY BRACKET -0x7E 0x007E #TILDE -0x7F 0x007F #DELETE -0x80 0x0402 #CYRILLIC CAPITAL LETTER DJE -0x81 0x0403 #CYRILLIC CAPITAL LETTER GJE -0x82 0x201A #SINGLE LOW-9 QUOTATION MARK -0x83 0x0453 #CYRILLIC SMALL LETTER GJE -0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK -0x85 0x2026 #HORIZONTAL ELLIPSIS -0x86 0x2020 #DAGGER -0x87 0x2021 #DOUBLE DAGGER -0x88 0x20AC #EURO SIGN -0x89 0x2030 #PER MILLE SIGN -0x8A 0x0409 #CYRILLIC CAPITAL LETTER LJE -0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK -0x8C 0x040A #CYRILLIC CAPITAL LETTER NJE -0x8D 0x040C #CYRILLIC CAPITAL LETTER KJE -0x8E 0x040B #CYRILLIC CAPITAL LETTER TSHE -0x8F 0x040F #CYRILLIC CAPITAL LETTER DZHE -0x90 0x0452 #CYRILLIC SMALL LETTER DJE -0x91 0x2018 #LEFT SINGLE QUOTATION MARK -0x92 0x2019 #RIGHT SINGLE QUOTATION MARK -0x93 0x201C #LEFT DOUBLE QUOTATION MARK -0x94 0x201D #RIGHT DOUBLE QUOTATION MARK -0x95 0x2022 #BULLET -0x96 0x2013 #EN DASH -0x97 0x2014 #EM DASH -0x98 #UNDEFINED -0x99 0x2122 #TRADE MARK SIGN -0x9A 0x0459 #CYRILLIC SMALL LETTER LJE -0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -0x9C 0x045A #CYRILLIC SMALL LETTER NJE -0x9D 0x045C #CYRILLIC SMALL LETTER KJE -0x9E 0x045B #CYRILLIC SMALL LETTER TSHE -0x9F 0x045F #CYRILLIC SMALL LETTER DZHE -0xA0 0x00A0 #NO-BREAK SPACE -0xA1 0x040E #CYRILLIC CAPITAL LETTER SHORT U -0xA2 0x045E #CYRILLIC SMALL LETTER SHORT U -0xA3 0x0408 #CYRILLIC CAPITAL LETTER JE -0xA4 0x00A4 #CURRENCY SIGN -0xA5 0x0490 #CYRILLIC CAPITAL LETTER GHE WITH UPTURN -0xA6 0x00A6 #BROKEN BAR -0xA7 0x00A7 #SECTION SIGN -0xA8 0x0401 #CYRILLIC CAPITAL LETTER IO -0xA9 0x00A9 #COPYRIGHT SIGN -0xAA 0x0404 #CYRILLIC CAPITAL LETTER UKRAINIAN IE -0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -0xAC 0x00AC #NOT SIGN -0xAD 0x00AD #SOFT HYPHEN -0xAE 0x00AE #REGISTERED SIGN -0xAF 0x0407 #CYRILLIC CAPITAL LETTER YI -0xB0 0x00B0 #DEGREE SIGN -0xB1 0x00B1 #PLUS-MINUS SIGN -0xB2 0x0406 #CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I -0xB3 0x0456 #CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I -0xB4 0x0491 #CYRILLIC SMALL LETTER GHE WITH UPTURN -0xB5 0x00B5 #MICRO SIGN -0xB6 0x00B6 #PILCROW SIGN -0xB7 0x00B7 #MIDDLE DOT -0xB8 0x0451 #CYRILLIC SMALL LETTER IO -0xB9 0x2116 #NUMERO SIGN -0xBA 0x0454 #CYRILLIC SMALL LETTER UKRAINIAN IE -0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -0xBC 0x0458 #CYRILLIC SMALL LETTER JE -0xBD 0x0405 #CYRILLIC CAPITAL LETTER DZE -0xBE 0x0455 #CYRILLIC SMALL LETTER DZE -0xBF 0x0457 #CYRILLIC SMALL LETTER YI -0xC0 0x0410 #CYRILLIC CAPITAL LETTER A -0xC1 0x0411 #CYRILLIC CAPITAL LETTER BE -0xC2 0x0412 #CYRILLIC CAPITAL LETTER VE -0xC3 0x0413 #CYRILLIC CAPITAL LETTER GHE -0xC4 0x0414 #CYRILLIC CAPITAL LETTER DE -0xC5 0x0415 #CYRILLIC CAPITAL LETTER IE -0xC6 0x0416 #CYRILLIC CAPITAL LETTER ZHE -0xC7 0x0417 #CYRILLIC CAPITAL LETTER ZE -0xC8 0x0418 #CYRILLIC CAPITAL LETTER I -0xC9 0x0419 #CYRILLIC CAPITAL LETTER SHORT I -0xCA 0x041A #CYRILLIC CAPITAL LETTER KA -0xCB 0x041B #CYRILLIC CAPITAL LETTER EL -0xCC 0x041C #CYRILLIC CAPITAL LETTER EM -0xCD 0x041D #CYRILLIC CAPITAL LETTER EN -0xCE 0x041E #CYRILLIC CAPITAL LETTER O -0xCF 0x041F #CYRILLIC CAPITAL LETTER PE -0xD0 0x0420 #CYRILLIC CAPITAL LETTER ER -0xD1 0x0421 #CYRILLIC CAPITAL LETTER ES -0xD2 0x0422 #CYRILLIC CAPITAL LETTER TE -0xD3 0x0423 #CYRILLIC CAPITAL LETTER U -0xD4 0x0424 #CYRILLIC CAPITAL LETTER EF -0xD5 0x0425 #CYRILLIC CAPITAL LETTER HA -0xD6 0x0426 #CYRILLIC CAPITAL LETTER TSE -0xD7 0x0427 #CYRILLIC CAPITAL LETTER CHE -0xD8 0x0428 #CYRILLIC CAPITAL LETTER SHA -0xD9 0x0429 #CYRILLIC CAPITAL LETTER SHCHA -0xDA 0x042A #CYRILLIC CAPITAL LETTER HARD SIGN -0xDB 0x042B #CYRILLIC CAPITAL LETTER YERU -0xDC 0x042C #CYRILLIC CAPITAL LETTER SOFT SIGN -0xDD 0x042D #CYRILLIC CAPITAL LETTER E -0xDE 0x042E #CYRILLIC CAPITAL LETTER YU -0xDF 0x042F #CYRILLIC CAPITAL LETTER YA -0xE0 0x0430 #CYRILLIC SMALL LETTER A -0xE1 0x0431 #CYRILLIC SMALL LETTER BE -0xE2 0x0432 #CYRILLIC SMALL LETTER VE -0xE3 0x0433 #CYRILLIC SMALL LETTER GHE -0xE4 0x0434 #CYRILLIC SMALL LETTER DE -0xE5 0x0435 #CYRILLIC SMALL LETTER IE -0xE6 0x0436 #CYRILLIC SMALL LETTER ZHE -0xE7 0x0437 #CYRILLIC SMALL LETTER ZE -0xE8 0x0438 #CYRILLIC SMALL LETTER I -0xE9 0x0439 #CYRILLIC SMALL LETTER SHORT I -0xEA 0x043A #CYRILLIC SMALL LETTER KA -0xEB 0x043B #CYRILLIC SMALL LETTER EL -0xEC 0x043C #CYRILLIC SMALL LETTER EM -0xED 0x043D #CYRILLIC SMALL LETTER EN -0xEE 0x043E #CYRILLIC SMALL LETTER O -0xEF 0x043F #CYRILLIC SMALL LETTER PE -0xF0 0x0440 #CYRILLIC SMALL LETTER ER -0xF1 0x0441 #CYRILLIC SMALL LETTER ES -0xF2 0x0442 #CYRILLIC SMALL LETTER TE -0xF3 0x0443 #CYRILLIC SMALL LETTER U -0xF4 0x0444 #CYRILLIC SMALL LETTER EF -0xF5 0x0445 #CYRILLIC SMALL LETTER HA -0xF6 0x0446 #CYRILLIC SMALL LETTER TSE -0xF7 0x0447 #CYRILLIC SMALL LETTER CHE -0xF8 0x0448 #CYRILLIC SMALL LETTER SHA -0xF9 0x0449 #CYRILLIC SMALL LETTER SHCHA -0xFA 0x044A #CYRILLIC SMALL LETTER HARD SIGN -0xFB 0x044B #CYRILLIC SMALL LETTER YERU -0xFC 0x044C #CYRILLIC SMALL LETTER SOFT SIGN -0xFD 0x044D #CYRILLIC SMALL LETTER E -0xFE 0x044E #CYRILLIC SMALL LETTER YU -0xFF 0x044F #CYRILLIC SMALL LETTER YA diff --git a/program/lib/encoding/CP1252.map b/program/lib/encoding/CP1252.map deleted file mode 100644 index 2ca4486eb..000000000 --- a/program/lib/encoding/CP1252.map +++ /dev/null @@ -1,274 +0,0 @@ -# -# Name: cp1252 to Unicode table -# Unicode version: 2.0 -# Table version: 2.01 -# Table format: Format A -# Date: 04/15/98 -# -# Contact: cpxlate@microsoft.com -# -# General notes: none -# -# Format: Three tab-separated columns -# Column #1 is the cp1252 code (in hex) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 is the Unicode name (follows a comment sign, '#') -# -# The entries are in cp1252 order -# -0x00 0x0000 #NULL -0x01 0x0001 #START OF HEADING -0x02 0x0002 #START OF TEXT -0x03 0x0003 #END OF TEXT -0x04 0x0004 #END OF TRANSMISSION -0x05 0x0005 #ENQUIRY -0x06 0x0006 #ACKNOWLEDGE -0x07 0x0007 #BELL -0x08 0x0008 #BACKSPACE -0x09 0x0009 #HORIZONTAL TABULATION -0x0A 0x000A #LINE FEED -0x0B 0x000B #VERTICAL TABULATION -0x0C 0x000C #FORM FEED -0x0D 0x000D #CARRIAGE RETURN -0x0E 0x000E #SHIFT OUT -0x0F 0x000F #SHIFT IN -0x10 0x0010 #DATA LINK ESCAPE -0x11 0x0011 #DEVICE CONTROL ONE -0x12 0x0012 #DEVICE CONTROL TWO -0x13 0x0013 #DEVICE CONTROL THREE -0x14 0x0014 #DEVICE CONTROL FOUR -0x15 0x0015 #NEGATIVE ACKNOWLEDGE -0x16 0x0016 #SYNCHRONOUS IDLE -0x17 0x0017 #END OF TRANSMISSION BLOCK -0x18 0x0018 #CANCEL -0x19 0x0019 #END OF MEDIUM -0x1A 0x001A #SUBSTITUTE -0x1B 0x001B #ESCAPE -0x1C 0x001C #FILE SEPARATOR -0x1D 0x001D #GROUP SEPARATOR -0x1E 0x001E #RECORD SEPARATOR -0x1F 0x001F #UNIT SEPARATOR -0x20 0x0020 #SPACE -0x21 0x0021 #EXCLAMATION MARK -0x22 0x0022 #QUOTATION MARK -0x23 0x0023 #NUMBER SIGN -0x24 0x0024 #DOLLAR SIGN -0x25 0x0025 #PERCENT SIGN -0x26 0x0026 #AMPERSAND -0x27 0x0027 #APOSTROPHE -0x28 0x0028 #LEFT PARENTHESIS -0x29 0x0029 #RIGHT PARENTHESIS -0x2A 0x002A #ASTERISK -0x2B 0x002B #PLUS SIGN -0x2C 0x002C #COMMA -0x2D 0x002D #HYPHEN-MINUS -0x2E 0x002E #FULL STOP -0x2F 0x002F #SOLIDUS -0x30 0x0030 #DIGIT ZERO -0x31 0x0031 #DIGIT ONE -0x32 0x0032 #DIGIT TWO -0x33 0x0033 #DIGIT THREE -0x34 0x0034 #DIGIT FOUR -0x35 0x0035 #DIGIT FIVE -0x36 0x0036 #DIGIT SIX -0x37 0x0037 #DIGIT SEVEN -0x38 0x0038 #DIGIT EIGHT -0x39 0x0039 #DIGIT NINE -0x3A 0x003A #COLON -0x3B 0x003B #SEMICOLON -0x3C 0x003C #LESS-THAN SIGN -0x3D 0x003D #EQUALS SIGN -0x3E 0x003E #GREATER-THAN SIGN -0x3F 0x003F #QUESTION MARK -0x40 0x0040 #COMMERCIAL AT -0x41 0x0041 #LATIN CAPITAL LETTER A -0x42 0x0042 #LATIN CAPITAL LETTER B -0x43 0x0043 #LATIN CAPITAL LETTER C -0x44 0x0044 #LATIN CAPITAL LETTER D -0x45 0x0045 #LATIN CAPITAL LETTER E -0x46 0x0046 #LATIN CAPITAL LETTER F -0x47 0x0047 #LATIN CAPITAL LETTER G -0x48 0x0048 #LATIN CAPITAL LETTER H -0x49 0x0049 #LATIN CAPITAL LETTER I -0x4A 0x004A #LATIN CAPITAL LETTER J -0x4B 0x004B #LATIN CAPITAL LETTER K -0x4C 0x004C #LATIN CAPITAL LETTER L -0x4D 0x004D #LATIN CAPITAL LETTER M -0x4E 0x004E #LATIN CAPITAL LETTER N -0x4F 0x004F #LATIN CAPITAL LETTER O -0x50 0x0050 #LATIN CAPITAL LETTER P -0x51 0x0051 #LATIN CAPITAL LETTER Q -0x52 0x0052 #LATIN CAPITAL LETTER R -0x53 0x0053 #LATIN CAPITAL LETTER S -0x54 0x0054 #LATIN CAPITAL LETTER T -0x55 0x0055 #LATIN CAPITAL LETTER U -0x56 0x0056 #LATIN CAPITAL LETTER V -0x57 0x0057 #LATIN CAPITAL LETTER W -0x58 0x0058 #LATIN CAPITAL LETTER X -0x59 0x0059 #LATIN CAPITAL LETTER Y -0x5A 0x005A #LATIN CAPITAL LETTER Z -0x5B 0x005B #LEFT SQUARE BRACKET -0x5C 0x005C #REVERSE SOLIDUS -0x5D 0x005D #RIGHT SQUARE BRACKET -0x5E 0x005E #CIRCUMFLEX ACCENT -0x5F 0x005F #LOW LINE -0x60 0x0060 #GRAVE ACCENT -0x61 0x0061 #LATIN SMALL LETTER A -0x62 0x0062 #LATIN SMALL LETTER B -0x63 0x0063 #LATIN SMALL LETTER C -0x64 0x0064 #LATIN SMALL LETTER D -0x65 0x0065 #LATIN SMALL LETTER E -0x66 0x0066 #LATIN SMALL LETTER F -0x67 0x0067 #LATIN SMALL LETTER G -0x68 0x0068 #LATIN SMALL LETTER H -0x69 0x0069 #LATIN SMALL LETTER I -0x6A 0x006A #LATIN SMALL LETTER J -0x6B 0x006B #LATIN SMALL LETTER K -0x6C 0x006C #LATIN SMALL LETTER L -0x6D 0x006D #LATIN SMALL LETTER M -0x6E 0x006E #LATIN SMALL LETTER N -0x6F 0x006F #LATIN SMALL LETTER O -0x70 0x0070 #LATIN SMALL LETTER P -0x71 0x0071 #LATIN SMALL LETTER Q -0x72 0x0072 #LATIN SMALL LETTER R -0x73 0x0073 #LATIN SMALL LETTER S -0x74 0x0074 #LATIN SMALL LETTER T -0x75 0x0075 #LATIN SMALL LETTER U -0x76 0x0076 #LATIN SMALL LETTER V -0x77 0x0077 #LATIN SMALL LETTER W -0x78 0x0078 #LATIN SMALL LETTER X -0x79 0x0079 #LATIN SMALL LETTER Y -0x7A 0x007A #LATIN SMALL LETTER Z -0x7B 0x007B #LEFT CURLY BRACKET -0x7C 0x007C #VERTICAL LINE -0x7D 0x007D #RIGHT CURLY BRACKET -0x7E 0x007E #TILDE -0x7F 0x007F #DELETE -0x80 0x20AC #EURO SIGN -0x81 #UNDEFINED -0x82 0x201A #SINGLE LOW-9 QUOTATION MARK -0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK -0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK -0x85 0x2026 #HORIZONTAL ELLIPSIS -0x86 0x2020 #DAGGER -0x87 0x2021 #DOUBLE DAGGER -0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT -0x89 0x2030 #PER MILLE SIGN -0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON -0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK -0x8C 0x0152 #LATIN CAPITAL LIGATURE OE -0x8D #UNDEFINED -0x8E 0x017D #LATIN CAPITAL LETTER Z WITH CARON -0x8F #UNDEFINED -0x90 #UNDEFINED -0x91 0x2018 #LEFT SINGLE QUOTATION MARK -0x92 0x2019 #RIGHT SINGLE QUOTATION MARK -0x93 0x201C #LEFT DOUBLE QUOTATION MARK -0x94 0x201D #RIGHT DOUBLE QUOTATION MARK -0x95 0x2022 #BULLET -0x96 0x2013 #EN DASH -0x97 0x2014 #EM DASH -0x98 0x02DC #SMALL TILDE -0x99 0x2122 #TRADE MARK SIGN -0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON -0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -0x9C 0x0153 #LATIN SMALL LIGATURE OE -0x9D #UNDEFINED -0x9E 0x017E #LATIN SMALL LETTER Z WITH CARON -0x9F 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS -0xA0 0x00A0 #NO-BREAK SPACE -0xA1 0x00A1 #INVERTED EXCLAMATION MARK -0xA2 0x00A2 #CENT SIGN -0xA3 0x00A3 #POUND SIGN -0xA4 0x00A4 #CURRENCY SIGN -0xA5 0x00A5 #YEN SIGN -0xA6 0x00A6 #BROKEN BAR -0xA7 0x00A7 #SECTION SIGN -0xA8 0x00A8 #DIAERESIS -0xA9 0x00A9 #COPYRIGHT SIGN -0xAA 0x00AA #FEMININE ORDINAL INDICATOR -0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -0xAC 0x00AC #NOT SIGN -0xAD 0x00AD #SOFT HYPHEN -0xAE 0x00AE #REGISTERED SIGN -0xAF 0x00AF #MACRON -0xB0 0x00B0 #DEGREE SIGN -0xB1 0x00B1 #PLUS-MINUS SIGN -0xB2 0x00B2 #SUPERSCRIPT TWO -0xB3 0x00B3 #SUPERSCRIPT THREE -0xB4 0x00B4 #ACUTE ACCENT -0xB5 0x00B5 #MICRO SIGN -0xB6 0x00B6 #PILCROW SIGN -0xB7 0x00B7 #MIDDLE DOT -0xB8 0x00B8 #CEDILLA -0xB9 0x00B9 #SUPERSCRIPT ONE -0xBA 0x00BA #MASCULINE ORDINAL INDICATOR -0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -0xBC 0x00BC #VULGAR FRACTION ONE QUARTER -0xBD 0x00BD #VULGAR FRACTION ONE HALF -0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS -0xBF 0x00BF #INVERTED QUESTION MARK -0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE -0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE -0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX -0xC3 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE -0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS -0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE -0xC6 0x00C6 #LATIN CAPITAL LETTER AE -0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA -0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE -0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE -0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX -0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS -0xCC 0x00CC #LATIN CAPITAL LETTER I WITH GRAVE -0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE -0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX -0xCF 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS -0xD0 0x00D0 #LATIN CAPITAL LETTER ETH -0xD1 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE -0xD2 0x00D2 #LATIN CAPITAL LETTER O WITH GRAVE -0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE -0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX -0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE -0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS -0xD7 0x00D7 #MULTIPLICATION SIGN -0xD8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE -0xD9 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE -0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE -0xDB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX -0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS -0xDD 0x00DD #LATIN CAPITAL LETTER Y WITH ACUTE -0xDE 0x00DE #LATIN CAPITAL LETTER THORN -0xDF 0x00DF #LATIN SMALL LETTER SHARP S -0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE -0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE -0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX -0xE3 0x00E3 #LATIN SMALL LETTER A WITH TILDE -0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS -0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE -0xE6 0x00E6 #LATIN SMALL LETTER AE -0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA -0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE -0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE -0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX -0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS -0xEC 0x00EC #LATIN SMALL LETTER I WITH GRAVE -0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE -0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX -0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS -0xF0 0x00F0 #LATIN SMALL LETTER ETH -0xF1 0x00F1 #LATIN SMALL LETTER N WITH TILDE -0xF2 0x00F2 #LATIN SMALL LETTER O WITH GRAVE -0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE -0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX -0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE -0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS -0xF7 0x00F7 #DIVISION SIGN -0xF8 0x00F8 #LATIN SMALL LETTER O WITH STROKE -0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE -0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE -0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX -0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS -0xFD 0x00FD #LATIN SMALL LETTER Y WITH ACUTE -0xFE 0x00FE #LATIN SMALL LETTER THORN -0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/program/lib/encoding/CP1253.map b/program/lib/encoding/CP1253.map deleted file mode 100644 index 2ba51a0c8..000000000 --- a/program/lib/encoding/CP1253.map +++ /dev/null @@ -1,274 +0,0 @@ -# -# Name: cp1253 to Unicode table -# Unicode version: 2.0 -# Table version: 2.01 -# Table format: Format A -# Date: 04/15/98 -# -# Contact: cpxlate@microsoft.com -# -# General notes: none -# -# Format: Three tab-separated columns -# Column #1 is the cp1253 code (in hex) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 is the Unicode name (follows a comment sign, '#') -# -# The entries are in cp1253 order -# -0x00 0x0000 #NULL -0x01 0x0001 #START OF HEADING -0x02 0x0002 #START OF TEXT -0x03 0x0003 #END OF TEXT -0x04 0x0004 #END OF TRANSMISSION -0x05 0x0005 #ENQUIRY -0x06 0x0006 #ACKNOWLEDGE -0x07 0x0007 #BELL -0x08 0x0008 #BACKSPACE -0x09 0x0009 #HORIZONTAL TABULATION -0x0A 0x000A #LINE FEED -0x0B 0x000B #VERTICAL TABULATION -0x0C 0x000C #FORM FEED -0x0D 0x000D #CARRIAGE RETURN -0x0E 0x000E #SHIFT OUT -0x0F 0x000F #SHIFT IN -0x10 0x0010 #DATA LINK ESCAPE -0x11 0x0011 #DEVICE CONTROL ONE -0x12 0x0012 #DEVICE CONTROL TWO -0x13 0x0013 #DEVICE CONTROL THREE -0x14 0x0014 #DEVICE CONTROL FOUR -0x15 0x0015 #NEGATIVE ACKNOWLEDGE -0x16 0x0016 #SYNCHRONOUS IDLE -0x17 0x0017 #END OF TRANSMISSION BLOCK -0x18 0x0018 #CANCEL -0x19 0x0019 #END OF MEDIUM -0x1A 0x001A #SUBSTITUTE -0x1B 0x001B #ESCAPE -0x1C 0x001C #FILE SEPARATOR -0x1D 0x001D #GROUP SEPARATOR -0x1E 0x001E #RECORD SEPARATOR -0x1F 0x001F #UNIT SEPARATOR -0x20 0x0020 #SPACE -0x21 0x0021 #EXCLAMATION MARK -0x22 0x0022 #QUOTATION MARK -0x23 0x0023 #NUMBER SIGN -0x24 0x0024 #DOLLAR SIGN -0x25 0x0025 #PERCENT SIGN -0x26 0x0026 #AMPERSAND -0x27 0x0027 #APOSTROPHE -0x28 0x0028 #LEFT PARENTHESIS -0x29 0x0029 #RIGHT PARENTHESIS -0x2A 0x002A #ASTERISK -0x2B 0x002B #PLUS SIGN -0x2C 0x002C #COMMA -0x2D 0x002D #HYPHEN-MINUS -0x2E 0x002E #FULL STOP -0x2F 0x002F #SOLIDUS -0x30 0x0030 #DIGIT ZERO -0x31 0x0031 #DIGIT ONE -0x32 0x0032 #DIGIT TWO -0x33 0x0033 #DIGIT THREE -0x34 0x0034 #DIGIT FOUR -0x35 0x0035 #DIGIT FIVE -0x36 0x0036 #DIGIT SIX -0x37 0x0037 #DIGIT SEVEN -0x38 0x0038 #DIGIT EIGHT -0x39 0x0039 #DIGIT NINE -0x3A 0x003A #COLON -0x3B 0x003B #SEMICOLON -0x3C 0x003C #LESS-THAN SIGN -0x3D 0x003D #EQUALS SIGN -0x3E 0x003E #GREATER-THAN SIGN -0x3F 0x003F #QUESTION MARK -0x40 0x0040 #COMMERCIAL AT -0x41 0x0041 #LATIN CAPITAL LETTER A -0x42 0x0042 #LATIN CAPITAL LETTER B -0x43 0x0043 #LATIN CAPITAL LETTER C -0x44 0x0044 #LATIN CAPITAL LETTER D -0x45 0x0045 #LATIN CAPITAL LETTER E -0x46 0x0046 #LATIN CAPITAL LETTER F -0x47 0x0047 #LATIN CAPITAL LETTER G -0x48 0x0048 #LATIN CAPITAL LETTER H -0x49 0x0049 #LATIN CAPITAL LETTER I -0x4A 0x004A #LATIN CAPITAL LETTER J -0x4B 0x004B #LATIN CAPITAL LETTER K -0x4C 0x004C #LATIN CAPITAL LETTER L -0x4D 0x004D #LATIN CAPITAL LETTER M -0x4E 0x004E #LATIN CAPITAL LETTER N -0x4F 0x004F #LATIN CAPITAL LETTER O -0x50 0x0050 #LATIN CAPITAL LETTER P -0x51 0x0051 #LATIN CAPITAL LETTER Q -0x52 0x0052 #LATIN CAPITAL LETTER R -0x53 0x0053 #LATIN CAPITAL LETTER S -0x54 0x0054 #LATIN CAPITAL LETTER T -0x55 0x0055 #LATIN CAPITAL LETTER U -0x56 0x0056 #LATIN CAPITAL LETTER V -0x57 0x0057 #LATIN CAPITAL LETTER W -0x58 0x0058 #LATIN CAPITAL LETTER X -0x59 0x0059 #LATIN CAPITAL LETTER Y -0x5A 0x005A #LATIN CAPITAL LETTER Z -0x5B 0x005B #LEFT SQUARE BRACKET -0x5C 0x005C #REVERSE SOLIDUS -0x5D 0x005D #RIGHT SQUARE BRACKET -0x5E 0x005E #CIRCUMFLEX ACCENT -0x5F 0x005F #LOW LINE -0x60 0x0060 #GRAVE ACCENT -0x61 0x0061 #LATIN SMALL LETTER A -0x62 0x0062 #LATIN SMALL LETTER B -0x63 0x0063 #LATIN SMALL LETTER C -0x64 0x0064 #LATIN SMALL LETTER D -0x65 0x0065 #LATIN SMALL LETTER E -0x66 0x0066 #LATIN SMALL LETTER F -0x67 0x0067 #LATIN SMALL LETTER G -0x68 0x0068 #LATIN SMALL LETTER H -0x69 0x0069 #LATIN SMALL LETTER I -0x6A 0x006A #LATIN SMALL LETTER J -0x6B 0x006B #LATIN SMALL LETTER K -0x6C 0x006C #LATIN SMALL LETTER L -0x6D 0x006D #LATIN SMALL LETTER M -0x6E 0x006E #LATIN SMALL LETTER N -0x6F 0x006F #LATIN SMALL LETTER O -0x70 0x0070 #LATIN SMALL LETTER P -0x71 0x0071 #LATIN SMALL LETTER Q -0x72 0x0072 #LATIN SMALL LETTER R -0x73 0x0073 #LATIN SMALL LETTER S -0x74 0x0074 #LATIN SMALL LETTER T -0x75 0x0075 #LATIN SMALL LETTER U -0x76 0x0076 #LATIN SMALL LETTER V -0x77 0x0077 #LATIN SMALL LETTER W -0x78 0x0078 #LATIN SMALL LETTER X -0x79 0x0079 #LATIN SMALL LETTER Y -0x7A 0x007A #LATIN SMALL LETTER Z -0x7B 0x007B #LEFT CURLY BRACKET -0x7C 0x007C #VERTICAL LINE -0x7D 0x007D #RIGHT CURLY BRACKET -0x7E 0x007E #TILDE -0x7F 0x007F #DELETE -0x80 0x20AC #EURO SIGN -0x81 #UNDEFINED -0x82 0x201A #SINGLE LOW-9 QUOTATION MARK -0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK -0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK -0x85 0x2026 #HORIZONTAL ELLIPSIS -0x86 0x2020 #DAGGER -0x87 0x2021 #DOUBLE DAGGER -0x88 #UNDEFINED -0x89 0x2030 #PER MILLE SIGN -0x8A #UNDEFINED -0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK -0x8C #UNDEFINED -0x8D #UNDEFINED -0x8E #UNDEFINED -0x8F #UNDEFINED -0x90 #UNDEFINED -0x91 0x2018 #LEFT SINGLE QUOTATION MARK -0x92 0x2019 #RIGHT SINGLE QUOTATION MARK -0x93 0x201C #LEFT DOUBLE QUOTATION MARK -0x94 0x201D #RIGHT DOUBLE QUOTATION MARK -0x95 0x2022 #BULLET -0x96 0x2013 #EN DASH -0x97 0x2014 #EM DASH -0x98 #UNDEFINED -0x99 0x2122 #TRADE MARK SIGN -0x9A #UNDEFINED -0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -0x9C #UNDEFINED -0x9D #UNDEFINED -0x9E #UNDEFINED -0x9F #UNDEFINED -0xA0 0x00A0 #NO-BREAK SPACE -0xA1 0x0385 #GREEK DIALYTIKA TONOS -0xA2 0x0386 #GREEK CAPITAL LETTER ALPHA WITH TONOS -0xA3 0x00A3 #POUND SIGN -0xA4 0x00A4 #CURRENCY SIGN -0xA5 0x00A5 #YEN SIGN -0xA6 0x00A6 #BROKEN BAR -0xA7 0x00A7 #SECTION SIGN -0xA8 0x00A8 #DIAERESIS -0xA9 0x00A9 #COPYRIGHT SIGN -0xAA #UNDEFINED -0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -0xAC 0x00AC #NOT SIGN -0xAD 0x00AD #SOFT HYPHEN -0xAE 0x00AE #REGISTERED SIGN -0xAF 0x2015 #HORIZONTAL BAR -0xB0 0x00B0 #DEGREE SIGN -0xB1 0x00B1 #PLUS-MINUS SIGN -0xB2 0x00B2 #SUPERSCRIPT TWO -0xB3 0x00B3 #SUPERSCRIPT THREE -0xB4 0x0384 #GREEK TONOS -0xB5 0x00B5 #MICRO SIGN -0xB6 0x00B6 #PILCROW SIGN -0xB7 0x00B7 #MIDDLE DOT -0xB8 0x0388 #GREEK CAPITAL LETTER EPSILON WITH TONOS -0xB9 0x0389 #GREEK CAPITAL LETTER ETA WITH TONOS -0xBA 0x038A #GREEK CAPITAL LETTER IOTA WITH TONOS -0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -0xBC 0x038C #GREEK CAPITAL LETTER OMICRON WITH TONOS -0xBD 0x00BD #VULGAR FRACTION ONE HALF -0xBE 0x038E #GREEK CAPITAL LETTER UPSILON WITH TONOS -0xBF 0x038F #GREEK CAPITAL LETTER OMEGA WITH TONOS -0xC0 0x0390 #GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -0xC1 0x0391 #GREEK CAPITAL LETTER ALPHA -0xC2 0x0392 #GREEK CAPITAL LETTER BETA -0xC3 0x0393 #GREEK CAPITAL LETTER GAMMA -0xC4 0x0394 #GREEK CAPITAL LETTER DELTA -0xC5 0x0395 #GREEK CAPITAL LETTER EPSILON -0xC6 0x0396 #GREEK CAPITAL LETTER ZETA -0xC7 0x0397 #GREEK CAPITAL LETTER ETA -0xC8 0x0398 #GREEK CAPITAL LETTER THETA -0xC9 0x0399 #GREEK CAPITAL LETTER IOTA -0xCA 0x039A #GREEK CAPITAL LETTER KAPPA -0xCB 0x039B #GREEK CAPITAL LETTER LAMDA -0xCC 0x039C #GREEK CAPITAL LETTER MU -0xCD 0x039D #GREEK CAPITAL LETTER NU -0xCE 0x039E #GREEK CAPITAL LETTER XI -0xCF 0x039F #GREEK CAPITAL LETTER OMICRON -0xD0 0x03A0 #GREEK CAPITAL LETTER PI -0xD1 0x03A1 #GREEK CAPITAL LETTER RHO -0xD2 #UNDEFINED -0xD3 0x03A3 #GREEK CAPITAL LETTER SIGMA -0xD4 0x03A4 #GREEK CAPITAL LETTER TAU -0xD5 0x03A5 #GREEK CAPITAL LETTER UPSILON -0xD6 0x03A6 #GREEK CAPITAL LETTER PHI -0xD7 0x03A7 #GREEK CAPITAL LETTER CHI -0xD8 0x03A8 #GREEK CAPITAL LETTER PSI -0xD9 0x03A9 #GREEK CAPITAL LETTER OMEGA -0xDA 0x03AA #GREEK CAPITAL LETTER IOTA WITH DIALYTIKA -0xDB 0x03AB #GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA -0xDC 0x03AC #GREEK SMALL LETTER ALPHA WITH TONOS -0xDD 0x03AD #GREEK SMALL LETTER EPSILON WITH TONOS -0xDE 0x03AE #GREEK SMALL LETTER ETA WITH TONOS -0xDF 0x03AF #GREEK SMALL LETTER IOTA WITH TONOS -0xE0 0x03B0 #GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -0xE1 0x03B1 #GREEK SMALL LETTER ALPHA -0xE2 0x03B2 #GREEK SMALL LETTER BETA -0xE3 0x03B3 #GREEK SMALL LETTER GAMMA -0xE4 0x03B4 #GREEK SMALL LETTER DELTA -0xE5 0x03B5 #GREEK SMALL LETTER EPSILON -0xE6 0x03B6 #GREEK SMALL LETTER ZETA -0xE7 0x03B7 #GREEK SMALL LETTER ETA -0xE8 0x03B8 #GREEK SMALL LETTER THETA -0xE9 0x03B9 #GREEK SMALL LETTER IOTA -0xEA 0x03BA #GREEK SMALL LETTER KAPPA -0xEB 0x03BB #GREEK SMALL LETTER LAMDA -0xEC 0x03BC #GREEK SMALL LETTER MU -0xED 0x03BD #GREEK SMALL LETTER NU -0xEE 0x03BE #GREEK SMALL LETTER XI -0xEF 0x03BF #GREEK SMALL LETTER OMICRON -0xF0 0x03C0 #GREEK SMALL LETTER PI -0xF1 0x03C1 #GREEK SMALL LETTER RHO -0xF2 0x03C2 #GREEK SMALL LETTER FINAL SIGMA -0xF3 0x03C3 #GREEK SMALL LETTER SIGMA -0xF4 0x03C4 #GREEK SMALL LETTER TAU -0xF5 0x03C5 #GREEK SMALL LETTER UPSILON -0xF6 0x03C6 #GREEK SMALL LETTER PHI -0xF7 0x03C7 #GREEK SMALL LETTER CHI -0xF8 0x03C8 #GREEK SMALL LETTER PSI -0xF9 0x03C9 #GREEK SMALL LETTER OMEGA -0xFA 0x03CA #GREEK SMALL LETTER IOTA WITH DIALYTIKA -0xFB 0x03CB #GREEK SMALL LETTER UPSILON WITH DIALYTIKA -0xFC 0x03CC #GREEK SMALL LETTER OMICRON WITH TONOS -0xFD 0x03CD #GREEK SMALL LETTER UPSILON WITH TONOS -0xFE 0x03CE #GREEK SMALL LETTER OMEGA WITH TONOS -0xFF #UNDEFINED diff --git a/program/lib/encoding/CP1254.map b/program/lib/encoding/CP1254.map deleted file mode 100644 index ca1a1ebdb..000000000 --- a/program/lib/encoding/CP1254.map +++ /dev/null @@ -1,274 +0,0 @@ -# -# Name: cp1254 to Unicode table -# Unicode version: 2.0 -# Table version: 2.01 -# Table format: Format A -# Date: 04/15/98 -# -# Contact: cpxlate@microsoft.com -# -# General notes: none -# -# Format: Three tab-separated columns -# Column #1 is the cp1254 code (in hex) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 is the Unicode name (follows a comment sign, '#') -# -# The entries are in cp1254 order -# -0x00 0x0000 #NULL -0x01 0x0001 #START OF HEADING -0x02 0x0002 #START OF TEXT -0x03 0x0003 #END OF TEXT -0x04 0x0004 #END OF TRANSMISSION -0x05 0x0005 #ENQUIRY -0x06 0x0006 #ACKNOWLEDGE -0x07 0x0007 #BELL -0x08 0x0008 #BACKSPACE -0x09 0x0009 #HORIZONTAL TABULATION -0x0A 0x000A #LINE FEED -0x0B 0x000B #VERTICAL TABULATION -0x0C 0x000C #FORM FEED -0x0D 0x000D #CARRIAGE RETURN -0x0E 0x000E #SHIFT OUT -0x0F 0x000F #SHIFT IN -0x10 0x0010 #DATA LINK ESCAPE -0x11 0x0011 #DEVICE CONTROL ONE -0x12 0x0012 #DEVICE CONTROL TWO -0x13 0x0013 #DEVICE CONTROL THREE -0x14 0x0014 #DEVICE CONTROL FOUR -0x15 0x0015 #NEGATIVE ACKNOWLEDGE -0x16 0x0016 #SYNCHRONOUS IDLE -0x17 0x0017 #END OF TRANSMISSION BLOCK -0x18 0x0018 #CANCEL -0x19 0x0019 #END OF MEDIUM -0x1A 0x001A #SUBSTITUTE -0x1B 0x001B #ESCAPE -0x1C 0x001C #FILE SEPARATOR -0x1D 0x001D #GROUP SEPARATOR -0x1E 0x001E #RECORD SEPARATOR -0x1F 0x001F #UNIT SEPARATOR -0x20 0x0020 #SPACE -0x21 0x0021 #EXCLAMATION MARK -0x22 0x0022 #QUOTATION MARK -0x23 0x0023 #NUMBER SIGN -0x24 0x0024 #DOLLAR SIGN -0x25 0x0025 #PERCENT SIGN -0x26 0x0026 #AMPERSAND -0x27 0x0027 #APOSTROPHE -0x28 0x0028 #LEFT PARENTHESIS -0x29 0x0029 #RIGHT PARENTHESIS -0x2A 0x002A #ASTERISK -0x2B 0x002B #PLUS SIGN -0x2C 0x002C #COMMA -0x2D 0x002D #HYPHEN-MINUS -0x2E 0x002E #FULL STOP -0x2F 0x002F #SOLIDUS -0x30 0x0030 #DIGIT ZERO -0x31 0x0031 #DIGIT ONE -0x32 0x0032 #DIGIT TWO -0x33 0x0033 #DIGIT THREE -0x34 0x0034 #DIGIT FOUR -0x35 0x0035 #DIGIT FIVE -0x36 0x0036 #DIGIT SIX -0x37 0x0037 #DIGIT SEVEN -0x38 0x0038 #DIGIT EIGHT -0x39 0x0039 #DIGIT NINE -0x3A 0x003A #COLON -0x3B 0x003B #SEMICOLON -0x3C 0x003C #LESS-THAN SIGN -0x3D 0x003D #EQUALS SIGN -0x3E 0x003E #GREATER-THAN SIGN -0x3F 0x003F #QUESTION MARK -0x40 0x0040 #COMMERCIAL AT -0x41 0x0041 #LATIN CAPITAL LETTER A -0x42 0x0042 #LATIN CAPITAL LETTER B -0x43 0x0043 #LATIN CAPITAL LETTER C -0x44 0x0044 #LATIN CAPITAL LETTER D -0x45 0x0045 #LATIN CAPITAL LETTER E -0x46 0x0046 #LATIN CAPITAL LETTER F -0x47 0x0047 #LATIN CAPITAL LETTER G -0x48 0x0048 #LATIN CAPITAL LETTER H -0x49 0x0049 #LATIN CAPITAL LETTER I -0x4A 0x004A #LATIN CAPITAL LETTER J -0x4B 0x004B #LATIN CAPITAL LETTER K -0x4C 0x004C #LATIN CAPITAL LETTER L -0x4D 0x004D #LATIN CAPITAL LETTER M -0x4E 0x004E #LATIN CAPITAL LETTER N -0x4F 0x004F #LATIN CAPITAL LETTER O -0x50 0x0050 #LATIN CAPITAL LETTER P -0x51 0x0051 #LATIN CAPITAL LETTER Q -0x52 0x0052 #LATIN CAPITAL LETTER R -0x53 0x0053 #LATIN CAPITAL LETTER S -0x54 0x0054 #LATIN CAPITAL LETTER T -0x55 0x0055 #LATIN CAPITAL LETTER U -0x56 0x0056 #LATIN CAPITAL LETTER V -0x57 0x0057 #LATIN CAPITAL LETTER W -0x58 0x0058 #LATIN CAPITAL LETTER X -0x59 0x0059 #LATIN CAPITAL LETTER Y -0x5A 0x005A #LATIN CAPITAL LETTER Z -0x5B 0x005B #LEFT SQUARE BRACKET -0x5C 0x005C #REVERSE SOLIDUS -0x5D 0x005D #RIGHT SQUARE BRACKET -0x5E 0x005E #CIRCUMFLEX ACCENT -0x5F 0x005F #LOW LINE -0x60 0x0060 #GRAVE ACCENT -0x61 0x0061 #LATIN SMALL LETTER A -0x62 0x0062 #LATIN SMALL LETTER B -0x63 0x0063 #LATIN SMALL LETTER C -0x64 0x0064 #LATIN SMALL LETTER D -0x65 0x0065 #LATIN SMALL LETTER E -0x66 0x0066 #LATIN SMALL LETTER F -0x67 0x0067 #LATIN SMALL LETTER G -0x68 0x0068 #LATIN SMALL LETTER H -0x69 0x0069 #LATIN SMALL LETTER I -0x6A 0x006A #LATIN SMALL LETTER J -0x6B 0x006B #LATIN SMALL LETTER K -0x6C 0x006C #LATIN SMALL LETTER L -0x6D 0x006D #LATIN SMALL LETTER M -0x6E 0x006E #LATIN SMALL LETTER N -0x6F 0x006F #LATIN SMALL LETTER O -0x70 0x0070 #LATIN SMALL LETTER P -0x71 0x0071 #LATIN SMALL LETTER Q -0x72 0x0072 #LATIN SMALL LETTER R -0x73 0x0073 #LATIN SMALL LETTER S -0x74 0x0074 #LATIN SMALL LETTER T -0x75 0x0075 #LATIN SMALL LETTER U -0x76 0x0076 #LATIN SMALL LETTER V -0x77 0x0077 #LATIN SMALL LETTER W -0x78 0x0078 #LATIN SMALL LETTER X -0x79 0x0079 #LATIN SMALL LETTER Y -0x7A 0x007A #LATIN SMALL LETTER Z -0x7B 0x007B #LEFT CURLY BRACKET -0x7C 0x007C #VERTICAL LINE -0x7D 0x007D #RIGHT CURLY BRACKET -0x7E 0x007E #TILDE -0x7F 0x007F #DELETE -0x80 0x20AC #EURO SIGN -0x81 #UNDEFINED -0x82 0x201A #SINGLE LOW-9 QUOTATION MARK -0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK -0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK -0x85 0x2026 #HORIZONTAL ELLIPSIS -0x86 0x2020 #DAGGER -0x87 0x2021 #DOUBLE DAGGER -0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT -0x89 0x2030 #PER MILLE SIGN -0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON -0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK -0x8C 0x0152 #LATIN CAPITAL LIGATURE OE -0x8D #UNDEFINED -0x8E #UNDEFINED -0x8F #UNDEFINED -0x90 #UNDEFINED -0x91 0x2018 #LEFT SINGLE QUOTATION MARK -0x92 0x2019 #RIGHT SINGLE QUOTATION MARK -0x93 0x201C #LEFT DOUBLE QUOTATION MARK -0x94 0x201D #RIGHT DOUBLE QUOTATION MARK -0x95 0x2022 #BULLET -0x96 0x2013 #EN DASH -0x97 0x2014 #EM DASH -0x98 0x02DC #SMALL TILDE -0x99 0x2122 #TRADE MARK SIGN -0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON -0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -0x9C 0x0153 #LATIN SMALL LIGATURE OE -0x9D #UNDEFINED -0x9E #UNDEFINED -0x9F 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS -0xA0 0x00A0 #NO-BREAK SPACE -0xA1 0x00A1 #INVERTED EXCLAMATION MARK -0xA2 0x00A2 #CENT SIGN -0xA3 0x00A3 #POUND SIGN -0xA4 0x00A4 #CURRENCY SIGN -0xA5 0x00A5 #YEN SIGN -0xA6 0x00A6 #BROKEN BAR -0xA7 0x00A7 #SECTION SIGN -0xA8 0x00A8 #DIAERESIS -0xA9 0x00A9 #COPYRIGHT SIGN -0xAA 0x00AA #FEMININE ORDINAL INDICATOR -0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -0xAC 0x00AC #NOT SIGN -0xAD 0x00AD #SOFT HYPHEN -0xAE 0x00AE #REGISTERED SIGN -0xAF 0x00AF #MACRON -0xB0 0x00B0 #DEGREE SIGN -0xB1 0x00B1 #PLUS-MINUS SIGN -0xB2 0x00B2 #SUPERSCRIPT TWO -0xB3 0x00B3 #SUPERSCRIPT THREE -0xB4 0x00B4 #ACUTE ACCENT -0xB5 0x00B5 #MICRO SIGN -0xB6 0x00B6 #PILCROW SIGN -0xB7 0x00B7 #MIDDLE DOT -0xB8 0x00B8 #CEDILLA -0xB9 0x00B9 #SUPERSCRIPT ONE -0xBA 0x00BA #MASCULINE ORDINAL INDICATOR -0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -0xBC 0x00BC #VULGAR FRACTION ONE QUARTER -0xBD 0x00BD #VULGAR FRACTION ONE HALF -0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS -0xBF 0x00BF #INVERTED QUESTION MARK -0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE -0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE -0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX -0xC3 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE -0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS -0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE -0xC6 0x00C6 #LATIN CAPITAL LETTER AE -0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA -0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE -0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE -0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX -0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS -0xCC 0x00CC #LATIN CAPITAL LETTER I WITH GRAVE -0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE -0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX -0xCF 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS -0xD0 0x011E #LATIN CAPITAL LETTER G WITH BREVE -0xD1 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE -0xD2 0x00D2 #LATIN CAPITAL LETTER O WITH GRAVE -0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE -0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX -0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE -0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS -0xD7 0x00D7 #MULTIPLICATION SIGN -0xD8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE -0xD9 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE -0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE -0xDB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX -0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS -0xDD 0x0130 #LATIN CAPITAL LETTER I WITH DOT ABOVE -0xDE 0x015E #LATIN CAPITAL LETTER S WITH CEDILLA -0xDF 0x00DF #LATIN SMALL LETTER SHARP S -0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE -0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE -0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX -0xE3 0x00E3 #LATIN SMALL LETTER A WITH TILDE -0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS -0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE -0xE6 0x00E6 #LATIN SMALL LETTER AE -0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA -0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE -0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE -0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX -0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS -0xEC 0x00EC #LATIN SMALL LETTER I WITH GRAVE -0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE -0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX -0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS -0xF0 0x011F #LATIN SMALL LETTER G WITH BREVE -0xF1 0x00F1 #LATIN SMALL LETTER N WITH TILDE -0xF2 0x00F2 #LATIN SMALL LETTER O WITH GRAVE -0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE -0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX -0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE -0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS -0xF7 0x00F7 #DIVISION SIGN -0xF8 0x00F8 #LATIN SMALL LETTER O WITH STROKE -0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE -0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE -0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX -0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS -0xFD 0x0131 #LATIN SMALL LETTER DOTLESS I -0xFE 0x015F #LATIN SMALL LETTER S WITH CEDILLA -0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/program/lib/encoding/CP1255.map b/program/lib/encoding/CP1255.map deleted file mode 100644 index 341517f11..000000000 --- a/program/lib/encoding/CP1255.map +++ /dev/null @@ -1,274 +0,0 @@ -# -# Name: cp1255 to Unicode table -# Unicode version: 2.0 -# Table version: 2.01 -# Table format: Format A -# Date: 1/7/2000 -# -# Contact: cpxlate@microsoft.com -# -# General notes: none -# -# Format: Three tab-separated columns -# Column #1 is the cp1255 code (in hex) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 is the Unicode name (follows a comment sign, '#') -# -# The entries are in cp1255 order -# -0x00 0x0000 #NULL -0x01 0x0001 #START OF HEADING -0x02 0x0002 #START OF TEXT -0x03 0x0003 #END OF TEXT -0x04 0x0004 #END OF TRANSMISSION -0x05 0x0005 #ENQUIRY -0x06 0x0006 #ACKNOWLEDGE -0x07 0x0007 #BELL -0x08 0x0008 #BACKSPACE -0x09 0x0009 #HORIZONTAL TABULATION -0x0A 0x000A #LINE FEED -0x0B 0x000B #VERTICAL TABULATION -0x0C 0x000C #FORM FEED -0x0D 0x000D #CARRIAGE RETURN -0x0E 0x000E #SHIFT OUT -0x0F 0x000F #SHIFT IN -0x10 0x0010 #DATA LINK ESCAPE -0x11 0x0011 #DEVICE CONTROL ONE -0x12 0x0012 #DEVICE CONTROL TWO -0x13 0x0013 #DEVICE CONTROL THREE -0x14 0x0014 #DEVICE CONTROL FOUR -0x15 0x0015 #NEGATIVE ACKNOWLEDGE -0x16 0x0016 #SYNCHRONOUS IDLE -0x17 0x0017 #END OF TRANSMISSION BLOCK -0x18 0x0018 #CANCEL -0x19 0x0019 #END OF MEDIUM -0x1A 0x001A #SUBSTITUTE -0x1B 0x001B #ESCAPE -0x1C 0x001C #FILE SEPARATOR -0x1D 0x001D #GROUP SEPARATOR -0x1E 0x001E #RECORD SEPARATOR -0x1F 0x001F #UNIT SEPARATOR -0x20 0x0020 #SPACE -0x21 0x0021 #EXCLAMATION MARK -0x22 0x0022 #QUOTATION MARK -0x23 0x0023 #NUMBER SIGN -0x24 0x0024 #DOLLAR SIGN -0x25 0x0025 #PERCENT SIGN -0x26 0x0026 #AMPERSAND -0x27 0x0027 #APOSTROPHE -0x28 0x0028 #LEFT PARENTHESIS -0x29 0x0029 #RIGHT PARENTHESIS -0x2A 0x002A #ASTERISK -0x2B 0x002B #PLUS SIGN -0x2C 0x002C #COMMA -0x2D 0x002D #HYPHEN-MINUS -0x2E 0x002E #FULL STOP -0x2F 0x002F #SOLIDUS -0x30 0x0030 #DIGIT ZERO -0x31 0x0031 #DIGIT ONE -0x32 0x0032 #DIGIT TWO -0x33 0x0033 #DIGIT THREE -0x34 0x0034 #DIGIT FOUR -0x35 0x0035 #DIGIT FIVE -0x36 0x0036 #DIGIT SIX -0x37 0x0037 #DIGIT SEVEN -0x38 0x0038 #DIGIT EIGHT -0x39 0x0039 #DIGIT NINE -0x3A 0x003A #COLON -0x3B 0x003B #SEMICOLON -0x3C 0x003C #LESS-THAN SIGN -0x3D 0x003D #EQUALS SIGN -0x3E 0x003E #GREATER-THAN SIGN -0x3F 0x003F #QUESTION MARK -0x40 0x0040 #COMMERCIAL AT -0x41 0x0041 #LATIN CAPITAL LETTER A -0x42 0x0042 #LATIN CAPITAL LETTER B -0x43 0x0043 #LATIN CAPITAL LETTER C -0x44 0x0044 #LATIN CAPITAL LETTER D -0x45 0x0045 #LATIN CAPITAL LETTER E -0x46 0x0046 #LATIN CAPITAL LETTER F -0x47 0x0047 #LATIN CAPITAL LETTER G -0x48 0x0048 #LATIN CAPITAL LETTER H -0x49 0x0049 #LATIN CAPITAL LETTER I -0x4A 0x004A #LATIN CAPITAL LETTER J -0x4B 0x004B #LATIN CAPITAL LETTER K -0x4C 0x004C #LATIN CAPITAL LETTER L -0x4D 0x004D #LATIN CAPITAL LETTER M -0x4E 0x004E #LATIN CAPITAL LETTER N -0x4F 0x004F #LATIN CAPITAL LETTER O -0x50 0x0050 #LATIN CAPITAL LETTER P -0x51 0x0051 #LATIN CAPITAL LETTER Q -0x52 0x0052 #LATIN CAPITAL LETTER R -0x53 0x0053 #LATIN CAPITAL LETTER S -0x54 0x0054 #LATIN CAPITAL LETTER T -0x55 0x0055 #LATIN CAPITAL LETTER U -0x56 0x0056 #LATIN CAPITAL LETTER V -0x57 0x0057 #LATIN CAPITAL LETTER W -0x58 0x0058 #LATIN CAPITAL LETTER X -0x59 0x0059 #LATIN CAPITAL LETTER Y -0x5A 0x005A #LATIN CAPITAL LETTER Z -0x5B 0x005B #LEFT SQUARE BRACKET -0x5C 0x005C #REVERSE SOLIDUS -0x5D 0x005D #RIGHT SQUARE BRACKET -0x5E 0x005E #CIRCUMFLEX ACCENT -0x5F 0x005F #LOW LINE -0x60 0x0060 #GRAVE ACCENT -0x61 0x0061 #LATIN SMALL LETTER A -0x62 0x0062 #LATIN SMALL LETTER B -0x63 0x0063 #LATIN SMALL LETTER C -0x64 0x0064 #LATIN SMALL LETTER D -0x65 0x0065 #LATIN SMALL LETTER E -0x66 0x0066 #LATIN SMALL LETTER F -0x67 0x0067 #LATIN SMALL LETTER G -0x68 0x0068 #LATIN SMALL LETTER H -0x69 0x0069 #LATIN SMALL LETTER I -0x6A 0x006A #LATIN SMALL LETTER J -0x6B 0x006B #LATIN SMALL LETTER K -0x6C 0x006C #LATIN SMALL LETTER L -0x6D 0x006D #LATIN SMALL LETTER M -0x6E 0x006E #LATIN SMALL LETTER N -0x6F 0x006F #LATIN SMALL LETTER O -0x70 0x0070 #LATIN SMALL LETTER P -0x71 0x0071 #LATIN SMALL LETTER Q -0x72 0x0072 #LATIN SMALL LETTER R -0x73 0x0073 #LATIN SMALL LETTER S -0x74 0x0074 #LATIN SMALL LETTER T -0x75 0x0075 #LATIN SMALL LETTER U -0x76 0x0076 #LATIN SMALL LETTER V -0x77 0x0077 #LATIN SMALL LETTER W -0x78 0x0078 #LATIN SMALL LETTER X -0x79 0x0079 #LATIN SMALL LETTER Y -0x7A 0x007A #LATIN SMALL LETTER Z -0x7B 0x007B #LEFT CURLY BRACKET -0x7C 0x007C #VERTICAL LINE -0x7D 0x007D #RIGHT CURLY BRACKET -0x7E 0x007E #TILDE -0x7F 0x007F #DELETE -0x80 0x20AC #EURO SIGN -0x81 #UNDEFINED -0x82 0x201A #SINGLE LOW-9 QUOTATION MARK -0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK -0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK -0x85 0x2026 #HORIZONTAL ELLIPSIS -0x86 0x2020 #DAGGER -0x87 0x2021 #DOUBLE DAGGER -0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT -0x89 0x2030 #PER MILLE SIGN -0x8A #UNDEFINED -0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK -0x8C #UNDEFINED -0x8D #UNDEFINED -0x8E #UNDEFINED -0x8F #UNDEFINED -0x90 #UNDEFINED -0x91 0x2018 #LEFT SINGLE QUOTATION MARK -0x92 0x2019 #RIGHT SINGLE QUOTATION MARK -0x93 0x201C #LEFT DOUBLE QUOTATION MARK -0x94 0x201D #RIGHT DOUBLE QUOTATION MARK -0x95 0x2022 #BULLET -0x96 0x2013 #EN DASH -0x97 0x2014 #EM DASH -0x98 0x02DC #SMALL TILDE -0x99 0x2122 #TRADE MARK SIGN -0x9A #UNDEFINED -0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -0x9C #UNDEFINED -0x9D #UNDEFINED -0x9E #UNDEFINED -0x9F #UNDEFINED -0xA0 0x00A0 #NO-BREAK SPACE -0xA1 0x00A1 #INVERTED EXCLAMATION MARK -0xA2 0x00A2 #CENT SIGN -0xA3 0x00A3 #POUND SIGN -0xA4 0x20AA #NEW SHEQEL SIGN -0xA5 0x00A5 #YEN SIGN -0xA6 0x00A6 #BROKEN BAR -0xA7 0x00A7 #SECTION SIGN -0xA8 0x00A8 #DIAERESIS -0xA9 0x00A9 #COPYRIGHT SIGN -0xAA 0x00D7 #MULTIPLICATION SIGN -0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -0xAC 0x00AC #NOT SIGN -0xAD 0x00AD #SOFT HYPHEN -0xAE 0x00AE #REGISTERED SIGN -0xAF 0x00AF #MACRON -0xB0 0x00B0 #DEGREE SIGN -0xB1 0x00B1 #PLUS-MINUS SIGN -0xB2 0x00B2 #SUPERSCRIPT TWO -0xB3 0x00B3 #SUPERSCRIPT THREE -0xB4 0x00B4 #ACUTE ACCENT -0xB5 0x00B5 #MICRO SIGN -0xB6 0x00B6 #PILCROW SIGN -0xB7 0x00B7 #MIDDLE DOT -0xB8 0x00B8 #CEDILLA -0xB9 0x00B9 #SUPERSCRIPT ONE -0xBA 0x00F7 #DIVISION SIGN -0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -0xBC 0x00BC #VULGAR FRACTION ONE QUARTER -0xBD 0x00BD #VULGAR FRACTION ONE HALF -0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS -0xBF 0x00BF #INVERTED QUESTION MARK -0xC0 0x05B0 #HEBREW POINT SHEVA -0xC1 0x05B1 #HEBREW POINT HATAF SEGOL -0xC2 0x05B2 #HEBREW POINT HATAF PATAH -0xC3 0x05B3 #HEBREW POINT HATAF QAMATS -0xC4 0x05B4 #HEBREW POINT HIRIQ -0xC5 0x05B5 #HEBREW POINT TSERE -0xC6 0x05B6 #HEBREW POINT SEGOL -0xC7 0x05B7 #HEBREW POINT PATAH -0xC8 0x05B8 #HEBREW POINT QAMATS -0xC9 0x05B9 #HEBREW POINT HOLAM -0xCA #UNDEFINED -0xCB 0x05BB #HEBREW POINT QUBUTS -0xCC 0x05BC #HEBREW POINT DAGESH OR MAPIQ -0xCD 0x05BD #HEBREW POINT METEG -0xCE 0x05BE #HEBREW PUNCTUATION MAQAF -0xCF 0x05BF #HEBREW POINT RAFE -0xD0 0x05C0 #HEBREW PUNCTUATION PASEQ -0xD1 0x05C1 #HEBREW POINT SHIN DOT -0xD2 0x05C2 #HEBREW POINT SIN DOT -0xD3 0x05C3 #HEBREW PUNCTUATION SOF PASUQ -0xD4 0x05F0 #HEBREW LIGATURE YIDDISH DOUBLE VAV -0xD5 0x05F1 #HEBREW LIGATURE YIDDISH VAV YOD -0xD6 0x05F2 #HEBREW LIGATURE YIDDISH DOUBLE YOD -0xD7 0x05F3 #HEBREW PUNCTUATION GERESH -0xD8 0x05F4 #HEBREW PUNCTUATION GERSHAYIM -0xD9 #UNDEFINED -0xDA #UNDEFINED -0xDB #UNDEFINED -0xDC #UNDEFINED -0xDD #UNDEFINED -0xDE #UNDEFINED -0xDF #UNDEFINED -0xE0 0x05D0 #HEBREW LETTER ALEF -0xE1 0x05D1 #HEBREW LETTER BET -0xE2 0x05D2 #HEBREW LETTER GIMEL -0xE3 0x05D3 #HEBREW LETTER DALET -0xE4 0x05D4 #HEBREW LETTER HE -0xE5 0x05D5 #HEBREW LETTER VAV -0xE6 0x05D6 #HEBREW LETTER ZAYIN -0xE7 0x05D7 #HEBREW LETTER HET -0xE8 0x05D8 #HEBREW LETTER TET -0xE9 0x05D9 #HEBREW LETTER YOD -0xEA 0x05DA #HEBREW LETTER FINAL KAF -0xEB 0x05DB #HEBREW LETTER KAF -0xEC 0x05DC #HEBREW LETTER LAMED -0xED 0x05DD #HEBREW LETTER FINAL MEM -0xEE 0x05DE #HEBREW LETTER MEM -0xEF 0x05DF #HEBREW LETTER FINAL NUN -0xF0 0x05E0 #HEBREW LETTER NUN -0xF1 0x05E1 #HEBREW LETTER SAMEKH -0xF2 0x05E2 #HEBREW LETTER AYIN -0xF3 0x05E3 #HEBREW LETTER FINAL PE -0xF4 0x05E4 #HEBREW LETTER PE -0xF5 0x05E5 #HEBREW LETTER FINAL TSADI -0xF6 0x05E6 #HEBREW LETTER TSADI -0xF7 0x05E7 #HEBREW LETTER QOF -0xF8 0x05E8 #HEBREW LETTER RESH -0xF9 0x05E9 #HEBREW LETTER SHIN -0xFA 0x05EA #HEBREW LETTER TAV -0xFB #UNDEFINED -0xFC #UNDEFINED -0xFD 0x200E #LEFT-TO-RIGHT MARK -0xFE 0x200F #RIGHT-TO-LEFT MARK -0xFF #UNDEFINED diff --git a/program/lib/encoding/CP1256.map b/program/lib/encoding/CP1256.map deleted file mode 100644 index 0edd081b9..000000000 --- a/program/lib/encoding/CP1256.map +++ /dev/null @@ -1,274 +0,0 @@ -# -# Name: cp1256 to Unicode table -# Unicode version: 2.1 -# Table version: 2.01 -# Table format: Format A -# Date: 01/5/99 -# -# Contact: cpxlate@microsoft.com -# -# General notes: none -# -# Format: Three tab-separated columns -# Column #1 is the cp1256 code (in hex) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 is the Unicode name (follows a comment sign, '#') -# -# The entries are in cp1256 order -# -0x00 0x0000 #NULL -0x01 0x0001 #START OF HEADING -0x02 0x0002 #START OF TEXT -0x03 0x0003 #END OF TEXT -0x04 0x0004 #END OF TRANSMISSION -0x05 0x0005 #ENQUIRY -0x06 0x0006 #ACKNOWLEDGE -0x07 0x0007 #BELL -0x08 0x0008 #BACKSPACE -0x09 0x0009 #HORIZONTAL TABULATION -0x0A 0x000A #LINE FEED -0x0B 0x000B #VERTICAL TABULATION -0x0C 0x000C #FORM FEED -0x0D 0x000D #CARRIAGE RETURN -0x0E 0x000E #SHIFT OUT -0x0F 0x000F #SHIFT IN -0x10 0x0010 #DATA LINK ESCAPE -0x11 0x0011 #DEVICE CONTROL ONE -0x12 0x0012 #DEVICE CONTROL TWO -0x13 0x0013 #DEVICE CONTROL THREE -0x14 0x0014 #DEVICE CONTROL FOUR -0x15 0x0015 #NEGATIVE ACKNOWLEDGE -0x16 0x0016 #SYNCHRONOUS IDLE -0x17 0x0017 #END OF TRANSMISSION BLOCK -0x18 0x0018 #CANCEL -0x19 0x0019 #END OF MEDIUM -0x1A 0x001A #SUBSTITUTE -0x1B 0x001B #ESCAPE -0x1C 0x001C #FILE SEPARATOR -0x1D 0x001D #GROUP SEPARATOR -0x1E 0x001E #RECORD SEPARATOR -0x1F 0x001F #UNIT SEPARATOR -0x20 0x0020 #SPACE -0x21 0x0021 #EXCLAMATION MARK -0x22 0x0022 #QUOTATION MARK -0x23 0x0023 #NUMBER SIGN -0x24 0x0024 #DOLLAR SIGN -0x25 0x0025 #PERCENT SIGN -0x26 0x0026 #AMPERSAND -0x27 0x0027 #APOSTROPHE -0x28 0x0028 #LEFT PARENTHESIS -0x29 0x0029 #RIGHT PARENTHESIS -0x2A 0x002A #ASTERISK -0x2B 0x002B #PLUS SIGN -0x2C 0x002C #COMMA -0x2D 0x002D #HYPHEN-MINUS -0x2E 0x002E #FULL STOP -0x2F 0x002F #SOLIDUS -0x30 0x0030 #DIGIT ZERO -0x31 0x0031 #DIGIT ONE -0x32 0x0032 #DIGIT TWO -0x33 0x0033 #DIGIT THREE -0x34 0x0034 #DIGIT FOUR -0x35 0x0035 #DIGIT FIVE -0x36 0x0036 #DIGIT SIX -0x37 0x0037 #DIGIT SEVEN -0x38 0x0038 #DIGIT EIGHT -0x39 0x0039 #DIGIT NINE -0x3A 0x003A #COLON -0x3B 0x003B #SEMICOLON -0x3C 0x003C #LESS-THAN SIGN -0x3D 0x003D #EQUALS SIGN -0x3E 0x003E #GREATER-THAN SIGN -0x3F 0x003F #QUESTION MARK -0x40 0x0040 #COMMERCIAL AT -0x41 0x0041 #LATIN CAPITAL LETTER A -0x42 0x0042 #LATIN CAPITAL LETTER B -0x43 0x0043 #LATIN CAPITAL LETTER C -0x44 0x0044 #LATIN CAPITAL LETTER D -0x45 0x0045 #LATIN CAPITAL LETTER E -0x46 0x0046 #LATIN CAPITAL LETTER F -0x47 0x0047 #LATIN CAPITAL LETTER G -0x48 0x0048 #LATIN CAPITAL LETTER H -0x49 0x0049 #LATIN CAPITAL LETTER I -0x4A 0x004A #LATIN CAPITAL LETTER J -0x4B 0x004B #LATIN CAPITAL LETTER K -0x4C 0x004C #LATIN CAPITAL LETTER L -0x4D 0x004D #LATIN CAPITAL LETTER M -0x4E 0x004E #LATIN CAPITAL LETTER N -0x4F 0x004F #LATIN CAPITAL LETTER O -0x50 0x0050 #LATIN CAPITAL LETTER P -0x51 0x0051 #LATIN CAPITAL LETTER Q -0x52 0x0052 #LATIN CAPITAL LETTER R -0x53 0x0053 #LATIN CAPITAL LETTER S -0x54 0x0054 #LATIN CAPITAL LETTER T -0x55 0x0055 #LATIN CAPITAL LETTER U -0x56 0x0056 #LATIN CAPITAL LETTER V -0x57 0x0057 #LATIN CAPITAL LETTER W -0x58 0x0058 #LATIN CAPITAL LETTER X -0x59 0x0059 #LATIN CAPITAL LETTER Y -0x5A 0x005A #LATIN CAPITAL LETTER Z -0x5B 0x005B #LEFT SQUARE BRACKET -0x5C 0x005C #REVERSE SOLIDUS -0x5D 0x005D #RIGHT SQUARE BRACKET -0x5E 0x005E #CIRCUMFLEX ACCENT -0x5F 0x005F #LOW LINE -0x60 0x0060 #GRAVE ACCENT -0x61 0x0061 #LATIN SMALL LETTER A -0x62 0x0062 #LATIN SMALL LETTER B -0x63 0x0063 #LATIN SMALL LETTER C -0x64 0x0064 #LATIN SMALL LETTER D -0x65 0x0065 #LATIN SMALL LETTER E -0x66 0x0066 #LATIN SMALL LETTER F -0x67 0x0067 #LATIN SMALL LETTER G -0x68 0x0068 #LATIN SMALL LETTER H -0x69 0x0069 #LATIN SMALL LETTER I -0x6A 0x006A #LATIN SMALL LETTER J -0x6B 0x006B #LATIN SMALL LETTER K -0x6C 0x006C #LATIN SMALL LETTER L -0x6D 0x006D #LATIN SMALL LETTER M -0x6E 0x006E #LATIN SMALL LETTER N -0x6F 0x006F #LATIN SMALL LETTER O -0x70 0x0070 #LATIN SMALL LETTER P -0x71 0x0071 #LATIN SMALL LETTER Q -0x72 0x0072 #LATIN SMALL LETTER R -0x73 0x0073 #LATIN SMALL LETTER S -0x74 0x0074 #LATIN SMALL LETTER T -0x75 0x0075 #LATIN SMALL LETTER U -0x76 0x0076 #LATIN SMALL LETTER V -0x77 0x0077 #LATIN SMALL LETTER W -0x78 0x0078 #LATIN SMALL LETTER X -0x79 0x0079 #LATIN SMALL LETTER Y -0x7A 0x007A #LATIN SMALL LETTER Z -0x7B 0x007B #LEFT CURLY BRACKET -0x7C 0x007C #VERTICAL LINE -0x7D 0x007D #RIGHT CURLY BRACKET -0x7E 0x007E #TILDE -0x7F 0x007F #DELETE -0x80 0x20AC #EURO SIGN -0x81 0x067E #ARABIC LETTER PEH -0x82 0x201A #SINGLE LOW-9 QUOTATION MARK -0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK -0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK -0x85 0x2026 #HORIZONTAL ELLIPSIS -0x86 0x2020 #DAGGER -0x87 0x2021 #DOUBLE DAGGER -0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT -0x89 0x2030 #PER MILLE SIGN -0x8A 0x0679 #ARABIC LETTER TTEH -0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK -0x8C 0x0152 #LATIN CAPITAL LIGATURE OE -0x8D 0x0686 #ARABIC LETTER TCHEH -0x8E 0x0698 #ARABIC LETTER JEH -0x8F 0x0688 #ARABIC LETTER DDAL -0x90 0x06AF #ARABIC LETTER GAF -0x91 0x2018 #LEFT SINGLE QUOTATION MARK -0x92 0x2019 #RIGHT SINGLE QUOTATION MARK -0x93 0x201C #LEFT DOUBLE QUOTATION MARK -0x94 0x201D #RIGHT DOUBLE QUOTATION MARK -0x95 0x2022 #BULLET -0x96 0x2013 #EN DASH -0x97 0x2014 #EM DASH -0x98 0x06A9 #ARABIC LETTER KEHEH -0x99 0x2122 #TRADE MARK SIGN -0x9A 0x0691 #ARABIC LETTER RREH -0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -0x9C 0x0153 #LATIN SMALL LIGATURE OE -0x9D 0x200C #ZERO WIDTH NON-JOINER -0x9E 0x200D #ZERO WIDTH JOINER -0x9F 0x06BA #ARABIC LETTER NOON GHUNNA -0xA0 0x00A0 #NO-BREAK SPACE -0xA1 0x060C #ARABIC COMMA -0xA2 0x00A2 #CENT SIGN -0xA3 0x00A3 #POUND SIGN -0xA4 0x00A4 #CURRENCY SIGN -0xA5 0x00A5 #YEN SIGN -0xA6 0x00A6 #BROKEN BAR -0xA7 0x00A7 #SECTION SIGN -0xA8 0x00A8 #DIAERESIS -0xA9 0x00A9 #COPYRIGHT SIGN -0xAA 0x06BE #ARABIC LETTER HEH DOACHASHMEE -0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -0xAC 0x00AC #NOT SIGN -0xAD 0x00AD #SOFT HYPHEN -0xAE 0x00AE #REGISTERED SIGN -0xAF 0x00AF #MACRON -0xB0 0x00B0 #DEGREE SIGN -0xB1 0x00B1 #PLUS-MINUS SIGN -0xB2 0x00B2 #SUPERSCRIPT TWO -0xB3 0x00B3 #SUPERSCRIPT THREE -0xB4 0x00B4 #ACUTE ACCENT -0xB5 0x00B5 #MICRO SIGN -0xB6 0x00B6 #PILCROW SIGN -0xB7 0x00B7 #MIDDLE DOT -0xB8 0x00B8 #CEDILLA -0xB9 0x00B9 #SUPERSCRIPT ONE -0xBA 0x061B #ARABIC SEMICOLON -0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -0xBC 0x00BC #VULGAR FRACTION ONE QUARTER -0xBD 0x00BD #VULGAR FRACTION ONE HALF -0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS -0xBF 0x061F #ARABIC QUESTION MARK -0xC0 0x06C1 #ARABIC LETTER HEH GOAL -0xC1 0x0621 #ARABIC LETTER HAMZA -0xC2 0x0622 #ARABIC LETTER ALEF WITH MADDA ABOVE -0xC3 0x0623 #ARABIC LETTER ALEF WITH HAMZA ABOVE -0xC4 0x0624 #ARABIC LETTER WAW WITH HAMZA ABOVE -0xC5 0x0625 #ARABIC LETTER ALEF WITH HAMZA BELOW -0xC6 0x0626 #ARABIC LETTER YEH WITH HAMZA ABOVE -0xC7 0x0627 #ARABIC LETTER ALEF -0xC8 0x0628 #ARABIC LETTER BEH -0xC9 0x0629 #ARABIC LETTER TEH MARBUTA -0xCA 0x062A #ARABIC LETTER TEH -0xCB 0x062B #ARABIC LETTER THEH -0xCC 0x062C #ARABIC LETTER JEEM -0xCD 0x062D #ARABIC LETTER HAH -0xCE 0x062E #ARABIC LETTER KHAH -0xCF 0x062F #ARABIC LETTER DAL -0xD0 0x0630 #ARABIC LETTER THAL -0xD1 0x0631 #ARABIC LETTER REH -0xD2 0x0632 #ARABIC LETTER ZAIN -0xD3 0x0633 #ARABIC LETTER SEEN -0xD4 0x0634 #ARABIC LETTER SHEEN -0xD5 0x0635 #ARABIC LETTER SAD -0xD6 0x0636 #ARABIC LETTER DAD -0xD7 0x00D7 #MULTIPLICATION SIGN -0xD8 0x0637 #ARABIC LETTER TAH -0xD9 0x0638 #ARABIC LETTER ZAH -0xDA 0x0639 #ARABIC LETTER AIN -0xDB 0x063A #ARABIC LETTER GHAIN -0xDC 0x0640 #ARABIC TATWEEL -0xDD 0x0641 #ARABIC LETTER FEH -0xDE 0x0642 #ARABIC LETTER QAF -0xDF 0x0643 #ARABIC LETTER KAF -0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE -0xE1 0x0644 #ARABIC LETTER LAM -0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX -0xE3 0x0645 #ARABIC LETTER MEEM -0xE4 0x0646 #ARABIC LETTER NOON -0xE5 0x0647 #ARABIC LETTER HEH -0xE6 0x0648 #ARABIC LETTER WAW -0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA -0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE -0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE -0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX -0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS -0xEC 0x0649 #ARABIC LETTER ALEF MAKSURA -0xED 0x064A #ARABIC LETTER YEH -0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX -0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS -0xF0 0x064B #ARABIC FATHATAN -0xF1 0x064C #ARABIC DAMMATAN -0xF2 0x064D #ARABIC KASRATAN -0xF3 0x064E #ARABIC FATHA -0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX -0xF5 0x064F #ARABIC DAMMA -0xF6 0x0650 #ARABIC KASRA -0xF7 0x00F7 #DIVISION SIGN -0xF8 0x0651 #ARABIC SHADDA -0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE -0xFA 0x0652 #ARABIC SUKUN -0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX -0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS -0xFD 0x200E #LEFT-TO-RIGHT MARK -0xFE 0x200F #RIGHT-TO-LEFT MARK -0xFF 0x06D2 #ARABIC LETTER YEH BARREE diff --git a/program/lib/encoding/CP1257.map b/program/lib/encoding/CP1257.map deleted file mode 100644 index 97979d931..000000000 --- a/program/lib/encoding/CP1257.map +++ /dev/null @@ -1,274 +0,0 @@ -# -# Name: cp1257 to Unicode table -# Unicode version: 2.0 -# Table version: 2.01 -# Table format: Format A -# Date: 04/15/98 -# -# Contact: cpxlate@microsoft.com -# -# General notes: none -# -# Format: Three tab-separated columns -# Column #1 is the cp1257 code (in hex) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 is the Unicode name (follows a comment sign, '#') -# -# The entries are in cp1257 order -# -0x00 0x0000 #NULL -0x01 0x0001 #START OF HEADING -0x02 0x0002 #START OF TEXT -0x03 0x0003 #END OF TEXT -0x04 0x0004 #END OF TRANSMISSION -0x05 0x0005 #ENQUIRY -0x06 0x0006 #ACKNOWLEDGE -0x07 0x0007 #BELL -0x08 0x0008 #BACKSPACE -0x09 0x0009 #HORIZONTAL TABULATION -0x0A 0x000A #LINE FEED -0x0B 0x000B #VERTICAL TABULATION -0x0C 0x000C #FORM FEED -0x0D 0x000D #CARRIAGE RETURN -0x0E 0x000E #SHIFT OUT -0x0F 0x000F #SHIFT IN -0x10 0x0010 #DATA LINK ESCAPE -0x11 0x0011 #DEVICE CONTROL ONE -0x12 0x0012 #DEVICE CONTROL TWO -0x13 0x0013 #DEVICE CONTROL THREE -0x14 0x0014 #DEVICE CONTROL FOUR -0x15 0x0015 #NEGATIVE ACKNOWLEDGE -0x16 0x0016 #SYNCHRONOUS IDLE -0x17 0x0017 #END OF TRANSMISSION BLOCK -0x18 0x0018 #CANCEL -0x19 0x0019 #END OF MEDIUM -0x1A 0x001A #SUBSTITUTE -0x1B 0x001B #ESCAPE -0x1C 0x001C #FILE SEPARATOR -0x1D 0x001D #GROUP SEPARATOR -0x1E 0x001E #RECORD SEPARATOR -0x1F 0x001F #UNIT SEPARATOR -0x20 0x0020 #SPACE -0x21 0x0021 #EXCLAMATION MARK -0x22 0x0022 #QUOTATION MARK -0x23 0x0023 #NUMBER SIGN -0x24 0x0024 #DOLLAR SIGN -0x25 0x0025 #PERCENT SIGN -0x26 0x0026 #AMPERSAND -0x27 0x0027 #APOSTROPHE -0x28 0x0028 #LEFT PARENTHESIS -0x29 0x0029 #RIGHT PARENTHESIS -0x2A 0x002A #ASTERISK -0x2B 0x002B #PLUS SIGN -0x2C 0x002C #COMMA -0x2D 0x002D #HYPHEN-MINUS -0x2E 0x002E #FULL STOP -0x2F 0x002F #SOLIDUS -0x30 0x0030 #DIGIT ZERO -0x31 0x0031 #DIGIT ONE -0x32 0x0032 #DIGIT TWO -0x33 0x0033 #DIGIT THREE -0x34 0x0034 #DIGIT FOUR -0x35 0x0035 #DIGIT FIVE -0x36 0x0036 #DIGIT SIX -0x37 0x0037 #DIGIT SEVEN -0x38 0x0038 #DIGIT EIGHT -0x39 0x0039 #DIGIT NINE -0x3A 0x003A #COLON -0x3B 0x003B #SEMICOLON -0x3C 0x003C #LESS-THAN SIGN -0x3D 0x003D #EQUALS SIGN -0x3E 0x003E #GREATER-THAN SIGN -0x3F 0x003F #QUESTION MARK -0x40 0x0040 #COMMERCIAL AT -0x41 0x0041 #LATIN CAPITAL LETTER A -0x42 0x0042 #LATIN CAPITAL LETTER B -0x43 0x0043 #LATIN CAPITAL LETTER C -0x44 0x0044 #LATIN CAPITAL LETTER D -0x45 0x0045 #LATIN CAPITAL LETTER E -0x46 0x0046 #LATIN CAPITAL LETTER F -0x47 0x0047 #LATIN CAPITAL LETTER G -0x48 0x0048 #LATIN CAPITAL LETTER H -0x49 0x0049 #LATIN CAPITAL LETTER I -0x4A 0x004A #LATIN CAPITAL LETTER J -0x4B 0x004B #LATIN CAPITAL LETTER K -0x4C 0x004C #LATIN CAPITAL LETTER L -0x4D 0x004D #LATIN CAPITAL LETTER M -0x4E 0x004E #LATIN CAPITAL LETTER N -0x4F 0x004F #LATIN CAPITAL LETTER O -0x50 0x0050 #LATIN CAPITAL LETTER P -0x51 0x0051 #LATIN CAPITAL LETTER Q -0x52 0x0052 #LATIN CAPITAL LETTER R -0x53 0x0053 #LATIN CAPITAL LETTER S -0x54 0x0054 #LATIN CAPITAL LETTER T -0x55 0x0055 #LATIN CAPITAL LETTER U -0x56 0x0056 #LATIN CAPITAL LETTER V -0x57 0x0057 #LATIN CAPITAL LETTER W -0x58 0x0058 #LATIN CAPITAL LETTER X -0x59 0x0059 #LATIN CAPITAL LETTER Y -0x5A 0x005A #LATIN CAPITAL LETTER Z -0x5B 0x005B #LEFT SQUARE BRACKET -0x5C 0x005C #REVERSE SOLIDUS -0x5D 0x005D #RIGHT SQUARE BRACKET -0x5E 0x005E #CIRCUMFLEX ACCENT -0x5F 0x005F #LOW LINE -0x60 0x0060 #GRAVE ACCENT -0x61 0x0061 #LATIN SMALL LETTER A -0x62 0x0062 #LATIN SMALL LETTER B -0x63 0x0063 #LATIN SMALL LETTER C -0x64 0x0064 #LATIN SMALL LETTER D -0x65 0x0065 #LATIN SMALL LETTER E -0x66 0x0066 #LATIN SMALL LETTER F -0x67 0x0067 #LATIN SMALL LETTER G -0x68 0x0068 #LATIN SMALL LETTER H -0x69 0x0069 #LATIN SMALL LETTER I -0x6A 0x006A #LATIN SMALL LETTER J -0x6B 0x006B #LATIN SMALL LETTER K -0x6C 0x006C #LATIN SMALL LETTER L -0x6D 0x006D #LATIN SMALL LETTER M -0x6E 0x006E #LATIN SMALL LETTER N -0x6F 0x006F #LATIN SMALL LETTER O -0x70 0x0070 #LATIN SMALL LETTER P -0x71 0x0071 #LATIN SMALL LETTER Q -0x72 0x0072 #LATIN SMALL LETTER R -0x73 0x0073 #LATIN SMALL LETTER S -0x74 0x0074 #LATIN SMALL LETTER T -0x75 0x0075 #LATIN SMALL LETTER U -0x76 0x0076 #LATIN SMALL LETTER V -0x77 0x0077 #LATIN SMALL LETTER W -0x78 0x0078 #LATIN SMALL LETTER X -0x79 0x0079 #LATIN SMALL LETTER Y -0x7A 0x007A #LATIN SMALL LETTER Z -0x7B 0x007B #LEFT CURLY BRACKET -0x7C 0x007C #VERTICAL LINE -0x7D 0x007D #RIGHT CURLY BRACKET -0x7E 0x007E #TILDE -0x7F 0x007F #DELETE -0x80 0x20AC #EURO SIGN -0x81 #UNDEFINED -0x82 0x201A #SINGLE LOW-9 QUOTATION MARK -0x83 #UNDEFINED -0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK -0x85 0x2026 #HORIZONTAL ELLIPSIS -0x86 0x2020 #DAGGER -0x87 0x2021 #DOUBLE DAGGER -0x88 #UNDEFINED -0x89 0x2030 #PER MILLE SIGN -0x8A #UNDEFINED -0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK -0x8C #UNDEFINED -0x8D 0x00A8 #DIAERESIS -0x8E 0x02C7 #CARON -0x8F 0x00B8 #CEDILLA -0x90 #UNDEFINED -0x91 0x2018 #LEFT SINGLE QUOTATION MARK -0x92 0x2019 #RIGHT SINGLE QUOTATION MARK -0x93 0x201C #LEFT DOUBLE QUOTATION MARK -0x94 0x201D #RIGHT DOUBLE QUOTATION MARK -0x95 0x2022 #BULLET -0x96 0x2013 #EN DASH -0x97 0x2014 #EM DASH -0x98 #UNDEFINED -0x99 0x2122 #TRADE MARK SIGN -0x9A #UNDEFINED -0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -0x9C #UNDEFINED -0x9D 0x00AF #MACRON -0x9E 0x02DB #OGONEK -0x9F #UNDEFINED -0xA0 0x00A0 #NO-BREAK SPACE -0xA1 #UNDEFINED -0xA2 0x00A2 #CENT SIGN -0xA3 0x00A3 #POUND SIGN -0xA4 0x00A4 #CURRENCY SIGN -0xA5 #UNDEFINED -0xA6 0x00A6 #BROKEN BAR -0xA7 0x00A7 #SECTION SIGN -0xA8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE -0xA9 0x00A9 #COPYRIGHT SIGN -0xAA 0x0156 #LATIN CAPITAL LETTER R WITH CEDILLA -0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -0xAC 0x00AC #NOT SIGN -0xAD 0x00AD #SOFT HYPHEN -0xAE 0x00AE #REGISTERED SIGN -0xAF 0x00C6 #LATIN CAPITAL LETTER AE -0xB0 0x00B0 #DEGREE SIGN -0xB1 0x00B1 #PLUS-MINUS SIGN -0xB2 0x00B2 #SUPERSCRIPT TWO -0xB3 0x00B3 #SUPERSCRIPT THREE -0xB4 0x00B4 #ACUTE ACCENT -0xB5 0x00B5 #MICRO SIGN -0xB6 0x00B6 #PILCROW SIGN -0xB7 0x00B7 #MIDDLE DOT -0xB8 0x00F8 #LATIN SMALL LETTER O WITH STROKE -0xB9 0x00B9 #SUPERSCRIPT ONE -0xBA 0x0157 #LATIN SMALL LETTER R WITH CEDILLA -0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -0xBC 0x00BC #VULGAR FRACTION ONE QUARTER -0xBD 0x00BD #VULGAR FRACTION ONE HALF -0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS -0xBF 0x00E6 #LATIN SMALL LETTER AE -0xC0 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK -0xC1 0x012E #LATIN CAPITAL LETTER I WITH OGONEK -0xC2 0x0100 #LATIN CAPITAL LETTER A WITH MACRON -0xC3 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE -0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS -0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE -0xC6 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK -0xC7 0x0112 #LATIN CAPITAL LETTER E WITH MACRON -0xC8 0x010C #LATIN CAPITAL LETTER C WITH CARON -0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE -0xCA 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE -0xCB 0x0116 #LATIN CAPITAL LETTER E WITH DOT ABOVE -0xCC 0x0122 #LATIN CAPITAL LETTER G WITH CEDILLA -0xCD 0x0136 #LATIN CAPITAL LETTER K WITH CEDILLA -0xCE 0x012A #LATIN CAPITAL LETTER I WITH MACRON -0xCF 0x013B #LATIN CAPITAL LETTER L WITH CEDILLA -0xD0 0x0160 #LATIN CAPITAL LETTER S WITH CARON -0xD1 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE -0xD2 0x0145 #LATIN CAPITAL LETTER N WITH CEDILLA -0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE -0xD4 0x014C #LATIN CAPITAL LETTER O WITH MACRON -0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE -0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS -0xD7 0x00D7 #MULTIPLICATION SIGN -0xD8 0x0172 #LATIN CAPITAL LETTER U WITH OGONEK -0xD9 0x0141 #LATIN CAPITAL LETTER L WITH STROKE -0xDA 0x015A #LATIN CAPITAL LETTER S WITH ACUTE -0xDB 0x016A #LATIN CAPITAL LETTER U WITH MACRON -0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS -0xDD 0x017B #LATIN CAPITAL LETTER Z WITH DOT ABOVE -0xDE 0x017D #LATIN CAPITAL LETTER Z WITH CARON -0xDF 0x00DF #LATIN SMALL LETTER SHARP S -0xE0 0x0105 #LATIN SMALL LETTER A WITH OGONEK -0xE1 0x012F #LATIN SMALL LETTER I WITH OGONEK -0xE2 0x0101 #LATIN SMALL LETTER A WITH MACRON -0xE3 0x0107 #LATIN SMALL LETTER C WITH ACUTE -0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS -0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE -0xE6 0x0119 #LATIN SMALL LETTER E WITH OGONEK -0xE7 0x0113 #LATIN SMALL LETTER E WITH MACRON -0xE8 0x010D #LATIN SMALL LETTER C WITH CARON -0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE -0xEA 0x017A #LATIN SMALL LETTER Z WITH ACUTE -0xEB 0x0117 #LATIN SMALL LETTER E WITH DOT ABOVE -0xEC 0x0123 #LATIN SMALL LETTER G WITH CEDILLA -0xED 0x0137 #LATIN SMALL LETTER K WITH CEDILLA -0xEE 0x012B #LATIN SMALL LETTER I WITH MACRON -0xEF 0x013C #LATIN SMALL LETTER L WITH CEDILLA -0xF0 0x0161 #LATIN SMALL LETTER S WITH CARON -0xF1 0x0144 #LATIN SMALL LETTER N WITH ACUTE -0xF2 0x0146 #LATIN SMALL LETTER N WITH CEDILLA -0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE -0xF4 0x014D #LATIN SMALL LETTER O WITH MACRON -0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE -0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS -0xF7 0x00F7 #DIVISION SIGN -0xF8 0x0173 #LATIN SMALL LETTER U WITH OGONEK -0xF9 0x0142 #LATIN SMALL LETTER L WITH STROKE -0xFA 0x015B #LATIN SMALL LETTER S WITH ACUTE -0xFB 0x016B #LATIN SMALL LETTER U WITH MACRON -0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS -0xFD 0x017C #LATIN SMALL LETTER Z WITH DOT ABOVE -0xFE 0x017E #LATIN SMALL LETTER Z WITH CARON -0xFF 0x02D9 #DOT ABOVE diff --git a/program/lib/encoding/CP1258.map b/program/lib/encoding/CP1258.map deleted file mode 100644 index 392310a8c..000000000 --- a/program/lib/encoding/CP1258.map +++ /dev/null @@ -1,274 +0,0 @@ -# -# Name: cp1258 to Unicode table -# Unicode version: 2.0 -# Table version: 2.01 -# Table format: Format A -# Date: 04/15/98 -# -# Contact: cpxlate@microsoft.com -# -# General notes: none -# -# Format: Three tab-separated columns -# Column #1 is the cp1258 code (in hex) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 is the Unicode name (follows a comment sign, '#') -# -# The entries are in cp1258 order -# -0x00 0x0000 #NULL -0x01 0x0001 #START OF HEADING -0x02 0x0002 #START OF TEXT -0x03 0x0003 #END OF TEXT -0x04 0x0004 #END OF TRANSMISSION -0x05 0x0005 #ENQUIRY -0x06 0x0006 #ACKNOWLEDGE -0x07 0x0007 #BELL -0x08 0x0008 #BACKSPACE -0x09 0x0009 #HORIZONTAL TABULATION -0x0A 0x000A #LINE FEED -0x0B 0x000B #VERTICAL TABULATION -0x0C 0x000C #FORM FEED -0x0D 0x000D #CARRIAGE RETURN -0x0E 0x000E #SHIFT OUT -0x0F 0x000F #SHIFT IN -0x10 0x0010 #DATA LINK ESCAPE -0x11 0x0011 #DEVICE CONTROL ONE -0x12 0x0012 #DEVICE CONTROL TWO -0x13 0x0013 #DEVICE CONTROL THREE -0x14 0x0014 #DEVICE CONTROL FOUR -0x15 0x0015 #NEGATIVE ACKNOWLEDGE -0x16 0x0016 #SYNCHRONOUS IDLE -0x17 0x0017 #END OF TRANSMISSION BLOCK -0x18 0x0018 #CANCEL -0x19 0x0019 #END OF MEDIUM -0x1A 0x001A #SUBSTITUTE -0x1B 0x001B #ESCAPE -0x1C 0x001C #FILE SEPARATOR -0x1D 0x001D #GROUP SEPARATOR -0x1E 0x001E #RECORD SEPARATOR -0x1F 0x001F #UNIT SEPARATOR -0x20 0x0020 #SPACE -0x21 0x0021 #EXCLAMATION MARK -0x22 0x0022 #QUOTATION MARK -0x23 0x0023 #NUMBER SIGN -0x24 0x0024 #DOLLAR SIGN -0x25 0x0025 #PERCENT SIGN -0x26 0x0026 #AMPERSAND -0x27 0x0027 #APOSTROPHE -0x28 0x0028 #LEFT PARENTHESIS -0x29 0x0029 #RIGHT PARENTHESIS -0x2A 0x002A #ASTERISK -0x2B 0x002B #PLUS SIGN -0x2C 0x002C #COMMA -0x2D 0x002D #HYPHEN-MINUS -0x2E 0x002E #FULL STOP -0x2F 0x002F #SOLIDUS -0x30 0x0030 #DIGIT ZERO -0x31 0x0031 #DIGIT ONE -0x32 0x0032 #DIGIT TWO -0x33 0x0033 #DIGIT THREE -0x34 0x0034 #DIGIT FOUR -0x35 0x0035 #DIGIT FIVE -0x36 0x0036 #DIGIT SIX -0x37 0x0037 #DIGIT SEVEN -0x38 0x0038 #DIGIT EIGHT -0x39 0x0039 #DIGIT NINE -0x3A 0x003A #COLON -0x3B 0x003B #SEMICOLON -0x3C 0x003C #LESS-THAN SIGN -0x3D 0x003D #EQUALS SIGN -0x3E 0x003E #GREATER-THAN SIGN -0x3F 0x003F #QUESTION MARK -0x40 0x0040 #COMMERCIAL AT -0x41 0x0041 #LATIN CAPITAL LETTER A -0x42 0x0042 #LATIN CAPITAL LETTER B -0x43 0x0043 #LATIN CAPITAL LETTER C -0x44 0x0044 #LATIN CAPITAL LETTER D -0x45 0x0045 #LATIN CAPITAL LETTER E -0x46 0x0046 #LATIN CAPITAL LETTER F -0x47 0x0047 #LATIN CAPITAL LETTER G -0x48 0x0048 #LATIN CAPITAL LETTER H -0x49 0x0049 #LATIN CAPITAL LETTER I -0x4A 0x004A #LATIN CAPITAL LETTER J -0x4B 0x004B #LATIN CAPITAL LETTER K -0x4C 0x004C #LATIN CAPITAL LETTER L -0x4D 0x004D #LATIN CAPITAL LETTER M -0x4E 0x004E #LATIN CAPITAL LETTER N -0x4F 0x004F #LATIN CAPITAL LETTER O -0x50 0x0050 #LATIN CAPITAL LETTER P -0x51 0x0051 #LATIN CAPITAL LETTER Q -0x52 0x0052 #LATIN CAPITAL LETTER R -0x53 0x0053 #LATIN CAPITAL LETTER S -0x54 0x0054 #LATIN CAPITAL LETTER T -0x55 0x0055 #LATIN CAPITAL LETTER U -0x56 0x0056 #LATIN CAPITAL LETTER V -0x57 0x0057 #LATIN CAPITAL LETTER W -0x58 0x0058 #LATIN CAPITAL LETTER X -0x59 0x0059 #LATIN CAPITAL LETTER Y -0x5A 0x005A #LATIN CAPITAL LETTER Z -0x5B 0x005B #LEFT SQUARE BRACKET -0x5C 0x005C #REVERSE SOLIDUS -0x5D 0x005D #RIGHT SQUARE BRACKET -0x5E 0x005E #CIRCUMFLEX ACCENT -0x5F 0x005F #LOW LINE -0x60 0x0060 #GRAVE ACCENT -0x61 0x0061 #LATIN SMALL LETTER A -0x62 0x0062 #LATIN SMALL LETTER B -0x63 0x0063 #LATIN SMALL LETTER C -0x64 0x0064 #LATIN SMALL LETTER D -0x65 0x0065 #LATIN SMALL LETTER E -0x66 0x0066 #LATIN SMALL LETTER F -0x67 0x0067 #LATIN SMALL LETTER G -0x68 0x0068 #LATIN SMALL LETTER H -0x69 0x0069 #LATIN SMALL LETTER I -0x6A 0x006A #LATIN SMALL LETTER J -0x6B 0x006B #LATIN SMALL LETTER K -0x6C 0x006C #LATIN SMALL LETTER L -0x6D 0x006D #LATIN SMALL LETTER M -0x6E 0x006E #LATIN SMALL LETTER N -0x6F 0x006F #LATIN SMALL LETTER O -0x70 0x0070 #LATIN SMALL LETTER P -0x71 0x0071 #LATIN SMALL LETTER Q -0x72 0x0072 #LATIN SMALL LETTER R -0x73 0x0073 #LATIN SMALL LETTER S -0x74 0x0074 #LATIN SMALL LETTER T -0x75 0x0075 #LATIN SMALL LETTER U -0x76 0x0076 #LATIN SMALL LETTER V -0x77 0x0077 #LATIN SMALL LETTER W -0x78 0x0078 #LATIN SMALL LETTER X -0x79 0x0079 #LATIN SMALL LETTER Y -0x7A 0x007A #LATIN SMALL LETTER Z -0x7B 0x007B #LEFT CURLY BRACKET -0x7C 0x007C #VERTICAL LINE -0x7D 0x007D #RIGHT CURLY BRACKET -0x7E 0x007E #TILDE -0x7F 0x007F #DELETE -0x80 0x20AC #EURO SIGN -0x81 #UNDEFINED -0x82 0x201A #SINGLE LOW-9 QUOTATION MARK -0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK -0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK -0x85 0x2026 #HORIZONTAL ELLIPSIS -0x86 0x2020 #DAGGER -0x87 0x2021 #DOUBLE DAGGER -0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT -0x89 0x2030 #PER MILLE SIGN -0x8A #UNDEFINED -0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK -0x8C 0x0152 #LATIN CAPITAL LIGATURE OE -0x8D #UNDEFINED -0x8E #UNDEFINED -0x8F #UNDEFINED -0x90 #UNDEFINED -0x91 0x2018 #LEFT SINGLE QUOTATION MARK -0x92 0x2019 #RIGHT SINGLE QUOTATION MARK -0x93 0x201C #LEFT DOUBLE QUOTATION MARK -0x94 0x201D #RIGHT DOUBLE QUOTATION MARK -0x95 0x2022 #BULLET -0x96 0x2013 #EN DASH -0x97 0x2014 #EM DASH -0x98 0x02DC #SMALL TILDE -0x99 0x2122 #TRADE MARK SIGN -0x9A #UNDEFINED -0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -0x9C 0x0153 #LATIN SMALL LIGATURE OE -0x9D #UNDEFINED -0x9E #UNDEFINED -0x9F 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS -0xA0 0x00A0 #NO-BREAK SPACE -0xA1 0x00A1 #INVERTED EXCLAMATION MARK -0xA2 0x00A2 #CENT SIGN -0xA3 0x00A3 #POUND SIGN -0xA4 0x00A4 #CURRENCY SIGN -0xA5 0x00A5 #YEN SIGN -0xA6 0x00A6 #BROKEN BAR -0xA7 0x00A7 #SECTION SIGN -0xA8 0x00A8 #DIAERESIS -0xA9 0x00A9 #COPYRIGHT SIGN -0xAA 0x00AA #FEMININE ORDINAL INDICATOR -0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -0xAC 0x00AC #NOT SIGN -0xAD 0x00AD #SOFT HYPHEN -0xAE 0x00AE #REGISTERED SIGN -0xAF 0x00AF #MACRON -0xB0 0x00B0 #DEGREE SIGN -0xB1 0x00B1 #PLUS-MINUS SIGN -0xB2 0x00B2 #SUPERSCRIPT TWO -0xB3 0x00B3 #SUPERSCRIPT THREE -0xB4 0x00B4 #ACUTE ACCENT -0xB5 0x00B5 #MICRO SIGN -0xB6 0x00B6 #PILCROW SIGN -0xB7 0x00B7 #MIDDLE DOT -0xB8 0x00B8 #CEDILLA -0xB9 0x00B9 #SUPERSCRIPT ONE -0xBA 0x00BA #MASCULINE ORDINAL INDICATOR -0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -0xBC 0x00BC #VULGAR FRACTION ONE QUARTER -0xBD 0x00BD #VULGAR FRACTION ONE HALF -0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS -0xBF 0x00BF #INVERTED QUESTION MARK -0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE -0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE -0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX -0xC3 0x0102 #LATIN CAPITAL LETTER A WITH BREVE -0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS -0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE -0xC6 0x00C6 #LATIN CAPITAL LETTER AE -0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA -0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE -0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE -0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX -0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS -0xCC 0x0300 #COMBINING GRAVE ACCENT -0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE -0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX -0xCF 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS -0xD0 0x0110 #LATIN CAPITAL LETTER D WITH STROKE -0xD1 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE -0xD2 0x0309 #COMBINING HOOK ABOVE -0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE -0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX -0xD5 0x01A0 #LATIN CAPITAL LETTER O WITH HORN -0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS -0xD7 0x00D7 #MULTIPLICATION SIGN -0xD8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE -0xD9 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE -0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE -0xDB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX -0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS -0xDD 0x01AF #LATIN CAPITAL LETTER U WITH HORN -0xDE 0x0303 #COMBINING TILDE -0xDF 0x00DF #LATIN SMALL LETTER SHARP S -0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE -0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE -0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX -0xE3 0x0103 #LATIN SMALL LETTER A WITH BREVE -0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS -0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE -0xE6 0x00E6 #LATIN SMALL LETTER AE -0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA -0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE -0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE -0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX -0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS -0xEC 0x0301 #COMBINING ACUTE ACCENT -0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE -0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX -0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS -0xF0 0x0111 #LATIN SMALL LETTER D WITH STROKE -0xF1 0x00F1 #LATIN SMALL LETTER N WITH TILDE -0xF2 0x0323 #COMBINING DOT BELOW -0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE -0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX -0xF5 0x01A1 #LATIN SMALL LETTER O WITH HORN -0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS -0xF7 0x00F7 #DIVISION SIGN -0xF8 0x00F8 #LATIN SMALL LETTER O WITH STROKE -0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE -0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE -0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX -0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS -0xFD 0x01B0 #LATIN SMALL LETTER U WITH HORN -0xFE 0x20AB #DONG SIGN -0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/program/lib/encoding/ISO-8859-1.map b/program/lib/encoding/ISO-8859-1.map deleted file mode 100644 index 473ecabc1..000000000 --- a/program/lib/encoding/ISO-8859-1.map +++ /dev/null @@ -1,303 +0,0 @@ -# -# Name: ISO/IEC 8859-1:1998 to Unicode -# Unicode version: 3.0 -# Table version: 1.0 -# Table format: Format A -# Date: 1999 July 27 -# Authors: Ken Whistler <kenw@sybase.com> -# -# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. -# -# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -# No claims are made as to fitness for any particular purpose. No -# warranties of any kind are expressed or implied. The recipient -# agrees to determine applicability of information provided. If this -# file has been provided on optical media by Unicode, Inc., the sole -# remedy for any claim will be exchange of defective media within 90 -# days of receipt. -# -# Unicode, Inc. hereby grants the right to freely use the information -# supplied in this file in the creation of products supporting the -# Unicode Standard, and to make copies of this file in any form for -# internal or external distribution as long as this notice remains -# attached. -# -# General notes: -# -# This table contains the data the Unicode Consortium has on how -# ISO/IEC 8859-1:1998 characters map into Unicode. -# -# Format: Three tab-separated columns -# Column #1 is the ISO/IEC 8859-1 code (in hex as 0xXX) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 the Unicode name (follows a comment sign, '#') -# -# The entries are in ISO/IEC 8859-1 order. -# -# Version history -# 1.0 version updates 0.1 version by adding mappings for all -# control characters. -# -# Updated versions of this file may be found in: -# <ftp://ftp.unicode.org/Public/MAPPINGS/> -# -# Any comments or problems, contact <errata@unicode.org> -# Please note that <errata@unicode.org> is an archival address; -# notices will be checked, but do not expect an immediate response. -# -0x00 0x0000 # NULL -0x01 0x0001 # START OF HEADING -0x02 0x0002 # START OF TEXT -0x03 0x0003 # END OF TEXT -0x04 0x0004 # END OF TRANSMISSION -0x05 0x0005 # ENQUIRY -0x06 0x0006 # ACKNOWLEDGE -0x07 0x0007 # BELL -0x08 0x0008 # BACKSPACE -0x09 0x0009 # HORIZONTAL TABULATION -0x0A 0x000A # LINE FEED -0x0B 0x000B # VERTICAL TABULATION -0x0C 0x000C # FORM FEED -0x0D 0x000D # CARRIAGE RETURN -0x0E 0x000E # SHIFT OUT -0x0F 0x000F # SHIFT IN -0x10 0x0010 # DATA LINK ESCAPE -0x11 0x0011 # DEVICE CONTROL ONE -0x12 0x0012 # DEVICE CONTROL TWO -0x13 0x0013 # DEVICE CONTROL THREE -0x14 0x0014 # DEVICE CONTROL FOUR -0x15 0x0015 # NEGATIVE ACKNOWLEDGE -0x16 0x0016 # SYNCHRONOUS IDLE -0x17 0x0017 # END OF TRANSMISSION BLOCK -0x18 0x0018 # CANCEL -0x19 0x0019 # END OF MEDIUM -0x1A 0x001A # SUBSTITUTE -0x1B 0x001B # ESCAPE -0x1C 0x001C # FILE SEPARATOR -0x1D 0x001D # GROUP SEPARATOR -0x1E 0x001E # RECORD SEPARATOR -0x1F 0x001F # UNIT SEPARATOR -0x20 0x0020 # SPACE -0x21 0x0021 # EXCLAMATION MARK -0x22 0x0022 # QUOTATION MARK -0x23 0x0023 # NUMBER SIGN -0x24 0x0024 # DOLLAR SIGN -0x25 0x0025 # PERCENT SIGN -0x26 0x0026 # AMPERSAND -0x27 0x0027 # APOSTROPHE -0x28 0x0028 # LEFT PARENTHESIS -0x29 0x0029 # RIGHT PARENTHESIS -0x2A 0x002A # ASTERISK -0x2B 0x002B # PLUS SIGN -0x2C 0x002C # COMMA -0x2D 0x002D # HYPHEN-MINUS -0x2E 0x002E # FULL STOP -0x2F 0x002F # SOLIDUS -0x30 0x0030 # DIGIT ZERO -0x31 0x0031 # DIGIT ONE -0x32 0x0032 # DIGIT TWO -0x33 0x0033 # DIGIT THREE -0x34 0x0034 # DIGIT FOUR -0x35 0x0035 # DIGIT FIVE -0x36 0x0036 # DIGIT SIX -0x37 0x0037 # DIGIT SEVEN -0x38 0x0038 # DIGIT EIGHT -0x39 0x0039 # DIGIT NINE -0x3A 0x003A # COLON -0x3B 0x003B # SEMICOLON -0x3C 0x003C # LESS-THAN SIGN -0x3D 0x003D # EQUALS SIGN -0x3E 0x003E # GREATER-THAN SIGN -0x3F 0x003F # QUESTION MARK -0x40 0x0040 # COMMERCIAL AT -0x41 0x0041 # LATIN CAPITAL LETTER A -0x42 0x0042 # LATIN CAPITAL LETTER B -0x43 0x0043 # LATIN CAPITAL LETTER C -0x44 0x0044 # LATIN CAPITAL LETTER D -0x45 0x0045 # LATIN CAPITAL LETTER E -0x46 0x0046 # LATIN CAPITAL LETTER F -0x47 0x0047 # LATIN CAPITAL LETTER G -0x48 0x0048 # LATIN CAPITAL LETTER H -0x49 0x0049 # LATIN CAPITAL LETTER I -0x4A 0x004A # LATIN CAPITAL LETTER J -0x4B 0x004B # LATIN CAPITAL LETTER K -0x4C 0x004C # LATIN CAPITAL LETTER L -0x4D 0x004D # LATIN CAPITAL LETTER M -0x4E 0x004E # LATIN CAPITAL LETTER N -0x4F 0x004F # LATIN CAPITAL LETTER O -0x50 0x0050 # LATIN CAPITAL LETTER P -0x51 0x0051 # LATIN CAPITAL LETTER Q -0x52 0x0052 # LATIN CAPITAL LETTER R -0x53 0x0053 # LATIN CAPITAL LETTER S -0x54 0x0054 # LATIN CAPITAL LETTER T -0x55 0x0055 # LATIN CAPITAL LETTER U -0x56 0x0056 # LATIN CAPITAL LETTER V -0x57 0x0057 # LATIN CAPITAL LETTER W -0x58 0x0058 # LATIN CAPITAL LETTER X -0x59 0x0059 # LATIN CAPITAL LETTER Y -0x5A 0x005A # LATIN CAPITAL LETTER Z -0x5B 0x005B # LEFT SQUARE BRACKET -0x5C 0x005C # REVERSE SOLIDUS -0x5D 0x005D # RIGHT SQUARE BRACKET -0x5E 0x005E # CIRCUMFLEX ACCENT -0x5F 0x005F # LOW LINE -0x60 0x0060 # GRAVE ACCENT -0x61 0x0061 # LATIN SMALL LETTER A -0x62 0x0062 # LATIN SMALL LETTER B -0x63 0x0063 # LATIN SMALL LETTER C -0x64 0x0064 # LATIN SMALL LETTER D -0x65 0x0065 # LATIN SMALL LETTER E -0x66 0x0066 # LATIN SMALL LETTER F -0x67 0x0067 # LATIN SMALL LETTER G -0x68 0x0068 # LATIN SMALL LETTER H -0x69 0x0069 # LATIN SMALL LETTER I -0x6A 0x006A # LATIN SMALL LETTER J -0x6B 0x006B # LATIN SMALL LETTER K -0x6C 0x006C # LATIN SMALL LETTER L -0x6D 0x006D # LATIN SMALL LETTER M -0x6E 0x006E # LATIN SMALL LETTER N -0x6F 0x006F # LATIN SMALL LETTER O -0x70 0x0070 # LATIN SMALL LETTER P -0x71 0x0071 # LATIN SMALL LETTER Q -0x72 0x0072 # LATIN SMALL LETTER R -0x73 0x0073 # LATIN SMALL LETTER S -0x74 0x0074 # LATIN SMALL LETTER T -0x75 0x0075 # LATIN SMALL LETTER U -0x76 0x0076 # LATIN SMALL LETTER V -0x77 0x0077 # LATIN SMALL LETTER W -0x78 0x0078 # LATIN SMALL LETTER X -0x79 0x0079 # LATIN SMALL LETTER Y -0x7A 0x007A # LATIN SMALL LETTER Z -0x7B 0x007B # LEFT CURLY BRACKET -0x7C 0x007C # VERTICAL LINE -0x7D 0x007D # RIGHT CURLY BRACKET -0x7E 0x007E # TILDE -0x7F 0x007F # DELETE -0x80 0x0080 # <control> -0x81 0x0081 # <control> -0x82 0x0082 # <control> -0x83 0x0083 # <control> -0x84 0x0084 # <control> -0x85 0x0085 # <control> -0x86 0x0086 # <control> -0x87 0x0087 # <control> -0x88 0x0088 # <control> -0x89 0x0089 # <control> -0x8A 0x008A # <control> -0x8B 0x008B # <control> -0x8C 0x008C # <control> -0x8D 0x008D # <control> -0x8E 0x008E # <control> -0x8F 0x008F # <control> -0x90 0x0090 # <control> -0x91 0x0091 # <control> -0x92 0x0092 # <control> -0x93 0x0093 # <control> -0x94 0x0094 # <control> -0x95 0x0095 # <control> -0x96 0x0096 # <control> -0x97 0x0097 # <control> -0x98 0x0098 # <control> -0x99 0x0099 # <control> -0x9A 0x009A # <control> -0x9B 0x009B # <control> -0x9C 0x009C # <control> -0x9D 0x009D # <control> -0x9E 0x009E # <control> -0x9F 0x009F # <control> -0xA0 0x00A0 # NO-BREAK SPACE -0xA1 0x00A1 # INVERTED EXCLAMATION MARK -0xA2 0x00A2 # CENT SIGN -0xA3 0x00A3 # POUND SIGN -0xA4 0x00A4 # CURRENCY SIGN -0xA5 0x00A5 # YEN SIGN -0xA6 0x00A6 # BROKEN BAR -0xA7 0x00A7 # SECTION SIGN -0xA8 0x00A8 # DIAERESIS -0xA9 0x00A9 # COPYRIGHT SIGN -0xAA 0x00AA # FEMININE ORDINAL INDICATOR -0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -0xAC 0x00AC # NOT SIGN -0xAD 0x00AD # SOFT HYPHEN -0xAE 0x00AE # REGISTERED SIGN -0xAF 0x00AF # MACRON -0xB0 0x00B0 # DEGREE SIGN -0xB1 0x00B1 # PLUS-MINUS SIGN -0xB2 0x00B2 # SUPERSCRIPT TWO -0xB3 0x00B3 # SUPERSCRIPT THREE -0xB4 0x00B4 # ACUTE ACCENT -0xB5 0x00B5 # MICRO SIGN -0xB6 0x00B6 # PILCROW SIGN -0xB7 0x00B7 # MIDDLE DOT -0xB8 0x00B8 # CEDILLA -0xB9 0x00B9 # SUPERSCRIPT ONE -0xBA 0x00BA # MASCULINE ORDINAL INDICATOR -0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -0xBC 0x00BC # VULGAR FRACTION ONE QUARTER -0xBD 0x00BD # VULGAR FRACTION ONE HALF -0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS -0xBF 0x00BF # INVERTED QUESTION MARK -0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE -0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE -0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE -0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS -0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE -0xC6 0x00C6 # LATIN CAPITAL LETTER AE -0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA -0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE -0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE -0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS -0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE -0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE -0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS -0xD0 0x00D0 # LATIN CAPITAL LETTER ETH (Icelandic) -0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE -0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE -0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE -0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE -0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS -0xD7 0x00D7 # MULTIPLICATION SIGN -0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE -0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE -0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE -0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX -0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE -0xDE 0x00DE # LATIN CAPITAL LETTER THORN (Icelandic) -0xDF 0x00DF # LATIN SMALL LETTER SHARP S (German) -0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE -0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE -0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX -0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE -0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS -0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE -0xE6 0x00E6 # LATIN SMALL LETTER AE -0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA -0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE -0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE -0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX -0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS -0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE -0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE -0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX -0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS -0xF0 0x00F0 # LATIN SMALL LETTER ETH (Icelandic) -0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE -0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE -0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE -0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX -0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE -0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS -0xF7 0x00F7 # DIVISION SIGN -0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE -0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE -0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE -0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX -0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS -0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE -0xFE 0x00FE # LATIN SMALL LETTER THORN (Icelandic) -0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/program/lib/encoding/ISO-8859-10.map b/program/lib/encoding/ISO-8859-10.map deleted file mode 100644 index 374a42b1a..000000000 --- a/program/lib/encoding/ISO-8859-10.map +++ /dev/null @@ -1,303 +0,0 @@ -# -# Name: ISO/IEC 8859-10:1998 to Unicode -# Unicode version: 3.0 -# Table version: 1.1 -# Table format: Format A -# Date: 1999 October 11 -# Authors: Ken Whistler <kenw@sybase.com> -# -# Copyright (c) 1999 Unicode, Inc. All Rights reserved. -# -# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -# No claims are made as to fitness for any particular purpose. No -# warranties of any kind are expressed or implied. The recipient -# agrees to determine applicability of information provided. If this -# file has been provided on optical media by Unicode, Inc., the sole -# remedy for any claim will be exchange of defective media within 90 -# days of receipt. -# -# Unicode, Inc. hereby grants the right to freely use the information -# supplied in this file in the creation of products supporting the -# Unicode Standard, and to make copies of this file in any form for -# internal or external distribution as long as this notice remains -# attached. -# -# General notes: -# -# This table contains the data the Unicode Consortium has on how -# ISO/IEC 8859-10:1998 characters map into Unicode. -# -# Format: Three tab-separated columns -# Column #1 is the ISO/IEC 8859-10 code (in hex as 0xXX) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 the Unicode name (follows a comment sign, '#') -# -# The entries are in ISO/IEC 8859-10 order. -# -# Version history -# 1.0 version new. -# 1.1 corrected mistake in mapping of 0xA4 -# -# Updated versions of this file may be found in: -# <ftp://ftp.unicode.org/Public/MAPPINGS/> -# -# Any comments or problems, contact <errata@unicode.org> -# Please note that <errata@unicode.org> is an archival address; -# notices will be checked, but do not expect an immediate response. -# -0x00 0x0000 # NULL -0x01 0x0001 # START OF HEADING -0x02 0x0002 # START OF TEXT -0x03 0x0003 # END OF TEXT -0x04 0x0004 # END OF TRANSMISSION -0x05 0x0005 # ENQUIRY -0x06 0x0006 # ACKNOWLEDGE -0x07 0x0007 # BELL -0x08 0x0008 # BACKSPACE -0x09 0x0009 # HORIZONTAL TABULATION -0x0A 0x000A # LINE FEED -0x0B 0x000B # VERTICAL TABULATION -0x0C 0x000C # FORM FEED -0x0D 0x000D # CARRIAGE RETURN -0x0E 0x000E # SHIFT OUT -0x0F 0x000F # SHIFT IN -0x10 0x0010 # DATA LINK ESCAPE -0x11 0x0011 # DEVICE CONTROL ONE -0x12 0x0012 # DEVICE CONTROL TWO -0x13 0x0013 # DEVICE CONTROL THREE -0x14 0x0014 # DEVICE CONTROL FOUR -0x15 0x0015 # NEGATIVE ACKNOWLEDGE -0x16 0x0016 # SYNCHRONOUS IDLE -0x17 0x0017 # END OF TRANSMISSION BLOCK -0x18 0x0018 # CANCEL -0x19 0x0019 # END OF MEDIUM -0x1A 0x001A # SUBSTITUTE -0x1B 0x001B # ESCAPE -0x1C 0x001C # FILE SEPARATOR -0x1D 0x001D # GROUP SEPARATOR -0x1E 0x001E # RECORD SEPARATOR -0x1F 0x001F # UNIT SEPARATOR -0x20 0x0020 # SPACE -0x21 0x0021 # EXCLAMATION MARK -0x22 0x0022 # QUOTATION MARK -0x23 0x0023 # NUMBER SIGN -0x24 0x0024 # DOLLAR SIGN -0x25 0x0025 # PERCENT SIGN -0x26 0x0026 # AMPERSAND -0x27 0x0027 # APOSTROPHE -0x28 0x0028 # LEFT PARENTHESIS -0x29 0x0029 # RIGHT PARENTHESIS -0x2A 0x002A # ASTERISK -0x2B 0x002B # PLUS SIGN -0x2C 0x002C # COMMA -0x2D 0x002D # HYPHEN-MINUS -0x2E 0x002E # FULL STOP -0x2F 0x002F # SOLIDUS -0x30 0x0030 # DIGIT ZERO -0x31 0x0031 # DIGIT ONE -0x32 0x0032 # DIGIT TWO -0x33 0x0033 # DIGIT THREE -0x34 0x0034 # DIGIT FOUR -0x35 0x0035 # DIGIT FIVE -0x36 0x0036 # DIGIT SIX -0x37 0x0037 # DIGIT SEVEN -0x38 0x0038 # DIGIT EIGHT -0x39 0x0039 # DIGIT NINE -0x3A 0x003A # COLON -0x3B 0x003B # SEMICOLON -0x3C 0x003C # LESS-THAN SIGN -0x3D 0x003D # EQUALS SIGN -0x3E 0x003E # GREATER-THAN SIGN -0x3F 0x003F # QUESTION MARK -0x40 0x0040 # COMMERCIAL AT -0x41 0x0041 # LATIN CAPITAL LETTER A -0x42 0x0042 # LATIN CAPITAL LETTER B -0x43 0x0043 # LATIN CAPITAL LETTER C -0x44 0x0044 # LATIN CAPITAL LETTER D -0x45 0x0045 # LATIN CAPITAL LETTER E -0x46 0x0046 # LATIN CAPITAL LETTER F -0x47 0x0047 # LATIN CAPITAL LETTER G -0x48 0x0048 # LATIN CAPITAL LETTER H -0x49 0x0049 # LATIN CAPITAL LETTER I -0x4A 0x004A # LATIN CAPITAL LETTER J -0x4B 0x004B # LATIN CAPITAL LETTER K -0x4C 0x004C # LATIN CAPITAL LETTER L -0x4D 0x004D # LATIN CAPITAL LETTER M -0x4E 0x004E # LATIN CAPITAL LETTER N -0x4F 0x004F # LATIN CAPITAL LETTER O -0x50 0x0050 # LATIN CAPITAL LETTER P -0x51 0x0051 # LATIN CAPITAL LETTER Q -0x52 0x0052 # LATIN CAPITAL LETTER R -0x53 0x0053 # LATIN CAPITAL LETTER S -0x54 0x0054 # LATIN CAPITAL LETTER T -0x55 0x0055 # LATIN CAPITAL LETTER U -0x56 0x0056 # LATIN CAPITAL LETTER V -0x57 0x0057 # LATIN CAPITAL LETTER W -0x58 0x0058 # LATIN CAPITAL LETTER X -0x59 0x0059 # LATIN CAPITAL LETTER Y -0x5A 0x005A # LATIN CAPITAL LETTER Z -0x5B 0x005B # LEFT SQUARE BRACKET -0x5C 0x005C # REVERSE SOLIDUS -0x5D 0x005D # RIGHT SQUARE BRACKET -0x5E 0x005E # CIRCUMFLEX ACCENT -0x5F 0x005F # LOW LINE -0x60 0x0060 # GRAVE ACCENT -0x61 0x0061 # LATIN SMALL LETTER A -0x62 0x0062 # LATIN SMALL LETTER B -0x63 0x0063 # LATIN SMALL LETTER C -0x64 0x0064 # LATIN SMALL LETTER D -0x65 0x0065 # LATIN SMALL LETTER E -0x66 0x0066 # LATIN SMALL LETTER F -0x67 0x0067 # LATIN SMALL LETTER G -0x68 0x0068 # LATIN SMALL LETTER H -0x69 0x0069 # LATIN SMALL LETTER I -0x6A 0x006A # LATIN SMALL LETTER J -0x6B 0x006B # LATIN SMALL LETTER K -0x6C 0x006C # LATIN SMALL LETTER L -0x6D 0x006D # LATIN SMALL LETTER M -0x6E 0x006E # LATIN SMALL LETTER N -0x6F 0x006F # LATIN SMALL LETTER O -0x70 0x0070 # LATIN SMALL LETTER P -0x71 0x0071 # LATIN SMALL LETTER Q -0x72 0x0072 # LATIN SMALL LETTER R -0x73 0x0073 # LATIN SMALL LETTER S -0x74 0x0074 # LATIN SMALL LETTER T -0x75 0x0075 # LATIN SMALL LETTER U -0x76 0x0076 # LATIN SMALL LETTER V -0x77 0x0077 # LATIN SMALL LETTER W -0x78 0x0078 # LATIN SMALL LETTER X -0x79 0x0079 # LATIN SMALL LETTER Y -0x7A 0x007A # LATIN SMALL LETTER Z -0x7B 0x007B # LEFT CURLY BRACKET -0x7C 0x007C # VERTICAL LINE -0x7D 0x007D # RIGHT CURLY BRACKET -0x7E 0x007E # TILDE -0x7F 0x007F # DELETE -0x80 0x0080 # <control> -0x81 0x0081 # <control> -0x82 0x0082 # <control> -0x83 0x0083 # <control> -0x84 0x0084 # <control> -0x85 0x0085 # <control> -0x86 0x0086 # <control> -0x87 0x0087 # <control> -0x88 0x0088 # <control> -0x89 0x0089 # <control> -0x8A 0x008A # <control> -0x8B 0x008B # <control> -0x8C 0x008C # <control> -0x8D 0x008D # <control> -0x8E 0x008E # <control> -0x8F 0x008F # <control> -0x90 0x0090 # <control> -0x91 0x0091 # <control> -0x92 0x0092 # <control> -0x93 0x0093 # <control> -0x94 0x0094 # <control> -0x95 0x0095 # <control> -0x96 0x0096 # <control> -0x97 0x0097 # <control> -0x98 0x0098 # <control> -0x99 0x0099 # <control> -0x9A 0x009A # <control> -0x9B 0x009B # <control> -0x9C 0x009C # <control> -0x9D 0x009D # <control> -0x9E 0x009E # <control> -0x9F 0x009F # <control> -0xA0 0x00A0 # NO-BREAK SPACE -0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK -0xA2 0x0112 # LATIN CAPITAL LETTER E WITH MACRON -0xA3 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA -0xA4 0x012A # LATIN CAPITAL LETTER I WITH MACRON -0xA5 0x0128 # LATIN CAPITAL LETTER I WITH TILDE -0xA6 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA -0xA7 0x00A7 # SECTION SIGN -0xA8 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA -0xA9 0x0110 # LATIN CAPITAL LETTER D WITH STROKE -0xAA 0x0160 # LATIN CAPITAL LETTER S WITH CARON -0xAB 0x0166 # LATIN CAPITAL LETTER T WITH STROKE -0xAC 0x017D # LATIN CAPITAL LETTER Z WITH CARON -0xAD 0x00AD # SOFT HYPHEN -0xAE 0x016A # LATIN CAPITAL LETTER U WITH MACRON -0xAF 0x014A # LATIN CAPITAL LETTER ENG -0xB0 0x00B0 # DEGREE SIGN -0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK -0xB2 0x0113 # LATIN SMALL LETTER E WITH MACRON -0xB3 0x0123 # LATIN SMALL LETTER G WITH CEDILLA -0xB4 0x012B # LATIN SMALL LETTER I WITH MACRON -0xB5 0x0129 # LATIN SMALL LETTER I WITH TILDE -0xB6 0x0137 # LATIN SMALL LETTER K WITH CEDILLA -0xB7 0x00B7 # MIDDLE DOT -0xB8 0x013C # LATIN SMALL LETTER L WITH CEDILLA -0xB9 0x0111 # LATIN SMALL LETTER D WITH STROKE -0xBA 0x0161 # LATIN SMALL LETTER S WITH CARON -0xBB 0x0167 # LATIN SMALL LETTER T WITH STROKE -0xBC 0x017E # LATIN SMALL LETTER Z WITH CARON -0xBD 0x2015 # HORIZONTAL BAR -0xBE 0x016B # LATIN SMALL LETTER U WITH MACRON -0xBF 0x014B # LATIN SMALL LETTER ENG -0xC0 0x0100 # LATIN CAPITAL LETTER A WITH MACRON -0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE -0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE -0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS -0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE -0xC6 0x00C6 # LATIN CAPITAL LETTER AE -0xC7 0x012E # LATIN CAPITAL LETTER I WITH OGONEK -0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON -0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE -0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK -0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS -0xCC 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE -0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE -0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS -0xD0 0x00D0 # LATIN CAPITAL LETTER ETH (Icelandic) -0xD1 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA -0xD2 0x014C # LATIN CAPITAL LETTER O WITH MACRON -0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE -0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE -0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS -0xD7 0x0168 # LATIN CAPITAL LETTER U WITH TILDE -0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE -0xD9 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK -0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE -0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX -0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE -0xDE 0x00DE # LATIN CAPITAL LETTER THORN (Icelandic) -0xDF 0x00DF # LATIN SMALL LETTER SHARP S (German) -0xE0 0x0101 # LATIN SMALL LETTER A WITH MACRON -0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE -0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX -0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE -0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS -0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE -0xE6 0x00E6 # LATIN SMALL LETTER AE -0xE7 0x012F # LATIN SMALL LETTER I WITH OGONEK -0xE8 0x010D # LATIN SMALL LETTER C WITH CARON -0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE -0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK -0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS -0xEC 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE -0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE -0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX -0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS -0xF0 0x00F0 # LATIN SMALL LETTER ETH (Icelandic) -0xF1 0x0146 # LATIN SMALL LETTER N WITH CEDILLA -0xF2 0x014D # LATIN SMALL LETTER O WITH MACRON -0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE -0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX -0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE -0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS -0xF7 0x0169 # LATIN SMALL LETTER U WITH TILDE -0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE -0xF9 0x0173 # LATIN SMALL LETTER U WITH OGONEK -0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE -0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX -0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS -0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE -0xFE 0x00FE # LATIN SMALL LETTER THORN (Icelandic) -0xFF 0x0138 # LATIN SMALL LETTER KRA diff --git a/program/lib/encoding/ISO-8859-11.map b/program/lib/encoding/ISO-8859-11.map deleted file mode 100644 index 192bd9d7c..000000000 --- a/program/lib/encoding/ISO-8859-11.map +++ /dev/null @@ -1,297 +0,0 @@ -# -# Name: ISO/IEC 8859-11:2001 to Unicode -# Unicode version: 3.2 -# Table version: 1.0 -# Table format: Format A -# Date: 2002 October 7 -# Authors: Ken Whistler <kenw@sybase.com> -# -# Copyright (c) 2002 Unicode, Inc. All Rights reserved. -# -# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -# No claims are made as to fitness for any particular purpose. No -# warranties of any kind are expressed or implied. The recipient -# agrees to determine applicability of information provided. If this -# file has been provided on optical media by Unicode, Inc., the sole -# remedy for any claim will be exchange of defective media within 90 -# days of receipt. -# -# Unicode, Inc. hereby grants the right to freely use the information -# supplied in this file in the creation of products supporting the -# Unicode Standard, and to make copies of this file in any form for -# internal or external distribution as long as this notice remains -# attached. -# -# General notes: -# -# This table contains the data the Unicode Consortium has on how -# ISO/IEC 8859-11:2001 characters map into Unicode. -# -# ISO/IEC 8859-11:2001 is equivalent to TIS 620-2533 (1990) with -# the addition of 0xA0 NO-BREAK SPACE. -# -# Format: Three tab-separated columns -# Column #1 is the ISO/IEC 8859-11 code (in hex as 0xXX) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 the Unicode name (follows a comment sign, '#') -# -# The entries are in ISO/IEC 8859-11 order. -# -# Version history: -# 2002 October 7 Created -# -# Updated versions of this file may be found in: -# <ftp://ftp.unicode.org/Public/MAPPINGS/> -# -# For any comments or problems, please use the Unicode -# web contact form at: -# http://www.unicode.org/unicode/reporting.html -# -0x00 0x0000 # NULL -0x01 0x0001 # START OF HEADING -0x02 0x0002 # START OF TEXT -0x03 0x0003 # END OF TEXT -0x04 0x0004 # END OF TRANSMISSION -0x05 0x0005 # ENQUIRY -0x06 0x0006 # ACKNOWLEDGE -0x07 0x0007 # BELL -0x08 0x0008 # BACKSPACE -0x09 0x0009 # HORIZONTAL TABULATION -0x0A 0x000A # LINE FEED -0x0B 0x000B # VERTICAL TABULATION -0x0C 0x000C # FORM FEED -0x0D 0x000D # CARRIAGE RETURN -0x0E 0x000E # SHIFT OUT -0x0F 0x000F # SHIFT IN -0x10 0x0010 # DATA LINK ESCAPE -0x11 0x0011 # DEVICE CONTROL ONE -0x12 0x0012 # DEVICE CONTROL TWO -0x13 0x0013 # DEVICE CONTROL THREE -0x14 0x0014 # DEVICE CONTROL FOUR -0x15 0x0015 # NEGATIVE ACKNOWLEDGE -0x16 0x0016 # SYNCHRONOUS IDLE -0x17 0x0017 # END OF TRANSMISSION BLOCK -0x18 0x0018 # CANCEL -0x19 0x0019 # END OF MEDIUM -0x1A 0x001A # SUBSTITUTE -0x1B 0x001B # ESCAPE -0x1C 0x001C # FILE SEPARATOR -0x1D 0x001D # GROUP SEPARATOR -0x1E 0x001E # RECORD SEPARATOR -0x1F 0x001F # UNIT SEPARATOR -0x20 0x0020 # SPACE -0x21 0x0021 # EXCLAMATION MARK -0x22 0x0022 # QUOTATION MARK -0x23 0x0023 # NUMBER SIGN -0x24 0x0024 # DOLLAR SIGN -0x25 0x0025 # PERCENT SIGN -0x26 0x0026 # AMPERSAND -0x27 0x0027 # APOSTROPHE -0x28 0x0028 # LEFT PARENTHESIS -0x29 0x0029 # RIGHT PARENTHESIS -0x2A 0x002A # ASTERISK -0x2B 0x002B # PLUS SIGN -0x2C 0x002C # COMMA -0x2D 0x002D # HYPHEN-MINUS -0x2E 0x002E # FULL STOP -0x2F 0x002F # SOLIDUS -0x30 0x0030 # DIGIT ZERO -0x31 0x0031 # DIGIT ONE -0x32 0x0032 # DIGIT TWO -0x33 0x0033 # DIGIT THREE -0x34 0x0034 # DIGIT FOUR -0x35 0x0035 # DIGIT FIVE -0x36 0x0036 # DIGIT SIX -0x37 0x0037 # DIGIT SEVEN -0x38 0x0038 # DIGIT EIGHT -0x39 0x0039 # DIGIT NINE -0x3A 0x003A # COLON -0x3B 0x003B # SEMICOLON -0x3C 0x003C # LESS-THAN SIGN -0x3D 0x003D # EQUALS SIGN -0x3E 0x003E # GREATER-THAN SIGN -0x3F 0x003F # QUESTION MARK -0x40 0x0040 # COMMERCIAL AT -0x41 0x0041 # LATIN CAPITAL LETTER A -0x42 0x0042 # LATIN CAPITAL LETTER B -0x43 0x0043 # LATIN CAPITAL LETTER C -0x44 0x0044 # LATIN CAPITAL LETTER D -0x45 0x0045 # LATIN CAPITAL LETTER E -0x46 0x0046 # LATIN CAPITAL LETTER F -0x47 0x0047 # LATIN CAPITAL LETTER G -0x48 0x0048 # LATIN CAPITAL LETTER H -0x49 0x0049 # LATIN CAPITAL LETTER I -0x4A 0x004A # LATIN CAPITAL LETTER J -0x4B 0x004B # LATIN CAPITAL LETTER K -0x4C 0x004C # LATIN CAPITAL LETTER L -0x4D 0x004D # LATIN CAPITAL LETTER M -0x4E 0x004E # LATIN CAPITAL LETTER N -0x4F 0x004F # LATIN CAPITAL LETTER O -0x50 0x0050 # LATIN CAPITAL LETTER P -0x51 0x0051 # LATIN CAPITAL LETTER Q -0x52 0x0052 # LATIN CAPITAL LETTER R -0x53 0x0053 # LATIN CAPITAL LETTER S -0x54 0x0054 # LATIN CAPITAL LETTER T -0x55 0x0055 # LATIN CAPITAL LETTER U -0x56 0x0056 # LATIN CAPITAL LETTER V -0x57 0x0057 # LATIN CAPITAL LETTER W -0x58 0x0058 # LATIN CAPITAL LETTER X -0x59 0x0059 # LATIN CAPITAL LETTER Y -0x5A 0x005A # LATIN CAPITAL LETTER Z -0x5B 0x005B # LEFT SQUARE BRACKET -0x5C 0x005C # REVERSE SOLIDUS -0x5D 0x005D # RIGHT SQUARE BRACKET -0x5E 0x005E # CIRCUMFLEX ACCENT -0x5F 0x005F # LOW LINE -0x60 0x0060 # GRAVE ACCENT -0x61 0x0061 # LATIN SMALL LETTER A -0x62 0x0062 # LATIN SMALL LETTER B -0x63 0x0063 # LATIN SMALL LETTER C -0x64 0x0064 # LATIN SMALL LETTER D -0x65 0x0065 # LATIN SMALL LETTER E -0x66 0x0066 # LATIN SMALL LETTER F -0x67 0x0067 # LATIN SMALL LETTER G -0x68 0x0068 # LATIN SMALL LETTER H -0x69 0x0069 # LATIN SMALL LETTER I -0x6A 0x006A # LATIN SMALL LETTER J -0x6B 0x006B # LATIN SMALL LETTER K -0x6C 0x006C # LATIN SMALL LETTER L -0x6D 0x006D # LATIN SMALL LETTER M -0x6E 0x006E # LATIN SMALL LETTER N -0x6F 0x006F # LATIN SMALL LETTER O -0x70 0x0070 # LATIN SMALL LETTER P -0x71 0x0071 # LATIN SMALL LETTER Q -0x72 0x0072 # LATIN SMALL LETTER R -0x73 0x0073 # LATIN SMALL LETTER S -0x74 0x0074 # LATIN SMALL LETTER T -0x75 0x0075 # LATIN SMALL LETTER U -0x76 0x0076 # LATIN SMALL LETTER V -0x77 0x0077 # LATIN SMALL LETTER W -0x78 0x0078 # LATIN SMALL LETTER X -0x79 0x0079 # LATIN SMALL LETTER Y -0x7A 0x007A # LATIN SMALL LETTER Z -0x7B 0x007B # LEFT CURLY BRACKET -0x7C 0x007C # VERTICAL LINE -0x7D 0x007D # RIGHT CURLY BRACKET -0x7E 0x007E # TILDE -0x7F 0x007F # DELETE -0x80 0x0080 # <control> -0x81 0x0081 # <control> -0x82 0x0082 # <control> -0x83 0x0083 # <control> -0x84 0x0084 # <control> -0x85 0x0085 # <control> -0x86 0x0086 # <control> -0x87 0x0087 # <control> -0x88 0x0088 # <control> -0x89 0x0089 # <control> -0x8A 0x008A # <control> -0x8B 0x008B # <control> -0x8C 0x008C # <control> -0x8D 0x008D # <control> -0x8E 0x008E # <control> -0x8F 0x008F # <control> -0x90 0x0090 # <control> -0x91 0x0091 # <control> -0x92 0x0092 # <control> -0x93 0x0093 # <control> -0x94 0x0094 # <control> -0x95 0x0095 # <control> -0x96 0x0096 # <control> -0x97 0x0097 # <control> -0x98 0x0098 # <control> -0x99 0x0099 # <control> -0x9A 0x009A # <control> -0x9B 0x009B # <control> -0x9C 0x009C # <control> -0x9D 0x009D # <control> -0x9E 0x009E # <control> -0x9F 0x009F # <control> -0xA0 0x00A0 # NO-BREAK SPACE -0xA1 0x0E01 # THAI CHARACTER KO KAI -0xA2 0x0E02 # THAI CHARACTER KHO KHAI -0xA3 0x0E03 # THAI CHARACTER KHO KHUAT -0xA4 0x0E04 # THAI CHARACTER KHO KHWAI -0xA5 0x0E05 # THAI CHARACTER KHO KHON -0xA6 0x0E06 # THAI CHARACTER KHO RAKHANG -0xA7 0x0E07 # THAI CHARACTER NGO NGU -0xA8 0x0E08 # THAI CHARACTER CHO CHAN -0xA9 0x0E09 # THAI CHARACTER CHO CHING -0xAA 0x0E0A # THAI CHARACTER CHO CHANG -0xAB 0x0E0B # THAI CHARACTER SO SO -0xAC 0x0E0C # THAI CHARACTER CHO CHOE -0xAD 0x0E0D # THAI CHARACTER YO YING -0xAE 0x0E0E # THAI CHARACTER DO CHADA -0xAF 0x0E0F # THAI CHARACTER TO PATAK -0xB0 0x0E10 # THAI CHARACTER THO THAN -0xB1 0x0E11 # THAI CHARACTER THO NANGMONTHO -0xB2 0x0E12 # THAI CHARACTER THO PHUTHAO -0xB3 0x0E13 # THAI CHARACTER NO NEN -0xB4 0x0E14 # THAI CHARACTER DO DEK -0xB5 0x0E15 # THAI CHARACTER TO TAO -0xB6 0x0E16 # THAI CHARACTER THO THUNG -0xB7 0x0E17 # THAI CHARACTER THO THAHAN -0xB8 0x0E18 # THAI CHARACTER THO THONG -0xB9 0x0E19 # THAI CHARACTER NO NU -0xBA 0x0E1A # THAI CHARACTER BO BAIMAI -0xBB 0x0E1B # THAI CHARACTER PO PLA -0xBC 0x0E1C # THAI CHARACTER PHO PHUNG -0xBD 0x0E1D # THAI CHARACTER FO FA -0xBE 0x0E1E # THAI CHARACTER PHO PHAN -0xBF 0x0E1F # THAI CHARACTER FO FAN -0xC0 0x0E20 # THAI CHARACTER PHO SAMPHAO -0xC1 0x0E21 # THAI CHARACTER MO MA -0xC2 0x0E22 # THAI CHARACTER YO YAK -0xC3 0x0E23 # THAI CHARACTER RO RUA -0xC4 0x0E24 # THAI CHARACTER RU -0xC5 0x0E25 # THAI CHARACTER LO LING -0xC6 0x0E26 # THAI CHARACTER LU -0xC7 0x0E27 # THAI CHARACTER WO WAEN -0xC8 0x0E28 # THAI CHARACTER SO SALA -0xC9 0x0E29 # THAI CHARACTER SO RUSI -0xCA 0x0E2A # THAI CHARACTER SO SUA -0xCB 0x0E2B # THAI CHARACTER HO HIP -0xCC 0x0E2C # THAI CHARACTER LO CHULA -0xCD 0x0E2D # THAI CHARACTER O ANG -0xCE 0x0E2E # THAI CHARACTER HO NOKHUK -0xCF 0x0E2F # THAI CHARACTER PAIYANNOI -0xD0 0x0E30 # THAI CHARACTER SARA A -0xD1 0x0E31 # THAI CHARACTER MAI HAN-AKAT -0xD2 0x0E32 # THAI CHARACTER SARA AA -0xD3 0x0E33 # THAI CHARACTER SARA AM -0xD4 0x0E34 # THAI CHARACTER SARA I -0xD5 0x0E35 # THAI CHARACTER SARA II -0xD6 0x0E36 # THAI CHARACTER SARA UE -0xD7 0x0E37 # THAI CHARACTER SARA UEE -0xD8 0x0E38 # THAI CHARACTER SARA U -0xD9 0x0E39 # THAI CHARACTER SARA UU -0xDA 0x0E3A # THAI CHARACTER PHINTHU -0xDF 0x0E3F # THAI CURRENCY SYMBOL BAHT -0xE0 0x0E40 # THAI CHARACTER SARA E -0xE1 0x0E41 # THAI CHARACTER SARA AE -0xE2 0x0E42 # THAI CHARACTER SARA O -0xE3 0x0E43 # THAI CHARACTER SARA AI MAIMUAN -0xE4 0x0E44 # THAI CHARACTER SARA AI MAIMALAI -0xE5 0x0E45 # THAI CHARACTER LAKKHANGYAO -0xE6 0x0E46 # THAI CHARACTER MAIYAMOK -0xE7 0x0E47 # THAI CHARACTER MAITAIKHU -0xE8 0x0E48 # THAI CHARACTER MAI EK -0xE9 0x0E49 # THAI CHARACTER MAI THO -0xEA 0x0E4A # THAI CHARACTER MAI TRI -0xEB 0x0E4B # THAI CHARACTER MAI CHATTAWA -0xEC 0x0E4C # THAI CHARACTER THANTHAKHAT -0xED 0x0E4D # THAI CHARACTER NIKHAHIT -0xEE 0x0E4E # THAI CHARACTER YAMAKKAN -0xEF 0x0E4F # THAI CHARACTER FONGMAN -0xF0 0x0E50 # THAI DIGIT ZERO -0xF1 0x0E51 # THAI DIGIT ONE -0xF2 0x0E52 # THAI DIGIT TWO -0xF3 0x0E53 # THAI DIGIT THREE -0xF4 0x0E54 # THAI DIGIT FOUR -0xF5 0x0E55 # THAI DIGIT FIVE -0xF6 0x0E56 # THAI DIGIT SIX -0xF7 0x0E57 # THAI DIGIT SEVEN -0xF8 0x0E58 # THAI DIGIT EIGHT -0xF9 0x0E59 # THAI DIGIT NINE -0xFA 0x0E5A # THAI CHARACTER ANGKHANKHU -0xFB 0x0E5B # THAI CHARACTER KHOMUT diff --git a/program/lib/encoding/ISO-8859-13.map b/program/lib/encoding/ISO-8859-13.map deleted file mode 100644 index cd11b53fd..000000000 --- a/program/lib/encoding/ISO-8859-13.map +++ /dev/null @@ -1,299 +0,0 @@ -# -# Name: ISO/IEC 8859-13:1998 to Unicode -# Unicode version: 3.0 -# Table version: 1.0 -# Table format: Format A -# Date: 1999 July 27 -# Authors: Ken Whistler <kenw@sybase.com> -# -# Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved. -# -# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -# No claims are made as to fitness for any particular purpose. No -# warranties of any kind are expressed or implied. The recipient -# agrees to determine applicability of information provided. If this -# file has been provided on optical media by Unicode, Inc., the sole -# remedy for any claim will be exchange of defective media within 90 -# days of receipt. -# -# Unicode, Inc. hereby grants the right to freely use the information -# supplied in this file in the creation of products supporting the -# Unicode Standard, and to make copies of this file in any form for -# internal or external distribution as long as this notice remains -# attached. -# -# General notes: -# -# This table contains the data the Unicode Consortium has on how -# ISO/IEC 8859-13:1998 characters map into Unicode. -# -# Format: Three tab-separated columns -# Column #1 is the ISO/IEC 8859-13 code (in hex as 0xXX) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 the Unicode name (follows a comment sign, '#') -# -# The entries are in ISO/IEC 8859-13 order. -# -# Updated versions of this file may be found in: -# <ftp://ftp.unicode.org/Public/MAPPINGS/> -# -# Any comments or problems, contact <errata@unicode.org> -# Please note that <errata@unicode.org> is an archival address; -# notices will be checked, but do not expect an immediate response. -# -0x00 0x0000 # NULL -0x01 0x0001 # START OF HEADING -0x02 0x0002 # START OF TEXT -0x03 0x0003 # END OF TEXT -0x04 0x0004 # END OF TRANSMISSION -0x05 0x0005 # ENQUIRY -0x06 0x0006 # ACKNOWLEDGE -0x07 0x0007 # BELL -0x08 0x0008 # BACKSPACE -0x09 0x0009 # HORIZONTAL TABULATION -0x0A 0x000A # LINE FEED -0x0B 0x000B # VERTICAL TABULATION -0x0C 0x000C # FORM FEED -0x0D 0x000D # CARRIAGE RETURN -0x0E 0x000E # SHIFT OUT -0x0F 0x000F # SHIFT IN -0x10 0x0010 # DATA LINK ESCAPE -0x11 0x0011 # DEVICE CONTROL ONE -0x12 0x0012 # DEVICE CONTROL TWO -0x13 0x0013 # DEVICE CONTROL THREE -0x14 0x0014 # DEVICE CONTROL FOUR -0x15 0x0015 # NEGATIVE ACKNOWLEDGE -0x16 0x0016 # SYNCHRONOUS IDLE -0x17 0x0017 # END OF TRANSMISSION BLOCK -0x18 0x0018 # CANCEL -0x19 0x0019 # END OF MEDIUM -0x1A 0x001A # SUBSTITUTE -0x1B 0x001B # ESCAPE -0x1C 0x001C # FILE SEPARATOR -0x1D 0x001D # GROUP SEPARATOR -0x1E 0x001E # RECORD SEPARATOR -0x1F 0x001F # UNIT SEPARATOR -0x20 0x0020 # SPACE -0x21 0x0021 # EXCLAMATION MARK -0x22 0x0022 # QUOTATION MARK -0x23 0x0023 # NUMBER SIGN -0x24 0x0024 # DOLLAR SIGN -0x25 0x0025 # PERCENT SIGN -0x26 0x0026 # AMPERSAND -0x27 0x0027 # APOSTROPHE -0x28 0x0028 # LEFT PARENTHESIS -0x29 0x0029 # RIGHT PARENTHESIS -0x2A 0x002A # ASTERISK -0x2B 0x002B # PLUS SIGN -0x2C 0x002C # COMMA -0x2D 0x002D # HYPHEN-MINUS -0x2E 0x002E # FULL STOP -0x2F 0x002F # SOLIDUS -0x30 0x0030 # DIGIT ZERO -0x31 0x0031 # DIGIT ONE -0x32 0x0032 # DIGIT TWO -0x33 0x0033 # DIGIT THREE -0x34 0x0034 # DIGIT FOUR -0x35 0x0035 # DIGIT FIVE -0x36 0x0036 # DIGIT SIX -0x37 0x0037 # DIGIT SEVEN -0x38 0x0038 # DIGIT EIGHT -0x39 0x0039 # DIGIT NINE -0x3A 0x003A # COLON -0x3B 0x003B # SEMICOLON -0x3C 0x003C # LESS-THAN SIGN -0x3D 0x003D # EQUALS SIGN -0x3E 0x003E # GREATER-THAN SIGN -0x3F 0x003F # QUESTION MARK -0x40 0x0040 # COMMERCIAL AT -0x41 0x0041 # LATIN CAPITAL LETTER A -0x42 0x0042 # LATIN CAPITAL LETTER B -0x43 0x0043 # LATIN CAPITAL LETTER C -0x44 0x0044 # LATIN CAPITAL LETTER D -0x45 0x0045 # LATIN CAPITAL LETTER E -0x46 0x0046 # LATIN CAPITAL LETTER F -0x47 0x0047 # LATIN CAPITAL LETTER G -0x48 0x0048 # LATIN CAPITAL LETTER H -0x49 0x0049 # LATIN CAPITAL LETTER I -0x4A 0x004A # LATIN CAPITAL LETTER J -0x4B 0x004B # LATIN CAPITAL LETTER K -0x4C 0x004C # LATIN CAPITAL LETTER L -0x4D 0x004D # LATIN CAPITAL LETTER M -0x4E 0x004E # LATIN CAPITAL LETTER N -0x4F 0x004F # LATIN CAPITAL LETTER O -0x50 0x0050 # LATIN CAPITAL LETTER P -0x51 0x0051 # LATIN CAPITAL LETTER Q -0x52 0x0052 # LATIN CAPITAL LETTER R -0x53 0x0053 # LATIN CAPITAL LETTER S -0x54 0x0054 # LATIN CAPITAL LETTER T -0x55 0x0055 # LATIN CAPITAL LETTER U -0x56 0x0056 # LATIN CAPITAL LETTER V -0x57 0x0057 # LATIN CAPITAL LETTER W -0x58 0x0058 # LATIN CAPITAL LETTER X -0x59 0x0059 # LATIN CAPITAL LETTER Y -0x5A 0x005A # LATIN CAPITAL LETTER Z -0x5B 0x005B # LEFT SQUARE BRACKET -0x5C 0x005C # REVERSE SOLIDUS -0x5D 0x005D # RIGHT SQUARE BRACKET -0x5E 0x005E # CIRCUMFLEX ACCENT -0x5F 0x005F # LOW LINE -0x60 0x0060 # GRAVE ACCENT -0x61 0x0061 # LATIN SMALL LETTER A -0x62 0x0062 # LATIN SMALL LETTER B -0x63 0x0063 # LATIN SMALL LETTER C -0x64 0x0064 # LATIN SMALL LETTER D -0x65 0x0065 # LATIN SMALL LETTER E -0x66 0x0066 # LATIN SMALL LETTER F -0x67 0x0067 # LATIN SMALL LETTER G -0x68 0x0068 # LATIN SMALL LETTER H -0x69 0x0069 # LATIN SMALL LETTER I -0x6A 0x006A # LATIN SMALL LETTER J -0x6B 0x006B # LATIN SMALL LETTER K -0x6C 0x006C # LATIN SMALL LETTER L -0x6D 0x006D # LATIN SMALL LETTER M -0x6E 0x006E # LATIN SMALL LETTER N -0x6F 0x006F # LATIN SMALL LETTER O -0x70 0x0070 # LATIN SMALL LETTER P -0x71 0x0071 # LATIN SMALL LETTER Q -0x72 0x0072 # LATIN SMALL LETTER R -0x73 0x0073 # LATIN SMALL LETTER S -0x74 0x0074 # LATIN SMALL LETTER T -0x75 0x0075 # LATIN SMALL LETTER U -0x76 0x0076 # LATIN SMALL LETTER V -0x77 0x0077 # LATIN SMALL LETTER W -0x78 0x0078 # LATIN SMALL LETTER X -0x79 0x0079 # LATIN SMALL LETTER Y -0x7A 0x007A # LATIN SMALL LETTER Z -0x7B 0x007B # LEFT CURLY BRACKET -0x7C 0x007C # VERTICAL LINE -0x7D 0x007D # RIGHT CURLY BRACKET -0x7E 0x007E # TILDE -0x7F 0x007F # DELETE -0x80 0x0080 # <control> -0x81 0x0081 # <control> -0x82 0x0082 # <control> -0x83 0x0083 # <control> -0x84 0x0084 # <control> -0x85 0x0085 # <control> -0x86 0x0086 # <control> -0x87 0x0087 # <control> -0x88 0x0088 # <control> -0x89 0x0089 # <control> -0x8A 0x008A # <control> -0x8B 0x008B # <control> -0x8C 0x008C # <control> -0x8D 0x008D # <control> -0x8E 0x008E # <control> -0x8F 0x008F # <control> -0x90 0x0090 # <control> -0x91 0x0091 # <control> -0x92 0x0092 # <control> -0x93 0x0093 # <control> -0x94 0x0094 # <control> -0x95 0x0095 # <control> -0x96 0x0096 # <control> -0x97 0x0097 # <control> -0x98 0x0098 # <control> -0x99 0x0099 # <control> -0x9A 0x009A # <control> -0x9B 0x009B # <control> -0x9C 0x009C # <control> -0x9D 0x009D # <control> -0x9E 0x009E # <control> -0x9F 0x009F # <control> -0xA0 0x00A0 # NO-BREAK SPACE -0xA1 0x201D # RIGHT DOUBLE QUOTATION MARK -0xA2 0x00A2 # CENT SIGN -0xA3 0x00A3 # POUND SIGN -0xA4 0x00A4 # CURRENCY SIGN -0xA5 0x201E # DOUBLE LOW-9 QUOTATION MARK -0xA6 0x00A6 # BROKEN BAR -0xA7 0x00A7 # SECTION SIGN -0xA8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE -0xA9 0x00A9 # COPYRIGHT SIGN -0xAA 0x0156 # LATIN CAPITAL LETTER R WITH CEDILLA -0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -0xAC 0x00AC # NOT SIGN -0xAD 0x00AD # SOFT HYPHEN -0xAE 0x00AE # REGISTERED SIGN -0xAF 0x00C6 # LATIN CAPITAL LETTER AE -0xB0 0x00B0 # DEGREE SIGN -0xB1 0x00B1 # PLUS-MINUS SIGN -0xB2 0x00B2 # SUPERSCRIPT TWO -0xB3 0x00B3 # SUPERSCRIPT THREE -0xB4 0x201C # LEFT DOUBLE QUOTATION MARK -0xB5 0x00B5 # MICRO SIGN -0xB6 0x00B6 # PILCROW SIGN -0xB7 0x00B7 # MIDDLE DOT -0xB8 0x00F8 # LATIN SMALL LETTER O WITH STROKE -0xB9 0x00B9 # SUPERSCRIPT ONE -0xBA 0x0157 # LATIN SMALL LETTER R WITH CEDILLA -0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -0xBC 0x00BC # VULGAR FRACTION ONE QUARTER -0xBD 0x00BD # VULGAR FRACTION ONE HALF -0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS -0xBF 0x00E6 # LATIN SMALL LETTER AE -0xC0 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK -0xC1 0x012E # LATIN CAPITAL LETTER I WITH OGONEK -0xC2 0x0100 # LATIN CAPITAL LETTER A WITH MACRON -0xC3 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE -0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS -0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE -0xC6 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK -0xC7 0x0112 # LATIN CAPITAL LETTER E WITH MACRON -0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON -0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE -0xCA 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE -0xCB 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE -0xCC 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA -0xCD 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA -0xCE 0x012A # LATIN CAPITAL LETTER I WITH MACRON -0xCF 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA -0xD0 0x0160 # LATIN CAPITAL LETTER S WITH CARON -0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE -0xD2 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA -0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE -0xD4 0x014C # LATIN CAPITAL LETTER O WITH MACRON -0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE -0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS -0xD7 0x00D7 # MULTIPLICATION SIGN -0xD8 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK -0xD9 0x0141 # LATIN CAPITAL LETTER L WITH STROKE -0xDA 0x015A # LATIN CAPITAL LETTER S WITH ACUTE -0xDB 0x016A # LATIN CAPITAL LETTER U WITH MACRON -0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -0xDD 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE -0xDE 0x017D # LATIN CAPITAL LETTER Z WITH CARON -0xDF 0x00DF # LATIN SMALL LETTER SHARP S (German) -0xE0 0x0105 # LATIN SMALL LETTER A WITH OGONEK -0xE1 0x012F # LATIN SMALL LETTER I WITH OGONEK -0xE2 0x0101 # LATIN SMALL LETTER A WITH MACRON -0xE3 0x0107 # LATIN SMALL LETTER C WITH ACUTE -0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS -0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE -0xE6 0x0119 # LATIN SMALL LETTER E WITH OGONEK -0xE7 0x0113 # LATIN SMALL LETTER E WITH MACRON -0xE8 0x010D # LATIN SMALL LETTER C WITH CARON -0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE -0xEA 0x017A # LATIN SMALL LETTER Z WITH ACUTE -0xEB 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE -0xEC 0x0123 # LATIN SMALL LETTER G WITH CEDILLA -0xED 0x0137 # LATIN SMALL LETTER K WITH CEDILLA -0xEE 0x012B # LATIN SMALL LETTER I WITH MACRON -0xEF 0x013C # LATIN SMALL LETTER L WITH CEDILLA -0xF0 0x0161 # LATIN SMALL LETTER S WITH CARON -0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE -0xF2 0x0146 # LATIN SMALL LETTER N WITH CEDILLA -0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE -0xF4 0x014D # LATIN SMALL LETTER O WITH MACRON -0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE -0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS -0xF7 0x00F7 # DIVISION SIGN -0xF8 0x0173 # LATIN SMALL LETTER U WITH OGONEK -0xF9 0x0142 # LATIN SMALL LETTER L WITH STROKE -0xFA 0x015B # LATIN SMALL LETTER S WITH ACUTE -0xFB 0x016B # LATIN SMALL LETTER U WITH MACRON -0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS -0xFD 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE -0xFE 0x017E # LATIN SMALL LETTER Z WITH CARON -0xFF 0x2019 # RIGHT SINGLE QUOTATION MARK diff --git a/program/lib/encoding/ISO-8859-14.map b/program/lib/encoding/ISO-8859-14.map deleted file mode 100644 index 73e98555e..000000000 --- a/program/lib/encoding/ISO-8859-14.map +++ /dev/null @@ -1,301 +0,0 @@ -# -# Name: ISO/IEC 8859-14:1998 to Unicode -# Unicode version: 3.0 -# Table version: 1.0 -# Table format: Format A -# Date: 1999 July 27 -# Authors: Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/> -# Ken Whistler <kenw@sybase.com> -# -# Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved. -# -# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -# No claims are made as to fitness for any particular purpose. No -# warranties of any kind are expressed or implied. The recipient -# agrees to determine applicability of information provided. If this -# file has been provided on optical media by Unicode, Inc., the sole -# remedy for any claim will be exchange of defective media within 90 -# days of receipt. -# -# Unicode, Inc. hereby grants the right to freely use the information -# supplied in this file in the creation of products supporting the -# Unicode Standard, and to make copies of this file in any form for -# internal or external distribution as long as this notice remains -# attached. -# -# General notes: -# -# This table contains the data the Unicode Consortium has on how -# ISO/IEC 8859-14:1998 characters map into Unicode. -# -# Format: Three tab-separated columns -# Column #1 is the ISO/IEC 8859-14 code (in hex as 0xXX) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 the Unicode name (follows a comment sign, '#') -# -# The entries are in ISO/IEC 8859-14 order. -# -# Updated versions of this file may be found in: -# <ftp://ftp.unicode.org/Public/MAPPINGS/> -# -# Any comments or problems, contact <errata@unicode.org> -# Please note that <errata@unicode.org> is an archival address; -# notices will be checked, but do not expect an immediate response. -# -0x00 0x0000 # NULL -0x01 0x0001 # START OF HEADING -0x02 0x0002 # START OF TEXT -0x03 0x0003 # END OF TEXT -0x04 0x0004 # END OF TRANSMISSION -0x05 0x0005 # ENQUIRY -0x06 0x0006 # ACKNOWLEDGE -0x07 0x0007 # BELL -0x08 0x0008 # BACKSPACE -0x09 0x0009 # HORIZONTAL TABULATION -0x0A 0x000A # LINE FEED -0x0B 0x000B # VERTICAL TABULATION -0x0C 0x000C # FORM FEED -0x0D 0x000D # CARRIAGE RETURN -0x0E 0x000E # SHIFT OUT -0x0F 0x000F # SHIFT IN -0x10 0x0010 # DATA LINK ESCAPE -0x11 0x0011 # DEVICE CONTROL ONE -0x12 0x0012 # DEVICE CONTROL TWO -0x13 0x0013 # DEVICE CONTROL THREE -0x14 0x0014 # DEVICE CONTROL FOUR -0x15 0x0015 # NEGATIVE ACKNOWLEDGE -0x16 0x0016 # SYNCHRONOUS IDLE -0x17 0x0017 # END OF TRANSMISSION BLOCK -0x18 0x0018 # CANCEL -0x19 0x0019 # END OF MEDIUM -0x1A 0x001A # SUBSTITUTE -0x1B 0x001B # ESCAPE -0x1C 0x001C # FILE SEPARATOR -0x1D 0x001D # GROUP SEPARATOR -0x1E 0x001E # RECORD SEPARATOR -0x1F 0x001F # UNIT SEPARATOR -0x20 0x0020 # SPACE -0x21 0x0021 # EXCLAMATION MARK -0x22 0x0022 # QUOTATION MARK -0x23 0x0023 # NUMBER SIGN -0x24 0x0024 # DOLLAR SIGN -0x25 0x0025 # PERCENT SIGN -0x26 0x0026 # AMPERSAND -0x27 0x0027 # APOSTROPHE -0x28 0x0028 # LEFT PARENTHESIS -0x29 0x0029 # RIGHT PARENTHESIS -0x2A 0x002A # ASTERISK -0x2B 0x002B # PLUS SIGN -0x2C 0x002C # COMMA -0x2D 0x002D # HYPHEN-MINUS -0x2E 0x002E # FULL STOP -0x2F 0x002F # SOLIDUS -0x30 0x0030 # DIGIT ZERO -0x31 0x0031 # DIGIT ONE -0x32 0x0032 # DIGIT TWO -0x33 0x0033 # DIGIT THREE -0x34 0x0034 # DIGIT FOUR -0x35 0x0035 # DIGIT FIVE -0x36 0x0036 # DIGIT SIX -0x37 0x0037 # DIGIT SEVEN -0x38 0x0038 # DIGIT EIGHT -0x39 0x0039 # DIGIT NINE -0x3A 0x003A # COLON -0x3B 0x003B # SEMICOLON -0x3C 0x003C # LESS-THAN SIGN -0x3D 0x003D # EQUALS SIGN -0x3E 0x003E # GREATER-THAN SIGN -0x3F 0x003F # QUESTION MARK -0x40 0x0040 # COMMERCIAL AT -0x41 0x0041 # LATIN CAPITAL LETTER A -0x42 0x0042 # LATIN CAPITAL LETTER B -0x43 0x0043 # LATIN CAPITAL LETTER C -0x44 0x0044 # LATIN CAPITAL LETTER D -0x45 0x0045 # LATIN CAPITAL LETTER E -0x46 0x0046 # LATIN CAPITAL LETTER F -0x47 0x0047 # LATIN CAPITAL LETTER G -0x48 0x0048 # LATIN CAPITAL LETTER H -0x49 0x0049 # LATIN CAPITAL LETTER I -0x4A 0x004A # LATIN CAPITAL LETTER J -0x4B 0x004B # LATIN CAPITAL LETTER K -0x4C 0x004C # LATIN CAPITAL LETTER L -0x4D 0x004D # LATIN CAPITAL LETTER M -0x4E 0x004E # LATIN CAPITAL LETTER N -0x4F 0x004F # LATIN CAPITAL LETTER O -0x50 0x0050 # LATIN CAPITAL LETTER P -0x51 0x0051 # LATIN CAPITAL LETTER Q -0x52 0x0052 # LATIN CAPITAL LETTER R -0x53 0x0053 # LATIN CAPITAL LETTER S -0x54 0x0054 # LATIN CAPITAL LETTER T -0x55 0x0055 # LATIN CAPITAL LETTER U -0x56 0x0056 # LATIN CAPITAL LETTER V -0x57 0x0057 # LATIN CAPITAL LETTER W -0x58 0x0058 # LATIN CAPITAL LETTER X -0x59 0x0059 # LATIN CAPITAL LETTER Y -0x5A 0x005A # LATIN CAPITAL LETTER Z -0x5B 0x005B # LEFT SQUARE BRACKET -0x5C 0x005C # REVERSE SOLIDUS -0x5D 0x005D # RIGHT SQUARE BRACKET -0x5E 0x005E # CIRCUMFLEX ACCENT -0x5F 0x005F # LOW LINE -0x60 0x0060 # GRAVE ACCENT -0x61 0x0061 # LATIN SMALL LETTER A -0x62 0x0062 # LATIN SMALL LETTER B -0x63 0x0063 # LATIN SMALL LETTER C -0x64 0x0064 # LATIN SMALL LETTER D -0x65 0x0065 # LATIN SMALL LETTER E -0x66 0x0066 # LATIN SMALL LETTER F -0x67 0x0067 # LATIN SMALL LETTER G -0x68 0x0068 # LATIN SMALL LETTER H -0x69 0x0069 # LATIN SMALL LETTER I -0x6A 0x006A # LATIN SMALL LETTER J -0x6B 0x006B # LATIN SMALL LETTER K -0x6C 0x006C # LATIN SMALL LETTER L -0x6D 0x006D # LATIN SMALL LETTER M -0x6E 0x006E # LATIN SMALL LETTER N -0x6F 0x006F # LATIN SMALL LETTER O -0x70 0x0070 # LATIN SMALL LETTER P -0x71 0x0071 # LATIN SMALL LETTER Q -0x72 0x0072 # LATIN SMALL LETTER R -0x73 0x0073 # LATIN SMALL LETTER S -0x74 0x0074 # LATIN SMALL LETTER T -0x75 0x0075 # LATIN SMALL LETTER U -0x76 0x0076 # LATIN SMALL LETTER V -0x77 0x0077 # LATIN SMALL LETTER W -0x78 0x0078 # LATIN SMALL LETTER X -0x79 0x0079 # LATIN SMALL LETTER Y -0x7A 0x007A # LATIN SMALL LETTER Z -0x7B 0x007B # LEFT CURLY BRACKET -0x7C 0x007C # VERTICAL LINE -0x7D 0x007D # RIGHT CURLY BRACKET -0x7E 0x007E # TILDE -0x7F 0x007F # DELETE -0x80 0x0080 # <control> -0x81 0x0081 # <control> -0x82 0x0082 # <control> -0x83 0x0083 # <control> -0x84 0x0084 # <control> -0x85 0x0085 # <control> -0x86 0x0086 # <control> -0x87 0x0087 # <control> -0x88 0x0088 # <control> -0x89 0x0089 # <control> -0x8A 0x008A # <control> -0x8B 0x008B # <control> -0x8C 0x008C # <control> -0x8D 0x008D # <control> -0x8E 0x008E # <control> -0x8F 0x008F # <control> -0x90 0x0090 # <control> -0x91 0x0091 # <control> -0x92 0x0092 # <control> -0x93 0x0093 # <control> -0x94 0x0094 # <control> -0x95 0x0095 # <control> -0x96 0x0096 # <control> -0x97 0x0097 # <control> -0x98 0x0098 # <control> -0x99 0x0099 # <control> -0x9A 0x009A # <control> -0x9B 0x009B # <control> -0x9C 0x009C # <control> -0x9D 0x009D # <control> -0x9E 0x009E # <control> -0x9F 0x009F # <control> -0xA0 0x00A0 # NO-BREAK SPACE -0xA1 0x1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE -0xA2 0x1E03 # LATIN SMALL LETTER B WITH DOT ABOVE -0xA3 0x00A3 # POUND SIGN -0xA4 0x010A # LATIN CAPITAL LETTER C WITH DOT ABOVE -0xA5 0x010B # LATIN SMALL LETTER C WITH DOT ABOVE -0xA6 0x1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE -0xA7 0x00A7 # SECTION SIGN -0xA8 0x1E80 # LATIN CAPITAL LETTER W WITH GRAVE -0xA9 0x00A9 # COPYRIGHT SIGN -0xAA 0x1E82 # LATIN CAPITAL LETTER W WITH ACUTE -0xAB 0x1E0B # LATIN SMALL LETTER D WITH DOT ABOVE -0xAC 0x1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE -0xAD 0x00AD # SOFT HYPHEN -0xAE 0x00AE # REGISTERED SIGN -0xAF 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS -0xB0 0x1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE -0xB1 0x1E1F # LATIN SMALL LETTER F WITH DOT ABOVE -0xB2 0x0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE -0xB3 0x0121 # LATIN SMALL LETTER G WITH DOT ABOVE -0xB4 0x1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE -0xB5 0x1E41 # LATIN SMALL LETTER M WITH DOT ABOVE -0xB6 0x00B6 # PILCROW SIGN -0xB7 0x1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE -0xB8 0x1E81 # LATIN SMALL LETTER W WITH GRAVE -0xB9 0x1E57 # LATIN SMALL LETTER P WITH DOT ABOVE -0xBA 0x1E83 # LATIN SMALL LETTER W WITH ACUTE -0xBB 0x1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE -0xBC 0x1EF3 # LATIN SMALL LETTER Y WITH GRAVE -0xBD 0x1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS -0xBE 0x1E85 # LATIN SMALL LETTER W WITH DIAERESIS -0xBF 0x1E61 # LATIN SMALL LETTER S WITH DOT ABOVE -0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE -0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE -0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE -0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS -0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE -0xC6 0x00C6 # LATIN CAPITAL LETTER AE -0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA -0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE -0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE -0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS -0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE -0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE -0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS -0xD0 0x0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX -0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE -0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE -0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE -0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE -0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS -0xD7 0x1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE -0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE -0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE -0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE -0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX -0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE -0xDE 0x0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX -0xDF 0x00DF # LATIN SMALL LETTER SHARP S -0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE -0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE -0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX -0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE -0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS -0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE -0xE6 0x00E6 # LATIN SMALL LETTER AE -0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA -0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE -0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE -0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX -0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS -0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE -0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE -0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX -0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS -0xF0 0x0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX -0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE -0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE -0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE -0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX -0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE -0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS -0xF7 0x1E6B # LATIN SMALL LETTER T WITH DOT ABOVE -0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE -0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE -0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE -0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX -0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS -0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE -0xFE 0x0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX -0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS - diff --git a/program/lib/encoding/ISO-8859-15.map b/program/lib/encoding/ISO-8859-15.map deleted file mode 100644 index ab2f32fce..000000000 --- a/program/lib/encoding/ISO-8859-15.map +++ /dev/null @@ -1,303 +0,0 @@ -# -# Name: ISO/IEC 8859-15:1999 to Unicode -# Unicode version: 3.0 -# Table version: 1.0 -# Table format: Format A -# Date: 1999 July 27 -# Authors: Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/> -# Ken Whistler <kenw@sybase.com> -# -# Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved. -# -# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -# No claims are made as to fitness for any particular purpose. No -# warranties of any kind are expressed or implied. The recipient -# agrees to determine applicability of information provided. If this -# file has been provided on optical media by Unicode, Inc., the sole -# remedy for any claim will be exchange of defective media within 90 -# days of receipt. -# -# Unicode, Inc. hereby grants the right to freely use the information -# supplied in this file in the creation of products supporting the -# Unicode Standard, and to make copies of this file in any form for -# internal or external distribution as long as this notice remains -# attached. -# -# General notes: -# -# This table contains the data the Unicode Consortium has on how -# ISO/IEC 8859-15:1999 characters map into Unicode. -# -# Format: Three tab-separated columns -# Column #1 is the ISO/IEC 8859-15 code (in hex as 0xXX) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 the Unicode name (follows a comment sign, '#') -# -# The entries are in ISO/IEC 8859-15 order. -# -# Version history -# -# Updated versions of this file may be found in: -# <ftp://ftp.unicode.org/Public/MAPPINGS/> -# -# Any comments or problems, contact <errata@unicode.org> -# Please note that <errata@unicode.org> is an archival address; -# notices will be checked, but do not expect an immediate response. -# -0x00 0x0000 # NULL -0x01 0x0001 # START OF HEADING -0x02 0x0002 # START OF TEXT -0x03 0x0003 # END OF TEXT -0x04 0x0004 # END OF TRANSMISSION -0x05 0x0005 # ENQUIRY -0x06 0x0006 # ACKNOWLEDGE -0x07 0x0007 # BELL -0x08 0x0008 # BACKSPACE -0x09 0x0009 # HORIZONTAL TABULATION -0x0A 0x000A # LINE FEED -0x0B 0x000B # VERTICAL TABULATION -0x0C 0x000C # FORM FEED -0x0D 0x000D # CARRIAGE RETURN -0x0E 0x000E # SHIFT OUT -0x0F 0x000F # SHIFT IN -0x10 0x0010 # DATA LINK ESCAPE -0x11 0x0011 # DEVICE CONTROL ONE -0x12 0x0012 # DEVICE CONTROL TWO -0x13 0x0013 # DEVICE CONTROL THREE -0x14 0x0014 # DEVICE CONTROL FOUR -0x15 0x0015 # NEGATIVE ACKNOWLEDGE -0x16 0x0016 # SYNCHRONOUS IDLE -0x17 0x0017 # END OF TRANSMISSION BLOCK -0x18 0x0018 # CANCEL -0x19 0x0019 # END OF MEDIUM -0x1A 0x001A # SUBSTITUTE -0x1B 0x001B # ESCAPE -0x1C 0x001C # FILE SEPARATOR -0x1D 0x001D # GROUP SEPARATOR -0x1E 0x001E # RECORD SEPARATOR -0x1F 0x001F # UNIT SEPARATOR -0x20 0x0020 # SPACE -0x21 0x0021 # EXCLAMATION MARK -0x22 0x0022 # QUOTATION MARK -0x23 0x0023 # NUMBER SIGN -0x24 0x0024 # DOLLAR SIGN -0x25 0x0025 # PERCENT SIGN -0x26 0x0026 # AMPERSAND -0x27 0x0027 # APOSTROPHE -0x28 0x0028 # LEFT PARENTHESIS -0x29 0x0029 # RIGHT PARENTHESIS -0x2A 0x002A # ASTERISK -0x2B 0x002B # PLUS SIGN -0x2C 0x002C # COMMA -0x2D 0x002D # HYPHEN-MINUS -0x2E 0x002E # FULL STOP -0x2F 0x002F # SOLIDUS -0x30 0x0030 # DIGIT ZERO -0x31 0x0031 # DIGIT ONE -0x32 0x0032 # DIGIT TWO -0x33 0x0033 # DIGIT THREE -0x34 0x0034 # DIGIT FOUR -0x35 0x0035 # DIGIT FIVE -0x36 0x0036 # DIGIT SIX -0x37 0x0037 # DIGIT SEVEN -0x38 0x0038 # DIGIT EIGHT -0x39 0x0039 # DIGIT NINE -0x3A 0x003A # COLON -0x3B 0x003B # SEMICOLON -0x3C 0x003C # LESS-THAN SIGN -0x3D 0x003D # EQUALS SIGN -0x3E 0x003E # GREATER-THAN SIGN -0x3F 0x003F # QUESTION MARK -0x40 0x0040 # COMMERCIAL AT -0x41 0x0041 # LATIN CAPITAL LETTER A -0x42 0x0042 # LATIN CAPITAL LETTER B -0x43 0x0043 # LATIN CAPITAL LETTER C -0x44 0x0044 # LATIN CAPITAL LETTER D -0x45 0x0045 # LATIN CAPITAL LETTER E -0x46 0x0046 # LATIN CAPITAL LETTER F -0x47 0x0047 # LATIN CAPITAL LETTER G -0x48 0x0048 # LATIN CAPITAL LETTER H -0x49 0x0049 # LATIN CAPITAL LETTER I -0x4A 0x004A # LATIN CAPITAL LETTER J -0x4B 0x004B # LATIN CAPITAL LETTER K -0x4C 0x004C # LATIN CAPITAL LETTER L -0x4D 0x004D # LATIN CAPITAL LETTER M -0x4E 0x004E # LATIN CAPITAL LETTER N -0x4F 0x004F # LATIN CAPITAL LETTER O -0x50 0x0050 # LATIN CAPITAL LETTER P -0x51 0x0051 # LATIN CAPITAL LETTER Q -0x52 0x0052 # LATIN CAPITAL LETTER R -0x53 0x0053 # LATIN CAPITAL LETTER S -0x54 0x0054 # LATIN CAPITAL LETTER T -0x55 0x0055 # LATIN CAPITAL LETTER U -0x56 0x0056 # LATIN CAPITAL LETTER V -0x57 0x0057 # LATIN CAPITAL LETTER W -0x58 0x0058 # LATIN CAPITAL LETTER X -0x59 0x0059 # LATIN CAPITAL LETTER Y -0x5A 0x005A # LATIN CAPITAL LETTER Z -0x5B 0x005B # LEFT SQUARE BRACKET -0x5C 0x005C # REVERSE SOLIDUS -0x5D 0x005D # RIGHT SQUARE BRACKET -0x5E 0x005E # CIRCUMFLEX ACCENT -0x5F 0x005F # LOW LINE -0x60 0x0060 # GRAVE ACCENT -0x61 0x0061 # LATIN SMALL LETTER A -0x62 0x0062 # LATIN SMALL LETTER B -0x63 0x0063 # LATIN SMALL LETTER C -0x64 0x0064 # LATIN SMALL LETTER D -0x65 0x0065 # LATIN SMALL LETTER E -0x66 0x0066 # LATIN SMALL LETTER F -0x67 0x0067 # LATIN SMALL LETTER G -0x68 0x0068 # LATIN SMALL LETTER H -0x69 0x0069 # LATIN SMALL LETTER I -0x6A 0x006A # LATIN SMALL LETTER J -0x6B 0x006B # LATIN SMALL LETTER K -0x6C 0x006C # LATIN SMALL LETTER L -0x6D 0x006D # LATIN SMALL LETTER M -0x6E 0x006E # LATIN SMALL LETTER N -0x6F 0x006F # LATIN SMALL LETTER O -0x70 0x0070 # LATIN SMALL LETTER P -0x71 0x0071 # LATIN SMALL LETTER Q -0x72 0x0072 # LATIN SMALL LETTER R -0x73 0x0073 # LATIN SMALL LETTER S -0x74 0x0074 # LATIN SMALL LETTER T -0x75 0x0075 # LATIN SMALL LETTER U -0x76 0x0076 # LATIN SMALL LETTER V -0x77 0x0077 # LATIN SMALL LETTER W -0x78 0x0078 # LATIN SMALL LETTER X -0x79 0x0079 # LATIN SMALL LETTER Y -0x7A 0x007A # LATIN SMALL LETTER Z -0x7B 0x007B # LEFT CURLY BRACKET -0x7C 0x007C # VERTICAL LINE -0x7D 0x007D # RIGHT CURLY BRACKET -0x7E 0x007E # TILDE -0x7F 0x007F # DELETE -0x80 0x0080 # <control> -0x81 0x0081 # <control> -0x82 0x0082 # <control> -0x83 0x0083 # <control> -0x84 0x0084 # <control> -0x85 0x0085 # <control> -0x86 0x0086 # <control> -0x87 0x0087 # <control> -0x88 0x0088 # <control> -0x89 0x0089 # <control> -0x8A 0x008A # <control> -0x8B 0x008B # <control> -0x8C 0x008C # <control> -0x8D 0x008D # <control> -0x8E 0x008E # <control> -0x8F 0x008F # <control> -0x90 0x0090 # <control> -0x91 0x0091 # <control> -0x92 0x0092 # <control> -0x93 0x0093 # <control> -0x94 0x0094 # <control> -0x95 0x0095 # <control> -0x96 0x0096 # <control> -0x97 0x0097 # <control> -0x98 0x0098 # <control> -0x99 0x0099 # <control> -0x9A 0x009A # <control> -0x9B 0x009B # <control> -0x9C 0x009C # <control> -0x9D 0x009D # <control> -0x9E 0x009E # <control> -0x9F 0x009F # <control> -0xA0 0x00A0 # NO-BREAK SPACE -0xA1 0x00A1 # INVERTED EXCLAMATION MARK -0xA2 0x00A2 # CENT SIGN -0xA3 0x00A3 # POUND SIGN -0xA4 0x20AC # EURO SIGN -0xA5 0x00A5 # YEN SIGN -0xA6 0x0160 # LATIN CAPITAL LETTER S WITH CARON -0xA7 0x00A7 # SECTION SIGN -0xA8 0x0161 # LATIN SMALL LETTER S WITH CARON -0xA9 0x00A9 # COPYRIGHT SIGN -0xAA 0x00AA # FEMININE ORDINAL INDICATOR -0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -0xAC 0x00AC # NOT SIGN -0xAD 0x00AD # SOFT HYPHEN -0xAE 0x00AE # REGISTERED SIGN -0xAF 0x00AF # MACRON -0xB0 0x00B0 # DEGREE SIGN -0xB1 0x00B1 # PLUS-MINUS SIGN -0xB2 0x00B2 # SUPERSCRIPT TWO -0xB3 0x00B3 # SUPERSCRIPT THREE -0xB4 0x017D # LATIN CAPITAL LETTER Z WITH CARON -0xB5 0x00B5 # MICRO SIGN -0xB6 0x00B6 # PILCROW SIGN -0xB7 0x00B7 # MIDDLE DOT -0xB8 0x017E # LATIN SMALL LETTER Z WITH CARON -0xB9 0x00B9 # SUPERSCRIPT ONE -0xBA 0x00BA # MASCULINE ORDINAL INDICATOR -0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -0xBC 0x0152 # LATIN CAPITAL LIGATURE OE -0xBD 0x0153 # LATIN SMALL LIGATURE OE -0xBE 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS -0xBF 0x00BF # INVERTED QUESTION MARK -0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE -0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE -0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE -0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS -0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE -0xC6 0x00C6 # LATIN CAPITAL LETTER AE -0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA -0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE -0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE -0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS -0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE -0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE -0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS -0xD0 0x00D0 # LATIN CAPITAL LETTER ETH -0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE -0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE -0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE -0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE -0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS -0xD7 0x00D7 # MULTIPLICATION SIGN -0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE -0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE -0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE -0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX -0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE -0xDE 0x00DE # LATIN CAPITAL LETTER THORN -0xDF 0x00DF # LATIN SMALL LETTER SHARP S -0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE -0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE -0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX -0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE -0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS -0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE -0xE6 0x00E6 # LATIN SMALL LETTER AE -0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA -0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE -0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE -0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX -0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS -0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE -0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE -0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX -0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS -0xF0 0x00F0 # LATIN SMALL LETTER ETH -0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE -0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE -0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE -0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX -0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE -0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS -0xF7 0x00F7 # DIVISION SIGN -0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE -0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE -0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE -0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX -0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS -0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE -0xFE 0x00FE # LATIN SMALL LETTER THORN -0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS - diff --git a/program/lib/encoding/ISO-8859-16.map b/program/lib/encoding/ISO-8859-16.map deleted file mode 100644 index c0dcf0dac..000000000 --- a/program/lib/encoding/ISO-8859-16.map +++ /dev/null @@ -1,299 +0,0 @@ -# -# Name: ISO/IEC 8859-16:2001 to Unicode -# Unicode version: 3.0 -# Table version: 1.0 -# Table format: Format A -# Date: 2001 July 26 -# Authors: Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/> -# -# Copyright (c) 1999-2001 Unicode, Inc. All Rights reserved. -# -# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -# No claims are made as to fitness for any particular purpose. No -# warranties of any kind are expressed or implied. The recipient -# agrees to determine applicability of information provided. If this -# file has been provided on optical media by Unicode, Inc., the sole -# remedy for any claim will be exchange of defective media within 90 -# days of receipt. -# -# Unicode, Inc. hereby grants the right to freely use the information -# supplied in this file in the creation of products supporting the -# Unicode Standard, and to make copies of this file in any form for -# internal or external distribution as long as this notice remains -# attached. -# -# General notes: -# -# This table contains the data the Unicode Consortium has on how -# ISO/IEC 8859-16:2001 characters map into Unicode. -# -# Format: Three tab-separated columns -# Column #1 is the ISO/IEC 8859-16 code (in hex as 0xXX) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 the Unicode name (follows a comment sign, '#') -# -# The entries are in ISO/IEC 8859-16 order. -# -# Updated versions of this file may be found in: -# <ftp://ftp.unicode.org/Public/MAPPINGS/> -# -# Any comments or problems, contact <errata@unicode.org> -# Please note that <errata@unicode.org> is an archival address; -# notices will be checked, but do not expect an immediate response. -# -0x00 0x0000 # NULL -0x01 0x0001 # START OF HEADING -0x02 0x0002 # START OF TEXT -0x03 0x0003 # END OF TEXT -0x04 0x0004 # END OF TRANSMISSION -0x05 0x0005 # ENQUIRY -0x06 0x0006 # ACKNOWLEDGE -0x07 0x0007 # BELL -0x08 0x0008 # BACKSPACE -0x09 0x0009 # HORIZONTAL TABULATION -0x0A 0x000A # LINE FEED -0x0B 0x000B # VERTICAL TABULATION -0x0C 0x000C # FORM FEED -0x0D 0x000D # CARRIAGE RETURN -0x0E 0x000E # SHIFT OUT -0x0F 0x000F # SHIFT IN -0x10 0x0010 # DATA LINK ESCAPE -0x11 0x0011 # DEVICE CONTROL ONE -0x12 0x0012 # DEVICE CONTROL TWO -0x13 0x0013 # DEVICE CONTROL THREE -0x14 0x0014 # DEVICE CONTROL FOUR -0x15 0x0015 # NEGATIVE ACKNOWLEDGE -0x16 0x0016 # SYNCHRONOUS IDLE -0x17 0x0017 # END OF TRANSMISSION BLOCK -0x18 0x0018 # CANCEL -0x19 0x0019 # END OF MEDIUM -0x1A 0x001A # SUBSTITUTE -0x1B 0x001B # ESCAPE -0x1C 0x001C # FILE SEPARATOR -0x1D 0x001D # GROUP SEPARATOR -0x1E 0x001E # RECORD SEPARATOR -0x1F 0x001F # UNIT SEPARATOR -0x20 0x0020 # SPACE -0x21 0x0021 # EXCLAMATION MARK -0x22 0x0022 # QUOTATION MARK -0x23 0x0023 # NUMBER SIGN -0x24 0x0024 # DOLLAR SIGN -0x25 0x0025 # PERCENT SIGN -0x26 0x0026 # AMPERSAND -0x27 0x0027 # APOSTROPHE -0x28 0x0028 # LEFT PARENTHESIS -0x29 0x0029 # RIGHT PARENTHESIS -0x2A 0x002A # ASTERISK -0x2B 0x002B # PLUS SIGN -0x2C 0x002C # COMMA -0x2D 0x002D # HYPHEN-MINUS -0x2E 0x002E # FULL STOP -0x2F 0x002F # SOLIDUS -0x30 0x0030 # DIGIT ZERO -0x31 0x0031 # DIGIT ONE -0x32 0x0032 # DIGIT TWO -0x33 0x0033 # DIGIT THREE -0x34 0x0034 # DIGIT FOUR -0x35 0x0035 # DIGIT FIVE -0x36 0x0036 # DIGIT SIX -0x37 0x0037 # DIGIT SEVEN -0x38 0x0038 # DIGIT EIGHT -0x39 0x0039 # DIGIT NINE -0x3A 0x003A # COLON -0x3B 0x003B # SEMICOLON -0x3C 0x003C # LESS-THAN SIGN -0x3D 0x003D # EQUALS SIGN -0x3E 0x003E # GREATER-THAN SIGN -0x3F 0x003F # QUESTION MARK -0x40 0x0040 # COMMERCIAL AT -0x41 0x0041 # LATIN CAPITAL LETTER A -0x42 0x0042 # LATIN CAPITAL LETTER B -0x43 0x0043 # LATIN CAPITAL LETTER C -0x44 0x0044 # LATIN CAPITAL LETTER D -0x45 0x0045 # LATIN CAPITAL LETTER E -0x46 0x0046 # LATIN CAPITAL LETTER F -0x47 0x0047 # LATIN CAPITAL LETTER G -0x48 0x0048 # LATIN CAPITAL LETTER H -0x49 0x0049 # LATIN CAPITAL LETTER I -0x4A 0x004A # LATIN CAPITAL LETTER J -0x4B 0x004B # LATIN CAPITAL LETTER K -0x4C 0x004C # LATIN CAPITAL LETTER L -0x4D 0x004D # LATIN CAPITAL LETTER M -0x4E 0x004E # LATIN CAPITAL LETTER N -0x4F 0x004F # LATIN CAPITAL LETTER O -0x50 0x0050 # LATIN CAPITAL LETTER P -0x51 0x0051 # LATIN CAPITAL LETTER Q -0x52 0x0052 # LATIN CAPITAL LETTER R -0x53 0x0053 # LATIN CAPITAL LETTER S -0x54 0x0054 # LATIN CAPITAL LETTER T -0x55 0x0055 # LATIN CAPITAL LETTER U -0x56 0x0056 # LATIN CAPITAL LETTER V -0x57 0x0057 # LATIN CAPITAL LETTER W -0x58 0x0058 # LATIN CAPITAL LETTER X -0x59 0x0059 # LATIN CAPITAL LETTER Y -0x5A 0x005A # LATIN CAPITAL LETTER Z -0x5B 0x005B # LEFT SQUARE BRACKET -0x5C 0x005C # REVERSE SOLIDUS -0x5D 0x005D # RIGHT SQUARE BRACKET -0x5E 0x005E # CIRCUMFLEX ACCENT -0x5F 0x005F # LOW LINE -0x60 0x0060 # GRAVE ACCENT -0x61 0x0061 # LATIN SMALL LETTER A -0x62 0x0062 # LATIN SMALL LETTER B -0x63 0x0063 # LATIN SMALL LETTER C -0x64 0x0064 # LATIN SMALL LETTER D -0x65 0x0065 # LATIN SMALL LETTER E -0x66 0x0066 # LATIN SMALL LETTER F -0x67 0x0067 # LATIN SMALL LETTER G -0x68 0x0068 # LATIN SMALL LETTER H -0x69 0x0069 # LATIN SMALL LETTER I -0x6A 0x006A # LATIN SMALL LETTER J -0x6B 0x006B # LATIN SMALL LETTER K -0x6C 0x006C # LATIN SMALL LETTER L -0x6D 0x006D # LATIN SMALL LETTER M -0x6E 0x006E # LATIN SMALL LETTER N -0x6F 0x006F # LATIN SMALL LETTER O -0x70 0x0070 # LATIN SMALL LETTER P -0x71 0x0071 # LATIN SMALL LETTER Q -0x72 0x0072 # LATIN SMALL LETTER R -0x73 0x0073 # LATIN SMALL LETTER S -0x74 0x0074 # LATIN SMALL LETTER T -0x75 0x0075 # LATIN SMALL LETTER U -0x76 0x0076 # LATIN SMALL LETTER V -0x77 0x0077 # LATIN SMALL LETTER W -0x78 0x0078 # LATIN SMALL LETTER X -0x79 0x0079 # LATIN SMALL LETTER Y -0x7A 0x007A # LATIN SMALL LETTER Z -0x7B 0x007B # LEFT CURLY BRACKET -0x7C 0x007C # VERTICAL LINE -0x7D 0x007D # RIGHT CURLY BRACKET -0x7E 0x007E # TILDE -0x7F 0x007F # DELETE -0x80 0x0080 # <control> -0x81 0x0081 # <control> -0x82 0x0082 # <control> -0x83 0x0083 # <control> -0x84 0x0084 # <control> -0x85 0x0085 # <control> -0x86 0x0086 # <control> -0x87 0x0087 # <control> -0x88 0x0088 # <control> -0x89 0x0089 # <control> -0x8A 0x008A # <control> -0x8B 0x008B # <control> -0x8C 0x008C # <control> -0x8D 0x008D # <control> -0x8E 0x008E # <control> -0x8F 0x008F # <control> -0x90 0x0090 # <control> -0x91 0x0091 # <control> -0x92 0x0092 # <control> -0x93 0x0093 # <control> -0x94 0x0094 # <control> -0x95 0x0095 # <control> -0x96 0x0096 # <control> -0x97 0x0097 # <control> -0x98 0x0098 # <control> -0x99 0x0099 # <control> -0x9A 0x009A # <control> -0x9B 0x009B # <control> -0x9C 0x009C # <control> -0x9D 0x009D # <control> -0x9E 0x009E # <control> -0x9F 0x009F # <control> -0xA0 0x00A0 # NO-BREAK SPACE -0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK -0xA2 0x0105 # LATIN SMALL LETTER A WITH OGONEK -0xA3 0x0141 # LATIN CAPITAL LETTER L WITH STROKE -0xA4 0x20AC # EURO SIGN -0xA5 0x201E # DOUBLE LOW-9 QUOTATION MARK -0xA6 0x0160 # LATIN CAPITAL LETTER S WITH CARON -0xA7 0x00A7 # SECTION SIGN -0xA8 0x0161 # LATIN SMALL LETTER S WITH CARON -0xA9 0x00A9 # COPYRIGHT SIGN -0xAA 0x0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW -0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -0xAC 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE -0xAD 0x00AD # SOFT HYPHEN -0xAE 0x017A # LATIN SMALL LETTER Z WITH ACUTE -0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE -0xB0 0x00B0 # DEGREE SIGN -0xB1 0x00B1 # PLUS-MINUS SIGN -0xB2 0x010C # LATIN CAPITAL LETTER C WITH CARON -0xB3 0x0142 # LATIN SMALL LETTER L WITH STROKE -0xB4 0x017D # LATIN CAPITAL LETTER Z WITH CARON -0xB5 0x201D # RIGHT DOUBLE QUOTATION MARK -0xB6 0x00B6 # PILCROW SIGN -0xB7 0x00B7 # MIDDLE DOT -0xB8 0x017E # LATIN SMALL LETTER Z WITH CARON -0xB9 0x010D # LATIN SMALL LETTER C WITH CARON -0xBA 0x0219 # LATIN SMALL LETTER S WITH COMMA BELOW -0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -0xBC 0x0152 # LATIN CAPITAL LIGATURE OE -0xBD 0x0153 # LATIN SMALL LIGATURE OE -0xBE 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS -0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE -0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE -0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE -0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -0xC3 0x0102 # LATIN CAPITAL LETTER A WITH BREVE -0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS -0xC5 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE -0xC6 0x00C6 # LATIN CAPITAL LETTER AE -0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA -0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE -0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE -0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS -0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE -0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE -0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS -0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE -0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE -0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE -0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE -0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -0xD5 0x0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS -0xD7 0x015A # LATIN CAPITAL LETTER S WITH ACUTE -0xD8 0x0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE -0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE -0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX -0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -0xDD 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK -0xDE 0x021A # LATIN CAPITAL LETTER T WITH COMMA BELOW -0xDF 0x00DF # LATIN SMALL LETTER SHARP S -0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE -0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE -0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX -0xE3 0x0103 # LATIN SMALL LETTER A WITH BREVE -0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS -0xE5 0x0107 # LATIN SMALL LETTER C WITH ACUTE -0xE6 0x00E6 # LATIN SMALL LETTER AE -0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA -0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE -0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE -0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX -0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS -0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE -0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE -0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX -0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS -0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE -0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE -0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE -0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE -0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX -0xF5 0x0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE -0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS -0xF7 0x015B # LATIN SMALL LETTER S WITH ACUTE -0xF8 0x0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE -0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE -0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX -0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS -0xFD 0x0119 # LATIN SMALL LETTER E WITH OGONEK -0xFE 0x021B # LATIN SMALL LETTER T WITH COMMA BELOW -0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/program/lib/encoding/ISO-8859-2.map b/program/lib/encoding/ISO-8859-2.map deleted file mode 100644 index e45df25eb..000000000 --- a/program/lib/encoding/ISO-8859-2.map +++ /dev/null @@ -1,303 +0,0 @@ -# -# Name: ISO 8859-2:1999 to Unicode -# Unicode version: 3.0 -# Table version: 1.0 -# Table format: Format A -# Date: 1999 July 27 -# Authors: Ken Whistler <kenw@sybase.com> -# -# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. -# -# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -# No claims are made as to fitness for any particular purpose. No -# warranties of any kind are expressed or implied. The recipient -# agrees to determine applicability of information provided. If this -# file has been provided on optical media by Unicode, Inc., the sole -# remedy for any claim will be exchange of defective media within 90 -# days of receipt. -# -# Unicode, Inc. hereby grants the right to freely use the information -# supplied in this file in the creation of products supporting the -# Unicode Standard, and to make copies of this file in any form for -# internal or external distribution as long as this notice remains -# attached. -# -# General notes: -# -# This table contains the data the Unicode Consortium has on how -# ISO/IEC 8859-2:1999 characters map into Unicode. -# -# Format: Three tab-separated columns -# Column #1 is the ISO/IEC 8859-2 code (in hex as 0xXX) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 the Unicode name (follows a comment sign, '#') -# -# The entries are in ISO/IEC 8859-2 order. -# -# Version history -# 1.0 version updates 0.1 version by adding mappings for all -# control characters. -# -# Updated versions of this file may be found in: -# <ftp://ftp.unicode.org/Public/MAPPINGS/> -# -# Any comments or problems, contact <errata@unicode.org> -# Please note that <errata@unicode.org> is an archival address; -# notices will be checked, but do not expect an immediate response. -# -0x00 0x0000 # NULL -0x01 0x0001 # START OF HEADING -0x02 0x0002 # START OF TEXT -0x03 0x0003 # END OF TEXT -0x04 0x0004 # END OF TRANSMISSION -0x05 0x0005 # ENQUIRY -0x06 0x0006 # ACKNOWLEDGE -0x07 0x0007 # BELL -0x08 0x0008 # BACKSPACE -0x09 0x0009 # HORIZONTAL TABULATION -0x0A 0x000A # LINE FEED -0x0B 0x000B # VERTICAL TABULATION -0x0C 0x000C # FORM FEED -0x0D 0x000D # CARRIAGE RETURN -0x0E 0x000E # SHIFT OUT -0x0F 0x000F # SHIFT IN -0x10 0x0010 # DATA LINK ESCAPE -0x11 0x0011 # DEVICE CONTROL ONE -0x12 0x0012 # DEVICE CONTROL TWO -0x13 0x0013 # DEVICE CONTROL THREE -0x14 0x0014 # DEVICE CONTROL FOUR -0x15 0x0015 # NEGATIVE ACKNOWLEDGE -0x16 0x0016 # SYNCHRONOUS IDLE -0x17 0x0017 # END OF TRANSMISSION BLOCK -0x18 0x0018 # CANCEL -0x19 0x0019 # END OF MEDIUM -0x1A 0x001A # SUBSTITUTE -0x1B 0x001B # ESCAPE -0x1C 0x001C # FILE SEPARATOR -0x1D 0x001D # GROUP SEPARATOR -0x1E 0x001E # RECORD SEPARATOR -0x1F 0x001F # UNIT SEPARATOR -0x20 0x0020 # SPACE -0x21 0x0021 # EXCLAMATION MARK -0x22 0x0022 # QUOTATION MARK -0x23 0x0023 # NUMBER SIGN -0x24 0x0024 # DOLLAR SIGN -0x25 0x0025 # PERCENT SIGN -0x26 0x0026 # AMPERSAND -0x27 0x0027 # APOSTROPHE -0x28 0x0028 # LEFT PARENTHESIS -0x29 0x0029 # RIGHT PARENTHESIS -0x2A 0x002A # ASTERISK -0x2B 0x002B # PLUS SIGN -0x2C 0x002C # COMMA -0x2D 0x002D # HYPHEN-MINUS -0x2E 0x002E # FULL STOP -0x2F 0x002F # SOLIDUS -0x30 0x0030 # DIGIT ZERO -0x31 0x0031 # DIGIT ONE -0x32 0x0032 # DIGIT TWO -0x33 0x0033 # DIGIT THREE -0x34 0x0034 # DIGIT FOUR -0x35 0x0035 # DIGIT FIVE -0x36 0x0036 # DIGIT SIX -0x37 0x0037 # DIGIT SEVEN -0x38 0x0038 # DIGIT EIGHT -0x39 0x0039 # DIGIT NINE -0x3A 0x003A # COLON -0x3B 0x003B # SEMICOLON -0x3C 0x003C # LESS-THAN SIGN -0x3D 0x003D # EQUALS SIGN -0x3E 0x003E # GREATER-THAN SIGN -0x3F 0x003F # QUESTION MARK -0x40 0x0040 # COMMERCIAL AT -0x41 0x0041 # LATIN CAPITAL LETTER A -0x42 0x0042 # LATIN CAPITAL LETTER B -0x43 0x0043 # LATIN CAPITAL LETTER C -0x44 0x0044 # LATIN CAPITAL LETTER D -0x45 0x0045 # LATIN CAPITAL LETTER E -0x46 0x0046 # LATIN CAPITAL LETTER F -0x47 0x0047 # LATIN CAPITAL LETTER G -0x48 0x0048 # LATIN CAPITAL LETTER H -0x49 0x0049 # LATIN CAPITAL LETTER I -0x4A 0x004A # LATIN CAPITAL LETTER J -0x4B 0x004B # LATIN CAPITAL LETTER K -0x4C 0x004C # LATIN CAPITAL LETTER L -0x4D 0x004D # LATIN CAPITAL LETTER M -0x4E 0x004E # LATIN CAPITAL LETTER N -0x4F 0x004F # LATIN CAPITAL LETTER O -0x50 0x0050 # LATIN CAPITAL LETTER P -0x51 0x0051 # LATIN CAPITAL LETTER Q -0x52 0x0052 # LATIN CAPITAL LETTER R -0x53 0x0053 # LATIN CAPITAL LETTER S -0x54 0x0054 # LATIN CAPITAL LETTER T -0x55 0x0055 # LATIN CAPITAL LETTER U -0x56 0x0056 # LATIN CAPITAL LETTER V -0x57 0x0057 # LATIN CAPITAL LETTER W -0x58 0x0058 # LATIN CAPITAL LETTER X -0x59 0x0059 # LATIN CAPITAL LETTER Y -0x5A 0x005A # LATIN CAPITAL LETTER Z -0x5B 0x005B # LEFT SQUARE BRACKET -0x5C 0x005C # REVERSE SOLIDUS -0x5D 0x005D # RIGHT SQUARE BRACKET -0x5E 0x005E # CIRCUMFLEX ACCENT -0x5F 0x005F # LOW LINE -0x60 0x0060 # GRAVE ACCENT -0x61 0x0061 # LATIN SMALL LETTER A -0x62 0x0062 # LATIN SMALL LETTER B -0x63 0x0063 # LATIN SMALL LETTER C -0x64 0x0064 # LATIN SMALL LETTER D -0x65 0x0065 # LATIN SMALL LETTER E -0x66 0x0066 # LATIN SMALL LETTER F -0x67 0x0067 # LATIN SMALL LETTER G -0x68 0x0068 # LATIN SMALL LETTER H -0x69 0x0069 # LATIN SMALL LETTER I -0x6A 0x006A # LATIN SMALL LETTER J -0x6B 0x006B # LATIN SMALL LETTER K -0x6C 0x006C # LATIN SMALL LETTER L -0x6D 0x006D # LATIN SMALL LETTER M -0x6E 0x006E # LATIN SMALL LETTER N -0x6F 0x006F # LATIN SMALL LETTER O -0x70 0x0070 # LATIN SMALL LETTER P -0x71 0x0071 # LATIN SMALL LETTER Q -0x72 0x0072 # LATIN SMALL LETTER R -0x73 0x0073 # LATIN SMALL LETTER S -0x74 0x0074 # LATIN SMALL LETTER T -0x75 0x0075 # LATIN SMALL LETTER U -0x76 0x0076 # LATIN SMALL LETTER V -0x77 0x0077 # LATIN SMALL LETTER W -0x78 0x0078 # LATIN SMALL LETTER X -0x79 0x0079 # LATIN SMALL LETTER Y -0x7A 0x007A # LATIN SMALL LETTER Z -0x7B 0x007B # LEFT CURLY BRACKET -0x7C 0x007C # VERTICAL LINE -0x7D 0x007D # RIGHT CURLY BRACKET -0x7E 0x007E # TILDE -0x7F 0x007F # DELETE -0x80 0x0080 # <control> -0x81 0x0081 # <control> -0x82 0x0082 # <control> -0x83 0x0083 # <control> -0x84 0x0084 # <control> -0x85 0x0085 # <control> -0x86 0x0086 # <control> -0x87 0x0087 # <control> -0x88 0x0088 # <control> -0x89 0x0089 # <control> -0x8A 0x008A # <control> -0x8B 0x008B # <control> -0x8C 0x008C # <control> -0x8D 0x008D # <control> -0x8E 0x008E # <control> -0x8F 0x008F # <control> -0x90 0x0090 # <control> -0x91 0x0091 # <control> -0x92 0x0092 # <control> -0x93 0x0093 # <control> -0x94 0x0094 # <control> -0x95 0x0095 # <control> -0x96 0x0096 # <control> -0x97 0x0097 # <control> -0x98 0x0098 # <control> -0x99 0x0099 # <control> -0x9A 0x009A # <control> -0x9B 0x009B # <control> -0x9C 0x009C # <control> -0x9D 0x009D # <control> -0x9E 0x009E # <control> -0x9F 0x009F # <control> -0xA0 0x00A0 # NO-BREAK SPACE -0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK -0xA2 0x02D8 # BREVE -0xA3 0x0141 # LATIN CAPITAL LETTER L WITH STROKE -0xA4 0x00A4 # CURRENCY SIGN -0xA5 0x013D # LATIN CAPITAL LETTER L WITH CARON -0xA6 0x015A # LATIN CAPITAL LETTER S WITH ACUTE -0xA7 0x00A7 # SECTION SIGN -0xA8 0x00A8 # DIAERESIS -0xA9 0x0160 # LATIN CAPITAL LETTER S WITH CARON -0xAA 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA -0xAB 0x0164 # LATIN CAPITAL LETTER T WITH CARON -0xAC 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE -0xAD 0x00AD # SOFT HYPHEN -0xAE 0x017D # LATIN CAPITAL LETTER Z WITH CARON -0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE -0xB0 0x00B0 # DEGREE SIGN -0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK -0xB2 0x02DB # OGONEK -0xB3 0x0142 # LATIN SMALL LETTER L WITH STROKE -0xB4 0x00B4 # ACUTE ACCENT -0xB5 0x013E # LATIN SMALL LETTER L WITH CARON -0xB6 0x015B # LATIN SMALL LETTER S WITH ACUTE -0xB7 0x02C7 # CARON -0xB8 0x00B8 # CEDILLA -0xB9 0x0161 # LATIN SMALL LETTER S WITH CARON -0xBA 0x015F # LATIN SMALL LETTER S WITH CEDILLA -0xBB 0x0165 # LATIN SMALL LETTER T WITH CARON -0xBC 0x017A # LATIN SMALL LETTER Z WITH ACUTE -0xBD 0x02DD # DOUBLE ACUTE ACCENT -0xBE 0x017E # LATIN SMALL LETTER Z WITH CARON -0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE -0xC0 0x0154 # LATIN CAPITAL LETTER R WITH ACUTE -0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE -0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -0xC3 0x0102 # LATIN CAPITAL LETTER A WITH BREVE -0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS -0xC5 0x0139 # LATIN CAPITAL LETTER L WITH ACUTE -0xC6 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE -0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA -0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON -0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE -0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK -0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS -0xCC 0x011A # LATIN CAPITAL LETTER E WITH CARON -0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE -0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -0xCF 0x010E # LATIN CAPITAL LETTER D WITH CARON -0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE -0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE -0xD2 0x0147 # LATIN CAPITAL LETTER N WITH CARON -0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE -0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -0xD5 0x0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS -0xD7 0x00D7 # MULTIPLICATION SIGN -0xD8 0x0158 # LATIN CAPITAL LETTER R WITH CARON -0xD9 0x016E # LATIN CAPITAL LETTER U WITH RING ABOVE -0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE -0xDB 0x0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE -0xDE 0x0162 # LATIN CAPITAL LETTER T WITH CEDILLA -0xDF 0x00DF # LATIN SMALL LETTER SHARP S -0xE0 0x0155 # LATIN SMALL LETTER R WITH ACUTE -0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE -0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX -0xE3 0x0103 # LATIN SMALL LETTER A WITH BREVE -0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS -0xE5 0x013A # LATIN SMALL LETTER L WITH ACUTE -0xE6 0x0107 # LATIN SMALL LETTER C WITH ACUTE -0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA -0xE8 0x010D # LATIN SMALL LETTER C WITH CARON -0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE -0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK -0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS -0xEC 0x011B # LATIN SMALL LETTER E WITH CARON -0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE -0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX -0xEF 0x010F # LATIN SMALL LETTER D WITH CARON -0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE -0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE -0xF2 0x0148 # LATIN SMALL LETTER N WITH CARON -0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE -0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX -0xF5 0x0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE -0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS -0xF7 0x00F7 # DIVISION SIGN -0xF8 0x0159 # LATIN SMALL LETTER R WITH CARON -0xF9 0x016F # LATIN SMALL LETTER U WITH RING ABOVE -0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE -0xFB 0x0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS -0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE -0xFE 0x0163 # LATIN SMALL LETTER T WITH CEDILLA -0xFF 0x02D9 # DOT ABOVE diff --git a/program/lib/encoding/ISO-8859-3.map b/program/lib/encoding/ISO-8859-3.map deleted file mode 100644 index 9b6ac69dd..000000000 --- a/program/lib/encoding/ISO-8859-3.map +++ /dev/null @@ -1,296 +0,0 @@ -# -# Name: ISO/IEC 8859-3:1999 to Unicode -# Unicode version: 3.0 -# Table version: 1.0 -# Table format: Format A -# Date: 1999 July 27 -# Authors: Ken Whistler <kenw@sybase.com> -# -# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. -# -# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -# No claims are made as to fitness for any particular purpose. No -# warranties of any kind are expressed or implied. The recipient -# agrees to determine applicability of information provided. If this -# file has been provided on optical media by Unicode, Inc., the sole -# remedy for any claim will be exchange of defective media within 90 -# days of receipt. -# -# Unicode, Inc. hereby grants the right to freely use the information -# supplied in this file in the creation of products supporting the -# Unicode Standard, and to make copies of this file in any form for -# internal or external distribution as long as this notice remains -# attached. -# -# General notes: -# -# This table contains the data the Unicode Consortium has on how -# ISO/IEC 8859-3:1999 characters map into Unicode. -# -# Format: Three tab-separated columns -# Column #1 is the ISO/IEC 8859-3 code (in hex as 0xXX) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 the Unicode name (follows a comment sign, '#') -# -# The entries are in ISO/IEC 8859-3 order. -# -# Version history -# 1.0 version updates 0.1 version by adding mappings for all -# control characters. -# -# Updated versions of this file may be found in: -# <ftp://ftp.unicode.org/Public/MAPPINGS/> -# -# Any comments or problems, contact <errata@unicode.org> -# Please note that <errata@unicode.org> is an archival address; -# notices will be checked, but do not expect an immediate response. -# -0x00 0x0000 # NULL -0x01 0x0001 # START OF HEADING -0x02 0x0002 # START OF TEXT -0x03 0x0003 # END OF TEXT -0x04 0x0004 # END OF TRANSMISSION -0x05 0x0005 # ENQUIRY -0x06 0x0006 # ACKNOWLEDGE -0x07 0x0007 # BELL -0x08 0x0008 # BACKSPACE -0x09 0x0009 # HORIZONTAL TABULATION -0x0A 0x000A # LINE FEED -0x0B 0x000B # VERTICAL TABULATION -0x0C 0x000C # FORM FEED -0x0D 0x000D # CARRIAGE RETURN -0x0E 0x000E # SHIFT OUT -0x0F 0x000F # SHIFT IN -0x10 0x0010 # DATA LINK ESCAPE -0x11 0x0011 # DEVICE CONTROL ONE -0x12 0x0012 # DEVICE CONTROL TWO -0x13 0x0013 # DEVICE CONTROL THREE -0x14 0x0014 # DEVICE CONTROL FOUR -0x15 0x0015 # NEGATIVE ACKNOWLEDGE -0x16 0x0016 # SYNCHRONOUS IDLE -0x17 0x0017 # END OF TRANSMISSION BLOCK -0x18 0x0018 # CANCEL -0x19 0x0019 # END OF MEDIUM -0x1A 0x001A # SUBSTITUTE -0x1B 0x001B # ESCAPE -0x1C 0x001C # FILE SEPARATOR -0x1D 0x001D # GROUP SEPARATOR -0x1E 0x001E # RECORD SEPARATOR -0x1F 0x001F # UNIT SEPARATOR -0x20 0x0020 # SPACE -0x21 0x0021 # EXCLAMATION MARK -0x22 0x0022 # QUOTATION MARK -0x23 0x0023 # NUMBER SIGN -0x24 0x0024 # DOLLAR SIGN -0x25 0x0025 # PERCENT SIGN -0x26 0x0026 # AMPERSAND -0x27 0x0027 # APOSTROPHE -0x28 0x0028 # LEFT PARENTHESIS -0x29 0x0029 # RIGHT PARENTHESIS -0x2A 0x002A # ASTERISK -0x2B 0x002B # PLUS SIGN -0x2C 0x002C # COMMA -0x2D 0x002D # HYPHEN-MINUS -0x2E 0x002E # FULL STOP -0x2F 0x002F # SOLIDUS -0x30 0x0030 # DIGIT ZERO -0x31 0x0031 # DIGIT ONE -0x32 0x0032 # DIGIT TWO -0x33 0x0033 # DIGIT THREE -0x34 0x0034 # DIGIT FOUR -0x35 0x0035 # DIGIT FIVE -0x36 0x0036 # DIGIT SIX -0x37 0x0037 # DIGIT SEVEN -0x38 0x0038 # DIGIT EIGHT -0x39 0x0039 # DIGIT NINE -0x3A 0x003A # COLON -0x3B 0x003B # SEMICOLON -0x3C 0x003C # LESS-THAN SIGN -0x3D 0x003D # EQUALS SIGN -0x3E 0x003E # GREATER-THAN SIGN -0x3F 0x003F # QUESTION MARK -0x40 0x0040 # COMMERCIAL AT -0x41 0x0041 # LATIN CAPITAL LETTER A -0x42 0x0042 # LATIN CAPITAL LETTER B -0x43 0x0043 # LATIN CAPITAL LETTER C -0x44 0x0044 # LATIN CAPITAL LETTER D -0x45 0x0045 # LATIN CAPITAL LETTER E -0x46 0x0046 # LATIN CAPITAL LETTER F -0x47 0x0047 # LATIN CAPITAL LETTER G -0x48 0x0048 # LATIN CAPITAL LETTER H -0x49 0x0049 # LATIN CAPITAL LETTER I -0x4A 0x004A # LATIN CAPITAL LETTER J -0x4B 0x004B # LATIN CAPITAL LETTER K -0x4C 0x004C # LATIN CAPITAL LETTER L -0x4D 0x004D # LATIN CAPITAL LETTER M -0x4E 0x004E # LATIN CAPITAL LETTER N -0x4F 0x004F # LATIN CAPITAL LETTER O -0x50 0x0050 # LATIN CAPITAL LETTER P -0x51 0x0051 # LATIN CAPITAL LETTER Q -0x52 0x0052 # LATIN CAPITAL LETTER R -0x53 0x0053 # LATIN CAPITAL LETTER S -0x54 0x0054 # LATIN CAPITAL LETTER T -0x55 0x0055 # LATIN CAPITAL LETTER U -0x56 0x0056 # LATIN CAPITAL LETTER V -0x57 0x0057 # LATIN CAPITAL LETTER W -0x58 0x0058 # LATIN CAPITAL LETTER X -0x59 0x0059 # LATIN CAPITAL LETTER Y -0x5A 0x005A # LATIN CAPITAL LETTER Z -0x5B 0x005B # LEFT SQUARE BRACKET -0x5C 0x005C # REVERSE SOLIDUS -0x5D 0x005D # RIGHT SQUARE BRACKET -0x5E 0x005E # CIRCUMFLEX ACCENT -0x5F 0x005F # LOW LINE -0x60 0x0060 # GRAVE ACCENT -0x61 0x0061 # LATIN SMALL LETTER A -0x62 0x0062 # LATIN SMALL LETTER B -0x63 0x0063 # LATIN SMALL LETTER C -0x64 0x0064 # LATIN SMALL LETTER D -0x65 0x0065 # LATIN SMALL LETTER E -0x66 0x0066 # LATIN SMALL LETTER F -0x67 0x0067 # LATIN SMALL LETTER G -0x68 0x0068 # LATIN SMALL LETTER H -0x69 0x0069 # LATIN SMALL LETTER I -0x6A 0x006A # LATIN SMALL LETTER J -0x6B 0x006B # LATIN SMALL LETTER K -0x6C 0x006C # LATIN SMALL LETTER L -0x6D 0x006D # LATIN SMALL LETTER M -0x6E 0x006E # LATIN SMALL LETTER N -0x6F 0x006F # LATIN SMALL LETTER O -0x70 0x0070 # LATIN SMALL LETTER P -0x71 0x0071 # LATIN SMALL LETTER Q -0x72 0x0072 # LATIN SMALL LETTER R -0x73 0x0073 # LATIN SMALL LETTER S -0x74 0x0074 # LATIN SMALL LETTER T -0x75 0x0075 # LATIN SMALL LETTER U -0x76 0x0076 # LATIN SMALL LETTER V -0x77 0x0077 # LATIN SMALL LETTER W -0x78 0x0078 # LATIN SMALL LETTER X -0x79 0x0079 # LATIN SMALL LETTER Y -0x7A 0x007A # LATIN SMALL LETTER Z -0x7B 0x007B # LEFT CURLY BRACKET -0x7C 0x007C # VERTICAL LINE -0x7D 0x007D # RIGHT CURLY BRACKET -0x7E 0x007E # TILDE -0x7F 0x007F # DELETE -0x80 0x0080 # <control> -0x81 0x0081 # <control> -0x82 0x0082 # <control> -0x83 0x0083 # <control> -0x84 0x0084 # <control> -0x85 0x0085 # <control> -0x86 0x0086 # <control> -0x87 0x0087 # <control> -0x88 0x0088 # <control> -0x89 0x0089 # <control> -0x8A 0x008A # <control> -0x8B 0x008B # <control> -0x8C 0x008C # <control> -0x8D 0x008D # <control> -0x8E 0x008E # <control> -0x8F 0x008F # <control> -0x90 0x0090 # <control> -0x91 0x0091 # <control> -0x92 0x0092 # <control> -0x93 0x0093 # <control> -0x94 0x0094 # <control> -0x95 0x0095 # <control> -0x96 0x0096 # <control> -0x97 0x0097 # <control> -0x98 0x0098 # <control> -0x99 0x0099 # <control> -0x9A 0x009A # <control> -0x9B 0x009B # <control> -0x9C 0x009C # <control> -0x9D 0x009D # <control> -0x9E 0x009E # <control> -0x9F 0x009F # <control> -0xA0 0x00A0 # NO-BREAK SPACE -0xA1 0x0126 # LATIN CAPITAL LETTER H WITH STROKE -0xA2 0x02D8 # BREVE -0xA3 0x00A3 # POUND SIGN -0xA4 0x00A4 # CURRENCY SIGN -0xA6 0x0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX -0xA7 0x00A7 # SECTION SIGN -0xA8 0x00A8 # DIAERESIS -0xA9 0x0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE -0xAA 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA -0xAB 0x011E # LATIN CAPITAL LETTER G WITH BREVE -0xAC 0x0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX -0xAD 0x00AD # SOFT HYPHEN -0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE -0xB0 0x00B0 # DEGREE SIGN -0xB1 0x0127 # LATIN SMALL LETTER H WITH STROKE -0xB2 0x00B2 # SUPERSCRIPT TWO -0xB3 0x00B3 # SUPERSCRIPT THREE -0xB4 0x00B4 # ACUTE ACCENT -0xB5 0x00B5 # MICRO SIGN -0xB6 0x0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX -0xB7 0x00B7 # MIDDLE DOT -0xB8 0x00B8 # CEDILLA -0xB9 0x0131 # LATIN SMALL LETTER DOTLESS I -0xBA 0x015F # LATIN SMALL LETTER S WITH CEDILLA -0xBB 0x011F # LATIN SMALL LETTER G WITH BREVE -0xBC 0x0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX -0xBD 0x00BD # VULGAR FRACTION ONE HALF -0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE -0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE -0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE -0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS -0xC5 0x010A # LATIN CAPITAL LETTER C WITH DOT ABOVE -0xC6 0x0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX -0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA -0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE -0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE -0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS -0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE -0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE -0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS -0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE -0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE -0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE -0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -0xD5 0x0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE -0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS -0xD7 0x00D7 # MULTIPLICATION SIGN -0xD8 0x011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX -0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE -0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE -0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX -0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -0xDD 0x016C # LATIN CAPITAL LETTER U WITH BREVE -0xDE 0x015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX -0xDF 0x00DF # LATIN SMALL LETTER SHARP S -0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE -0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE -0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX -0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS -0xE5 0x010B # LATIN SMALL LETTER C WITH DOT ABOVE -0xE6 0x0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX -0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA -0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE -0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE -0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX -0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS -0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE -0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE -0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX -0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS -0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE -0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE -0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE -0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX -0xF5 0x0121 # LATIN SMALL LETTER G WITH DOT ABOVE -0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS -0xF7 0x00F7 # DIVISION SIGN -0xF8 0x011D # LATIN SMALL LETTER G WITH CIRCUMFLEX -0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE -0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE -0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX -0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS -0xFD 0x016D # LATIN SMALL LETTER U WITH BREVE -0xFE 0x015D # LATIN SMALL LETTER S WITH CIRCUMFLEX -0xFF 0x02D9 # DOT ABOVE diff --git a/program/lib/encoding/ISO-8859-4.map b/program/lib/encoding/ISO-8859-4.map deleted file mode 100644 index 662e698ab..000000000 --- a/program/lib/encoding/ISO-8859-4.map +++ /dev/null @@ -1,303 +0,0 @@ -# -# Name: ISO/IEC 8859-4:1998 to Unicode -# Unicode version: 3.0 -# Table version: 1.0 -# Table format: Format A -# Date: 1999 July 27 -# Authors: Ken Whistler <kenw@sybase.com> -# -# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. -# -# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -# No claims are made as to fitness for any particular purpose. No -# warranties of any kind are expressed or implied. The recipient -# agrees to determine applicability of information provided. If this -# file has been provided on optical media by Unicode, Inc., the sole -# remedy for any claim will be exchange of defective media within 90 -# days of receipt. -# -# Unicode, Inc. hereby grants the right to freely use the information -# supplied in this file in the creation of products supporting the -# Unicode Standard, and to make copies of this file in any form for -# internal or external distribution as long as this notice remains -# attached. -# -# General notes: -# -# This table contains the data the Unicode Consortium has on how -# ISO/IEC 8859-4:1998 characters map into Unicode. -# -# Format: Three tab-separated columns -# Column #1 is the ISO/IEC 8859-4 code (in hex as 0xXX) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 the Unicode name (follows a comment sign, '#') -# -# The entries are in ISO/IEC 8859-4 order. -# -# Version history -# 1.0 version updates 0.1 version by adding mappings for all -# control characters. -# -# Updated versions of this file may be found in: -# <ftp://ftp.unicode.org/Public/MAPPINGS/> -# -# Any comments or problems, contact <errata@unicode.org> -# Please note that <errata@unicode.org> is an archival address; -# notices will be checked, but do not expect an immediate response. -# -0x00 0x0000 # NULL -0x01 0x0001 # START OF HEADING -0x02 0x0002 # START OF TEXT -0x03 0x0003 # END OF TEXT -0x04 0x0004 # END OF TRANSMISSION -0x05 0x0005 # ENQUIRY -0x06 0x0006 # ACKNOWLEDGE -0x07 0x0007 # BELL -0x08 0x0008 # BACKSPACE -0x09 0x0009 # HORIZONTAL TABULATION -0x0A 0x000A # LINE FEED -0x0B 0x000B # VERTICAL TABULATION -0x0C 0x000C # FORM FEED -0x0D 0x000D # CARRIAGE RETURN -0x0E 0x000E # SHIFT OUT -0x0F 0x000F # SHIFT IN -0x10 0x0010 # DATA LINK ESCAPE -0x11 0x0011 # DEVICE CONTROL ONE -0x12 0x0012 # DEVICE CONTROL TWO -0x13 0x0013 # DEVICE CONTROL THREE -0x14 0x0014 # DEVICE CONTROL FOUR -0x15 0x0015 # NEGATIVE ACKNOWLEDGE -0x16 0x0016 # SYNCHRONOUS IDLE -0x17 0x0017 # END OF TRANSMISSION BLOCK -0x18 0x0018 # CANCEL -0x19 0x0019 # END OF MEDIUM -0x1A 0x001A # SUBSTITUTE -0x1B 0x001B # ESCAPE -0x1C 0x001C # FILE SEPARATOR -0x1D 0x001D # GROUP SEPARATOR -0x1E 0x001E # RECORD SEPARATOR -0x1F 0x001F # UNIT SEPARATOR -0x20 0x0020 # SPACE -0x21 0x0021 # EXCLAMATION MARK -0x22 0x0022 # QUOTATION MARK -0x23 0x0023 # NUMBER SIGN -0x24 0x0024 # DOLLAR SIGN -0x25 0x0025 # PERCENT SIGN -0x26 0x0026 # AMPERSAND -0x27 0x0027 # APOSTROPHE -0x28 0x0028 # LEFT PARENTHESIS -0x29 0x0029 # RIGHT PARENTHESIS -0x2A 0x002A # ASTERISK -0x2B 0x002B # PLUS SIGN -0x2C 0x002C # COMMA -0x2D 0x002D # HYPHEN-MINUS -0x2E 0x002E # FULL STOP -0x2F 0x002F # SOLIDUS -0x30 0x0030 # DIGIT ZERO -0x31 0x0031 # DIGIT ONE -0x32 0x0032 # DIGIT TWO -0x33 0x0033 # DIGIT THREE -0x34 0x0034 # DIGIT FOUR -0x35 0x0035 # DIGIT FIVE -0x36 0x0036 # DIGIT SIX -0x37 0x0037 # DIGIT SEVEN -0x38 0x0038 # DIGIT EIGHT -0x39 0x0039 # DIGIT NINE -0x3A 0x003A # COLON -0x3B 0x003B # SEMICOLON -0x3C 0x003C # LESS-THAN SIGN -0x3D 0x003D # EQUALS SIGN -0x3E 0x003E # GREATER-THAN SIGN -0x3F 0x003F # QUESTION MARK -0x40 0x0040 # COMMERCIAL AT -0x41 0x0041 # LATIN CAPITAL LETTER A -0x42 0x0042 # LATIN CAPITAL LETTER B -0x43 0x0043 # LATIN CAPITAL LETTER C -0x44 0x0044 # LATIN CAPITAL LETTER D -0x45 0x0045 # LATIN CAPITAL LETTER E -0x46 0x0046 # LATIN CAPITAL LETTER F -0x47 0x0047 # LATIN CAPITAL LETTER G -0x48 0x0048 # LATIN CAPITAL LETTER H -0x49 0x0049 # LATIN CAPITAL LETTER I -0x4A 0x004A # LATIN CAPITAL LETTER J -0x4B 0x004B # LATIN CAPITAL LETTER K -0x4C 0x004C # LATIN CAPITAL LETTER L -0x4D 0x004D # LATIN CAPITAL LETTER M -0x4E 0x004E # LATIN CAPITAL LETTER N -0x4F 0x004F # LATIN CAPITAL LETTER O -0x50 0x0050 # LATIN CAPITAL LETTER P -0x51 0x0051 # LATIN CAPITAL LETTER Q -0x52 0x0052 # LATIN CAPITAL LETTER R -0x53 0x0053 # LATIN CAPITAL LETTER S -0x54 0x0054 # LATIN CAPITAL LETTER T -0x55 0x0055 # LATIN CAPITAL LETTER U -0x56 0x0056 # LATIN CAPITAL LETTER V -0x57 0x0057 # LATIN CAPITAL LETTER W -0x58 0x0058 # LATIN CAPITAL LETTER X -0x59 0x0059 # LATIN CAPITAL LETTER Y -0x5A 0x005A # LATIN CAPITAL LETTER Z -0x5B 0x005B # LEFT SQUARE BRACKET -0x5C 0x005C # REVERSE SOLIDUS -0x5D 0x005D # RIGHT SQUARE BRACKET -0x5E 0x005E # CIRCUMFLEX ACCENT -0x5F 0x005F # LOW LINE -0x60 0x0060 # GRAVE ACCENT -0x61 0x0061 # LATIN SMALL LETTER A -0x62 0x0062 # LATIN SMALL LETTER B -0x63 0x0063 # LATIN SMALL LETTER C -0x64 0x0064 # LATIN SMALL LETTER D -0x65 0x0065 # LATIN SMALL LETTER E -0x66 0x0066 # LATIN SMALL LETTER F -0x67 0x0067 # LATIN SMALL LETTER G -0x68 0x0068 # LATIN SMALL LETTER H -0x69 0x0069 # LATIN SMALL LETTER I -0x6A 0x006A # LATIN SMALL LETTER J -0x6B 0x006B # LATIN SMALL LETTER K -0x6C 0x006C # LATIN SMALL LETTER L -0x6D 0x006D # LATIN SMALL LETTER M -0x6E 0x006E # LATIN SMALL LETTER N -0x6F 0x006F # LATIN SMALL LETTER O -0x70 0x0070 # LATIN SMALL LETTER P -0x71 0x0071 # LATIN SMALL LETTER Q -0x72 0x0072 # LATIN SMALL LETTER R -0x73 0x0073 # LATIN SMALL LETTER S -0x74 0x0074 # LATIN SMALL LETTER T -0x75 0x0075 # LATIN SMALL LETTER U -0x76 0x0076 # LATIN SMALL LETTER V -0x77 0x0077 # LATIN SMALL LETTER W -0x78 0x0078 # LATIN SMALL LETTER X -0x79 0x0079 # LATIN SMALL LETTER Y -0x7A 0x007A # LATIN SMALL LETTER Z -0x7B 0x007B # LEFT CURLY BRACKET -0x7C 0x007C # VERTICAL LINE -0x7D 0x007D # RIGHT CURLY BRACKET -0x7E 0x007E # TILDE -0x7F 0x007F # DELETE -0x80 0x0080 # <control> -0x81 0x0081 # <control> -0x82 0x0082 # <control> -0x83 0x0083 # <control> -0x84 0x0084 # <control> -0x85 0x0085 # <control> -0x86 0x0086 # <control> -0x87 0x0087 # <control> -0x88 0x0088 # <control> -0x89 0x0089 # <control> -0x8A 0x008A # <control> -0x8B 0x008B # <control> -0x8C 0x008C # <control> -0x8D 0x008D # <control> -0x8E 0x008E # <control> -0x8F 0x008F # <control> -0x90 0x0090 # <control> -0x91 0x0091 # <control> -0x92 0x0092 # <control> -0x93 0x0093 # <control> -0x94 0x0094 # <control> -0x95 0x0095 # <control> -0x96 0x0096 # <control> -0x97 0x0097 # <control> -0x98 0x0098 # <control> -0x99 0x0099 # <control> -0x9A 0x009A # <control> -0x9B 0x009B # <control> -0x9C 0x009C # <control> -0x9D 0x009D # <control> -0x9E 0x009E # <control> -0x9F 0x009F # <control> -0xA0 0x00A0 # NO-BREAK SPACE -0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK -0xA2 0x0138 # LATIN SMALL LETTER KRA -0xA3 0x0156 # LATIN CAPITAL LETTER R WITH CEDILLA -0xA4 0x00A4 # CURRENCY SIGN -0xA5 0x0128 # LATIN CAPITAL LETTER I WITH TILDE -0xA6 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA -0xA7 0x00A7 # SECTION SIGN -0xA8 0x00A8 # DIAERESIS -0xA9 0x0160 # LATIN CAPITAL LETTER S WITH CARON -0xAA 0x0112 # LATIN CAPITAL LETTER E WITH MACRON -0xAB 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA -0xAC 0x0166 # LATIN CAPITAL LETTER T WITH STROKE -0xAD 0x00AD # SOFT HYPHEN -0xAE 0x017D # LATIN CAPITAL LETTER Z WITH CARON -0xAF 0x00AF # MACRON -0xB0 0x00B0 # DEGREE SIGN -0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK -0xB2 0x02DB # OGONEK -0xB3 0x0157 # LATIN SMALL LETTER R WITH CEDILLA -0xB4 0x00B4 # ACUTE ACCENT -0xB5 0x0129 # LATIN SMALL LETTER I WITH TILDE -0xB6 0x013C # LATIN SMALL LETTER L WITH CEDILLA -0xB7 0x02C7 # CARON -0xB8 0x00B8 # CEDILLA -0xB9 0x0161 # LATIN SMALL LETTER S WITH CARON -0xBA 0x0113 # LATIN SMALL LETTER E WITH MACRON -0xBB 0x0123 # LATIN SMALL LETTER G WITH CEDILLA -0xBC 0x0167 # LATIN SMALL LETTER T WITH STROKE -0xBD 0x014A # LATIN CAPITAL LETTER ENG -0xBE 0x017E # LATIN SMALL LETTER Z WITH CARON -0xBF 0x014B # LATIN SMALL LETTER ENG -0xC0 0x0100 # LATIN CAPITAL LETTER A WITH MACRON -0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE -0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE -0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS -0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE -0xC6 0x00C6 # LATIN CAPITAL LETTER AE -0xC7 0x012E # LATIN CAPITAL LETTER I WITH OGONEK -0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON -0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE -0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK -0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS -0xCC 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE -0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE -0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -0xCF 0x012A # LATIN CAPITAL LETTER I WITH MACRON -0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE -0xD1 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA -0xD2 0x014C # LATIN CAPITAL LETTER O WITH MACRON -0xD3 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA -0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE -0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS -0xD7 0x00D7 # MULTIPLICATION SIGN -0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE -0xD9 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK -0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE -0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX -0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -0xDD 0x0168 # LATIN CAPITAL LETTER U WITH TILDE -0xDE 0x016A # LATIN CAPITAL LETTER U WITH MACRON -0xDF 0x00DF # LATIN SMALL LETTER SHARP S -0xE0 0x0101 # LATIN SMALL LETTER A WITH MACRON -0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE -0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX -0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE -0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS -0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE -0xE6 0x00E6 # LATIN SMALL LETTER AE -0xE7 0x012F # LATIN SMALL LETTER I WITH OGONEK -0xE8 0x010D # LATIN SMALL LETTER C WITH CARON -0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE -0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK -0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS -0xEC 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE -0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE -0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX -0xEF 0x012B # LATIN SMALL LETTER I WITH MACRON -0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE -0xF1 0x0146 # LATIN SMALL LETTER N WITH CEDILLA -0xF2 0x014D # LATIN SMALL LETTER O WITH MACRON -0xF3 0x0137 # LATIN SMALL LETTER K WITH CEDILLA -0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX -0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE -0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS -0xF7 0x00F7 # DIVISION SIGN -0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE -0xF9 0x0173 # LATIN SMALL LETTER U WITH OGONEK -0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE -0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX -0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS -0xFD 0x0169 # LATIN SMALL LETTER U WITH TILDE -0xFE 0x016B # LATIN SMALL LETTER U WITH MACRON -0xFF 0x02D9 # DOT ABOVE diff --git a/program/lib/encoding/ISO-8859-5.map b/program/lib/encoding/ISO-8859-5.map deleted file mode 100644 index a7ed1ce2a..000000000 --- a/program/lib/encoding/ISO-8859-5.map +++ /dev/null @@ -1,303 +0,0 @@ -# -# Name: ISO 8859-5:1999 to Unicode -# Unicode version: 3.0 -# Table version: 1.0 -# Table format: Format A -# Date: 1999 July 27 -# Authors: Ken Whistler <kenw@sybase.com> -# -# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. -# -# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -# No claims are made as to fitness for any particular purpose. No -# warranties of any kind are expressed or implied. The recipient -# agrees to determine applicability of information provided. If this -# file has been provided on optical media by Unicode, Inc., the sole -# remedy for any claim will be exchange of defective media within 90 -# days of receipt. -# -# Unicode, Inc. hereby grants the right to freely use the information -# supplied in this file in the creation of products supporting the -# Unicode Standard, and to make copies of this file in any form for -# internal or external distribution as long as this notice remains -# attached. -# -# General notes: -# -# This table contains the data the Unicode Consortium has on how -# ISO/IEC 8859-5:1999 characters map into Unicode. -# -# Format: Three tab-separated columns -# Column #1 is the ISO/IEC 8859-5 code (in hex as 0xXX) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 the Unicode name (follows a comment sign, '#') -# -# The entries are in ISO/IEC 8859-5 order. -# -# Version history -# 1.0 version updates 0.1 version by adding mappings for all -# control characters. -# -# Updated versions of this file may be found in: -# <ftp://ftp.unicode.org/Public/MAPPINGS/> -# -# Any comments or problems, contact <errata@unicode.org> -# Please note that <errata@unicode.org> is an archival address; -# notices will be checked, but do not expect an immediate response. -# -0x00 0x0000 # NULL -0x01 0x0001 # START OF HEADING -0x02 0x0002 # START OF TEXT -0x03 0x0003 # END OF TEXT -0x04 0x0004 # END OF TRANSMISSION -0x05 0x0005 # ENQUIRY -0x06 0x0006 # ACKNOWLEDGE -0x07 0x0007 # BELL -0x08 0x0008 # BACKSPACE -0x09 0x0009 # HORIZONTAL TABULATION -0x0A 0x000A # LINE FEED -0x0B 0x000B # VERTICAL TABULATION -0x0C 0x000C # FORM FEED -0x0D 0x000D # CARRIAGE RETURN -0x0E 0x000E # SHIFT OUT -0x0F 0x000F # SHIFT IN -0x10 0x0010 # DATA LINK ESCAPE -0x11 0x0011 # DEVICE CONTROL ONE -0x12 0x0012 # DEVICE CONTROL TWO -0x13 0x0013 # DEVICE CONTROL THREE -0x14 0x0014 # DEVICE CONTROL FOUR -0x15 0x0015 # NEGATIVE ACKNOWLEDGE -0x16 0x0016 # SYNCHRONOUS IDLE -0x17 0x0017 # END OF TRANSMISSION BLOCK -0x18 0x0018 # CANCEL -0x19 0x0019 # END OF MEDIUM -0x1A 0x001A # SUBSTITUTE -0x1B 0x001B # ESCAPE -0x1C 0x001C # FILE SEPARATOR -0x1D 0x001D # GROUP SEPARATOR -0x1E 0x001E # RECORD SEPARATOR -0x1F 0x001F # UNIT SEPARATOR -0x20 0x0020 # SPACE -0x21 0x0021 # EXCLAMATION MARK -0x22 0x0022 # QUOTATION MARK -0x23 0x0023 # NUMBER SIGN -0x24 0x0024 # DOLLAR SIGN -0x25 0x0025 # PERCENT SIGN -0x26 0x0026 # AMPERSAND -0x27 0x0027 # APOSTROPHE -0x28 0x0028 # LEFT PARENTHESIS -0x29 0x0029 # RIGHT PARENTHESIS -0x2A 0x002A # ASTERISK -0x2B 0x002B # PLUS SIGN -0x2C 0x002C # COMMA -0x2D 0x002D # HYPHEN-MINUS -0x2E 0x002E # FULL STOP -0x2F 0x002F # SOLIDUS -0x30 0x0030 # DIGIT ZERO -0x31 0x0031 # DIGIT ONE -0x32 0x0032 # DIGIT TWO -0x33 0x0033 # DIGIT THREE -0x34 0x0034 # DIGIT FOUR -0x35 0x0035 # DIGIT FIVE -0x36 0x0036 # DIGIT SIX -0x37 0x0037 # DIGIT SEVEN -0x38 0x0038 # DIGIT EIGHT -0x39 0x0039 # DIGIT NINE -0x3A 0x003A # COLON -0x3B 0x003B # SEMICOLON -0x3C 0x003C # LESS-THAN SIGN -0x3D 0x003D # EQUALS SIGN -0x3E 0x003E # GREATER-THAN SIGN -0x3F 0x003F # QUESTION MARK -0x40 0x0040 # COMMERCIAL AT -0x41 0x0041 # LATIN CAPITAL LETTER A -0x42 0x0042 # LATIN CAPITAL LETTER B -0x43 0x0043 # LATIN CAPITAL LETTER C -0x44 0x0044 # LATIN CAPITAL LETTER D -0x45 0x0045 # LATIN CAPITAL LETTER E -0x46 0x0046 # LATIN CAPITAL LETTER F -0x47 0x0047 # LATIN CAPITAL LETTER G -0x48 0x0048 # LATIN CAPITAL LETTER H -0x49 0x0049 # LATIN CAPITAL LETTER I -0x4A 0x004A # LATIN CAPITAL LETTER J -0x4B 0x004B # LATIN CAPITAL LETTER K -0x4C 0x004C # LATIN CAPITAL LETTER L -0x4D 0x004D # LATIN CAPITAL LETTER M -0x4E 0x004E # LATIN CAPITAL LETTER N -0x4F 0x004F # LATIN CAPITAL LETTER O -0x50 0x0050 # LATIN CAPITAL LETTER P -0x51 0x0051 # LATIN CAPITAL LETTER Q -0x52 0x0052 # LATIN CAPITAL LETTER R -0x53 0x0053 # LATIN CAPITAL LETTER S -0x54 0x0054 # LATIN CAPITAL LETTER T -0x55 0x0055 # LATIN CAPITAL LETTER U -0x56 0x0056 # LATIN CAPITAL LETTER V -0x57 0x0057 # LATIN CAPITAL LETTER W -0x58 0x0058 # LATIN CAPITAL LETTER X -0x59 0x0059 # LATIN CAPITAL LETTER Y -0x5A 0x005A # LATIN CAPITAL LETTER Z -0x5B 0x005B # LEFT SQUARE BRACKET -0x5C 0x005C # REVERSE SOLIDUS -0x5D 0x005D # RIGHT SQUARE BRACKET -0x5E 0x005E # CIRCUMFLEX ACCENT -0x5F 0x005F # LOW LINE -0x60 0x0060 # GRAVE ACCENT -0x61 0x0061 # LATIN SMALL LETTER A -0x62 0x0062 # LATIN SMALL LETTER B -0x63 0x0063 # LATIN SMALL LETTER C -0x64 0x0064 # LATIN SMALL LETTER D -0x65 0x0065 # LATIN SMALL LETTER E -0x66 0x0066 # LATIN SMALL LETTER F -0x67 0x0067 # LATIN SMALL LETTER G -0x68 0x0068 # LATIN SMALL LETTER H -0x69 0x0069 # LATIN SMALL LETTER I -0x6A 0x006A # LATIN SMALL LETTER J -0x6B 0x006B # LATIN SMALL LETTER K -0x6C 0x006C # LATIN SMALL LETTER L -0x6D 0x006D # LATIN SMALL LETTER M -0x6E 0x006E # LATIN SMALL LETTER N -0x6F 0x006F # LATIN SMALL LETTER O -0x70 0x0070 # LATIN SMALL LETTER P -0x71 0x0071 # LATIN SMALL LETTER Q -0x72 0x0072 # LATIN SMALL LETTER R -0x73 0x0073 # LATIN SMALL LETTER S -0x74 0x0074 # LATIN SMALL LETTER T -0x75 0x0075 # LATIN SMALL LETTER U -0x76 0x0076 # LATIN SMALL LETTER V -0x77 0x0077 # LATIN SMALL LETTER W -0x78 0x0078 # LATIN SMALL LETTER X -0x79 0x0079 # LATIN SMALL LETTER Y -0x7A 0x007A # LATIN SMALL LETTER Z -0x7B 0x007B # LEFT CURLY BRACKET -0x7C 0x007C # VERTICAL LINE -0x7D 0x007D # RIGHT CURLY BRACKET -0x7E 0x007E # TILDE -0x7F 0x007F # DELETE -0x80 0x0080 # <control> -0x81 0x0081 # <control> -0x82 0x0082 # <control> -0x83 0x0083 # <control> -0x84 0x0084 # <control> -0x85 0x0085 # <control> -0x86 0x0086 # <control> -0x87 0x0087 # <control> -0x88 0x0088 # <control> -0x89 0x0089 # <control> -0x8A 0x008A # <control> -0x8B 0x008B # <control> -0x8C 0x008C # <control> -0x8D 0x008D # <control> -0x8E 0x008E # <control> -0x8F 0x008F # <control> -0x90 0x0090 # <control> -0x91 0x0091 # <control> -0x92 0x0092 # <control> -0x93 0x0093 # <control> -0x94 0x0094 # <control> -0x95 0x0095 # <control> -0x96 0x0096 # <control> -0x97 0x0097 # <control> -0x98 0x0098 # <control> -0x99 0x0099 # <control> -0x9A 0x009A # <control> -0x9B 0x009B # <control> -0x9C 0x009C # <control> -0x9D 0x009D # <control> -0x9E 0x009E # <control> -0x9F 0x009F # <control> -0xA0 0x00A0 # NO-BREAK SPACE -0xA1 0x0401 # CYRILLIC CAPITAL LETTER IO -0xA2 0x0402 # CYRILLIC CAPITAL LETTER DJE -0xA3 0x0403 # CYRILLIC CAPITAL LETTER GJE -0xA4 0x0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE -0xA5 0x0405 # CYRILLIC CAPITAL LETTER DZE -0xA6 0x0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I -0xA7 0x0407 # CYRILLIC CAPITAL LETTER YI -0xA8 0x0408 # CYRILLIC CAPITAL LETTER JE -0xA9 0x0409 # CYRILLIC CAPITAL LETTER LJE -0xAA 0x040A # CYRILLIC CAPITAL LETTER NJE -0xAB 0x040B # CYRILLIC CAPITAL LETTER TSHE -0xAC 0x040C # CYRILLIC CAPITAL LETTER KJE -0xAD 0x00AD # SOFT HYPHEN -0xAE 0x040E # CYRILLIC CAPITAL LETTER SHORT U -0xAF 0x040F # CYRILLIC CAPITAL LETTER DZHE -0xB0 0x0410 # CYRILLIC CAPITAL LETTER A -0xB1 0x0411 # CYRILLIC CAPITAL LETTER BE -0xB2 0x0412 # CYRILLIC CAPITAL LETTER VE -0xB3 0x0413 # CYRILLIC CAPITAL LETTER GHE -0xB4 0x0414 # CYRILLIC CAPITAL LETTER DE -0xB5 0x0415 # CYRILLIC CAPITAL LETTER IE -0xB6 0x0416 # CYRILLIC CAPITAL LETTER ZHE -0xB7 0x0417 # CYRILLIC CAPITAL LETTER ZE -0xB8 0x0418 # CYRILLIC CAPITAL LETTER I -0xB9 0x0419 # CYRILLIC CAPITAL LETTER SHORT I -0xBA 0x041A # CYRILLIC CAPITAL LETTER KA -0xBB 0x041B # CYRILLIC CAPITAL LETTER EL -0xBC 0x041C # CYRILLIC CAPITAL LETTER EM -0xBD 0x041D # CYRILLIC CAPITAL LETTER EN -0xBE 0x041E # CYRILLIC CAPITAL LETTER O -0xBF 0x041F # CYRILLIC CAPITAL LETTER PE -0xC0 0x0420 # CYRILLIC CAPITAL LETTER ER -0xC1 0x0421 # CYRILLIC CAPITAL LETTER ES -0xC2 0x0422 # CYRILLIC CAPITAL LETTER TE -0xC3 0x0423 # CYRILLIC CAPITAL LETTER U -0xC4 0x0424 # CYRILLIC CAPITAL LETTER EF -0xC5 0x0425 # CYRILLIC CAPITAL LETTER HA -0xC6 0x0426 # CYRILLIC CAPITAL LETTER TSE -0xC7 0x0427 # CYRILLIC CAPITAL LETTER CHE -0xC8 0x0428 # CYRILLIC CAPITAL LETTER SHA -0xC9 0x0429 # CYRILLIC CAPITAL LETTER SHCHA -0xCA 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN -0xCB 0x042B # CYRILLIC CAPITAL LETTER YERU -0xCC 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN -0xCD 0x042D # CYRILLIC CAPITAL LETTER E -0xCE 0x042E # CYRILLIC CAPITAL LETTER YU -0xCF 0x042F # CYRILLIC CAPITAL LETTER YA -0xD0 0x0430 # CYRILLIC SMALL LETTER A -0xD1 0x0431 # CYRILLIC SMALL LETTER BE -0xD2 0x0432 # CYRILLIC SMALL LETTER VE -0xD3 0x0433 # CYRILLIC SMALL LETTER GHE -0xD4 0x0434 # CYRILLIC SMALL LETTER DE -0xD5 0x0435 # CYRILLIC SMALL LETTER IE -0xD6 0x0436 # CYRILLIC SMALL LETTER ZHE -0xD7 0x0437 # CYRILLIC SMALL LETTER ZE -0xD8 0x0438 # CYRILLIC SMALL LETTER I -0xD9 0x0439 # CYRILLIC SMALL LETTER SHORT I -0xDA 0x043A # CYRILLIC SMALL LETTER KA -0xDB 0x043B # CYRILLIC SMALL LETTER EL -0xDC 0x043C # CYRILLIC SMALL LETTER EM -0xDD 0x043D # CYRILLIC SMALL LETTER EN -0xDE 0x043E # CYRILLIC SMALL LETTER O -0xDF 0x043F # CYRILLIC SMALL LETTER PE -0xE0 0x0440 # CYRILLIC SMALL LETTER ER -0xE1 0x0441 # CYRILLIC SMALL LETTER ES -0xE2 0x0442 # CYRILLIC SMALL LETTER TE -0xE3 0x0443 # CYRILLIC SMALL LETTER U -0xE4 0x0444 # CYRILLIC SMALL LETTER EF -0xE5 0x0445 # CYRILLIC SMALL LETTER HA -0xE6 0x0446 # CYRILLIC SMALL LETTER TSE -0xE7 0x0447 # CYRILLIC SMALL LETTER CHE -0xE8 0x0448 # CYRILLIC SMALL LETTER SHA -0xE9 0x0449 # CYRILLIC SMALL LETTER SHCHA -0xEA 0x044A # CYRILLIC SMALL LETTER HARD SIGN -0xEB 0x044B # CYRILLIC SMALL LETTER YERU -0xEC 0x044C # CYRILLIC SMALL LETTER SOFT SIGN -0xED 0x044D # CYRILLIC SMALL LETTER E -0xEE 0x044E # CYRILLIC SMALL LETTER YU -0xEF 0x044F # CYRILLIC SMALL LETTER YA -0xF0 0x2116 # NUMERO SIGN -0xF1 0x0451 # CYRILLIC SMALL LETTER IO -0xF2 0x0452 # CYRILLIC SMALL LETTER DJE -0xF3 0x0453 # CYRILLIC SMALL LETTER GJE -0xF4 0x0454 # CYRILLIC SMALL LETTER UKRAINIAN IE -0xF5 0x0455 # CYRILLIC SMALL LETTER DZE -0xF6 0x0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I -0xF7 0x0457 # CYRILLIC SMALL LETTER YI -0xF8 0x0458 # CYRILLIC SMALL LETTER JE -0xF9 0x0459 # CYRILLIC SMALL LETTER LJE -0xFA 0x045A # CYRILLIC SMALL LETTER NJE -0xFB 0x045B # CYRILLIC SMALL LETTER TSHE -0xFC 0x045C # CYRILLIC SMALL LETTER KJE -0xFD 0x00A7 # SECTION SIGN -0xFE 0x045E # CYRILLIC SMALL LETTER SHORT U -0xFF 0x045F # CYRILLIC SMALL LETTER DZHE diff --git a/program/lib/encoding/ISO-8859-6.map b/program/lib/encoding/ISO-8859-6.map deleted file mode 100644 index 69ac7f589..000000000 --- a/program/lib/encoding/ISO-8859-6.map +++ /dev/null @@ -1,260 +0,0 @@ -# -# Name: ISO 8859-6:1999 to Unicode -# Unicode version: 3.0 -# Table version: 1.0 -# Table format: Format A -# Date: 1999 July 27 -# Authors: Ken Whistler <kenw@sybase.com> -# -# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. -# -# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -# No claims are made as to fitness for any particular purpose. No -# warranties of any kind are expressed or implied. The recipient -# agrees to determine applicability of information provided. If this -# file has been provided on optical media by Unicode, Inc., the sole -# remedy for any claim will be exchange of defective media within 90 -# days of receipt. -# -# Unicode, Inc. hereby grants the right to freely use the information -# supplied in this file in the creation of products supporting the -# Unicode Standard, and to make copies of this file in any form for -# internal or external distribution as long as this notice remains -# attached. -# -# General notes: -# -# This table contains the data the Unicode Consortium has on how -# ISO/IEC 8859-6:1999 characters map into Unicode. -# -# Format: Three tab-separated columns -# Column #1 is the ISO/IEC 8859-6 code (in hex as 0xXX) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 the Unicode name (follows a comment sign, '#') -# -# The entries are in ISO/IEC 8859-6 order. -# -# Version history -# 1.0 version updates 0.1 version by adding mappings for all -# control characters. -# 0x30..0x39 remapped to the ASCII digits (U+0030..U+0039) instead -# of the Arabic digits (U+0660..U+0669). -# -# Updated versions of this file may be found in: -# <ftp://ftp.unicode.org/Public/MAPPINGS/> -# -# Any comments or problems, contact <errata@unicode.org> -# Please note that <errata@unicode.org> is an archival address; -# notices will be checked, but do not expect an immediate response. -# -0x00 0x0000 # NULL -0x01 0x0001 # START OF HEADING -0x02 0x0002 # START OF TEXT -0x03 0x0003 # END OF TEXT -0x04 0x0004 # END OF TRANSMISSION -0x05 0x0005 # ENQUIRY -0x06 0x0006 # ACKNOWLEDGE -0x07 0x0007 # BELL -0x08 0x0008 # BACKSPACE -0x09 0x0009 # HORIZONTAL TABULATION -0x0A 0x000A # LINE FEED -0x0B 0x000B # VERTICAL TABULATION -0x0C 0x000C # FORM FEED -0x0D 0x000D # CARRIAGE RETURN -0x0E 0x000E # SHIFT OUT -0x0F 0x000F # SHIFT IN -0x10 0x0010 # DATA LINK ESCAPE -0x11 0x0011 # DEVICE CONTROL ONE -0x12 0x0012 # DEVICE CONTROL TWO -0x13 0x0013 # DEVICE CONTROL THREE -0x14 0x0014 # DEVICE CONTROL FOUR -0x15 0x0015 # NEGATIVE ACKNOWLEDGE -0x16 0x0016 # SYNCHRONOUS IDLE -0x17 0x0017 # END OF TRANSMISSION BLOCK -0x18 0x0018 # CANCEL -0x19 0x0019 # END OF MEDIUM -0x1A 0x001A # SUBSTITUTE -0x1B 0x001B # ESCAPE -0x1C 0x001C # FILE SEPARATOR -0x1D 0x001D # GROUP SEPARATOR -0x1E 0x001E # RECORD SEPARATOR -0x1F 0x001F # UNIT SEPARATOR -0x20 0x0020 # SPACE -0x21 0x0021 # EXCLAMATION MARK -0x22 0x0022 # QUOTATION MARK -0x23 0x0023 # NUMBER SIGN -0x24 0x0024 # DOLLAR SIGN -0x25 0x0025 # PERCENT SIGN -0x26 0x0026 # AMPERSAND -0x27 0x0027 # APOSTROPHE -0x28 0x0028 # LEFT PARENTHESIS -0x29 0x0029 # RIGHT PARENTHESIS -0x2A 0x002A # ASTERISK -0x2B 0x002B # PLUS SIGN -0x2C 0x002C # COMMA -0x2D 0x002D # HYPHEN-MINUS -0x2E 0x002E # FULL STOP -0x2F 0x002F # SOLIDUS -0x30 0x0030 # DIGIT ZERO -0x31 0x0031 # DIGIT ONE -0x32 0x0032 # DIGIT TWO -0x33 0x0033 # DIGIT THREE -0x34 0x0034 # DIGIT FOUR -0x35 0x0035 # DIGIT FIVE -0x36 0x0036 # DIGIT SIX -0x37 0x0037 # DIGIT SEVEN -0x38 0x0038 # DIGIT EIGHT -0x39 0x0039 # DIGIT NINE -0x3A 0x003A # COLON -0x3B 0x003B # SEMICOLON -0x3C 0x003C # LESS-THAN SIGN -0x3D 0x003D # EQUALS SIGN -0x3E 0x003E # GREATER-THAN SIGN -0x3F 0x003F # QUESTION MARK -0x40 0x0040 # COMMERCIAL AT -0x41 0x0041 # LATIN CAPITAL LETTER A -0x42 0x0042 # LATIN CAPITAL LETTER B -0x43 0x0043 # LATIN CAPITAL LETTER C -0x44 0x0044 # LATIN CAPITAL LETTER D -0x45 0x0045 # LATIN CAPITAL LETTER E -0x46 0x0046 # LATIN CAPITAL LETTER F -0x47 0x0047 # LATIN CAPITAL LETTER G -0x48 0x0048 # LATIN CAPITAL LETTER H -0x49 0x0049 # LATIN CAPITAL LETTER I -0x4A 0x004A # LATIN CAPITAL LETTER J -0x4B 0x004B # LATIN CAPITAL LETTER K -0x4C 0x004C # LATIN CAPITAL LETTER L -0x4D 0x004D # LATIN CAPITAL LETTER M -0x4E 0x004E # LATIN CAPITAL LETTER N -0x4F 0x004F # LATIN CAPITAL LETTER O -0x50 0x0050 # LATIN CAPITAL LETTER P -0x51 0x0051 # LATIN CAPITAL LETTER Q -0x52 0x0052 # LATIN CAPITAL LETTER R -0x53 0x0053 # LATIN CAPITAL LETTER S -0x54 0x0054 # LATIN CAPITAL LETTER T -0x55 0x0055 # LATIN CAPITAL LETTER U -0x56 0x0056 # LATIN CAPITAL LETTER V -0x57 0x0057 # LATIN CAPITAL LETTER W -0x58 0x0058 # LATIN CAPITAL LETTER X -0x59 0x0059 # LATIN CAPITAL LETTER Y -0x5A 0x005A # LATIN CAPITAL LETTER Z -0x5B 0x005B # LEFT SQUARE BRACKET -0x5C 0x005C # REVERSE SOLIDUS -0x5D 0x005D # RIGHT SQUARE BRACKET -0x5E 0x005E # CIRCUMFLEX ACCENT -0x5F 0x005F # LOW LINE -0x60 0x0060 # GRAVE ACCENT -0x61 0x0061 # LATIN SMALL LETTER A -0x62 0x0062 # LATIN SMALL LETTER B -0x63 0x0063 # LATIN SMALL LETTER C -0x64 0x0064 # LATIN SMALL LETTER D -0x65 0x0065 # LATIN SMALL LETTER E -0x66 0x0066 # LATIN SMALL LETTER F -0x67 0x0067 # LATIN SMALL LETTER G -0x68 0x0068 # LATIN SMALL LETTER H -0x69 0x0069 # LATIN SMALL LETTER I -0x6A 0x006A # LATIN SMALL LETTER J -0x6B 0x006B # LATIN SMALL LETTER K -0x6C 0x006C # LATIN SMALL LETTER L -0x6D 0x006D # LATIN SMALL LETTER M -0x6E 0x006E # LATIN SMALL LETTER N -0x6F 0x006F # LATIN SMALL LETTER O -0x70 0x0070 # LATIN SMALL LETTER P -0x71 0x0071 # LATIN SMALL LETTER Q -0x72 0x0072 # LATIN SMALL LETTER R -0x73 0x0073 # LATIN SMALL LETTER S -0x74 0x0074 # LATIN SMALL LETTER T -0x75 0x0075 # LATIN SMALL LETTER U -0x76 0x0076 # LATIN SMALL LETTER V -0x77 0x0077 # LATIN SMALL LETTER W -0x78 0x0078 # LATIN SMALL LETTER X -0x79 0x0079 # LATIN SMALL LETTER Y -0x7A 0x007A # LATIN SMALL LETTER Z -0x7B 0x007B # LEFT CURLY BRACKET -0x7C 0x007C # VERTICAL LINE -0x7D 0x007D # RIGHT CURLY BRACKET -0x7E 0x007E # TILDE -0x7F 0x007F # DELETE -0x80 0x0080 # <control> -0x81 0x0081 # <control> -0x82 0x0082 # <control> -0x83 0x0083 # <control> -0x84 0x0084 # <control> -0x85 0x0085 # <control> -0x86 0x0086 # <control> -0x87 0x0087 # <control> -0x88 0x0088 # <control> -0x89 0x0089 # <control> -0x8A 0x008A # <control> -0x8B 0x008B # <control> -0x8C 0x008C # <control> -0x8D 0x008D # <control> -0x8E 0x008E # <control> -0x8F 0x008F # <control> -0x90 0x0090 # <control> -0x91 0x0091 # <control> -0x92 0x0092 # <control> -0x93 0x0093 # <control> -0x94 0x0094 # <control> -0x95 0x0095 # <control> -0x96 0x0096 # <control> -0x97 0x0097 # <control> -0x98 0x0098 # <control> -0x99 0x0099 # <control> -0x9A 0x009A # <control> -0x9B 0x009B # <control> -0x9C 0x009C # <control> -0x9D 0x009D # <control> -0x9E 0x009E # <control> -0x9F 0x009F # <control> -0xA0 0x00A0 # NO-BREAK SPACE -0xA4 0x00A4 # CURRENCY SIGN -0xAC 0x060C # ARABIC COMMA -0xAD 0x00AD # SOFT HYPHEN -0xBB 0x061B # ARABIC SEMICOLON -0xBF 0x061F # ARABIC QUESTION MARK -0xC1 0x0621 # ARABIC LETTER HAMZA -0xC2 0x0622 # ARABIC LETTER ALEF WITH MADDA ABOVE -0xC3 0x0623 # ARABIC LETTER ALEF WITH HAMZA ABOVE -0xC4 0x0624 # ARABIC LETTER WAW WITH HAMZA ABOVE -0xC5 0x0625 # ARABIC LETTER ALEF WITH HAMZA BELOW -0xC6 0x0626 # ARABIC LETTER YEH WITH HAMZA ABOVE -0xC7 0x0627 # ARABIC LETTER ALEF -0xC8 0x0628 # ARABIC LETTER BEH -0xC9 0x0629 # ARABIC LETTER TEH MARBUTA -0xCA 0x062A # ARABIC LETTER TEH -0xCB 0x062B # ARABIC LETTER THEH -0xCC 0x062C # ARABIC LETTER JEEM -0xCD 0x062D # ARABIC LETTER HAH -0xCE 0x062E # ARABIC LETTER KHAH -0xCF 0x062F # ARABIC LETTER DAL -0xD0 0x0630 # ARABIC LETTER THAL -0xD1 0x0631 # ARABIC LETTER REH -0xD2 0x0632 # ARABIC LETTER ZAIN -0xD3 0x0633 # ARABIC LETTER SEEN -0xD4 0x0634 # ARABIC LETTER SHEEN -0xD5 0x0635 # ARABIC LETTER SAD -0xD6 0x0636 # ARABIC LETTER DAD -0xD7 0x0637 # ARABIC LETTER TAH -0xD8 0x0638 # ARABIC LETTER ZAH -0xD9 0x0639 # ARABIC LETTER AIN -0xDA 0x063A # ARABIC LETTER GHAIN -0xE0 0x0640 # ARABIC TATWEEL -0xE1 0x0641 # ARABIC LETTER FEH -0xE2 0x0642 # ARABIC LETTER QAF -0xE3 0x0643 # ARABIC LETTER KAF -0xE4 0x0644 # ARABIC LETTER LAM -0xE5 0x0645 # ARABIC LETTER MEEM -0xE6 0x0646 # ARABIC LETTER NOON -0xE7 0x0647 # ARABIC LETTER HEH -0xE8 0x0648 # ARABIC LETTER WAW -0xE9 0x0649 # ARABIC LETTER ALEF MAKSURA -0xEA 0x064A # ARABIC LETTER YEH -0xEB 0x064B # ARABIC FATHATAN -0xEC 0x064C # ARABIC DAMMATAN -0xED 0x064D # ARABIC KASRATAN -0xEE 0x064E # ARABIC FATHA -0xEF 0x064F # ARABIC DAMMA -0xF0 0x0650 # ARABIC KASRA -0xF1 0x0651 # ARABIC SHADDA -0xF2 0x0652 # ARABIC SUKUN diff --git a/program/lib/encoding/ISO-8859-7.map b/program/lib/encoding/ISO-8859-7.map deleted file mode 100644 index bc46b7471..000000000 --- a/program/lib/encoding/ISO-8859-7.map +++ /dev/null @@ -1,308 +0,0 @@ -# -# Name: ISO 8859-7:2003 to Unicode -# Unicode version: 4.0 -# Table version: 2.0 -# Table format: Format A -# Date: 2003-Nov-12 -# Authors: Ken Whistler <kenw@sybase.com> -# -# Copyright (c) 1991-2003 Unicode, Inc. All Rights reserved. -# -# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -# No claims are made as to fitness for any particular purpose. No -# warranties of any kind are expressed or implied. The recipient -# agrees to determine applicability of information provided. If this -# file has been provided on optical media by Unicode, Inc., the sole -# remedy for any claim will be exchange of defective media within 90 -# days of receipt. -# -# Unicode, Inc. hereby grants the right to freely use the information -# supplied in this file in the creation of products supporting the -# Unicode Standard, and to make copies of this file in any form for -# internal or external distribution as long as this notice remains -# attached. -# -# General notes: -# -# This table contains the data the Unicode Consortium has on how -# ISO 8859-7:2003 characters map into Unicode. -# -# ISO 8859-7:1987 is equivalent to ISO-IR-126, ELOT 928, -# and ECMA 118. ISO 8859-7:2003 adds two currency signs -# and one other character not in the earlier standard. -# -# Format: Three tab-separated columns -# Column #1 is the ISO 8859-7 code (in hex as 0xXX) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 the Unicode name (follows a comment sign, '#') -# -# The entries are in ISO 8859-7 order. -# -# Version history -# 1.0 version updates 0.1 version by adding mappings for all -# control characters. -# Remap 0xA1 to U+2018 (instead of 0x02BD) to match text of 8859-7 -# Remap 0xA2 to U+2019 (instead of 0x02BC) to match text of 8859-7 -# -# 2.0 version updates 1.0 version by adding mappings for the -# three newly added characters 0xA4, 0xA5, 0xAA. -# -# Updated versions of this file may be found in: -# <http://www.unicode.org/Public/MAPPINGS/> -# -# Any comments or problems, contact the Unicode Consortium at: -# <http://www.unicode.org/reporting.html> -# -0x00 0x0000 # NULL -0x01 0x0001 # START OF HEADING -0x02 0x0002 # START OF TEXT -0x03 0x0003 # END OF TEXT -0x04 0x0004 # END OF TRANSMISSION -0x05 0x0005 # ENQUIRY -0x06 0x0006 # ACKNOWLEDGE -0x07 0x0007 # BELL -0x08 0x0008 # BACKSPACE -0x09 0x0009 # HORIZONTAL TABULATION -0x0A 0x000A # LINE FEED -0x0B 0x000B # VERTICAL TABULATION -0x0C 0x000C # FORM FEED -0x0D 0x000D # CARRIAGE RETURN -0x0E 0x000E # SHIFT OUT -0x0F 0x000F # SHIFT IN -0x10 0x0010 # DATA LINK ESCAPE -0x11 0x0011 # DEVICE CONTROL ONE -0x12 0x0012 # DEVICE CONTROL TWO -0x13 0x0013 # DEVICE CONTROL THREE -0x14 0x0014 # DEVICE CONTROL FOUR -0x15 0x0015 # NEGATIVE ACKNOWLEDGE -0x16 0x0016 # SYNCHRONOUS IDLE -0x17 0x0017 # END OF TRANSMISSION BLOCK -0x18 0x0018 # CANCEL -0x19 0x0019 # END OF MEDIUM -0x1A 0x001A # SUBSTITUTE -0x1B 0x001B # ESCAPE -0x1C 0x001C # FILE SEPARATOR -0x1D 0x001D # GROUP SEPARATOR -0x1E 0x001E # RECORD SEPARATOR -0x1F 0x001F # UNIT SEPARATOR -0x20 0x0020 # SPACE -0x21 0x0021 # EXCLAMATION MARK -0x22 0x0022 # QUOTATION MARK -0x23 0x0023 # NUMBER SIGN -0x24 0x0024 # DOLLAR SIGN -0x25 0x0025 # PERCENT SIGN -0x26 0x0026 # AMPERSAND -0x27 0x0027 # APOSTROPHE -0x28 0x0028 # LEFT PARENTHESIS -0x29 0x0029 # RIGHT PARENTHESIS -0x2A 0x002A # ASTERISK -0x2B 0x002B # PLUS SIGN -0x2C 0x002C # COMMA -0x2D 0x002D # HYPHEN-MINUS -0x2E 0x002E # FULL STOP -0x2F 0x002F # SOLIDUS -0x30 0x0030 # DIGIT ZERO -0x31 0x0031 # DIGIT ONE -0x32 0x0032 # DIGIT TWO -0x33 0x0033 # DIGIT THREE -0x34 0x0034 # DIGIT FOUR -0x35 0x0035 # DIGIT FIVE -0x36 0x0036 # DIGIT SIX -0x37 0x0037 # DIGIT SEVEN -0x38 0x0038 # DIGIT EIGHT -0x39 0x0039 # DIGIT NINE -0x3A 0x003A # COLON -0x3B 0x003B # SEMICOLON -0x3C 0x003C # LESS-THAN SIGN -0x3D 0x003D # EQUALS SIGN -0x3E 0x003E # GREATER-THAN SIGN -0x3F 0x003F # QUESTION MARK -0x40 0x0040 # COMMERCIAL AT -0x41 0x0041 # LATIN CAPITAL LETTER A -0x42 0x0042 # LATIN CAPITAL LETTER B -0x43 0x0043 # LATIN CAPITAL LETTER C -0x44 0x0044 # LATIN CAPITAL LETTER D -0x45 0x0045 # LATIN CAPITAL LETTER E -0x46 0x0046 # LATIN CAPITAL LETTER F -0x47 0x0047 # LATIN CAPITAL LETTER G -0x48 0x0048 # LATIN CAPITAL LETTER H -0x49 0x0049 # LATIN CAPITAL LETTER I -0x4A 0x004A # LATIN CAPITAL LETTER J -0x4B 0x004B # LATIN CAPITAL LETTER K -0x4C 0x004C # LATIN CAPITAL LETTER L -0x4D 0x004D # LATIN CAPITAL LETTER M -0x4E 0x004E # LATIN CAPITAL LETTER N -0x4F 0x004F # LATIN CAPITAL LETTER O -0x50 0x0050 # LATIN CAPITAL LETTER P -0x51 0x0051 # LATIN CAPITAL LETTER Q -0x52 0x0052 # LATIN CAPITAL LETTER R -0x53 0x0053 # LATIN CAPITAL LETTER S -0x54 0x0054 # LATIN CAPITAL LETTER T -0x55 0x0055 # LATIN CAPITAL LETTER U -0x56 0x0056 # LATIN CAPITAL LETTER V -0x57 0x0057 # LATIN CAPITAL LETTER W -0x58 0x0058 # LATIN CAPITAL LETTER X -0x59 0x0059 # LATIN CAPITAL LETTER Y -0x5A 0x005A # LATIN CAPITAL LETTER Z -0x5B 0x005B # LEFT SQUARE BRACKET -0x5C 0x005C # REVERSE SOLIDUS -0x5D 0x005D # RIGHT SQUARE BRACKET -0x5E 0x005E # CIRCUMFLEX ACCENT -0x5F 0x005F # LOW LINE -0x60 0x0060 # GRAVE ACCENT -0x61 0x0061 # LATIN SMALL LETTER A -0x62 0x0062 # LATIN SMALL LETTER B -0x63 0x0063 # LATIN SMALL LETTER C -0x64 0x0064 # LATIN SMALL LETTER D -0x65 0x0065 # LATIN SMALL LETTER E -0x66 0x0066 # LATIN SMALL LETTER F -0x67 0x0067 # LATIN SMALL LETTER G -0x68 0x0068 # LATIN SMALL LETTER H -0x69 0x0069 # LATIN SMALL LETTER I -0x6A 0x006A # LATIN SMALL LETTER J -0x6B 0x006B # LATIN SMALL LETTER K -0x6C 0x006C # LATIN SMALL LETTER L -0x6D 0x006D # LATIN SMALL LETTER M -0x6E 0x006E # LATIN SMALL LETTER N -0x6F 0x006F # LATIN SMALL LETTER O -0x70 0x0070 # LATIN SMALL LETTER P -0x71 0x0071 # LATIN SMALL LETTER Q -0x72 0x0072 # LATIN SMALL LETTER R -0x73 0x0073 # LATIN SMALL LETTER S -0x74 0x0074 # LATIN SMALL LETTER T -0x75 0x0075 # LATIN SMALL LETTER U -0x76 0x0076 # LATIN SMALL LETTER V -0x77 0x0077 # LATIN SMALL LETTER W -0x78 0x0078 # LATIN SMALL LETTER X -0x79 0x0079 # LATIN SMALL LETTER Y -0x7A 0x007A # LATIN SMALL LETTER Z -0x7B 0x007B # LEFT CURLY BRACKET -0x7C 0x007C # VERTICAL LINE -0x7D 0x007D # RIGHT CURLY BRACKET -0x7E 0x007E # TILDE -0x7F 0x007F # DELETE -0x80 0x0080 # <control> -0x81 0x0081 # <control> -0x82 0x0082 # <control> -0x83 0x0083 # <control> -0x84 0x0084 # <control> -0x85 0x0085 # <control> -0x86 0x0086 # <control> -0x87 0x0087 # <control> -0x88 0x0088 # <control> -0x89 0x0089 # <control> -0x8A 0x008A # <control> -0x8B 0x008B # <control> -0x8C 0x008C # <control> -0x8D 0x008D # <control> -0x8E 0x008E # <control> -0x8F 0x008F # <control> -0x90 0x0090 # <control> -0x91 0x0091 # <control> -0x92 0x0092 # <control> -0x93 0x0093 # <control> -0x94 0x0094 # <control> -0x95 0x0095 # <control> -0x96 0x0096 # <control> -0x97 0x0097 # <control> -0x98 0x0098 # <control> -0x99 0x0099 # <control> -0x9A 0x009A # <control> -0x9B 0x009B # <control> -0x9C 0x009C # <control> -0x9D 0x009D # <control> -0x9E 0x009E # <control> -0x9F 0x009F # <control> -0xA0 0x00A0 # NO-BREAK SPACE -0xA1 0x2018 # LEFT SINGLE QUOTATION MARK -0xA2 0x2019 # RIGHT SINGLE QUOTATION MARK -0xA3 0x00A3 # POUND SIGN -0xA4 0x20AC # EURO SIGN -0xA5 0x20AF # DRACHMA SIGN -0xA6 0x00A6 # BROKEN BAR -0xA7 0x00A7 # SECTION SIGN -0xA8 0x00A8 # DIAERESIS -0xA9 0x00A9 # COPYRIGHT SIGN -0xAA 0x037A # GREEK YPOGEGRAMMENI -0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -0xAC 0x00AC # NOT SIGN -0xAD 0x00AD # SOFT HYPHEN -0xAF 0x2015 # HORIZONTAL BAR -0xB0 0x00B0 # DEGREE SIGN -0xB1 0x00B1 # PLUS-MINUS SIGN -0xB2 0x00B2 # SUPERSCRIPT TWO -0xB3 0x00B3 # SUPERSCRIPT THREE -0xB4 0x0384 # GREEK TONOS -0xB5 0x0385 # GREEK DIALYTIKA TONOS -0xB6 0x0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS -0xB7 0x00B7 # MIDDLE DOT -0xB8 0x0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS -0xB9 0x0389 # GREEK CAPITAL LETTER ETA WITH TONOS -0xBA 0x038A # GREEK CAPITAL LETTER IOTA WITH TONOS -0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -0xBC 0x038C # GREEK CAPITAL LETTER OMICRON WITH TONOS -0xBD 0x00BD # VULGAR FRACTION ONE HALF -0xBE 0x038E # GREEK CAPITAL LETTER UPSILON WITH TONOS -0xBF 0x038F # GREEK CAPITAL LETTER OMEGA WITH TONOS -0xC0 0x0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -0xC1 0x0391 # GREEK CAPITAL LETTER ALPHA -0xC2 0x0392 # GREEK CAPITAL LETTER BETA -0xC3 0x0393 # GREEK CAPITAL LETTER GAMMA -0xC4 0x0394 # GREEK CAPITAL LETTER DELTA -0xC5 0x0395 # GREEK CAPITAL LETTER EPSILON -0xC6 0x0396 # GREEK CAPITAL LETTER ZETA -0xC7 0x0397 # GREEK CAPITAL LETTER ETA -0xC8 0x0398 # GREEK CAPITAL LETTER THETA -0xC9 0x0399 # GREEK CAPITAL LETTER IOTA -0xCA 0x039A # GREEK CAPITAL LETTER KAPPA -0xCB 0x039B # GREEK CAPITAL LETTER LAMDA -0xCC 0x039C # GREEK CAPITAL LETTER MU -0xCD 0x039D # GREEK CAPITAL LETTER NU -0xCE 0x039E # GREEK CAPITAL LETTER XI -0xCF 0x039F # GREEK CAPITAL LETTER OMICRON -0xD0 0x03A0 # GREEK CAPITAL LETTER PI -0xD1 0x03A1 # GREEK CAPITAL LETTER RHO -0xD3 0x03A3 # GREEK CAPITAL LETTER SIGMA -0xD4 0x03A4 # GREEK CAPITAL LETTER TAU -0xD5 0x03A5 # GREEK CAPITAL LETTER UPSILON -0xD6 0x03A6 # GREEK CAPITAL LETTER PHI -0xD7 0x03A7 # GREEK CAPITAL LETTER CHI -0xD8 0x03A8 # GREEK CAPITAL LETTER PSI -0xD9 0x03A9 # GREEK CAPITAL LETTER OMEGA -0xDA 0x03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA -0xDB 0x03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA -0xDC 0x03AC # GREEK SMALL LETTER ALPHA WITH TONOS -0xDD 0x03AD # GREEK SMALL LETTER EPSILON WITH TONOS -0xDE 0x03AE # GREEK SMALL LETTER ETA WITH TONOS -0xDF 0x03AF # GREEK SMALL LETTER IOTA WITH TONOS -0xE0 0x03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -0xE1 0x03B1 # GREEK SMALL LETTER ALPHA -0xE2 0x03B2 # GREEK SMALL LETTER BETA -0xE3 0x03B3 # GREEK SMALL LETTER GAMMA -0xE4 0x03B4 # GREEK SMALL LETTER DELTA -0xE5 0x03B5 # GREEK SMALL LETTER EPSILON -0xE6 0x03B6 # GREEK SMALL LETTER ZETA -0xE7 0x03B7 # GREEK SMALL LETTER ETA -0xE8 0x03B8 # GREEK SMALL LETTER THETA -0xE9 0x03B9 # GREEK SMALL LETTER IOTA -0xEA 0x03BA # GREEK SMALL LETTER KAPPA -0xEB 0x03BB # GREEK SMALL LETTER LAMDA -0xEC 0x03BC # GREEK SMALL LETTER MU -0xED 0x03BD # GREEK SMALL LETTER NU -0xEE 0x03BE # GREEK SMALL LETTER XI -0xEF 0x03BF # GREEK SMALL LETTER OMICRON -0xF0 0x03C0 # GREEK SMALL LETTER PI -0xF1 0x03C1 # GREEK SMALL LETTER RHO -0xF2 0x03C2 # GREEK SMALL LETTER FINAL SIGMA -0xF3 0x03C3 # GREEK SMALL LETTER SIGMA -0xF4 0x03C4 # GREEK SMALL LETTER TAU -0xF5 0x03C5 # GREEK SMALL LETTER UPSILON -0xF6 0x03C6 # GREEK SMALL LETTER PHI -0xF7 0x03C7 # GREEK SMALL LETTER CHI -0xF8 0x03C8 # GREEK SMALL LETTER PSI -0xF9 0x03C9 # GREEK SMALL LETTER OMEGA -0xFA 0x03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA -0xFB 0x03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA -0xFC 0x03CC # GREEK SMALL LETTER OMICRON WITH TONOS -0xFD 0x03CD # GREEK SMALL LETTER UPSILON WITH TONOS -0xFE 0x03CE # GREEK SMALL LETTER OMEGA WITH TONOS diff --git a/program/lib/encoding/ISO-8859-8.map b/program/lib/encoding/ISO-8859-8.map deleted file mode 100644 index bc8da4c7f..000000000 --- a/program/lib/encoding/ISO-8859-8.map +++ /dev/null @@ -1,270 +0,0 @@ -# -# Name: ISO/IEC 8859-8:1999 to Unicode -# Unicode version: 3.0 -# Table version: 1.1 -# Table format: Format A -# Date: 2000-Jan-03 -# Authors: Ken Whistler <kenw@sybase.com> -# -# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. -# -# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -# No claims are made as to fitness for any particular purpose. No -# warranties of any kind are expressed or implied. The recipient -# agrees to determine applicability of information provided. If this -# file has been provided on optical media by Unicode, Inc., the sole -# remedy for any claim will be exchange of defective media within 90 -# days of receipt. -# -# Unicode, Inc. hereby grants the right to freely use the information -# supplied in this file in the creation of products supporting the -# Unicode Standard, and to make copies of this file in any form for -# internal or external distribution as long as this notice remains -# attached. -# -# General notes: -# -# This table contains the data the Unicode Consortium has on how -# ISO/IEC 8859-8:1999 characters map into Unicode. -# -# Format: Three tab-separated columns -# Column #1 is the ISO/IEC 8859-8 code (in hex as 0xXX) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 the Unicode name (follows a comment sign, '#') -# -# The entries are in ISO/IEC 8859-8 order. -# -# Version history -# 1.0 version updates 0.1 version by adding mappings for all -# control characters. -# 1.1 version updates to the published 8859-8:1999, correcting -# the mapping of 0xAF and adding mappings for LRM and RLM. -# -# Updated versions of this file may be found in: -# <ftp://ftp.unicode.org/Public/MAPPINGS/> -# -# Any comments or problems, contact <errata@unicode.org> -# Please note that <errata@unicode.org> is an archival address; -# notices will be checked, but do not expect an immediate response. -# -0x00 0x0000 # NULL -0x01 0x0001 # START OF HEADING -0x02 0x0002 # START OF TEXT -0x03 0x0003 # END OF TEXT -0x04 0x0004 # END OF TRANSMISSION -0x05 0x0005 # ENQUIRY -0x06 0x0006 # ACKNOWLEDGE -0x07 0x0007 # BELL -0x08 0x0008 # BACKSPACE -0x09 0x0009 # HORIZONTAL TABULATION -0x0A 0x000A # LINE FEED -0x0B 0x000B # VERTICAL TABULATION -0x0C 0x000C # FORM FEED -0x0D 0x000D # CARRIAGE RETURN -0x0E 0x000E # SHIFT OUT -0x0F 0x000F # SHIFT IN -0x10 0x0010 # DATA LINK ESCAPE -0x11 0x0011 # DEVICE CONTROL ONE -0x12 0x0012 # DEVICE CONTROL TWO -0x13 0x0013 # DEVICE CONTROL THREE -0x14 0x0014 # DEVICE CONTROL FOUR -0x15 0x0015 # NEGATIVE ACKNOWLEDGE -0x16 0x0016 # SYNCHRONOUS IDLE -0x17 0x0017 # END OF TRANSMISSION BLOCK -0x18 0x0018 # CANCEL -0x19 0x0019 # END OF MEDIUM -0x1A 0x001A # SUBSTITUTE -0x1B 0x001B # ESCAPE -0x1C 0x001C # FILE SEPARATOR -0x1D 0x001D # GROUP SEPARATOR -0x1E 0x001E # RECORD SEPARATOR -0x1F 0x001F # UNIT SEPARATOR -0x20 0x0020 # SPACE -0x21 0x0021 # EXCLAMATION MARK -0x22 0x0022 # QUOTATION MARK -0x23 0x0023 # NUMBER SIGN -0x24 0x0024 # DOLLAR SIGN -0x25 0x0025 # PERCENT SIGN -0x26 0x0026 # AMPERSAND -0x27 0x0027 # APOSTROPHE -0x28 0x0028 # LEFT PARENTHESIS -0x29 0x0029 # RIGHT PARENTHESIS -0x2A 0x002A # ASTERISK -0x2B 0x002B # PLUS SIGN -0x2C 0x002C # COMMA -0x2D 0x002D # HYPHEN-MINUS -0x2E 0x002E # FULL STOP -0x2F 0x002F # SOLIDUS -0x30 0x0030 # DIGIT ZERO -0x31 0x0031 # DIGIT ONE -0x32 0x0032 # DIGIT TWO -0x33 0x0033 # DIGIT THREE -0x34 0x0034 # DIGIT FOUR -0x35 0x0035 # DIGIT FIVE -0x36 0x0036 # DIGIT SIX -0x37 0x0037 # DIGIT SEVEN -0x38 0x0038 # DIGIT EIGHT -0x39 0x0039 # DIGIT NINE -0x3A 0x003A # COLON -0x3B 0x003B # SEMICOLON -0x3C 0x003C # LESS-THAN SIGN -0x3D 0x003D # EQUALS SIGN -0x3E 0x003E # GREATER-THAN SIGN -0x3F 0x003F # QUESTION MARK -0x40 0x0040 # COMMERCIAL AT -0x41 0x0041 # LATIN CAPITAL LETTER A -0x42 0x0042 # LATIN CAPITAL LETTER B -0x43 0x0043 # LATIN CAPITAL LETTER C -0x44 0x0044 # LATIN CAPITAL LETTER D -0x45 0x0045 # LATIN CAPITAL LETTER E -0x46 0x0046 # LATIN CAPITAL LETTER F -0x47 0x0047 # LATIN CAPITAL LETTER G -0x48 0x0048 # LATIN CAPITAL LETTER H -0x49 0x0049 # LATIN CAPITAL LETTER I -0x4A 0x004A # LATIN CAPITAL LETTER J -0x4B 0x004B # LATIN CAPITAL LETTER K -0x4C 0x004C # LATIN CAPITAL LETTER L -0x4D 0x004D # LATIN CAPITAL LETTER M -0x4E 0x004E # LATIN CAPITAL LETTER N -0x4F 0x004F # LATIN CAPITAL LETTER O -0x50 0x0050 # LATIN CAPITAL LETTER P -0x51 0x0051 # LATIN CAPITAL LETTER Q -0x52 0x0052 # LATIN CAPITAL LETTER R -0x53 0x0053 # LATIN CAPITAL LETTER S -0x54 0x0054 # LATIN CAPITAL LETTER T -0x55 0x0055 # LATIN CAPITAL LETTER U -0x56 0x0056 # LATIN CAPITAL LETTER V -0x57 0x0057 # LATIN CAPITAL LETTER W -0x58 0x0058 # LATIN CAPITAL LETTER X -0x59 0x0059 # LATIN CAPITAL LETTER Y -0x5A 0x005A # LATIN CAPITAL LETTER Z -0x5B 0x005B # LEFT SQUARE BRACKET -0x5C 0x005C # REVERSE SOLIDUS -0x5D 0x005D # RIGHT SQUARE BRACKET -0x5E 0x005E # CIRCUMFLEX ACCENT -0x5F 0x005F # LOW LINE -0x60 0x0060 # GRAVE ACCENT -0x61 0x0061 # LATIN SMALL LETTER A -0x62 0x0062 # LATIN SMALL LETTER B -0x63 0x0063 # LATIN SMALL LETTER C -0x64 0x0064 # LATIN SMALL LETTER D -0x65 0x0065 # LATIN SMALL LETTER E -0x66 0x0066 # LATIN SMALL LETTER F -0x67 0x0067 # LATIN SMALL LETTER G -0x68 0x0068 # LATIN SMALL LETTER H -0x69 0x0069 # LATIN SMALL LETTER I -0x6A 0x006A # LATIN SMALL LETTER J -0x6B 0x006B # LATIN SMALL LETTER K -0x6C 0x006C # LATIN SMALL LETTER L -0x6D 0x006D # LATIN SMALL LETTER M -0x6E 0x006E # LATIN SMALL LETTER N -0x6F 0x006F # LATIN SMALL LETTER O -0x70 0x0070 # LATIN SMALL LETTER P -0x71 0x0071 # LATIN SMALL LETTER Q -0x72 0x0072 # LATIN SMALL LETTER R -0x73 0x0073 # LATIN SMALL LETTER S -0x74 0x0074 # LATIN SMALL LETTER T -0x75 0x0075 # LATIN SMALL LETTER U -0x76 0x0076 # LATIN SMALL LETTER V -0x77 0x0077 # LATIN SMALL LETTER W -0x78 0x0078 # LATIN SMALL LETTER X -0x79 0x0079 # LATIN SMALL LETTER Y -0x7A 0x007A # LATIN SMALL LETTER Z -0x7B 0x007B # LEFT CURLY BRACKET -0x7C 0x007C # VERTICAL LINE -0x7D 0x007D # RIGHT CURLY BRACKET -0x7E 0x007E # TILDE -0x7F 0x007F # DELETE -0x80 0x0080 # <control> -0x81 0x0081 # <control> -0x82 0x0082 # <control> -0x83 0x0083 # <control> -0x84 0x0084 # <control> -0x85 0x0085 # <control> -0x86 0x0086 # <control> -0x87 0x0087 # <control> -0x88 0x0088 # <control> -0x89 0x0089 # <control> -0x8A 0x008A # <control> -0x8B 0x008B # <control> -0x8C 0x008C # <control> -0x8D 0x008D # <control> -0x8E 0x008E # <control> -0x8F 0x008F # <control> -0x90 0x0090 # <control> -0x91 0x0091 # <control> -0x92 0x0092 # <control> -0x93 0x0093 # <control> -0x94 0x0094 # <control> -0x95 0x0095 # <control> -0x96 0x0096 # <control> -0x97 0x0097 # <control> -0x98 0x0098 # <control> -0x99 0x0099 # <control> -0x9A 0x009A # <control> -0x9B 0x009B # <control> -0x9C 0x009C # <control> -0x9D 0x009D # <control> -0x9E 0x009E # <control> -0x9F 0x009F # <control> -0xA0 0x00A0 # NO-BREAK SPACE -0xA2 0x00A2 # CENT SIGN -0xA3 0x00A3 # POUND SIGN -0xA4 0x00A4 # CURRENCY SIGN -0xA5 0x00A5 # YEN SIGN -0xA6 0x00A6 # BROKEN BAR -0xA7 0x00A7 # SECTION SIGN -0xA8 0x00A8 # DIAERESIS -0xA9 0x00A9 # COPYRIGHT SIGN -0xAA 0x00D7 # MULTIPLICATION SIGN -0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -0xAC 0x00AC # NOT SIGN -0xAD 0x00AD # SOFT HYPHEN -0xAE 0x00AE # REGISTERED SIGN -0xAF 0x00AF # MACRON -0xB0 0x00B0 # DEGREE SIGN -0xB1 0x00B1 # PLUS-MINUS SIGN -0xB2 0x00B2 # SUPERSCRIPT TWO -0xB3 0x00B3 # SUPERSCRIPT THREE -0xB4 0x00B4 # ACUTE ACCENT -0xB5 0x00B5 # MICRO SIGN -0xB6 0x00B6 # PILCROW SIGN -0xB7 0x00B7 # MIDDLE DOT -0xB8 0x00B8 # CEDILLA -0xB9 0x00B9 # SUPERSCRIPT ONE -0xBA 0x00F7 # DIVISION SIGN -0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -0xBC 0x00BC # VULGAR FRACTION ONE QUARTER -0xBD 0x00BD # VULGAR FRACTION ONE HALF -0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS -0xDF 0x2017 # DOUBLE LOW LINE -0xE0 0x05D0 # HEBREW LETTER ALEF -0xE1 0x05D1 # HEBREW LETTER BET -0xE2 0x05D2 # HEBREW LETTER GIMEL -0xE3 0x05D3 # HEBREW LETTER DALET -0xE4 0x05D4 # HEBREW LETTER HE -0xE5 0x05D5 # HEBREW LETTER VAV -0xE6 0x05D6 # HEBREW LETTER ZAYIN -0xE7 0x05D7 # HEBREW LETTER HET -0xE8 0x05D8 # HEBREW LETTER TET -0xE9 0x05D9 # HEBREW LETTER YOD -0xEA 0x05DA # HEBREW LETTER FINAL KAF -0xEB 0x05DB # HEBREW LETTER KAF -0xEC 0x05DC # HEBREW LETTER LAMED -0xED 0x05DD # HEBREW LETTER FINAL MEM -0xEE 0x05DE # HEBREW LETTER MEM -0xEF 0x05DF # HEBREW LETTER FINAL NUN -0xF0 0x05E0 # HEBREW LETTER NUN -0xF1 0x05E1 # HEBREW LETTER SAMEKH -0xF2 0x05E2 # HEBREW LETTER AYIN -0xF3 0x05E3 # HEBREW LETTER FINAL PE -0xF4 0x05E4 # HEBREW LETTER PE -0xF5 0x05E5 # HEBREW LETTER FINAL TSADI -0xF6 0x05E6 # HEBREW LETTER TSADI -0xF7 0x05E7 # HEBREW LETTER QOF -0xF8 0x05E8 # HEBREW LETTER RESH -0xF9 0x05E9 # HEBREW LETTER SHIN -0xFA 0x05EA # HEBREW LETTER TAV -0xFD 0x200E # LEFT-TO-RIGHT MARK -0xFE 0x200F # RIGHT-TO-LEFT MARK - diff --git a/program/lib/encoding/ISO-8859-9.map b/program/lib/encoding/ISO-8859-9.map deleted file mode 100644 index 22901f107..000000000 --- a/program/lib/encoding/ISO-8859-9.map +++ /dev/null @@ -1,307 +0,0 @@ -# -# Name: ISO/IEC 8859-9:1999 to Unicode -# Unicode version: 3.0 -# Table version: 1.0 -# Table format: Format A -# Date: 1999 July 27 -# Authors: Ken Whistler <kenw@sybase.com> -# -# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. -# -# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -# No claims are made as to fitness for any particular purpose. No -# warranties of any kind are expressed or implied. The recipient -# agrees to determine applicability of information provided. If this -# file has been provided on magnetic media by Unicode, Inc., the sole -# remedy for any claim will be exchange of defective media within 90 -# days of receipt. -# -# Unicode, Inc. hereby grants the right to freely use the information -# supplied in this file in the creation of products supporting the -# Unicode Standard, and to make copies of this file in any form for -# internal or external distribution as long as this notice remains -# attached. -# -# General notes: -# -# This table contains the data the Unicode Consortium has on how -# ISO/IEC 8859-9:1999 characters map into Unicode. -# -# Format: Three tab-separated columns -# Column #1 is the ISO/IEC 8859-9 code (in hex as 0xXX) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 the Unicode name (follows a comment sign, '#') -# -# The entries are in ISO/IEC 8859-9 order. -# -# ISO/IEC 8859-9 is also equivalent to ISO-IR-148. -# -# Version history -# 1.0 version updates 0.1 version by adding mappings for all -# control characters. -# -# Updated versions of this file may be found in: -# <ftp://ftp.unicode.org/Public/MAPPINGS/> -# -# Any comments or problems, contact <errata@unicode.org> -# Please note that <errata@unicode.org> is an archival address; -# notices will be checked, but do not expect an immediate response. -# -0x00 0x0000 # NULL -0x01 0x0001 # START OF HEADING -0x02 0x0002 # START OF TEXT -0x03 0x0003 # END OF TEXT -0x04 0x0004 # END OF TRANSMISSION -0x05 0x0005 # ENQUIRY -0x06 0x0006 # ACKNOWLEDGE -0x07 0x0007 # BELL -0x08 0x0008 # BACKSPACE -0x09 0x0009 # HORIZONTAL TABULATION -0x0A 0x000A # LINE FEED -0x0B 0x000B # VERTICAL TABULATION -0x0C 0x000C # FORM FEED -0x0D 0x000D # CARRIAGE RETURN -0x0E 0x000E # SHIFT OUT -0x0F 0x000F # SHIFT IN -0x10 0x0010 # DATA LINK ESCAPE -0x11 0x0011 # DEVICE CONTROL ONE -0x12 0x0012 # DEVICE CONTROL TWO -0x13 0x0013 # DEVICE CONTROL THREE -0x14 0x0014 # DEVICE CONTROL FOUR -0x15 0x0015 # NEGATIVE ACKNOWLEDGE -0x16 0x0016 # SYNCHRONOUS IDLE -0x17 0x0017 # END OF TRANSMISSION BLOCK -0x18 0x0018 # CANCEL -0x19 0x0019 # END OF MEDIUM -0x1A 0x001A # SUBSTITUTE -0x1B 0x001B # ESCAPE -0x1C 0x001C # FILE SEPARATOR -0x1D 0x001D # GROUP SEPARATOR -0x1E 0x001E # RECORD SEPARATOR -0x1F 0x001F # UNIT SEPARATOR -0x20 0x0020 # SPACE -0x21 0x0021 # EXCLAMATION MARK -0x22 0x0022 # QUOTATION MARK -0x23 0x0023 # NUMBER SIGN -0x24 0x0024 # DOLLAR SIGN -0x25 0x0025 # PERCENT SIGN -0x26 0x0026 # AMPERSAND -0x27 0x0027 # APOSTROPHE -0x28 0x0028 # LEFT PARENTHESIS -0x29 0x0029 # RIGHT PARENTHESIS -0x2A 0x002A # ASTERISK -0x2B 0x002B # PLUS SIGN -0x2C 0x002C # COMMA -0x2D 0x002D # HYPHEN-MINUS -0x2E 0x002E # FULL STOP -0x2F 0x002F # SOLIDUS -0x30 0x0030 # DIGIT ZERO -0x31 0x0031 # DIGIT ONE -0x32 0x0032 # DIGIT TWO -0x33 0x0033 # DIGIT THREE -0x34 0x0034 # DIGIT FOUR -0x35 0x0035 # DIGIT FIVE -0x36 0x0036 # DIGIT SIX -0x37 0x0037 # DIGIT SEVEN -0x38 0x0038 # DIGIT EIGHT -0x39 0x0039 # DIGIT NINE -0x3A 0x003A # COLON -0x3B 0x003B # SEMICOLON -0x3C 0x003C # LESS-THAN SIGN -0x3D 0x003D # EQUALS SIGN -0x3E 0x003E # GREATER-THAN SIGN -0x3F 0x003F # QUESTION MARK -0x40 0x0040 # COMMERCIAL AT -0x41 0x0041 # LATIN CAPITAL LETTER A -0x42 0x0042 # LATIN CAPITAL LETTER B -0x43 0x0043 # LATIN CAPITAL LETTER C -0x44 0x0044 # LATIN CAPITAL LETTER D -0x45 0x0045 # LATIN CAPITAL LETTER E -0x46 0x0046 # LATIN CAPITAL LETTER F -0x47 0x0047 # LATIN CAPITAL LETTER G -0x48 0x0048 # LATIN CAPITAL LETTER H -0x49 0x0049 # LATIN CAPITAL LETTER I -0x4A 0x004A # LATIN CAPITAL LETTER J -0x4B 0x004B # LATIN CAPITAL LETTER K -0x4C 0x004C # LATIN CAPITAL LETTER L -0x4D 0x004D # LATIN CAPITAL LETTER M -0x4E 0x004E # LATIN CAPITAL LETTER N -0x4F 0x004F # LATIN CAPITAL LETTER O -0x50 0x0050 # LATIN CAPITAL LETTER P -0x51 0x0051 # LATIN CAPITAL LETTER Q -0x52 0x0052 # LATIN CAPITAL LETTER R -0x53 0x0053 # LATIN CAPITAL LETTER S -0x54 0x0054 # LATIN CAPITAL LETTER T -0x55 0x0055 # LATIN CAPITAL LETTER U -0x56 0x0056 # LATIN CAPITAL LETTER V -0x57 0x0057 # LATIN CAPITAL LETTER W -0x58 0x0058 # LATIN CAPITAL LETTER X -0x59 0x0059 # LATIN CAPITAL LETTER Y -0x5A 0x005A # LATIN CAPITAL LETTER Z -0x5B 0x005B # LEFT SQUARE BRACKET -0x5C 0x005C # REVERSE SOLIDUS -0x5D 0x005D # RIGHT SQUARE BRACKET -0x5E 0x005E # CIRCUMFLEX ACCENT -0x5F 0x005F # LOW LINE -0x60 0x0060 # GRAVE ACCENT -0x61 0x0061 # LATIN SMALL LETTER A -0x62 0x0062 # LATIN SMALL LETTER B -0x63 0x0063 # LATIN SMALL LETTER C -0x64 0x0064 # LATIN SMALL LETTER D -0x65 0x0065 # LATIN SMALL LETTER E -0x66 0x0066 # LATIN SMALL LETTER F -0x67 0x0067 # LATIN SMALL LETTER G -0x68 0x0068 # LATIN SMALL LETTER H -0x69 0x0069 # LATIN SMALL LETTER I -0x6A 0x006A # LATIN SMALL LETTER J -0x6B 0x006B # LATIN SMALL LETTER K -0x6C 0x006C # LATIN SMALL LETTER L -0x6D 0x006D # LATIN SMALL LETTER M -0x6E 0x006E # LATIN SMALL LETTER N -0x6F 0x006F # LATIN SMALL LETTER O -0x70 0x0070 # LATIN SMALL LETTER P -0x71 0x0071 # LATIN SMALL LETTER Q -0x72 0x0072 # LATIN SMALL LETTER R -0x73 0x0073 # LATIN SMALL LETTER S -0x74 0x0074 # LATIN SMALL LETTER T -0x75 0x0075 # LATIN SMALL LETTER U -0x76 0x0076 # LATIN SMALL LETTER V -0x77 0x0077 # LATIN SMALL LETTER W -0x78 0x0078 # LATIN SMALL LETTER X -0x79 0x0079 # LATIN SMALL LETTER Y -0x7A 0x007A # LATIN SMALL LETTER Z -0x7B 0x007B # LEFT CURLY BRACKET -0x7C 0x007C # VERTICAL LINE -0x7D 0x007D # RIGHT CURLY BRACKET -0x7E 0x007E # TILDE -0x7F 0x007F # DELETE -0x80 0x0080 # <control> -0x81 0x0081 # <control> -0x82 0x0082 # <control> -0x83 0x0083 # <control> -0x84 0x0084 # <control> -0x85 0x0085 # <control> -0x86 0x0086 # <control> -0x87 0x0087 # <control> -0x88 0x0088 # <control> -0x89 0x0089 # <control> -0x8A 0x008A # <control> -0x8B 0x008B # <control> -0x8C 0x008C # <control> -0x8D 0x008D # <control> -0x8E 0x008E # <control> -0x8F 0x008F # <control> -0x90 0x0090 # <control> -0x91 0x0091 # <control> -0x92 0x0092 # <control> -0x93 0x0093 # <control> -0x94 0x0094 # <control> -0x95 0x0095 # <control> -0x96 0x0096 # <control> -0x97 0x0097 # <control> -0x98 0x0098 # <control> -0x99 0x0099 # <control> -0x9A 0x009A # <control> -0x9B 0x009B # <control> -0x9C 0x009C # <control> -0x9D 0x009D # <control> -0x9E 0x009E # <control> -0x9F 0x009F # <control> -0xA0 0x00A0 # NO-BREAK SPACE -0xA1 0x00A1 # INVERTED EXCLAMATION MARK -0xA2 0x00A2 # CENT SIGN -0xA3 0x00A3 # POUND SIGN -0xA4 0x00A4 # CURRENCY SIGN -0xA5 0x00A5 # YEN SIGN -0xA6 0x00A6 # BROKEN BAR -0xA7 0x00A7 # SECTION SIGN -0xA8 0x00A8 # DIAERESIS -0xA9 0x00A9 # COPYRIGHT SIGN -0xAA 0x00AA # FEMININE ORDINAL INDICATOR -0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -0xAC 0x00AC # NOT SIGN -0xAD 0x00AD # SOFT HYPHEN -0xAE 0x00AE # REGISTERED SIGN -0xAF 0x00AF # MACRON -0xB0 0x00B0 # DEGREE SIGN -0xB1 0x00B1 # PLUS-MINUS SIGN -0xB2 0x00B2 # SUPERSCRIPT TWO -0xB3 0x00B3 # SUPERSCRIPT THREE -0xB4 0x00B4 # ACUTE ACCENT -0xB5 0x00B5 # MICRO SIGN -0xB6 0x00B6 # PILCROW SIGN -0xB7 0x00B7 # MIDDLE DOT -0xB8 0x00B8 # CEDILLA -0xB9 0x00B9 # SUPERSCRIPT ONE -0xBA 0x00BA # MASCULINE ORDINAL INDICATOR -0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -0xBC 0x00BC # VULGAR FRACTION ONE QUARTER -0xBD 0x00BD # VULGAR FRACTION ONE HALF -0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS -0xBF 0x00BF # INVERTED QUESTION MARK -0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE -0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE -0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE -0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS -0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE -0xC6 0x00C6 # LATIN CAPITAL LETTER AE -0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA -0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE -0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE -0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS -0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE -0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE -0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS -0xD0 0x011E # LATIN CAPITAL LETTER G WITH BREVE -0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE -0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE -0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE -0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE -0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS -0xD7 0x00D7 # MULTIPLICATION SIGN -0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE -0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE -0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE -0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX -0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -0xDD 0x0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE -0xDE 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA -0xDF 0x00DF # LATIN SMALL LETTER SHARP S -0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE -0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE -0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX -0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE -0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS -0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE -0xE6 0x00E6 # LATIN SMALL LETTER AE -0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA -0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE -0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE -0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX -0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS -0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE -0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE -0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX -0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS -0xF0 0x011F # LATIN SMALL LETTER G WITH BREVE -0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE -0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE -0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE -0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX -0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE -0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS -0xF7 0x00F7 # DIVISION SIGN -0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE -0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE -0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE -0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX -0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS -0xFD 0x0131 # LATIN SMALL LETTER DOTLESS I -0xFE 0x015F # LATIN SMALL LETTER S WITH CEDILLA -0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS - - diff --git a/program/lib/encoding/KOI8R.map b/program/lib/encoding/KOI8R.map deleted file mode 100644 index 4a17d18e5..000000000 --- a/program/lib/encoding/KOI8R.map +++ /dev/null @@ -1,302 +0,0 @@ -#
-# Name: KOI8-R (RFC1489) to Unicode
-# Unicode version: 3.0
-# Table version: 1.0
-# Table format: Format A
-# Date: 18 August 1999
-# Authors: Helmut Richter <richter@lrz.de>
-#
-# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
-#
-# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
-# No claims are made as to fitness for any particular purpose. No
-# warranties of any kind are expressed or implied. The recipient
-# agrees to determine applicability of information provided. If this
-# file has been provided on optical media by Unicode, Inc., the sole
-# remedy for any claim will be exchange of defective media within 90
-# days of receipt.
-#
-# Unicode, Inc. hereby grants the right to freely use the information
-# supplied in this file in the creation of products supporting the
-# Unicode Standard, and to make copies of this file in any form for
-# internal or external distribution as long as this notice remains
-# attached.
-#
-# General notes:
-#
-# This table contains the data the Unicode Consortium has on how
-# KOI8-R characters map into Unicode. The underlying document is the
-# mapping described in RFC 1489. No statements are made as to whether
-# this mapping is the same as the mapping defined as "Code Page 878"
-# with some vendors.
-#
-# Format: Three tab-separated columns
-# Column #1 is the KOI8-R code (in hex as 0xXX)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 the Unicode name (follows a comment sign, '#')
-#
-# The entries are in KOI8-R order.
-#
-# Version history
-# 1.0 version: created.
-#
-# Any comments or problems, contact <errata@unicode.org>
-# Please note that <errata@unicode.org> is an archival address;
-# notices will be checked, but do not expect an immediate response.
-#
-0x00 0x0000 # NULL
-0x01 0x0001 # START OF HEADING
-0x02 0x0002 # START OF TEXT
-0x03 0x0003 # END OF TEXT
-0x04 0x0004 # END OF TRANSMISSION
-0x05 0x0005 # ENQUIRY
-0x06 0x0006 # ACKNOWLEDGE
-0x07 0x0007 # BELL
-0x08 0x0008 # BACKSPACE
-0x09 0x0009 # HORIZONTAL TABULATION
-0x0A 0x000A # LINE FEED
-0x0B 0x000B # VERTICAL TABULATION
-0x0C 0x000C # FORM FEED
-0x0D 0x000D # CARRIAGE RETURN
-0x0E 0x000E # SHIFT OUT
-0x0F 0x000F # SHIFT IN
-0x10 0x0010 # DATA LINK ESCAPE
-0x11 0x0011 # DEVICE CONTROL ONE
-0x12 0x0012 # DEVICE CONTROL TWO
-0x13 0x0013 # DEVICE CONTROL THREE
-0x14 0x0014 # DEVICE CONTROL FOUR
-0x15 0x0015 # NEGATIVE ACKNOWLEDGE
-0x16 0x0016 # SYNCHRONOUS IDLE
-0x17 0x0017 # END OF TRANSMISSION BLOCK
-0x18 0x0018 # CANCEL
-0x19 0x0019 # END OF MEDIUM
-0x1A 0x001A # SUBSTITUTE
-0x1B 0x001B # ESCAPE
-0x1C 0x001C # FILE SEPARATOR
-0x1D 0x001D # GROUP SEPARATOR
-0x1E 0x001E # RECORD SEPARATOR
-0x1F 0x001F # UNIT SEPARATOR
-0x20 0x0020 # SPACE
-0x21 0x0021 # EXCLAMATION MARK
-0x22 0x0022 # QUOTATION MARK
-0x23 0x0023 # NUMBER SIGN
-0x24 0x0024 # DOLLAR SIGN
-0x25 0x0025 # PERCENT SIGN
-0x26 0x0026 # AMPERSAND
-0x27 0x0027 # APOSTROPHE
-0x28 0x0028 # LEFT PARENTHESIS
-0x29 0x0029 # RIGHT PARENTHESIS
-0x2A 0x002A # ASTERISK
-0x2B 0x002B # PLUS SIGN
-0x2C 0x002C # COMMA
-0x2D 0x002D # HYPHEN-MINUS
-0x2E 0x002E # FULL STOP
-0x2F 0x002F # SOLIDUS
-0x30 0x0030 # DIGIT ZERO
-0x31 0x0031 # DIGIT ONE
-0x32 0x0032 # DIGIT TWO
-0x33 0x0033 # DIGIT THREE
-0x34 0x0034 # DIGIT FOUR
-0x35 0x0035 # DIGIT FIVE
-0x36 0x0036 # DIGIT SIX
-0x37 0x0037 # DIGIT SEVEN
-0x38 0x0038 # DIGIT EIGHT
-0x39 0x0039 # DIGIT NINE
-0x3A 0x003A # COLON
-0x3B 0x003B # SEMICOLON
-0x3C 0x003C # LESS-THAN SIGN
-0x3D 0x003D # EQUALS SIGN
-0x3E 0x003E # GREATER-THAN SIGN
-0x3F 0x003F # QUESTION MARK
-0x40 0x0040 # COMMERCIAL AT
-0x41 0x0041 # LATIN CAPITAL LETTER A
-0x42 0x0042 # LATIN CAPITAL LETTER B
-0x43 0x0043 # LATIN CAPITAL LETTER C
-0x44 0x0044 # LATIN CAPITAL LETTER D
-0x45 0x0045 # LATIN CAPITAL LETTER E
-0x46 0x0046 # LATIN CAPITAL LETTER F
-0x47 0x0047 # LATIN CAPITAL LETTER G
-0x48 0x0048 # LATIN CAPITAL LETTER H
-0x49 0x0049 # LATIN CAPITAL LETTER I
-0x4A 0x004A # LATIN CAPITAL LETTER J
-0x4B 0x004B # LATIN CAPITAL LETTER K
-0x4C 0x004C # LATIN CAPITAL LETTER L
-0x4D 0x004D # LATIN CAPITAL LETTER M
-0x4E 0x004E # LATIN CAPITAL LETTER N
-0x4F 0x004F # LATIN CAPITAL LETTER O
-0x50 0x0050 # LATIN CAPITAL LETTER P
-0x51 0x0051 # LATIN CAPITAL LETTER Q
-0x52 0x0052 # LATIN CAPITAL LETTER R
-0x53 0x0053 # LATIN CAPITAL LETTER S
-0x54 0x0054 # LATIN CAPITAL LETTER T
-0x55 0x0055 # LATIN CAPITAL LETTER U
-0x56 0x0056 # LATIN CAPITAL LETTER V
-0x57 0x0057 # LATIN CAPITAL LETTER W
-0x58 0x0058 # LATIN CAPITAL LETTER X
-0x59 0x0059 # LATIN CAPITAL LETTER Y
-0x5A 0x005A # LATIN CAPITAL LETTER Z
-0x5B 0x005B # LEFT SQUARE BRACKET
-0x5C 0x005C # REVERSE SOLIDUS
-0x5D 0x005D # RIGHT SQUARE BRACKET
-0x5E 0x005E # CIRCUMFLEX ACCENT
-0x5F 0x005F # LOW LINE
-0x60 0x0060 # GRAVE ACCENT
-0x61 0x0061 # LATIN SMALL LETTER A
-0x62 0x0062 # LATIN SMALL LETTER B
-0x63 0x0063 # LATIN SMALL LETTER C
-0x64 0x0064 # LATIN SMALL LETTER D
-0x65 0x0065 # LATIN SMALL LETTER E
-0x66 0x0066 # LATIN SMALL LETTER F
-0x67 0x0067 # LATIN SMALL LETTER G
-0x68 0x0068 # LATIN SMALL LETTER H
-0x69 0x0069 # LATIN SMALL LETTER I
-0x6A 0x006A # LATIN SMALL LETTER J
-0x6B 0x006B # LATIN SMALL LETTER K
-0x6C 0x006C # LATIN SMALL LETTER L
-0x6D 0x006D # LATIN SMALL LETTER M
-0x6E 0x006E # LATIN SMALL LETTER N
-0x6F 0x006F # LATIN SMALL LETTER O
-0x70 0x0070 # LATIN SMALL LETTER P
-0x71 0x0071 # LATIN SMALL LETTER Q
-0x72 0x0072 # LATIN SMALL LETTER R
-0x73 0x0073 # LATIN SMALL LETTER S
-0x74 0x0074 # LATIN SMALL LETTER T
-0x75 0x0075 # LATIN SMALL LETTER U
-0x76 0x0076 # LATIN SMALL LETTER V
-0x77 0x0077 # LATIN SMALL LETTER W
-0x78 0x0078 # LATIN SMALL LETTER X
-0x79 0x0079 # LATIN SMALL LETTER Y
-0x7A 0x007A # LATIN SMALL LETTER Z
-0x7B 0x007B # LEFT CURLY BRACKET
-0x7C 0x007C # VERTICAL LINE
-0x7D 0x007D # RIGHT CURLY BRACKET
-0x7E 0x007E # TILDE
-0x7F 0x007F # DELETE
-0x80 0x2500 # BOX DRAWINGS LIGHT HORIZONTAL
-0x81 0x2502 # BOX DRAWINGS LIGHT VERTICAL
-0x82 0x250C # BOX DRAWINGS LIGHT DOWN AND RIGHT
-0x83 0x2510 # BOX DRAWINGS LIGHT DOWN AND LEFT
-0x84 0x2514 # BOX DRAWINGS LIGHT UP AND RIGHT
-0x85 0x2518 # BOX DRAWINGS LIGHT UP AND LEFT
-0x86 0x251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-0x87 0x2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT
-0x88 0x252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-0x89 0x2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL
-0x8A 0x253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-0x8B 0x2580 # UPPER HALF BLOCK
-0x8C 0x2584 # LOWER HALF BLOCK
-0x8D 0x2588 # FULL BLOCK
-0x8E 0x258C # LEFT HALF BLOCK
-0x8F 0x2590 # RIGHT HALF BLOCK
-0x90 0x2591 # LIGHT SHADE
-0x91 0x2592 # MEDIUM SHADE
-0x92 0x2593 # DARK SHADE
-0x93 0x2320 # TOP HALF INTEGRAL
-0x94 0x25A0 # BLACK SQUARE
-0x95 0x2219 # BULLET OPERATOR
-0x96 0x221A # SQUARE ROOT
-0x97 0x2248 # ALMOST EQUAL TO
-0x98 0x2264 # LESS-THAN OR EQUAL TO
-0x99 0x2265 # GREATER-THAN OR EQUAL TO
-0x9A 0x00A0 # NO-BREAK SPACE
-0x9B 0x2321 # BOTTOM HALF INTEGRAL
-0x9C 0x00B0 # DEGREE SIGN
-0x9D 0x00B2 # SUPERSCRIPT TWO
-0x9E 0x00B7 # MIDDLE DOT
-0x9F 0x00F7 # DIVISION SIGN
-0xA0 0x2550 # BOX DRAWINGS DOUBLE HORIZONTAL
-0xA1 0x2551 # BOX DRAWINGS DOUBLE VERTICAL
-0xA2 0x2552 # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-0xA3 0x0451 # CYRILLIC SMALL LETTER IO
-0xA4 0x2553 # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-0xA5 0x2554 # BOX DRAWINGS DOUBLE DOWN AND RIGHT
-0xA6 0x2555 # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-0xA7 0x2556 # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-0xA8 0x2557 # BOX DRAWINGS DOUBLE DOWN AND LEFT
-0xA9 0x2558 # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-0xAA 0x2559 # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-0xAB 0x255A # BOX DRAWINGS DOUBLE UP AND RIGHT
-0xAC 0x255B # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-0xAD 0x255C # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-0xAE 0x255D # BOX DRAWINGS DOUBLE UP AND LEFT
-0xAF 0x255E # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-0xB0 0x255F # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-0xB1 0x2560 # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-0xB2 0x2561 # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-0xB3 0x0401 # CYRILLIC CAPITAL LETTER IO
-0xB4 0x2562 # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-0xB5 0x2563 # BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-0xB6 0x2564 # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-0xB7 0x2565 # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-0xB8 0x2566 # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-0xB9 0x2567 # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-0xBA 0x2568 # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-0xBB 0x2569 # BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-0xBC 0x256A # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-0xBD 0x256B # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-0xBE 0x256C # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-0xBF 0x00A9 # COPYRIGHT SIGN
-0xC0 0x044E # CYRILLIC SMALL LETTER YU
-0xC1 0x0430 # CYRILLIC SMALL LETTER A
-0xC2 0x0431 # CYRILLIC SMALL LETTER BE
-0xC3 0x0446 # CYRILLIC SMALL LETTER TSE
-0xC4 0x0434 # CYRILLIC SMALL LETTER DE
-0xC5 0x0435 # CYRILLIC SMALL LETTER IE
-0xC6 0x0444 # CYRILLIC SMALL LETTER EF
-0xC7 0x0433 # CYRILLIC SMALL LETTER GHE
-0xC8 0x0445 # CYRILLIC SMALL LETTER HA
-0xC9 0x0438 # CYRILLIC SMALL LETTER I
-0xCA 0x0439 # CYRILLIC SMALL LETTER SHORT I
-0xCB 0x043A # CYRILLIC SMALL LETTER KA
-0xCC 0x043B # CYRILLIC SMALL LETTER EL
-0xCD 0x043C # CYRILLIC SMALL LETTER EM
-0xCE 0x043D # CYRILLIC SMALL LETTER EN
-0xCF 0x043E # CYRILLIC SMALL LETTER O
-0xD0 0x043F # CYRILLIC SMALL LETTER PE
-0xD1 0x044F # CYRILLIC SMALL LETTER YA
-0xD2 0x0440 # CYRILLIC SMALL LETTER ER
-0xD3 0x0441 # CYRILLIC SMALL LETTER ES
-0xD4 0x0442 # CYRILLIC SMALL LETTER TE
-0xD5 0x0443 # CYRILLIC SMALL LETTER U
-0xD6 0x0436 # CYRILLIC SMALL LETTER ZHE
-0xD7 0x0432 # CYRILLIC SMALL LETTER VE
-0xD8 0x044C # CYRILLIC SMALL LETTER SOFT SIGN
-0xD9 0x044B # CYRILLIC SMALL LETTER YERU
-0xDA 0x0437 # CYRILLIC SMALL LETTER ZE
-0xDB 0x0448 # CYRILLIC SMALL LETTER SHA
-0xDC 0x044D # CYRILLIC SMALL LETTER E
-0xDD 0x0449 # CYRILLIC SMALL LETTER SHCHA
-0xDE 0x0447 # CYRILLIC SMALL LETTER CHE
-0xDF 0x044A # CYRILLIC SMALL LETTER HARD SIGN
-0xE0 0x042E # CYRILLIC CAPITAL LETTER YU
-0xE1 0x0410 # CYRILLIC CAPITAL LETTER A
-0xE2 0x0411 # CYRILLIC CAPITAL LETTER BE
-0xE3 0x0426 # CYRILLIC CAPITAL LETTER TSE
-0xE4 0x0414 # CYRILLIC CAPITAL LETTER DE
-0xE5 0x0415 # CYRILLIC CAPITAL LETTER IE
-0xE6 0x0424 # CYRILLIC CAPITAL LETTER EF
-0xE7 0x0413 # CYRILLIC CAPITAL LETTER GHE
-0xE8 0x0425 # CYRILLIC CAPITAL LETTER HA
-0xE9 0x0418 # CYRILLIC CAPITAL LETTER I
-0xEA 0x0419 # CYRILLIC CAPITAL LETTER SHORT I
-0xEB 0x041A # CYRILLIC CAPITAL LETTER KA
-0xEC 0x041B # CYRILLIC CAPITAL LETTER EL
-0xED 0x041C # CYRILLIC CAPITAL LETTER EM
-0xEE 0x041D # CYRILLIC CAPITAL LETTER EN
-0xEF 0x041E # CYRILLIC CAPITAL LETTER O
-0xF0 0x041F # CYRILLIC CAPITAL LETTER PE
-0xF1 0x042F # CYRILLIC CAPITAL LETTER YA
-0xF2 0x0420 # CYRILLIC CAPITAL LETTER ER
-0xF3 0x0421 # CYRILLIC CAPITAL LETTER ES
-0xF4 0x0422 # CYRILLIC CAPITAL LETTER TE
-0xF5 0x0423 # CYRILLIC CAPITAL LETTER U
-0xF6 0x0416 # CYRILLIC CAPITAL LETTER ZHE
-0xF7 0x0412 # CYRILLIC CAPITAL LETTER VE
-0xF8 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN
-0xF9 0x042B # CYRILLIC CAPITAL LETTER YERU
-0xFA 0x0417 # CYRILLIC CAPITAL LETTER ZE
-0xFB 0x0428 # CYRILLIC CAPITAL LETTER SHA
-0xFC 0x042D # CYRILLIC CAPITAL LETTER E
-0xFD 0x0429 # CYRILLIC CAPITAL LETTER SHCHA
-0xFE 0x0427 # CYRILLIC CAPITAL LETTER CHE
-0xFF 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN
\ No newline at end of file diff --git a/program/lib/encoding/KSC5601.map b/program/lib/encoding/KSC5601.map deleted file mode 100644 index 83a5ce77b..000000000 --- a/program/lib/encoding/KSC5601.map +++ /dev/null @@ -1,17078 +0,0 @@ -# -# Name: Unified Hangeul(KSC5601-1992) to Unicode table -# Unicode version: 2.0 -# Table version: 1.0 -# Table format: Format A -# Date: 07/24/95 -# -# This table contains one set of mappings from KSC5601-1992 into Unicode. -# Note that these data are *possible* mappings only and may not be the -# same as those used by actual products, nor may they be the best suited -# for all uses. For more information on the mappings between various code -# pages incorporating the repertoire of KSC5601-1992 and Unicode, consult the -# VENDORS mapping data. Normative information on the mapping between -# KSC5601-1992 and Unicode may be found in the Unihan.txt file in the -# latest Unicode Character Database. -# -# If you have carefully considered the fact that the mappings in -# this table are only one possible set of mappings between KSC5601-1992 and -# Unicode and have no normative status, but still feel that you -# have located an error in the table that requires fixing, you may -# report any such error to errata@unicode.org. -# -# -# Format: Three tab-separated columns -# Column #1 is the Unified Hangeul code (in hex) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 is the Unicode name (follows a comment sign, '#') -# -# The entries are in Unified Hangeul order -# -0x8141 0xAC02 # HANGUL SYLLABLE KIYEOK-A-SSANGKIYEOK -0x8142 0xAC03 # HANGUL SYLLABLE KIYEOK-A-KIYEOKSIOS -0x8143 0xAC05 # HANGUL SYLLABLE KIYEOK-A-NIEUNCIEUC -0x8144 0xAC06 # HANGUL SYLLABLE KIYEOK-A-NIEUNHIEUH -0x8145 0xAC0B # HANGUL SYLLABLE KIYEOK-A-RIEULPIEUP -0x8146 0xAC0C # HANGUL SYLLABLE KIYEOK-A-RIEULSIOS -0x8147 0xAC0D # HANGUL SYLLABLE KIYEOK-A-RIEULTHIEUTH -0x8148 0xAC0E # HANGUL SYLLABLE KIYEOK-A-RIEULPHIEUPH -0x8149 0xAC0F # HANGUL SYLLABLE KIYEOK-A-RIEULHIEUH -0x814A 0xAC18 # HANGUL SYLLABLE KIYEOK-A-KHIEUKH -0x814B 0xAC1E # HANGUL SYLLABLE KIYEOK-AE-SSANGKIYEOK -0x814C 0xAC1F # HANGUL SYLLABLE KIYEOK-AE-KIYEOKSIOS -0x814D 0xAC21 # HANGUL SYLLABLE KIYEOK-AE-NIEUNCIEUC -0x814E 0xAC22 # HANGUL SYLLABLE KIYEOK-AE-NIEUNHIEUH -0x814F 0xAC23 # HANGUL SYLLABLE KIYEOK-AE-TIKEUT -0x8150 0xAC25 # HANGUL SYLLABLE KIYEOK-AE-RIEULKIYEOK -0x8151 0xAC26 # HANGUL SYLLABLE KIYEOK-AE-RIEULMIEUM -0x8152 0xAC27 # HANGUL SYLLABLE KIYEOK-AE-RIEULPIEUP -0x8153 0xAC28 # HANGUL SYLLABLE KIYEOK-AE-RIEULSIOS -0x8154 0xAC29 # HANGUL SYLLABLE KIYEOK-AE-RIEULTHIEUTH -0x8155 0xAC2A # HANGUL SYLLABLE KIYEOK-AE-RIEULPHIEUPH -0x8156 0xAC2B # HANGUL SYLLABLE KIYEOK-AE-RIEULHIEUH -0x8157 0xAC2E # HANGUL SYLLABLE KIYEOK-AE-PIEUPSIOS -0x8158 0xAC32 # HANGUL SYLLABLE KIYEOK-AE-CIEUC -0x8159 0xAC33 # HANGUL SYLLABLE KIYEOK-AE-CHIEUCH -0x815A 0xAC34 # HANGUL SYLLABLE KIYEOK-AE-KHIEUKH -0x8161 0xAC35 # HANGUL SYLLABLE KIYEOK-AE-THIEUTH -0x8162 0xAC36 # HANGUL SYLLABLE KIYEOK-AE-PHIEUPH -0x8163 0xAC37 # HANGUL SYLLABLE KIYEOK-AE-HIEUH -0x8164 0xAC3A # HANGUL SYLLABLE KIYEOK-YA-SSANGKIYEOK -0x8165 0xAC3B # HANGUL SYLLABLE KIYEOK-YA-KIYEOKSIOS -0x8166 0xAC3D # HANGUL SYLLABLE KIYEOK-YA-NIEUNCIEUC -0x8167 0xAC3E # HANGUL SYLLABLE KIYEOK-YA-NIEUNHIEUH -0x8168 0xAC3F # HANGUL SYLLABLE KIYEOK-YA-TIKEUT -0x8169 0xAC41 # HANGUL SYLLABLE KIYEOK-YA-RIEULKIYEOK -0x816A 0xAC42 # HANGUL SYLLABLE KIYEOK-YA-RIEULMIEUM -0x816B 0xAC43 # HANGUL SYLLABLE KIYEOK-YA-RIEULPIEUP -0x816C 0xAC44 # HANGUL SYLLABLE KIYEOK-YA-RIEULSIOS -0x816D 0xAC45 # HANGUL SYLLABLE KIYEOK-YA-RIEULTHIEUTH -0x816E 0xAC46 # HANGUL SYLLABLE KIYEOK-YA-RIEULPHIEUPH -0x816F 0xAC47 # HANGUL SYLLABLE KIYEOK-YA-RIEULHIEUH -0x8170 0xAC48 # HANGUL SYLLABLE KIYEOK-YA-MIEUM -0x8171 0xAC49 # HANGUL SYLLABLE KIYEOK-YA-PIEUP -0x8172 0xAC4A # HANGUL SYLLABLE KIYEOK-YA-PIEUPSIOS -0x8173 0xAC4C # HANGUL SYLLABLE KIYEOK-YA-SSANGSIOS -0x8174 0xAC4E # HANGUL SYLLABLE KIYEOK-YA-CIEUC -0x8175 0xAC4F # HANGUL SYLLABLE KIYEOK-YA-CHIEUCH -0x8176 0xAC50 # HANGUL SYLLABLE KIYEOK-YA-KHIEUKH -0x8177 0xAC51 # HANGUL SYLLABLE KIYEOK-YA-THIEUTH -0x8178 0xAC52 # HANGUL SYLLABLE KIYEOK-YA-PHIEUPH -0x8179 0xAC53 # HANGUL SYLLABLE KIYEOK-YA-HIEUH -0x817A 0xAC55 # HANGUL SYLLABLE KIYEOK-YAE-KIYEOK -0x8181 0xAC56 # HANGUL SYLLABLE KIYEOK-YAE-SSANGKIYEOK -0x8182 0xAC57 # HANGUL SYLLABLE KIYEOK-YAE-KIYEOKSIOS -0x8183 0xAC59 # HANGUL SYLLABLE KIYEOK-YAE-NIEUNCIEUC -0x8184 0xAC5A # HANGUL SYLLABLE KIYEOK-YAE-NIEUNHIEUH -0x8185 0xAC5B # HANGUL SYLLABLE KIYEOK-YAE-TIKEUT -0x8186 0xAC5D # HANGUL SYLLABLE KIYEOK-YAE-RIEULKIYEOK -0x8187 0xAC5E # HANGUL SYLLABLE KIYEOK-YAE-RIEULMIEUM -0x8188 0xAC5F # HANGUL SYLLABLE KIYEOK-YAE-RIEULPIEUP -0x8189 0xAC60 # HANGUL SYLLABLE KIYEOK-YAE-RIEULSIOS -0x818A 0xAC61 # HANGUL SYLLABLE KIYEOK-YAE-RIEULTHIEUTH -0x818B 0xAC62 # HANGUL SYLLABLE KIYEOK-YAE-RIEULPHIEUPH -0x818C 0xAC63 # HANGUL SYLLABLE KIYEOK-YAE-RIEULHIEUH -0x818D 0xAC64 # HANGUL SYLLABLE KIYEOK-YAE-MIEUM -0x818E 0xAC65 # HANGUL SYLLABLE KIYEOK-YAE-PIEUP -0x818F 0xAC66 # HANGUL SYLLABLE KIYEOK-YAE-PIEUPSIOS -0x8190 0xAC67 # HANGUL SYLLABLE KIYEOK-YAE-SIOS -0x8191 0xAC68 # HANGUL SYLLABLE KIYEOK-YAE-SSANGSIOS -0x8192 0xAC69 # HANGUL SYLLABLE KIYEOK-YAE-IEUNG -0x8193 0xAC6A # HANGUL SYLLABLE KIYEOK-YAE-CIEUC -0x8194 0xAC6B # HANGUL SYLLABLE KIYEOK-YAE-CHIEUCH -0x8195 0xAC6C # HANGUL SYLLABLE KIYEOK-YAE-KHIEUKH -0x8196 0xAC6D # HANGUL SYLLABLE KIYEOK-YAE-THIEUTH -0x8197 0xAC6E # HANGUL SYLLABLE KIYEOK-YAE-PHIEUPH -0x8198 0xAC6F # HANGUL SYLLABLE KIYEOK-YAE-HIEUH -0x8199 0xAC72 # HANGUL SYLLABLE KIYEOK-EO-SSANGKIYEOK -0x819A 0xAC73 # HANGUL SYLLABLE KIYEOK-EO-KIYEOKSIOS -0x819B 0xAC75 # HANGUL SYLLABLE KIYEOK-EO-NIEUNCIEUC -0x819C 0xAC76 # HANGUL SYLLABLE KIYEOK-EO-NIEUNHIEUH -0x819D 0xAC79 # HANGUL SYLLABLE KIYEOK-EO-RIEULKIYEOK -0x819E 0xAC7B # HANGUL SYLLABLE KIYEOK-EO-RIEULPIEUP -0x819F 0xAC7C # HANGUL SYLLABLE KIYEOK-EO-RIEULSIOS -0x81A0 0xAC7D # HANGUL SYLLABLE KIYEOK-EO-RIEULTHIEUTH -0x81A1 0xAC7E # HANGUL SYLLABLE KIYEOK-EO-RIEULPHIEUPH -0x81A2 0xAC7F # HANGUL SYLLABLE KIYEOK-EO-RIEULHIEUH -0x81A3 0xAC82 # HANGUL SYLLABLE KIYEOK-EO-PIEUPSIOS -0x81A4 0xAC87 # HANGUL SYLLABLE KIYEOK-EO-CHIEUCH -0x81A5 0xAC88 # HANGUL SYLLABLE KIYEOK-EO-KHIEUKH -0x81A6 0xAC8D # HANGUL SYLLABLE KIYEOK-E-KIYEOK -0x81A7 0xAC8E # HANGUL SYLLABLE KIYEOK-E-SSANGKIYEOK -0x81A8 0xAC8F # HANGUL SYLLABLE KIYEOK-E-KIYEOKSIOS -0x81A9 0xAC91 # HANGUL SYLLABLE KIYEOK-E-NIEUNCIEUC -0x81AA 0xAC92 # HANGUL SYLLABLE KIYEOK-E-NIEUNHIEUH -0x81AB 0xAC93 # HANGUL SYLLABLE KIYEOK-E-TIKEUT -0x81AC 0xAC95 # HANGUL SYLLABLE KIYEOK-E-RIEULKIYEOK -0x81AD 0xAC96 # HANGUL SYLLABLE KIYEOK-E-RIEULMIEUM -0x81AE 0xAC97 # HANGUL SYLLABLE KIYEOK-E-RIEULPIEUP -0x81AF 0xAC98 # HANGUL SYLLABLE KIYEOK-E-RIEULSIOS -0x81B0 0xAC99 # HANGUL SYLLABLE KIYEOK-E-RIEULTHIEUTH -0x81B1 0xAC9A # HANGUL SYLLABLE KIYEOK-E-RIEULPHIEUPH -0x81B2 0xAC9B # HANGUL SYLLABLE KIYEOK-E-RIEULHIEUH -0x81B3 0xAC9E # HANGUL SYLLABLE KIYEOK-E-PIEUPSIOS -0x81B4 0xACA2 # HANGUL SYLLABLE KIYEOK-E-CIEUC -0x81B5 0xACA3 # HANGUL SYLLABLE KIYEOK-E-CHIEUCH -0x81B6 0xACA4 # HANGUL SYLLABLE KIYEOK-E-KHIEUKH -0x81B7 0xACA5 # HANGUL SYLLABLE KIYEOK-E-THIEUTH -0x81B8 0xACA6 # HANGUL SYLLABLE KIYEOK-E-PHIEUPH -0x81B9 0xACA7 # HANGUL SYLLABLE KIYEOK-E-HIEUH -0x81BA 0xACAB # HANGUL SYLLABLE KIYEOK-YEO-KIYEOKSIOS -0x81BB 0xACAD # HANGUL SYLLABLE KIYEOK-YEO-NIEUNCIEUC -0x81BC 0xACAE # HANGUL SYLLABLE KIYEOK-YEO-NIEUNHIEUH -0x81BD 0xACB1 # HANGUL SYLLABLE KIYEOK-YEO-RIEULKIYEOK -0x81BE 0xACB2 # HANGUL SYLLABLE KIYEOK-YEO-RIEULMIEUM -0x81BF 0xACB3 # HANGUL SYLLABLE KIYEOK-YEO-RIEULPIEUP -0x81C0 0xACB4 # HANGUL SYLLABLE KIYEOK-YEO-RIEULSIOS -0x81C1 0xACB5 # HANGUL SYLLABLE KIYEOK-YEO-RIEULTHIEUTH -0x81C2 0xACB6 # HANGUL SYLLABLE KIYEOK-YEO-RIEULPHIEUPH -0x81C3 0xACB7 # HANGUL SYLLABLE KIYEOK-YEO-RIEULHIEUH -0x81C4 0xACBA # HANGUL SYLLABLE KIYEOK-YEO-PIEUPSIOS -0x81C5 0xACBE # HANGUL SYLLABLE KIYEOK-YEO-CIEUC -0x81C6 0xACBF # HANGUL SYLLABLE KIYEOK-YEO-CHIEUCH -0x81C7 0xACC0 # HANGUL SYLLABLE KIYEOK-YEO-KHIEUKH -0x81C8 0xACC2 # HANGUL SYLLABLE KIYEOK-YEO-PHIEUPH -0x81C9 0xACC3 # HANGUL SYLLABLE KIYEOK-YEO-HIEUH -0x81CA 0xACC5 # HANGUL SYLLABLE KIYEOK-YE-KIYEOK -0x81CB 0xACC6 # HANGUL SYLLABLE KIYEOK-YE-SSANGKIYEOK -0x81CC 0xACC7 # HANGUL SYLLABLE KIYEOK-YE-KIYEOKSIOS -0x81CD 0xACC9 # HANGUL SYLLABLE KIYEOK-YE-NIEUNCIEUC -0x81CE 0xACCA # HANGUL SYLLABLE KIYEOK-YE-NIEUNHIEUH -0x81CF 0xACCB # HANGUL SYLLABLE KIYEOK-YE-TIKEUT -0x81D0 0xACCD # HANGUL SYLLABLE KIYEOK-YE-RIEULKIYEOK -0x81D1 0xACCE # HANGUL SYLLABLE KIYEOK-YE-RIEULMIEUM -0x81D2 0xACCF # HANGUL SYLLABLE KIYEOK-YE-RIEULPIEUP -0x81D3 0xACD0 # HANGUL SYLLABLE KIYEOK-YE-RIEULSIOS -0x81D4 0xACD1 # HANGUL SYLLABLE KIYEOK-YE-RIEULTHIEUTH -0x81D5 0xACD2 # HANGUL SYLLABLE KIYEOK-YE-RIEULPHIEUPH -0x81D6 0xACD3 # HANGUL SYLLABLE KIYEOK-YE-RIEULHIEUH -0x81D7 0xACD4 # HANGUL SYLLABLE KIYEOK-YE-MIEUM -0x81D8 0xACD6 # HANGUL SYLLABLE KIYEOK-YE-PIEUPSIOS -0x81D9 0xACD8 # HANGUL SYLLABLE KIYEOK-YE-SSANGSIOS -0x81DA 0xACD9 # HANGUL SYLLABLE KIYEOK-YE-IEUNG -0x81DB 0xACDA # HANGUL SYLLABLE KIYEOK-YE-CIEUC -0x81DC 0xACDB # HANGUL SYLLABLE KIYEOK-YE-CHIEUCH -0x81DD 0xACDC # HANGUL SYLLABLE KIYEOK-YE-KHIEUKH -0x81DE 0xACDD # HANGUL SYLLABLE KIYEOK-YE-THIEUTH -0x81DF 0xACDE # HANGUL SYLLABLE KIYEOK-YE-PHIEUPH -0x81E0 0xACDF # HANGUL SYLLABLE KIYEOK-YE-HIEUH -0x81E1 0xACE2 # HANGUL SYLLABLE KIYEOK-O-SSANGKIYEOK -0x81E2 0xACE3 # HANGUL SYLLABLE KIYEOK-O-KIYEOKSIOS -0x81E3 0xACE5 # HANGUL SYLLABLE KIYEOK-O-NIEUNCIEUC -0x81E4 0xACE6 # HANGUL SYLLABLE KIYEOK-O-NIEUNHIEUH -0x81E5 0xACE9 # HANGUL SYLLABLE KIYEOK-O-RIEULKIYEOK -0x81E6 0xACEB # HANGUL SYLLABLE KIYEOK-O-RIEULPIEUP -0x81E7 0xACED # HANGUL SYLLABLE KIYEOK-O-RIEULTHIEUTH -0x81E8 0xACEE # HANGUL SYLLABLE KIYEOK-O-RIEULPHIEUPH -0x81E9 0xACF2 # HANGUL SYLLABLE KIYEOK-O-PIEUPSIOS -0x81EA 0xACF4 # HANGUL SYLLABLE KIYEOK-O-SSANGSIOS -0x81EB 0xACF7 # HANGUL SYLLABLE KIYEOK-O-CHIEUCH -0x81EC 0xACF8 # HANGUL SYLLABLE KIYEOK-O-KHIEUKH -0x81ED 0xACF9 # HANGUL SYLLABLE KIYEOK-O-THIEUTH -0x81EE 0xACFA # HANGUL SYLLABLE KIYEOK-O-PHIEUPH -0x81EF 0xACFB # HANGUL SYLLABLE KIYEOK-O-HIEUH -0x81F0 0xACFE # HANGUL SYLLABLE KIYEOK-WA-SSANGKIYEOK -0x81F1 0xACFF # HANGUL SYLLABLE KIYEOK-WA-KIYEOKSIOS -0x81F2 0xAD01 # HANGUL SYLLABLE KIYEOK-WA-NIEUNCIEUC -0x81F3 0xAD02 # HANGUL SYLLABLE KIYEOK-WA-NIEUNHIEUH -0x81F4 0xAD03 # HANGUL SYLLABLE KIYEOK-WA-TIKEUT -0x81F5 0xAD05 # HANGUL SYLLABLE KIYEOK-WA-RIEULKIYEOK -0x81F6 0xAD07 # HANGUL SYLLABLE KIYEOK-WA-RIEULPIEUP -0x81F7 0xAD08 # HANGUL SYLLABLE KIYEOK-WA-RIEULSIOS -0x81F8 0xAD09 # HANGUL SYLLABLE KIYEOK-WA-RIEULTHIEUTH -0x81F9 0xAD0A # HANGUL SYLLABLE KIYEOK-WA-RIEULPHIEUPH -0x81FA 0xAD0B # HANGUL SYLLABLE KIYEOK-WA-RIEULHIEUH -0x81FB 0xAD0E # HANGUL SYLLABLE KIYEOK-WA-PIEUPSIOS -0x81FC 0xAD10 # HANGUL SYLLABLE KIYEOK-WA-SSANGSIOS -0x81FD 0xAD12 # HANGUL SYLLABLE KIYEOK-WA-CIEUC -0x81FE 0xAD13 # HANGUL SYLLABLE KIYEOK-WA-CHIEUCH -0x8241 0xAD14 # HANGUL SYLLABLE KIYEOK-WA-KHIEUKH -0x8242 0xAD15 # HANGUL SYLLABLE KIYEOK-WA-THIEUTH -0x8243 0xAD16 # HANGUL SYLLABLE KIYEOK-WA-PHIEUPH -0x8244 0xAD17 # HANGUL SYLLABLE KIYEOK-WA-HIEUH -0x8245 0xAD19 # HANGUL SYLLABLE KIYEOK-WAE-KIYEOK -0x8246 0xAD1A # HANGUL SYLLABLE KIYEOK-WAE-SSANGKIYEOK -0x8247 0xAD1B # HANGUL SYLLABLE KIYEOK-WAE-KIYEOKSIOS -0x8248 0xAD1D # HANGUL SYLLABLE KIYEOK-WAE-NIEUNCIEUC -0x8249 0xAD1E # HANGUL SYLLABLE KIYEOK-WAE-NIEUNHIEUH -0x824A 0xAD1F # HANGUL SYLLABLE KIYEOK-WAE-TIKEUT -0x824B 0xAD21 # HANGUL SYLLABLE KIYEOK-WAE-RIEULKIYEOK -0x824C 0xAD22 # HANGUL SYLLABLE KIYEOK-WAE-RIEULMIEUM -0x824D 0xAD23 # HANGUL SYLLABLE KIYEOK-WAE-RIEULPIEUP -0x824E 0xAD24 # HANGUL SYLLABLE KIYEOK-WAE-RIEULSIOS -0x824F 0xAD25 # HANGUL SYLLABLE KIYEOK-WAE-RIEULTHIEUTH -0x8250 0xAD26 # HANGUL SYLLABLE KIYEOK-WAE-RIEULPHIEUPH -0x8251 0xAD27 # HANGUL SYLLABLE KIYEOK-WAE-RIEULHIEUH -0x8252 0xAD28 # HANGUL SYLLABLE KIYEOK-WAE-MIEUM -0x8253 0xAD2A # HANGUL SYLLABLE KIYEOK-WAE-PIEUPSIOS -0x8254 0xAD2B # HANGUL SYLLABLE KIYEOK-WAE-SIOS -0x8255 0xAD2E # HANGUL SYLLABLE KIYEOK-WAE-CIEUC -0x8256 0xAD2F # HANGUL SYLLABLE KIYEOK-WAE-CHIEUCH -0x8257 0xAD30 # HANGUL SYLLABLE KIYEOK-WAE-KHIEUKH -0x8258 0xAD31 # HANGUL SYLLABLE KIYEOK-WAE-THIEUTH -0x8259 0xAD32 # HANGUL SYLLABLE KIYEOK-WAE-PHIEUPH -0x825A 0xAD33 # HANGUL SYLLABLE KIYEOK-WAE-HIEUH -0x8261 0xAD36 # HANGUL SYLLABLE KIYEOK-OE-SSANGKIYEOK -0x8262 0xAD37 # HANGUL SYLLABLE KIYEOK-OE-KIYEOKSIOS -0x8263 0xAD39 # HANGUL SYLLABLE KIYEOK-OE-NIEUNCIEUC -0x8264 0xAD3A # HANGUL SYLLABLE KIYEOK-OE-NIEUNHIEUH -0x8265 0xAD3B # HANGUL SYLLABLE KIYEOK-OE-TIKEUT -0x8266 0xAD3D # HANGUL SYLLABLE KIYEOK-OE-RIEULKIYEOK -0x8267 0xAD3E # HANGUL SYLLABLE KIYEOK-OE-RIEULMIEUM -0x8268 0xAD3F # HANGUL SYLLABLE KIYEOK-OE-RIEULPIEUP -0x8269 0xAD40 # HANGUL SYLLABLE KIYEOK-OE-RIEULSIOS -0x826A 0xAD41 # HANGUL SYLLABLE KIYEOK-OE-RIEULTHIEUTH -0x826B 0xAD42 # HANGUL SYLLABLE KIYEOK-OE-RIEULPHIEUPH -0x826C 0xAD43 # HANGUL SYLLABLE KIYEOK-OE-RIEULHIEUH -0x826D 0xAD46 # HANGUL SYLLABLE KIYEOK-OE-PIEUPSIOS -0x826E 0xAD48 # HANGUL SYLLABLE KIYEOK-OE-SSANGSIOS -0x826F 0xAD4A # HANGUL SYLLABLE KIYEOK-OE-CIEUC -0x8270 0xAD4B # HANGUL SYLLABLE KIYEOK-OE-CHIEUCH -0x8271 0xAD4C # HANGUL SYLLABLE KIYEOK-OE-KHIEUKH -0x8272 0xAD4D # HANGUL SYLLABLE KIYEOK-OE-THIEUTH -0x8273 0xAD4E # HANGUL SYLLABLE KIYEOK-OE-PHIEUPH -0x8274 0xAD4F # HANGUL SYLLABLE KIYEOK-OE-HIEUH -0x8275 0xAD51 # HANGUL SYLLABLE KIYEOK-YO-KIYEOK -0x8276 0xAD52 # HANGUL SYLLABLE KIYEOK-YO-SSANGKIYEOK -0x8277 0xAD53 # HANGUL SYLLABLE KIYEOK-YO-KIYEOKSIOS -0x8278 0xAD55 # HANGUL SYLLABLE KIYEOK-YO-NIEUNCIEUC -0x8279 0xAD56 # HANGUL SYLLABLE KIYEOK-YO-NIEUNHIEUH -0x827A 0xAD57 # HANGUL SYLLABLE KIYEOK-YO-TIKEUT -0x8281 0xAD59 # HANGUL SYLLABLE KIYEOK-YO-RIEULKIYEOK -0x8282 0xAD5A # HANGUL SYLLABLE KIYEOK-YO-RIEULMIEUM -0x8283 0xAD5B # HANGUL SYLLABLE KIYEOK-YO-RIEULPIEUP -0x8284 0xAD5C # HANGUL SYLLABLE KIYEOK-YO-RIEULSIOS -0x8285 0xAD5D # HANGUL SYLLABLE KIYEOK-YO-RIEULTHIEUTH -0x8286 0xAD5E # HANGUL SYLLABLE KIYEOK-YO-RIEULPHIEUPH -0x8287 0xAD5F # HANGUL SYLLABLE KIYEOK-YO-RIEULHIEUH -0x8288 0xAD60 # HANGUL SYLLABLE KIYEOK-YO-MIEUM -0x8289 0xAD62 # HANGUL SYLLABLE KIYEOK-YO-PIEUPSIOS -0x828A 0xAD64 # HANGUL SYLLABLE KIYEOK-YO-SSANGSIOS -0x828B 0xAD65 # HANGUL SYLLABLE KIYEOK-YO-IEUNG -0x828C 0xAD66 # HANGUL SYLLABLE KIYEOK-YO-CIEUC -0x828D 0xAD67 # HANGUL SYLLABLE KIYEOK-YO-CHIEUCH -0x828E 0xAD68 # HANGUL SYLLABLE KIYEOK-YO-KHIEUKH -0x828F 0xAD69 # HANGUL SYLLABLE KIYEOK-YO-THIEUTH -0x8290 0xAD6A # HANGUL SYLLABLE KIYEOK-YO-PHIEUPH -0x8291 0xAD6B # HANGUL SYLLABLE KIYEOK-YO-HIEUH -0x8292 0xAD6E # HANGUL SYLLABLE KIYEOK-U-SSANGKIYEOK -0x8293 0xAD6F # HANGUL SYLLABLE KIYEOK-U-KIYEOKSIOS -0x8294 0xAD71 # HANGUL SYLLABLE KIYEOK-U-NIEUNCIEUC -0x8295 0xAD72 # HANGUL SYLLABLE KIYEOK-U-NIEUNHIEUH -0x8296 0xAD77 # HANGUL SYLLABLE KIYEOK-U-RIEULPIEUP -0x8297 0xAD78 # HANGUL SYLLABLE KIYEOK-U-RIEULSIOS -0x8298 0xAD79 # HANGUL SYLLABLE KIYEOK-U-RIEULTHIEUTH -0x8299 0xAD7A # HANGUL SYLLABLE KIYEOK-U-RIEULPHIEUPH -0x829A 0xAD7E # HANGUL SYLLABLE KIYEOK-U-PIEUPSIOS -0x829B 0xAD80 # HANGUL SYLLABLE KIYEOK-U-SSANGSIOS -0x829C 0xAD83 # HANGUL SYLLABLE KIYEOK-U-CHIEUCH -0x829D 0xAD84 # HANGUL SYLLABLE KIYEOK-U-KHIEUKH -0x829E 0xAD85 # HANGUL SYLLABLE KIYEOK-U-THIEUTH -0x829F 0xAD86 # HANGUL SYLLABLE KIYEOK-U-PHIEUPH -0x82A0 0xAD87 # HANGUL SYLLABLE KIYEOK-U-HIEUH -0x82A1 0xAD8A # HANGUL SYLLABLE KIYEOK-WEO-SSANGKIYEOK -0x82A2 0xAD8B # HANGUL SYLLABLE KIYEOK-WEO-KIYEOKSIOS -0x82A3 0xAD8D # HANGUL SYLLABLE KIYEOK-WEO-NIEUNCIEUC -0x82A4 0xAD8E # HANGUL SYLLABLE KIYEOK-WEO-NIEUNHIEUH -0x82A5 0xAD8F # HANGUL SYLLABLE KIYEOK-WEO-TIKEUT -0x82A6 0xAD91 # HANGUL SYLLABLE KIYEOK-WEO-RIEULKIYEOK -0x82A7 0xAD92 # HANGUL SYLLABLE KIYEOK-WEO-RIEULMIEUM -0x82A8 0xAD93 # HANGUL SYLLABLE KIYEOK-WEO-RIEULPIEUP -0x82A9 0xAD94 # HANGUL SYLLABLE KIYEOK-WEO-RIEULSIOS -0x82AA 0xAD95 # HANGUL SYLLABLE KIYEOK-WEO-RIEULTHIEUTH -0x82AB 0xAD96 # HANGUL SYLLABLE KIYEOK-WEO-RIEULPHIEUPH -0x82AC 0xAD97 # HANGUL SYLLABLE KIYEOK-WEO-RIEULHIEUH -0x82AD 0xAD98 # HANGUL SYLLABLE KIYEOK-WEO-MIEUM -0x82AE 0xAD99 # HANGUL SYLLABLE KIYEOK-WEO-PIEUP -0x82AF 0xAD9A # HANGUL SYLLABLE KIYEOK-WEO-PIEUPSIOS -0x82B0 0xAD9B # HANGUL SYLLABLE KIYEOK-WEO-SIOS -0x82B1 0xAD9E # HANGUL SYLLABLE KIYEOK-WEO-CIEUC -0x82B2 0xAD9F # HANGUL SYLLABLE KIYEOK-WEO-CHIEUCH -0x82B3 0xADA0 # HANGUL SYLLABLE KIYEOK-WEO-KHIEUKH -0x82B4 0xADA1 # HANGUL SYLLABLE KIYEOK-WEO-THIEUTH -0x82B5 0xADA2 # HANGUL SYLLABLE KIYEOK-WEO-PHIEUPH -0x82B6 0xADA3 # HANGUL SYLLABLE KIYEOK-WEO-HIEUH -0x82B7 0xADA5 # HANGUL SYLLABLE KIYEOK-WE-KIYEOK -0x82B8 0xADA6 # HANGUL SYLLABLE KIYEOK-WE-SSANGKIYEOK -0x82B9 0xADA7 # HANGUL SYLLABLE KIYEOK-WE-KIYEOKSIOS -0x82BA 0xADA8 # HANGUL SYLLABLE KIYEOK-WE-NIEUN -0x82BB 0xADA9 # HANGUL SYLLABLE KIYEOK-WE-NIEUNCIEUC -0x82BC 0xADAA # HANGUL SYLLABLE KIYEOK-WE-NIEUNHIEUH -0x82BD 0xADAB # HANGUL SYLLABLE KIYEOK-WE-TIKEUT -0x82BE 0xADAC # HANGUL SYLLABLE KIYEOK-WE-RIEUL -0x82BF 0xADAD # HANGUL SYLLABLE KIYEOK-WE-RIEULKIYEOK -0x82C0 0xADAE # HANGUL SYLLABLE KIYEOK-WE-RIEULMIEUM -0x82C1 0xADAF # HANGUL SYLLABLE KIYEOK-WE-RIEULPIEUP -0x82C2 0xADB0 # HANGUL SYLLABLE KIYEOK-WE-RIEULSIOS -0x82C3 0xADB1 # HANGUL SYLLABLE KIYEOK-WE-RIEULTHIEUTH -0x82C4 0xADB2 # HANGUL SYLLABLE KIYEOK-WE-RIEULPHIEUPH -0x82C5 0xADB3 # HANGUL SYLLABLE KIYEOK-WE-RIEULHIEUH -0x82C6 0xADB4 # HANGUL SYLLABLE KIYEOK-WE-MIEUM -0x82C7 0xADB5 # HANGUL SYLLABLE KIYEOK-WE-PIEUP -0x82C8 0xADB6 # HANGUL SYLLABLE KIYEOK-WE-PIEUPSIOS -0x82C9 0xADB8 # HANGUL SYLLABLE KIYEOK-WE-SSANGSIOS -0x82CA 0xADB9 # HANGUL SYLLABLE KIYEOK-WE-IEUNG -0x82CB 0xADBA # HANGUL SYLLABLE KIYEOK-WE-CIEUC -0x82CC 0xADBB # HANGUL SYLLABLE KIYEOK-WE-CHIEUCH -0x82CD 0xADBC # HANGUL SYLLABLE KIYEOK-WE-KHIEUKH -0x82CE 0xADBD # HANGUL SYLLABLE KIYEOK-WE-THIEUTH -0x82CF 0xADBE # HANGUL SYLLABLE KIYEOK-WE-PHIEUPH -0x82D0 0xADBF # HANGUL SYLLABLE KIYEOK-WE-HIEUH -0x82D1 0xADC2 # HANGUL SYLLABLE KIYEOK-WI-SSANGKIYEOK -0x82D2 0xADC3 # HANGUL SYLLABLE KIYEOK-WI-KIYEOKSIOS -0x82D3 0xADC5 # HANGUL SYLLABLE KIYEOK-WI-NIEUNCIEUC -0x82D4 0xADC6 # HANGUL SYLLABLE KIYEOK-WI-NIEUNHIEUH -0x82D5 0xADC7 # HANGUL SYLLABLE KIYEOK-WI-TIKEUT -0x82D6 0xADC9 # HANGUL SYLLABLE KIYEOK-WI-RIEULKIYEOK -0x82D7 0xADCA # HANGUL SYLLABLE KIYEOK-WI-RIEULMIEUM -0x82D8 0xADCB # HANGUL SYLLABLE KIYEOK-WI-RIEULPIEUP -0x82D9 0xADCC # HANGUL SYLLABLE KIYEOK-WI-RIEULSIOS -0x82DA 0xADCD # HANGUL SYLLABLE KIYEOK-WI-RIEULTHIEUTH -0x82DB 0xADCE # HANGUL SYLLABLE KIYEOK-WI-RIEULPHIEUPH -0x82DC 0xADCF # HANGUL SYLLABLE KIYEOK-WI-RIEULHIEUH -0x82DD 0xADD2 # HANGUL SYLLABLE KIYEOK-WI-PIEUPSIOS -0x82DE 0xADD4 # HANGUL SYLLABLE KIYEOK-WI-SSANGSIOS -0x82DF 0xADD5 # HANGUL SYLLABLE KIYEOK-WI-IEUNG -0x82E0 0xADD6 # HANGUL SYLLABLE KIYEOK-WI-CIEUC -0x82E1 0xADD7 # HANGUL SYLLABLE KIYEOK-WI-CHIEUCH -0x82E2 0xADD8 # HANGUL SYLLABLE KIYEOK-WI-KHIEUKH -0x82E3 0xADD9 # HANGUL SYLLABLE KIYEOK-WI-THIEUTH -0x82E4 0xADDA # HANGUL SYLLABLE KIYEOK-WI-PHIEUPH -0x82E5 0xADDB # HANGUL SYLLABLE KIYEOK-WI-HIEUH -0x82E6 0xADDD # HANGUL SYLLABLE KIYEOK-YU-KIYEOK -0x82E7 0xADDE # HANGUL SYLLABLE KIYEOK-YU-SSANGKIYEOK -0x82E8 0xADDF # HANGUL SYLLABLE KIYEOK-YU-KIYEOKSIOS -0x82E9 0xADE1 # HANGUL SYLLABLE KIYEOK-YU-NIEUNCIEUC -0x82EA 0xADE2 # HANGUL SYLLABLE KIYEOK-YU-NIEUNHIEUH -0x82EB 0xADE3 # HANGUL SYLLABLE KIYEOK-YU-TIKEUT -0x82EC 0xADE5 # HANGUL SYLLABLE KIYEOK-YU-RIEULKIYEOK -0x82ED 0xADE6 # HANGUL SYLLABLE KIYEOK-YU-RIEULMIEUM -0x82EE 0xADE7 # HANGUL SYLLABLE KIYEOK-YU-RIEULPIEUP -0x82EF 0xADE8 # HANGUL SYLLABLE KIYEOK-YU-RIEULSIOS -0x82F0 0xADE9 # HANGUL SYLLABLE KIYEOK-YU-RIEULTHIEUTH -0x82F1 0xADEA # HANGUL SYLLABLE KIYEOK-YU-RIEULPHIEUPH -0x82F2 0xADEB # HANGUL SYLLABLE KIYEOK-YU-RIEULHIEUH -0x82F3 0xADEC # HANGUL SYLLABLE KIYEOK-YU-MIEUM -0x82F4 0xADED # HANGUL SYLLABLE KIYEOK-YU-PIEUP -0x82F5 0xADEE # HANGUL SYLLABLE KIYEOK-YU-PIEUPSIOS -0x82F6 0xADEF # HANGUL SYLLABLE KIYEOK-YU-SIOS -0x82F7 0xADF0 # HANGUL SYLLABLE KIYEOK-YU-SSANGSIOS -0x82F8 0xADF1 # HANGUL SYLLABLE KIYEOK-YU-IEUNG -0x82F9 0xADF2 # HANGUL SYLLABLE KIYEOK-YU-CIEUC -0x82FA 0xADF3 # HANGUL SYLLABLE KIYEOK-YU-CHIEUCH -0x82FB 0xADF4 # HANGUL SYLLABLE KIYEOK-YU-KHIEUKH -0x82FC 0xADF5 # HANGUL SYLLABLE KIYEOK-YU-THIEUTH -0x82FD 0xADF6 # HANGUL SYLLABLE KIYEOK-YU-PHIEUPH -0x82FE 0xADF7 # HANGUL SYLLABLE KIYEOK-YU-HIEUH -0x8341 0xADFA # HANGUL SYLLABLE KIYEOK-EU-SSANGKIYEOK -0x8342 0xADFB # HANGUL SYLLABLE KIYEOK-EU-KIYEOKSIOS -0x8343 0xADFD # HANGUL SYLLABLE KIYEOK-EU-NIEUNCIEUC -0x8344 0xADFE # HANGUL SYLLABLE KIYEOK-EU-NIEUNHIEUH -0x8345 0xAE02 # HANGUL SYLLABLE KIYEOK-EU-RIEULMIEUM -0x8346 0xAE03 # HANGUL SYLLABLE KIYEOK-EU-RIEULPIEUP -0x8347 0xAE04 # HANGUL SYLLABLE KIYEOK-EU-RIEULSIOS -0x8348 0xAE05 # HANGUL SYLLABLE KIYEOK-EU-RIEULTHIEUTH -0x8349 0xAE06 # HANGUL SYLLABLE KIYEOK-EU-RIEULPHIEUPH -0x834A 0xAE07 # HANGUL SYLLABLE KIYEOK-EU-RIEULHIEUH -0x834B 0xAE0A # HANGUL SYLLABLE KIYEOK-EU-PIEUPSIOS -0x834C 0xAE0C # HANGUL SYLLABLE KIYEOK-EU-SSANGSIOS -0x834D 0xAE0E # HANGUL SYLLABLE KIYEOK-EU-CIEUC -0x834E 0xAE0F # HANGUL SYLLABLE KIYEOK-EU-CHIEUCH -0x834F 0xAE10 # HANGUL SYLLABLE KIYEOK-EU-KHIEUKH -0x8350 0xAE11 # HANGUL SYLLABLE KIYEOK-EU-THIEUTH -0x8351 0xAE12 # HANGUL SYLLABLE KIYEOK-EU-PHIEUPH -0x8352 0xAE13 # HANGUL SYLLABLE KIYEOK-EU-HIEUH -0x8353 0xAE15 # HANGUL SYLLABLE KIYEOK-YI-KIYEOK -0x8354 0xAE16 # HANGUL SYLLABLE KIYEOK-YI-SSANGKIYEOK -0x8355 0xAE17 # HANGUL SYLLABLE KIYEOK-YI-KIYEOKSIOS -0x8356 0xAE18 # HANGUL SYLLABLE KIYEOK-YI-NIEUN -0x8357 0xAE19 # HANGUL SYLLABLE KIYEOK-YI-NIEUNCIEUC -0x8358 0xAE1A # HANGUL SYLLABLE KIYEOK-YI-NIEUNHIEUH -0x8359 0xAE1B # HANGUL SYLLABLE KIYEOK-YI-TIKEUT -0x835A 0xAE1C # HANGUL SYLLABLE KIYEOK-YI-RIEUL -0x8361 0xAE1D # HANGUL SYLLABLE KIYEOK-YI-RIEULKIYEOK -0x8362 0xAE1E # HANGUL SYLLABLE KIYEOK-YI-RIEULMIEUM -0x8363 0xAE1F # HANGUL SYLLABLE KIYEOK-YI-RIEULPIEUP -0x8364 0xAE20 # HANGUL SYLLABLE KIYEOK-YI-RIEULSIOS -0x8365 0xAE21 # HANGUL SYLLABLE KIYEOK-YI-RIEULTHIEUTH -0x8366 0xAE22 # HANGUL SYLLABLE KIYEOK-YI-RIEULPHIEUPH -0x8367 0xAE23 # HANGUL SYLLABLE KIYEOK-YI-RIEULHIEUH -0x8368 0xAE24 # HANGUL SYLLABLE KIYEOK-YI-MIEUM -0x8369 0xAE25 # HANGUL SYLLABLE KIYEOK-YI-PIEUP -0x836A 0xAE26 # HANGUL SYLLABLE KIYEOK-YI-PIEUPSIOS -0x836B 0xAE27 # HANGUL SYLLABLE KIYEOK-YI-SIOS -0x836C 0xAE28 # HANGUL SYLLABLE KIYEOK-YI-SSANGSIOS -0x836D 0xAE29 # HANGUL SYLLABLE KIYEOK-YI-IEUNG -0x836E 0xAE2A # HANGUL SYLLABLE KIYEOK-YI-CIEUC -0x836F 0xAE2B # HANGUL SYLLABLE KIYEOK-YI-CHIEUCH -0x8370 0xAE2C # HANGUL SYLLABLE KIYEOK-YI-KHIEUKH -0x8371 0xAE2D # HANGUL SYLLABLE KIYEOK-YI-THIEUTH -0x8372 0xAE2E # HANGUL SYLLABLE KIYEOK-YI-PHIEUPH -0x8373 0xAE2F # HANGUL SYLLABLE KIYEOK-YI-HIEUH -0x8374 0xAE32 # HANGUL SYLLABLE KIYEOK-I-SSANGKIYEOK -0x8375 0xAE33 # HANGUL SYLLABLE KIYEOK-I-KIYEOKSIOS -0x8376 0xAE35 # HANGUL SYLLABLE KIYEOK-I-NIEUNCIEUC -0x8377 0xAE36 # HANGUL SYLLABLE KIYEOK-I-NIEUNHIEUH -0x8378 0xAE39 # HANGUL SYLLABLE KIYEOK-I-RIEULKIYEOK -0x8379 0xAE3B # HANGUL SYLLABLE KIYEOK-I-RIEULPIEUP -0x837A 0xAE3C # HANGUL SYLLABLE KIYEOK-I-RIEULSIOS -0x8381 0xAE3D # HANGUL SYLLABLE KIYEOK-I-RIEULTHIEUTH -0x8382 0xAE3E # HANGUL SYLLABLE KIYEOK-I-RIEULPHIEUPH -0x8383 0xAE3F # HANGUL SYLLABLE KIYEOK-I-RIEULHIEUH -0x8384 0xAE42 # HANGUL SYLLABLE KIYEOK-I-PIEUPSIOS -0x8385 0xAE44 # HANGUL SYLLABLE KIYEOK-I-SSANGSIOS -0x8386 0xAE47 # HANGUL SYLLABLE KIYEOK-I-CHIEUCH -0x8387 0xAE48 # HANGUL SYLLABLE KIYEOK-I-KHIEUKH -0x8388 0xAE49 # HANGUL SYLLABLE KIYEOK-I-THIEUTH -0x8389 0xAE4B # HANGUL SYLLABLE KIYEOK-I-HIEUH -0x838A 0xAE4F # HANGUL SYLLABLE SSANGKIYEOK-A-KIYEOKSIOS -0x838B 0xAE51 # HANGUL SYLLABLE SSANGKIYEOK-A-NIEUNCIEUC -0x838C 0xAE52 # HANGUL SYLLABLE SSANGKIYEOK-A-NIEUNHIEUH -0x838D 0xAE53 # HANGUL SYLLABLE SSANGKIYEOK-A-TIKEUT -0x838E 0xAE55 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULKIYEOK -0x838F 0xAE57 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULPIEUP -0x8390 0xAE58 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULSIOS -0x8391 0xAE59 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULTHIEUTH -0x8392 0xAE5A # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULPHIEUPH -0x8393 0xAE5B # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULHIEUH -0x8394 0xAE5E # HANGUL SYLLABLE SSANGKIYEOK-A-PIEUPSIOS -0x8395 0xAE62 # HANGUL SYLLABLE SSANGKIYEOK-A-CIEUC -0x8396 0xAE63 # HANGUL SYLLABLE SSANGKIYEOK-A-CHIEUCH -0x8397 0xAE64 # HANGUL SYLLABLE SSANGKIYEOK-A-KHIEUKH -0x8398 0xAE66 # HANGUL SYLLABLE SSANGKIYEOK-A-PHIEUPH -0x8399 0xAE67 # HANGUL SYLLABLE SSANGKIYEOK-A-HIEUH -0x839A 0xAE6A # HANGUL SYLLABLE SSANGKIYEOK-AE-SSANGKIYEOK -0x839B 0xAE6B # HANGUL SYLLABLE SSANGKIYEOK-AE-KIYEOKSIOS -0x839C 0xAE6D # HANGUL SYLLABLE SSANGKIYEOK-AE-NIEUNCIEUC -0x839D 0xAE6E # HANGUL SYLLABLE SSANGKIYEOK-AE-NIEUNHIEUH -0x839E 0xAE6F # HANGUL SYLLABLE SSANGKIYEOK-AE-TIKEUT -0x839F 0xAE71 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULKIYEOK -0x83A0 0xAE72 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULMIEUM -0x83A1 0xAE73 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULPIEUP -0x83A2 0xAE74 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULSIOS -0x83A3 0xAE75 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULTHIEUTH -0x83A4 0xAE76 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULPHIEUPH -0x83A5 0xAE77 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULHIEUH -0x83A6 0xAE7A # HANGUL SYLLABLE SSANGKIYEOK-AE-PIEUPSIOS -0x83A7 0xAE7E # HANGUL SYLLABLE SSANGKIYEOK-AE-CIEUC -0x83A8 0xAE7F # HANGUL SYLLABLE SSANGKIYEOK-AE-CHIEUCH -0x83A9 0xAE80 # HANGUL SYLLABLE SSANGKIYEOK-AE-KHIEUKH -0x83AA 0xAE81 # HANGUL SYLLABLE SSANGKIYEOK-AE-THIEUTH -0x83AB 0xAE82 # HANGUL SYLLABLE SSANGKIYEOK-AE-PHIEUPH -0x83AC 0xAE83 # HANGUL SYLLABLE SSANGKIYEOK-AE-HIEUH -0x83AD 0xAE86 # HANGUL SYLLABLE SSANGKIYEOK-YA-SSANGKIYEOK -0x83AE 0xAE87 # HANGUL SYLLABLE SSANGKIYEOK-YA-KIYEOKSIOS -0x83AF 0xAE88 # HANGUL SYLLABLE SSANGKIYEOK-YA-NIEUN -0x83B0 0xAE89 # HANGUL SYLLABLE SSANGKIYEOK-YA-NIEUNCIEUC -0x83B1 0xAE8A # HANGUL SYLLABLE SSANGKIYEOK-YA-NIEUNHIEUH -0x83B2 0xAE8B # HANGUL SYLLABLE SSANGKIYEOK-YA-TIKEUT -0x83B3 0xAE8D # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULKIYEOK -0x83B4 0xAE8E # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULMIEUM -0x83B5 0xAE8F # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULPIEUP -0x83B6 0xAE90 # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULSIOS -0x83B7 0xAE91 # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULTHIEUTH -0x83B8 0xAE92 # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULPHIEUPH -0x83B9 0xAE93 # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULHIEUH -0x83BA 0xAE94 # HANGUL SYLLABLE SSANGKIYEOK-YA-MIEUM -0x83BB 0xAE95 # HANGUL SYLLABLE SSANGKIYEOK-YA-PIEUP -0x83BC 0xAE96 # HANGUL SYLLABLE SSANGKIYEOK-YA-PIEUPSIOS -0x83BD 0xAE97 # HANGUL SYLLABLE SSANGKIYEOK-YA-SIOS -0x83BE 0xAE98 # HANGUL SYLLABLE SSANGKIYEOK-YA-SSANGSIOS -0x83BF 0xAE99 # HANGUL SYLLABLE SSANGKIYEOK-YA-IEUNG -0x83C0 0xAE9A # HANGUL SYLLABLE SSANGKIYEOK-YA-CIEUC -0x83C1 0xAE9B # HANGUL SYLLABLE SSANGKIYEOK-YA-CHIEUCH -0x83C2 0xAE9C # HANGUL SYLLABLE SSANGKIYEOK-YA-KHIEUKH -0x83C3 0xAE9D # HANGUL SYLLABLE SSANGKIYEOK-YA-THIEUTH -0x83C4 0xAE9E # HANGUL SYLLABLE SSANGKIYEOK-YA-PHIEUPH -0x83C5 0xAE9F # HANGUL SYLLABLE SSANGKIYEOK-YA-HIEUH -0x83C6 0xAEA0 # HANGUL SYLLABLE SSANGKIYEOK-YAE -0x83C7 0xAEA1 # HANGUL SYLLABLE SSANGKIYEOK-YAE-KIYEOK -0x83C8 0xAEA2 # HANGUL SYLLABLE SSANGKIYEOK-YAE-SSANGKIYEOK -0x83C9 0xAEA3 # HANGUL SYLLABLE SSANGKIYEOK-YAE-KIYEOKSIOS -0x83CA 0xAEA4 # HANGUL SYLLABLE SSANGKIYEOK-YAE-NIEUN -0x83CB 0xAEA5 # HANGUL SYLLABLE SSANGKIYEOK-YAE-NIEUNCIEUC -0x83CC 0xAEA6 # HANGUL SYLLABLE SSANGKIYEOK-YAE-NIEUNHIEUH -0x83CD 0xAEA7 # HANGUL SYLLABLE SSANGKIYEOK-YAE-TIKEUT -0x83CE 0xAEA8 # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEUL -0x83CF 0xAEA9 # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULKIYEOK -0x83D0 0xAEAA # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULMIEUM -0x83D1 0xAEAB # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULPIEUP -0x83D2 0xAEAC # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULSIOS -0x83D3 0xAEAD # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULTHIEUTH -0x83D4 0xAEAE # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULPHIEUPH -0x83D5 0xAEAF # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULHIEUH -0x83D6 0xAEB0 # HANGUL SYLLABLE SSANGKIYEOK-YAE-MIEUM -0x83D7 0xAEB1 # HANGUL SYLLABLE SSANGKIYEOK-YAE-PIEUP -0x83D8 0xAEB2 # HANGUL SYLLABLE SSANGKIYEOK-YAE-PIEUPSIOS -0x83D9 0xAEB3 # HANGUL SYLLABLE SSANGKIYEOK-YAE-SIOS -0x83DA 0xAEB4 # HANGUL SYLLABLE SSANGKIYEOK-YAE-SSANGSIOS -0x83DB 0xAEB5 # HANGUL SYLLABLE SSANGKIYEOK-YAE-IEUNG -0x83DC 0xAEB6 # HANGUL SYLLABLE SSANGKIYEOK-YAE-CIEUC -0x83DD 0xAEB7 # HANGUL SYLLABLE SSANGKIYEOK-YAE-CHIEUCH -0x83DE 0xAEB8 # HANGUL SYLLABLE SSANGKIYEOK-YAE-KHIEUKH -0x83DF 0xAEB9 # HANGUL SYLLABLE SSANGKIYEOK-YAE-THIEUTH -0x83E0 0xAEBA # HANGUL SYLLABLE SSANGKIYEOK-YAE-PHIEUPH -0x83E1 0xAEBB # HANGUL SYLLABLE SSANGKIYEOK-YAE-HIEUH -0x83E2 0xAEBF # HANGUL SYLLABLE SSANGKIYEOK-EO-KIYEOKSIOS -0x83E3 0xAEC1 # HANGUL SYLLABLE SSANGKIYEOK-EO-NIEUNCIEUC -0x83E4 0xAEC2 # HANGUL SYLLABLE SSANGKIYEOK-EO-NIEUNHIEUH -0x83E5 0xAEC3 # HANGUL SYLLABLE SSANGKIYEOK-EO-TIKEUT -0x83E6 0xAEC5 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULKIYEOK -0x83E7 0xAEC6 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULMIEUM -0x83E8 0xAEC7 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULPIEUP -0x83E9 0xAEC8 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULSIOS -0x83EA 0xAEC9 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULTHIEUTH -0x83EB 0xAECA # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULPHIEUPH -0x83EC 0xAECB # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULHIEUH -0x83ED 0xAECE # HANGUL SYLLABLE SSANGKIYEOK-EO-PIEUPSIOS -0x83EE 0xAED2 # HANGUL SYLLABLE SSANGKIYEOK-EO-CIEUC -0x83EF 0xAED3 # HANGUL SYLLABLE SSANGKIYEOK-EO-CHIEUCH -0x83F0 0xAED4 # HANGUL SYLLABLE SSANGKIYEOK-EO-KHIEUKH -0x83F1 0xAED5 # HANGUL SYLLABLE SSANGKIYEOK-EO-THIEUTH -0x83F2 0xAED6 # HANGUL SYLLABLE SSANGKIYEOK-EO-PHIEUPH -0x83F3 0xAED7 # HANGUL SYLLABLE SSANGKIYEOK-EO-HIEUH -0x83F4 0xAEDA # HANGUL SYLLABLE SSANGKIYEOK-E-SSANGKIYEOK -0x83F5 0xAEDB # HANGUL SYLLABLE SSANGKIYEOK-E-KIYEOKSIOS -0x83F6 0xAEDD # HANGUL SYLLABLE SSANGKIYEOK-E-NIEUNCIEUC -0x83F7 0xAEDE # HANGUL SYLLABLE SSANGKIYEOK-E-NIEUNHIEUH -0x83F8 0xAEDF # HANGUL SYLLABLE SSANGKIYEOK-E-TIKEUT -0x83F9 0xAEE0 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEUL -0x83FA 0xAEE1 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULKIYEOK -0x83FB 0xAEE2 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULMIEUM -0x83FC 0xAEE3 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULPIEUP -0x83FD 0xAEE4 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULSIOS -0x83FE 0xAEE5 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULTHIEUTH -0x8441 0xAEE6 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULPHIEUPH -0x8442 0xAEE7 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULHIEUH -0x8443 0xAEE9 # HANGUL SYLLABLE SSANGKIYEOK-E-PIEUP -0x8444 0xAEEA # HANGUL SYLLABLE SSANGKIYEOK-E-PIEUPSIOS -0x8445 0xAEEC # HANGUL SYLLABLE SSANGKIYEOK-E-SSANGSIOS -0x8446 0xAEEE # HANGUL SYLLABLE SSANGKIYEOK-E-CIEUC -0x8447 0xAEEF # HANGUL SYLLABLE SSANGKIYEOK-E-CHIEUCH -0x8448 0xAEF0 # HANGUL SYLLABLE SSANGKIYEOK-E-KHIEUKH -0x8449 0xAEF1 # HANGUL SYLLABLE SSANGKIYEOK-E-THIEUTH -0x844A 0xAEF2 # HANGUL SYLLABLE SSANGKIYEOK-E-PHIEUPH -0x844B 0xAEF3 # HANGUL SYLLABLE SSANGKIYEOK-E-HIEUH -0x844C 0xAEF5 # HANGUL SYLLABLE SSANGKIYEOK-YEO-KIYEOK -0x844D 0xAEF6 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SSANGKIYEOK -0x844E 0xAEF7 # HANGUL SYLLABLE SSANGKIYEOK-YEO-KIYEOKSIOS -0x844F 0xAEF9 # HANGUL SYLLABLE SSANGKIYEOK-YEO-NIEUNCIEUC -0x8450 0xAEFA # HANGUL SYLLABLE SSANGKIYEOK-YEO-NIEUNHIEUH -0x8451 0xAEFB # HANGUL SYLLABLE SSANGKIYEOK-YEO-TIKEUT -0x8452 0xAEFD # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULKIYEOK -0x8453 0xAEFE # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULMIEUM -0x8454 0xAEFF # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULPIEUP -0x8455 0xAF00 # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULSIOS -0x8456 0xAF01 # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULTHIEUTH -0x8457 0xAF02 # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULPHIEUPH -0x8458 0xAF03 # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULHIEUH -0x8459 0xAF04 # HANGUL SYLLABLE SSANGKIYEOK-YEO-MIEUM -0x845A 0xAF05 # HANGUL SYLLABLE SSANGKIYEOK-YEO-PIEUP -0x8461 0xAF06 # HANGUL SYLLABLE SSANGKIYEOK-YEO-PIEUPSIOS -0x8462 0xAF09 # HANGUL SYLLABLE SSANGKIYEOK-YEO-IEUNG -0x8463 0xAF0A # HANGUL SYLLABLE SSANGKIYEOK-YEO-CIEUC -0x8464 0xAF0B # HANGUL SYLLABLE SSANGKIYEOK-YEO-CHIEUCH -0x8465 0xAF0C # HANGUL SYLLABLE SSANGKIYEOK-YEO-KHIEUKH -0x8466 0xAF0E # HANGUL SYLLABLE SSANGKIYEOK-YEO-PHIEUPH -0x8467 0xAF0F # HANGUL SYLLABLE SSANGKIYEOK-YEO-HIEUH -0x8468 0xAF11 # HANGUL SYLLABLE SSANGKIYEOK-YE-KIYEOK -0x8469 0xAF12 # HANGUL SYLLABLE SSANGKIYEOK-YE-SSANGKIYEOK -0x846A 0xAF13 # HANGUL SYLLABLE SSANGKIYEOK-YE-KIYEOKSIOS -0x846B 0xAF14 # HANGUL SYLLABLE SSANGKIYEOK-YE-NIEUN -0x846C 0xAF15 # HANGUL SYLLABLE SSANGKIYEOK-YE-NIEUNCIEUC -0x846D 0xAF16 # HANGUL SYLLABLE SSANGKIYEOK-YE-NIEUNHIEUH -0x846E 0xAF17 # HANGUL SYLLABLE SSANGKIYEOK-YE-TIKEUT -0x846F 0xAF18 # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEUL -0x8470 0xAF19 # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULKIYEOK -0x8471 0xAF1A # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULMIEUM -0x8472 0xAF1B # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULPIEUP -0x8473 0xAF1C # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULSIOS -0x8474 0xAF1D # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULTHIEUTH -0x8475 0xAF1E # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULPHIEUPH -0x8476 0xAF1F # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULHIEUH -0x8477 0xAF20 # HANGUL SYLLABLE SSANGKIYEOK-YE-MIEUM -0x8478 0xAF21 # HANGUL SYLLABLE SSANGKIYEOK-YE-PIEUP -0x8479 0xAF22 # HANGUL SYLLABLE SSANGKIYEOK-YE-PIEUPSIOS -0x847A 0xAF23 # HANGUL SYLLABLE SSANGKIYEOK-YE-SIOS -0x8481 0xAF24 # HANGUL SYLLABLE SSANGKIYEOK-YE-SSANGSIOS -0x8482 0xAF25 # HANGUL SYLLABLE SSANGKIYEOK-YE-IEUNG -0x8483 0xAF26 # HANGUL SYLLABLE SSANGKIYEOK-YE-CIEUC -0x8484 0xAF27 # HANGUL SYLLABLE SSANGKIYEOK-YE-CHIEUCH -0x8485 0xAF28 # HANGUL SYLLABLE SSANGKIYEOK-YE-KHIEUKH -0x8486 0xAF29 # HANGUL SYLLABLE SSANGKIYEOK-YE-THIEUTH -0x8487 0xAF2A # HANGUL SYLLABLE SSANGKIYEOK-YE-PHIEUPH -0x8488 0xAF2B # HANGUL SYLLABLE SSANGKIYEOK-YE-HIEUH -0x8489 0xAF2E # HANGUL SYLLABLE SSANGKIYEOK-O-SSANGKIYEOK -0x848A 0xAF2F # HANGUL SYLLABLE SSANGKIYEOK-O-KIYEOKSIOS -0x848B 0xAF31 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUNCIEUC -0x848C 0xAF33 # HANGUL SYLLABLE SSANGKIYEOK-O-TIKEUT -0x848D 0xAF35 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULKIYEOK -0x848E 0xAF36 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULMIEUM -0x848F 0xAF37 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULPIEUP -0x8490 0xAF38 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULSIOS -0x8491 0xAF39 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULTHIEUTH -0x8492 0xAF3A # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULPHIEUPH -0x8493 0xAF3B # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULHIEUH -0x8494 0xAF3E # HANGUL SYLLABLE SSANGKIYEOK-O-PIEUPSIOS -0x8495 0xAF40 # HANGUL SYLLABLE SSANGKIYEOK-O-SSANGSIOS -0x8496 0xAF44 # HANGUL SYLLABLE SSANGKIYEOK-O-KHIEUKH -0x8497 0xAF45 # HANGUL SYLLABLE SSANGKIYEOK-O-THIEUTH -0x8498 0xAF46 # HANGUL SYLLABLE SSANGKIYEOK-O-PHIEUPH -0x8499 0xAF47 # HANGUL SYLLABLE SSANGKIYEOK-O-HIEUH -0x849A 0xAF4A # HANGUL SYLLABLE SSANGKIYEOK-WA-SSANGKIYEOK -0x849B 0xAF4B # HANGUL SYLLABLE SSANGKIYEOK-WA-KIYEOKSIOS -0x849C 0xAF4C # HANGUL SYLLABLE SSANGKIYEOK-WA-NIEUN -0x849D 0xAF4D # HANGUL SYLLABLE SSANGKIYEOK-WA-NIEUNCIEUC -0x849E 0xAF4E # HANGUL SYLLABLE SSANGKIYEOK-WA-NIEUNHIEUH -0x849F 0xAF4F # HANGUL SYLLABLE SSANGKIYEOK-WA-TIKEUT -0x84A0 0xAF51 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULKIYEOK -0x84A1 0xAF52 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULMIEUM -0x84A2 0xAF53 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULPIEUP -0x84A3 0xAF54 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULSIOS -0x84A4 0xAF55 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULTHIEUTH -0x84A5 0xAF56 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULPHIEUPH -0x84A6 0xAF57 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULHIEUH -0x84A7 0xAF58 # HANGUL SYLLABLE SSANGKIYEOK-WA-MIEUM -0x84A8 0xAF59 # HANGUL SYLLABLE SSANGKIYEOK-WA-PIEUP -0x84A9 0xAF5A # HANGUL SYLLABLE SSANGKIYEOK-WA-PIEUPSIOS -0x84AA 0xAF5B # HANGUL SYLLABLE SSANGKIYEOK-WA-SIOS -0x84AB 0xAF5E # HANGUL SYLLABLE SSANGKIYEOK-WA-CIEUC -0x84AC 0xAF5F # HANGUL SYLLABLE SSANGKIYEOK-WA-CHIEUCH -0x84AD 0xAF60 # HANGUL SYLLABLE SSANGKIYEOK-WA-KHIEUKH -0x84AE 0xAF61 # HANGUL SYLLABLE SSANGKIYEOK-WA-THIEUTH -0x84AF 0xAF62 # HANGUL SYLLABLE SSANGKIYEOK-WA-PHIEUPH -0x84B0 0xAF63 # HANGUL SYLLABLE SSANGKIYEOK-WA-HIEUH -0x84B1 0xAF66 # HANGUL SYLLABLE SSANGKIYEOK-WAE-SSANGKIYEOK -0x84B2 0xAF67 # HANGUL SYLLABLE SSANGKIYEOK-WAE-KIYEOKSIOS -0x84B3 0xAF68 # HANGUL SYLLABLE SSANGKIYEOK-WAE-NIEUN -0x84B4 0xAF69 # HANGUL SYLLABLE SSANGKIYEOK-WAE-NIEUNCIEUC -0x84B5 0xAF6A # HANGUL SYLLABLE SSANGKIYEOK-WAE-NIEUNHIEUH -0x84B6 0xAF6B # HANGUL SYLLABLE SSANGKIYEOK-WAE-TIKEUT -0x84B7 0xAF6C # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEUL -0x84B8 0xAF6D # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULKIYEOK -0x84B9 0xAF6E # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULMIEUM -0x84BA 0xAF6F # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULPIEUP -0x84BB 0xAF70 # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULSIOS -0x84BC 0xAF71 # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULTHIEUTH -0x84BD 0xAF72 # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULPHIEUPH -0x84BE 0xAF73 # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULHIEUH -0x84BF 0xAF74 # HANGUL SYLLABLE SSANGKIYEOK-WAE-MIEUM -0x84C0 0xAF75 # HANGUL SYLLABLE SSANGKIYEOK-WAE-PIEUP -0x84C1 0xAF76 # HANGUL SYLLABLE SSANGKIYEOK-WAE-PIEUPSIOS -0x84C2 0xAF77 # HANGUL SYLLABLE SSANGKIYEOK-WAE-SIOS -0x84C3 0xAF78 # HANGUL SYLLABLE SSANGKIYEOK-WAE-SSANGSIOS -0x84C4 0xAF7A # HANGUL SYLLABLE SSANGKIYEOK-WAE-CIEUC -0x84C5 0xAF7B # HANGUL SYLLABLE SSANGKIYEOK-WAE-CHIEUCH -0x84C6 0xAF7C # HANGUL SYLLABLE SSANGKIYEOK-WAE-KHIEUKH -0x84C7 0xAF7D # HANGUL SYLLABLE SSANGKIYEOK-WAE-THIEUTH -0x84C8 0xAF7E # HANGUL SYLLABLE SSANGKIYEOK-WAE-PHIEUPH -0x84C9 0xAF7F # HANGUL SYLLABLE SSANGKIYEOK-WAE-HIEUH -0x84CA 0xAF81 # HANGUL SYLLABLE SSANGKIYEOK-OE-KIYEOK -0x84CB 0xAF82 # HANGUL SYLLABLE SSANGKIYEOK-OE-SSANGKIYEOK -0x84CC 0xAF83 # HANGUL SYLLABLE SSANGKIYEOK-OE-KIYEOKSIOS -0x84CD 0xAF85 # HANGUL SYLLABLE SSANGKIYEOK-OE-NIEUNCIEUC -0x84CE 0xAF86 # HANGUL SYLLABLE SSANGKIYEOK-OE-NIEUNHIEUH -0x84CF 0xAF87 # HANGUL SYLLABLE SSANGKIYEOK-OE-TIKEUT -0x84D0 0xAF89 # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULKIYEOK -0x84D1 0xAF8A # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULMIEUM -0x84D2 0xAF8B # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULPIEUP -0x84D3 0xAF8C # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULSIOS -0x84D4 0xAF8D # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULTHIEUTH -0x84D5 0xAF8E # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULPHIEUPH -0x84D6 0xAF8F # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULHIEUH -0x84D7 0xAF92 # HANGUL SYLLABLE SSANGKIYEOK-OE-PIEUPSIOS -0x84D8 0xAF93 # HANGUL SYLLABLE SSANGKIYEOK-OE-SIOS -0x84D9 0xAF94 # HANGUL SYLLABLE SSANGKIYEOK-OE-SSANGSIOS -0x84DA 0xAF96 # HANGUL SYLLABLE SSANGKIYEOK-OE-CIEUC -0x84DB 0xAF97 # HANGUL SYLLABLE SSANGKIYEOK-OE-CHIEUCH -0x84DC 0xAF98 # HANGUL SYLLABLE SSANGKIYEOK-OE-KHIEUKH -0x84DD 0xAF99 # HANGUL SYLLABLE SSANGKIYEOK-OE-THIEUTH -0x84DE 0xAF9A # HANGUL SYLLABLE SSANGKIYEOK-OE-PHIEUPH -0x84DF 0xAF9B # HANGUL SYLLABLE SSANGKIYEOK-OE-HIEUH -0x84E0 0xAF9D # HANGUL SYLLABLE SSANGKIYEOK-YO-KIYEOK -0x84E1 0xAF9E # HANGUL SYLLABLE SSANGKIYEOK-YO-SSANGKIYEOK -0x84E2 0xAF9F # HANGUL SYLLABLE SSANGKIYEOK-YO-KIYEOKSIOS -0x84E3 0xAFA0 # HANGUL SYLLABLE SSANGKIYEOK-YO-NIEUN -0x84E4 0xAFA1 # HANGUL SYLLABLE SSANGKIYEOK-YO-NIEUNCIEUC -0x84E5 0xAFA2 # HANGUL SYLLABLE SSANGKIYEOK-YO-NIEUNHIEUH -0x84E6 0xAFA3 # HANGUL SYLLABLE SSANGKIYEOK-YO-TIKEUT -0x84E7 0xAFA4 # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEUL -0x84E8 0xAFA5 # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULKIYEOK -0x84E9 0xAFA6 # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULMIEUM -0x84EA 0xAFA7 # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULPIEUP -0x84EB 0xAFA8 # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULSIOS -0x84EC 0xAFA9 # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULTHIEUTH -0x84ED 0xAFAA # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULPHIEUPH -0x84EE 0xAFAB # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULHIEUH -0x84EF 0xAFAC # HANGUL SYLLABLE SSANGKIYEOK-YO-MIEUM -0x84F0 0xAFAD # HANGUL SYLLABLE SSANGKIYEOK-YO-PIEUP -0x84F1 0xAFAE # HANGUL SYLLABLE SSANGKIYEOK-YO-PIEUPSIOS -0x84F2 0xAFAF # HANGUL SYLLABLE SSANGKIYEOK-YO-SIOS -0x84F3 0xAFB0 # HANGUL SYLLABLE SSANGKIYEOK-YO-SSANGSIOS -0x84F4 0xAFB1 # HANGUL SYLLABLE SSANGKIYEOK-YO-IEUNG -0x84F5 0xAFB2 # HANGUL SYLLABLE SSANGKIYEOK-YO-CIEUC -0x84F6 0xAFB3 # HANGUL SYLLABLE SSANGKIYEOK-YO-CHIEUCH -0x84F7 0xAFB4 # HANGUL SYLLABLE SSANGKIYEOK-YO-KHIEUKH -0x84F8 0xAFB5 # HANGUL SYLLABLE SSANGKIYEOK-YO-THIEUTH -0x84F9 0xAFB6 # HANGUL SYLLABLE SSANGKIYEOK-YO-PHIEUPH -0x84FA 0xAFB7 # HANGUL SYLLABLE SSANGKIYEOK-YO-HIEUH -0x84FB 0xAFBA # HANGUL SYLLABLE SSANGKIYEOK-U-SSANGKIYEOK -0x84FC 0xAFBB # HANGUL SYLLABLE SSANGKIYEOK-U-KIYEOKSIOS -0x84FD 0xAFBD # HANGUL SYLLABLE SSANGKIYEOK-U-NIEUNCIEUC -0x84FE 0xAFBE # HANGUL SYLLABLE SSANGKIYEOK-U-NIEUNHIEUH -0x8541 0xAFBF # HANGUL SYLLABLE SSANGKIYEOK-U-TIKEUT -0x8542 0xAFC1 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULKIYEOK -0x8543 0xAFC2 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULMIEUM -0x8544 0xAFC3 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULPIEUP -0x8545 0xAFC4 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULSIOS -0x8546 0xAFC5 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULTHIEUTH -0x8547 0xAFC6 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULPHIEUPH -0x8548 0xAFCA # HANGUL SYLLABLE SSANGKIYEOK-U-PIEUPSIOS -0x8549 0xAFCC # HANGUL SYLLABLE SSANGKIYEOK-U-SSANGSIOS -0x854A 0xAFCF # HANGUL SYLLABLE SSANGKIYEOK-U-CHIEUCH -0x854B 0xAFD0 # HANGUL SYLLABLE SSANGKIYEOK-U-KHIEUKH -0x854C 0xAFD1 # HANGUL SYLLABLE SSANGKIYEOK-U-THIEUTH -0x854D 0xAFD2 # HANGUL SYLLABLE SSANGKIYEOK-U-PHIEUPH -0x854E 0xAFD3 # HANGUL SYLLABLE SSANGKIYEOK-U-HIEUH -0x854F 0xAFD5 # HANGUL SYLLABLE SSANGKIYEOK-WEO-KIYEOK -0x8550 0xAFD6 # HANGUL SYLLABLE SSANGKIYEOK-WEO-SSANGKIYEOK -0x8551 0xAFD7 # HANGUL SYLLABLE SSANGKIYEOK-WEO-KIYEOKSIOS -0x8552 0xAFD8 # HANGUL SYLLABLE SSANGKIYEOK-WEO-NIEUN -0x8553 0xAFD9 # HANGUL SYLLABLE SSANGKIYEOK-WEO-NIEUNCIEUC -0x8554 0xAFDA # HANGUL SYLLABLE SSANGKIYEOK-WEO-NIEUNHIEUH -0x8555 0xAFDB # HANGUL SYLLABLE SSANGKIYEOK-WEO-TIKEUT -0x8556 0xAFDD # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULKIYEOK -0x8557 0xAFDE # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULMIEUM -0x8558 0xAFDF # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULPIEUP -0x8559 0xAFE0 # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULSIOS -0x855A 0xAFE1 # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULTHIEUTH -0x8561 0xAFE2 # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULPHIEUPH -0x8562 0xAFE3 # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULHIEUH -0x8563 0xAFE4 # HANGUL SYLLABLE SSANGKIYEOK-WEO-MIEUM -0x8564 0xAFE5 # HANGUL SYLLABLE SSANGKIYEOK-WEO-PIEUP -0x8565 0xAFE6 # HANGUL SYLLABLE SSANGKIYEOK-WEO-PIEUPSIOS -0x8566 0xAFE7 # HANGUL SYLLABLE SSANGKIYEOK-WEO-SIOS -0x8567 0xAFEA # HANGUL SYLLABLE SSANGKIYEOK-WEO-CIEUC -0x8568 0xAFEB # HANGUL SYLLABLE SSANGKIYEOK-WEO-CHIEUCH -0x8569 0xAFEC # HANGUL SYLLABLE SSANGKIYEOK-WEO-KHIEUKH -0x856A 0xAFED # HANGUL SYLLABLE SSANGKIYEOK-WEO-THIEUTH -0x856B 0xAFEE # HANGUL SYLLABLE SSANGKIYEOK-WEO-PHIEUPH -0x856C 0xAFEF # HANGUL SYLLABLE SSANGKIYEOK-WEO-HIEUH -0x856D 0xAFF2 # HANGUL SYLLABLE SSANGKIYEOK-WE-SSANGKIYEOK -0x856E 0xAFF3 # HANGUL SYLLABLE SSANGKIYEOK-WE-KIYEOKSIOS -0x856F 0xAFF5 # HANGUL SYLLABLE SSANGKIYEOK-WE-NIEUNCIEUC -0x8570 0xAFF6 # HANGUL SYLLABLE SSANGKIYEOK-WE-NIEUNHIEUH -0x8571 0xAFF7 # HANGUL SYLLABLE SSANGKIYEOK-WE-TIKEUT -0x8572 0xAFF9 # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULKIYEOK -0x8573 0xAFFA # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULMIEUM -0x8574 0xAFFB # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULPIEUP -0x8575 0xAFFC # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULSIOS -0x8576 0xAFFD # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULTHIEUTH -0x8577 0xAFFE # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULPHIEUPH -0x8578 0xAFFF # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULHIEUH -0x8579 0xB002 # HANGUL SYLLABLE SSANGKIYEOK-WE-PIEUPSIOS -0x857A 0xB003 # HANGUL SYLLABLE SSANGKIYEOK-WE-SIOS -0x8581 0xB005 # HANGUL SYLLABLE SSANGKIYEOK-WE-IEUNG -0x8582 0xB006 # HANGUL SYLLABLE SSANGKIYEOK-WE-CIEUC -0x8583 0xB007 # HANGUL SYLLABLE SSANGKIYEOK-WE-CHIEUCH -0x8584 0xB008 # HANGUL SYLLABLE SSANGKIYEOK-WE-KHIEUKH -0x8585 0xB009 # HANGUL SYLLABLE SSANGKIYEOK-WE-THIEUTH -0x8586 0xB00A # HANGUL SYLLABLE SSANGKIYEOK-WE-PHIEUPH -0x8587 0xB00B # HANGUL SYLLABLE SSANGKIYEOK-WE-HIEUH -0x8588 0xB00D # HANGUL SYLLABLE SSANGKIYEOK-WI-KIYEOK -0x8589 0xB00E # HANGUL SYLLABLE SSANGKIYEOK-WI-SSANGKIYEOK -0x858A 0xB00F # HANGUL SYLLABLE SSANGKIYEOK-WI-KIYEOKSIOS -0x858B 0xB011 # HANGUL SYLLABLE SSANGKIYEOK-WI-NIEUNCIEUC -0x858C 0xB012 # HANGUL SYLLABLE SSANGKIYEOK-WI-NIEUNHIEUH -0x858D 0xB013 # HANGUL SYLLABLE SSANGKIYEOK-WI-TIKEUT -0x858E 0xB015 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULKIYEOK -0x858F 0xB016 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULMIEUM -0x8590 0xB017 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULPIEUP -0x8591 0xB018 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULSIOS -0x8592 0xB019 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULTHIEUTH -0x8593 0xB01A # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULPHIEUPH -0x8594 0xB01B # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULHIEUH -0x8595 0xB01E # HANGUL SYLLABLE SSANGKIYEOK-WI-PIEUPSIOS -0x8596 0xB01F # HANGUL SYLLABLE SSANGKIYEOK-WI-SIOS -0x8597 0xB020 # HANGUL SYLLABLE SSANGKIYEOK-WI-SSANGSIOS -0x8598 0xB021 # HANGUL SYLLABLE SSANGKIYEOK-WI-IEUNG -0x8599 0xB022 # HANGUL SYLLABLE SSANGKIYEOK-WI-CIEUC -0x859A 0xB023 # HANGUL SYLLABLE SSANGKIYEOK-WI-CHIEUCH -0x859B 0xB024 # HANGUL SYLLABLE SSANGKIYEOK-WI-KHIEUKH -0x859C 0xB025 # HANGUL SYLLABLE SSANGKIYEOK-WI-THIEUTH -0x859D 0xB026 # HANGUL SYLLABLE SSANGKIYEOK-WI-PHIEUPH -0x859E 0xB027 # HANGUL SYLLABLE SSANGKIYEOK-WI-HIEUH -0x859F 0xB029 # HANGUL SYLLABLE SSANGKIYEOK-YU-KIYEOK -0x85A0 0xB02A # HANGUL SYLLABLE SSANGKIYEOK-YU-SSANGKIYEOK -0x85A1 0xB02B # HANGUL SYLLABLE SSANGKIYEOK-YU-KIYEOKSIOS -0x85A2 0xB02C # HANGUL SYLLABLE SSANGKIYEOK-YU-NIEUN -0x85A3 0xB02D # HANGUL SYLLABLE SSANGKIYEOK-YU-NIEUNCIEUC -0x85A4 0xB02E # HANGUL SYLLABLE SSANGKIYEOK-YU-NIEUNHIEUH -0x85A5 0xB02F # HANGUL SYLLABLE SSANGKIYEOK-YU-TIKEUT -0x85A6 0xB030 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEUL -0x85A7 0xB031 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULKIYEOK -0x85A8 0xB032 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULMIEUM -0x85A9 0xB033 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULPIEUP -0x85AA 0xB034 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULSIOS -0x85AB 0xB035 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULTHIEUTH -0x85AC 0xB036 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULPHIEUPH -0x85AD 0xB037 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULHIEUH -0x85AE 0xB038 # HANGUL SYLLABLE SSANGKIYEOK-YU-MIEUM -0x85AF 0xB039 # HANGUL SYLLABLE SSANGKIYEOK-YU-PIEUP -0x85B0 0xB03A # HANGUL SYLLABLE SSANGKIYEOK-YU-PIEUPSIOS -0x85B1 0xB03B # HANGUL SYLLABLE SSANGKIYEOK-YU-SIOS -0x85B2 0xB03C # HANGUL SYLLABLE SSANGKIYEOK-YU-SSANGSIOS -0x85B3 0xB03D # HANGUL SYLLABLE SSANGKIYEOK-YU-IEUNG -0x85B4 0xB03E # HANGUL SYLLABLE SSANGKIYEOK-YU-CIEUC -0x85B5 0xB03F # HANGUL SYLLABLE SSANGKIYEOK-YU-CHIEUCH -0x85B6 0xB040 # HANGUL SYLLABLE SSANGKIYEOK-YU-KHIEUKH -0x85B7 0xB041 # HANGUL SYLLABLE SSANGKIYEOK-YU-THIEUTH -0x85B8 0xB042 # HANGUL SYLLABLE SSANGKIYEOK-YU-PHIEUPH -0x85B9 0xB043 # HANGUL SYLLABLE SSANGKIYEOK-YU-HIEUH -0x85BA 0xB046 # HANGUL SYLLABLE SSANGKIYEOK-EU-SSANGKIYEOK -0x85BB 0xB047 # HANGUL SYLLABLE SSANGKIYEOK-EU-KIYEOKSIOS -0x85BC 0xB049 # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUNCIEUC -0x85BD 0xB04B # HANGUL SYLLABLE SSANGKIYEOK-EU-TIKEUT -0x85BE 0xB04D # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULKIYEOK -0x85BF 0xB04F # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULPIEUP -0x85C0 0xB050 # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULSIOS -0x85C1 0xB051 # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULTHIEUTH -0x85C2 0xB052 # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULPHIEUPH -0x85C3 0xB056 # HANGUL SYLLABLE SSANGKIYEOK-EU-PIEUPSIOS -0x85C4 0xB058 # HANGUL SYLLABLE SSANGKIYEOK-EU-SSANGSIOS -0x85C5 0xB05A # HANGUL SYLLABLE SSANGKIYEOK-EU-CIEUC -0x85C6 0xB05B # HANGUL SYLLABLE SSANGKIYEOK-EU-CHIEUCH -0x85C7 0xB05C # HANGUL SYLLABLE SSANGKIYEOK-EU-KHIEUKH -0x85C8 0xB05E # HANGUL SYLLABLE SSANGKIYEOK-EU-PHIEUPH -0x85C9 0xB05F # HANGUL SYLLABLE SSANGKIYEOK-EU-HIEUH -0x85CA 0xB060 # HANGUL SYLLABLE SSANGKIYEOK-YI -0x85CB 0xB061 # HANGUL SYLLABLE SSANGKIYEOK-YI-KIYEOK -0x85CC 0xB062 # HANGUL SYLLABLE SSANGKIYEOK-YI-SSANGKIYEOK -0x85CD 0xB063 # HANGUL SYLLABLE SSANGKIYEOK-YI-KIYEOKSIOS -0x85CE 0xB064 # HANGUL SYLLABLE SSANGKIYEOK-YI-NIEUN -0x85CF 0xB065 # HANGUL SYLLABLE SSANGKIYEOK-YI-NIEUNCIEUC -0x85D0 0xB066 # HANGUL SYLLABLE SSANGKIYEOK-YI-NIEUNHIEUH -0x85D1 0xB067 # HANGUL SYLLABLE SSANGKIYEOK-YI-TIKEUT -0x85D2 0xB068 # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEUL -0x85D3 0xB069 # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULKIYEOK -0x85D4 0xB06A # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULMIEUM -0x85D5 0xB06B # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULPIEUP -0x85D6 0xB06C # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULSIOS -0x85D7 0xB06D # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULTHIEUTH -0x85D8 0xB06E # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULPHIEUPH -0x85D9 0xB06F # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULHIEUH -0x85DA 0xB070 # HANGUL SYLLABLE SSANGKIYEOK-YI-MIEUM -0x85DB 0xB071 # HANGUL SYLLABLE SSANGKIYEOK-YI-PIEUP -0x85DC 0xB072 # HANGUL SYLLABLE SSANGKIYEOK-YI-PIEUPSIOS -0x85DD 0xB073 # HANGUL SYLLABLE SSANGKIYEOK-YI-SIOS -0x85DE 0xB074 # HANGUL SYLLABLE SSANGKIYEOK-YI-SSANGSIOS -0x85DF 0xB075 # HANGUL SYLLABLE SSANGKIYEOK-YI-IEUNG -0x85E0 0xB076 # HANGUL SYLLABLE SSANGKIYEOK-YI-CIEUC -0x85E1 0xB077 # HANGUL SYLLABLE SSANGKIYEOK-YI-CHIEUCH -0x85E2 0xB078 # HANGUL SYLLABLE SSANGKIYEOK-YI-KHIEUKH -0x85E3 0xB079 # HANGUL SYLLABLE SSANGKIYEOK-YI-THIEUTH -0x85E4 0xB07A # HANGUL SYLLABLE SSANGKIYEOK-YI-PHIEUPH -0x85E5 0xB07B # HANGUL SYLLABLE SSANGKIYEOK-YI-HIEUH -0x85E6 0xB07E # HANGUL SYLLABLE SSANGKIYEOK-I-SSANGKIYEOK -0x85E7 0xB07F # HANGUL SYLLABLE SSANGKIYEOK-I-KIYEOKSIOS -0x85E8 0xB081 # HANGUL SYLLABLE SSANGKIYEOK-I-NIEUNCIEUC -0x85E9 0xB082 # HANGUL SYLLABLE SSANGKIYEOK-I-NIEUNHIEUH -0x85EA 0xB083 # HANGUL SYLLABLE SSANGKIYEOK-I-TIKEUT -0x85EB 0xB085 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULKIYEOK -0x85EC 0xB086 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULMIEUM -0x85ED 0xB087 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULPIEUP -0x85EE 0xB088 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULSIOS -0x85EF 0xB089 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULTHIEUTH -0x85F0 0xB08A # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULPHIEUPH -0x85F1 0xB08B # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULHIEUH -0x85F2 0xB08E # HANGUL SYLLABLE SSANGKIYEOK-I-PIEUPSIOS -0x85F3 0xB090 # HANGUL SYLLABLE SSANGKIYEOK-I-SSANGSIOS -0x85F4 0xB092 # HANGUL SYLLABLE SSANGKIYEOK-I-CIEUC -0x85F5 0xB093 # HANGUL SYLLABLE SSANGKIYEOK-I-CHIEUCH -0x85F6 0xB094 # HANGUL SYLLABLE SSANGKIYEOK-I-KHIEUKH -0x85F7 0xB095 # HANGUL SYLLABLE SSANGKIYEOK-I-THIEUTH -0x85F8 0xB096 # HANGUL SYLLABLE SSANGKIYEOK-I-PHIEUPH -0x85F9 0xB097 # HANGUL SYLLABLE SSANGKIYEOK-I-HIEUH -0x85FA 0xB09B # HANGUL SYLLABLE NIEUN-A-KIYEOKSIOS -0x85FB 0xB09D # HANGUL SYLLABLE NIEUN-A-NIEUNCIEUC -0x85FC 0xB09E # HANGUL SYLLABLE NIEUN-A-NIEUNHIEUH -0x85FD 0xB0A3 # HANGUL SYLLABLE NIEUN-A-RIEULPIEUP -0x85FE 0xB0A4 # HANGUL SYLLABLE NIEUN-A-RIEULSIOS -0x8641 0xB0A5 # HANGUL SYLLABLE NIEUN-A-RIEULTHIEUTH -0x8642 0xB0A6 # HANGUL SYLLABLE NIEUN-A-RIEULPHIEUPH -0x8643 0xB0A7 # HANGUL SYLLABLE NIEUN-A-RIEULHIEUH -0x8644 0xB0AA # HANGUL SYLLABLE NIEUN-A-PIEUPSIOS -0x8645 0xB0B0 # HANGUL SYLLABLE NIEUN-A-KHIEUKH -0x8646 0xB0B2 # HANGUL SYLLABLE NIEUN-A-PHIEUPH -0x8647 0xB0B6 # HANGUL SYLLABLE NIEUN-AE-SSANGKIYEOK -0x8648 0xB0B7 # HANGUL SYLLABLE NIEUN-AE-KIYEOKSIOS -0x8649 0xB0B9 # HANGUL SYLLABLE NIEUN-AE-NIEUNCIEUC -0x864A 0xB0BA # HANGUL SYLLABLE NIEUN-AE-NIEUNHIEUH -0x864B 0xB0BB # HANGUL SYLLABLE NIEUN-AE-TIKEUT -0x864C 0xB0BD # HANGUL SYLLABLE NIEUN-AE-RIEULKIYEOK -0x864D 0xB0BE # HANGUL SYLLABLE NIEUN-AE-RIEULMIEUM -0x864E 0xB0BF # HANGUL SYLLABLE NIEUN-AE-RIEULPIEUP -0x864F 0xB0C0 # HANGUL SYLLABLE NIEUN-AE-RIEULSIOS -0x8650 0xB0C1 # HANGUL SYLLABLE NIEUN-AE-RIEULTHIEUTH -0x8651 0xB0C2 # HANGUL SYLLABLE NIEUN-AE-RIEULPHIEUPH -0x8652 0xB0C3 # HANGUL SYLLABLE NIEUN-AE-RIEULHIEUH -0x8653 0xB0C6 # HANGUL SYLLABLE NIEUN-AE-PIEUPSIOS -0x8654 0xB0CA # HANGUL SYLLABLE NIEUN-AE-CIEUC -0x8655 0xB0CB # HANGUL SYLLABLE NIEUN-AE-CHIEUCH -0x8656 0xB0CC # HANGUL SYLLABLE NIEUN-AE-KHIEUKH -0x8657 0xB0CD # HANGUL SYLLABLE NIEUN-AE-THIEUTH -0x8658 0xB0CE # HANGUL SYLLABLE NIEUN-AE-PHIEUPH -0x8659 0xB0CF # HANGUL SYLLABLE NIEUN-AE-HIEUH -0x865A 0xB0D2 # HANGUL SYLLABLE NIEUN-YA-SSANGKIYEOK -0x8661 0xB0D3 # HANGUL SYLLABLE NIEUN-YA-KIYEOKSIOS -0x8662 0xB0D5 # HANGUL SYLLABLE NIEUN-YA-NIEUNCIEUC -0x8663 0xB0D6 # HANGUL SYLLABLE NIEUN-YA-NIEUNHIEUH -0x8664 0xB0D7 # HANGUL SYLLABLE NIEUN-YA-TIKEUT -0x8665 0xB0D9 # HANGUL SYLLABLE NIEUN-YA-RIEULKIYEOK -0x8666 0xB0DA # HANGUL SYLLABLE NIEUN-YA-RIEULMIEUM -0x8667 0xB0DB # HANGUL SYLLABLE NIEUN-YA-RIEULPIEUP -0x8668 0xB0DC # HANGUL SYLLABLE NIEUN-YA-RIEULSIOS -0x8669 0xB0DD # HANGUL SYLLABLE NIEUN-YA-RIEULTHIEUTH -0x866A 0xB0DE # HANGUL SYLLABLE NIEUN-YA-RIEULPHIEUPH -0x866B 0xB0DF # HANGUL SYLLABLE NIEUN-YA-RIEULHIEUH -0x866C 0xB0E1 # HANGUL SYLLABLE NIEUN-YA-PIEUP -0x866D 0xB0E2 # HANGUL SYLLABLE NIEUN-YA-PIEUPSIOS -0x866E 0xB0E3 # HANGUL SYLLABLE NIEUN-YA-SIOS -0x866F 0xB0E4 # HANGUL SYLLABLE NIEUN-YA-SSANGSIOS -0x8670 0xB0E6 # HANGUL SYLLABLE NIEUN-YA-CIEUC -0x8671 0xB0E7 # HANGUL SYLLABLE NIEUN-YA-CHIEUCH -0x8672 0xB0E8 # HANGUL SYLLABLE NIEUN-YA-KHIEUKH -0x8673 0xB0E9 # HANGUL SYLLABLE NIEUN-YA-THIEUTH -0x8674 0xB0EA # HANGUL SYLLABLE NIEUN-YA-PHIEUPH -0x8675 0xB0EB # HANGUL SYLLABLE NIEUN-YA-HIEUH -0x8676 0xB0EC # HANGUL SYLLABLE NIEUN-YAE -0x8677 0xB0ED # HANGUL SYLLABLE NIEUN-YAE-KIYEOK -0x8678 0xB0EE # HANGUL SYLLABLE NIEUN-YAE-SSANGKIYEOK -0x8679 0xB0EF # HANGUL SYLLABLE NIEUN-YAE-KIYEOKSIOS -0x867A 0xB0F0 # HANGUL SYLLABLE NIEUN-YAE-NIEUN -0x8681 0xB0F1 # HANGUL SYLLABLE NIEUN-YAE-NIEUNCIEUC -0x8682 0xB0F2 # HANGUL SYLLABLE NIEUN-YAE-NIEUNHIEUH -0x8683 0xB0F3 # HANGUL SYLLABLE NIEUN-YAE-TIKEUT -0x8684 0xB0F4 # HANGUL SYLLABLE NIEUN-YAE-RIEUL -0x8685 0xB0F5 # HANGUL SYLLABLE NIEUN-YAE-RIEULKIYEOK -0x8686 0xB0F6 # HANGUL SYLLABLE NIEUN-YAE-RIEULMIEUM -0x8687 0xB0F7 # HANGUL SYLLABLE NIEUN-YAE-RIEULPIEUP -0x8688 0xB0F8 # HANGUL SYLLABLE NIEUN-YAE-RIEULSIOS -0x8689 0xB0F9 # HANGUL SYLLABLE NIEUN-YAE-RIEULTHIEUTH -0x868A 0xB0FA # HANGUL SYLLABLE NIEUN-YAE-RIEULPHIEUPH -0x868B 0xB0FB # HANGUL SYLLABLE NIEUN-YAE-RIEULHIEUH -0x868C 0xB0FC # HANGUL SYLLABLE NIEUN-YAE-MIEUM -0x868D 0xB0FD # HANGUL SYLLABLE NIEUN-YAE-PIEUP -0x868E 0xB0FE # HANGUL SYLLABLE NIEUN-YAE-PIEUPSIOS -0x868F 0xB0FF # HANGUL SYLLABLE NIEUN-YAE-SIOS -0x8690 0xB100 # HANGUL SYLLABLE NIEUN-YAE-SSANGSIOS -0x8691 0xB101 # HANGUL SYLLABLE NIEUN-YAE-IEUNG -0x8692 0xB102 # HANGUL SYLLABLE NIEUN-YAE-CIEUC -0x8693 0xB103 # HANGUL SYLLABLE NIEUN-YAE-CHIEUCH -0x8694 0xB104 # HANGUL SYLLABLE NIEUN-YAE-KHIEUKH -0x8695 0xB105 # HANGUL SYLLABLE NIEUN-YAE-THIEUTH -0x8696 0xB106 # HANGUL SYLLABLE NIEUN-YAE-PHIEUPH -0x8697 0xB107 # HANGUL SYLLABLE NIEUN-YAE-HIEUH -0x8698 0xB10A # HANGUL SYLLABLE NIEUN-EO-SSANGKIYEOK -0x8699 0xB10D # HANGUL SYLLABLE NIEUN-EO-NIEUNCIEUC -0x869A 0xB10E # HANGUL SYLLABLE NIEUN-EO-NIEUNHIEUH -0x869B 0xB10F # HANGUL SYLLABLE NIEUN-EO-TIKEUT -0x869C 0xB111 # HANGUL SYLLABLE NIEUN-EO-RIEULKIYEOK -0x869D 0xB114 # HANGUL SYLLABLE NIEUN-EO-RIEULSIOS -0x869E 0xB115 # HANGUL SYLLABLE NIEUN-EO-RIEULTHIEUTH -0x869F 0xB116 # HANGUL SYLLABLE NIEUN-EO-RIEULPHIEUPH -0x86A0 0xB117 # HANGUL SYLLABLE NIEUN-EO-RIEULHIEUH -0x86A1 0xB11A # HANGUL SYLLABLE NIEUN-EO-PIEUPSIOS -0x86A2 0xB11E # HANGUL SYLLABLE NIEUN-EO-CIEUC -0x86A3 0xB11F # HANGUL SYLLABLE NIEUN-EO-CHIEUCH -0x86A4 0xB120 # HANGUL SYLLABLE NIEUN-EO-KHIEUKH -0x86A5 0xB121 # HANGUL SYLLABLE NIEUN-EO-THIEUTH -0x86A6 0xB122 # HANGUL SYLLABLE NIEUN-EO-PHIEUPH -0x86A7 0xB126 # HANGUL SYLLABLE NIEUN-E-SSANGKIYEOK -0x86A8 0xB127 # HANGUL SYLLABLE NIEUN-E-KIYEOKSIOS -0x86A9 0xB129 # HANGUL SYLLABLE NIEUN-E-NIEUNCIEUC -0x86AA 0xB12A # HANGUL SYLLABLE NIEUN-E-NIEUNHIEUH -0x86AB 0xB12B # HANGUL SYLLABLE NIEUN-E-TIKEUT -0x86AC 0xB12D # HANGUL SYLLABLE NIEUN-E-RIEULKIYEOK -0x86AD 0xB12E # HANGUL SYLLABLE NIEUN-E-RIEULMIEUM -0x86AE 0xB12F # HANGUL SYLLABLE NIEUN-E-RIEULPIEUP -0x86AF 0xB130 # HANGUL SYLLABLE NIEUN-E-RIEULSIOS -0x86B0 0xB131 # HANGUL SYLLABLE NIEUN-E-RIEULTHIEUTH -0x86B1 0xB132 # HANGUL SYLLABLE NIEUN-E-RIEULPHIEUPH -0x86B2 0xB133 # HANGUL SYLLABLE NIEUN-E-RIEULHIEUH -0x86B3 0xB136 # HANGUL SYLLABLE NIEUN-E-PIEUPSIOS -0x86B4 0xB13A # HANGUL SYLLABLE NIEUN-E-CIEUC -0x86B5 0xB13B # HANGUL SYLLABLE NIEUN-E-CHIEUCH -0x86B6 0xB13C # HANGUL SYLLABLE NIEUN-E-KHIEUKH -0x86B7 0xB13D # HANGUL SYLLABLE NIEUN-E-THIEUTH -0x86B8 0xB13E # HANGUL SYLLABLE NIEUN-E-PHIEUPH -0x86B9 0xB13F # HANGUL SYLLABLE NIEUN-E-HIEUH -0x86BA 0xB142 # HANGUL SYLLABLE NIEUN-YEO-SSANGKIYEOK -0x86BB 0xB143 # HANGUL SYLLABLE NIEUN-YEO-KIYEOKSIOS -0x86BC 0xB145 # HANGUL SYLLABLE NIEUN-YEO-NIEUNCIEUC -0x86BD 0xB146 # HANGUL SYLLABLE NIEUN-YEO-NIEUNHIEUH -0x86BE 0xB147 # HANGUL SYLLABLE NIEUN-YEO-TIKEUT -0x86BF 0xB149 # HANGUL SYLLABLE NIEUN-YEO-RIEULKIYEOK -0x86C0 0xB14A # HANGUL SYLLABLE NIEUN-YEO-RIEULMIEUM -0x86C1 0xB14B # HANGUL SYLLABLE NIEUN-YEO-RIEULPIEUP -0x86C2 0xB14C # HANGUL SYLLABLE NIEUN-YEO-RIEULSIOS -0x86C3 0xB14D # HANGUL SYLLABLE NIEUN-YEO-RIEULTHIEUTH -0x86C4 0xB14E # HANGUL SYLLABLE NIEUN-YEO-RIEULPHIEUPH -0x86C5 0xB14F # HANGUL SYLLABLE NIEUN-YEO-RIEULHIEUH -0x86C6 0xB152 # HANGUL SYLLABLE NIEUN-YEO-PIEUPSIOS -0x86C7 0xB153 # HANGUL SYLLABLE NIEUN-YEO-SIOS -0x86C8 0xB156 # HANGUL SYLLABLE NIEUN-YEO-CIEUC -0x86C9 0xB157 # HANGUL SYLLABLE NIEUN-YEO-CHIEUCH -0x86CA 0xB159 # HANGUL SYLLABLE NIEUN-YEO-THIEUTH -0x86CB 0xB15A # HANGUL SYLLABLE NIEUN-YEO-PHIEUPH -0x86CC 0xB15B # HANGUL SYLLABLE NIEUN-YEO-HIEUH -0x86CD 0xB15D # HANGUL SYLLABLE NIEUN-YE-KIYEOK -0x86CE 0xB15E # HANGUL SYLLABLE NIEUN-YE-SSANGKIYEOK -0x86CF 0xB15F # HANGUL SYLLABLE NIEUN-YE-KIYEOKSIOS -0x86D0 0xB161 # HANGUL SYLLABLE NIEUN-YE-NIEUNCIEUC -0x86D1 0xB162 # HANGUL SYLLABLE NIEUN-YE-NIEUNHIEUH -0x86D2 0xB163 # HANGUL SYLLABLE NIEUN-YE-TIKEUT -0x86D3 0xB164 # HANGUL SYLLABLE NIEUN-YE-RIEUL -0x86D4 0xB165 # HANGUL SYLLABLE NIEUN-YE-RIEULKIYEOK -0x86D5 0xB166 # HANGUL SYLLABLE NIEUN-YE-RIEULMIEUM -0x86D6 0xB167 # HANGUL SYLLABLE NIEUN-YE-RIEULPIEUP -0x86D7 0xB168 # HANGUL SYLLABLE NIEUN-YE-RIEULSIOS -0x86D8 0xB169 # HANGUL SYLLABLE NIEUN-YE-RIEULTHIEUTH -0x86D9 0xB16A # HANGUL SYLLABLE NIEUN-YE-RIEULPHIEUPH -0x86DA 0xB16B # HANGUL SYLLABLE NIEUN-YE-RIEULHIEUH -0x86DB 0xB16C # HANGUL SYLLABLE NIEUN-YE-MIEUM -0x86DC 0xB16D # HANGUL SYLLABLE NIEUN-YE-PIEUP -0x86DD 0xB16E # HANGUL SYLLABLE NIEUN-YE-PIEUPSIOS -0x86DE 0xB16F # HANGUL SYLLABLE NIEUN-YE-SIOS -0x86DF 0xB170 # HANGUL SYLLABLE NIEUN-YE-SSANGSIOS -0x86E0 0xB171 # HANGUL SYLLABLE NIEUN-YE-IEUNG -0x86E1 0xB172 # HANGUL SYLLABLE NIEUN-YE-CIEUC -0x86E2 0xB173 # HANGUL SYLLABLE NIEUN-YE-CHIEUCH -0x86E3 0xB174 # HANGUL SYLLABLE NIEUN-YE-KHIEUKH -0x86E4 0xB175 # HANGUL SYLLABLE NIEUN-YE-THIEUTH -0x86E5 0xB176 # HANGUL SYLLABLE NIEUN-YE-PHIEUPH -0x86E6 0xB177 # HANGUL SYLLABLE NIEUN-YE-HIEUH -0x86E7 0xB17A # HANGUL SYLLABLE NIEUN-O-SSANGKIYEOK -0x86E8 0xB17B # HANGUL SYLLABLE NIEUN-O-KIYEOKSIOS -0x86E9 0xB17D # HANGUL SYLLABLE NIEUN-O-NIEUNCIEUC -0x86EA 0xB17E # HANGUL SYLLABLE NIEUN-O-NIEUNHIEUH -0x86EB 0xB17F # HANGUL SYLLABLE NIEUN-O-TIKEUT -0x86EC 0xB181 # HANGUL SYLLABLE NIEUN-O-RIEULKIYEOK -0x86ED 0xB183 # HANGUL SYLLABLE NIEUN-O-RIEULPIEUP -0x86EE 0xB184 # HANGUL SYLLABLE NIEUN-O-RIEULSIOS -0x86EF 0xB185 # HANGUL SYLLABLE NIEUN-O-RIEULTHIEUTH -0x86F0 0xB186 # HANGUL SYLLABLE NIEUN-O-RIEULPHIEUPH -0x86F1 0xB187 # HANGUL SYLLABLE NIEUN-O-RIEULHIEUH -0x86F2 0xB18A # HANGUL SYLLABLE NIEUN-O-PIEUPSIOS -0x86F3 0xB18C # HANGUL SYLLABLE NIEUN-O-SSANGSIOS -0x86F4 0xB18E # HANGUL SYLLABLE NIEUN-O-CIEUC -0x86F5 0xB18F # HANGUL SYLLABLE NIEUN-O-CHIEUCH -0x86F6 0xB190 # HANGUL SYLLABLE NIEUN-O-KHIEUKH -0x86F7 0xB191 # HANGUL SYLLABLE NIEUN-O-THIEUTH -0x86F8 0xB195 # HANGUL SYLLABLE NIEUN-WA-KIYEOK -0x86F9 0xB196 # HANGUL SYLLABLE NIEUN-WA-SSANGKIYEOK -0x86FA 0xB197 # HANGUL SYLLABLE NIEUN-WA-KIYEOKSIOS -0x86FB 0xB199 # HANGUL SYLLABLE NIEUN-WA-NIEUNCIEUC -0x86FC 0xB19A # HANGUL SYLLABLE NIEUN-WA-NIEUNHIEUH -0x86FD 0xB19B # HANGUL SYLLABLE NIEUN-WA-TIKEUT -0x86FE 0xB19D # HANGUL SYLLABLE NIEUN-WA-RIEULKIYEOK -0x8741 0xB19E # HANGUL SYLLABLE NIEUN-WA-RIEULMIEUM -0x8742 0xB19F # HANGUL SYLLABLE NIEUN-WA-RIEULPIEUP -0x8743 0xB1A0 # HANGUL SYLLABLE NIEUN-WA-RIEULSIOS -0x8744 0xB1A1 # HANGUL SYLLABLE NIEUN-WA-RIEULTHIEUTH -0x8745 0xB1A2 # HANGUL SYLLABLE NIEUN-WA-RIEULPHIEUPH -0x8746 0xB1A3 # HANGUL SYLLABLE NIEUN-WA-RIEULHIEUH -0x8747 0xB1A4 # HANGUL SYLLABLE NIEUN-WA-MIEUM -0x8748 0xB1A5 # HANGUL SYLLABLE NIEUN-WA-PIEUP -0x8749 0xB1A6 # HANGUL SYLLABLE NIEUN-WA-PIEUPSIOS -0x874A 0xB1A7 # HANGUL SYLLABLE NIEUN-WA-SIOS -0x874B 0xB1A9 # HANGUL SYLLABLE NIEUN-WA-IEUNG -0x874C 0xB1AA # HANGUL SYLLABLE NIEUN-WA-CIEUC -0x874D 0xB1AB # HANGUL SYLLABLE NIEUN-WA-CHIEUCH -0x874E 0xB1AC # HANGUL SYLLABLE NIEUN-WA-KHIEUKH -0x874F 0xB1AD # HANGUL SYLLABLE NIEUN-WA-THIEUTH -0x8750 0xB1AE # HANGUL SYLLABLE NIEUN-WA-PHIEUPH -0x8751 0xB1AF # HANGUL SYLLABLE NIEUN-WA-HIEUH -0x8752 0xB1B0 # HANGUL SYLLABLE NIEUN-WAE -0x8753 0xB1B1 # HANGUL SYLLABLE NIEUN-WAE-KIYEOK -0x8754 0xB1B2 # HANGUL SYLLABLE NIEUN-WAE-SSANGKIYEOK -0x8755 0xB1B3 # HANGUL SYLLABLE NIEUN-WAE-KIYEOKSIOS -0x8756 0xB1B4 # HANGUL SYLLABLE NIEUN-WAE-NIEUN -0x8757 0xB1B5 # HANGUL SYLLABLE NIEUN-WAE-NIEUNCIEUC -0x8758 0xB1B6 # HANGUL SYLLABLE NIEUN-WAE-NIEUNHIEUH -0x8759 0xB1B7 # HANGUL SYLLABLE NIEUN-WAE-TIKEUT -0x875A 0xB1B8 # HANGUL SYLLABLE NIEUN-WAE-RIEUL -0x8761 0xB1B9 # HANGUL SYLLABLE NIEUN-WAE-RIEULKIYEOK -0x8762 0xB1BA # HANGUL SYLLABLE NIEUN-WAE-RIEULMIEUM -0x8763 0xB1BB # HANGUL SYLLABLE NIEUN-WAE-RIEULPIEUP -0x8764 0xB1BC # HANGUL SYLLABLE NIEUN-WAE-RIEULSIOS -0x8765 0xB1BD # HANGUL SYLLABLE NIEUN-WAE-RIEULTHIEUTH -0x8766 0xB1BE # HANGUL SYLLABLE NIEUN-WAE-RIEULPHIEUPH -0x8767 0xB1BF # HANGUL SYLLABLE NIEUN-WAE-RIEULHIEUH -0x8768 0xB1C0 # HANGUL SYLLABLE NIEUN-WAE-MIEUM -0x8769 0xB1C1 # HANGUL SYLLABLE NIEUN-WAE-PIEUP -0x876A 0xB1C2 # HANGUL SYLLABLE NIEUN-WAE-PIEUPSIOS -0x876B 0xB1C3 # HANGUL SYLLABLE NIEUN-WAE-SIOS -0x876C 0xB1C4 # HANGUL SYLLABLE NIEUN-WAE-SSANGSIOS -0x876D 0xB1C5 # HANGUL SYLLABLE NIEUN-WAE-IEUNG -0x876E 0xB1C6 # HANGUL SYLLABLE NIEUN-WAE-CIEUC -0x876F 0xB1C7 # HANGUL SYLLABLE NIEUN-WAE-CHIEUCH -0x8770 0xB1C8 # HANGUL SYLLABLE NIEUN-WAE-KHIEUKH -0x8771 0xB1C9 # HANGUL SYLLABLE NIEUN-WAE-THIEUTH -0x8772 0xB1CA # HANGUL SYLLABLE NIEUN-WAE-PHIEUPH -0x8773 0xB1CB # HANGUL SYLLABLE NIEUN-WAE-HIEUH -0x8774 0xB1CD # HANGUL SYLLABLE NIEUN-OE-KIYEOK -0x8775 0xB1CE # HANGUL SYLLABLE NIEUN-OE-SSANGKIYEOK -0x8776 0xB1CF # HANGUL SYLLABLE NIEUN-OE-KIYEOKSIOS -0x8777 0xB1D1 # HANGUL SYLLABLE NIEUN-OE-NIEUNCIEUC -0x8778 0xB1D2 # HANGUL SYLLABLE NIEUN-OE-NIEUNHIEUH -0x8779 0xB1D3 # HANGUL SYLLABLE NIEUN-OE-TIKEUT -0x877A 0xB1D5 # HANGUL SYLLABLE NIEUN-OE-RIEULKIYEOK -0x8781 0xB1D6 # HANGUL SYLLABLE NIEUN-OE-RIEULMIEUM -0x8782 0xB1D7 # HANGUL SYLLABLE NIEUN-OE-RIEULPIEUP -0x8783 0xB1D8 # HANGUL SYLLABLE NIEUN-OE-RIEULSIOS -0x8784 0xB1D9 # HANGUL SYLLABLE NIEUN-OE-RIEULTHIEUTH -0x8785 0xB1DA # HANGUL SYLLABLE NIEUN-OE-RIEULPHIEUPH -0x8786 0xB1DB # HANGUL SYLLABLE NIEUN-OE-RIEULHIEUH -0x8787 0xB1DE # HANGUL SYLLABLE NIEUN-OE-PIEUPSIOS -0x8788 0xB1E0 # HANGUL SYLLABLE NIEUN-OE-SSANGSIOS -0x8789 0xB1E1 # HANGUL SYLLABLE NIEUN-OE-IEUNG -0x878A 0xB1E2 # HANGUL SYLLABLE NIEUN-OE-CIEUC -0x878B 0xB1E3 # HANGUL SYLLABLE NIEUN-OE-CHIEUCH -0x878C 0xB1E4 # HANGUL SYLLABLE NIEUN-OE-KHIEUKH -0x878D 0xB1E5 # HANGUL SYLLABLE NIEUN-OE-THIEUTH -0x878E 0xB1E6 # HANGUL SYLLABLE NIEUN-OE-PHIEUPH -0x878F 0xB1E7 # HANGUL SYLLABLE NIEUN-OE-HIEUH -0x8790 0xB1EA # HANGUL SYLLABLE NIEUN-YO-SSANGKIYEOK -0x8791 0xB1EB # HANGUL SYLLABLE NIEUN-YO-KIYEOKSIOS -0x8792 0xB1ED # HANGUL SYLLABLE NIEUN-YO-NIEUNCIEUC -0x8793 0xB1EE # HANGUL SYLLABLE NIEUN-YO-NIEUNHIEUH -0x8794 0xB1EF # HANGUL SYLLABLE NIEUN-YO-TIKEUT -0x8795 0xB1F1 # HANGUL SYLLABLE NIEUN-YO-RIEULKIYEOK -0x8796 0xB1F2 # HANGUL SYLLABLE NIEUN-YO-RIEULMIEUM -0x8797 0xB1F3 # HANGUL SYLLABLE NIEUN-YO-RIEULPIEUP -0x8798 0xB1F4 # HANGUL SYLLABLE NIEUN-YO-RIEULSIOS -0x8799 0xB1F5 # HANGUL SYLLABLE NIEUN-YO-RIEULTHIEUTH -0x879A 0xB1F6 # HANGUL SYLLABLE NIEUN-YO-RIEULPHIEUPH -0x879B 0xB1F7 # HANGUL SYLLABLE NIEUN-YO-RIEULHIEUH -0x879C 0xB1F8 # HANGUL SYLLABLE NIEUN-YO-MIEUM -0x879D 0xB1FA # HANGUL SYLLABLE NIEUN-YO-PIEUPSIOS -0x879E 0xB1FC # HANGUL SYLLABLE NIEUN-YO-SSANGSIOS -0x879F 0xB1FE # HANGUL SYLLABLE NIEUN-YO-CIEUC -0x87A0 0xB1FF # HANGUL SYLLABLE NIEUN-YO-CHIEUCH -0x87A1 0xB200 # HANGUL SYLLABLE NIEUN-YO-KHIEUKH -0x87A2 0xB201 # HANGUL SYLLABLE NIEUN-YO-THIEUTH -0x87A3 0xB202 # HANGUL SYLLABLE NIEUN-YO-PHIEUPH -0x87A4 0xB203 # HANGUL SYLLABLE NIEUN-YO-HIEUH -0x87A5 0xB206 # HANGUL SYLLABLE NIEUN-U-SSANGKIYEOK -0x87A6 0xB207 # HANGUL SYLLABLE NIEUN-U-KIYEOKSIOS -0x87A7 0xB209 # HANGUL SYLLABLE NIEUN-U-NIEUNCIEUC -0x87A8 0xB20A # HANGUL SYLLABLE NIEUN-U-NIEUNHIEUH -0x87A9 0xB20D # HANGUL SYLLABLE NIEUN-U-RIEULKIYEOK -0x87AA 0xB20E # HANGUL SYLLABLE NIEUN-U-RIEULMIEUM -0x87AB 0xB20F # HANGUL SYLLABLE NIEUN-U-RIEULPIEUP -0x87AC 0xB210 # HANGUL SYLLABLE NIEUN-U-RIEULSIOS -0x87AD 0xB211 # HANGUL SYLLABLE NIEUN-U-RIEULTHIEUTH -0x87AE 0xB212 # HANGUL SYLLABLE NIEUN-U-RIEULPHIEUPH -0x87AF 0xB213 # HANGUL SYLLABLE NIEUN-U-RIEULHIEUH -0x87B0 0xB216 # HANGUL SYLLABLE NIEUN-U-PIEUPSIOS -0x87B1 0xB218 # HANGUL SYLLABLE NIEUN-U-SSANGSIOS -0x87B2 0xB21A # HANGUL SYLLABLE NIEUN-U-CIEUC -0x87B3 0xB21B # HANGUL SYLLABLE NIEUN-U-CHIEUCH -0x87B4 0xB21C # HANGUL SYLLABLE NIEUN-U-KHIEUKH -0x87B5 0xB21D # HANGUL SYLLABLE NIEUN-U-THIEUTH -0x87B6 0xB21E # HANGUL SYLLABLE NIEUN-U-PHIEUPH -0x87B7 0xB21F # HANGUL SYLLABLE NIEUN-U-HIEUH -0x87B8 0xB221 # HANGUL SYLLABLE NIEUN-WEO-KIYEOK -0x87B9 0xB222 # HANGUL SYLLABLE NIEUN-WEO-SSANGKIYEOK -0x87BA 0xB223 # HANGUL SYLLABLE NIEUN-WEO-KIYEOKSIOS -0x87BB 0xB224 # HANGUL SYLLABLE NIEUN-WEO-NIEUN -0x87BC 0xB225 # HANGUL SYLLABLE NIEUN-WEO-NIEUNCIEUC -0x87BD 0xB226 # HANGUL SYLLABLE NIEUN-WEO-NIEUNHIEUH -0x87BE 0xB227 # HANGUL SYLLABLE NIEUN-WEO-TIKEUT -0x87BF 0xB228 # HANGUL SYLLABLE NIEUN-WEO-RIEUL -0x87C0 0xB229 # HANGUL SYLLABLE NIEUN-WEO-RIEULKIYEOK -0x87C1 0xB22A # HANGUL SYLLABLE NIEUN-WEO-RIEULMIEUM -0x87C2 0xB22B # HANGUL SYLLABLE NIEUN-WEO-RIEULPIEUP -0x87C3 0xB22C # HANGUL SYLLABLE NIEUN-WEO-RIEULSIOS -0x87C4 0xB22D # HANGUL SYLLABLE NIEUN-WEO-RIEULTHIEUTH -0x87C5 0xB22E # HANGUL SYLLABLE NIEUN-WEO-RIEULPHIEUPH -0x87C6 0xB22F # HANGUL SYLLABLE NIEUN-WEO-RIEULHIEUH -0x87C7 0xB230 # HANGUL SYLLABLE NIEUN-WEO-MIEUM -0x87C8 0xB231 # HANGUL SYLLABLE NIEUN-WEO-PIEUP -0x87C9 0xB232 # HANGUL SYLLABLE NIEUN-WEO-PIEUPSIOS -0x87CA 0xB233 # HANGUL SYLLABLE NIEUN-WEO-SIOS -0x87CB 0xB235 # HANGUL SYLLABLE NIEUN-WEO-IEUNG -0x87CC 0xB236 # HANGUL SYLLABLE NIEUN-WEO-CIEUC -0x87CD 0xB237 # HANGUL SYLLABLE NIEUN-WEO-CHIEUCH -0x87CE 0xB238 # HANGUL SYLLABLE NIEUN-WEO-KHIEUKH -0x87CF 0xB239 # HANGUL SYLLABLE NIEUN-WEO-THIEUTH -0x87D0 0xB23A # HANGUL SYLLABLE NIEUN-WEO-PHIEUPH -0x87D1 0xB23B # HANGUL SYLLABLE NIEUN-WEO-HIEUH -0x87D2 0xB23D # HANGUL SYLLABLE NIEUN-WE-KIYEOK -0x87D3 0xB23E # HANGUL SYLLABLE NIEUN-WE-SSANGKIYEOK -0x87D4 0xB23F # HANGUL SYLLABLE NIEUN-WE-KIYEOKSIOS -0x87D5 0xB240 # HANGUL SYLLABLE NIEUN-WE-NIEUN -0x87D6 0xB241 # HANGUL SYLLABLE NIEUN-WE-NIEUNCIEUC -0x87D7 0xB242 # HANGUL SYLLABLE NIEUN-WE-NIEUNHIEUH -0x87D8 0xB243 # HANGUL SYLLABLE NIEUN-WE-TIKEUT -0x87D9 0xB244 # HANGUL SYLLABLE NIEUN-WE-RIEUL -0x87DA 0xB245 # HANGUL SYLLABLE NIEUN-WE-RIEULKIYEOK -0x87DB 0xB246 # HANGUL SYLLABLE NIEUN-WE-RIEULMIEUM -0x87DC 0xB247 # HANGUL SYLLABLE NIEUN-WE-RIEULPIEUP -0x87DD 0xB248 # HANGUL SYLLABLE NIEUN-WE-RIEULSIOS -0x87DE 0xB249 # HANGUL SYLLABLE NIEUN-WE-RIEULTHIEUTH -0x87DF 0xB24A # HANGUL SYLLABLE NIEUN-WE-RIEULPHIEUPH -0x87E0 0xB24B # HANGUL SYLLABLE NIEUN-WE-RIEULHIEUH -0x87E1 0xB24C # HANGUL SYLLABLE NIEUN-WE-MIEUM -0x87E2 0xB24D # HANGUL SYLLABLE NIEUN-WE-PIEUP -0x87E3 0xB24E # HANGUL SYLLABLE NIEUN-WE-PIEUPSIOS -0x87E4 0xB24F # HANGUL SYLLABLE NIEUN-WE-SIOS -0x87E5 0xB250 # HANGUL SYLLABLE NIEUN-WE-SSANGSIOS -0x87E6 0xB251 # HANGUL SYLLABLE NIEUN-WE-IEUNG -0x87E7 0xB252 # HANGUL SYLLABLE NIEUN-WE-CIEUC -0x87E8 0xB253 # HANGUL SYLLABLE NIEUN-WE-CHIEUCH -0x87E9 0xB254 # HANGUL SYLLABLE NIEUN-WE-KHIEUKH -0x87EA 0xB255 # HANGUL SYLLABLE NIEUN-WE-THIEUTH -0x87EB 0xB256 # HANGUL SYLLABLE NIEUN-WE-PHIEUPH -0x87EC 0xB257 # HANGUL SYLLABLE NIEUN-WE-HIEUH -0x87ED 0xB259 # HANGUL SYLLABLE NIEUN-WI-KIYEOK -0x87EE 0xB25A # HANGUL SYLLABLE NIEUN-WI-SSANGKIYEOK -0x87EF 0xB25B # HANGUL SYLLABLE NIEUN-WI-KIYEOKSIOS -0x87F0 0xB25D # HANGUL SYLLABLE NIEUN-WI-NIEUNCIEUC -0x87F1 0xB25E # HANGUL SYLLABLE NIEUN-WI-NIEUNHIEUH -0x87F2 0xB25F # HANGUL SYLLABLE NIEUN-WI-TIKEUT -0x87F3 0xB261 # HANGUL SYLLABLE NIEUN-WI-RIEULKIYEOK -0x87F4 0xB262 # HANGUL SYLLABLE NIEUN-WI-RIEULMIEUM -0x87F5 0xB263 # HANGUL SYLLABLE NIEUN-WI-RIEULPIEUP -0x87F6 0xB264 # HANGUL SYLLABLE NIEUN-WI-RIEULSIOS -0x87F7 0xB265 # HANGUL SYLLABLE NIEUN-WI-RIEULTHIEUTH -0x87F8 0xB266 # HANGUL SYLLABLE NIEUN-WI-RIEULPHIEUPH -0x87F9 0xB267 # HANGUL SYLLABLE NIEUN-WI-RIEULHIEUH -0x87FA 0xB26A # HANGUL SYLLABLE NIEUN-WI-PIEUPSIOS -0x87FB 0xB26B # HANGUL SYLLABLE NIEUN-WI-SIOS -0x87FC 0xB26C # HANGUL SYLLABLE NIEUN-WI-SSANGSIOS -0x87FD 0xB26D # HANGUL SYLLABLE NIEUN-WI-IEUNG -0x87FE 0xB26E # HANGUL SYLLABLE NIEUN-WI-CIEUC -0x8841 0xB26F # HANGUL SYLLABLE NIEUN-WI-CHIEUCH -0x8842 0xB270 # HANGUL SYLLABLE NIEUN-WI-KHIEUKH -0x8843 0xB271 # HANGUL SYLLABLE NIEUN-WI-THIEUTH -0x8844 0xB272 # HANGUL SYLLABLE NIEUN-WI-PHIEUPH -0x8845 0xB273 # HANGUL SYLLABLE NIEUN-WI-HIEUH -0x8846 0xB276 # HANGUL SYLLABLE NIEUN-YU-SSANGKIYEOK -0x8847 0xB277 # HANGUL SYLLABLE NIEUN-YU-KIYEOKSIOS -0x8848 0xB278 # HANGUL SYLLABLE NIEUN-YU-NIEUN -0x8849 0xB279 # HANGUL SYLLABLE NIEUN-YU-NIEUNCIEUC -0x884A 0xB27A # HANGUL SYLLABLE NIEUN-YU-NIEUNHIEUH -0x884B 0xB27B # HANGUL SYLLABLE NIEUN-YU-TIKEUT -0x884C 0xB27D # HANGUL SYLLABLE NIEUN-YU-RIEULKIYEOK -0x884D 0xB27E # HANGUL SYLLABLE NIEUN-YU-RIEULMIEUM -0x884E 0xB27F # HANGUL SYLLABLE NIEUN-YU-RIEULPIEUP -0x884F 0xB280 # HANGUL SYLLABLE NIEUN-YU-RIEULSIOS -0x8850 0xB281 # HANGUL SYLLABLE NIEUN-YU-RIEULTHIEUTH -0x8851 0xB282 # HANGUL SYLLABLE NIEUN-YU-RIEULPHIEUPH -0x8852 0xB283 # HANGUL SYLLABLE NIEUN-YU-RIEULHIEUH -0x8853 0xB286 # HANGUL SYLLABLE NIEUN-YU-PIEUPSIOS -0x8854 0xB287 # HANGUL SYLLABLE NIEUN-YU-SIOS -0x8855 0xB288 # HANGUL SYLLABLE NIEUN-YU-SSANGSIOS -0x8856 0xB28A # HANGUL SYLLABLE NIEUN-YU-CIEUC -0x8857 0xB28B # HANGUL SYLLABLE NIEUN-YU-CHIEUCH -0x8858 0xB28C # HANGUL SYLLABLE NIEUN-YU-KHIEUKH -0x8859 0xB28D # HANGUL SYLLABLE NIEUN-YU-THIEUTH -0x885A 0xB28E # HANGUL SYLLABLE NIEUN-YU-PHIEUPH -0x8861 0xB28F # HANGUL SYLLABLE NIEUN-YU-HIEUH -0x8862 0xB292 # HANGUL SYLLABLE NIEUN-EU-SSANGKIYEOK -0x8863 0xB293 # HANGUL SYLLABLE NIEUN-EU-KIYEOKSIOS -0x8864 0xB295 # HANGUL SYLLABLE NIEUN-EU-NIEUNCIEUC -0x8865 0xB296 # HANGUL SYLLABLE NIEUN-EU-NIEUNHIEUH -0x8866 0xB297 # HANGUL SYLLABLE NIEUN-EU-TIKEUT -0x8867 0xB29B # HANGUL SYLLABLE NIEUN-EU-RIEULPIEUP -0x8868 0xB29C # HANGUL SYLLABLE NIEUN-EU-RIEULSIOS -0x8869 0xB29D # HANGUL SYLLABLE NIEUN-EU-RIEULTHIEUTH -0x886A 0xB29E # HANGUL SYLLABLE NIEUN-EU-RIEULPHIEUPH -0x886B 0xB29F # HANGUL SYLLABLE NIEUN-EU-RIEULHIEUH -0x886C 0xB2A2 # HANGUL SYLLABLE NIEUN-EU-PIEUPSIOS -0x886D 0xB2A4 # HANGUL SYLLABLE NIEUN-EU-SSANGSIOS -0x886E 0xB2A7 # HANGUL SYLLABLE NIEUN-EU-CHIEUCH -0x886F 0xB2A8 # HANGUL SYLLABLE NIEUN-EU-KHIEUKH -0x8870 0xB2A9 # HANGUL SYLLABLE NIEUN-EU-THIEUTH -0x8871 0xB2AB # HANGUL SYLLABLE NIEUN-EU-HIEUH -0x8872 0xB2AD # HANGUL SYLLABLE NIEUN-YI-KIYEOK -0x8873 0xB2AE # HANGUL SYLLABLE NIEUN-YI-SSANGKIYEOK -0x8874 0xB2AF # HANGUL SYLLABLE NIEUN-YI-KIYEOKSIOS -0x8875 0xB2B1 # HANGUL SYLLABLE NIEUN-YI-NIEUNCIEUC -0x8876 0xB2B2 # HANGUL SYLLABLE NIEUN-YI-NIEUNHIEUH -0x8877 0xB2B3 # HANGUL SYLLABLE NIEUN-YI-TIKEUT -0x8878 0xB2B5 # HANGUL SYLLABLE NIEUN-YI-RIEULKIYEOK -0x8879 0xB2B6 # HANGUL SYLLABLE NIEUN-YI-RIEULMIEUM -0x887A 0xB2B7 # HANGUL SYLLABLE NIEUN-YI-RIEULPIEUP -0x8881 0xB2B8 # HANGUL SYLLABLE NIEUN-YI-RIEULSIOS -0x8882 0xB2B9 # HANGUL SYLLABLE NIEUN-YI-RIEULTHIEUTH -0x8883 0xB2BA # HANGUL SYLLABLE NIEUN-YI-RIEULPHIEUPH -0x8884 0xB2BB # HANGUL SYLLABLE NIEUN-YI-RIEULHIEUH -0x8885 0xB2BC # HANGUL SYLLABLE NIEUN-YI-MIEUM -0x8886 0xB2BD # HANGUL SYLLABLE NIEUN-YI-PIEUP -0x8887 0xB2BE # HANGUL SYLLABLE NIEUN-YI-PIEUPSIOS -0x8888 0xB2BF # HANGUL SYLLABLE NIEUN-YI-SIOS -0x8889 0xB2C0 # HANGUL SYLLABLE NIEUN-YI-SSANGSIOS -0x888A 0xB2C1 # HANGUL SYLLABLE NIEUN-YI-IEUNG -0x888B 0xB2C2 # HANGUL SYLLABLE NIEUN-YI-CIEUC -0x888C 0xB2C3 # HANGUL SYLLABLE NIEUN-YI-CHIEUCH -0x888D 0xB2C4 # HANGUL SYLLABLE NIEUN-YI-KHIEUKH -0x888E 0xB2C5 # HANGUL SYLLABLE NIEUN-YI-THIEUTH -0x888F 0xB2C6 # HANGUL SYLLABLE NIEUN-YI-PHIEUPH -0x8890 0xB2C7 # HANGUL SYLLABLE NIEUN-YI-HIEUH -0x8891 0xB2CA # HANGUL SYLLABLE NIEUN-I-SSANGKIYEOK -0x8892 0xB2CB # HANGUL SYLLABLE NIEUN-I-KIYEOKSIOS -0x8893 0xB2CD # HANGUL SYLLABLE NIEUN-I-NIEUNCIEUC -0x8894 0xB2CE # HANGUL SYLLABLE NIEUN-I-NIEUNHIEUH -0x8895 0xB2CF # HANGUL SYLLABLE NIEUN-I-TIKEUT -0x8896 0xB2D1 # HANGUL SYLLABLE NIEUN-I-RIEULKIYEOK -0x8897 0xB2D3 # HANGUL SYLLABLE NIEUN-I-RIEULPIEUP--<3/22/95> -0x8898 0xB2D4 # HANGUL SYLLABLE NIEUN-I-RIEULSIOS---<3/22/95> -0x8899 0xB2D5 # HANGUL SYLLABLE NIEUN-I-RIEULTHIEUTH<3/22/95> -0x889A 0xB2D6 # HANGUL SYLLABLE NIEUN-I-RIEULPHIEUPH<3/22/95> -0x889B 0xB2D7 # HANGUL SYLLABLE NIEUN-I-RIEULHIEUH -0x889C 0xB2DA # HANGUL SYLLABLE NIEUN-I-PIEUPSIOS -0x889D 0xB2DC # HANGUL SYLLABLE NIEUN-I-SSANGSIOS -0x889E 0xB2DE # HANGUL SYLLABLE NIEUN-I-CIEUC -0x889F 0xB2DF # HANGUL SYLLABLE NIEUN-I-CHIEUCH -0x88A0 0xB2E0 # HANGUL SYLLABLE NIEUN-I-KHIEUKH -0x88A1 0xB2E1 # HANGUL SYLLABLE NIEUN-I-THIEUTH -0x88A2 0xB2E3 # HANGUL SYLLABLE NIEUN-I-HIEUH -0x88A3 0xB2E7 # HANGUL SYLLABLE TIKEUT-A-KIYEOKSIOS -0x88A4 0xB2E9 # HANGUL SYLLABLE TIKEUT-A-NIEUNCIEUC -0x88A5 0xB2EA # HANGUL SYLLABLE TIKEUT-A-NIEUNHIEUH -0x88A6 0xB2F0 # HANGUL SYLLABLE TIKEUT-A-RIEULSIOS -0x88A7 0xB2F1 # HANGUL SYLLABLE TIKEUT-A-RIEULTHIEUTH -0x88A8 0xB2F2 # HANGUL SYLLABLE TIKEUT-A-RIEULPHIEUPH -0x88A9 0xB2F6 # HANGUL SYLLABLE TIKEUT-A-PIEUPSIOS -0x88AA 0xB2FC # HANGUL SYLLABLE TIKEUT-A-KHIEUKH -0x88AB 0xB2FD # HANGUL SYLLABLE TIKEUT-A-THIEUTH -0x88AC 0xB2FE # HANGUL SYLLABLE TIKEUT-A-PHIEUPH -0x88AD 0xB302 # HANGUL SYLLABLE TIKEUT-AE-SSANGKIYEOK -0x88AE 0xB303 # HANGUL SYLLABLE TIKEUT-AE-KIYEOKSIOS -0x88AF 0xB305 # HANGUL SYLLABLE TIKEUT-AE-NIEUNCIEUC -0x88B0 0xB306 # HANGUL SYLLABLE TIKEUT-AE-NIEUNHIEUH -0x88B1 0xB307 # HANGUL SYLLABLE TIKEUT-AE-TIKEUT -0x88B2 0xB309 # HANGUL SYLLABLE TIKEUT-AE-RIEULKIYEOK -0x88B3 0xB30A # HANGUL SYLLABLE TIKEUT-AE-RIEULMIEUM -0x88B4 0xB30B # HANGUL SYLLABLE TIKEUT-AE-RIEULPIEUP -0x88B5 0xB30C # HANGUL SYLLABLE TIKEUT-AE-RIEULSIOS -0x88B6 0xB30D # HANGUL SYLLABLE TIKEUT-AE-RIEULTHIEUTH -0x88B7 0xB30E # HANGUL SYLLABLE TIKEUT-AE-RIEULPHIEUPH -0x88B8 0xB30F # HANGUL SYLLABLE TIKEUT-AE-RIEULHIEUH -0x88B9 0xB312 # HANGUL SYLLABLE TIKEUT-AE-PIEUPSIOS -0x88BA 0xB316 # HANGUL SYLLABLE TIKEUT-AE-CIEUC -0x88BB 0xB317 # HANGUL SYLLABLE TIKEUT-AE-CHIEUCH -0x88BC 0xB318 # HANGUL SYLLABLE TIKEUT-AE-KHIEUKH -0x88BD 0xB319 # HANGUL SYLLABLE TIKEUT-AE-THIEUTH -0x88BE 0xB31A # HANGUL SYLLABLE TIKEUT-AE-PHIEUPH -0x88BF 0xB31B # HANGUL SYLLABLE TIKEUT-AE-HIEUH -0x88C0 0xB31D # HANGUL SYLLABLE TIKEUT-YA-KIYEOK -0x88C1 0xB31E # HANGUL SYLLABLE TIKEUT-YA-SSANGKIYEOK -0x88C2 0xB31F # HANGUL SYLLABLE TIKEUT-YA-KIYEOKSIOS -0x88C3 0xB320 # HANGUL SYLLABLE TIKEUT-YA-NIEUN -0x88C4 0xB321 # HANGUL SYLLABLE TIKEUT-YA-NIEUNCIEUC -0x88C5 0xB322 # HANGUL SYLLABLE TIKEUT-YA-NIEUNHIEUH -0x88C6 0xB323 # HANGUL SYLLABLE TIKEUT-YA-TIKEUT -0x88C7 0xB324 # HANGUL SYLLABLE TIKEUT-YA-RIEUL -0x88C8 0xB325 # HANGUL SYLLABLE TIKEUT-YA-RIEULKIYEOK -0x88C9 0xB326 # HANGUL SYLLABLE TIKEUT-YA-RIEULMIEUM -0x88CA 0xB327 # HANGUL SYLLABLE TIKEUT-YA-RIEULPIEUP -0x88CB 0xB328 # HANGUL SYLLABLE TIKEUT-YA-RIEULSIOS -0x88CC 0xB329 # HANGUL SYLLABLE TIKEUT-YA-RIEULTHIEUTH -0x88CD 0xB32A # HANGUL SYLLABLE TIKEUT-YA-RIEULPHIEUPH -0x88CE 0xB32B # HANGUL SYLLABLE TIKEUT-YA-RIEULHIEUH -0x88CF 0xB32C # HANGUL SYLLABLE TIKEUT-YA-MIEUM -0x88D0 0xB32D # HANGUL SYLLABLE TIKEUT-YA-PIEUP -0x88D1 0xB32E # HANGUL SYLLABLE TIKEUT-YA-PIEUPSIOS -0x88D2 0xB32F # HANGUL SYLLABLE TIKEUT-YA-SIOS -0x88D3 0xB330 # HANGUL SYLLABLE TIKEUT-YA-SSANGSIOS -0x88D4 0xB331 # HANGUL SYLLABLE TIKEUT-YA-IEUNG -0x88D5 0xB332 # HANGUL SYLLABLE TIKEUT-YA-CIEUC -0x88D6 0xB333 # HANGUL SYLLABLE TIKEUT-YA-CHIEUCH -0x88D7 0xB334 # HANGUL SYLLABLE TIKEUT-YA-KHIEUKH -0x88D8 0xB335 # HANGUL SYLLABLE TIKEUT-YA-THIEUTH -0x88D9 0xB336 # HANGUL SYLLABLE TIKEUT-YA-PHIEUPH -0x88DA 0xB337 # HANGUL SYLLABLE TIKEUT-YA-HIEUH -0x88DB 0xB338 # HANGUL SYLLABLE TIKEUT-YAE -0x88DC 0xB339 # HANGUL SYLLABLE TIKEUT-YAE-KIYEOK -0x88DD 0xB33A # HANGUL SYLLABLE TIKEUT-YAE-SSANGKIYEOK -0x88DE 0xB33B # HANGUL SYLLABLE TIKEUT-YAE-KIYEOKSIOS -0x88DF 0xB33C # HANGUL SYLLABLE TIKEUT-YAE-NIEUN -0x88E0 0xB33D # HANGUL SYLLABLE TIKEUT-YAE-NIEUNCIEUC -0x88E1 0xB33E # HANGUL SYLLABLE TIKEUT-YAE-NIEUNHIEUH -0x88E2 0xB33F # HANGUL SYLLABLE TIKEUT-YAE-TIKEUT -0x88E3 0xB340 # HANGUL SYLLABLE TIKEUT-YAE-RIEUL -0x88E4 0xB341 # HANGUL SYLLABLE TIKEUT-YAE-RIEULKIYEOK -0x88E5 0xB342 # HANGUL SYLLABLE TIKEUT-YAE-RIEULMIEUM -0x88E6 0xB343 # HANGUL SYLLABLE TIKEUT-YAE-RIEULPIEUP -0x88E7 0xB344 # HANGUL SYLLABLE TIKEUT-YAE-RIEULSIOS -0x88E8 0xB345 # HANGUL SYLLABLE TIKEUT-YAE-RIEULTHIEUTH -0x88E9 0xB346 # HANGUL SYLLABLE TIKEUT-YAE-RIEULPHIEUPH -0x88EA 0xB347 # HANGUL SYLLABLE TIKEUT-YAE-RIEULHIEUH -0x88EB 0xB348 # HANGUL SYLLABLE TIKEUT-YAE-MIEUM -0x88EC 0xB349 # HANGUL SYLLABLE TIKEUT-YAE-PIEUP -0x88ED 0xB34A # HANGUL SYLLABLE TIKEUT-YAE-PIEUPSIOS -0x88EE 0xB34B # HANGUL SYLLABLE TIKEUT-YAE-SIOS -0x88EF 0xB34C # HANGUL SYLLABLE TIKEUT-YAE-SSANGSIOS -0x88F0 0xB34D # HANGUL SYLLABLE TIKEUT-YAE-IEUNG -0x88F1 0xB34E # HANGUL SYLLABLE TIKEUT-YAE-CIEUC -0x88F2 0xB34F # HANGUL SYLLABLE TIKEUT-YAE-CHIEUCH -0x88F3 0xB350 # HANGUL SYLLABLE TIKEUT-YAE-KHIEUKH -0x88F4 0xB351 # HANGUL SYLLABLE TIKEUT-YAE-THIEUTH -0x88F5 0xB352 # HANGUL SYLLABLE TIKEUT-YAE-PHIEUPH -0x88F6 0xB353 # HANGUL SYLLABLE TIKEUT-YAE-HIEUH -0x88F7 0xB357 # HANGUL SYLLABLE TIKEUT-EO-KIYEOKSIOS -0x88F8 0xB359 # HANGUL SYLLABLE TIKEUT-EO-NIEUNCIEUC -0x88F9 0xB35A # HANGUL SYLLABLE TIKEUT-EO-NIEUNHIEUH -0x88FA 0xB35D # HANGUL SYLLABLE TIKEUT-EO-RIEULKIYEOK -0x88FB 0xB360 # HANGUL SYLLABLE TIKEUT-EO-RIEULSIOS -0x88FC 0xB361 # HANGUL SYLLABLE TIKEUT-EO-RIEULTHIEUTH -0x88FD 0xB362 # HANGUL SYLLABLE TIKEUT-EO-RIEULPHIEUPH -0x88FE 0xB363 # HANGUL SYLLABLE TIKEUT-EO-RIEULHIEUH -0x8941 0xB366 # HANGUL SYLLABLE TIKEUT-EO-PIEUPSIOS -0x8942 0xB368 # HANGUL SYLLABLE TIKEUT-EO-SSANGSIOS -0x8943 0xB36A # HANGUL SYLLABLE TIKEUT-EO-CIEUC -0x8944 0xB36C # HANGUL SYLLABLE TIKEUT-EO-KHIEUKH -0x8945 0xB36D # HANGUL SYLLABLE TIKEUT-EO-THIEUTH -0x8946 0xB36F # HANGUL SYLLABLE TIKEUT-EO-HIEUH -0x8947 0xB372 # HANGUL SYLLABLE TIKEUT-E-SSANGKIYEOK -0x8948 0xB373 # HANGUL SYLLABLE TIKEUT-E-KIYEOKSIOS -0x8949 0xB375 # HANGUL SYLLABLE TIKEUT-E-NIEUNCIEUC -0x894A 0xB376 # HANGUL SYLLABLE TIKEUT-E-NIEUNHIEUH -0x894B 0xB377 # HANGUL SYLLABLE TIKEUT-E-TIKEUT -0x894C 0xB379 # HANGUL SYLLABLE TIKEUT-E-RIEULKIYEOK -0x894D 0xB37A # HANGUL SYLLABLE TIKEUT-E-RIEULMIEUM -0x894E 0xB37B # HANGUL SYLLABLE TIKEUT-E-RIEULPIEUP -0x894F 0xB37C # HANGUL SYLLABLE TIKEUT-E-RIEULSIOS -0x8950 0xB37D # HANGUL SYLLABLE TIKEUT-E-RIEULTHIEUTH -0x8951 0xB37E # HANGUL SYLLABLE TIKEUT-E-RIEULPHIEUPH -0x8952 0xB37F # HANGUL SYLLABLE TIKEUT-E-RIEULHIEUH -0x8953 0xB382 # HANGUL SYLLABLE TIKEUT-E-PIEUPSIOS -0x8954 0xB386 # HANGUL SYLLABLE TIKEUT-E-CIEUC -0x8955 0xB387 # HANGUL SYLLABLE TIKEUT-E-CHIEUCH -0x8956 0xB388 # HANGUL SYLLABLE TIKEUT-E-KHIEUKH -0x8957 0xB389 # HANGUL SYLLABLE TIKEUT-E-THIEUTH -0x8958 0xB38A # HANGUL SYLLABLE TIKEUT-E-PHIEUPH -0x8959 0xB38B # HANGUL SYLLABLE TIKEUT-E-HIEUH -0x895A 0xB38D # HANGUL SYLLABLE TIKEUT-YEO-KIYEOK -0x8961 0xB38E # HANGUL SYLLABLE TIKEUT-YEO-SSANGKIYEOK -0x8962 0xB38F # HANGUL SYLLABLE TIKEUT-YEO-KIYEOKSIOS -0x8963 0xB391 # HANGUL SYLLABLE TIKEUT-YEO-NIEUNCIEUC -0x8964 0xB392 # HANGUL SYLLABLE TIKEUT-YEO-NIEUNHIEUH -0x8965 0xB393 # HANGUL SYLLABLE TIKEUT-YEO-TIKEUT -0x8966 0xB395 # HANGUL SYLLABLE TIKEUT-YEO-RIEULKIYEOK -0x8967 0xB396 # HANGUL SYLLABLE TIKEUT-YEO-RIEULMIEUM -0x8968 0xB397 # HANGUL SYLLABLE TIKEUT-YEO-RIEULPIEUP -0x8969 0xB398 # HANGUL SYLLABLE TIKEUT-YEO-RIEULSIOS -0x896A 0xB399 # HANGUL SYLLABLE TIKEUT-YEO-RIEULTHIEUTH -0x896B 0xB39A # HANGUL SYLLABLE TIKEUT-YEO-RIEULPHIEUPH -0x896C 0xB39B # HANGUL SYLLABLE TIKEUT-YEO-RIEULHIEUH -0x896D 0xB39C # HANGUL SYLLABLE TIKEUT-YEO-MIEUM -0x896E 0xB39D # HANGUL SYLLABLE TIKEUT-YEO-PIEUP -0x896F 0xB39E # HANGUL SYLLABLE TIKEUT-YEO-PIEUPSIOS -0x8970 0xB39F # HANGUL SYLLABLE TIKEUT-YEO-SIOS -0x8971 0xB3A2 # HANGUL SYLLABLE TIKEUT-YEO-CIEUC -0x8972 0xB3A3 # HANGUL SYLLABLE TIKEUT-YEO-CHIEUCH -0x8973 0xB3A4 # HANGUL SYLLABLE TIKEUT-YEO-KHIEUKH -0x8974 0xB3A5 # HANGUL SYLLABLE TIKEUT-YEO-THIEUTH -0x8975 0xB3A6 # HANGUL SYLLABLE TIKEUT-YEO-PHIEUPH -0x8976 0xB3A7 # HANGUL SYLLABLE TIKEUT-YEO-HIEUH -0x8977 0xB3A9 # HANGUL SYLLABLE TIKEUT-YE-KIYEOK -0x8978 0xB3AA # HANGUL SYLLABLE TIKEUT-YE-SSANGKIYEOK -0x8979 0xB3AB # HANGUL SYLLABLE TIKEUT-YE-KIYEOKSIOS -0x897A 0xB3AD # HANGUL SYLLABLE TIKEUT-YE-NIEUNCIEUC -0x8981 0xB3AE # HANGUL SYLLABLE TIKEUT-YE-NIEUNHIEUH -0x8982 0xB3AF # HANGUL SYLLABLE TIKEUT-YE-TIKEUT -0x8983 0xB3B0 # HANGUL SYLLABLE TIKEUT-YE-RIEUL -0x8984 0xB3B1 # HANGUL SYLLABLE TIKEUT-YE-RIEULKIYEOK -0x8985 0xB3B2 # HANGUL SYLLABLE TIKEUT-YE-RIEULMIEUM -0x8986 0xB3B3 # HANGUL SYLLABLE TIKEUT-YE-RIEULPIEUP -0x8987 0xB3B4 # HANGUL SYLLABLE TIKEUT-YE-RIEULSIOS -0x8988 0xB3B5 # HANGUL SYLLABLE TIKEUT-YE-RIEULTHIEUTH -0x8989 0xB3B6 # HANGUL SYLLABLE TIKEUT-YE-RIEULPHIEUPH -0x898A 0xB3B7 # HANGUL SYLLABLE TIKEUT-YE-RIEULHIEUH -0x898B 0xB3B8 # HANGUL SYLLABLE TIKEUT-YE-MIEUM -0x898C 0xB3B9 # HANGUL SYLLABLE TIKEUT-YE-PIEUP -0x898D 0xB3BA # HANGUL SYLLABLE TIKEUT-YE-PIEUPSIOS -0x898E 0xB3BB # HANGUL SYLLABLE TIKEUT-YE-SIOS -0x898F 0xB3BC # HANGUL SYLLABLE TIKEUT-YE-SSANGSIOS -0x8990 0xB3BD # HANGUL SYLLABLE TIKEUT-YE-IEUNG -0x8991 0xB3BE # HANGUL SYLLABLE TIKEUT-YE-CIEUC -0x8992 0xB3BF # HANGUL SYLLABLE TIKEUT-YE-CHIEUCH -0x8993 0xB3C0 # HANGUL SYLLABLE TIKEUT-YE-KHIEUKH -0x8994 0xB3C1 # HANGUL SYLLABLE TIKEUT-YE-THIEUTH -0x8995 0xB3C2 # HANGUL SYLLABLE TIKEUT-YE-PHIEUPH -0x8996 0xB3C3 # HANGUL SYLLABLE TIKEUT-YE-HIEUH -0x8997 0xB3C6 # HANGUL SYLLABLE TIKEUT-O-SSANGKIYEOK -0x8998 0xB3C7 # HANGUL SYLLABLE TIKEUT-O-KIYEOKSIOS -0x8999 0xB3C9 # HANGUL SYLLABLE TIKEUT-O-NIEUNCIEUC -0x899A 0xB3CA # HANGUL SYLLABLE TIKEUT-O-NIEUNHIEUH -0x899B 0xB3CD # HANGUL SYLLABLE TIKEUT-O-RIEULKIYEOK -0x899C 0xB3CF # HANGUL SYLLABLE TIKEUT-O-RIEULPIEUP -0x899D 0xB3D1 # HANGUL SYLLABLE TIKEUT-O-RIEULTHIEUTH -0x899E 0xB3D2 # HANGUL SYLLABLE TIKEUT-O-RIEULPHIEUPH -0x899F 0xB3D3 # HANGUL SYLLABLE TIKEUT-O-RIEULHIEUH -0x89A0 0xB3D6 # HANGUL SYLLABLE TIKEUT-O-PIEUPSIOS -0x89A1 0xB3D8 # HANGUL SYLLABLE TIKEUT-O-SSANGSIOS -0x89A2 0xB3DA # HANGUL SYLLABLE TIKEUT-O-CIEUC -0x89A3 0xB3DC # HANGUL SYLLABLE TIKEUT-O-KHIEUKH -0x89A4 0xB3DE # HANGUL SYLLABLE TIKEUT-O-PHIEUPH -0x89A5 0xB3DF # HANGUL SYLLABLE TIKEUT-O-HIEUH -0x89A6 0xB3E1 # HANGUL SYLLABLE TIKEUT-WA-KIYEOK -0x89A7 0xB3E2 # HANGUL SYLLABLE TIKEUT-WA-SSANGKIYEOK -0x89A8 0xB3E3 # HANGUL SYLLABLE TIKEUT-WA-KIYEOKSIOS -0x89A9 0xB3E5 # HANGUL SYLLABLE TIKEUT-WA-NIEUNCIEUC -0x89AA 0xB3E6 # HANGUL SYLLABLE TIKEUT-WA-NIEUNHIEUH -0x89AB 0xB3E7 # HANGUL SYLLABLE TIKEUT-WA-TIKEUT -0x89AC 0xB3E9 # HANGUL SYLLABLE TIKEUT-WA-RIEULKIYEOK -0x89AD 0xB3EA # HANGUL SYLLABLE TIKEUT-WA-RIEULMIEUM -0x89AE 0xB3EB # HANGUL SYLLABLE TIKEUT-WA-RIEULPIEUP -0x89AF 0xB3EC # HANGUL SYLLABLE TIKEUT-WA-RIEULSIOS -0x89B0 0xB3ED # HANGUL SYLLABLE TIKEUT-WA-RIEULTHIEUTH -0x89B1 0xB3EE # HANGUL SYLLABLE TIKEUT-WA-RIEULPHIEUPH -0x89B2 0xB3EF # HANGUL SYLLABLE TIKEUT-WA-RIEULHIEUH -0x89B3 0xB3F0 # HANGUL SYLLABLE TIKEUT-WA-MIEUM -0x89B4 0xB3F1 # HANGUL SYLLABLE TIKEUT-WA-PIEUP -0x89B5 0xB3F2 # HANGUL SYLLABLE TIKEUT-WA-PIEUPSIOS -0x89B6 0xB3F3 # HANGUL SYLLABLE TIKEUT-WA-SIOS -0x89B7 0xB3F4 # HANGUL SYLLABLE TIKEUT-WA-SSANGSIOS -0x89B8 0xB3F5 # HANGUL SYLLABLE TIKEUT-WA-IEUNG -0x89B9 0xB3F6 # HANGUL SYLLABLE TIKEUT-WA-CIEUC -0x89BA 0xB3F7 # HANGUL SYLLABLE TIKEUT-WA-CHIEUCH -0x89BB 0xB3F8 # HANGUL SYLLABLE TIKEUT-WA-KHIEUKH -0x89BC 0xB3F9 # HANGUL SYLLABLE TIKEUT-WA-THIEUTH -0x89BD 0xB3FA # HANGUL SYLLABLE TIKEUT-WA-PHIEUPH -0x89BE 0xB3FB # HANGUL SYLLABLE TIKEUT-WA-HIEUH -0x89BF 0xB3FD # HANGUL SYLLABLE TIKEUT-WAE-KIYEOK -0x89C0 0xB3FE # HANGUL SYLLABLE TIKEUT-WAE-SSANGKIYEOK -0x89C1 0xB3FF # HANGUL SYLLABLE TIKEUT-WAE-KIYEOKSIOS -0x89C2 0xB400 # HANGUL SYLLABLE TIKEUT-WAE-NIEUN -0x89C3 0xB401 # HANGUL SYLLABLE TIKEUT-WAE-NIEUNCIEUC -0x89C4 0xB402 # HANGUL SYLLABLE TIKEUT-WAE-NIEUNHIEUH -0x89C5 0xB403 # HANGUL SYLLABLE TIKEUT-WAE-TIKEUT -0x89C6 0xB404 # HANGUL SYLLABLE TIKEUT-WAE-RIEUL -0x89C7 0xB405 # HANGUL SYLLABLE TIKEUT-WAE-RIEULKIYEOK -0x89C8 0xB406 # HANGUL SYLLABLE TIKEUT-WAE-RIEULMIEUM -0x89C9 0xB407 # HANGUL SYLLABLE TIKEUT-WAE-RIEULPIEUP -0x89CA 0xB408 # HANGUL SYLLABLE TIKEUT-WAE-RIEULSIOS -0x89CB 0xB409 # HANGUL SYLLABLE TIKEUT-WAE-RIEULTHIEUTH -0x89CC 0xB40A # HANGUL SYLLABLE TIKEUT-WAE-RIEULPHIEUPH -0x89CD 0xB40B # HANGUL SYLLABLE TIKEUT-WAE-RIEULHIEUH -0x89CE 0xB40C # HANGUL SYLLABLE TIKEUT-WAE-MIEUM -0x89CF 0xB40D # HANGUL SYLLABLE TIKEUT-WAE-PIEUP -0x89D0 0xB40E # HANGUL SYLLABLE TIKEUT-WAE-PIEUPSIOS -0x89D1 0xB40F # HANGUL SYLLABLE TIKEUT-WAE-SIOS -0x89D2 0xB411 # HANGUL SYLLABLE TIKEUT-WAE-IEUNG -0x89D3 0xB412 # HANGUL SYLLABLE TIKEUT-WAE-CIEUC -0x89D4 0xB413 # HANGUL SYLLABLE TIKEUT-WAE-CHIEUCH -0x89D5 0xB414 # HANGUL SYLLABLE TIKEUT-WAE-KHIEUKH -0x89D6 0xB415 # HANGUL SYLLABLE TIKEUT-WAE-THIEUTH -0x89D7 0xB416 # HANGUL SYLLABLE TIKEUT-WAE-PHIEUPH -0x89D8 0xB417 # HANGUL SYLLABLE TIKEUT-WAE-HIEUH -0x89D9 0xB419 # HANGUL SYLLABLE TIKEUT-OE-KIYEOK -0x89DA 0xB41A # HANGUL SYLLABLE TIKEUT-OE-SSANGKIYEOK -0x89DB 0xB41B # HANGUL SYLLABLE TIKEUT-OE-KIYEOKSIOS -0x89DC 0xB41D # HANGUL SYLLABLE TIKEUT-OE-NIEUNCIEUC -0x89DD 0xB41E # HANGUL SYLLABLE TIKEUT-OE-NIEUNHIEUH -0x89DE 0xB41F # HANGUL SYLLABLE TIKEUT-OE-TIKEUT -0x89DF 0xB421 # HANGUL SYLLABLE TIKEUT-OE-RIEULKIYEOK -0x89E0 0xB422 # HANGUL SYLLABLE TIKEUT-OE-RIEULMIEUM -0x89E1 0xB423 # HANGUL SYLLABLE TIKEUT-OE-RIEULPIEUP -0x89E2 0xB424 # HANGUL SYLLABLE TIKEUT-OE-RIEULSIOS -0x89E3 0xB425 # HANGUL SYLLABLE TIKEUT-OE-RIEULTHIEUTH -0x89E4 0xB426 # HANGUL SYLLABLE TIKEUT-OE-RIEULPHIEUPH -0x89E5 0xB427 # HANGUL SYLLABLE TIKEUT-OE-RIEULHIEUH -0x89E6 0xB42A # HANGUL SYLLABLE TIKEUT-OE-PIEUPSIOS -0x89E7 0xB42C # HANGUL SYLLABLE TIKEUT-OE-SSANGSIOS -0x89E8 0xB42D # HANGUL SYLLABLE TIKEUT-OE-IEUNG -0x89E9 0xB42E # HANGUL SYLLABLE TIKEUT-OE-CIEUC -0x89EA 0xB42F # HANGUL SYLLABLE TIKEUT-OE-CHIEUCH -0x89EB 0xB430 # HANGUL SYLLABLE TIKEUT-OE-KHIEUKH -0x89EC 0xB431 # HANGUL SYLLABLE TIKEUT-OE-THIEUTH -0x89ED 0xB432 # HANGUL SYLLABLE TIKEUT-OE-PHIEUPH -0x89EE 0xB433 # HANGUL SYLLABLE TIKEUT-OE-HIEUH -0x89EF 0xB435 # HANGUL SYLLABLE TIKEUT-YO-KIYEOK -0x89F0 0xB436 # HANGUL SYLLABLE TIKEUT-YO-SSANGKIYEOK -0x89F1 0xB437 # HANGUL SYLLABLE TIKEUT-YO-KIYEOKSIOS -0x89F2 0xB438 # HANGUL SYLLABLE TIKEUT-YO-NIEUN -0x89F3 0xB439 # HANGUL SYLLABLE TIKEUT-YO-NIEUNCIEUC -0x89F4 0xB43A # HANGUL SYLLABLE TIKEUT-YO-NIEUNHIEUH -0x89F5 0xB43B # HANGUL SYLLABLE TIKEUT-YO-TIKEUT -0x89F6 0xB43C # HANGUL SYLLABLE TIKEUT-YO-RIEUL -0x89F7 0xB43D # HANGUL SYLLABLE TIKEUT-YO-RIEULKIYEOK -0x89F8 0xB43E # HANGUL SYLLABLE TIKEUT-YO-RIEULMIEUM -0x89F9 0xB43F # HANGUL SYLLABLE TIKEUT-YO-RIEULPIEUP -0x89FA 0xB440 # HANGUL SYLLABLE TIKEUT-YO-RIEULSIOS -0x89FB 0xB441 # HANGUL SYLLABLE TIKEUT-YO-RIEULTHIEUTH -0x89FC 0xB442 # HANGUL SYLLABLE TIKEUT-YO-RIEULPHIEUPH -0x89FD 0xB443 # HANGUL SYLLABLE TIKEUT-YO-RIEULHIEUH -0x89FE 0xB444 # HANGUL SYLLABLE TIKEUT-YO-MIEUM -0x8A41 0xB445 # HANGUL SYLLABLE TIKEUT-YO-PIEUP -0x8A42 0xB446 # HANGUL SYLLABLE TIKEUT-YO-PIEUPSIOS -0x8A43 0xB447 # HANGUL SYLLABLE TIKEUT-YO-SIOS -0x8A44 0xB448 # HANGUL SYLLABLE TIKEUT-YO-SSANGSIOS -0x8A45 0xB449 # HANGUL SYLLABLE TIKEUT-YO-IEUNG -0x8A46 0xB44A # HANGUL SYLLABLE TIKEUT-YO-CIEUC -0x8A47 0xB44B # HANGUL SYLLABLE TIKEUT-YO-CHIEUCH -0x8A48 0xB44C # HANGUL SYLLABLE TIKEUT-YO-KHIEUKH -0x8A49 0xB44D # HANGUL SYLLABLE TIKEUT-YO-THIEUTH -0x8A4A 0xB44E # HANGUL SYLLABLE TIKEUT-YO-PHIEUPH -0x8A4B 0xB44F # HANGUL SYLLABLE TIKEUT-YO-HIEUH -0x8A4C 0xB452 # HANGUL SYLLABLE TIKEUT-U-SSANGKIYEOK -0x8A4D 0xB453 # HANGUL SYLLABLE TIKEUT-U-KIYEOKSIOS -0x8A4E 0xB455 # HANGUL SYLLABLE TIKEUT-U-NIEUNCIEUC -0x8A4F 0xB456 # HANGUL SYLLABLE TIKEUT-U-NIEUNHIEUH -0x8A50 0xB457 # HANGUL SYLLABLE TIKEUT-U-TIKEUT -0x8A51 0xB459 # HANGUL SYLLABLE TIKEUT-U-RIEULKIYEOK -0x8A52 0xB45A # HANGUL SYLLABLE TIKEUT-U-RIEULMIEUM -0x8A53 0xB45B # HANGUL SYLLABLE TIKEUT-U-RIEULPIEUP -0x8A54 0xB45C # HANGUL SYLLABLE TIKEUT-U-RIEULSIOS -0x8A55 0xB45D # HANGUL SYLLABLE TIKEUT-U-RIEULTHIEUTH -0x8A56 0xB45E # HANGUL SYLLABLE TIKEUT-U-RIEULPHIEUPH -0x8A57 0xB45F # HANGUL SYLLABLE TIKEUT-U-RIEULHIEUH -0x8A58 0xB462 # HANGUL SYLLABLE TIKEUT-U-PIEUPSIOS -0x8A59 0xB464 # HANGUL SYLLABLE TIKEUT-U-SSANGSIOS -0x8A5A 0xB466 # HANGUL SYLLABLE TIKEUT-U-CIEUC -0x8A61 0xB467 # HANGUL SYLLABLE TIKEUT-U-CHIEUCH -0x8A62 0xB468 # HANGUL SYLLABLE TIKEUT-U-KHIEUKH -0x8A63 0xB469 # HANGUL SYLLABLE TIKEUT-U-THIEUTH -0x8A64 0xB46A # HANGUL SYLLABLE TIKEUT-U-PHIEUPH -0x8A65 0xB46B # HANGUL SYLLABLE TIKEUT-U-HIEUH -0x8A66 0xB46D # HANGUL SYLLABLE TIKEUT-WEO-KIYEOK -0x8A67 0xB46E # HANGUL SYLLABLE TIKEUT-WEO-SSANGKIYEOK -0x8A68 0xB46F # HANGUL SYLLABLE TIKEUT-WEO-KIYEOKSIOS -0x8A69 0xB470 # HANGUL SYLLABLE TIKEUT-WEO-NIEUN -0x8A6A 0xB471 # HANGUL SYLLABLE TIKEUT-WEO-NIEUNCIEUC -0x8A6B 0xB472 # HANGUL SYLLABLE TIKEUT-WEO-NIEUNHIEUH -0x8A6C 0xB473 # HANGUL SYLLABLE TIKEUT-WEO-TIKEUT -0x8A6D 0xB474 # HANGUL SYLLABLE TIKEUT-WEO-RIEUL -0x8A6E 0xB475 # HANGUL SYLLABLE TIKEUT-WEO-RIEULKIYEOK -0x8A6F 0xB476 # HANGUL SYLLABLE TIKEUT-WEO-RIEULMIEUM -0x8A70 0xB477 # HANGUL SYLLABLE TIKEUT-WEO-RIEULPIEUP -0x8A71 0xB478 # HANGUL SYLLABLE TIKEUT-WEO-RIEULSIOS -0x8A72 0xB479 # HANGUL SYLLABLE TIKEUT-WEO-RIEULTHIEUTH -0x8A73 0xB47A # HANGUL SYLLABLE TIKEUT-WEO-RIEULPHIEUPH -0x8A74 0xB47B # HANGUL SYLLABLE TIKEUT-WEO-RIEULHIEUH -0x8A75 0xB47C # HANGUL SYLLABLE TIKEUT-WEO-MIEUM -0x8A76 0xB47D # HANGUL SYLLABLE TIKEUT-WEO-PIEUP -0x8A77 0xB47E # HANGUL SYLLABLE TIKEUT-WEO-PIEUPSIOS -0x8A78 0xB47F # HANGUL SYLLABLE TIKEUT-WEO-SIOS -0x8A79 0xB481 # HANGUL SYLLABLE TIKEUT-WEO-IEUNG -0x8A7A 0xB482 # HANGUL SYLLABLE TIKEUT-WEO-CIEUC -0x8A81 0xB483 # HANGUL SYLLABLE TIKEUT-WEO-CHIEUCH -0x8A82 0xB484 # HANGUL SYLLABLE TIKEUT-WEO-KHIEUKH -0x8A83 0xB485 # HANGUL SYLLABLE TIKEUT-WEO-THIEUTH -0x8A84 0xB486 # HANGUL SYLLABLE TIKEUT-WEO-PHIEUPH -0x8A85 0xB487 # HANGUL SYLLABLE TIKEUT-WEO-HIEUH -0x8A86 0xB489 # HANGUL SYLLABLE TIKEUT-WE-KIYEOK -0x8A87 0xB48A # HANGUL SYLLABLE TIKEUT-WE-SSANGKIYEOK -0x8A88 0xB48B # HANGUL SYLLABLE TIKEUT-WE-KIYEOKSIOS -0x8A89 0xB48C # HANGUL SYLLABLE TIKEUT-WE-NIEUN -0x8A8A 0xB48D # HANGUL SYLLABLE TIKEUT-WE-NIEUNCIEUC -0x8A8B 0xB48E # HANGUL SYLLABLE TIKEUT-WE-NIEUNHIEUH -0x8A8C 0xB48F # HANGUL SYLLABLE TIKEUT-WE-TIKEUT -0x8A8D 0xB490 # HANGUL SYLLABLE TIKEUT-WE-RIEUL -0x8A8E 0xB491 # HANGUL SYLLABLE TIKEUT-WE-RIEULKIYEOK -0x8A8F 0xB492 # HANGUL SYLLABLE TIKEUT-WE-RIEULMIEUM -0x8A90 0xB493 # HANGUL SYLLABLE TIKEUT-WE-RIEULPIEUP -0x8A91 0xB494 # HANGUL SYLLABLE TIKEUT-WE-RIEULSIOS -0x8A92 0xB495 # HANGUL SYLLABLE TIKEUT-WE-RIEULTHIEUTH -0x8A93 0xB496 # HANGUL SYLLABLE TIKEUT-WE-RIEULPHIEUPH -0x8A94 0xB497 # HANGUL SYLLABLE TIKEUT-WE-RIEULHIEUH -0x8A95 0xB498 # HANGUL SYLLABLE TIKEUT-WE-MIEUM -0x8A96 0xB499 # HANGUL SYLLABLE TIKEUT-WE-PIEUP -0x8A97 0xB49A # HANGUL SYLLABLE TIKEUT-WE-PIEUPSIOS -0x8A98 0xB49B # HANGUL SYLLABLE TIKEUT-WE-SIOS -0x8A99 0xB49C # HANGUL SYLLABLE TIKEUT-WE-SSANGSIOS -0x8A9A 0xB49E # HANGUL SYLLABLE TIKEUT-WE-CIEUC -0x8A9B 0xB49F # HANGUL SYLLABLE TIKEUT-WE-CHIEUCH -0x8A9C 0xB4A0 # HANGUL SYLLABLE TIKEUT-WE-KHIEUKH -0x8A9D 0xB4A1 # HANGUL SYLLABLE TIKEUT-WE-THIEUTH -0x8A9E 0xB4A2 # HANGUL SYLLABLE TIKEUT-WE-PHIEUPH -0x8A9F 0xB4A3 # HANGUL SYLLABLE TIKEUT-WE-HIEUH -0x8AA0 0xB4A5 # HANGUL SYLLABLE TIKEUT-WI-KIYEOK -0x8AA1 0xB4A6 # HANGUL SYLLABLE TIKEUT-WI-SSANGKIYEOK -0x8AA2 0xB4A7 # HANGUL SYLLABLE TIKEUT-WI-KIYEOKSIOS -0x8AA3 0xB4A9 # HANGUL SYLLABLE TIKEUT-WI-NIEUNCIEUC -0x8AA4 0xB4AA # HANGUL SYLLABLE TIKEUT-WI-NIEUNHIEUH -0x8AA5 0xB4AB # HANGUL SYLLABLE TIKEUT-WI-TIKEUT -0x8AA6 0xB4AD # HANGUL SYLLABLE TIKEUT-WI-RIEULKIYEOK -0x8AA7 0xB4AE # HANGUL SYLLABLE TIKEUT-WI-RIEULMIEUM -0x8AA8 0xB4AF # HANGUL SYLLABLE TIKEUT-WI-RIEULPIEUP -0x8AA9 0xB4B0 # HANGUL SYLLABLE TIKEUT-WI-RIEULSIOS -0x8AAA 0xB4B1 # HANGUL SYLLABLE TIKEUT-WI-RIEULTHIEUTH -0x8AAB 0xB4B2 # HANGUL SYLLABLE TIKEUT-WI-RIEULPHIEUPH -0x8AAC 0xB4B3 # HANGUL SYLLABLE TIKEUT-WI-RIEULHIEUH -0x8AAD 0xB4B4 # HANGUL SYLLABLE TIKEUT-WI-MIEUM -0x8AAE 0xB4B6 # HANGUL SYLLABLE TIKEUT-WI-PIEUPSIOS -0x8AAF 0xB4B8 # HANGUL SYLLABLE TIKEUT-WI-SSANGSIOS -0x8AB0 0xB4BA # HANGUL SYLLABLE TIKEUT-WI-CIEUC -0x8AB1 0xB4BB # HANGUL SYLLABLE TIKEUT-WI-CHIEUCH -0x8AB2 0xB4BC # HANGUL SYLLABLE TIKEUT-WI-KHIEUKH -0x8AB3 0xB4BD # HANGUL SYLLABLE TIKEUT-WI-THIEUTH -0x8AB4 0xB4BE # HANGUL SYLLABLE TIKEUT-WI-PHIEUPH -0x8AB5 0xB4BF # HANGUL SYLLABLE TIKEUT-WI-HIEUH -0x8AB6 0xB4C1 # HANGUL SYLLABLE TIKEUT-YU-KIYEOK -0x8AB7 0xB4C2 # HANGUL SYLLABLE TIKEUT-YU-SSANGKIYEOK -0x8AB8 0xB4C3 # HANGUL SYLLABLE TIKEUT-YU-KIYEOKSIOS -0x8AB9 0xB4C5 # HANGUL SYLLABLE TIKEUT-YU-NIEUNCIEUC -0x8ABA 0xB4C6 # HANGUL SYLLABLE TIKEUT-YU-NIEUNHIEUH -0x8ABB 0xB4C7 # HANGUL SYLLABLE TIKEUT-YU-TIKEUT -0x8ABC 0xB4C9 # HANGUL SYLLABLE TIKEUT-YU-RIEULKIYEOK -0x8ABD 0xB4CA # HANGUL SYLLABLE TIKEUT-YU-RIEULMIEUM -0x8ABE 0xB4CB # HANGUL SYLLABLE TIKEUT-YU-RIEULPIEUP -0x8ABF 0xB4CC # HANGUL SYLLABLE TIKEUT-YU-RIEULSIOS -0x8AC0 0xB4CD # HANGUL SYLLABLE TIKEUT-YU-RIEULTHIEUTH -0x8AC1 0xB4CE # HANGUL SYLLABLE TIKEUT-YU-RIEULPHIEUPH -0x8AC2 0xB4CF # HANGUL SYLLABLE TIKEUT-YU-RIEULHIEUH -0x8AC3 0xB4D1 # HANGUL SYLLABLE TIKEUT-YU-PIEUP -0x8AC4 0xB4D2 # HANGUL SYLLABLE TIKEUT-YU-PIEUPSIOS -0x8AC5 0xB4D3 # HANGUL SYLLABLE TIKEUT-YU-SIOS -0x8AC6 0xB4D4 # HANGUL SYLLABLE TIKEUT-YU-SSANGSIOS -0x8AC7 0xB4D6 # HANGUL SYLLABLE TIKEUT-YU-CIEUC -0x8AC8 0xB4D7 # HANGUL SYLLABLE TIKEUT-YU-CHIEUCH -0x8AC9 0xB4D8 # HANGUL SYLLABLE TIKEUT-YU-KHIEUKH -0x8ACA 0xB4D9 # HANGUL SYLLABLE TIKEUT-YU-THIEUTH -0x8ACB 0xB4DA # HANGUL SYLLABLE TIKEUT-YU-PHIEUPH -0x8ACC 0xB4DB # HANGUL SYLLABLE TIKEUT-YU-HIEUH -0x8ACD 0xB4DE # HANGUL SYLLABLE TIKEUT-EU-SSANGKIYEOK -0x8ACE 0xB4DF # HANGUL SYLLABLE TIKEUT-EU-KIYEOKSIOS -0x8ACF 0xB4E1 # HANGUL SYLLABLE TIKEUT-EU-NIEUNCIEUC -0x8AD0 0xB4E2 # HANGUL SYLLABLE TIKEUT-EU-NIEUNHIEUH -0x8AD1 0xB4E5 # HANGUL SYLLABLE TIKEUT-EU-RIEULKIYEOK -0x8AD2 0xB4E7 # HANGUL SYLLABLE TIKEUT-EU-RIEULPIEUP -0x8AD3 0xB4E8 # HANGUL SYLLABLE TIKEUT-EU-RIEULSIOS -0x8AD4 0xB4E9 # HANGUL SYLLABLE TIKEUT-EU-RIEULTHIEUTH -0x8AD5 0xB4EA # HANGUL SYLLABLE TIKEUT-EU-RIEULPHIEUPH -0x8AD6 0xB4EB # HANGUL SYLLABLE TIKEUT-EU-RIEULHIEUH -0x8AD7 0xB4EE # HANGUL SYLLABLE TIKEUT-EU-PIEUPSIOS -0x8AD8 0xB4F0 # HANGUL SYLLABLE TIKEUT-EU-SSANGSIOS -0x8AD9 0xB4F2 # HANGUL SYLLABLE TIKEUT-EU-CIEUC -0x8ADA 0xB4F3 # HANGUL SYLLABLE TIKEUT-EU-CHIEUCH -0x8ADB 0xB4F4 # HANGUL SYLLABLE TIKEUT-EU-KHIEUKH -0x8ADC 0xB4F5 # HANGUL SYLLABLE TIKEUT-EU-THIEUTH -0x8ADD 0xB4F6 # HANGUL SYLLABLE TIKEUT-EU-PHIEUPH -0x8ADE 0xB4F7 # HANGUL SYLLABLE TIKEUT-EU-HIEUH -0x8ADF 0xB4F9 # HANGUL SYLLABLE TIKEUT-YI-KIYEOK -0x8AE0 0xB4FA # HANGUL SYLLABLE TIKEUT-YI-SSANGKIYEOK -0x8AE1 0xB4FB # HANGUL SYLLABLE TIKEUT-YI-KIYEOKSIOS -0x8AE2 0xB4FC # HANGUL SYLLABLE TIKEUT-YI-NIEUN -0x8AE3 0xB4FD # HANGUL SYLLABLE TIKEUT-YI-NIEUNCIEUC -0x8AE4 0xB4FE # HANGUL SYLLABLE TIKEUT-YI-NIEUNHIEUH -0x8AE5 0xB4FF # HANGUL SYLLABLE TIKEUT-YI-TIKEUT -0x8AE6 0xB500 # HANGUL SYLLABLE TIKEUT-YI-RIEUL -0x8AE7 0xB501 # HANGUL SYLLABLE TIKEUT-YI-RIEULKIYEOK -0x8AE8 0xB502 # HANGUL SYLLABLE TIKEUT-YI-RIEULMIEUM -0x8AE9 0xB503 # HANGUL SYLLABLE TIKEUT-YI-RIEULPIEUP -0x8AEA 0xB504 # HANGUL SYLLABLE TIKEUT-YI-RIEULSIOS -0x8AEB 0xB505 # HANGUL SYLLABLE TIKEUT-YI-RIEULTHIEUTH -0x8AEC 0xB506 # HANGUL SYLLABLE TIKEUT-YI-RIEULPHIEUPH -0x8AED 0xB507 # HANGUL SYLLABLE TIKEUT-YI-RIEULHIEUH -0x8AEE 0xB508 # HANGUL SYLLABLE TIKEUT-YI-MIEUM -0x8AEF 0xB509 # HANGUL SYLLABLE TIKEUT-YI-PIEUP -0x8AF0 0xB50A # HANGUL SYLLABLE TIKEUT-YI-PIEUPSIOS -0x8AF1 0xB50B # HANGUL SYLLABLE TIKEUT-YI-SIOS -0x8AF2 0xB50C # HANGUL SYLLABLE TIKEUT-YI-SSANGSIOS -0x8AF3 0xB50D # HANGUL SYLLABLE TIKEUT-YI-IEUNG -0x8AF4 0xB50E # HANGUL SYLLABLE TIKEUT-YI-CIEUC -0x8AF5 0xB50F # HANGUL SYLLABLE TIKEUT-YI-CHIEUCH -0x8AF6 0xB510 # HANGUL SYLLABLE TIKEUT-YI-KHIEUKH -0x8AF7 0xB511 # HANGUL SYLLABLE TIKEUT-YI-THIEUTH -0x8AF8 0xB512 # HANGUL SYLLABLE TIKEUT-YI-PHIEUPH -0x8AF9 0xB513 # HANGUL SYLLABLE TIKEUT-YI-HIEUH -0x8AFA 0xB516 # HANGUL SYLLABLE TIKEUT-I-SSANGKIYEOK -0x8AFB 0xB517 # HANGUL SYLLABLE TIKEUT-I-KIYEOKSIOS -0x8AFC 0xB519 # HANGUL SYLLABLE TIKEUT-I-NIEUNCIEUC -0x8AFD 0xB51A # HANGUL SYLLABLE TIKEUT-I-NIEUNHIEUH -0x8AFE 0xB51D # HANGUL SYLLABLE TIKEUT-I-RIEULKIYEOK -0x8B41 0xB51E # HANGUL SYLLABLE TIKEUT-I-RIEULMIEUM -0x8B42 0xB51F # HANGUL SYLLABLE TIKEUT-I-RIEULPIEUP -0x8B43 0xB520 # HANGUL SYLLABLE TIKEUT-I-RIEULSIOS -0x8B44 0xB521 # HANGUL SYLLABLE TIKEUT-I-RIEULTHIEUTH -0x8B45 0xB522 # HANGUL SYLLABLE TIKEUT-I-RIEULPHIEUPH -0x8B46 0xB523 # HANGUL SYLLABLE TIKEUT-I-RIEULHIEUH -0x8B47 0xB526 # HANGUL SYLLABLE TIKEUT-I-PIEUPSIOS -0x8B48 0xB52B # HANGUL SYLLABLE TIKEUT-I-CHIEUCH -0x8B49 0xB52C # HANGUL SYLLABLE TIKEUT-I-KHIEUKH -0x8B4A 0xB52D # HANGUL SYLLABLE TIKEUT-I-THIEUTH -0x8B4B 0xB52E # HANGUL SYLLABLE TIKEUT-I-PHIEUPH -0x8B4C 0xB52F # HANGUL SYLLABLE TIKEUT-I-HIEUH -0x8B4D 0xB532 # HANGUL SYLLABLE SSANGTIKEUT-A-SSANGKIYEOK -0x8B4E 0xB533 # HANGUL SYLLABLE SSANGTIKEUT-A-KIYEOKSIOS -0x8B4F 0xB535 # HANGUL SYLLABLE SSANGTIKEUT-A-NIEUNCIEUC -0x8B50 0xB536 # HANGUL SYLLABLE SSANGTIKEUT-A-NIEUNHIEUH -0x8B51 0xB537 # HANGUL SYLLABLE SSANGTIKEUT-A-TIKEUT -0x8B52 0xB539 # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULKIYEOK -0x8B53 0xB53A # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULMIEUM -0x8B54 0xB53B # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULPIEUP -0x8B55 0xB53C # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULSIOS -0x8B56 0xB53D # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULTHIEUTH -0x8B57 0xB53E # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULPHIEUPH -0x8B58 0xB53F # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULHIEUH -0x8B59 0xB542 # HANGUL SYLLABLE SSANGTIKEUT-A-PIEUPSIOS -0x8B5A 0xB546 # HANGUL SYLLABLE SSANGTIKEUT-A-CIEUC -0x8B61 0xB547 # HANGUL SYLLABLE SSANGTIKEUT-A-CHIEUCH -0x8B62 0xB548 # HANGUL SYLLABLE SSANGTIKEUT-A-KHIEUKH -0x8B63 0xB549 # HANGUL SYLLABLE SSANGTIKEUT-A-THIEUTH -0x8B64 0xB54A # HANGUL SYLLABLE SSANGTIKEUT-A-PHIEUPH -0x8B65 0xB54E # HANGUL SYLLABLE SSANGTIKEUT-AE-SSANGKIYEOK -0x8B66 0xB54F # HANGUL SYLLABLE SSANGTIKEUT-AE-KIYEOKSIOS -0x8B67 0xB551 # HANGUL SYLLABLE SSANGTIKEUT-AE-NIEUNCIEUC -0x8B68 0xB552 # HANGUL SYLLABLE SSANGTIKEUT-AE-NIEUNHIEUH -0x8B69 0xB553 # HANGUL SYLLABLE SSANGTIKEUT-AE-TIKEUT -0x8B6A 0xB555 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULKIYEOK -0x8B6B 0xB556 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULMIEUM -0x8B6C 0xB557 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULPIEUP -0x8B6D 0xB558 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULSIOS -0x8B6E 0xB559 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULTHIEUTH -0x8B6F 0xB55A # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULPHIEUPH -0x8B70 0xB55B # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULHIEUH -0x8B71 0xB55E # HANGUL SYLLABLE SSANGTIKEUT-AE-PIEUPSIOS -0x8B72 0xB562 # HANGUL SYLLABLE SSANGTIKEUT-AE-CIEUC -0x8B73 0xB563 # HANGUL SYLLABLE SSANGTIKEUT-AE-CHIEUCH -0x8B74 0xB564 # HANGUL SYLLABLE SSANGTIKEUT-AE-KHIEUKH -0x8B75 0xB565 # HANGUL SYLLABLE SSANGTIKEUT-AE-THIEUTH -0x8B76 0xB566 # HANGUL SYLLABLE SSANGTIKEUT-AE-PHIEUPH -0x8B77 0xB567 # HANGUL SYLLABLE SSANGTIKEUT-AE-HIEUH -0x8B78 0xB568 # HANGUL SYLLABLE SSANGTIKEUT-YA -0x8B79 0xB569 # HANGUL SYLLABLE SSANGTIKEUT-YA-KIYEOK -0x8B7A 0xB56A # HANGUL SYLLABLE SSANGTIKEUT-YA-SSANGKIYEOK -0x8B81 0xB56B # HANGUL SYLLABLE SSANGTIKEUT-YA-KIYEOKSIOS -0x8B82 0xB56C # HANGUL SYLLABLE SSANGTIKEUT-YA-NIEUN -0x8B83 0xB56D # HANGUL SYLLABLE SSANGTIKEUT-YA-NIEUNCIEUC -0x8B84 0xB56E # HANGUL SYLLABLE SSANGTIKEUT-YA-NIEUNHIEUH -0x8B85 0xB56F # HANGUL SYLLABLE SSANGTIKEUT-YA-TIKEUT -0x8B86 0xB570 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEUL -0x8B87 0xB571 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULKIYEOK -0x8B88 0xB572 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULMIEUM -0x8B89 0xB573 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULPIEUP -0x8B8A 0xB574 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULSIOS -0x8B8B 0xB575 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULTHIEUTH -0x8B8C 0xB576 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULPHIEUPH -0x8B8D 0xB577 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULHIEUH -0x8B8E 0xB578 # HANGUL SYLLABLE SSANGTIKEUT-YA-MIEUM -0x8B8F 0xB579 # HANGUL SYLLABLE SSANGTIKEUT-YA-PIEUP -0x8B90 0xB57A # HANGUL SYLLABLE SSANGTIKEUT-YA-PIEUPSIOS -0x8B91 0xB57B # HANGUL SYLLABLE SSANGTIKEUT-YA-SIOS -0x8B92 0xB57C # HANGUL SYLLABLE SSANGTIKEUT-YA-SSANGSIOS -0x8B93 0xB57D # HANGUL SYLLABLE SSANGTIKEUT-YA-IEUNG -0x8B94 0xB57E # HANGUL SYLLABLE SSANGTIKEUT-YA-CIEUC -0x8B95 0xB57F # HANGUL SYLLABLE SSANGTIKEUT-YA-CHIEUCH -0x8B96 0xB580 # HANGUL SYLLABLE SSANGTIKEUT-YA-KHIEUKH -0x8B97 0xB581 # HANGUL SYLLABLE SSANGTIKEUT-YA-THIEUTH -0x8B98 0xB582 # HANGUL SYLLABLE SSANGTIKEUT-YA-PHIEUPH -0x8B99 0xB583 # HANGUL SYLLABLE SSANGTIKEUT-YA-HIEUH -0x8B9A 0xB584 # HANGUL SYLLABLE SSANGTIKEUT-YAE -0x8B9B 0xB585 # HANGUL SYLLABLE SSANGTIKEUT-YAE-KIYEOK -0x8B9C 0xB586 # HANGUL SYLLABLE SSANGTIKEUT-YAE-SSANGKIYEOK -0x8B9D 0xB587 # HANGUL SYLLABLE SSANGTIKEUT-YAE-KIYEOKSIOS -0x8B9E 0xB588 # HANGUL SYLLABLE SSANGTIKEUT-YAE-NIEUN -0x8B9F 0xB589 # HANGUL SYLLABLE SSANGTIKEUT-YAE-NIEUNCIEUC -0x8BA0 0xB58A # HANGUL SYLLABLE SSANGTIKEUT-YAE-NIEUNHIEUH -0x8BA1 0xB58B # HANGUL SYLLABLE SSANGTIKEUT-YAE-TIKEUT -0x8BA2 0xB58C # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEUL -0x8BA3 0xB58D # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULKIYEOK -0x8BA4 0xB58E # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULMIEUM -0x8BA5 0xB58F # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULPIEUP -0x8BA6 0xB590 # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULSIOS -0x8BA7 0xB591 # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULTHIEUTH -0x8BA8 0xB592 # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULPHIEUPH -0x8BA9 0xB593 # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULHIEUH -0x8BAA 0xB594 # HANGUL SYLLABLE SSANGTIKEUT-YAE-MIEUM -0x8BAB 0xB595 # HANGUL SYLLABLE SSANGTIKEUT-YAE-PIEUP -0x8BAC 0xB596 # HANGUL SYLLABLE SSANGTIKEUT-YAE-PIEUPSIOS -0x8BAD 0xB597 # HANGUL SYLLABLE SSANGTIKEUT-YAE-SIOS -0x8BAE 0xB598 # HANGUL SYLLABLE SSANGTIKEUT-YAE-SSANGSIOS -0x8BAF 0xB599 # HANGUL SYLLABLE SSANGTIKEUT-YAE-IEUNG -0x8BB0 0xB59A # HANGUL SYLLABLE SSANGTIKEUT-YAE-CIEUC -0x8BB1 0xB59B # HANGUL SYLLABLE SSANGTIKEUT-YAE-CHIEUCH -0x8BB2 0xB59C # HANGUL SYLLABLE SSANGTIKEUT-YAE-KHIEUKH -0x8BB3 0xB59D # HANGUL SYLLABLE SSANGTIKEUT-YAE-THIEUTH -0x8BB4 0xB59E # HANGUL SYLLABLE SSANGTIKEUT-YAE-PHIEUPH -0x8BB5 0xB59F # HANGUL SYLLABLE SSANGTIKEUT-YAE-HIEUH -0x8BB6 0xB5A2 # HANGUL SYLLABLE SSANGTIKEUT-EO-SSANGKIYEOK -0x8BB7 0xB5A3 # HANGUL SYLLABLE SSANGTIKEUT-EO-KIYEOKSIOS -0x8BB8 0xB5A5 # HANGUL SYLLABLE SSANGTIKEUT-EO-NIEUNCIEUC -0x8BB9 0xB5A6 # HANGUL SYLLABLE SSANGTIKEUT-EO-NIEUNHIEUH -0x8BBA 0xB5A7 # HANGUL SYLLABLE SSANGTIKEUT-EO-TIKEUT -0x8BBB 0xB5A9 # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULKIYEOK -0x8BBC 0xB5AC # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULSIOS -0x8BBD 0xB5AD # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULTHIEUTH -0x8BBE 0xB5AE # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULPHIEUPH -0x8BBF 0xB5AF # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULHIEUH -0x8BC0 0xB5B2 # HANGUL SYLLABLE SSANGTIKEUT-EO-PIEUPSIOS -0x8BC1 0xB5B6 # HANGUL SYLLABLE SSANGTIKEUT-EO-CIEUC -0x8BC2 0xB5B7 # HANGUL SYLLABLE SSANGTIKEUT-EO-CHIEUCH -0x8BC3 0xB5B8 # HANGUL SYLLABLE SSANGTIKEUT-EO-KHIEUKH -0x8BC4 0xB5B9 # HANGUL SYLLABLE SSANGTIKEUT-EO-THIEUTH -0x8BC5 0xB5BA # HANGUL SYLLABLE SSANGTIKEUT-EO-PHIEUPH -0x8BC6 0xB5BE # HANGUL SYLLABLE SSANGTIKEUT-E-SSANGKIYEOK -0x8BC7 0xB5BF # HANGUL SYLLABLE SSANGTIKEUT-E-KIYEOKSIOS -0x8BC8 0xB5C1 # HANGUL SYLLABLE SSANGTIKEUT-E-NIEUNCIEUC -0x8BC9 0xB5C2 # HANGUL SYLLABLE SSANGTIKEUT-E-NIEUNHIEUH -0x8BCA 0xB5C3 # HANGUL SYLLABLE SSANGTIKEUT-E-TIKEUT -0x8BCB 0xB5C5 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULKIYEOK -0x8BCC 0xB5C6 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULMIEUM -0x8BCD 0xB5C7 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULPIEUP -0x8BCE 0xB5C8 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULSIOS -0x8BCF 0xB5C9 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULTHIEUTH -0x8BD0 0xB5CA # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULPHIEUPH -0x8BD1 0xB5CB # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULHIEUH -0x8BD2 0xB5CE # HANGUL SYLLABLE SSANGTIKEUT-E-PIEUPSIOS -0x8BD3 0xB5D2 # HANGUL SYLLABLE SSANGTIKEUT-E-CIEUC -0x8BD4 0xB5D3 # HANGUL SYLLABLE SSANGTIKEUT-E-CHIEUCH -0x8BD5 0xB5D4 # HANGUL SYLLABLE SSANGTIKEUT-E-KHIEUKH -0x8BD6 0xB5D5 # HANGUL SYLLABLE SSANGTIKEUT-E-THIEUTH -0x8BD7 0xB5D6 # HANGUL SYLLABLE SSANGTIKEUT-E-PHIEUPH -0x8BD8 0xB5D7 # HANGUL SYLLABLE SSANGTIKEUT-E-HIEUH -0x8BD9 0xB5D9 # HANGUL SYLLABLE SSANGTIKEUT-YEO-KIYEOK -0x8BDA 0xB5DA # HANGUL SYLLABLE SSANGTIKEUT-YEO-SSANGKIYEOK -0x8BDB 0xB5DB # HANGUL SYLLABLE SSANGTIKEUT-YEO-KIYEOKSIOS -0x8BDC 0xB5DC # HANGUL SYLLABLE SSANGTIKEUT-YEO-NIEUN -0x8BDD 0xB5DD # HANGUL SYLLABLE SSANGTIKEUT-YEO-NIEUNCIEUC -0x8BDE 0xB5DE # HANGUL SYLLABLE SSANGTIKEUT-YEO-NIEUNHIEUH -0x8BDF 0xB5DF # HANGUL SYLLABLE SSANGTIKEUT-YEO-TIKEUT -0x8BE0 0xB5E0 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEUL -0x8BE1 0xB5E1 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULKIYEOK -0x8BE2 0xB5E2 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULMIEUM -0x8BE3 0xB5E3 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULPIEUP -0x8BE4 0xB5E4 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULSIOS -0x8BE5 0xB5E5 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULTHIEUTH -0x8BE6 0xB5E6 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULPHIEUPH -0x8BE7 0xB5E7 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULHIEUH -0x8BE8 0xB5E8 # HANGUL SYLLABLE SSANGTIKEUT-YEO-MIEUM -0x8BE9 0xB5E9 # HANGUL SYLLABLE SSANGTIKEUT-YEO-PIEUP -0x8BEA 0xB5EA # HANGUL SYLLABLE SSANGTIKEUT-YEO-PIEUPSIOS -0x8BEB 0xB5EB # HANGUL SYLLABLE SSANGTIKEUT-YEO-SIOS -0x8BEC 0xB5ED # HANGUL SYLLABLE SSANGTIKEUT-YEO-IEUNG -0x8BED 0xB5EE # HANGUL SYLLABLE SSANGTIKEUT-YEO-CIEUC -0x8BEE 0xB5EF # HANGUL SYLLABLE SSANGTIKEUT-YEO-CHIEUCH -0x8BEF 0xB5F0 # HANGUL SYLLABLE SSANGTIKEUT-YEO-KHIEUKH -0x8BF0 0xB5F1 # HANGUL SYLLABLE SSANGTIKEUT-YEO-THIEUTH -0x8BF1 0xB5F2 # HANGUL SYLLABLE SSANGTIKEUT-YEO-PHIEUPH -0x8BF2 0xB5F3 # HANGUL SYLLABLE SSANGTIKEUT-YEO-HIEUH -0x8BF3 0xB5F4 # HANGUL SYLLABLE SSANGTIKEUT-YE -0x8BF4 0xB5F5 # HANGUL SYLLABLE SSANGTIKEUT-YE-KIYEOK -0x8BF5 0xB5F6 # HANGUL SYLLABLE SSANGTIKEUT-YE-SSANGKIYEOK -0x8BF6 0xB5F7 # HANGUL SYLLABLE SSANGTIKEUT-YE-KIYEOKSIOS -0x8BF7 0xB5F8 # HANGUL SYLLABLE SSANGTIKEUT-YE-NIEUN -0x8BF8 0xB5F9 # HANGUL SYLLABLE SSANGTIKEUT-YE-NIEUNCIEUC -0x8BF9 0xB5FA # HANGUL SYLLABLE SSANGTIKEUT-YE-NIEUNHIEUH -0x8BFA 0xB5FB # HANGUL SYLLABLE SSANGTIKEUT-YE-TIKEUT -0x8BFB 0xB5FC # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEUL -0x8BFC 0xB5FD # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULKIYEOK -0x8BFD 0xB5FE # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULMIEUM -0x8BFE 0xB5FF # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULPIEUP -0x8C41 0xB600 # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULSIOS -0x8C42 0xB601 # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULTHIEUTH -0x8C43 0xB602 # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULPHIEUPH -0x8C44 0xB603 # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULHIEUH -0x8C45 0xB604 # HANGUL SYLLABLE SSANGTIKEUT-YE-MIEUM -0x8C46 0xB605 # HANGUL SYLLABLE SSANGTIKEUT-YE-PIEUP -0x8C47 0xB606 # HANGUL SYLLABLE SSANGTIKEUT-YE-PIEUPSIOS -0x8C48 0xB607 # HANGUL SYLLABLE SSANGTIKEUT-YE-SIOS -0x8C49 0xB608 # HANGUL SYLLABLE SSANGTIKEUT-YE-SSANGSIOS -0x8C4A 0xB609 # HANGUL SYLLABLE SSANGTIKEUT-YE-IEUNG -0x8C4B 0xB60A # HANGUL SYLLABLE SSANGTIKEUT-YE-CIEUC -0x8C4C 0xB60B # HANGUL SYLLABLE SSANGTIKEUT-YE-CHIEUCH -0x8C4D 0xB60C # HANGUL SYLLABLE SSANGTIKEUT-YE-KHIEUKH -0x8C4E 0xB60D # HANGUL SYLLABLE SSANGTIKEUT-YE-THIEUTH -0x8C4F 0xB60E # HANGUL SYLLABLE SSANGTIKEUT-YE-PHIEUPH -0x8C50 0xB60F # HANGUL SYLLABLE SSANGTIKEUT-YE-HIEUH -0x8C51 0xB612 # HANGUL SYLLABLE SSANGTIKEUT-O-SSANGKIYEOK -0x8C52 0xB613 # HANGUL SYLLABLE SSANGTIKEUT-O-KIYEOKSIOS -0x8C53 0xB615 # HANGUL SYLLABLE SSANGTIKEUT-O-NIEUNCIEUC -0x8C54 0xB616 # HANGUL SYLLABLE SSANGTIKEUT-O-NIEUNHIEUH -0x8C55 0xB617 # HANGUL SYLLABLE SSANGTIKEUT-O-TIKEUT -0x8C56 0xB619 # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULKIYEOK -0x8C57 0xB61A # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULMIEUM -0x8C58 0xB61B # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULPIEUP -0x8C59 0xB61C # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULSIOS -0x8C5A 0xB61D # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULTHIEUTH -0x8C61 0xB61E # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULPHIEUPH -0x8C62 0xB61F # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULHIEUH -0x8C63 0xB620 # HANGUL SYLLABLE SSANGTIKEUT-O-MIEUM -0x8C64 0xB621 # HANGUL SYLLABLE SSANGTIKEUT-O-PIEUP -0x8C65 0xB622 # HANGUL SYLLABLE SSANGTIKEUT-O-PIEUPSIOS -0x8C66 0xB623 # HANGUL SYLLABLE SSANGTIKEUT-O-SIOS -0x8C67 0xB624 # HANGUL SYLLABLE SSANGTIKEUT-O-SSANGSIOS -0x8C68 0xB626 # HANGUL SYLLABLE SSANGTIKEUT-O-CIEUC -0x8C69 0xB627 # HANGUL SYLLABLE SSANGTIKEUT-O-CHIEUCH -0x8C6A 0xB628 # HANGUL SYLLABLE SSANGTIKEUT-O-KHIEUKH -0x8C6B 0xB629 # HANGUL SYLLABLE SSANGTIKEUT-O-THIEUTH -0x8C6C 0xB62A # HANGUL SYLLABLE SSANGTIKEUT-O-PHIEUPH -0x8C6D 0xB62B # HANGUL SYLLABLE SSANGTIKEUT-O-HIEUH -0x8C6E 0xB62D # HANGUL SYLLABLE SSANGTIKEUT-WA-KIYEOK -0x8C6F 0xB62E # HANGUL SYLLABLE SSANGTIKEUT-WA-SSANGKIYEOK -0x8C70 0xB62F # HANGUL SYLLABLE SSANGTIKEUT-WA-KIYEOKSIOS -0x8C71 0xB630 # HANGUL SYLLABLE SSANGTIKEUT-WA-NIEUN -0x8C72 0xB631 # HANGUL SYLLABLE SSANGTIKEUT-WA-NIEUNCIEUC -0x8C73 0xB632 # HANGUL SYLLABLE SSANGTIKEUT-WA-NIEUNHIEUH -0x8C74 0xB633 # HANGUL SYLLABLE SSANGTIKEUT-WA-TIKEUT -0x8C75 0xB635 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULKIYEOK -0x8C76 0xB636 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULMIEUM -0x8C77 0xB637 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULPIEUP -0x8C78 0xB638 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULSIOS -0x8C79 0xB639 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULTHIEUTH -0x8C7A 0xB63A # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULPHIEUPH -0x8C81 0xB63B # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULHIEUH -0x8C82 0xB63C # HANGUL SYLLABLE SSANGTIKEUT-WA-MIEUM -0x8C83 0xB63D # HANGUL SYLLABLE SSANGTIKEUT-WA-PIEUP -0x8C84 0xB63E # HANGUL SYLLABLE SSANGTIKEUT-WA-PIEUPSIOS -0x8C85 0xB63F # HANGUL SYLLABLE SSANGTIKEUT-WA-SIOS -0x8C86 0xB640 # HANGUL SYLLABLE SSANGTIKEUT-WA-SSANGSIOS -0x8C87 0xB641 # HANGUL SYLLABLE SSANGTIKEUT-WA-IEUNG -0x8C88 0xB642 # HANGUL SYLLABLE SSANGTIKEUT-WA-CIEUC -0x8C89 0xB643 # HANGUL SYLLABLE SSANGTIKEUT-WA-CHIEUCH -0x8C8A 0xB644 # HANGUL SYLLABLE SSANGTIKEUT-WA-KHIEUKH -0x8C8B 0xB645 # HANGUL SYLLABLE SSANGTIKEUT-WA-THIEUTH -0x8C8C 0xB646 # HANGUL SYLLABLE SSANGTIKEUT-WA-PHIEUPH -0x8C8D 0xB647 # HANGUL SYLLABLE SSANGTIKEUT-WA-HIEUH -0x8C8E 0xB649 # HANGUL SYLLABLE SSANGTIKEUT-WAE-KIYEOK -0x8C8F 0xB64A # HANGUL SYLLABLE SSANGTIKEUT-WAE-SSANGKIYEOK -0x8C90 0xB64B # HANGUL SYLLABLE SSANGTIKEUT-WAE-KIYEOKSIOS -0x8C91 0xB64C # HANGUL SYLLABLE SSANGTIKEUT-WAE-NIEUN -0x8C92 0xB64D # HANGUL SYLLABLE SSANGTIKEUT-WAE-NIEUNCIEUC -0x8C93 0xB64E # HANGUL SYLLABLE SSANGTIKEUT-WAE-NIEUNHIEUH -0x8C94 0xB64F # HANGUL SYLLABLE SSANGTIKEUT-WAE-TIKEUT -0x8C95 0xB650 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEUL -0x8C96 0xB651 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULKIYEOK -0x8C97 0xB652 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULMIEUM -0x8C98 0xB653 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULPIEUP -0x8C99 0xB654 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULSIOS -0x8C9A 0xB655 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULTHIEUTH -0x8C9B 0xB656 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULPHIEUPH -0x8C9C 0xB657 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULHIEUH -0x8C9D 0xB658 # HANGUL SYLLABLE SSANGTIKEUT-WAE-MIEUM -0x8C9E 0xB659 # HANGUL SYLLABLE SSANGTIKEUT-WAE-PIEUP -0x8C9F 0xB65A # HANGUL SYLLABLE SSANGTIKEUT-WAE-PIEUPSIOS -0x8CA0 0xB65B # HANGUL SYLLABLE SSANGTIKEUT-WAE-SIOS -0x8CA1 0xB65C # HANGUL SYLLABLE SSANGTIKEUT-WAE-SSANGSIOS -0x8CA2 0xB65D # HANGUL SYLLABLE SSANGTIKEUT-WAE-IEUNG -0x8CA3 0xB65E # HANGUL SYLLABLE SSANGTIKEUT-WAE-CIEUC -0x8CA4 0xB65F # HANGUL SYLLABLE SSANGTIKEUT-WAE-CHIEUCH -0x8CA5 0xB660 # HANGUL SYLLABLE SSANGTIKEUT-WAE-KHIEUKH -0x8CA6 0xB661 # HANGUL SYLLABLE SSANGTIKEUT-WAE-THIEUTH -0x8CA7 0xB662 # HANGUL SYLLABLE SSANGTIKEUT-WAE-PHIEUPH -0x8CA8 0xB663 # HANGUL SYLLABLE SSANGTIKEUT-WAE-HIEUH -0x8CA9 0xB665 # HANGUL SYLLABLE SSANGTIKEUT-OE-KIYEOK -0x8CAA 0xB666 # HANGUL SYLLABLE SSANGTIKEUT-OE-SSANGKIYEOK -0x8CAB 0xB667 # HANGUL SYLLABLE SSANGTIKEUT-OE-KIYEOKSIOS -0x8CAC 0xB669 # HANGUL SYLLABLE SSANGTIKEUT-OE-NIEUNCIEUC -0x8CAD 0xB66A # HANGUL SYLLABLE SSANGTIKEUT-OE-NIEUNHIEUH -0x8CAE 0xB66B # HANGUL SYLLABLE SSANGTIKEUT-OE-TIKEUT -0x8CAF 0xB66C # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEUL -0x8CB0 0xB66D # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULKIYEOK -0x8CB1 0xB66E # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULMIEUM -0x8CB2 0xB66F # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULPIEUP -0x8CB3 0xB670 # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULSIOS -0x8CB4 0xB671 # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULTHIEUTH -0x8CB5 0xB672 # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULPHIEUPH -0x8CB6 0xB673 # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULHIEUH -0x8CB7 0xB674 # HANGUL SYLLABLE SSANGTIKEUT-OE-MIEUM -0x8CB8 0xB675 # HANGUL SYLLABLE SSANGTIKEUT-OE-PIEUP -0x8CB9 0xB676 # HANGUL SYLLABLE SSANGTIKEUT-OE-PIEUPSIOS -0x8CBA 0xB677 # HANGUL SYLLABLE SSANGTIKEUT-OE-SIOS -0x8CBB 0xB678 # HANGUL SYLLABLE SSANGTIKEUT-OE-SSANGSIOS -0x8CBC 0xB679 # HANGUL SYLLABLE SSANGTIKEUT-OE-IEUNG -0x8CBD 0xB67A # HANGUL SYLLABLE SSANGTIKEUT-OE-CIEUC -0x8CBE 0xB67B # HANGUL SYLLABLE SSANGTIKEUT-OE-CHIEUCH -0x8CBF 0xB67C # HANGUL SYLLABLE SSANGTIKEUT-OE-KHIEUKH -0x8CC0 0xB67D # HANGUL SYLLABLE SSANGTIKEUT-OE-THIEUTH -0x8CC1 0xB67E # HANGUL SYLLABLE SSANGTIKEUT-OE-PHIEUPH -0x8CC2 0xB67F # HANGUL SYLLABLE SSANGTIKEUT-OE-HIEUH -0x8CC3 0xB680 # HANGUL SYLLABLE SSANGTIKEUT-YO -0x8CC4 0xB681 # HANGUL SYLLABLE SSANGTIKEUT-YO-KIYEOK -0x8CC5 0xB682 # HANGUL SYLLABLE SSANGTIKEUT-YO-SSANGKIYEOK -0x8CC6 0xB683 # HANGUL SYLLABLE SSANGTIKEUT-YO-KIYEOKSIOS -0x8CC7 0xB684 # HANGUL SYLLABLE SSANGTIKEUT-YO-NIEUN -0x8CC8 0xB685 # HANGUL SYLLABLE SSANGTIKEUT-YO-NIEUNCIEUC -0x8CC9 0xB686 # HANGUL SYLLABLE SSANGTIKEUT-YO-NIEUNHIEUH -0x8CCA 0xB687 # HANGUL SYLLABLE SSANGTIKEUT-YO-TIKEUT -0x8CCB 0xB688 # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEUL -0x8CCC 0xB689 # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULKIYEOK -0x8CCD 0xB68A # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULMIEUM -0x8CCE 0xB68B # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULPIEUP -0x8CCF 0xB68C # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULSIOS -0x8CD0 0xB68D # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULTHIEUTH -0x8CD1 0xB68E # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULPHIEUPH -0x8CD2 0xB68F # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULHIEUH -0x8CD3 0xB690 # HANGUL SYLLABLE SSANGTIKEUT-YO-MIEUM -0x8CD4 0xB691 # HANGUL SYLLABLE SSANGTIKEUT-YO-PIEUP -0x8CD5 0xB692 # HANGUL SYLLABLE SSANGTIKEUT-YO-PIEUPSIOS -0x8CD6 0xB693 # HANGUL SYLLABLE SSANGTIKEUT-YO-SIOS -0x8CD7 0xB694 # HANGUL SYLLABLE SSANGTIKEUT-YO-SSANGSIOS -0x8CD8 0xB695 # HANGUL SYLLABLE SSANGTIKEUT-YO-IEUNG -0x8CD9 0xB696 # HANGUL SYLLABLE SSANGTIKEUT-YO-CIEUC -0x8CDA 0xB697 # HANGUL SYLLABLE SSANGTIKEUT-YO-CHIEUCH -0x8CDB 0xB698 # HANGUL SYLLABLE SSANGTIKEUT-YO-KHIEUKH -0x8CDC 0xB699 # HANGUL SYLLABLE SSANGTIKEUT-YO-THIEUTH -0x8CDD 0xB69A # HANGUL SYLLABLE SSANGTIKEUT-YO-PHIEUPH -0x8CDE 0xB69B # HANGUL SYLLABLE SSANGTIKEUT-YO-HIEUH -0x8CDF 0xB69E # HANGUL SYLLABLE SSANGTIKEUT-U-SSANGKIYEOK -0x8CE0 0xB69F # HANGUL SYLLABLE SSANGTIKEUT-U-KIYEOKSIOS -0x8CE1 0xB6A1 # HANGUL SYLLABLE SSANGTIKEUT-U-NIEUNCIEUC -0x8CE2 0xB6A2 # HANGUL SYLLABLE SSANGTIKEUT-U-NIEUNHIEUH -0x8CE3 0xB6A3 # HANGUL SYLLABLE SSANGTIKEUT-U-TIKEUT -0x8CE4 0xB6A5 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULKIYEOK -0x8CE5 0xB6A6 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULMIEUM -0x8CE6 0xB6A7 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULPIEUP -0x8CE7 0xB6A8 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULSIOS -0x8CE8 0xB6A9 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULTHIEUTH -0x8CE9 0xB6AA # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULPHIEUPH -0x8CEA 0xB6AD # HANGUL SYLLABLE SSANGTIKEUT-U-PIEUP -0x8CEB 0xB6AE # HANGUL SYLLABLE SSANGTIKEUT-U-PIEUPSIOS -0x8CEC 0xB6AF # HANGUL SYLLABLE SSANGTIKEUT-U-SIOS -0x8CED 0xB6B0 # HANGUL SYLLABLE SSANGTIKEUT-U-SSANGSIOS -0x8CEE 0xB6B2 # HANGUL SYLLABLE SSANGTIKEUT-U-CIEUC -0x8CEF 0xB6B3 # HANGUL SYLLABLE SSANGTIKEUT-U-CHIEUCH -0x8CF0 0xB6B4 # HANGUL SYLLABLE SSANGTIKEUT-U-KHIEUKH -0x8CF1 0xB6B5 # HANGUL SYLLABLE SSANGTIKEUT-U-THIEUTH -0x8CF2 0xB6B6 # HANGUL SYLLABLE SSANGTIKEUT-U-PHIEUPH -0x8CF3 0xB6B7 # HANGUL SYLLABLE SSANGTIKEUT-U-HIEUH -0x8CF4 0xB6B8 # HANGUL SYLLABLE SSANGTIKEUT-WEO -0x8CF5 0xB6B9 # HANGUL SYLLABLE SSANGTIKEUT-WEO-KIYEOK -0x8CF6 0xB6BA # HANGUL SYLLABLE SSANGTIKEUT-WEO-SSANGKIYEOK -0x8CF7 0xB6BB # HANGUL SYLLABLE SSANGTIKEUT-WEO-KIYEOKSIOS -0x8CF8 0xB6BC # HANGUL SYLLABLE SSANGTIKEUT-WEO-NIEUN -0x8CF9 0xB6BD # HANGUL SYLLABLE SSANGTIKEUT-WEO-NIEUNCIEUC -0x8CFA 0xB6BE # HANGUL SYLLABLE SSANGTIKEUT-WEO-NIEUNHIEUH -0x8CFB 0xB6BF # HANGUL SYLLABLE SSANGTIKEUT-WEO-TIKEUT -0x8CFC 0xB6C0 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEUL -0x8CFD 0xB6C1 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULKIYEOK -0x8CFE 0xB6C2 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULMIEUM -0x8D41 0xB6C3 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULPIEUP -0x8D42 0xB6C4 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULSIOS -0x8D43 0xB6C5 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULTHIEUTH -0x8D44 0xB6C6 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULPHIEUPH -0x8D45 0xB6C7 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULHIEUH -0x8D46 0xB6C8 # HANGUL SYLLABLE SSANGTIKEUT-WEO-MIEUM -0x8D47 0xB6C9 # HANGUL SYLLABLE SSANGTIKEUT-WEO-PIEUP -0x8D48 0xB6CA # HANGUL SYLLABLE SSANGTIKEUT-WEO-PIEUPSIOS -0x8D49 0xB6CB # HANGUL SYLLABLE SSANGTIKEUT-WEO-SIOS -0x8D4A 0xB6CC # HANGUL SYLLABLE SSANGTIKEUT-WEO-SSANGSIOS -0x8D4B 0xB6CD # HANGUL SYLLABLE SSANGTIKEUT-WEO-IEUNG -0x8D4C 0xB6CE # HANGUL SYLLABLE SSANGTIKEUT-WEO-CIEUC -0x8D4D 0xB6CF # HANGUL SYLLABLE SSANGTIKEUT-WEO-CHIEUCH -0x8D4E 0xB6D0 # HANGUL SYLLABLE SSANGTIKEUT-WEO-KHIEUKH -0x8D4F 0xB6D1 # HANGUL SYLLABLE SSANGTIKEUT-WEO-THIEUTH -0x8D50 0xB6D2 # HANGUL SYLLABLE SSANGTIKEUT-WEO-PHIEUPH -0x8D51 0xB6D3 # HANGUL SYLLABLE SSANGTIKEUT-WEO-HIEUH -0x8D52 0xB6D5 # HANGUL SYLLABLE SSANGTIKEUT-WE-KIYEOK -0x8D53 0xB6D6 # HANGUL SYLLABLE SSANGTIKEUT-WE-SSANGKIYEOK -0x8D54 0xB6D7 # HANGUL SYLLABLE SSANGTIKEUT-WE-KIYEOKSIOS -0x8D55 0xB6D8 # HANGUL SYLLABLE SSANGTIKEUT-WE-NIEUN -0x8D56 0xB6D9 # HANGUL SYLLABLE SSANGTIKEUT-WE-NIEUNCIEUC -0x8D57 0xB6DA # HANGUL SYLLABLE SSANGTIKEUT-WE-NIEUNHIEUH -0x8D58 0xB6DB # HANGUL SYLLABLE SSANGTIKEUT-WE-TIKEUT -0x8D59 0xB6DC # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEUL -0x8D5A 0xB6DD # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULKIYEOK -0x8D61 0xB6DE # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULMIEUM -0x8D62 0xB6DF # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULPIEUP -0x8D63 0xB6E0 # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULSIOS -0x8D64 0xB6E1 # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULTHIEUTH -0x8D65 0xB6E2 # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULPHIEUPH -0x8D66 0xB6E3 # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULHIEUH -0x8D67 0xB6E4 # HANGUL SYLLABLE SSANGTIKEUT-WE-MIEUM -0x8D68 0xB6E5 # HANGUL SYLLABLE SSANGTIKEUT-WE-PIEUP -0x8D69 0xB6E6 # HANGUL SYLLABLE SSANGTIKEUT-WE-PIEUPSIOS -0x8D6A 0xB6E7 # HANGUL SYLLABLE SSANGTIKEUT-WE-SIOS -0x8D6B 0xB6E8 # HANGUL SYLLABLE SSANGTIKEUT-WE-SSANGSIOS -0x8D6C 0xB6E9 # HANGUL SYLLABLE SSANGTIKEUT-WE-IEUNG -0x8D6D 0xB6EA # HANGUL SYLLABLE SSANGTIKEUT-WE-CIEUC -0x8D6E 0xB6EB # HANGUL SYLLABLE SSANGTIKEUT-WE-CHIEUCH -0x8D6F 0xB6EC # HANGUL SYLLABLE SSANGTIKEUT-WE-KHIEUKH -0x8D70 0xB6ED # HANGUL SYLLABLE SSANGTIKEUT-WE-THIEUTH -0x8D71 0xB6EE # HANGUL SYLLABLE SSANGTIKEUT-WE-PHIEUPH -0x8D72 0xB6EF # HANGUL SYLLABLE SSANGTIKEUT-WE-HIEUH -0x8D73 0xB6F1 # HANGUL SYLLABLE SSANGTIKEUT-WI-KIYEOK -0x8D74 0xB6F2 # HANGUL SYLLABLE SSANGTIKEUT-WI-SSANGKIYEOK -0x8D75 0xB6F3 # HANGUL SYLLABLE SSANGTIKEUT-WI-KIYEOKSIOS -0x8D76 0xB6F5 # HANGUL SYLLABLE SSANGTIKEUT-WI-NIEUNCIEUC -0x8D77 0xB6F6 # HANGUL SYLLABLE SSANGTIKEUT-WI-NIEUNHIEUH -0x8D78 0xB6F7 # HANGUL SYLLABLE SSANGTIKEUT-WI-TIKEUT -0x8D79 0xB6F9 # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULKIYEOK -0x8D7A 0xB6FA # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULMIEUM -0x8D81 0xB6FB # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULPIEUP -0x8D82 0xB6FC # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULSIOS -0x8D83 0xB6FD # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULTHIEUTH -0x8D84 0xB6FE # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULPHIEUPH -0x8D85 0xB6FF # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULHIEUH -0x8D86 0xB702 # HANGUL SYLLABLE SSANGTIKEUT-WI-PIEUPSIOS -0x8D87 0xB703 # HANGUL SYLLABLE SSANGTIKEUT-WI-SIOS -0x8D88 0xB704 # HANGUL SYLLABLE SSANGTIKEUT-WI-SSANGSIOS -0x8D89 0xB706 # HANGUL SYLLABLE SSANGTIKEUT-WI-CIEUC -0x8D8A 0xB707 # HANGUL SYLLABLE SSANGTIKEUT-WI-CHIEUCH -0x8D8B 0xB708 # HANGUL SYLLABLE SSANGTIKEUT-WI-KHIEUKH -0x8D8C 0xB709 # HANGUL SYLLABLE SSANGTIKEUT-WI-THIEUTH -0x8D8D 0xB70A # HANGUL SYLLABLE SSANGTIKEUT-WI-PHIEUPH -0x8D8E 0xB70B # HANGUL SYLLABLE SSANGTIKEUT-WI-HIEUH -0x8D8F 0xB70C # HANGUL SYLLABLE SSANGTIKEUT-YU -0x8D90 0xB70D # HANGUL SYLLABLE SSANGTIKEUT-YU-KIYEOK -0x8D91 0xB70E # HANGUL SYLLABLE SSANGTIKEUT-YU-SSANGKIYEOK -0x8D92 0xB70F # HANGUL SYLLABLE SSANGTIKEUT-YU-KIYEOKSIOS -0x8D93 0xB710 # HANGUL SYLLABLE SSANGTIKEUT-YU-NIEUN -0x8D94 0xB711 # HANGUL SYLLABLE SSANGTIKEUT-YU-NIEUNCIEUC -0x8D95 0xB712 # HANGUL SYLLABLE SSANGTIKEUT-YU-NIEUNHIEUH -0x8D96 0xB713 # HANGUL SYLLABLE SSANGTIKEUT-YU-TIKEUT -0x8D97 0xB714 # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEUL -0x8D98 0xB715 # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULKIYEOK -0x8D99 0xB716 # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULMIEUM -0x8D9A 0xB717 # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULPIEUP -0x8D9B 0xB718 # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULSIOS -0x8D9C 0xB719 # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULTHIEUTH -0x8D9D 0xB71A # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULPHIEUPH -0x8D9E 0xB71B # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULHIEUH -0x8D9F 0xB71C # HANGUL SYLLABLE SSANGTIKEUT-YU-MIEUM -0x8DA0 0xB71D # HANGUL SYLLABLE SSANGTIKEUT-YU-PIEUP -0x8DA1 0xB71E # HANGUL SYLLABLE SSANGTIKEUT-YU-PIEUPSIOS -0x8DA2 0xB71F # HANGUL SYLLABLE SSANGTIKEUT-YU-SIOS -0x8DA3 0xB720 # HANGUL SYLLABLE SSANGTIKEUT-YU-SSANGSIOS -0x8DA4 0xB721 # HANGUL SYLLABLE SSANGTIKEUT-YU-IEUNG -0x8DA5 0xB722 # HANGUL SYLLABLE SSANGTIKEUT-YU-CIEUC -0x8DA6 0xB723 # HANGUL SYLLABLE SSANGTIKEUT-YU-CHIEUCH -0x8DA7 0xB724 # HANGUL SYLLABLE SSANGTIKEUT-YU-KHIEUKH -0x8DA8 0xB725 # HANGUL SYLLABLE SSANGTIKEUT-YU-THIEUTH -0x8DA9 0xB726 # HANGUL SYLLABLE SSANGTIKEUT-YU-PHIEUPH -0x8DAA 0xB727 # HANGUL SYLLABLE SSANGTIKEUT-YU-HIEUH -0x8DAB 0xB72A # HANGUL SYLLABLE SSANGTIKEUT-EU-SSANGKIYEOK -0x8DAC 0xB72B # HANGUL SYLLABLE SSANGTIKEUT-EU-KIYEOKSIOS -0x8DAD 0xB72D # HANGUL SYLLABLE SSANGTIKEUT-EU-NIEUNCIEUC -0x8DAE 0xB72E # HANGUL SYLLABLE SSANGTIKEUT-EU-NIEUNHIEUH -0x8DAF 0xB731 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULKIYEOK -0x8DB0 0xB732 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULMIEUM -0x8DB1 0xB733 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULPIEUP -0x8DB2 0xB734 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULSIOS -0x8DB3 0xB735 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULTHIEUTH -0x8DB4 0xB736 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULPHIEUPH -0x8DB5 0xB737 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULHIEUH -0x8DB6 0xB73A # HANGUL SYLLABLE SSANGTIKEUT-EU-PIEUPSIOS -0x8DB7 0xB73C # HANGUL SYLLABLE SSANGTIKEUT-EU-SSANGSIOS -0x8DB8 0xB73D # HANGUL SYLLABLE SSANGTIKEUT-EU-IEUNG -0x8DB9 0xB73E # HANGUL SYLLABLE SSANGTIKEUT-EU-CIEUC -0x8DBA 0xB73F # HANGUL SYLLABLE SSANGTIKEUT-EU-CHIEUCH -0x8DBB 0xB740 # HANGUL SYLLABLE SSANGTIKEUT-EU-KHIEUKH -0x8DBC 0xB741 # HANGUL SYLLABLE SSANGTIKEUT-EU-THIEUTH -0x8DBD 0xB742 # HANGUL SYLLABLE SSANGTIKEUT-EU-PHIEUPH -0x8DBE 0xB743 # HANGUL SYLLABLE SSANGTIKEUT-EU-HIEUH -0x8DBF 0xB745 # HANGUL SYLLABLE SSANGTIKEUT-YI-KIYEOK -0x8DC0 0xB746 # HANGUL SYLLABLE SSANGTIKEUT-YI-SSANGKIYEOK -0x8DC1 0xB747 # HANGUL SYLLABLE SSANGTIKEUT-YI-KIYEOKSIOS -0x8DC2 0xB749 # HANGUL SYLLABLE SSANGTIKEUT-YI-NIEUNCIEUC -0x8DC3 0xB74A # HANGUL SYLLABLE SSANGTIKEUT-YI-NIEUNHIEUH -0x8DC4 0xB74B # HANGUL SYLLABLE SSANGTIKEUT-YI-TIKEUT -0x8DC5 0xB74D # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULKIYEOK -0x8DC6 0xB74E # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULMIEUM -0x8DC7 0xB74F # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULPIEUP -0x8DC8 0xB750 # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULSIOS -0x8DC9 0xB751 # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULTHIEUTH -0x8DCA 0xB752 # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULPHIEUPH -0x8DCB 0xB753 # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULHIEUH -0x8DCC 0xB756 # HANGUL SYLLABLE SSANGTIKEUT-YI-PIEUPSIOS -0x8DCD 0xB757 # HANGUL SYLLABLE SSANGTIKEUT-YI-SIOS -0x8DCE 0xB758 # HANGUL SYLLABLE SSANGTIKEUT-YI-SSANGSIOS -0x8DCF 0xB759 # HANGUL SYLLABLE SSANGTIKEUT-YI-IEUNG -0x8DD0 0xB75A # HANGUL SYLLABLE SSANGTIKEUT-YI-CIEUC -0x8DD1 0xB75B # HANGUL SYLLABLE SSANGTIKEUT-YI-CHIEUCH -0x8DD2 0xB75C # HANGUL SYLLABLE SSANGTIKEUT-YI-KHIEUKH -0x8DD3 0xB75D # HANGUL SYLLABLE SSANGTIKEUT-YI-THIEUTH -0x8DD4 0xB75E # HANGUL SYLLABLE SSANGTIKEUT-YI-PHIEUPH -0x8DD5 0xB75F # HANGUL SYLLABLE SSANGTIKEUT-YI-HIEUH -0x8DD6 0xB761 # HANGUL SYLLABLE SSANGTIKEUT-I-KIYEOK -0x8DD7 0xB762 # HANGUL SYLLABLE SSANGTIKEUT-I-SSANGKIYEOK -0x8DD8 0xB763 # HANGUL SYLLABLE SSANGTIKEUT-I-KIYEOKSIOS -0x8DD9 0xB765 # HANGUL SYLLABLE SSANGTIKEUT-I-NIEUNCIEUC -0x8DDA 0xB766 # HANGUL SYLLABLE SSANGTIKEUT-I-NIEUNHIEUH -0x8DDB 0xB767 # HANGUL SYLLABLE SSANGTIKEUT-I-TIKEUT -0x8DDC 0xB769 # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULKIYEOK -0x8DDD 0xB76A # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULMIEUM -0x8DDE 0xB76B # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULPIEUP -0x8DDF 0xB76C # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULSIOS -0x8DE0 0xB76D # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULTHIEUTH -0x8DE1 0xB76E # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULPHIEUPH -0x8DE2 0xB76F # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULHIEUH -0x8DE3 0xB772 # HANGUL SYLLABLE SSANGTIKEUT-I-PIEUPSIOS -0x8DE4 0xB774 # HANGUL SYLLABLE SSANGTIKEUT-I-SSANGSIOS -0x8DE5 0xB776 # HANGUL SYLLABLE SSANGTIKEUT-I-CIEUC -0x8DE6 0xB777 # HANGUL SYLLABLE SSANGTIKEUT-I-CHIEUCH -0x8DE7 0xB778 # HANGUL SYLLABLE SSANGTIKEUT-I-KHIEUKH -0x8DE8 0xB779 # HANGUL SYLLABLE SSANGTIKEUT-I-THIEUTH -0x8DE9 0xB77A # HANGUL SYLLABLE SSANGTIKEUT-I-PHIEUPH -0x8DEA 0xB77B # HANGUL SYLLABLE SSANGTIKEUT-I-HIEUH -0x8DEB 0xB77E # HANGUL SYLLABLE RIEUL-A-SSANGKIYEOK -0x8DEC 0xB77F # HANGUL SYLLABLE RIEUL-A-KIYEOKSIOS -0x8DED 0xB781 # HANGUL SYLLABLE RIEUL-A-NIEUNCIEUC -0x8DEE 0xB782 # HANGUL SYLLABLE RIEUL-A-NIEUNHIEUH -0x8DEF 0xB783 # HANGUL SYLLABLE RIEUL-A-TIKEUT -0x8DF0 0xB785 # HANGUL SYLLABLE RIEUL-A-RIEULKIYEOK -0x8DF1 0xB786 # HANGUL SYLLABLE RIEUL-A-RIEULMIEUM -0x8DF2 0xB787 # HANGUL SYLLABLE RIEUL-A-RIEULPIEUP -0x8DF3 0xB788 # HANGUL SYLLABLE RIEUL-A-RIEULSIOS -0x8DF4 0xB789 # HANGUL SYLLABLE RIEUL-A-RIEULTHIEUTH -0x8DF5 0xB78A # HANGUL SYLLABLE RIEUL-A-RIEULPHIEUPH -0x8DF6 0xB78B # HANGUL SYLLABLE RIEUL-A-RIEULHIEUH -0x8DF7 0xB78E # HANGUL SYLLABLE RIEUL-A-PIEUPSIOS -0x8DF8 0xB793 # HANGUL SYLLABLE RIEUL-A-CHIEUCH -0x8DF9 0xB794 # HANGUL SYLLABLE RIEUL-A-KHIEUKH -0x8DFA 0xB795 # HANGUL SYLLABLE RIEUL-A-THIEUTH -0x8DFB 0xB79A # HANGUL SYLLABLE RIEUL-AE-SSANGKIYEOK -0x8DFC 0xB79B # HANGUL SYLLABLE RIEUL-AE-KIYEOKSIOS -0x8DFD 0xB79D # HANGUL SYLLABLE RIEUL-AE-NIEUNCIEUC -0x8DFE 0xB79E # HANGUL SYLLABLE RIEUL-AE-NIEUNHIEUH -0x8E41 0xB79F # HANGUL SYLLABLE RIEUL-AE-TIKEUT -0x8E42 0xB7A1 # HANGUL SYLLABLE RIEUL-AE-RIEULKIYEOK -0x8E43 0xB7A2 # HANGUL SYLLABLE RIEUL-AE-RIEULMIEUM -0x8E44 0xB7A3 # HANGUL SYLLABLE RIEUL-AE-RIEULPIEUP -0x8E45 0xB7A4 # HANGUL SYLLABLE RIEUL-AE-RIEULSIOS -0x8E46 0xB7A5 # HANGUL SYLLABLE RIEUL-AE-RIEULTHIEUTH -0x8E47 0xB7A6 # HANGUL SYLLABLE RIEUL-AE-RIEULPHIEUPH -0x8E48 0xB7A7 # HANGUL SYLLABLE RIEUL-AE-RIEULHIEUH -0x8E49 0xB7AA # HANGUL SYLLABLE RIEUL-AE-PIEUPSIOS -0x8E4A 0xB7AE # HANGUL SYLLABLE RIEUL-AE-CIEUC -0x8E4B 0xB7AF # HANGUL SYLLABLE RIEUL-AE-CHIEUCH -0x8E4C 0xB7B0 # HANGUL SYLLABLE RIEUL-AE-KHIEUKH -0x8E4D 0xB7B1 # HANGUL SYLLABLE RIEUL-AE-THIEUTH -0x8E4E 0xB7B2 # HANGUL SYLLABLE RIEUL-AE-PHIEUPH -0x8E4F 0xB7B3 # HANGUL SYLLABLE RIEUL-AE-HIEUH -0x8E50 0xB7B6 # HANGUL SYLLABLE RIEUL-YA-SSANGKIYEOK -0x8E51 0xB7B7 # HANGUL SYLLABLE RIEUL-YA-KIYEOKSIOS -0x8E52 0xB7B9 # HANGUL SYLLABLE RIEUL-YA-NIEUNCIEUC -0x8E53 0xB7BA # HANGUL SYLLABLE RIEUL-YA-NIEUNHIEUH -0x8E54 0xB7BB # HANGUL SYLLABLE RIEUL-YA-TIKEUT -0x8E55 0xB7BC # HANGUL SYLLABLE RIEUL-YA-RIEUL -0x8E56 0xB7BD # HANGUL SYLLABLE RIEUL-YA-RIEULKIYEOK -0x8E57 0xB7BE # HANGUL SYLLABLE RIEUL-YA-RIEULMIEUM -0x8E58 0xB7BF # HANGUL SYLLABLE RIEUL-YA-RIEULPIEUP -0x8E59 0xB7C0 # HANGUL SYLLABLE RIEUL-YA-RIEULSIOS -0x8E5A 0xB7C1 # HANGUL SYLLABLE RIEUL-YA-RIEULTHIEUTH -0x8E61 0xB7C2 # HANGUL SYLLABLE RIEUL-YA-RIEULPHIEUPH -0x8E62 0xB7C3 # HANGUL SYLLABLE RIEUL-YA-RIEULHIEUH -0x8E63 0xB7C4 # HANGUL SYLLABLE RIEUL-YA-MIEUM -0x8E64 0xB7C5 # HANGUL SYLLABLE RIEUL-YA-PIEUP -0x8E65 0xB7C6 # HANGUL SYLLABLE RIEUL-YA-PIEUPSIOS -0x8E66 0xB7C8 # HANGUL SYLLABLE RIEUL-YA-SSANGSIOS -0x8E67 0xB7CA # HANGUL SYLLABLE RIEUL-YA-CIEUC -0x8E68 0xB7CB # HANGUL SYLLABLE RIEUL-YA-CHIEUCH -0x8E69 0xB7CC # HANGUL SYLLABLE RIEUL-YA-KHIEUKH -0x8E6A 0xB7CD # HANGUL SYLLABLE RIEUL-YA-THIEUTH -0x8E6B 0xB7CE # HANGUL SYLLABLE RIEUL-YA-PHIEUPH -0x8E6C 0xB7CF # HANGUL SYLLABLE RIEUL-YA-HIEUH -0x8E6D 0xB7D0 # HANGUL SYLLABLE RIEUL-YAE -0x8E6E 0xB7D1 # HANGUL SYLLABLE RIEUL-YAE-KIYEOK -0x8E6F 0xB7D2 # HANGUL SYLLABLE RIEUL-YAE-SSANGKIYEOK -0x8E70 0xB7D3 # HANGUL SYLLABLE RIEUL-YAE-KIYEOKSIOS -0x8E71 0xB7D4 # HANGUL SYLLABLE RIEUL-YAE-NIEUN -0x8E72 0xB7D5 # HANGUL SYLLABLE RIEUL-YAE-NIEUNCIEUC -0x8E73 0xB7D6 # HANGUL SYLLABLE RIEUL-YAE-NIEUNHIEUH -0x8E74 0xB7D7 # HANGUL SYLLABLE RIEUL-YAE-TIKEUT -0x8E75 0xB7D8 # HANGUL SYLLABLE RIEUL-YAE-RIEUL -0x8E76 0xB7D9 # HANGUL SYLLABLE RIEUL-YAE-RIEULKIYEOK -0x8E77 0xB7DA # HANGUL SYLLABLE RIEUL-YAE-RIEULMIEUM -0x8E78 0xB7DB # HANGUL SYLLABLE RIEUL-YAE-RIEULPIEUP -0x8E79 0xB7DC # HANGUL SYLLABLE RIEUL-YAE-RIEULSIOS -0x8E7A 0xB7DD # HANGUL SYLLABLE RIEUL-YAE-RIEULTHIEUTH -0x8E81 0xB7DE # HANGUL SYLLABLE RIEUL-YAE-RIEULPHIEUPH -0x8E82 0xB7DF # HANGUL SYLLABLE RIEUL-YAE-RIEULHIEUH -0x8E83 0xB7E0 # HANGUL SYLLABLE RIEUL-YAE-MIEUM -0x8E84 0xB7E1 # HANGUL SYLLABLE RIEUL-YAE-PIEUP -0x8E85 0xB7E2 # HANGUL SYLLABLE RIEUL-YAE-PIEUPSIOS -0x8E86 0xB7E3 # HANGUL SYLLABLE RIEUL-YAE-SIOS -0x8E87 0xB7E4 # HANGUL SYLLABLE RIEUL-YAE-SSANGSIOS -0x8E88 0xB7E5 # HANGUL SYLLABLE RIEUL-YAE-IEUNG -0x8E89 0xB7E6 # HANGUL SYLLABLE RIEUL-YAE-CIEUC -0x8E8A 0xB7E7 # HANGUL SYLLABLE RIEUL-YAE-CHIEUCH -0x8E8B 0xB7E8 # HANGUL SYLLABLE RIEUL-YAE-KHIEUKH -0x8E8C 0xB7E9 # HANGUL SYLLABLE RIEUL-YAE-THIEUTH -0x8E8D 0xB7EA # HANGUL SYLLABLE RIEUL-YAE-PHIEUPH -0x8E8E 0xB7EB # HANGUL SYLLABLE RIEUL-YAE-HIEUH -0x8E8F 0xB7EE # HANGUL SYLLABLE RIEUL-EO-SSANGKIYEOK -0x8E90 0xB7EF # HANGUL SYLLABLE RIEUL-EO-KIYEOKSIOS -0x8E91 0xB7F1 # HANGUL SYLLABLE RIEUL-EO-NIEUNCIEUC -0x8E92 0xB7F2 # HANGUL SYLLABLE RIEUL-EO-NIEUNHIEUH -0x8E93 0xB7F3 # HANGUL SYLLABLE RIEUL-EO-TIKEUT -0x8E94 0xB7F5 # HANGUL SYLLABLE RIEUL-EO-RIEULKIYEOK -0x8E95 0xB7F6 # HANGUL SYLLABLE RIEUL-EO-RIEULMIEUM -0x8E96 0xB7F7 # HANGUL SYLLABLE RIEUL-EO-RIEULPIEUP -0x8E97 0xB7F8 # HANGUL SYLLABLE RIEUL-EO-RIEULSIOS -0x8E98 0xB7F9 # HANGUL SYLLABLE RIEUL-EO-RIEULTHIEUTH -0x8E99 0xB7FA # HANGUL SYLLABLE RIEUL-EO-RIEULPHIEUPH -0x8E9A 0xB7FB # HANGUL SYLLABLE RIEUL-EO-RIEULHIEUH -0x8E9B 0xB7FE # HANGUL SYLLABLE RIEUL-EO-PIEUPSIOS -0x8E9C 0xB802 # HANGUL SYLLABLE RIEUL-EO-CIEUC -0x8E9D 0xB803 # HANGUL SYLLABLE RIEUL-EO-CHIEUCH -0x8E9E 0xB804 # HANGUL SYLLABLE RIEUL-EO-KHIEUKH -0x8E9F 0xB805 # HANGUL SYLLABLE RIEUL-EO-THIEUTH -0x8EA0 0xB806 # HANGUL SYLLABLE RIEUL-EO-PHIEUPH -0x8EA1 0xB80A # HANGUL SYLLABLE RIEUL-E-SSANGKIYEOK -0x8EA2 0xB80B # HANGUL SYLLABLE RIEUL-E-KIYEOKSIOS -0x8EA3 0xB80D # HANGUL SYLLABLE RIEUL-E-NIEUNCIEUC -0x8EA4 0xB80E # HANGUL SYLLABLE RIEUL-E-NIEUNHIEUH -0x8EA5 0xB80F # HANGUL SYLLABLE RIEUL-E-TIKEUT -0x8EA6 0xB811 # HANGUL SYLLABLE RIEUL-E-RIEULKIYEOK -0x8EA7 0xB812 # HANGUL SYLLABLE RIEUL-E-RIEULMIEUM -0x8EA8 0xB813 # HANGUL SYLLABLE RIEUL-E-RIEULPIEUP -0x8EA9 0xB814 # HANGUL SYLLABLE RIEUL-E-RIEULSIOS -0x8EAA 0xB815 # HANGUL SYLLABLE RIEUL-E-RIEULTHIEUTH -0x8EAB 0xB816 # HANGUL SYLLABLE RIEUL-E-RIEULPHIEUPH -0x8EAC 0xB817 # HANGUL SYLLABLE RIEUL-E-RIEULHIEUH -0x8EAD 0xB81A # HANGUL SYLLABLE RIEUL-E-PIEUPSIOS -0x8EAE 0xB81C # HANGUL SYLLABLE RIEUL-E-SSANGSIOS -0x8EAF 0xB81E # HANGUL SYLLABLE RIEUL-E-CIEUC -0x8EB0 0xB81F # HANGUL SYLLABLE RIEUL-E-CHIEUCH -0x8EB1 0xB820 # HANGUL SYLLABLE RIEUL-E-KHIEUKH -0x8EB2 0xB821 # HANGUL SYLLABLE RIEUL-E-THIEUTH -0x8EB3 0xB822 # HANGUL SYLLABLE RIEUL-E-PHIEUPH -0x8EB4 0xB823 # HANGUL SYLLABLE RIEUL-E-HIEUH -0x8EB5 0xB826 # HANGUL SYLLABLE RIEUL-YEO-SSANGKIYEOK -0x8EB6 0xB827 # HANGUL SYLLABLE RIEUL-YEO-KIYEOKSIOS -0x8EB7 0xB829 # HANGUL SYLLABLE RIEUL-YEO-NIEUNCIEUC -0x8EB8 0xB82A # HANGUL SYLLABLE RIEUL-YEO-NIEUNHIEUH -0x8EB9 0xB82B # HANGUL SYLLABLE RIEUL-YEO-TIKEUT -0x8EBA 0xB82D # HANGUL SYLLABLE RIEUL-YEO-RIEULKIYEOK -0x8EBB 0xB82E # HANGUL SYLLABLE RIEUL-YEO-RIEULMIEUM -0x8EBC 0xB82F # HANGUL SYLLABLE RIEUL-YEO-RIEULPIEUP -0x8EBD 0xB830 # HANGUL SYLLABLE RIEUL-YEO-RIEULSIOS -0x8EBE 0xB831 # HANGUL SYLLABLE RIEUL-YEO-RIEULTHIEUTH -0x8EBF 0xB832 # HANGUL SYLLABLE RIEUL-YEO-RIEULPHIEUPH -0x8EC0 0xB833 # HANGUL SYLLABLE RIEUL-YEO-RIEULHIEUH -0x8EC1 0xB836 # HANGUL SYLLABLE RIEUL-YEO-PIEUPSIOS -0x8EC2 0xB83A # HANGUL SYLLABLE RIEUL-YEO-CIEUC -0x8EC3 0xB83B # HANGUL SYLLABLE RIEUL-YEO-CHIEUCH -0x8EC4 0xB83C # HANGUL SYLLABLE RIEUL-YEO-KHIEUKH -0x8EC5 0xB83D # HANGUL SYLLABLE RIEUL-YEO-THIEUTH -0x8EC6 0xB83E # HANGUL SYLLABLE RIEUL-YEO-PHIEUPH -0x8EC7 0xB83F # HANGUL SYLLABLE RIEUL-YEO-HIEUH -0x8EC8 0xB841 # HANGUL SYLLABLE RIEUL-YE-KIYEOK -0x8EC9 0xB842 # HANGUL SYLLABLE RIEUL-YE-SSANGKIYEOK -0x8ECA 0xB843 # HANGUL SYLLABLE RIEUL-YE-KIYEOKSIOS -0x8ECB 0xB845 # HANGUL SYLLABLE RIEUL-YE-NIEUNCIEUC -0x8ECC 0xB846 # HANGUL SYLLABLE RIEUL-YE-NIEUNHIEUH -0x8ECD 0xB847 # HANGUL SYLLABLE RIEUL-YE-TIKEUT -0x8ECE 0xB848 # HANGUL SYLLABLE RIEUL-YE-RIEUL -0x8ECF 0xB849 # HANGUL SYLLABLE RIEUL-YE-RIEULKIYEOK -0x8ED0 0xB84A # HANGUL SYLLABLE RIEUL-YE-RIEULMIEUM -0x8ED1 0xB84B # HANGUL SYLLABLE RIEUL-YE-RIEULPIEUP -0x8ED2 0xB84C # HANGUL SYLLABLE RIEUL-YE-RIEULSIOS -0x8ED3 0xB84D # HANGUL SYLLABLE RIEUL-YE-RIEULTHIEUTH -0x8ED4 0xB84E # HANGUL SYLLABLE RIEUL-YE-RIEULPHIEUPH -0x8ED5 0xB84F # HANGUL SYLLABLE RIEUL-YE-RIEULHIEUH -0x8ED6 0xB850 # HANGUL SYLLABLE RIEUL-YE-MIEUM -0x8ED7 0xB852 # HANGUL SYLLABLE RIEUL-YE-PIEUPSIOS -0x8ED8 0xB854 # HANGUL SYLLABLE RIEUL-YE-SSANGSIOS -0x8ED9 0xB855 # HANGUL SYLLABLE RIEUL-YE-IEUNG -0x8EDA 0xB856 # HANGUL SYLLABLE RIEUL-YE-CIEUC -0x8EDB 0xB857 # HANGUL SYLLABLE RIEUL-YE-CHIEUCH -0x8EDC 0xB858 # HANGUL SYLLABLE RIEUL-YE-KHIEUKH -0x8EDD 0xB859 # HANGUL SYLLABLE RIEUL-YE-THIEUTH -0x8EDE 0xB85A # HANGUL SYLLABLE RIEUL-YE-PHIEUPH -0x8EDF 0xB85B # HANGUL SYLLABLE RIEUL-YE-HIEUH -0x8EE0 0xB85E # HANGUL SYLLABLE RIEUL-O-SSANGKIYEOK -0x8EE1 0xB85F # HANGUL SYLLABLE RIEUL-O-KIYEOKSIOS -0x8EE2 0xB861 # HANGUL SYLLABLE RIEUL-O-NIEUNCIEUC -0x8EE3 0xB862 # HANGUL SYLLABLE RIEUL-O-NIEUNHIEUH -0x8EE4 0xB863 # HANGUL SYLLABLE RIEUL-O-TIKEUT -0x8EE5 0xB865 # HANGUL SYLLABLE RIEUL-O-RIEULKIYEOK -0x8EE6 0xB866 # HANGUL SYLLABLE RIEUL-O-RIEULMIEUM -0x8EE7 0xB867 # HANGUL SYLLABLE RIEUL-O-RIEULPIEUP -0x8EE8 0xB868 # HANGUL SYLLABLE RIEUL-O-RIEULSIOS -0x8EE9 0xB869 # HANGUL SYLLABLE RIEUL-O-RIEULTHIEUTH -0x8EEA 0xB86A # HANGUL SYLLABLE RIEUL-O-RIEULPHIEUPH -0x8EEB 0xB86B # HANGUL SYLLABLE RIEUL-O-RIEULHIEUH -0x8EEC 0xB86E # HANGUL SYLLABLE RIEUL-O-PIEUPSIOS -0x8EED 0xB870 # HANGUL SYLLABLE RIEUL-O-SSANGSIOS -0x8EEE 0xB872 # HANGUL SYLLABLE RIEUL-O-CIEUC -0x8EEF 0xB873 # HANGUL SYLLABLE RIEUL-O-CHIEUCH -0x8EF0 0xB874 # HANGUL SYLLABLE RIEUL-O-KHIEUKH -0x8EF1 0xB875 # HANGUL SYLLABLE RIEUL-O-THIEUTH -0x8EF2 0xB876 # HANGUL SYLLABLE RIEUL-O-PHIEUPH -0x8EF3 0xB877 # HANGUL SYLLABLE RIEUL-O-HIEUH -0x8EF4 0xB879 # HANGUL SYLLABLE RIEUL-WA-KIYEOK -0x8EF5 0xB87A # HANGUL SYLLABLE RIEUL-WA-SSANGKIYEOK -0x8EF6 0xB87B # HANGUL SYLLABLE RIEUL-WA-KIYEOKSIOS -0x8EF7 0xB87D # HANGUL SYLLABLE RIEUL-WA-NIEUNCIEUC -0x8EF8 0xB87E # HANGUL SYLLABLE RIEUL-WA-NIEUNHIEUH -0x8EF9 0xB87F # HANGUL SYLLABLE RIEUL-WA-TIKEUT -0x8EFA 0xB880 # HANGUL SYLLABLE RIEUL-WA-RIEUL -0x8EFB 0xB881 # HANGUL SYLLABLE RIEUL-WA-RIEULKIYEOK -0x8EFC 0xB882 # HANGUL SYLLABLE RIEUL-WA-RIEULMIEUM -0x8EFD 0xB883 # HANGUL SYLLABLE RIEUL-WA-RIEULPIEUP -0x8EFE 0xB884 # HANGUL SYLLABLE RIEUL-WA-RIEULSIOS -0x8F41 0xB885 # HANGUL SYLLABLE RIEUL-WA-RIEULTHIEUTH -0x8F42 0xB886 # HANGUL SYLLABLE RIEUL-WA-RIEULPHIEUPH -0x8F43 0xB887 # HANGUL SYLLABLE RIEUL-WA-RIEULHIEUH -0x8F44 0xB888 # HANGUL SYLLABLE RIEUL-WA-MIEUM -0x8F45 0xB889 # HANGUL SYLLABLE RIEUL-WA-PIEUP -0x8F46 0xB88A # HANGUL SYLLABLE RIEUL-WA-PIEUPSIOS -0x8F47 0xB88B # HANGUL SYLLABLE RIEUL-WA-SIOS -0x8F48 0xB88C # HANGUL SYLLABLE RIEUL-WA-SSANGSIOS -0x8F49 0xB88E # HANGUL SYLLABLE RIEUL-WA-CIEUC -0x8F4A 0xB88F # HANGUL SYLLABLE RIEUL-WA-CHIEUCH -0x8F4B 0xB890 # HANGUL SYLLABLE RIEUL-WA-KHIEUKH -0x8F4C 0xB891 # HANGUL SYLLABLE RIEUL-WA-THIEUTH -0x8F4D 0xB892 # HANGUL SYLLABLE RIEUL-WA-PHIEUPH -0x8F4E 0xB893 # HANGUL SYLLABLE RIEUL-WA-HIEUH -0x8F4F 0xB894 # HANGUL SYLLABLE RIEUL-WAE -0x8F50 0xB895 # HANGUL SYLLABLE RIEUL-WAE-KIYEOK -0x8F51 0xB896 # HANGUL SYLLABLE RIEUL-WAE-SSANGKIYEOK -0x8F52 0xB897 # HANGUL SYLLABLE RIEUL-WAE-KIYEOKSIOS -0x8F53 0xB898 # HANGUL SYLLABLE RIEUL-WAE-NIEUN -0x8F54 0xB899 # HANGUL SYLLABLE RIEUL-WAE-NIEUNCIEUC -0x8F55 0xB89A # HANGUL SYLLABLE RIEUL-WAE-NIEUNHIEUH -0x8F56 0xB89B # HANGUL SYLLABLE RIEUL-WAE-TIKEUT -0x8F57 0xB89C # HANGUL SYLLABLE RIEUL-WAE-RIEUL -0x8F58 0xB89D # HANGUL SYLLABLE RIEUL-WAE-RIEULKIYEOK -0x8F59 0xB89E # HANGUL SYLLABLE RIEUL-WAE-RIEULMIEUM -0x8F5A 0xB89F # HANGUL SYLLABLE RIEUL-WAE-RIEULPIEUP -0x8F61 0xB8A0 # HANGUL SYLLABLE RIEUL-WAE-RIEULSIOS -0x8F62 0xB8A1 # HANGUL SYLLABLE RIEUL-WAE-RIEULTHIEUTH -0x8F63 0xB8A2 # HANGUL SYLLABLE RIEUL-WAE-RIEULPHIEUPH -0x8F64 0xB8A3 # HANGUL SYLLABLE RIEUL-WAE-RIEULHIEUH -0x8F65 0xB8A4 # HANGUL SYLLABLE RIEUL-WAE-MIEUM -0x8F66 0xB8A5 # HANGUL SYLLABLE RIEUL-WAE-PIEUP -0x8F67 0xB8A6 # HANGUL SYLLABLE RIEUL-WAE-PIEUPSIOS -0x8F68 0xB8A7 # HANGUL SYLLABLE RIEUL-WAE-SIOS -0x8F69 0xB8A9 # HANGUL SYLLABLE RIEUL-WAE-IEUNG -0x8F6A 0xB8AA # HANGUL SYLLABLE RIEUL-WAE-CIEUC -0x8F6B 0xB8AB # HANGUL SYLLABLE RIEUL-WAE-CHIEUCH -0x8F6C 0xB8AC # HANGUL SYLLABLE RIEUL-WAE-KHIEUKH -0x8F6D 0xB8AD # HANGUL SYLLABLE RIEUL-WAE-THIEUTH -0x8F6E 0xB8AE # HANGUL SYLLABLE RIEUL-WAE-PHIEUPH -0x8F6F 0xB8AF # HANGUL SYLLABLE RIEUL-WAE-HIEUH -0x8F70 0xB8B1 # HANGUL SYLLABLE RIEUL-OE-KIYEOK -0x8F71 0xB8B2 # HANGUL SYLLABLE RIEUL-OE-SSANGKIYEOK -0x8F72 0xB8B3 # HANGUL SYLLABLE RIEUL-OE-KIYEOKSIOS -0x8F73 0xB8B5 # HANGUL SYLLABLE RIEUL-OE-NIEUNCIEUC -0x8F74 0xB8B6 # HANGUL SYLLABLE RIEUL-OE-NIEUNHIEUH -0x8F75 0xB8B7 # HANGUL SYLLABLE RIEUL-OE-TIKEUT -0x8F76 0xB8B9 # HANGUL SYLLABLE RIEUL-OE-RIEULKIYEOK -0x8F77 0xB8BA # HANGUL SYLLABLE RIEUL-OE-RIEULMIEUM -0x8F78 0xB8BB # HANGUL SYLLABLE RIEUL-OE-RIEULPIEUP -0x8F79 0xB8BC # HANGUL SYLLABLE RIEUL-OE-RIEULSIOS -0x8F7A 0xB8BD # HANGUL SYLLABLE RIEUL-OE-RIEULTHIEUTH -0x8F81 0xB8BE # HANGUL SYLLABLE RIEUL-OE-RIEULPHIEUPH -0x8F82 0xB8BF # HANGUL SYLLABLE RIEUL-OE-RIEULHIEUH -0x8F83 0xB8C2 # HANGUL SYLLABLE RIEUL-OE-PIEUPSIOS -0x8F84 0xB8C4 # HANGUL SYLLABLE RIEUL-OE-SSANGSIOS -0x8F85 0xB8C6 # HANGUL SYLLABLE RIEUL-OE-CIEUC -0x8F86 0xB8C7 # HANGUL SYLLABLE RIEUL-OE-CHIEUCH -0x8F87 0xB8C8 # HANGUL SYLLABLE RIEUL-OE-KHIEUKH -0x8F88 0xB8C9 # HANGUL SYLLABLE RIEUL-OE-THIEUTH -0x8F89 0xB8CA # HANGUL SYLLABLE RIEUL-OE-PHIEUPH -0x8F8A 0xB8CB # HANGUL SYLLABLE RIEUL-OE-HIEUH -0x8F8B 0xB8CD # HANGUL SYLLABLE RIEUL-YO-KIYEOK -0x8F8C 0xB8CE # HANGUL SYLLABLE RIEUL-YO-SSANGKIYEOK -0x8F8D 0xB8CF # HANGUL SYLLABLE RIEUL-YO-KIYEOKSIOS -0x8F8E 0xB8D1 # HANGUL SYLLABLE RIEUL-YO-NIEUNCIEUC -0x8F8F 0xB8D2 # HANGUL SYLLABLE RIEUL-YO-NIEUNHIEUH -0x8F90 0xB8D3 # HANGUL SYLLABLE RIEUL-YO-TIKEUT -0x8F91 0xB8D5 # HANGUL SYLLABLE RIEUL-YO-RIEULKIYEOK -0x8F92 0xB8D6 # HANGUL SYLLABLE RIEUL-YO-RIEULMIEUM -0x8F93 0xB8D7 # HANGUL SYLLABLE RIEUL-YO-RIEULPIEUP -0x8F94 0xB8D8 # HANGUL SYLLABLE RIEUL-YO-RIEULSIOS -0x8F95 0xB8D9 # HANGUL SYLLABLE RIEUL-YO-RIEULTHIEUTH -0x8F96 0xB8DA # HANGUL SYLLABLE RIEUL-YO-RIEULPHIEUPH -0x8F97 0xB8DB # HANGUL SYLLABLE RIEUL-YO-RIEULHIEUH -0x8F98 0xB8DC # HANGUL SYLLABLE RIEUL-YO-MIEUM -0x8F99 0xB8DE # HANGUL SYLLABLE RIEUL-YO-PIEUPSIOS -0x8F9A 0xB8E0 # HANGUL SYLLABLE RIEUL-YO-SSANGSIOS -0x8F9B 0xB8E2 # HANGUL SYLLABLE RIEUL-YO-CIEUC -0x8F9C 0xB8E3 # HANGUL SYLLABLE RIEUL-YO-CHIEUCH -0x8F9D 0xB8E4 # HANGUL SYLLABLE RIEUL-YO-KHIEUKH -0x8F9E 0xB8E5 # HANGUL SYLLABLE RIEUL-YO-THIEUTH -0x8F9F 0xB8E6 # HANGUL SYLLABLE RIEUL-YO-PHIEUPH -0x8FA0 0xB8E7 # HANGUL SYLLABLE RIEUL-YO-HIEUH -0x8FA1 0xB8EA # HANGUL SYLLABLE RIEUL-U-SSANGKIYEOK -0x8FA2 0xB8EB # HANGUL SYLLABLE RIEUL-U-KIYEOKSIOS -0x8FA3 0xB8ED # HANGUL SYLLABLE RIEUL-U-NIEUNCIEUC -0x8FA4 0xB8EE # HANGUL SYLLABLE RIEUL-U-NIEUNHIEUH -0x8FA5 0xB8EF # HANGUL SYLLABLE RIEUL-U-TIKEUT -0x8FA6 0xB8F1 # HANGUL SYLLABLE RIEUL-U-RIEULKIYEOK -0x8FA7 0xB8F2 # HANGUL SYLLABLE RIEUL-U-RIEULMIEUM -0x8FA8 0xB8F3 # HANGUL SYLLABLE RIEUL-U-RIEULPIEUP -0x8FA9 0xB8F4 # HANGUL SYLLABLE RIEUL-U-RIEULSIOS -0x8FAA 0xB8F5 # HANGUL SYLLABLE RIEUL-U-RIEULTHIEUTH -0x8FAB 0xB8F6 # HANGUL SYLLABLE RIEUL-U-RIEULPHIEUPH -0x8FAC 0xB8F7 # HANGUL SYLLABLE RIEUL-U-RIEULHIEUH -0x8FAD 0xB8FA # HANGUL SYLLABLE RIEUL-U-PIEUPSIOS -0x8FAE 0xB8FC # HANGUL SYLLABLE RIEUL-U-SSANGSIOS -0x8FAF 0xB8FE # HANGUL SYLLABLE RIEUL-U-CIEUC -0x8FB0 0xB8FF # HANGUL SYLLABLE RIEUL-U-CHIEUCH -0x8FB1 0xB900 # HANGUL SYLLABLE RIEUL-U-KHIEUKH -0x8FB2 0xB901 # HANGUL SYLLABLE RIEUL-U-THIEUTH -0x8FB3 0xB902 # HANGUL SYLLABLE RIEUL-U-PHIEUPH -0x8FB4 0xB903 # HANGUL SYLLABLE RIEUL-U-HIEUH -0x8FB5 0xB905 # HANGUL SYLLABLE RIEUL-WEO-KIYEOK -0x8FB6 0xB906 # HANGUL SYLLABLE RIEUL-WEO-SSANGKIYEOK -0x8FB7 0xB907 # HANGUL SYLLABLE RIEUL-WEO-KIYEOKSIOS -0x8FB8 0xB908 # HANGUL SYLLABLE RIEUL-WEO-NIEUN -0x8FB9 0xB909 # HANGUL SYLLABLE RIEUL-WEO-NIEUNCIEUC -0x8FBA 0xB90A # HANGUL SYLLABLE RIEUL-WEO-NIEUNHIEUH -0x8FBB 0xB90B # HANGUL SYLLABLE RIEUL-WEO-TIKEUT -0x8FBC 0xB90C # HANGUL SYLLABLE RIEUL-WEO-RIEUL -0x8FBD 0xB90D # HANGUL SYLLABLE RIEUL-WEO-RIEULKIYEOK -0x8FBE 0xB90E # HANGUL SYLLABLE RIEUL-WEO-RIEULMIEUM -0x8FBF 0xB90F # HANGUL SYLLABLE RIEUL-WEO-RIEULPIEUP -0x8FC0 0xB910 # HANGUL SYLLABLE RIEUL-WEO-RIEULSIOS -0x8FC1 0xB911 # HANGUL SYLLABLE RIEUL-WEO-RIEULTHIEUTH -0x8FC2 0xB912 # HANGUL SYLLABLE RIEUL-WEO-RIEULPHIEUPH -0x8FC3 0xB913 # HANGUL SYLLABLE RIEUL-WEO-RIEULHIEUH -0x8FC4 0xB914 # HANGUL SYLLABLE RIEUL-WEO-MIEUM -0x8FC5 0xB915 # HANGUL SYLLABLE RIEUL-WEO-PIEUP -0x8FC6 0xB916 # HANGUL SYLLABLE RIEUL-WEO-PIEUPSIOS -0x8FC7 0xB917 # HANGUL SYLLABLE RIEUL-WEO-SIOS -0x8FC8 0xB919 # HANGUL SYLLABLE RIEUL-WEO-IEUNG -0x8FC9 0xB91A # HANGUL SYLLABLE RIEUL-WEO-CIEUC -0x8FCA 0xB91B # HANGUL SYLLABLE RIEUL-WEO-CHIEUCH -0x8FCB 0xB91C # HANGUL SYLLABLE RIEUL-WEO-KHIEUKH -0x8FCC 0xB91D # HANGUL SYLLABLE RIEUL-WEO-THIEUTH -0x8FCD 0xB91E # HANGUL SYLLABLE RIEUL-WEO-PHIEUPH -0x8FCE 0xB91F # HANGUL SYLLABLE RIEUL-WEO-HIEUH -0x8FCF 0xB921 # HANGUL SYLLABLE RIEUL-WE-KIYEOK -0x8FD0 0xB922 # HANGUL SYLLABLE RIEUL-WE-SSANGKIYEOK -0x8FD1 0xB923 # HANGUL SYLLABLE RIEUL-WE-KIYEOKSIOS -0x8FD2 0xB924 # HANGUL SYLLABLE RIEUL-WE-NIEUN -0x8FD3 0xB925 # HANGUL SYLLABLE RIEUL-WE-NIEUNCIEUC -0x8FD4 0xB926 # HANGUL SYLLABLE RIEUL-WE-NIEUNHIEUH -0x8FD5 0xB927 # HANGUL SYLLABLE RIEUL-WE-TIKEUT -0x8FD6 0xB928 # HANGUL SYLLABLE RIEUL-WE-RIEUL -0x8FD7 0xB929 # HANGUL SYLLABLE RIEUL-WE-RIEULKIYEOK -0x8FD8 0xB92A # HANGUL SYLLABLE RIEUL-WE-RIEULMIEUM -0x8FD9 0xB92B # HANGUL SYLLABLE RIEUL-WE-RIEULPIEUP -0x8FDA 0xB92C # HANGUL SYLLABLE RIEUL-WE-RIEULSIOS -0x8FDB 0xB92D # HANGUL SYLLABLE RIEUL-WE-RIEULTHIEUTH -0x8FDC 0xB92E # HANGUL SYLLABLE RIEUL-WE-RIEULPHIEUPH -0x8FDD 0xB92F # HANGUL SYLLABLE RIEUL-WE-RIEULHIEUH -0x8FDE 0xB930 # HANGUL SYLLABLE RIEUL-WE-MIEUM -0x8FDF 0xB931 # HANGUL SYLLABLE RIEUL-WE-PIEUP -0x8FE0 0xB932 # HANGUL SYLLABLE RIEUL-WE-PIEUPSIOS -0x8FE1 0xB933 # HANGUL SYLLABLE RIEUL-WE-SIOS -0x8FE2 0xB934 # HANGUL SYLLABLE RIEUL-WE-SSANGSIOS -0x8FE3 0xB935 # HANGUL SYLLABLE RIEUL-WE-IEUNG -0x8FE4 0xB936 # HANGUL SYLLABLE RIEUL-WE-CIEUC -0x8FE5 0xB937 # HANGUL SYLLABLE RIEUL-WE-CHIEUCH -0x8FE6 0xB938 # HANGUL SYLLABLE RIEUL-WE-KHIEUKH -0x8FE7 0xB939 # HANGUL SYLLABLE RIEUL-WE-THIEUTH -0x8FE8 0xB93A # HANGUL SYLLABLE RIEUL-WE-PHIEUPH -0x8FE9 0xB93B # HANGUL SYLLABLE RIEUL-WE-HIEUH -0x8FEA 0xB93E # HANGUL SYLLABLE RIEUL-WI-SSANGKIYEOK -0x8FEB 0xB93F # HANGUL SYLLABLE RIEUL-WI-KIYEOKSIOS -0x8FEC 0xB941 # HANGUL SYLLABLE RIEUL-WI-NIEUNCIEUC -0x8FED 0xB942 # HANGUL SYLLABLE RIEUL-WI-NIEUNHIEUH -0x8FEE 0xB943 # HANGUL SYLLABLE RIEUL-WI-TIKEUT -0x8FEF 0xB945 # HANGUL SYLLABLE RIEUL-WI-RIEULKIYEOK -0x8FF0 0xB946 # HANGUL SYLLABLE RIEUL-WI-RIEULMIEUM -0x8FF1 0xB947 # HANGUL SYLLABLE RIEUL-WI-RIEULPIEUP -0x8FF2 0xB948 # HANGUL SYLLABLE RIEUL-WI-RIEULSIOS -0x8FF3 0xB949 # HANGUL SYLLABLE RIEUL-WI-RIEULTHIEUTH -0x8FF4 0xB94A # HANGUL SYLLABLE RIEUL-WI-RIEULPHIEUPH -0x8FF5 0xB94B # HANGUL SYLLABLE RIEUL-WI-RIEULHIEUH -0x8FF6 0xB94D # HANGUL SYLLABLE RIEUL-WI-PIEUP -0x8FF7 0xB94E # HANGUL SYLLABLE RIEUL-WI-PIEUPSIOS -0x8FF8 0xB950 # HANGUL SYLLABLE RIEUL-WI-SSANGSIOS -0x8FF9 0xB952 # HANGUL SYLLABLE RIEUL-WI-CIEUC -0x8FFA 0xB953 # HANGUL SYLLABLE RIEUL-WI-CHIEUCH -0x8FFB 0xB954 # HANGUL SYLLABLE RIEUL-WI-KHIEUKH -0x8FFC 0xB955 # HANGUL SYLLABLE RIEUL-WI-THIEUTH -0x8FFD 0xB956 # HANGUL SYLLABLE RIEUL-WI-PHIEUPH -0x8FFE 0xB957 # HANGUL SYLLABLE RIEUL-WI-HIEUH -0x9041 0xB95A # HANGUL SYLLABLE RIEUL-YU-SSANGKIYEOK -0x9042 0xB95B # HANGUL SYLLABLE RIEUL-YU-KIYEOKSIOS -0x9043 0xB95D # HANGUL SYLLABLE RIEUL-YU-NIEUNCIEUC -0x9044 0xB95E # HANGUL SYLLABLE RIEUL-YU-NIEUNHIEUH -0x9045 0xB95F # HANGUL SYLLABLE RIEUL-YU-TIKEUT -0x9046 0xB961 # HANGUL SYLLABLE RIEUL-YU-RIEULKIYEOK -0x9047 0xB962 # HANGUL SYLLABLE RIEUL-YU-RIEULMIEUM -0x9048 0xB963 # HANGUL SYLLABLE RIEUL-YU-RIEULPIEUP -0x9049 0xB964 # HANGUL SYLLABLE RIEUL-YU-RIEULSIOS -0x904A 0xB965 # HANGUL SYLLABLE RIEUL-YU-RIEULTHIEUTH -0x904B 0xB966 # HANGUL SYLLABLE RIEUL-YU-RIEULPHIEUPH -0x904C 0xB967 # HANGUL SYLLABLE RIEUL-YU-RIEULHIEUH -0x904D 0xB96A # HANGUL SYLLABLE RIEUL-YU-PIEUPSIOS -0x904E 0xB96C # HANGUL SYLLABLE RIEUL-YU-SSANGSIOS -0x904F 0xB96E # HANGUL SYLLABLE RIEUL-YU-CIEUC -0x9050 0xB96F # HANGUL SYLLABLE RIEUL-YU-CHIEUCH -0x9051 0xB970 # HANGUL SYLLABLE RIEUL-YU-KHIEUKH -0x9052 0xB971 # HANGUL SYLLABLE RIEUL-YU-THIEUTH -0x9053 0xB972 # HANGUL SYLLABLE RIEUL-YU-PHIEUPH -0x9054 0xB973 # HANGUL SYLLABLE RIEUL-YU-HIEUH -0x9055 0xB976 # HANGUL SYLLABLE RIEUL-EU-SSANGKIYEOK -0x9056 0xB977 # HANGUL SYLLABLE RIEUL-EU-KIYEOKSIOS -0x9057 0xB979 # HANGUL SYLLABLE RIEUL-EU-NIEUNCIEUC -0x9058 0xB97A # HANGUL SYLLABLE RIEUL-EU-NIEUNHIEUH -0x9059 0xB97B # HANGUL SYLLABLE RIEUL-EU-TIKEUT -0x905A 0xB97D # HANGUL SYLLABLE RIEUL-EU-RIEULKIYEOK -0x9061 0xB97E # HANGUL SYLLABLE RIEUL-EU-RIEULMIEUM -0x9062 0xB97F # HANGUL SYLLABLE RIEUL-EU-RIEULPIEUP -0x9063 0xB980 # HANGUL SYLLABLE RIEUL-EU-RIEULSIOS -0x9064 0xB981 # HANGUL SYLLABLE RIEUL-EU-RIEULTHIEUTH -0x9065 0xB982 # HANGUL SYLLABLE RIEUL-EU-RIEULPHIEUPH -0x9066 0xB983 # HANGUL SYLLABLE RIEUL-EU-RIEULHIEUH -0x9067 0xB986 # HANGUL SYLLABLE RIEUL-EU-PIEUPSIOS -0x9068 0xB988 # HANGUL SYLLABLE RIEUL-EU-SSANGSIOS -0x9069 0xB98B # HANGUL SYLLABLE RIEUL-EU-CHIEUCH -0x906A 0xB98C # HANGUL SYLLABLE RIEUL-EU-KHIEUKH -0x906B 0xB98F # HANGUL SYLLABLE RIEUL-EU-HIEUH -0x906C 0xB990 # HANGUL SYLLABLE RIEUL-YI -0x906D 0xB991 # HANGUL SYLLABLE RIEUL-YI-KIYEOK -0x906E 0xB992 # HANGUL SYLLABLE RIEUL-YI-SSANGKIYEOK -0x906F 0xB993 # HANGUL SYLLABLE RIEUL-YI-KIYEOKSIOS -0x9070 0xB994 # HANGUL SYLLABLE RIEUL-YI-NIEUN -0x9071 0xB995 # HANGUL SYLLABLE RIEUL-YI-NIEUNCIEUC -0x9072 0xB996 # HANGUL SYLLABLE RIEUL-YI-NIEUNHIEUH -0x9073 0xB997 # HANGUL SYLLABLE RIEUL-YI-TIKEUT -0x9074 0xB998 # HANGUL SYLLABLE RIEUL-YI-RIEUL -0x9075 0xB999 # HANGUL SYLLABLE RIEUL-YI-RIEULKIYEOK -0x9076 0xB99A # HANGUL SYLLABLE RIEUL-YI-RIEULMIEUM -0x9077 0xB99B # HANGUL SYLLABLE RIEUL-YI-RIEULPIEUP -0x9078 0xB99C # HANGUL SYLLABLE RIEUL-YI-RIEULSIOS -0x9079 0xB99D # HANGUL SYLLABLE RIEUL-YI-RIEULTHIEUTH -0x907A 0xB99E # HANGUL SYLLABLE RIEUL-YI-RIEULPHIEUPH -0x9081 0xB99F # HANGUL SYLLABLE RIEUL-YI-RIEULHIEUH -0x9082 0xB9A0 # HANGUL SYLLABLE RIEUL-YI-MIEUM -0x9083 0xB9A1 # HANGUL SYLLABLE RIEUL-YI-PIEUP -0x9084 0xB9A2 # HANGUL SYLLABLE RIEUL-YI-PIEUPSIOS -0x9085 0xB9A3 # HANGUL SYLLABLE RIEUL-YI-SIOS -0x9086 0xB9A4 # HANGUL SYLLABLE RIEUL-YI-SSANGSIOS -0x9087 0xB9A5 # HANGUL SYLLABLE RIEUL-YI-IEUNG -0x9088 0xB9A6 # HANGUL SYLLABLE RIEUL-YI-CIEUC -0x9089 0xB9A7 # HANGUL SYLLABLE RIEUL-YI-CHIEUCH -0x908A 0xB9A8 # HANGUL SYLLABLE RIEUL-YI-KHIEUKH -0x908B 0xB9A9 # HANGUL SYLLABLE RIEUL-YI-THIEUTH -0x908C 0xB9AA # HANGUL SYLLABLE RIEUL-YI-PHIEUPH -0x908D 0xB9AB # HANGUL SYLLABLE RIEUL-YI-HIEUH -0x908E 0xB9AE # HANGUL SYLLABLE RIEUL-I-SSANGKIYEOK -0x908F 0xB9AF # HANGUL SYLLABLE RIEUL-I-KIYEOKSIOS -0x9090 0xB9B1 # HANGUL SYLLABLE RIEUL-I-NIEUNCIEUC -0x9091 0xB9B2 # HANGUL SYLLABLE RIEUL-I-NIEUNHIEUH -0x9092 0xB9B3 # HANGUL SYLLABLE RIEUL-I-TIKEUT -0x9093 0xB9B5 # HANGUL SYLLABLE RIEUL-I-RIEULKIYEOK -0x9094 0xB9B6 # HANGUL SYLLABLE RIEUL-I-RIEULMIEUM -0x9095 0xB9B7 # HANGUL SYLLABLE RIEUL-I-RIEULPIEUP -0x9096 0xB9B8 # HANGUL SYLLABLE RIEUL-I-RIEULSIOS -0x9097 0xB9B9 # HANGUL SYLLABLE RIEUL-I-RIEULTHIEUTH -0x9098 0xB9BA # HANGUL SYLLABLE RIEUL-I-RIEULPHIEUPH -0x9099 0xB9BB # HANGUL SYLLABLE RIEUL-I-RIEULHIEUH -0x909A 0xB9BE # HANGUL SYLLABLE RIEUL-I-PIEUPSIOS -0x909B 0xB9C0 # HANGUL SYLLABLE RIEUL-I-SSANGSIOS -0x909C 0xB9C2 # HANGUL SYLLABLE RIEUL-I-CIEUC -0x909D 0xB9C3 # HANGUL SYLLABLE RIEUL-I-CHIEUCH -0x909E 0xB9C4 # HANGUL SYLLABLE RIEUL-I-KHIEUKH -0x909F 0xB9C5 # HANGUL SYLLABLE RIEUL-I-THIEUTH -0x90A0 0xB9C6 # HANGUL SYLLABLE RIEUL-I-PHIEUPH -0x90A1 0xB9C7 # HANGUL SYLLABLE RIEUL-I-HIEUH -0x90A2 0xB9CA # HANGUL SYLLABLE MIEUM-A-SSANGKIYEOK -0x90A3 0xB9CB # HANGUL SYLLABLE MIEUM-A-KIYEOKSIOS -0x90A4 0xB9CD # HANGUL SYLLABLE MIEUM-A-NIEUNCIEUC -0x90A5 0xB9D3 # HANGUL SYLLABLE MIEUM-A-RIEULPIEUP -0x90A6 0xB9D4 # HANGUL SYLLABLE MIEUM-A-RIEULSIOS -0x90A7 0xB9D5 # HANGUL SYLLABLE MIEUM-A-RIEULTHIEUTH -0x90A8 0xB9D6 # HANGUL SYLLABLE MIEUM-A-RIEULPHIEUPH -0x90A9 0xB9D7 # HANGUL SYLLABLE MIEUM-A-RIEULHIEUH -0x90AA 0xB9DA # HANGUL SYLLABLE MIEUM-A-PIEUPSIOS -0x90AB 0xB9DC # HANGUL SYLLABLE MIEUM-A-SSANGSIOS -0x90AC 0xB9DF # HANGUL SYLLABLE MIEUM-A-CHIEUCH -0x90AD 0xB9E0 # HANGUL SYLLABLE MIEUM-A-KHIEUKH -0x90AE 0xB9E2 # HANGUL SYLLABLE MIEUM-A-PHIEUPH -0x90AF 0xB9E6 # HANGUL SYLLABLE MIEUM-AE-SSANGKIYEOK -0x90B0 0xB9E7 # HANGUL SYLLABLE MIEUM-AE-KIYEOKSIOS -0x90B1 0xB9E9 # HANGUL SYLLABLE MIEUM-AE-NIEUNCIEUC -0x90B2 0xB9EA # HANGUL SYLLABLE MIEUM-AE-NIEUNHIEUH -0x90B3 0xB9EB # HANGUL SYLLABLE MIEUM-AE-TIKEUT -0x90B4 0xB9ED # HANGUL SYLLABLE MIEUM-AE-RIEULKIYEOK -0x90B5 0xB9EE # HANGUL SYLLABLE MIEUM-AE-RIEULMIEUM -0x90B6 0xB9EF # HANGUL SYLLABLE MIEUM-AE-RIEULPIEUP -0x90B7 0xB9F0 # HANGUL SYLLABLE MIEUM-AE-RIEULSIOS -0x90B8 0xB9F1 # HANGUL SYLLABLE MIEUM-AE-RIEULTHIEUTH -0x90B9 0xB9F2 # HANGUL SYLLABLE MIEUM-AE-RIEULPHIEUPH -0x90BA 0xB9F3 # HANGUL SYLLABLE MIEUM-AE-RIEULHIEUH -0x90BB 0xB9F6 # HANGUL SYLLABLE MIEUM-AE-PIEUPSIOS -0x90BC 0xB9FB # HANGUL SYLLABLE MIEUM-AE-CHIEUCH -0x90BD 0xB9FC # HANGUL SYLLABLE MIEUM-AE-KHIEUKH -0x90BE 0xB9FD # HANGUL SYLLABLE MIEUM-AE-THIEUTH -0x90BF 0xB9FE # HANGUL SYLLABLE MIEUM-AE-PHIEUPH -0x90C0 0xB9FF # HANGUL SYLLABLE MIEUM-AE-HIEUH -0x90C1 0xBA02 # HANGUL SYLLABLE MIEUM-YA-SSANGKIYEOK -0x90C2 0xBA03 # HANGUL SYLLABLE MIEUM-YA-KIYEOKSIOS -0x90C3 0xBA04 # HANGUL SYLLABLE MIEUM-YA-NIEUN -0x90C4 0xBA05 # HANGUL SYLLABLE MIEUM-YA-NIEUNCIEUC -0x90C5 0xBA06 # HANGUL SYLLABLE MIEUM-YA-NIEUNHIEUH -0x90C6 0xBA07 # HANGUL SYLLABLE MIEUM-YA-TIKEUT -0x90C7 0xBA09 # HANGUL SYLLABLE MIEUM-YA-RIEULKIYEOK -0x90C8 0xBA0A # HANGUL SYLLABLE MIEUM-YA-RIEULMIEUM -0x90C9 0xBA0B # HANGUL SYLLABLE MIEUM-YA-RIEULPIEUP -0x90CA 0xBA0C # HANGUL SYLLABLE MIEUM-YA-RIEULSIOS -0x90CB 0xBA0D # HANGUL SYLLABLE MIEUM-YA-RIEULTHIEUTH -0x90CC 0xBA0E # HANGUL SYLLABLE MIEUM-YA-RIEULPHIEUPH -0x90CD 0xBA0F # HANGUL SYLLABLE MIEUM-YA-RIEULHIEUH -0x90CE 0xBA10 # HANGUL SYLLABLE MIEUM-YA-MIEUM -0x90CF 0xBA11 # HANGUL SYLLABLE MIEUM-YA-PIEUP -0x90D0 0xBA12 # HANGUL SYLLABLE MIEUM-YA-PIEUPSIOS -0x90D1 0xBA13 # HANGUL SYLLABLE MIEUM-YA-SIOS -0x90D2 0xBA14 # HANGUL SYLLABLE MIEUM-YA-SSANGSIOS -0x90D3 0xBA16 # HANGUL SYLLABLE MIEUM-YA-CIEUC -0x90D4 0xBA17 # HANGUL SYLLABLE MIEUM-YA-CHIEUCH -0x90D5 0xBA18 # HANGUL SYLLABLE MIEUM-YA-KHIEUKH -0x90D6 0xBA19 # HANGUL SYLLABLE MIEUM-YA-THIEUTH -0x90D7 0xBA1A # HANGUL SYLLABLE MIEUM-YA-PHIEUPH -0x90D8 0xBA1B # HANGUL SYLLABLE MIEUM-YA-HIEUH -0x90D9 0xBA1C # HANGUL SYLLABLE MIEUM-YAE -0x90DA 0xBA1D # HANGUL SYLLABLE MIEUM-YAE-KIYEOK -0x90DB 0xBA1E # HANGUL SYLLABLE MIEUM-YAE-SSANGKIYEOK -0x90DC 0xBA1F # HANGUL SYLLABLE MIEUM-YAE-KIYEOKSIOS -0x90DD 0xBA20 # HANGUL SYLLABLE MIEUM-YAE-NIEUN -0x90DE 0xBA21 # HANGUL SYLLABLE MIEUM-YAE-NIEUNCIEUC -0x90DF 0xBA22 # HANGUL SYLLABLE MIEUM-YAE-NIEUNHIEUH -0x90E0 0xBA23 # HANGUL SYLLABLE MIEUM-YAE-TIKEUT -0x90E1 0xBA24 # HANGUL SYLLABLE MIEUM-YAE-RIEUL -0x90E2 0xBA25 # HANGUL SYLLABLE MIEUM-YAE-RIEULKIYEOK -0x90E3 0xBA26 # HANGUL SYLLABLE MIEUM-YAE-RIEULMIEUM -0x90E4 0xBA27 # HANGUL SYLLABLE MIEUM-YAE-RIEULPIEUP -0x90E5 0xBA28 # HANGUL SYLLABLE MIEUM-YAE-RIEULSIOS -0x90E6 0xBA29 # HANGUL SYLLABLE MIEUM-YAE-RIEULTHIEUTH -0x90E7 0xBA2A # HANGUL SYLLABLE MIEUM-YAE-RIEULPHIEUPH -0x90E8 0xBA2B # HANGUL SYLLABLE MIEUM-YAE-RIEULHIEUH -0x90E9 0xBA2C # HANGUL SYLLABLE MIEUM-YAE-MIEUM -0x90EA 0xBA2D # HANGUL SYLLABLE MIEUM-YAE-PIEUP -0x90EB 0xBA2E # HANGUL SYLLABLE MIEUM-YAE-PIEUPSIOS -0x90EC 0xBA2F # HANGUL SYLLABLE MIEUM-YAE-SIOS -0x90ED 0xBA30 # HANGUL SYLLABLE MIEUM-YAE-SSANGSIOS -0x90EE 0xBA31 # HANGUL SYLLABLE MIEUM-YAE-IEUNG -0x90EF 0xBA32 # HANGUL SYLLABLE MIEUM-YAE-CIEUC -0x90F0 0xBA33 # HANGUL SYLLABLE MIEUM-YAE-CHIEUCH -0x90F1 0xBA34 # HANGUL SYLLABLE MIEUM-YAE-KHIEUKH -0x90F2 0xBA35 # HANGUL SYLLABLE MIEUM-YAE-THIEUTH -0x90F3 0xBA36 # HANGUL SYLLABLE MIEUM-YAE-PHIEUPH -0x90F4 0xBA37 # HANGUL SYLLABLE MIEUM-YAE-HIEUH -0x90F5 0xBA3A # HANGUL SYLLABLE MIEUM-EO-SSANGKIYEOK -0x90F6 0xBA3B # HANGUL SYLLABLE MIEUM-EO-KIYEOKSIOS -0x90F7 0xBA3D # HANGUL SYLLABLE MIEUM-EO-NIEUNCIEUC -0x90F8 0xBA3E # HANGUL SYLLABLE MIEUM-EO-NIEUNHIEUH -0x90F9 0xBA3F # HANGUL SYLLABLE MIEUM-EO-TIKEUT -0x90FA 0xBA41 # HANGUL SYLLABLE MIEUM-EO-RIEULKIYEOK -0x90FB 0xBA43 # HANGUL SYLLABLE MIEUM-EO-RIEULPIEUP -0x90FC 0xBA44 # HANGUL SYLLABLE MIEUM-EO-RIEULSIOS -0x90FD 0xBA45 # HANGUL SYLLABLE MIEUM-EO-RIEULTHIEUTH -0x90FE 0xBA46 # HANGUL SYLLABLE MIEUM-EO-RIEULPHIEUPH -0x9141 0xBA47 # HANGUL SYLLABLE MIEUM-EO-RIEULHIEUH -0x9142 0xBA4A # HANGUL SYLLABLE MIEUM-EO-PIEUPSIOS -0x9143 0xBA4C # HANGUL SYLLABLE MIEUM-EO-SSANGSIOS -0x9144 0xBA4F # HANGUL SYLLABLE MIEUM-EO-CHIEUCH -0x9145 0xBA50 # HANGUL SYLLABLE MIEUM-EO-KHIEUKH -0x9146 0xBA51 # HANGUL SYLLABLE MIEUM-EO-THIEUTH -0x9147 0xBA52 # HANGUL SYLLABLE MIEUM-EO-PHIEUPH -0x9148 0xBA56 # HANGUL SYLLABLE MIEUM-E-SSANGKIYEOK -0x9149 0xBA57 # HANGUL SYLLABLE MIEUM-E-KIYEOKSIOS -0x914A 0xBA59 # HANGUL SYLLABLE MIEUM-E-NIEUNCIEUC -0x914B 0xBA5A # HANGUL SYLLABLE MIEUM-E-NIEUNHIEUH -0x914C 0xBA5B # HANGUL SYLLABLE MIEUM-E-TIKEUT -0x914D 0xBA5D # HANGUL SYLLABLE MIEUM-E-RIEULKIYEOK -0x914E 0xBA5E # HANGUL SYLLABLE MIEUM-E-RIEULMIEUM -0x914F 0xBA5F # HANGUL SYLLABLE MIEUM-E-RIEULPIEUP -0x9150 0xBA60 # HANGUL SYLLABLE MIEUM-E-RIEULSIOS -0x9151 0xBA61 # HANGUL SYLLABLE MIEUM-E-RIEULTHIEUTH -0x9152 0xBA62 # HANGUL SYLLABLE MIEUM-E-RIEULPHIEUPH -0x9153 0xBA63 # HANGUL SYLLABLE MIEUM-E-RIEULHIEUH -0x9154 0xBA66 # HANGUL SYLLABLE MIEUM-E-PIEUPSIOS -0x9155 0xBA6A # HANGUL SYLLABLE MIEUM-E-CIEUC -0x9156 0xBA6B # HANGUL SYLLABLE MIEUM-E-CHIEUCH -0x9157 0xBA6C # HANGUL SYLLABLE MIEUM-E-KHIEUKH -0x9158 0xBA6D # HANGUL SYLLABLE MIEUM-E-THIEUTH -0x9159 0xBA6E # HANGUL SYLLABLE MIEUM-E-PHIEUPH -0x915A 0xBA6F # HANGUL SYLLABLE MIEUM-E-HIEUH -0x9161 0xBA72 # HANGUL SYLLABLE MIEUM-YEO-SSANGKIYEOK -0x9162 0xBA73 # HANGUL SYLLABLE MIEUM-YEO-KIYEOKSIOS -0x9163 0xBA75 # HANGUL SYLLABLE MIEUM-YEO-NIEUNCIEUC -0x9164 0xBA76 # HANGUL SYLLABLE MIEUM-YEO-NIEUNHIEUH -0x9165 0xBA77 # HANGUL SYLLABLE MIEUM-YEO-TIKEUT -0x9166 0xBA79 # HANGUL SYLLABLE MIEUM-YEO-RIEULKIYEOK -0x9167 0xBA7A # HANGUL SYLLABLE MIEUM-YEO-RIEULMIEUM -0x9168 0xBA7B # HANGUL SYLLABLE MIEUM-YEO-RIEULPIEUP -0x9169 0xBA7C # HANGUL SYLLABLE MIEUM-YEO-RIEULSIOS -0x916A 0xBA7D # HANGUL SYLLABLE MIEUM-YEO-RIEULTHIEUTH -0x916B 0xBA7E # HANGUL SYLLABLE MIEUM-YEO-RIEULPHIEUPH -0x916C 0xBA7F # HANGUL SYLLABLE MIEUM-YEO-RIEULHIEUH -0x916D 0xBA80 # HANGUL SYLLABLE MIEUM-YEO-MIEUM -0x916E 0xBA81 # HANGUL SYLLABLE MIEUM-YEO-PIEUP -0x916F 0xBA82 # HANGUL SYLLABLE MIEUM-YEO-PIEUPSIOS -0x9170 0xBA86 # HANGUL SYLLABLE MIEUM-YEO-CIEUC -0x9171 0xBA88 # HANGUL SYLLABLE MIEUM-YEO-KHIEUKH -0x9172 0xBA89 # HANGUL SYLLABLE MIEUM-YEO-THIEUTH -0x9173 0xBA8A # HANGUL SYLLABLE MIEUM-YEO-PHIEUPH -0x9174 0xBA8B # HANGUL SYLLABLE MIEUM-YEO-HIEUH -0x9175 0xBA8D # HANGUL SYLLABLE MIEUM-YE-KIYEOK -0x9176 0xBA8E # HANGUL SYLLABLE MIEUM-YE-SSANGKIYEOK -0x9177 0xBA8F # HANGUL SYLLABLE MIEUM-YE-KIYEOKSIOS -0x9178 0xBA90 # HANGUL SYLLABLE MIEUM-YE-NIEUN -0x9179 0xBA91 # HANGUL SYLLABLE MIEUM-YE-NIEUNCIEUC -0x917A 0xBA92 # HANGUL SYLLABLE MIEUM-YE-NIEUNHIEUH -0x9181 0xBA93 # HANGUL SYLLABLE MIEUM-YE-TIKEUT -0x9182 0xBA94 # HANGUL SYLLABLE MIEUM-YE-RIEUL -0x9183 0xBA95 # HANGUL SYLLABLE MIEUM-YE-RIEULKIYEOK -0x9184 0xBA96 # HANGUL SYLLABLE MIEUM-YE-RIEULMIEUM -0x9185 0xBA97 # HANGUL SYLLABLE MIEUM-YE-RIEULPIEUP -0x9186 0xBA98 # HANGUL SYLLABLE MIEUM-YE-RIEULSIOS -0x9187 0xBA99 # HANGUL SYLLABLE MIEUM-YE-RIEULTHIEUTH -0x9188 0xBA9A # HANGUL SYLLABLE MIEUM-YE-RIEULPHIEUPH -0x9189 0xBA9B # HANGUL SYLLABLE MIEUM-YE-RIEULHIEUH -0x918A 0xBA9C # HANGUL SYLLABLE MIEUM-YE-MIEUM -0x918B 0xBA9D # HANGUL SYLLABLE MIEUM-YE-PIEUP -0x918C 0xBA9E # HANGUL SYLLABLE MIEUM-YE-PIEUPSIOS -0x918D 0xBA9F # HANGUL SYLLABLE MIEUM-YE-SIOS -0x918E 0xBAA0 # HANGUL SYLLABLE MIEUM-YE-SSANGSIOS -0x918F 0xBAA1 # HANGUL SYLLABLE MIEUM-YE-IEUNG -0x9190 0xBAA2 # HANGUL SYLLABLE MIEUM-YE-CIEUC -0x9191 0xBAA3 # HANGUL SYLLABLE MIEUM-YE-CHIEUCH -0x9192 0xBAA4 # HANGUL SYLLABLE MIEUM-YE-KHIEUKH -0x9193 0xBAA5 # HANGUL SYLLABLE MIEUM-YE-THIEUTH -0x9194 0xBAA6 # HANGUL SYLLABLE MIEUM-YE-PHIEUPH -0x9195 0xBAA7 # HANGUL SYLLABLE MIEUM-YE-HIEUH -0x9196 0xBAAA # HANGUL SYLLABLE MIEUM-O-SSANGKIYEOK -0x9197 0xBAAD # HANGUL SYLLABLE MIEUM-O-NIEUNCIEUC -0x9198 0xBAAE # HANGUL SYLLABLE MIEUM-O-NIEUNHIEUH -0x9199 0xBAAF # HANGUL SYLLABLE MIEUM-O-TIKEUT -0x919A 0xBAB1 # HANGUL SYLLABLE MIEUM-O-RIEULKIYEOK -0x919B 0xBAB3 # HANGUL SYLLABLE MIEUM-O-RIEULPIEUP -0x919C 0xBAB4 # HANGUL SYLLABLE MIEUM-O-RIEULSIOS -0x919D 0xBAB5 # HANGUL SYLLABLE MIEUM-O-RIEULTHIEUTH -0x919E 0xBAB6 # HANGUL SYLLABLE MIEUM-O-RIEULPHIEUPH -0x919F 0xBAB7 # HANGUL SYLLABLE MIEUM-O-RIEULHIEUH -0x91A0 0xBABA # HANGUL SYLLABLE MIEUM-O-PIEUPSIOS -0x91A1 0xBABC # HANGUL SYLLABLE MIEUM-O-SSANGSIOS -0x91A2 0xBABE # HANGUL SYLLABLE MIEUM-O-CIEUC -0x91A3 0xBABF # HANGUL SYLLABLE MIEUM-O-CHIEUCH -0x91A4 0xBAC0 # HANGUL SYLLABLE MIEUM-O-KHIEUKH -0x91A5 0xBAC1 # HANGUL SYLLABLE MIEUM-O-THIEUTH -0x91A6 0xBAC2 # HANGUL SYLLABLE MIEUM-O-PHIEUPH -0x91A7 0xBAC3 # HANGUL SYLLABLE MIEUM-O-HIEUH -0x91A8 0xBAC5 # HANGUL SYLLABLE MIEUM-WA-KIYEOK -0x91A9 0xBAC6 # HANGUL SYLLABLE MIEUM-WA-SSANGKIYEOK -0x91AA 0xBAC7 # HANGUL SYLLABLE MIEUM-WA-KIYEOKSIOS -0x91AB 0xBAC9 # HANGUL SYLLABLE MIEUM-WA-NIEUNCIEUC -0x91AC 0xBACA # HANGUL SYLLABLE MIEUM-WA-NIEUNHIEUH -0x91AD 0xBACB # HANGUL SYLLABLE MIEUM-WA-TIKEUT -0x91AE 0xBACC # HANGUL SYLLABLE MIEUM-WA-RIEUL -0x91AF 0xBACD # HANGUL SYLLABLE MIEUM-WA-RIEULKIYEOK -0x91B0 0xBACE # HANGUL SYLLABLE MIEUM-WA-RIEULMIEUM -0x91B1 0xBACF # HANGUL SYLLABLE MIEUM-WA-RIEULPIEUP -0x91B2 0xBAD0 # HANGUL SYLLABLE MIEUM-WA-RIEULSIOS -0x91B3 0xBAD1 # HANGUL SYLLABLE MIEUM-WA-RIEULTHIEUTH -0x91B4 0xBAD2 # HANGUL SYLLABLE MIEUM-WA-RIEULPHIEUPH -0x91B5 0xBAD3 # HANGUL SYLLABLE MIEUM-WA-RIEULHIEUH -0x91B6 0xBAD4 # HANGUL SYLLABLE MIEUM-WA-MIEUM -0x91B7 0xBAD5 # HANGUL SYLLABLE MIEUM-WA-PIEUP -0x91B8 0xBAD6 # HANGUL SYLLABLE MIEUM-WA-PIEUPSIOS -0x91B9 0xBAD7 # HANGUL SYLLABLE MIEUM-WA-SIOS -0x91BA 0xBADA # HANGUL SYLLABLE MIEUM-WA-CIEUC -0x91BB 0xBADB # HANGUL SYLLABLE MIEUM-WA-CHIEUCH -0x91BC 0xBADC # HANGUL SYLLABLE MIEUM-WA-KHIEUKH -0x91BD 0xBADD # HANGUL SYLLABLE MIEUM-WA-THIEUTH -0x91BE 0xBADE # HANGUL SYLLABLE MIEUM-WA-PHIEUPH -0x91BF 0xBADF # HANGUL SYLLABLE MIEUM-WA-HIEUH -0x91C0 0xBAE0 # HANGUL SYLLABLE MIEUM-WAE -0x91C1 0xBAE1 # HANGUL SYLLABLE MIEUM-WAE-KIYEOK -0x91C2 0xBAE2 # HANGUL SYLLABLE MIEUM-WAE-SSANGKIYEOK -0x91C3 0xBAE3 # HANGUL SYLLABLE MIEUM-WAE-KIYEOKSIOS -0x91C4 0xBAE4 # HANGUL SYLLABLE MIEUM-WAE-NIEUN -0x91C5 0xBAE5 # HANGUL SYLLABLE MIEUM-WAE-NIEUNCIEUC -0x91C6 0xBAE6 # HANGUL SYLLABLE MIEUM-WAE-NIEUNHIEUH -0x91C7 0xBAE7 # HANGUL SYLLABLE MIEUM-WAE-TIKEUT -0x91C8 0xBAE8 # HANGUL SYLLABLE MIEUM-WAE-RIEUL -0x91C9 0xBAE9 # HANGUL SYLLABLE MIEUM-WAE-RIEULKIYEOK -0x91CA 0xBAEA # HANGUL SYLLABLE MIEUM-WAE-RIEULMIEUM -0x91CB 0xBAEB # HANGUL SYLLABLE MIEUM-WAE-RIEULPIEUP -0x91CC 0xBAEC # HANGUL SYLLABLE MIEUM-WAE-RIEULSIOS -0x91CD 0xBAED # HANGUL SYLLABLE MIEUM-WAE-RIEULTHIEUTH -0x91CE 0xBAEE # HANGUL SYLLABLE MIEUM-WAE-RIEULPHIEUPH -0x91CF 0xBAEF # HANGUL SYLLABLE MIEUM-WAE-RIEULHIEUH -0x91D0 0xBAF0 # HANGUL SYLLABLE MIEUM-WAE-MIEUM -0x91D1 0xBAF1 # HANGUL SYLLABLE MIEUM-WAE-PIEUP -0x91D2 0xBAF2 # HANGUL SYLLABLE MIEUM-WAE-PIEUPSIOS -0x91D3 0xBAF3 # HANGUL SYLLABLE MIEUM-WAE-SIOS -0x91D4 0xBAF4 # HANGUL SYLLABLE MIEUM-WAE-SSANGSIOS -0x91D5 0xBAF5 # HANGUL SYLLABLE MIEUM-WAE-IEUNG -0x91D6 0xBAF6 # HANGUL SYLLABLE MIEUM-WAE-CIEUC -0x91D7 0xBAF7 # HANGUL SYLLABLE MIEUM-WAE-CHIEUCH -0x91D8 0xBAF8 # HANGUL SYLLABLE MIEUM-WAE-KHIEUKH -0x91D9 0xBAF9 # HANGUL SYLLABLE MIEUM-WAE-THIEUTH -0x91DA 0xBAFA # HANGUL SYLLABLE MIEUM-WAE-PHIEUPH -0x91DB 0xBAFB # HANGUL SYLLABLE MIEUM-WAE-HIEUH -0x91DC 0xBAFD # HANGUL SYLLABLE MIEUM-OE-KIYEOK -0x91DD 0xBAFE # HANGUL SYLLABLE MIEUM-OE-SSANGKIYEOK -0x91DE 0xBAFF # HANGUL SYLLABLE MIEUM-OE-KIYEOKSIOS -0x91DF 0xBB01 # HANGUL SYLLABLE MIEUM-OE-NIEUNCIEUC -0x91E0 0xBB02 # HANGUL SYLLABLE MIEUM-OE-NIEUNHIEUH -0x91E1 0xBB03 # HANGUL SYLLABLE MIEUM-OE-TIKEUT -0x91E2 0xBB05 # HANGUL SYLLABLE MIEUM-OE-RIEULKIYEOK -0x91E3 0xBB06 # HANGUL SYLLABLE MIEUM-OE-RIEULMIEUM -0x91E4 0xBB07 # HANGUL SYLLABLE MIEUM-OE-RIEULPIEUP -0x91E5 0xBB08 # HANGUL SYLLABLE MIEUM-OE-RIEULSIOS -0x91E6 0xBB09 # HANGUL SYLLABLE MIEUM-OE-RIEULTHIEUTH -0x91E7 0xBB0A # HANGUL SYLLABLE MIEUM-OE-RIEULPHIEUPH -0x91E8 0xBB0B # HANGUL SYLLABLE MIEUM-OE-RIEULHIEUH -0x91E9 0xBB0C # HANGUL SYLLABLE MIEUM-OE-MIEUM -0x91EA 0xBB0E # HANGUL SYLLABLE MIEUM-OE-PIEUPSIOS -0x91EB 0xBB10 # HANGUL SYLLABLE MIEUM-OE-SSANGSIOS -0x91EC 0xBB12 # HANGUL SYLLABLE MIEUM-OE-CIEUC -0x91ED 0xBB13 # HANGUL SYLLABLE MIEUM-OE-CHIEUCH -0x91EE 0xBB14 # HANGUL SYLLABLE MIEUM-OE-KHIEUKH -0x91EF 0xBB15 # HANGUL SYLLABLE MIEUM-OE-THIEUTH -0x91F0 0xBB16 # HANGUL SYLLABLE MIEUM-OE-PHIEUPH -0x91F1 0xBB17 # HANGUL SYLLABLE MIEUM-OE-HIEUH -0x91F2 0xBB19 # HANGUL SYLLABLE MIEUM-YO-KIYEOK -0x91F3 0xBB1A # HANGUL SYLLABLE MIEUM-YO-SSANGKIYEOK -0x91F4 0xBB1B # HANGUL SYLLABLE MIEUM-YO-KIYEOKSIOS -0x91F5 0xBB1D # HANGUL SYLLABLE MIEUM-YO-NIEUNCIEUC -0x91F6 0xBB1E # HANGUL SYLLABLE MIEUM-YO-NIEUNHIEUH -0x91F7 0xBB1F # HANGUL SYLLABLE MIEUM-YO-TIKEUT -0x91F8 0xBB21 # HANGUL SYLLABLE MIEUM-YO-RIEULKIYEOK -0x91F9 0xBB22 # HANGUL SYLLABLE MIEUM-YO-RIEULMIEUM -0x91FA 0xBB23 # HANGUL SYLLABLE MIEUM-YO-RIEULPIEUP -0x91FB 0xBB24 # HANGUL SYLLABLE MIEUM-YO-RIEULSIOS -0x91FC 0xBB25 # HANGUL SYLLABLE MIEUM-YO-RIEULTHIEUTH -0x91FD 0xBB26 # HANGUL SYLLABLE MIEUM-YO-RIEULPHIEUPH -0x91FE 0xBB27 # HANGUL SYLLABLE MIEUM-YO-RIEULHIEUH -0x9241 0xBB28 # HANGUL SYLLABLE MIEUM-YO-MIEUM -0x9242 0xBB2A # HANGUL SYLLABLE MIEUM-YO-PIEUPSIOS -0x9243 0xBB2C # HANGUL SYLLABLE MIEUM-YO-SSANGSIOS -0x9244 0xBB2D # HANGUL SYLLABLE MIEUM-YO-IEUNG -0x9245 0xBB2E # HANGUL SYLLABLE MIEUM-YO-CIEUC -0x9246 0xBB2F # HANGUL SYLLABLE MIEUM-YO-CHIEUCH -0x9247 0xBB30 # HANGUL SYLLABLE MIEUM-YO-KHIEUKH -0x9248 0xBB31 # HANGUL SYLLABLE MIEUM-YO-THIEUTH -0x9249 0xBB32 # HANGUL SYLLABLE MIEUM-YO-PHIEUPH -0x924A 0xBB33 # HANGUL SYLLABLE MIEUM-YO-HIEUH -0x924B 0xBB37 # HANGUL SYLLABLE MIEUM-U-KIYEOKSIOS -0x924C 0xBB39 # HANGUL SYLLABLE MIEUM-U-NIEUNCIEUC -0x924D 0xBB3A # HANGUL SYLLABLE MIEUM-U-NIEUNHIEUH -0x924E 0xBB3F # HANGUL SYLLABLE MIEUM-U-RIEULPIEUP -0x924F 0xBB40 # HANGUL SYLLABLE MIEUM-U-RIEULSIOS -0x9250 0xBB41 # HANGUL SYLLABLE MIEUM-U-RIEULTHIEUTH -0x9251 0xBB42 # HANGUL SYLLABLE MIEUM-U-RIEULPHIEUPH -0x9252 0xBB43 # HANGUL SYLLABLE MIEUM-U-RIEULHIEUH -0x9253 0xBB46 # HANGUL SYLLABLE MIEUM-U-PIEUPSIOS -0x9254 0xBB48 # HANGUL SYLLABLE MIEUM-U-SSANGSIOS -0x9255 0xBB4A # HANGUL SYLLABLE MIEUM-U-CIEUC -0x9256 0xBB4B # HANGUL SYLLABLE MIEUM-U-CHIEUCH -0x9257 0xBB4C # HANGUL SYLLABLE MIEUM-U-KHIEUKH -0x9258 0xBB4E # HANGUL SYLLABLE MIEUM-U-PHIEUPH -0x9259 0xBB51 # HANGUL SYLLABLE MIEUM-WEO-KIYEOK -0x925A 0xBB52 # HANGUL SYLLABLE MIEUM-WEO-SSANGKIYEOK -0x9261 0xBB53 # HANGUL SYLLABLE MIEUM-WEO-KIYEOKSIOS -0x9262 0xBB55 # HANGUL SYLLABLE MIEUM-WEO-NIEUNCIEUC -0x9263 0xBB56 # HANGUL SYLLABLE MIEUM-WEO-NIEUNHIEUH -0x9264 0xBB57 # HANGUL SYLLABLE MIEUM-WEO-TIKEUT -0x9265 0xBB59 # HANGUL SYLLABLE MIEUM-WEO-RIEULKIYEOK -0x9266 0xBB5A # HANGUL SYLLABLE MIEUM-WEO-RIEULMIEUM -0x9267 0xBB5B # HANGUL SYLLABLE MIEUM-WEO-RIEULPIEUP -0x9268 0xBB5C # HANGUL SYLLABLE MIEUM-WEO-RIEULSIOS -0x9269 0xBB5D # HANGUL SYLLABLE MIEUM-WEO-RIEULTHIEUTH -0x926A 0xBB5E # HANGUL SYLLABLE MIEUM-WEO-RIEULPHIEUPH -0x926B 0xBB5F # HANGUL SYLLABLE MIEUM-WEO-RIEULHIEUH -0x926C 0xBB60 # HANGUL SYLLABLE MIEUM-WEO-MIEUM -0x926D 0xBB62 # HANGUL SYLLABLE MIEUM-WEO-PIEUPSIOS -0x926E 0xBB64 # HANGUL SYLLABLE MIEUM-WEO-SSANGSIOS -0x926F 0xBB65 # HANGUL SYLLABLE MIEUM-WEO-IEUNG -0x9270 0xBB66 # HANGUL SYLLABLE MIEUM-WEO-CIEUC -0x9271 0xBB67 # HANGUL SYLLABLE MIEUM-WEO-CHIEUCH -0x9272 0xBB68 # HANGUL SYLLABLE MIEUM-WEO-KHIEUKH -0x9273 0xBB69 # HANGUL SYLLABLE MIEUM-WEO-THIEUTH -0x9274 0xBB6A # HANGUL SYLLABLE MIEUM-WEO-PHIEUPH -0x9275 0xBB6B # HANGUL SYLLABLE MIEUM-WEO-HIEUH -0x9276 0xBB6D # HANGUL SYLLABLE MIEUM-WE-KIYEOK -0x9277 0xBB6E # HANGUL SYLLABLE MIEUM-WE-SSANGKIYEOK -0x9278 0xBB6F # HANGUL SYLLABLE MIEUM-WE-KIYEOKSIOS -0x9279 0xBB70 # HANGUL SYLLABLE MIEUM-WE-NIEUN -0x927A 0xBB71 # HANGUL SYLLABLE MIEUM-WE-NIEUNCIEUC -0x9281 0xBB72 # HANGUL SYLLABLE MIEUM-WE-NIEUNHIEUH -0x9282 0xBB73 # HANGUL SYLLABLE MIEUM-WE-TIKEUT -0x9283 0xBB74 # HANGUL SYLLABLE MIEUM-WE-RIEUL -0x9284 0xBB75 # HANGUL SYLLABLE MIEUM-WE-RIEULKIYEOK -0x9285 0xBB76 # HANGUL SYLLABLE MIEUM-WE-RIEULMIEUM -0x9286 0xBB77 # HANGUL SYLLABLE MIEUM-WE-RIEULPIEUP -0x9287 0xBB78 # HANGUL SYLLABLE MIEUM-WE-RIEULSIOS -0x9288 0xBB79 # HANGUL SYLLABLE MIEUM-WE-RIEULTHIEUTH -0x9289 0xBB7A # HANGUL SYLLABLE MIEUM-WE-RIEULPHIEUPH -0x928A 0xBB7B # HANGUL SYLLABLE MIEUM-WE-RIEULHIEUH -0x928B 0xBB7C # HANGUL SYLLABLE MIEUM-WE-MIEUM -0x928C 0xBB7D # HANGUL SYLLABLE MIEUM-WE-PIEUP -0x928D 0xBB7E # HANGUL SYLLABLE MIEUM-WE-PIEUPSIOS -0x928E 0xBB7F # HANGUL SYLLABLE MIEUM-WE-SIOS -0x928F 0xBB80 # HANGUL SYLLABLE MIEUM-WE-SSANGSIOS -0x9290 0xBB81 # HANGUL SYLLABLE MIEUM-WE-IEUNG -0x9291 0xBB82 # HANGUL SYLLABLE MIEUM-WE-CIEUC -0x9292 0xBB83 # HANGUL SYLLABLE MIEUM-WE-CHIEUCH -0x9293 0xBB84 # HANGUL SYLLABLE MIEUM-WE-KHIEUKH -0x9294 0xBB85 # HANGUL SYLLABLE MIEUM-WE-THIEUTH -0x9295 0xBB86 # HANGUL SYLLABLE MIEUM-WE-PHIEUPH -0x9296 0xBB87 # HANGUL SYLLABLE MIEUM-WE-HIEUH -0x9297 0xBB89 # HANGUL SYLLABLE MIEUM-WI-KIYEOK -0x9298 0xBB8A # HANGUL SYLLABLE MIEUM-WI-SSANGKIYEOK -0x9299 0xBB8B # HANGUL SYLLABLE MIEUM-WI-KIYEOKSIOS -0x929A 0xBB8D # HANGUL SYLLABLE MIEUM-WI-NIEUNCIEUC -0x929B 0xBB8E # HANGUL SYLLABLE MIEUM-WI-NIEUNHIEUH -0x929C 0xBB8F # HANGUL SYLLABLE MIEUM-WI-TIKEUT -0x929D 0xBB91 # HANGUL SYLLABLE MIEUM-WI-RIEULKIYEOK -0x929E 0xBB92 # HANGUL SYLLABLE MIEUM-WI-RIEULMIEUM -0x929F 0xBB93 # HANGUL SYLLABLE MIEUM-WI-RIEULPIEUP -0x92A0 0xBB94 # HANGUL SYLLABLE MIEUM-WI-RIEULSIOS -0x92A1 0xBB95 # HANGUL SYLLABLE MIEUM-WI-RIEULTHIEUTH -0x92A2 0xBB96 # HANGUL SYLLABLE MIEUM-WI-RIEULPHIEUPH -0x92A3 0xBB97 # HANGUL SYLLABLE MIEUM-WI-RIEULHIEUH -0x92A4 0xBB98 # HANGUL SYLLABLE MIEUM-WI-MIEUM -0x92A5 0xBB99 # HANGUL SYLLABLE MIEUM-WI-PIEUP -0x92A6 0xBB9A # HANGUL SYLLABLE MIEUM-WI-PIEUPSIOS -0x92A7 0xBB9B # HANGUL SYLLABLE MIEUM-WI-SIOS -0x92A8 0xBB9C # HANGUL SYLLABLE MIEUM-WI-SSANGSIOS -0x92A9 0xBB9D # HANGUL SYLLABLE MIEUM-WI-IEUNG -0x92AA 0xBB9E # HANGUL SYLLABLE MIEUM-WI-CIEUC -0x92AB 0xBB9F # HANGUL SYLLABLE MIEUM-WI-CHIEUCH -0x92AC 0xBBA0 # HANGUL SYLLABLE MIEUM-WI-KHIEUKH -0x92AD 0xBBA1 # HANGUL SYLLABLE MIEUM-WI-THIEUTH -0x92AE 0xBBA2 # HANGUL SYLLABLE MIEUM-WI-PHIEUPH -0x92AF 0xBBA3 # HANGUL SYLLABLE MIEUM-WI-HIEUH -0x92B0 0xBBA5 # HANGUL SYLLABLE MIEUM-YU-KIYEOK -0x92B1 0xBBA6 # HANGUL SYLLABLE MIEUM-YU-SSANGKIYEOK -0x92B2 0xBBA7 # HANGUL SYLLABLE MIEUM-YU-KIYEOKSIOS -0x92B3 0xBBA9 # HANGUL SYLLABLE MIEUM-YU-NIEUNCIEUC -0x92B4 0xBBAA # HANGUL SYLLABLE MIEUM-YU-NIEUNHIEUH -0x92B5 0xBBAB # HANGUL SYLLABLE MIEUM-YU-TIKEUT -0x92B6 0xBBAD # HANGUL SYLLABLE MIEUM-YU-RIEULKIYEOK -0x92B7 0xBBAE # HANGUL SYLLABLE MIEUM-YU-RIEULMIEUM -0x92B8 0xBBAF # HANGUL SYLLABLE MIEUM-YU-RIEULPIEUP -0x92B9 0xBBB0 # HANGUL SYLLABLE MIEUM-YU-RIEULSIOS -0x92BA 0xBBB1 # HANGUL SYLLABLE MIEUM-YU-RIEULTHIEUTH -0x92BB 0xBBB2 # HANGUL SYLLABLE MIEUM-YU-RIEULPHIEUPH -0x92BC 0xBBB3 # HANGUL SYLLABLE MIEUM-YU-RIEULHIEUH -0x92BD 0xBBB5 # HANGUL SYLLABLE MIEUM-YU-PIEUP -0x92BE 0xBBB6 # HANGUL SYLLABLE MIEUM-YU-PIEUPSIOS -0x92BF 0xBBB8 # HANGUL SYLLABLE MIEUM-YU-SSANGSIOS -0x92C0 0xBBB9 # HANGUL SYLLABLE MIEUM-YU-IEUNG -0x92C1 0xBBBA # HANGUL SYLLABLE MIEUM-YU-CIEUC -0x92C2 0xBBBB # HANGUL SYLLABLE MIEUM-YU-CHIEUCH -0x92C3 0xBBBC # HANGUL SYLLABLE MIEUM-YU-KHIEUKH -0x92C4 0xBBBD # HANGUL SYLLABLE MIEUM-YU-THIEUTH -0x92C5 0xBBBE # HANGUL SYLLABLE MIEUM-YU-PHIEUPH -0x92C6 0xBBBF # HANGUL SYLLABLE MIEUM-YU-HIEUH -0x92C7 0xBBC1 # HANGUL SYLLABLE MIEUM-EU-KIYEOK -0x92C8 0xBBC2 # HANGUL SYLLABLE MIEUM-EU-SSANGKIYEOK -0x92C9 0xBBC3 # HANGUL SYLLABLE MIEUM-EU-KIYEOKSIOS -0x92CA 0xBBC5 # HANGUL SYLLABLE MIEUM-EU-NIEUNCIEUC -0x92CB 0xBBC6 # HANGUL SYLLABLE MIEUM-EU-NIEUNHIEUH -0x92CC 0xBBC7 # HANGUL SYLLABLE MIEUM-EU-TIKEUT -0x92CD 0xBBC9 # HANGUL SYLLABLE MIEUM-EU-RIEULKIYEOK -0x92CE 0xBBCA # HANGUL SYLLABLE MIEUM-EU-RIEULMIEUM -0x92CF 0xBBCB # HANGUL SYLLABLE MIEUM-EU-RIEULPIEUP -0x92D0 0xBBCC # HANGUL SYLLABLE MIEUM-EU-RIEULSIOS -0x92D1 0xBBCD # HANGUL SYLLABLE MIEUM-EU-RIEULTHIEUTH -0x92D2 0xBBCE # HANGUL SYLLABLE MIEUM-EU-RIEULPHIEUPH -0x92D3 0xBBCF # HANGUL SYLLABLE MIEUM-EU-RIEULHIEUH -0x92D4 0xBBD1 # HANGUL SYLLABLE MIEUM-EU-PIEUP -0x92D5 0xBBD2 # HANGUL SYLLABLE MIEUM-EU-PIEUPSIOS -0x92D6 0xBBD4 # HANGUL SYLLABLE MIEUM-EU-SSANGSIOS -0x92D7 0xBBD5 # HANGUL SYLLABLE MIEUM-EU-IEUNG -0x92D8 0xBBD6 # HANGUL SYLLABLE MIEUM-EU-CIEUC -0x92D9 0xBBD7 # HANGUL SYLLABLE MIEUM-EU-CHIEUCH -0x92DA 0xBBD8 # HANGUL SYLLABLE MIEUM-EU-KHIEUKH -0x92DB 0xBBD9 # HANGUL SYLLABLE MIEUM-EU-THIEUTH -0x92DC 0xBBDA # HANGUL SYLLABLE MIEUM-EU-PHIEUPH -0x92DD 0xBBDB # HANGUL SYLLABLE MIEUM-EU-HIEUH -0x92DE 0xBBDC # HANGUL SYLLABLE MIEUM-YI -0x92DF 0xBBDD # HANGUL SYLLABLE MIEUM-YI-KIYEOK -0x92E0 0xBBDE # HANGUL SYLLABLE MIEUM-YI-SSANGKIYEOK -0x92E1 0xBBDF # HANGUL SYLLABLE MIEUM-YI-KIYEOKSIOS -0x92E2 0xBBE0 # HANGUL SYLLABLE MIEUM-YI-NIEUN -0x92E3 0xBBE1 # HANGUL SYLLABLE MIEUM-YI-NIEUNCIEUC -0x92E4 0xBBE2 # HANGUL SYLLABLE MIEUM-YI-NIEUNHIEUH -0x92E5 0xBBE3 # HANGUL SYLLABLE MIEUM-YI-TIKEUT -0x92E6 0xBBE4 # HANGUL SYLLABLE MIEUM-YI-RIEUL -0x92E7 0xBBE5 # HANGUL SYLLABLE MIEUM-YI-RIEULKIYEOK -0x92E8 0xBBE6 # HANGUL SYLLABLE MIEUM-YI-RIEULMIEUM -0x92E9 0xBBE7 # HANGUL SYLLABLE MIEUM-YI-RIEULPIEUP -0x92EA 0xBBE8 # HANGUL SYLLABLE MIEUM-YI-RIEULSIOS -0x92EB 0xBBE9 # HANGUL SYLLABLE MIEUM-YI-RIEULTHIEUTH -0x92EC 0xBBEA # HANGUL SYLLABLE MIEUM-YI-RIEULPHIEUPH -0x92ED 0xBBEB # HANGUL SYLLABLE MIEUM-YI-RIEULHIEUH -0x92EE 0xBBEC # HANGUL SYLLABLE MIEUM-YI-MIEUM -0x92EF 0xBBED # HANGUL SYLLABLE MIEUM-YI-PIEUP -0x92F0 0xBBEE # HANGUL SYLLABLE MIEUM-YI-PIEUPSIOS -0x92F1 0xBBEF # HANGUL SYLLABLE MIEUM-YI-SIOS -0x92F2 0xBBF0 # HANGUL SYLLABLE MIEUM-YI-SSANGSIOS -0x92F3 0xBBF1 # HANGUL SYLLABLE MIEUM-YI-IEUNG -0x92F4 0xBBF2 # HANGUL SYLLABLE MIEUM-YI-CIEUC -0x92F5 0xBBF3 # HANGUL SYLLABLE MIEUM-YI-CHIEUCH -0x92F6 0xBBF4 # HANGUL SYLLABLE MIEUM-YI-KHIEUKH -0x92F7 0xBBF5 # HANGUL SYLLABLE MIEUM-YI-THIEUTH -0x92F8 0xBBF6 # HANGUL SYLLABLE MIEUM-YI-PHIEUPH -0x92F9 0xBBF7 # HANGUL SYLLABLE MIEUM-YI-HIEUH -0x92FA 0xBBFA # HANGUL SYLLABLE MIEUM-I-SSANGKIYEOK -0x92FB 0xBBFB # HANGUL SYLLABLE MIEUM-I-KIYEOKSIOS -0x92FC 0xBBFD # HANGUL SYLLABLE MIEUM-I-NIEUNCIEUC -0x92FD 0xBBFE # HANGUL SYLLABLE MIEUM-I-NIEUNHIEUH -0x92FE 0xBC01 # HANGUL SYLLABLE MIEUM-I-RIEULKIYEOK -0x9341 0xBC03 # HANGUL SYLLABLE MIEUM-I-RIEULPIEUP -0x9342 0xBC04 # HANGUL SYLLABLE MIEUM-I-RIEULSIOS -0x9343 0xBC05 # HANGUL SYLLABLE MIEUM-I-RIEULTHIEUTH -0x9344 0xBC06 # HANGUL SYLLABLE MIEUM-I-RIEULPHIEUPH -0x9345 0xBC07 # HANGUL SYLLABLE MIEUM-I-RIEULHIEUH -0x9346 0xBC0A # HANGUL SYLLABLE MIEUM-I-PIEUPSIOS -0x9347 0xBC0E # HANGUL SYLLABLE MIEUM-I-CIEUC -0x9348 0xBC10 # HANGUL SYLLABLE MIEUM-I-KHIEUKH -0x9349 0xBC12 # HANGUL SYLLABLE MIEUM-I-PHIEUPH -0x934A 0xBC13 # HANGUL SYLLABLE MIEUM-I-HIEUH -0x934B 0xBC19 # HANGUL SYLLABLE PIEUP-A-NIEUNCIEUC -0x934C 0xBC1A # HANGUL SYLLABLE PIEUP-A-NIEUNHIEUH -0x934D 0xBC20 # HANGUL SYLLABLE PIEUP-A-RIEULSIOS -0x934E 0xBC21 # HANGUL SYLLABLE PIEUP-A-RIEULTHIEUTH -0x934F 0xBC22 # HANGUL SYLLABLE PIEUP-A-RIEULPHIEUPH -0x9350 0xBC23 # HANGUL SYLLABLE PIEUP-A-RIEULHIEUH -0x9351 0xBC26 # HANGUL SYLLABLE PIEUP-A-PIEUPSIOS -0x9352 0xBC28 # HANGUL SYLLABLE PIEUP-A-SSANGSIOS -0x9353 0xBC2A # HANGUL SYLLABLE PIEUP-A-CIEUC -0x9354 0xBC2B # HANGUL SYLLABLE PIEUP-A-CHIEUCH -0x9355 0xBC2C # HANGUL SYLLABLE PIEUP-A-KHIEUKH -0x9356 0xBC2E # HANGUL SYLLABLE PIEUP-A-PHIEUPH -0x9357 0xBC2F # HANGUL SYLLABLE PIEUP-A-HIEUH -0x9358 0xBC32 # HANGUL SYLLABLE PIEUP-AE-SSANGKIYEOK -0x9359 0xBC33 # HANGUL SYLLABLE PIEUP-AE-KIYEOKSIOS -0x935A 0xBC35 # HANGUL SYLLABLE PIEUP-AE-NIEUNCIEUC -0x9361 0xBC36 # HANGUL SYLLABLE PIEUP-AE-NIEUNHIEUH -0x9362 0xBC37 # HANGUL SYLLABLE PIEUP-AE-TIKEUT -0x9363 0xBC39 # HANGUL SYLLABLE PIEUP-AE-RIEULKIYEOK -0x9364 0xBC3A # HANGUL SYLLABLE PIEUP-AE-RIEULMIEUM -0x9365 0xBC3B # HANGUL SYLLABLE PIEUP-AE-RIEULPIEUP -0x9366 0xBC3C # HANGUL SYLLABLE PIEUP-AE-RIEULSIOS -0x9367 0xBC3D # HANGUL SYLLABLE PIEUP-AE-RIEULTHIEUTH -0x9368 0xBC3E # HANGUL SYLLABLE PIEUP-AE-RIEULPHIEUPH -0x9369 0xBC3F # HANGUL SYLLABLE PIEUP-AE-RIEULHIEUH -0x936A 0xBC42 # HANGUL SYLLABLE PIEUP-AE-PIEUPSIOS -0x936B 0xBC46 # HANGUL SYLLABLE PIEUP-AE-CIEUC -0x936C 0xBC47 # HANGUL SYLLABLE PIEUP-AE-CHIEUCH -0x936D 0xBC48 # HANGUL SYLLABLE PIEUP-AE-KHIEUKH -0x936E 0xBC4A # HANGUL SYLLABLE PIEUP-AE-PHIEUPH -0x936F 0xBC4B # HANGUL SYLLABLE PIEUP-AE-HIEUH -0x9370 0xBC4E # HANGUL SYLLABLE PIEUP-YA-SSANGKIYEOK -0x9371 0xBC4F # HANGUL SYLLABLE PIEUP-YA-KIYEOKSIOS -0x9372 0xBC51 # HANGUL SYLLABLE PIEUP-YA-NIEUNCIEUC -0x9373 0xBC52 # HANGUL SYLLABLE PIEUP-YA-NIEUNHIEUH -0x9374 0xBC53 # HANGUL SYLLABLE PIEUP-YA-TIKEUT -0x9375 0xBC54 # HANGUL SYLLABLE PIEUP-YA-RIEUL -0x9376 0xBC55 # HANGUL SYLLABLE PIEUP-YA-RIEULKIYEOK -0x9377 0xBC56 # HANGUL SYLLABLE PIEUP-YA-RIEULMIEUM -0x9378 0xBC57 # HANGUL SYLLABLE PIEUP-YA-RIEULPIEUP -0x9379 0xBC58 # HANGUL SYLLABLE PIEUP-YA-RIEULSIOS -0x937A 0xBC59 # HANGUL SYLLABLE PIEUP-YA-RIEULTHIEUTH -0x9381 0xBC5A # HANGUL SYLLABLE PIEUP-YA-RIEULPHIEUPH -0x9382 0xBC5B # HANGUL SYLLABLE PIEUP-YA-RIEULHIEUH -0x9383 0xBC5C # HANGUL SYLLABLE PIEUP-YA-MIEUM -0x9384 0xBC5E # HANGUL SYLLABLE PIEUP-YA-PIEUPSIOS -0x9385 0xBC5F # HANGUL SYLLABLE PIEUP-YA-SIOS -0x9386 0xBC60 # HANGUL SYLLABLE PIEUP-YA-SSANGSIOS -0x9387 0xBC61 # HANGUL SYLLABLE PIEUP-YA-IEUNG -0x9388 0xBC62 # HANGUL SYLLABLE PIEUP-YA-CIEUC -0x9389 0xBC63 # HANGUL SYLLABLE PIEUP-YA-CHIEUCH -0x938A 0xBC64 # HANGUL SYLLABLE PIEUP-YA-KHIEUKH -0x938B 0xBC65 # HANGUL SYLLABLE PIEUP-YA-THIEUTH -0x938C 0xBC66 # HANGUL SYLLABLE PIEUP-YA-PHIEUPH -0x938D 0xBC67 # HANGUL SYLLABLE PIEUP-YA-HIEUH -0x938E 0xBC68 # HANGUL SYLLABLE PIEUP-YAE -0x938F 0xBC69 # HANGUL SYLLABLE PIEUP-YAE-KIYEOK -0x9390 0xBC6A # HANGUL SYLLABLE PIEUP-YAE-SSANGKIYEOK -0x9391 0xBC6B # HANGUL SYLLABLE PIEUP-YAE-KIYEOKSIOS -0x9392 0xBC6C # HANGUL SYLLABLE PIEUP-YAE-NIEUN -0x9393 0xBC6D # HANGUL SYLLABLE PIEUP-YAE-NIEUNCIEUC -0x9394 0xBC6E # HANGUL SYLLABLE PIEUP-YAE-NIEUNHIEUH -0x9395 0xBC6F # HANGUL SYLLABLE PIEUP-YAE-TIKEUT -0x9396 0xBC70 # HANGUL SYLLABLE PIEUP-YAE-RIEUL -0x9397 0xBC71 # HANGUL SYLLABLE PIEUP-YAE-RIEULKIYEOK -0x9398 0xBC72 # HANGUL SYLLABLE PIEUP-YAE-RIEULMIEUM -0x9399 0xBC73 # HANGUL SYLLABLE PIEUP-YAE-RIEULPIEUP -0x939A 0xBC74 # HANGUL SYLLABLE PIEUP-YAE-RIEULSIOS -0x939B 0xBC75 # HANGUL SYLLABLE PIEUP-YAE-RIEULTHIEUTH -0x939C 0xBC76 # HANGUL SYLLABLE PIEUP-YAE-RIEULPHIEUPH -0x939D 0xBC77 # HANGUL SYLLABLE PIEUP-YAE-RIEULHIEUH -0x939E 0xBC78 # HANGUL SYLLABLE PIEUP-YAE-MIEUM -0x939F 0xBC79 # HANGUL SYLLABLE PIEUP-YAE-PIEUP -0x93A0 0xBC7A # HANGUL SYLLABLE PIEUP-YAE-PIEUPSIOS -0x93A1 0xBC7B # HANGUL SYLLABLE PIEUP-YAE-SIOS -0x93A2 0xBC7C # HANGUL SYLLABLE PIEUP-YAE-SSANGSIOS -0x93A3 0xBC7D # HANGUL SYLLABLE PIEUP-YAE-IEUNG -0x93A4 0xBC7E # HANGUL SYLLABLE PIEUP-YAE-CIEUC -0x93A5 0xBC7F # HANGUL SYLLABLE PIEUP-YAE-CHIEUCH -0x93A6 0xBC80 # HANGUL SYLLABLE PIEUP-YAE-KHIEUKH -0x93A7 0xBC81 # HANGUL SYLLABLE PIEUP-YAE-THIEUTH -0x93A8 0xBC82 # HANGUL SYLLABLE PIEUP-YAE-PHIEUPH -0x93A9 0xBC83 # HANGUL SYLLABLE PIEUP-YAE-HIEUH -0x93AA 0xBC86 # HANGUL SYLLABLE PIEUP-EO-SSANGKIYEOK -0x93AB 0xBC87 # HANGUL SYLLABLE PIEUP-EO-KIYEOKSIOS -0x93AC 0xBC89 # HANGUL SYLLABLE PIEUP-EO-NIEUNCIEUC -0x93AD 0xBC8A # HANGUL SYLLABLE PIEUP-EO-NIEUNHIEUH -0x93AE 0xBC8D # HANGUL SYLLABLE PIEUP-EO-RIEULKIYEOK -0x93AF 0xBC8F # HANGUL SYLLABLE PIEUP-EO-RIEULPIEUP -0x93B0 0xBC90 # HANGUL SYLLABLE PIEUP-EO-RIEULSIOS -0x93B1 0xBC91 # HANGUL SYLLABLE PIEUP-EO-RIEULTHIEUTH -0x93B2 0xBC92 # HANGUL SYLLABLE PIEUP-EO-RIEULPHIEUPH -0x93B3 0xBC93 # HANGUL SYLLABLE PIEUP-EO-RIEULHIEUH -0x93B4 0xBC96 # HANGUL SYLLABLE PIEUP-EO-PIEUPSIOS -0x93B5 0xBC98 # HANGUL SYLLABLE PIEUP-EO-SSANGSIOS -0x93B6 0xBC9B # HANGUL SYLLABLE PIEUP-EO-CHIEUCH -0x93B7 0xBC9C # HANGUL SYLLABLE PIEUP-EO-KHIEUKH -0x93B8 0xBC9D # HANGUL SYLLABLE PIEUP-EO-THIEUTH -0x93B9 0xBC9E # HANGUL SYLLABLE PIEUP-EO-PHIEUPH -0x93BA 0xBC9F # HANGUL SYLLABLE PIEUP-EO-HIEUH -0x93BB 0xBCA2 # HANGUL SYLLABLE PIEUP-E-SSANGKIYEOK -0x93BC 0xBCA3 # HANGUL SYLLABLE PIEUP-E-KIYEOKSIOS -0x93BD 0xBCA5 # HANGUL SYLLABLE PIEUP-E-NIEUNCIEUC -0x93BE 0xBCA6 # HANGUL SYLLABLE PIEUP-E-NIEUNHIEUH -0x93BF 0xBCA9 # HANGUL SYLLABLE PIEUP-E-RIEULKIYEOK -0x93C0 0xBCAA # HANGUL SYLLABLE PIEUP-E-RIEULMIEUM -0x93C1 0xBCAB # HANGUL SYLLABLE PIEUP-E-RIEULPIEUP -0x93C2 0xBCAC # HANGUL SYLLABLE PIEUP-E-RIEULSIOS -0x93C3 0xBCAD # HANGUL SYLLABLE PIEUP-E-RIEULTHIEUTH -0x93C4 0xBCAE # HANGUL SYLLABLE PIEUP-E-RIEULPHIEUPH -0x93C5 0xBCAF # HANGUL SYLLABLE PIEUP-E-RIEULHIEUH -0x93C6 0xBCB2 # HANGUL SYLLABLE PIEUP-E-PIEUPSIOS -0x93C7 0xBCB6 # HANGUL SYLLABLE PIEUP-E-CIEUC -0x93C8 0xBCB7 # HANGUL SYLLABLE PIEUP-E-CHIEUCH -0x93C9 0xBCB8 # HANGUL SYLLABLE PIEUP-E-KHIEUKH -0x93CA 0xBCB9 # HANGUL SYLLABLE PIEUP-E-THIEUTH -0x93CB 0xBCBA # HANGUL SYLLABLE PIEUP-E-PHIEUPH -0x93CC 0xBCBB # HANGUL SYLLABLE PIEUP-E-HIEUH -0x93CD 0xBCBE # HANGUL SYLLABLE PIEUP-YEO-SSANGKIYEOK -0x93CE 0xBCBF # HANGUL SYLLABLE PIEUP-YEO-KIYEOKSIOS -0x93CF 0xBCC1 # HANGUL SYLLABLE PIEUP-YEO-NIEUNCIEUC -0x93D0 0xBCC2 # HANGUL SYLLABLE PIEUP-YEO-NIEUNHIEUH -0x93D1 0xBCC3 # HANGUL SYLLABLE PIEUP-YEO-TIKEUT -0x93D2 0xBCC5 # HANGUL SYLLABLE PIEUP-YEO-RIEULKIYEOK -0x93D3 0xBCC6 # HANGUL SYLLABLE PIEUP-YEO-RIEULMIEUM -0x93D4 0xBCC7 # HANGUL SYLLABLE PIEUP-YEO-RIEULPIEUP -0x93D5 0xBCC8 # HANGUL SYLLABLE PIEUP-YEO-RIEULSIOS -0x93D6 0xBCC9 # HANGUL SYLLABLE PIEUP-YEO-RIEULTHIEUTH -0x93D7 0xBCCA # HANGUL SYLLABLE PIEUP-YEO-RIEULPHIEUPH -0x93D8 0xBCCB # HANGUL SYLLABLE PIEUP-YEO-RIEULHIEUH -0x93D9 0xBCCC # HANGUL SYLLABLE PIEUP-YEO-MIEUM -0x93DA 0xBCCE # HANGUL SYLLABLE PIEUP-YEO-PIEUPSIOS -0x93DB 0xBCD2 # HANGUL SYLLABLE PIEUP-YEO-CIEUC -0x93DC 0xBCD3 # HANGUL SYLLABLE PIEUP-YEO-CHIEUCH -0x93DD 0xBCD4 # HANGUL SYLLABLE PIEUP-YEO-KHIEUKH -0x93DE 0xBCD6 # HANGUL SYLLABLE PIEUP-YEO-PHIEUPH -0x93DF 0xBCD7 # HANGUL SYLLABLE PIEUP-YEO-HIEUH -0x93E0 0xBCD9 # HANGUL SYLLABLE PIEUP-YE-KIYEOK -0x93E1 0xBCDA # HANGUL SYLLABLE PIEUP-YE-SSANGKIYEOK -0x93E2 0xBCDB # HANGUL SYLLABLE PIEUP-YE-KIYEOKSIOS -0x93E3 0xBCDD # HANGUL SYLLABLE PIEUP-YE-NIEUNCIEUC -0x93E4 0xBCDE # HANGUL SYLLABLE PIEUP-YE-NIEUNHIEUH -0x93E5 0xBCDF # HANGUL SYLLABLE PIEUP-YE-TIKEUT -0x93E6 0xBCE0 # HANGUL SYLLABLE PIEUP-YE-RIEUL -0x93E7 0xBCE1 # HANGUL SYLLABLE PIEUP-YE-RIEULKIYEOK -0x93E8 0xBCE2 # HANGUL SYLLABLE PIEUP-YE-RIEULMIEUM -0x93E9 0xBCE3 # HANGUL SYLLABLE PIEUP-YE-RIEULPIEUP -0x93EA 0xBCE4 # HANGUL SYLLABLE PIEUP-YE-RIEULSIOS -0x93EB 0xBCE5 # HANGUL SYLLABLE PIEUP-YE-RIEULTHIEUTH -0x93EC 0xBCE6 # HANGUL SYLLABLE PIEUP-YE-RIEULPHIEUPH -0x93ED 0xBCE7 # HANGUL SYLLABLE PIEUP-YE-RIEULHIEUH -0x93EE 0xBCE8 # HANGUL SYLLABLE PIEUP-YE-MIEUM -0x93EF 0xBCE9 # HANGUL SYLLABLE PIEUP-YE-PIEUP -0x93F0 0xBCEA # HANGUL SYLLABLE PIEUP-YE-PIEUPSIOS -0x93F1 0xBCEB # HANGUL SYLLABLE PIEUP-YE-SIOS -0x93F2 0xBCEC # HANGUL SYLLABLE PIEUP-YE-SSANGSIOS -0x93F3 0xBCED # HANGUL SYLLABLE PIEUP-YE-IEUNG -0x93F4 0xBCEE # HANGUL SYLLABLE PIEUP-YE-CIEUC -0x93F5 0xBCEF # HANGUL SYLLABLE PIEUP-YE-CHIEUCH -0x93F6 0xBCF0 # HANGUL SYLLABLE PIEUP-YE-KHIEUKH -0x93F7 0xBCF1 # HANGUL SYLLABLE PIEUP-YE-THIEUTH -0x93F8 0xBCF2 # HANGUL SYLLABLE PIEUP-YE-PHIEUPH -0x93F9 0xBCF3 # HANGUL SYLLABLE PIEUP-YE-HIEUH -0x93FA 0xBCF7 # HANGUL SYLLABLE PIEUP-O-KIYEOKSIOS -0x93FB 0xBCF9 # HANGUL SYLLABLE PIEUP-O-NIEUNCIEUC -0x93FC 0xBCFA # HANGUL SYLLABLE PIEUP-O-NIEUNHIEUH -0x93FD 0xBCFB # HANGUL SYLLABLE PIEUP-O-TIKEUT -0x93FE 0xBCFD # HANGUL SYLLABLE PIEUP-O-RIEULKIYEOK -0x9441 0xBCFE # HANGUL SYLLABLE PIEUP-O-RIEULMIEUM -0x9442 0xBCFF # HANGUL SYLLABLE PIEUP-O-RIEULPIEUP -0x9443 0xBD00 # HANGUL SYLLABLE PIEUP-O-RIEULSIOS -0x9444 0xBD01 # HANGUL SYLLABLE PIEUP-O-RIEULTHIEUTH -0x9445 0xBD02 # HANGUL SYLLABLE PIEUP-O-RIEULPHIEUPH -0x9446 0xBD03 # HANGUL SYLLABLE PIEUP-O-RIEULHIEUH -0x9447 0xBD06 # HANGUL SYLLABLE PIEUP-O-PIEUPSIOS -0x9448 0xBD08 # HANGUL SYLLABLE PIEUP-O-SSANGSIOS -0x9449 0xBD0A # HANGUL SYLLABLE PIEUP-O-CIEUC -0x944A 0xBD0B # HANGUL SYLLABLE PIEUP-O-CHIEUCH -0x944B 0xBD0C # HANGUL SYLLABLE PIEUP-O-KHIEUKH -0x944C 0xBD0D # HANGUL SYLLABLE PIEUP-O-THIEUTH -0x944D 0xBD0E # HANGUL SYLLABLE PIEUP-O-PHIEUPH -0x944E 0xBD0F # HANGUL SYLLABLE PIEUP-O-HIEUH -0x944F 0xBD11 # HANGUL SYLLABLE PIEUP-WA-KIYEOK -0x9450 0xBD12 # HANGUL SYLLABLE PIEUP-WA-SSANGKIYEOK -0x9451 0xBD13 # HANGUL SYLLABLE PIEUP-WA-KIYEOKSIOS -0x9452 0xBD15 # HANGUL SYLLABLE PIEUP-WA-NIEUNCIEUC -0x9453 0xBD16 # HANGUL SYLLABLE PIEUP-WA-NIEUNHIEUH -0x9454 0xBD17 # HANGUL SYLLABLE PIEUP-WA-TIKEUT -0x9455 0xBD18 # HANGUL SYLLABLE PIEUP-WA-RIEUL -0x9456 0xBD19 # HANGUL SYLLABLE PIEUP-WA-RIEULKIYEOK -0x9457 0xBD1A # HANGUL SYLLABLE PIEUP-WA-RIEULMIEUM -0x9458 0xBD1B # HANGUL SYLLABLE PIEUP-WA-RIEULPIEUP -0x9459 0xBD1C # HANGUL SYLLABLE PIEUP-WA-RIEULSIOS -0x945A 0xBD1D # HANGUL SYLLABLE PIEUP-WA-RIEULTHIEUTH -0x9461 0xBD1E # HANGUL SYLLABLE PIEUP-WA-RIEULPHIEUPH -0x9462 0xBD1F # HANGUL SYLLABLE PIEUP-WA-RIEULHIEUH -0x9463 0xBD20 # HANGUL SYLLABLE PIEUP-WA-MIEUM -0x9464 0xBD21 # HANGUL SYLLABLE PIEUP-WA-PIEUP -0x9465 0xBD22 # HANGUL SYLLABLE PIEUP-WA-PIEUPSIOS -0x9466 0xBD23 # HANGUL SYLLABLE PIEUP-WA-SIOS -0x9467 0xBD25 # HANGUL SYLLABLE PIEUP-WA-IEUNG -0x9468 0xBD26 # HANGUL SYLLABLE PIEUP-WA-CIEUC -0x9469 0xBD27 # HANGUL SYLLABLE PIEUP-WA-CHIEUCH -0x946A 0xBD28 # HANGUL SYLLABLE PIEUP-WA-KHIEUKH -0x946B 0xBD29 # HANGUL SYLLABLE PIEUP-WA-THIEUTH -0x946C 0xBD2A # HANGUL SYLLABLE PIEUP-WA-PHIEUPH -0x946D 0xBD2B # HANGUL SYLLABLE PIEUP-WA-HIEUH -0x946E 0xBD2D # HANGUL SYLLABLE PIEUP-WAE-KIYEOK -0x946F 0xBD2E # HANGUL SYLLABLE PIEUP-WAE-SSANGKIYEOK -0x9470 0xBD2F # HANGUL SYLLABLE PIEUP-WAE-KIYEOKSIOS -0x9471 0xBD30 # HANGUL SYLLABLE PIEUP-WAE-NIEUN -0x9472 0xBD31 # HANGUL SYLLABLE PIEUP-WAE-NIEUNCIEUC -0x9473 0xBD32 # HANGUL SYLLABLE PIEUP-WAE-NIEUNHIEUH -0x9474 0xBD33 # HANGUL SYLLABLE PIEUP-WAE-TIKEUT -0x9475 0xBD34 # HANGUL SYLLABLE PIEUP-WAE-RIEUL -0x9476 0xBD35 # HANGUL SYLLABLE PIEUP-WAE-RIEULKIYEOK -0x9477 0xBD36 # HANGUL SYLLABLE PIEUP-WAE-RIEULMIEUM -0x9478 0xBD37 # HANGUL SYLLABLE PIEUP-WAE-RIEULPIEUP -0x9479 0xBD38 # HANGUL SYLLABLE PIEUP-WAE-RIEULSIOS -0x947A 0xBD39 # HANGUL SYLLABLE PIEUP-WAE-RIEULTHIEUTH -0x9481 0xBD3A # HANGUL SYLLABLE PIEUP-WAE-RIEULPHIEUPH -0x9482 0xBD3B # HANGUL SYLLABLE PIEUP-WAE-RIEULHIEUH -0x9483 0xBD3C # HANGUL SYLLABLE PIEUP-WAE-MIEUM -0x9484 0xBD3D # HANGUL SYLLABLE PIEUP-WAE-PIEUP -0x9485 0xBD3E # HANGUL SYLLABLE PIEUP-WAE-PIEUPSIOS -0x9486 0xBD3F # HANGUL SYLLABLE PIEUP-WAE-SIOS -0x9487 0xBD41 # HANGUL SYLLABLE PIEUP-WAE-IEUNG -0x9488 0xBD42 # HANGUL SYLLABLE PIEUP-WAE-CIEUC -0x9489 0xBD43 # HANGUL SYLLABLE PIEUP-WAE-CHIEUCH -0x948A 0xBD44 # HANGUL SYLLABLE PIEUP-WAE-KHIEUKH -0x948B 0xBD45 # HANGUL SYLLABLE PIEUP-WAE-THIEUTH -0x948C 0xBD46 # HANGUL SYLLABLE PIEUP-WAE-PHIEUPH -0x948D 0xBD47 # HANGUL SYLLABLE PIEUP-WAE-HIEUH -0x948E 0xBD4A # HANGUL SYLLABLE PIEUP-OE-SSANGKIYEOK -0x948F 0xBD4B # HANGUL SYLLABLE PIEUP-OE-KIYEOKSIOS -0x9490 0xBD4D # HANGUL SYLLABLE PIEUP-OE-NIEUNCIEUC -0x9491 0xBD4E # HANGUL SYLLABLE PIEUP-OE-NIEUNHIEUH -0x9492 0xBD4F # HANGUL SYLLABLE PIEUP-OE-TIKEUT -0x9493 0xBD51 # HANGUL SYLLABLE PIEUP-OE-RIEULKIYEOK -0x9494 0xBD52 # HANGUL SYLLABLE PIEUP-OE-RIEULMIEUM -0x9495 0xBD53 # HANGUL SYLLABLE PIEUP-OE-RIEULPIEUP -0x9496 0xBD54 # HANGUL SYLLABLE PIEUP-OE-RIEULSIOS -0x9497 0xBD55 # HANGUL SYLLABLE PIEUP-OE-RIEULTHIEUTH -0x9498 0xBD56 # HANGUL SYLLABLE PIEUP-OE-RIEULPHIEUPH -0x9499 0xBD57 # HANGUL SYLLABLE PIEUP-OE-RIEULHIEUH -0x949A 0xBD5A # HANGUL SYLLABLE PIEUP-OE-PIEUPSIOS -0x949B 0xBD5B # HANGUL SYLLABLE PIEUP-OE-SIOS -0x949C 0xBD5C # HANGUL SYLLABLE PIEUP-OE-SSANGSIOS -0x949D 0xBD5D # HANGUL SYLLABLE PIEUP-OE-IEUNG -0x949E 0xBD5E # HANGUL SYLLABLE PIEUP-OE-CIEUC -0x949F 0xBD5F # HANGUL SYLLABLE PIEUP-OE-CHIEUCH -0x94A0 0xBD60 # HANGUL SYLLABLE PIEUP-OE-KHIEUKH -0x94A1 0xBD61 # HANGUL SYLLABLE PIEUP-OE-THIEUTH -0x94A2 0xBD62 # HANGUL SYLLABLE PIEUP-OE-PHIEUPH -0x94A3 0xBD63 # HANGUL SYLLABLE PIEUP-OE-HIEUH -0x94A4 0xBD65 # HANGUL SYLLABLE PIEUP-YO-KIYEOK -0x94A5 0xBD66 # HANGUL SYLLABLE PIEUP-YO-SSANGKIYEOK -0x94A6 0xBD67 # HANGUL SYLLABLE PIEUP-YO-KIYEOKSIOS -0x94A7 0xBD69 # HANGUL SYLLABLE PIEUP-YO-NIEUNCIEUC -0x94A8 0xBD6A # HANGUL SYLLABLE PIEUP-YO-NIEUNHIEUH -0x94A9 0xBD6B # HANGUL SYLLABLE PIEUP-YO-TIKEUT -0x94AA 0xBD6C # HANGUL SYLLABLE PIEUP-YO-RIEUL -0x94AB 0xBD6D # HANGUL SYLLABLE PIEUP-YO-RIEULKIYEOK -0x94AC 0xBD6E # HANGUL SYLLABLE PIEUP-YO-RIEULMIEUM -0x94AD 0xBD6F # HANGUL SYLLABLE PIEUP-YO-RIEULPIEUP -0x94AE 0xBD70 # HANGUL SYLLABLE PIEUP-YO-RIEULSIOS -0x94AF 0xBD71 # HANGUL SYLLABLE PIEUP-YO-RIEULTHIEUTH -0x94B0 0xBD72 # HANGUL SYLLABLE PIEUP-YO-RIEULPHIEUPH -0x94B1 0xBD73 # HANGUL SYLLABLE PIEUP-YO-RIEULHIEUH -0x94B2 0xBD74 # HANGUL SYLLABLE PIEUP-YO-MIEUM -0x94B3 0xBD75 # HANGUL SYLLABLE PIEUP-YO-PIEUP -0x94B4 0xBD76 # HANGUL SYLLABLE PIEUP-YO-PIEUPSIOS -0x94B5 0xBD77 # HANGUL SYLLABLE PIEUP-YO-SIOS -0x94B6 0xBD78 # HANGUL SYLLABLE PIEUP-YO-SSANGSIOS -0x94B7 0xBD79 # HANGUL SYLLABLE PIEUP-YO-IEUNG -0x94B8 0xBD7A # HANGUL SYLLABLE PIEUP-YO-CIEUC -0x94B9 0xBD7B # HANGUL SYLLABLE PIEUP-YO-CHIEUCH -0x94BA 0xBD7C # HANGUL SYLLABLE PIEUP-YO-KHIEUKH -0x94BB 0xBD7D # HANGUL SYLLABLE PIEUP-YO-THIEUTH -0x94BC 0xBD7E # HANGUL SYLLABLE PIEUP-YO-PHIEUPH -0x94BD 0xBD7F # HANGUL SYLLABLE PIEUP-YO-HIEUH -0x94BE 0xBD82 # HANGUL SYLLABLE PIEUP-U-SSANGKIYEOK -0x94BF 0xBD83 # HANGUL SYLLABLE PIEUP-U-KIYEOKSIOS -0x94C0 0xBD85 # HANGUL SYLLABLE PIEUP-U-NIEUNCIEUC -0x94C1 0xBD86 # HANGUL SYLLABLE PIEUP-U-NIEUNHIEUH -0x94C2 0xBD8B # HANGUL SYLLABLE PIEUP-U-RIEULPIEUP -0x94C3 0xBD8C # HANGUL SYLLABLE PIEUP-U-RIEULSIOS -0x94C4 0xBD8D # HANGUL SYLLABLE PIEUP-U-RIEULTHIEUTH -0x94C5 0xBD8E # HANGUL SYLLABLE PIEUP-U-RIEULPHIEUPH -0x94C6 0xBD8F # HANGUL SYLLABLE PIEUP-U-RIEULHIEUH -0x94C7 0xBD92 # HANGUL SYLLABLE PIEUP-U-PIEUPSIOS -0x94C8 0xBD94 # HANGUL SYLLABLE PIEUP-U-SSANGSIOS -0x94C9 0xBD96 # HANGUL SYLLABLE PIEUP-U-CIEUC -0x94CA 0xBD97 # HANGUL SYLLABLE PIEUP-U-CHIEUCH -0x94CB 0xBD98 # HANGUL SYLLABLE PIEUP-U-KHIEUKH -0x94CC 0xBD9B # HANGUL SYLLABLE PIEUP-U-HIEUH -0x94CD 0xBD9D # HANGUL SYLLABLE PIEUP-WEO-KIYEOK -0x94CE 0xBD9E # HANGUL SYLLABLE PIEUP-WEO-SSANGKIYEOK -0x94CF 0xBD9F # HANGUL SYLLABLE PIEUP-WEO-KIYEOKSIOS -0x94D0 0xBDA0 # HANGUL SYLLABLE PIEUP-WEO-NIEUN -0x94D1 0xBDA1 # HANGUL SYLLABLE PIEUP-WEO-NIEUNCIEUC -0x94D2 0xBDA2 # HANGUL SYLLABLE PIEUP-WEO-NIEUNHIEUH -0x94D3 0xBDA3 # HANGUL SYLLABLE PIEUP-WEO-TIKEUT -0x94D4 0xBDA5 # HANGUL SYLLABLE PIEUP-WEO-RIEULKIYEOK -0x94D5 0xBDA6 # HANGUL SYLLABLE PIEUP-WEO-RIEULMIEUM -0x94D6 0xBDA7 # HANGUL SYLLABLE PIEUP-WEO-RIEULPIEUP -0x94D7 0xBDA8 # HANGUL SYLLABLE PIEUP-WEO-RIEULSIOS -0x94D8 0xBDA9 # HANGUL SYLLABLE PIEUP-WEO-RIEULTHIEUTH -0x94D9 0xBDAA # HANGUL SYLLABLE PIEUP-WEO-RIEULPHIEUPH -0x94DA 0xBDAB # HANGUL SYLLABLE PIEUP-WEO-RIEULHIEUH -0x94DB 0xBDAC # HANGUL SYLLABLE PIEUP-WEO-MIEUM -0x94DC 0xBDAD # HANGUL SYLLABLE PIEUP-WEO-PIEUP -0x94DD 0xBDAE # HANGUL SYLLABLE PIEUP-WEO-PIEUPSIOS -0x94DE 0xBDAF # HANGUL SYLLABLE PIEUP-WEO-SIOS -0x94DF 0xBDB1 # HANGUL SYLLABLE PIEUP-WEO-IEUNG -0x94E0 0xBDB2 # HANGUL SYLLABLE PIEUP-WEO-CIEUC -0x94E1 0xBDB3 # HANGUL SYLLABLE PIEUP-WEO-CHIEUCH -0x94E2 0xBDB4 # HANGUL SYLLABLE PIEUP-WEO-KHIEUKH -0x94E3 0xBDB5 # HANGUL SYLLABLE PIEUP-WEO-THIEUTH -0x94E4 0xBDB6 # HANGUL SYLLABLE PIEUP-WEO-PHIEUPH -0x94E5 0xBDB7 # HANGUL SYLLABLE PIEUP-WEO-HIEUH -0x94E6 0xBDB9 # HANGUL SYLLABLE PIEUP-WE-KIYEOK -0x94E7 0xBDBA # HANGUL SYLLABLE PIEUP-WE-SSANGKIYEOK -0x94E8 0xBDBB # HANGUL SYLLABLE PIEUP-WE-KIYEOKSIOS -0x94E9 0xBDBC # HANGUL SYLLABLE PIEUP-WE-NIEUN -0x94EA 0xBDBD # HANGUL SYLLABLE PIEUP-WE-NIEUNCIEUC -0x94EB 0xBDBE # HANGUL SYLLABLE PIEUP-WE-NIEUNHIEUH -0x94EC 0xBDBF # HANGUL SYLLABLE PIEUP-WE-TIKEUT -0x94ED 0xBDC0 # HANGUL SYLLABLE PIEUP-WE-RIEUL -0x94EE 0xBDC1 # HANGUL SYLLABLE PIEUP-WE-RIEULKIYEOK -0x94EF 0xBDC2 # HANGUL SYLLABLE PIEUP-WE-RIEULMIEUM -0x94F0 0xBDC3 # HANGUL SYLLABLE PIEUP-WE-RIEULPIEUP -0x94F1 0xBDC4 # HANGUL SYLLABLE PIEUP-WE-RIEULSIOS -0x94F2 0xBDC5 # HANGUL SYLLABLE PIEUP-WE-RIEULTHIEUTH -0x94F3 0xBDC6 # HANGUL SYLLABLE PIEUP-WE-RIEULPHIEUPH -0x94F4 0xBDC7 # HANGUL SYLLABLE PIEUP-WE-RIEULHIEUH -0x94F5 0xBDC8 # HANGUL SYLLABLE PIEUP-WE-MIEUM -0x94F6 0xBDC9 # HANGUL SYLLABLE PIEUP-WE-PIEUP -0x94F7 0xBDCA # HANGUL SYLLABLE PIEUP-WE-PIEUPSIOS -0x94F8 0xBDCB # HANGUL SYLLABLE PIEUP-WE-SIOS -0x94F9 0xBDCC # HANGUL SYLLABLE PIEUP-WE-SSANGSIOS -0x94FA 0xBDCD # HANGUL SYLLABLE PIEUP-WE-IEUNG -0x94FB 0xBDCE # HANGUL SYLLABLE PIEUP-WE-CIEUC -0x94FC 0xBDCF # HANGUL SYLLABLE PIEUP-WE-CHIEUCH -0x94FD 0xBDD0 # HANGUL SYLLABLE PIEUP-WE-KHIEUKH -0x94FE 0xBDD1 # HANGUL SYLLABLE PIEUP-WE-THIEUTH -0x9541 0xBDD2 # HANGUL SYLLABLE PIEUP-WE-PHIEUPH -0x9542 0xBDD3 # HANGUL SYLLABLE PIEUP-WE-HIEUH -0x9543 0xBDD6 # HANGUL SYLLABLE PIEUP-WI-SSANGKIYEOK -0x9544 0xBDD7 # HANGUL SYLLABLE PIEUP-WI-KIYEOKSIOS -0x9545 0xBDD9 # HANGUL SYLLABLE PIEUP-WI-NIEUNCIEUC -0x9546 0xBDDA # HANGUL SYLLABLE PIEUP-WI-NIEUNHIEUH -0x9547 0xBDDB # HANGUL SYLLABLE PIEUP-WI-TIKEUT -0x9548 0xBDDD # HANGUL SYLLABLE PIEUP-WI-RIEULKIYEOK -0x9549 0xBDDE # HANGUL SYLLABLE PIEUP-WI-RIEULMIEUM -0x954A 0xBDDF # HANGUL SYLLABLE PIEUP-WI-RIEULPIEUP -0x954B 0xBDE0 # HANGUL SYLLABLE PIEUP-WI-RIEULSIOS -0x954C 0xBDE1 # HANGUL SYLLABLE PIEUP-WI-RIEULTHIEUTH -0x954D 0xBDE2 # HANGUL SYLLABLE PIEUP-WI-RIEULPHIEUPH -0x954E 0xBDE3 # HANGUL SYLLABLE PIEUP-WI-RIEULHIEUH -0x954F 0xBDE4 # HANGUL SYLLABLE PIEUP-WI-MIEUM -0x9550 0xBDE5 # HANGUL SYLLABLE PIEUP-WI-PIEUP -0x9551 0xBDE6 # HANGUL SYLLABLE PIEUP-WI-PIEUPSIOS -0x9552 0xBDE7 # HANGUL SYLLABLE PIEUP-WI-SIOS -0x9553 0xBDE8 # HANGUL SYLLABLE PIEUP-WI-SSANGSIOS -0x9554 0xBDEA # HANGUL SYLLABLE PIEUP-WI-CIEUC -0x9555 0xBDEB # HANGUL SYLLABLE PIEUP-WI-CHIEUCH -0x9556 0xBDEC # HANGUL SYLLABLE PIEUP-WI-KHIEUKH -0x9557 0xBDED # HANGUL SYLLABLE PIEUP-WI-THIEUTH -0x9558 0xBDEE # HANGUL SYLLABLE PIEUP-WI-PHIEUPH -0x9559 0xBDEF # HANGUL SYLLABLE PIEUP-WI-HIEUH -0x955A 0xBDF1 # HANGUL SYLLABLE PIEUP-YU-KIYEOK -0x9561 0xBDF2 # HANGUL SYLLABLE PIEUP-YU-SSANGKIYEOK -0x9562 0xBDF3 # HANGUL SYLLABLE PIEUP-YU-KIYEOKSIOS -0x9563 0xBDF5 # HANGUL SYLLABLE PIEUP-YU-NIEUNCIEUC -0x9564 0xBDF6 # HANGUL SYLLABLE PIEUP-YU-NIEUNHIEUH -0x9565 0xBDF7 # HANGUL SYLLABLE PIEUP-YU-TIKEUT -0x9566 0xBDF9 # HANGUL SYLLABLE PIEUP-YU-RIEULKIYEOK -0x9567 0xBDFA # HANGUL SYLLABLE PIEUP-YU-RIEULMIEUM -0x9568 0xBDFB # HANGUL SYLLABLE PIEUP-YU-RIEULPIEUP -0x9569 0xBDFC # HANGUL SYLLABLE PIEUP-YU-RIEULSIOS -0x956A 0xBDFD # HANGUL SYLLABLE PIEUP-YU-RIEULTHIEUTH -0x956B 0xBDFE # HANGUL SYLLABLE PIEUP-YU-RIEULPHIEUPH -0x956C 0xBDFF # HANGUL SYLLABLE PIEUP-YU-RIEULHIEUH -0x956D 0xBE01 # HANGUL SYLLABLE PIEUP-YU-PIEUP -0x956E 0xBE02 # HANGUL SYLLABLE PIEUP-YU-PIEUPSIOS -0x956F 0xBE04 # HANGUL SYLLABLE PIEUP-YU-SSANGSIOS -0x9570 0xBE06 # HANGUL SYLLABLE PIEUP-YU-CIEUC -0x9571 0xBE07 # HANGUL SYLLABLE PIEUP-YU-CHIEUCH -0x9572 0xBE08 # HANGUL SYLLABLE PIEUP-YU-KHIEUKH -0x9573 0xBE09 # HANGUL SYLLABLE PIEUP-YU-THIEUTH -0x9574 0xBE0A # HANGUL SYLLABLE PIEUP-YU-PHIEUPH -0x9575 0xBE0B # HANGUL SYLLABLE PIEUP-YU-HIEUH -0x9576 0xBE0E # HANGUL SYLLABLE PIEUP-EU-SSANGKIYEOK -0x9577 0xBE0F # HANGUL SYLLABLE PIEUP-EU-KIYEOKSIOS -0x9578 0xBE11 # HANGUL SYLLABLE PIEUP-EU-NIEUNCIEUC -0x9579 0xBE12 # HANGUL SYLLABLE PIEUP-EU-NIEUNHIEUH -0x957A 0xBE13 # HANGUL SYLLABLE PIEUP-EU-TIKEUT -0x9581 0xBE15 # HANGUL SYLLABLE PIEUP-EU-RIEULKIYEOK -0x9582 0xBE16 # HANGUL SYLLABLE PIEUP-EU-RIEULMIEUM -0x9583 0xBE17 # HANGUL SYLLABLE PIEUP-EU-RIEULPIEUP -0x9584 0xBE18 # HANGUL SYLLABLE PIEUP-EU-RIEULSIOS -0x9585 0xBE19 # HANGUL SYLLABLE PIEUP-EU-RIEULTHIEUTH -0x9586 0xBE1A # HANGUL SYLLABLE PIEUP-EU-RIEULPHIEUPH -0x9587 0xBE1B # HANGUL SYLLABLE PIEUP-EU-RIEULHIEUH -0x9588 0xBE1E # HANGUL SYLLABLE PIEUP-EU-PIEUPSIOS -0x9589 0xBE20 # HANGUL SYLLABLE PIEUP-EU-SSANGSIOS -0x958A 0xBE21 # HANGUL SYLLABLE PIEUP-EU-IEUNG -0x958B 0xBE22 # HANGUL SYLLABLE PIEUP-EU-CIEUC -0x958C 0xBE23 # HANGUL SYLLABLE PIEUP-EU-CHIEUCH -0x958D 0xBE24 # HANGUL SYLLABLE PIEUP-EU-KHIEUKH -0x958E 0xBE25 # HANGUL SYLLABLE PIEUP-EU-THIEUTH -0x958F 0xBE26 # HANGUL SYLLABLE PIEUP-EU-PHIEUPH -0x9590 0xBE27 # HANGUL SYLLABLE PIEUP-EU-HIEUH -0x9591 0xBE28 # HANGUL SYLLABLE PIEUP-YI -0x9592 0xBE29 # HANGUL SYLLABLE PIEUP-YI-KIYEOK -0x9593 0xBE2A # HANGUL SYLLABLE PIEUP-YI-SSANGKIYEOK -0x9594 0xBE2B # HANGUL SYLLABLE PIEUP-YI-KIYEOKSIOS -0x9595 0xBE2C # HANGUL SYLLABLE PIEUP-YI-NIEUN -0x9596 0xBE2D # HANGUL SYLLABLE PIEUP-YI-NIEUNCIEUC -0x9597 0xBE2E # HANGUL SYLLABLE PIEUP-YI-NIEUNHIEUH -0x9598 0xBE2F # HANGUL SYLLABLE PIEUP-YI-TIKEUT -0x9599 0xBE30 # HANGUL SYLLABLE PIEUP-YI-RIEUL -0x959A 0xBE31 # HANGUL SYLLABLE PIEUP-YI-RIEULKIYEOK -0x959B 0xBE32 # HANGUL SYLLABLE PIEUP-YI-RIEULMIEUM -0x959C 0xBE33 # HANGUL SYLLABLE PIEUP-YI-RIEULPIEUP -0x959D 0xBE34 # HANGUL SYLLABLE PIEUP-YI-RIEULSIOS -0x959E 0xBE35 # HANGUL SYLLABLE PIEUP-YI-RIEULTHIEUTH -0x959F 0xBE36 # HANGUL SYLLABLE PIEUP-YI-RIEULPHIEUPH -0x95A0 0xBE37 # HANGUL SYLLABLE PIEUP-YI-RIEULHIEUH -0x95A1 0xBE38 # HANGUL SYLLABLE PIEUP-YI-MIEUM -0x95A2 0xBE39 # HANGUL SYLLABLE PIEUP-YI-PIEUP -0x95A3 0xBE3A # HANGUL SYLLABLE PIEUP-YI-PIEUPSIOS -0x95A4 0xBE3B # HANGUL SYLLABLE PIEUP-YI-SIOS -0x95A5 0xBE3C # HANGUL SYLLABLE PIEUP-YI-SSANGSIOS -0x95A6 0xBE3D # HANGUL SYLLABLE PIEUP-YI-IEUNG -0x95A7 0xBE3E # HANGUL SYLLABLE PIEUP-YI-CIEUC -0x95A8 0xBE3F # HANGUL SYLLABLE PIEUP-YI-CHIEUCH -0x95A9 0xBE40 # HANGUL SYLLABLE PIEUP-YI-KHIEUKH -0x95AA 0xBE41 # HANGUL SYLLABLE PIEUP-YI-THIEUTH -0x95AB 0xBE42 # HANGUL SYLLABLE PIEUP-YI-PHIEUPH -0x95AC 0xBE43 # HANGUL SYLLABLE PIEUP-YI-HIEUH -0x95AD 0xBE46 # HANGUL SYLLABLE PIEUP-I-SSANGKIYEOK -0x95AE 0xBE47 # HANGUL SYLLABLE PIEUP-I-KIYEOKSIOS -0x95AF 0xBE49 # HANGUL SYLLABLE PIEUP-I-NIEUNCIEUC -0x95B0 0xBE4A # HANGUL SYLLABLE PIEUP-I-NIEUNHIEUH -0x95B1 0xBE4B # HANGUL SYLLABLE PIEUP-I-TIKEUT -0x95B2 0xBE4D # HANGUL SYLLABLE PIEUP-I-RIEULKIYEOK -0x95B3 0xBE4F # HANGUL SYLLABLE PIEUP-I-RIEULPIEUP -0x95B4 0xBE50 # HANGUL SYLLABLE PIEUP-I-RIEULSIOS -0x95B5 0xBE51 # HANGUL SYLLABLE PIEUP-I-RIEULTHIEUTH -0x95B6 0xBE52 # HANGUL SYLLABLE PIEUP-I-RIEULPHIEUPH -0x95B7 0xBE53 # HANGUL SYLLABLE PIEUP-I-RIEULHIEUH -0x95B8 0xBE56 # HANGUL SYLLABLE PIEUP-I-PIEUPSIOS -0x95B9 0xBE58 # HANGUL SYLLABLE PIEUP-I-SSANGSIOS -0x95BA 0xBE5C # HANGUL SYLLABLE PIEUP-I-KHIEUKH -0x95BB 0xBE5D # HANGUL SYLLABLE PIEUP-I-THIEUTH -0x95BC 0xBE5E # HANGUL SYLLABLE PIEUP-I-PHIEUPH -0x95BD 0xBE5F # HANGUL SYLLABLE PIEUP-I-HIEUH -0x95BE 0xBE62 # HANGUL SYLLABLE SSANGPIEUP-A-SSANGKIYEOK -0x95BF 0xBE63 # HANGUL SYLLABLE SSANGPIEUP-A-KIYEOKSIOS -0x95C0 0xBE65 # HANGUL SYLLABLE SSANGPIEUP-A-NIEUNCIEUC -0x95C1 0xBE66 # HANGUL SYLLABLE SSANGPIEUP-A-NIEUNHIEUH -0x95C2 0xBE67 # HANGUL SYLLABLE SSANGPIEUP-A-TIKEUT -0x95C3 0xBE69 # HANGUL SYLLABLE SSANGPIEUP-A-RIEULKIYEOK -0x95C4 0xBE6B # HANGUL SYLLABLE SSANGPIEUP-A-RIEULPIEUP -0x95C5 0xBE6C # HANGUL SYLLABLE SSANGPIEUP-A-RIEULSIOS -0x95C6 0xBE6D # HANGUL SYLLABLE SSANGPIEUP-A-RIEULTHIEUTH -0x95C7 0xBE6E # HANGUL SYLLABLE SSANGPIEUP-A-RIEULPHIEUPH -0x95C8 0xBE6F # HANGUL SYLLABLE SSANGPIEUP-A-RIEULHIEUH -0x95C9 0xBE72 # HANGUL SYLLABLE SSANGPIEUP-A-PIEUPSIOS -0x95CA 0xBE76 # HANGUL SYLLABLE SSANGPIEUP-A-CIEUC -0x95CB 0xBE77 # HANGUL SYLLABLE SSANGPIEUP-A-CHIEUCH -0x95CC 0xBE78 # HANGUL SYLLABLE SSANGPIEUP-A-KHIEUKH -0x95CD 0xBE79 # HANGUL SYLLABLE SSANGPIEUP-A-THIEUTH -0x95CE 0xBE7A # HANGUL SYLLABLE SSANGPIEUP-A-PHIEUPH -0x95CF 0xBE7E # HANGUL SYLLABLE SSANGPIEUP-AE-SSANGKIYEOK -0x95D0 0xBE7F # HANGUL SYLLABLE SSANGPIEUP-AE-KIYEOKSIOS -0x95D1 0xBE81 # HANGUL SYLLABLE SSANGPIEUP-AE-NIEUNCIEUC -0x95D2 0xBE82 # HANGUL SYLLABLE SSANGPIEUP-AE-NIEUNHIEUH -0x95D3 0xBE83 # HANGUL SYLLABLE SSANGPIEUP-AE-TIKEUT -0x95D4 0xBE85 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULKIYEOK -0x95D5 0xBE86 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULMIEUM -0x95D6 0xBE87 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULPIEUP -0x95D7 0xBE88 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULSIOS -0x95D8 0xBE89 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULTHIEUTH -0x95D9 0xBE8A # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULPHIEUPH -0x95DA 0xBE8B # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULHIEUH -0x95DB 0xBE8E # HANGUL SYLLABLE SSANGPIEUP-AE-PIEUPSIOS -0x95DC 0xBE92 # HANGUL SYLLABLE SSANGPIEUP-AE-CIEUC -0x95DD 0xBE93 # HANGUL SYLLABLE SSANGPIEUP-AE-CHIEUCH -0x95DE 0xBE94 # HANGUL SYLLABLE SSANGPIEUP-AE-KHIEUKH -0x95DF 0xBE95 # HANGUL SYLLABLE SSANGPIEUP-AE-THIEUTH -0x95E0 0xBE96 # HANGUL SYLLABLE SSANGPIEUP-AE-PHIEUPH -0x95E1 0xBE97 # HANGUL SYLLABLE SSANGPIEUP-AE-HIEUH -0x95E2 0xBE9A # HANGUL SYLLABLE SSANGPIEUP-YA-SSANGKIYEOK -0x95E3 0xBE9B # HANGUL SYLLABLE SSANGPIEUP-YA-KIYEOKSIOS -0x95E4 0xBE9C # HANGUL SYLLABLE SSANGPIEUP-YA-NIEUN -0x95E5 0xBE9D # HANGUL SYLLABLE SSANGPIEUP-YA-NIEUNCIEUC -0x95E6 0xBE9E # HANGUL SYLLABLE SSANGPIEUP-YA-NIEUNHIEUH -0x95E7 0xBE9F # HANGUL SYLLABLE SSANGPIEUP-YA-TIKEUT -0x95E8 0xBEA0 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEUL -0x95E9 0xBEA1 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULKIYEOK -0x95EA 0xBEA2 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULMIEUM -0x95EB 0xBEA3 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULPIEUP -0x95EC 0xBEA4 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULSIOS -0x95ED 0xBEA5 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULTHIEUTH -0x95EE 0xBEA6 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULPHIEUPH -0x95EF 0xBEA7 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULHIEUH -0x95F0 0xBEA9 # HANGUL SYLLABLE SSANGPIEUP-YA-PIEUP -0x95F1 0xBEAA # HANGUL SYLLABLE SSANGPIEUP-YA-PIEUPSIOS -0x95F2 0xBEAB # HANGUL SYLLABLE SSANGPIEUP-YA-SIOS -0x95F3 0xBEAC # HANGUL SYLLABLE SSANGPIEUP-YA-SSANGSIOS -0x95F4 0xBEAD # HANGUL SYLLABLE SSANGPIEUP-YA-IEUNG -0x95F5 0xBEAE # HANGUL SYLLABLE SSANGPIEUP-YA-CIEUC -0x95F6 0xBEAF # HANGUL SYLLABLE SSANGPIEUP-YA-CHIEUCH -0x95F7 0xBEB0 # HANGUL SYLLABLE SSANGPIEUP-YA-KHIEUKH -0x95F8 0xBEB1 # HANGUL SYLLABLE SSANGPIEUP-YA-THIEUTH -0x95F9 0xBEB2 # HANGUL SYLLABLE SSANGPIEUP-YA-PHIEUPH -0x95FA 0xBEB3 # HANGUL SYLLABLE SSANGPIEUP-YA-HIEUH -0x95FB 0xBEB4 # HANGUL SYLLABLE SSANGPIEUP-YAE -0x95FC 0xBEB5 # HANGUL SYLLABLE SSANGPIEUP-YAE-KIYEOK -0x95FD 0xBEB6 # HANGUL SYLLABLE SSANGPIEUP-YAE-SSANGKIYEOK -0x95FE 0xBEB7 # HANGUL SYLLABLE SSANGPIEUP-YAE-KIYEOKSIOS -0x9641 0xBEB8 # HANGUL SYLLABLE SSANGPIEUP-YAE-NIEUN -0x9642 0xBEB9 # HANGUL SYLLABLE SSANGPIEUP-YAE-NIEUNCIEUC -0x9643 0xBEBA # HANGUL SYLLABLE SSANGPIEUP-YAE-NIEUNHIEUH -0x9644 0xBEBB # HANGUL SYLLABLE SSANGPIEUP-YAE-TIKEUT -0x9645 0xBEBC # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEUL -0x9646 0xBEBD # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULKIYEOK -0x9647 0xBEBE # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULMIEUM -0x9648 0xBEBF # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULPIEUP -0x9649 0xBEC0 # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULSIOS -0x964A 0xBEC1 # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULTHIEUTH -0x964B 0xBEC2 # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULPHIEUPH -0x964C 0xBEC3 # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULHIEUH -0x964D 0xBEC4 # HANGUL SYLLABLE SSANGPIEUP-YAE-MIEUM -0x964E 0xBEC5 # HANGUL SYLLABLE SSANGPIEUP-YAE-PIEUP -0x964F 0xBEC6 # HANGUL SYLLABLE SSANGPIEUP-YAE-PIEUPSIOS -0x9650 0xBEC7 # HANGUL SYLLABLE SSANGPIEUP-YAE-SIOS -0x9651 0xBEC8 # HANGUL SYLLABLE SSANGPIEUP-YAE-SSANGSIOS -0x9652 0xBEC9 # HANGUL SYLLABLE SSANGPIEUP-YAE-IEUNG -0x9653 0xBECA # HANGUL SYLLABLE SSANGPIEUP-YAE-CIEUC -0x9654 0xBECB # HANGUL SYLLABLE SSANGPIEUP-YAE-CHIEUCH -0x9655 0xBECC # HANGUL SYLLABLE SSANGPIEUP-YAE-KHIEUKH -0x9656 0xBECD # HANGUL SYLLABLE SSANGPIEUP-YAE-THIEUTH -0x9657 0xBECE # HANGUL SYLLABLE SSANGPIEUP-YAE-PHIEUPH -0x9658 0xBECF # HANGUL SYLLABLE SSANGPIEUP-YAE-HIEUH -0x9659 0xBED2 # HANGUL SYLLABLE SSANGPIEUP-EO-SSANGKIYEOK -0x965A 0xBED3 # HANGUL SYLLABLE SSANGPIEUP-EO-KIYEOKSIOS -0x9661 0xBED5 # HANGUL SYLLABLE SSANGPIEUP-EO-NIEUNCIEUC -0x9662 0xBED6 # HANGUL SYLLABLE SSANGPIEUP-EO-NIEUNHIEUH -0x9663 0xBED9 # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULKIYEOK -0x9664 0xBEDA # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULMIEUM -0x9665 0xBEDB # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULPIEUP -0x9666 0xBEDC # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULSIOS -0x9667 0xBEDD # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULTHIEUTH -0x9668 0xBEDE # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULPHIEUPH -0x9669 0xBEDF # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULHIEUH -0x966A 0xBEE1 # HANGUL SYLLABLE SSANGPIEUP-EO-PIEUP -0x966B 0xBEE2 # HANGUL SYLLABLE SSANGPIEUP-EO-PIEUPSIOS -0x966C 0xBEE6 # HANGUL SYLLABLE SSANGPIEUP-EO-CIEUC -0x966D 0xBEE7 # HANGUL SYLLABLE SSANGPIEUP-EO-CHIEUCH -0x966E 0xBEE8 # HANGUL SYLLABLE SSANGPIEUP-EO-KHIEUKH -0x966F 0xBEE9 # HANGUL SYLLABLE SSANGPIEUP-EO-THIEUTH -0x9670 0xBEEA # HANGUL SYLLABLE SSANGPIEUP-EO-PHIEUPH -0x9671 0xBEEB # HANGUL SYLLABLE SSANGPIEUP-EO-HIEUH -0x9672 0xBEED # HANGUL SYLLABLE SSANGPIEUP-E-KIYEOK -0x9673 0xBEEE # HANGUL SYLLABLE SSANGPIEUP-E-SSANGKIYEOK -0x9674 0xBEEF # HANGUL SYLLABLE SSANGPIEUP-E-KIYEOKSIOS -0x9675 0xBEF0 # HANGUL SYLLABLE SSANGPIEUP-E-NIEUN -0x9676 0xBEF1 # HANGUL SYLLABLE SSANGPIEUP-E-NIEUNCIEUC -0x9677 0xBEF2 # HANGUL SYLLABLE SSANGPIEUP-E-NIEUNHIEUH -0x9678 0xBEF3 # HANGUL SYLLABLE SSANGPIEUP-E-TIKEUT -0x9679 0xBEF4 # HANGUL SYLLABLE SSANGPIEUP-E-RIEUL -0x967A 0xBEF5 # HANGUL SYLLABLE SSANGPIEUP-E-RIEULKIYEOK -0x9681 0xBEF6 # HANGUL SYLLABLE SSANGPIEUP-E-RIEULMIEUM -0x9682 0xBEF7 # HANGUL SYLLABLE SSANGPIEUP-E-RIEULPIEUP -0x9683 0xBEF8 # HANGUL SYLLABLE SSANGPIEUP-E-RIEULSIOS -0x9684 0xBEF9 # HANGUL SYLLABLE SSANGPIEUP-E-RIEULTHIEUTH -0x9685 0xBEFA # HANGUL SYLLABLE SSANGPIEUP-E-RIEULPHIEUPH -0x9686 0xBEFB # HANGUL SYLLABLE SSANGPIEUP-E-RIEULHIEUH -0x9687 0xBEFC # HANGUL SYLLABLE SSANGPIEUP-E-MIEUM -0x9688 0xBEFD # HANGUL SYLLABLE SSANGPIEUP-E-PIEUP -0x9689 0xBEFE # HANGUL SYLLABLE SSANGPIEUP-E-PIEUPSIOS -0x968A 0xBEFF # HANGUL SYLLABLE SSANGPIEUP-E-SIOS -0x968B 0xBF00 # HANGUL SYLLABLE SSANGPIEUP-E-SSANGSIOS -0x968C 0xBF02 # HANGUL SYLLABLE SSANGPIEUP-E-CIEUC -0x968D 0xBF03 # HANGUL SYLLABLE SSANGPIEUP-E-CHIEUCH -0x968E 0xBF04 # HANGUL SYLLABLE SSANGPIEUP-E-KHIEUKH -0x968F 0xBF05 # HANGUL SYLLABLE SSANGPIEUP-E-THIEUTH -0x9690 0xBF06 # HANGUL SYLLABLE SSANGPIEUP-E-PHIEUPH -0x9691 0xBF07 # HANGUL SYLLABLE SSANGPIEUP-E-HIEUH -0x9692 0xBF0A # HANGUL SYLLABLE SSANGPIEUP-YEO-SSANGKIYEOK -0x9693 0xBF0B # HANGUL SYLLABLE SSANGPIEUP-YEO-KIYEOKSIOS -0x9694 0xBF0C # HANGUL SYLLABLE SSANGPIEUP-YEO-NIEUN -0x9695 0xBF0D # HANGUL SYLLABLE SSANGPIEUP-YEO-NIEUNCIEUC -0x9696 0xBF0E # HANGUL SYLLABLE SSANGPIEUP-YEO-NIEUNHIEUH -0x9697 0xBF0F # HANGUL SYLLABLE SSANGPIEUP-YEO-TIKEUT -0x9698 0xBF10 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEUL -0x9699 0xBF11 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULKIYEOK -0x969A 0xBF12 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULMIEUM -0x969B 0xBF13 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULPIEUP -0x969C 0xBF14 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULSIOS -0x969D 0xBF15 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULTHIEUTH -0x969E 0xBF16 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULPHIEUPH -0x969F 0xBF17 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULHIEUH -0x96A0 0xBF1A # HANGUL SYLLABLE SSANGPIEUP-YEO-PIEUPSIOS -0x96A1 0xBF1E # HANGUL SYLLABLE SSANGPIEUP-YEO-CIEUC -0x96A2 0xBF1F # HANGUL SYLLABLE SSANGPIEUP-YEO-CHIEUCH -0x96A3 0xBF20 # HANGUL SYLLABLE SSANGPIEUP-YEO-KHIEUKH -0x96A4 0xBF21 # HANGUL SYLLABLE SSANGPIEUP-YEO-THIEUTH -0x96A5 0xBF22 # HANGUL SYLLABLE SSANGPIEUP-YEO-PHIEUPH -0x96A6 0xBF23 # HANGUL SYLLABLE SSANGPIEUP-YEO-HIEUH -0x96A7 0xBF24 # HANGUL SYLLABLE SSANGPIEUP-YE -0x96A8 0xBF25 # HANGUL SYLLABLE SSANGPIEUP-YE-KIYEOK -0x96A9 0xBF26 # HANGUL SYLLABLE SSANGPIEUP-YE-SSANGKIYEOK -0x96AA 0xBF27 # HANGUL SYLLABLE SSANGPIEUP-YE-KIYEOKSIOS -0x96AB 0xBF28 # HANGUL SYLLABLE SSANGPIEUP-YE-NIEUN -0x96AC 0xBF29 # HANGUL SYLLABLE SSANGPIEUP-YE-NIEUNCIEUC -0x96AD 0xBF2A # HANGUL SYLLABLE SSANGPIEUP-YE-NIEUNHIEUH -0x96AE 0xBF2B # HANGUL SYLLABLE SSANGPIEUP-YE-TIKEUT -0x96AF 0xBF2C # HANGUL SYLLABLE SSANGPIEUP-YE-RIEUL -0x96B0 0xBF2D # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULKIYEOK -0x96B1 0xBF2E # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULMIEUM -0x96B2 0xBF2F # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULPIEUP -0x96B3 0xBF30 # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULSIOS -0x96B4 0xBF31 # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULTHIEUTH -0x96B5 0xBF32 # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULPHIEUPH -0x96B6 0xBF33 # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULHIEUH -0x96B7 0xBF34 # HANGUL SYLLABLE SSANGPIEUP-YE-MIEUM -0x96B8 0xBF35 # HANGUL SYLLABLE SSANGPIEUP-YE-PIEUP -0x96B9 0xBF36 # HANGUL SYLLABLE SSANGPIEUP-YE-PIEUPSIOS -0x96BA 0xBF37 # HANGUL SYLLABLE SSANGPIEUP-YE-SIOS -0x96BB 0xBF38 # HANGUL SYLLABLE SSANGPIEUP-YE-SSANGSIOS -0x96BC 0xBF39 # HANGUL SYLLABLE SSANGPIEUP-YE-IEUNG -0x96BD 0xBF3A # HANGUL SYLLABLE SSANGPIEUP-YE-CIEUC -0x96BE 0xBF3B # HANGUL SYLLABLE SSANGPIEUP-YE-CHIEUCH -0x96BF 0xBF3C # HANGUL SYLLABLE SSANGPIEUP-YE-KHIEUKH -0x96C0 0xBF3D # HANGUL SYLLABLE SSANGPIEUP-YE-THIEUTH -0x96C1 0xBF3E # HANGUL SYLLABLE SSANGPIEUP-YE-PHIEUPH -0x96C2 0xBF3F # HANGUL SYLLABLE SSANGPIEUP-YE-HIEUH -0x96C3 0xBF42 # HANGUL SYLLABLE SSANGPIEUP-O-SSANGKIYEOK -0x96C4 0xBF43 # HANGUL SYLLABLE SSANGPIEUP-O-KIYEOKSIOS -0x96C5 0xBF45 # HANGUL SYLLABLE SSANGPIEUP-O-NIEUNCIEUC -0x96C6 0xBF46 # HANGUL SYLLABLE SSANGPIEUP-O-NIEUNHIEUH -0x96C7 0xBF47 # HANGUL SYLLABLE SSANGPIEUP-O-TIKEUT -0x96C8 0xBF49 # HANGUL SYLLABLE SSANGPIEUP-O-RIEULKIYEOK -0x96C9 0xBF4A # HANGUL SYLLABLE SSANGPIEUP-O-RIEULMIEUM -0x96CA 0xBF4B # HANGUL SYLLABLE SSANGPIEUP-O-RIEULPIEUP -0x96CB 0xBF4C # HANGUL SYLLABLE SSANGPIEUP-O-RIEULSIOS -0x96CC 0xBF4D # HANGUL SYLLABLE SSANGPIEUP-O-RIEULTHIEUTH -0x96CD 0xBF4E # HANGUL SYLLABLE SSANGPIEUP-O-RIEULPHIEUPH -0x96CE 0xBF4F # HANGUL SYLLABLE SSANGPIEUP-O-RIEULHIEUH -0x96CF 0xBF52 # HANGUL SYLLABLE SSANGPIEUP-O-PIEUPSIOS -0x96D0 0xBF53 # HANGUL SYLLABLE SSANGPIEUP-O-SIOS -0x96D1 0xBF54 # HANGUL SYLLABLE SSANGPIEUP-O-SSANGSIOS -0x96D2 0xBF56 # HANGUL SYLLABLE SSANGPIEUP-O-CIEUC -0x96D3 0xBF57 # HANGUL SYLLABLE SSANGPIEUP-O-CHIEUCH -0x96D4 0xBF58 # HANGUL SYLLABLE SSANGPIEUP-O-KHIEUKH -0x96D5 0xBF59 # HANGUL SYLLABLE SSANGPIEUP-O-THIEUTH -0x96D6 0xBF5A # HANGUL SYLLABLE SSANGPIEUP-O-PHIEUPH -0x96D7 0xBF5B # HANGUL SYLLABLE SSANGPIEUP-O-HIEUH -0x96D8 0xBF5C # HANGUL SYLLABLE SSANGPIEUP-WA -0x96D9 0xBF5D # HANGUL SYLLABLE SSANGPIEUP-WA-KIYEOK -0x96DA 0xBF5E # HANGUL SYLLABLE SSANGPIEUP-WA-SSANGKIYEOK -0x96DB 0xBF5F # HANGUL SYLLABLE SSANGPIEUP-WA-KIYEOKSIOS -0x96DC 0xBF60 # HANGUL SYLLABLE SSANGPIEUP-WA-NIEUN -0x96DD 0xBF61 # HANGUL SYLLABLE SSANGPIEUP-WA-NIEUNCIEUC -0x96DE 0xBF62 # HANGUL SYLLABLE SSANGPIEUP-WA-NIEUNHIEUH -0x96DF 0xBF63 # HANGUL SYLLABLE SSANGPIEUP-WA-TIKEUT -0x96E0 0xBF64 # HANGUL SYLLABLE SSANGPIEUP-WA-RIEUL -0x96E1 0xBF65 # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULKIYEOK -0x96E2 0xBF66 # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULMIEUM -0x96E3 0xBF67 # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULPIEUP -0x96E4 0xBF68 # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULSIOS -0x96E5 0xBF69 # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULTHIEUTH -0x96E6 0xBF6A # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULPHIEUPH -0x96E7 0xBF6B # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULHIEUH -0x96E8 0xBF6C # HANGUL SYLLABLE SSANGPIEUP-WA-MIEUM -0x96E9 0xBF6D # HANGUL SYLLABLE SSANGPIEUP-WA-PIEUP -0x96EA 0xBF6E # HANGUL SYLLABLE SSANGPIEUP-WA-PIEUPSIOS -0x96EB 0xBF6F # HANGUL SYLLABLE SSANGPIEUP-WA-SIOS -0x96EC 0xBF70 # HANGUL SYLLABLE SSANGPIEUP-WA-SSANGSIOS -0x96ED 0xBF71 # HANGUL SYLLABLE SSANGPIEUP-WA-IEUNG -0x96EE 0xBF72 # HANGUL SYLLABLE SSANGPIEUP-WA-CIEUC -0x96EF 0xBF73 # HANGUL SYLLABLE SSANGPIEUP-WA-CHIEUCH -0x96F0 0xBF74 # HANGUL SYLLABLE SSANGPIEUP-WA-KHIEUKH -0x96F1 0xBF75 # HANGUL SYLLABLE SSANGPIEUP-WA-THIEUTH -0x96F2 0xBF76 # HANGUL SYLLABLE SSANGPIEUP-WA-PHIEUPH -0x96F3 0xBF77 # HANGUL SYLLABLE SSANGPIEUP-WA-HIEUH -0x96F4 0xBF78 # HANGUL SYLLABLE SSANGPIEUP-WAE -0x96F5 0xBF79 # HANGUL SYLLABLE SSANGPIEUP-WAE-KIYEOK -0x96F6 0xBF7A # HANGUL SYLLABLE SSANGPIEUP-WAE-SSANGKIYEOK -0x96F7 0xBF7B # HANGUL SYLLABLE SSANGPIEUP-WAE-KIYEOKSIOS -0x96F8 0xBF7C # HANGUL SYLLABLE SSANGPIEUP-WAE-NIEUN -0x96F9 0xBF7D # HANGUL SYLLABLE SSANGPIEUP-WAE-NIEUNCIEUC -0x96FA 0xBF7E # HANGUL SYLLABLE SSANGPIEUP-WAE-NIEUNHIEUH -0x96FB 0xBF7F # HANGUL SYLLABLE SSANGPIEUP-WAE-TIKEUT -0x96FC 0xBF80 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEUL -0x96FD 0xBF81 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULKIYEOK -0x96FE 0xBF82 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULMIEUM -0x9741 0xBF83 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULPIEUP -0x9742 0xBF84 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULSIOS -0x9743 0xBF85 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULTHIEUTH -0x9744 0xBF86 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULPHIEUPH -0x9745 0xBF87 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULHIEUH -0x9746 0xBF88 # HANGUL SYLLABLE SSANGPIEUP-WAE-MIEUM -0x9747 0xBF89 # HANGUL SYLLABLE SSANGPIEUP-WAE-PIEUP -0x9748 0xBF8A # HANGUL SYLLABLE SSANGPIEUP-WAE-PIEUPSIOS -0x9749 0xBF8B # HANGUL SYLLABLE SSANGPIEUP-WAE-SIOS -0x974A 0xBF8C # HANGUL SYLLABLE SSANGPIEUP-WAE-SSANGSIOS -0x974B 0xBF8D # HANGUL SYLLABLE SSANGPIEUP-WAE-IEUNG -0x974C 0xBF8E # HANGUL SYLLABLE SSANGPIEUP-WAE-CIEUC -0x974D 0xBF8F # HANGUL SYLLABLE SSANGPIEUP-WAE-CHIEUCH -0x974E 0xBF90 # HANGUL SYLLABLE SSANGPIEUP-WAE-KHIEUKH -0x974F 0xBF91 # HANGUL SYLLABLE SSANGPIEUP-WAE-THIEUTH -0x9750 0xBF92 # HANGUL SYLLABLE SSANGPIEUP-WAE-PHIEUPH -0x9751 0xBF93 # HANGUL SYLLABLE SSANGPIEUP-WAE-HIEUH -0x9752 0xBF95 # HANGUL SYLLABLE SSANGPIEUP-OE-KIYEOK -0x9753 0xBF96 # HANGUL SYLLABLE SSANGPIEUP-OE-SSANGKIYEOK -0x9754 0xBF97 # HANGUL SYLLABLE SSANGPIEUP-OE-KIYEOKSIOS -0x9755 0xBF98 # HANGUL SYLLABLE SSANGPIEUP-OE-NIEUN -0x9756 0xBF99 # HANGUL SYLLABLE SSANGPIEUP-OE-NIEUNCIEUC -0x9757 0xBF9A # HANGUL SYLLABLE SSANGPIEUP-OE-NIEUNHIEUH -0x9758 0xBF9B # HANGUL SYLLABLE SSANGPIEUP-OE-TIKEUT -0x9759 0xBF9C # HANGUL SYLLABLE SSANGPIEUP-OE-RIEUL -0x975A 0xBF9D # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULKIYEOK -0x9761 0xBF9E # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULMIEUM -0x9762 0xBF9F # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULPIEUP -0x9763 0xBFA0 # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULSIOS -0x9764 0xBFA1 # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULTHIEUTH -0x9765 0xBFA2 # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULPHIEUPH -0x9766 0xBFA3 # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULHIEUH -0x9767 0xBFA4 # HANGUL SYLLABLE SSANGPIEUP-OE-MIEUM -0x9768 0xBFA5 # HANGUL SYLLABLE SSANGPIEUP-OE-PIEUP -0x9769 0xBFA6 # HANGUL SYLLABLE SSANGPIEUP-OE-PIEUPSIOS -0x976A 0xBFA7 # HANGUL SYLLABLE SSANGPIEUP-OE-SIOS -0x976B 0xBFA8 # HANGUL SYLLABLE SSANGPIEUP-OE-SSANGSIOS -0x976C 0xBFA9 # HANGUL SYLLABLE SSANGPIEUP-OE-IEUNG -0x976D 0xBFAA # HANGUL SYLLABLE SSANGPIEUP-OE-CIEUC -0x976E 0xBFAB # HANGUL SYLLABLE SSANGPIEUP-OE-CHIEUCH -0x976F 0xBFAC # HANGUL SYLLABLE SSANGPIEUP-OE-KHIEUKH -0x9770 0xBFAD # HANGUL SYLLABLE SSANGPIEUP-OE-THIEUTH -0x9771 0xBFAE # HANGUL SYLLABLE SSANGPIEUP-OE-PHIEUPH -0x9772 0xBFAF # HANGUL SYLLABLE SSANGPIEUP-OE-HIEUH -0x9773 0xBFB1 # HANGUL SYLLABLE SSANGPIEUP-YO-KIYEOK -0x9774 0xBFB2 # HANGUL SYLLABLE SSANGPIEUP-YO-SSANGKIYEOK -0x9775 0xBFB3 # HANGUL SYLLABLE SSANGPIEUP-YO-KIYEOKSIOS -0x9776 0xBFB4 # HANGUL SYLLABLE SSANGPIEUP-YO-NIEUN -0x9777 0xBFB5 # HANGUL SYLLABLE SSANGPIEUP-YO-NIEUNCIEUC -0x9778 0xBFB6 # HANGUL SYLLABLE SSANGPIEUP-YO-NIEUNHIEUH -0x9779 0xBFB7 # HANGUL SYLLABLE SSANGPIEUP-YO-TIKEUT -0x977A 0xBFB8 # HANGUL SYLLABLE SSANGPIEUP-YO-RIEUL -0x9781 0xBFB9 # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULKIYEOK -0x9782 0xBFBA # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULMIEUM -0x9783 0xBFBB # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULPIEUP -0x9784 0xBFBC # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULSIOS -0x9785 0xBFBD # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULTHIEUTH -0x9786 0xBFBE # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULPHIEUPH -0x9787 0xBFBF # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULHIEUH -0x9788 0xBFC0 # HANGUL SYLLABLE SSANGPIEUP-YO-MIEUM -0x9789 0xBFC1 # HANGUL SYLLABLE SSANGPIEUP-YO-PIEUP -0x978A 0xBFC2 # HANGUL SYLLABLE SSANGPIEUP-YO-PIEUPSIOS -0x978B 0xBFC3 # HANGUL SYLLABLE SSANGPIEUP-YO-SIOS -0x978C 0xBFC4 # HANGUL SYLLABLE SSANGPIEUP-YO-SSANGSIOS -0x978D 0xBFC6 # HANGUL SYLLABLE SSANGPIEUP-YO-CIEUC -0x978E 0xBFC7 # HANGUL SYLLABLE SSANGPIEUP-YO-CHIEUCH -0x978F 0xBFC8 # HANGUL SYLLABLE SSANGPIEUP-YO-KHIEUKH -0x9790 0xBFC9 # HANGUL SYLLABLE SSANGPIEUP-YO-THIEUTH -0x9791 0xBFCA # HANGUL SYLLABLE SSANGPIEUP-YO-PHIEUPH -0x9792 0xBFCB # HANGUL SYLLABLE SSANGPIEUP-YO-HIEUH -0x9793 0xBFCE # HANGUL SYLLABLE SSANGPIEUP-U-SSANGKIYEOK -0x9794 0xBFCF # HANGUL SYLLABLE SSANGPIEUP-U-KIYEOKSIOS -0x9795 0xBFD1 # HANGUL SYLLABLE SSANGPIEUP-U-NIEUNCIEUC -0x9796 0xBFD2 # HANGUL SYLLABLE SSANGPIEUP-U-NIEUNHIEUH -0x9797 0xBFD3 # HANGUL SYLLABLE SSANGPIEUP-U-TIKEUT -0x9798 0xBFD5 # HANGUL SYLLABLE SSANGPIEUP-U-RIEULKIYEOK -0x9799 0xBFD6 # HANGUL SYLLABLE SSANGPIEUP-U-RIEULMIEUM -0x979A 0xBFD7 # HANGUL SYLLABLE SSANGPIEUP-U-RIEULPIEUP -0x979B 0xBFD8 # HANGUL SYLLABLE SSANGPIEUP-U-RIEULSIOS -0x979C 0xBFD9 # HANGUL SYLLABLE SSANGPIEUP-U-RIEULTHIEUTH -0x979D 0xBFDA # HANGUL SYLLABLE SSANGPIEUP-U-RIEULPHIEUPH -0x979E 0xBFDB # HANGUL SYLLABLE SSANGPIEUP-U-RIEULHIEUH -0x979F 0xBFDD # HANGUL SYLLABLE SSANGPIEUP-U-PIEUP -0x97A0 0xBFDE # HANGUL SYLLABLE SSANGPIEUP-U-PIEUPSIOS -0x97A1 0xBFE0 # HANGUL SYLLABLE SSANGPIEUP-U-SSANGSIOS -0x97A2 0xBFE2 # HANGUL SYLLABLE SSANGPIEUP-U-CIEUC -0x97A3 0xBFE3 # HANGUL SYLLABLE SSANGPIEUP-U-CHIEUCH -0x97A4 0xBFE4 # HANGUL SYLLABLE SSANGPIEUP-U-KHIEUKH -0x97A5 0xBFE5 # HANGUL SYLLABLE SSANGPIEUP-U-THIEUTH -0x97A6 0xBFE6 # HANGUL SYLLABLE SSANGPIEUP-U-PHIEUPH -0x97A7 0xBFE7 # HANGUL SYLLABLE SSANGPIEUP-U-HIEUH -0x97A8 0xBFE8 # HANGUL SYLLABLE SSANGPIEUP-WEO -0x97A9 0xBFE9 # HANGUL SYLLABLE SSANGPIEUP-WEO-KIYEOK -0x97AA 0xBFEA # HANGUL SYLLABLE SSANGPIEUP-WEO-SSANGKIYEOK -0x97AB 0xBFEB # HANGUL SYLLABLE SSANGPIEUP-WEO-KIYEOKSIOS -0x97AC 0xBFEC # HANGUL SYLLABLE SSANGPIEUP-WEO-NIEUN -0x97AD 0xBFED # HANGUL SYLLABLE SSANGPIEUP-WEO-NIEUNCIEUC -0x97AE 0xBFEE # HANGUL SYLLABLE SSANGPIEUP-WEO-NIEUNHIEUH -0x97AF 0xBFEF # HANGUL SYLLABLE SSANGPIEUP-WEO-TIKEUT -0x97B0 0xBFF0 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEUL -0x97B1 0xBFF1 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULKIYEOK -0x97B2 0xBFF2 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULMIEUM -0x97B3 0xBFF3 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULPIEUP -0x97B4 0xBFF4 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULSIOS -0x97B5 0xBFF5 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULTHIEUTH -0x97B6 0xBFF6 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULPHIEUPH -0x97B7 0xBFF7 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULHIEUH -0x97B8 0xBFF8 # HANGUL SYLLABLE SSANGPIEUP-WEO-MIEUM -0x97B9 0xBFF9 # HANGUL SYLLABLE SSANGPIEUP-WEO-PIEUP -0x97BA 0xBFFA # HANGUL SYLLABLE SSANGPIEUP-WEO-PIEUPSIOS -0x97BB 0xBFFB # HANGUL SYLLABLE SSANGPIEUP-WEO-SIOS -0x97BC 0xBFFC # HANGUL SYLLABLE SSANGPIEUP-WEO-SSANGSIOS -0x97BD 0xBFFD # HANGUL SYLLABLE SSANGPIEUP-WEO-IEUNG -0x97BE 0xBFFE # HANGUL SYLLABLE SSANGPIEUP-WEO-CIEUC -0x97BF 0xBFFF # HANGUL SYLLABLE SSANGPIEUP-WEO-CHIEUCH -0x97C0 0xC000 # HANGUL SYLLABLE SSANGPIEUP-WEO-KHIEUKH -0x97C1 0xC001 # HANGUL SYLLABLE SSANGPIEUP-WEO-THIEUTH -0x97C2 0xC002 # HANGUL SYLLABLE SSANGPIEUP-WEO-PHIEUPH -0x97C3 0xC003 # HANGUL SYLLABLE SSANGPIEUP-WEO-HIEUH -0x97C4 0xC004 # HANGUL SYLLABLE SSANGPIEUP-WE -0x97C5 0xC005 # HANGUL SYLLABLE SSANGPIEUP-WE-KIYEOK -0x97C6 0xC006 # HANGUL SYLLABLE SSANGPIEUP-WE-SSANGKIYEOK -0x97C7 0xC007 # HANGUL SYLLABLE SSANGPIEUP-WE-KIYEOKSIOS -0x97C8 0xC008 # HANGUL SYLLABLE SSANGPIEUP-WE-NIEUN -0x97C9 0xC009 # HANGUL SYLLABLE SSANGPIEUP-WE-NIEUNCIEUC -0x97CA 0xC00A # HANGUL SYLLABLE SSANGPIEUP-WE-NIEUNHIEUH -0x97CB 0xC00B # HANGUL SYLLABLE SSANGPIEUP-WE-TIKEUT -0x97CC 0xC00C # HANGUL SYLLABLE SSANGPIEUP-WE-RIEUL -0x97CD 0xC00D # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULKIYEOK -0x97CE 0xC00E # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULMIEUM -0x97CF 0xC00F # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULPIEUP -0x97D0 0xC010 # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULSIOS -0x97D1 0xC011 # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULTHIEUTH -0x97D2 0xC012 # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULPHIEUPH -0x97D3 0xC013 # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULHIEUH -0x97D4 0xC014 # HANGUL SYLLABLE SSANGPIEUP-WE-MIEUM -0x97D5 0xC015 # HANGUL SYLLABLE SSANGPIEUP-WE-PIEUP -0x97D6 0xC016 # HANGUL SYLLABLE SSANGPIEUP-WE-PIEUPSIOS -0x97D7 0xC017 # HANGUL SYLLABLE SSANGPIEUP-WE-SIOS -0x97D8 0xC018 # HANGUL SYLLABLE SSANGPIEUP-WE-SSANGSIOS -0x97D9 0xC019 # HANGUL SYLLABLE SSANGPIEUP-WE-IEUNG -0x97DA 0xC01A # HANGUL SYLLABLE SSANGPIEUP-WE-CIEUC -0x97DB 0xC01B # HANGUL SYLLABLE SSANGPIEUP-WE-CHIEUCH -0x97DC 0xC01C # HANGUL SYLLABLE SSANGPIEUP-WE-KHIEUKH -0x97DD 0xC01D # HANGUL SYLLABLE SSANGPIEUP-WE-THIEUTH -0x97DE 0xC01E # HANGUL SYLLABLE SSANGPIEUP-WE-PHIEUPH -0x97DF 0xC01F # HANGUL SYLLABLE SSANGPIEUP-WE-HIEUH -0x97E0 0xC020 # HANGUL SYLLABLE SSANGPIEUP-WI -0x97E1 0xC021 # HANGUL SYLLABLE SSANGPIEUP-WI-KIYEOK -0x97E2 0xC022 # HANGUL SYLLABLE SSANGPIEUP-WI-SSANGKIYEOK -0x97E3 0xC023 # HANGUL SYLLABLE SSANGPIEUP-WI-KIYEOKSIOS -0x97E4 0xC024 # HANGUL SYLLABLE SSANGPIEUP-WI-NIEUN -0x97E5 0xC025 # HANGUL SYLLABLE SSANGPIEUP-WI-NIEUNCIEUC -0x97E6 0xC026 # HANGUL SYLLABLE SSANGPIEUP-WI-NIEUNHIEUH -0x97E7 0xC027 # HANGUL SYLLABLE SSANGPIEUP-WI-TIKEUT -0x97E8 0xC028 # HANGUL SYLLABLE SSANGPIEUP-WI-RIEUL -0x97E9 0xC029 # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULKIYEOK -0x97EA 0xC02A # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULMIEUM -0x97EB 0xC02B # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULPIEUP -0x97EC 0xC02C # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULSIOS -0x97ED 0xC02D # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULTHIEUTH -0x97EE 0xC02E # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULPHIEUPH -0x97EF 0xC02F # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULHIEUH -0x97F0 0xC030 # HANGUL SYLLABLE SSANGPIEUP-WI-MIEUM -0x97F1 0xC031 # HANGUL SYLLABLE SSANGPIEUP-WI-PIEUP -0x97F2 0xC032 # HANGUL SYLLABLE SSANGPIEUP-WI-PIEUPSIOS -0x97F3 0xC033 # HANGUL SYLLABLE SSANGPIEUP-WI-SIOS -0x97F4 0xC034 # HANGUL SYLLABLE SSANGPIEUP-WI-SSANGSIOS -0x97F5 0xC035 # HANGUL SYLLABLE SSANGPIEUP-WI-IEUNG -0x97F6 0xC036 # HANGUL SYLLABLE SSANGPIEUP-WI-CIEUC -0x97F7 0xC037 # HANGUL SYLLABLE SSANGPIEUP-WI-CHIEUCH -0x97F8 0xC038 # HANGUL SYLLABLE SSANGPIEUP-WI-KHIEUKH -0x97F9 0xC039 # HANGUL SYLLABLE SSANGPIEUP-WI-THIEUTH -0x97FA 0xC03A # HANGUL SYLLABLE SSANGPIEUP-WI-PHIEUPH -0x97FB 0xC03B # HANGUL SYLLABLE SSANGPIEUP-WI-HIEUH -0x97FC 0xC03D # HANGUL SYLLABLE SSANGPIEUP-YU-KIYEOK -0x97FD 0xC03E # HANGUL SYLLABLE SSANGPIEUP-YU-SSANGKIYEOK -0x97FE 0xC03F # HANGUL SYLLABLE SSANGPIEUP-YU-KIYEOKSIOS -0x9841 0xC040 # HANGUL SYLLABLE SSANGPIEUP-YU-NIEUN -0x9842 0xC041 # HANGUL SYLLABLE SSANGPIEUP-YU-NIEUNCIEUC -0x9843 0xC042 # HANGUL SYLLABLE SSANGPIEUP-YU-NIEUNHIEUH -0x9844 0xC043 # HANGUL SYLLABLE SSANGPIEUP-YU-TIKEUT -0x9845 0xC044 # HANGUL SYLLABLE SSANGPIEUP-YU-RIEUL -0x9846 0xC045 # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULKIYEOK -0x9847 0xC046 # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULMIEUM -0x9848 0xC047 # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULPIEUP -0x9849 0xC048 # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULSIOS -0x984A 0xC049 # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULTHIEUTH -0x984B 0xC04A # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULPHIEUPH -0x984C 0xC04B # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULHIEUH -0x984D 0xC04C # HANGUL SYLLABLE SSANGPIEUP-YU-MIEUM -0x984E 0xC04D # HANGUL SYLLABLE SSANGPIEUP-YU-PIEUP -0x984F 0xC04E # HANGUL SYLLABLE SSANGPIEUP-YU-PIEUPSIOS -0x9850 0xC04F # HANGUL SYLLABLE SSANGPIEUP-YU-SIOS -0x9851 0xC050 # HANGUL SYLLABLE SSANGPIEUP-YU-SSANGSIOS -0x9852 0xC052 # HANGUL SYLLABLE SSANGPIEUP-YU-CIEUC -0x9853 0xC053 # HANGUL SYLLABLE SSANGPIEUP-YU-CHIEUCH -0x9854 0xC054 # HANGUL SYLLABLE SSANGPIEUP-YU-KHIEUKH -0x9855 0xC055 # HANGUL SYLLABLE SSANGPIEUP-YU-THIEUTH -0x9856 0xC056 # HANGUL SYLLABLE SSANGPIEUP-YU-PHIEUPH -0x9857 0xC057 # HANGUL SYLLABLE SSANGPIEUP-YU-HIEUH -0x9858 0xC059 # HANGUL SYLLABLE SSANGPIEUP-EU-KIYEOK -0x9859 0xC05A # HANGUL SYLLABLE SSANGPIEUP-EU-SSANGKIYEOK -0x985A 0xC05B # HANGUL SYLLABLE SSANGPIEUP-EU-KIYEOKSIOS -0x9861 0xC05D # HANGUL SYLLABLE SSANGPIEUP-EU-NIEUNCIEUC -0x9862 0xC05E # HANGUL SYLLABLE SSANGPIEUP-EU-NIEUNHIEUH -0x9863 0xC05F # HANGUL SYLLABLE SSANGPIEUP-EU-TIKEUT -0x9864 0xC061 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULKIYEOK -0x9865 0xC062 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULMIEUM -0x9866 0xC063 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULPIEUP -0x9867 0xC064 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULSIOS -0x9868 0xC065 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULTHIEUTH -0x9869 0xC066 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULPHIEUPH -0x986A 0xC067 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULHIEUH -0x986B 0xC06A # HANGUL SYLLABLE SSANGPIEUP-EU-PIEUPSIOS -0x986C 0xC06B # HANGUL SYLLABLE SSANGPIEUP-EU-SIOS -0x986D 0xC06C # HANGUL SYLLABLE SSANGPIEUP-EU-SSANGSIOS -0x986E 0xC06D # HANGUL SYLLABLE SSANGPIEUP-EU-IEUNG -0x986F 0xC06E # HANGUL SYLLABLE SSANGPIEUP-EU-CIEUC -0x9870 0xC06F # HANGUL SYLLABLE SSANGPIEUP-EU-CHIEUCH -0x9871 0xC070 # HANGUL SYLLABLE SSANGPIEUP-EU-KHIEUKH -0x9872 0xC071 # HANGUL SYLLABLE SSANGPIEUP-EU-THIEUTH -0x9873 0xC072 # HANGUL SYLLABLE SSANGPIEUP-EU-PHIEUPH -0x9874 0xC073 # HANGUL SYLLABLE SSANGPIEUP-EU-HIEUH -0x9875 0xC074 # HANGUL SYLLABLE SSANGPIEUP-YI -0x9876 0xC075 # HANGUL SYLLABLE SSANGPIEUP-YI-KIYEOK -0x9877 0xC076 # HANGUL SYLLABLE SSANGPIEUP-YI-SSANGKIYEOK -0x9878 0xC077 # HANGUL SYLLABLE SSANGPIEUP-YI-KIYEOKSIOS -0x9879 0xC078 # HANGUL SYLLABLE SSANGPIEUP-YI-NIEUN -0x987A 0xC079 # HANGUL SYLLABLE SSANGPIEUP-YI-NIEUNCIEUC -0x9881 0xC07A # HANGUL SYLLABLE SSANGPIEUP-YI-NIEUNHIEUH -0x9882 0xC07B # HANGUL SYLLABLE SSANGPIEUP-YI-TIKEUT -0x9883 0xC07C # HANGUL SYLLABLE SSANGPIEUP-YI-RIEUL -0x9884 0xC07D # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULKIYEOK -0x9885 0xC07E # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULMIEUM -0x9886 0xC07F # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULPIEUP -0x9887 0xC080 # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULSIOS -0x9888 0xC081 # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULTHIEUTH -0x9889 0xC082 # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULPHIEUPH -0x988A 0xC083 # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULHIEUH -0x988B 0xC084 # HANGUL SYLLABLE SSANGPIEUP-YI-MIEUM -0x988C 0xC085 # HANGUL SYLLABLE SSANGPIEUP-YI-PIEUP -0x988D 0xC086 # HANGUL SYLLABLE SSANGPIEUP-YI-PIEUPSIOS -0x988E 0xC087 # HANGUL SYLLABLE SSANGPIEUP-YI-SIOS -0x988F 0xC088 # HANGUL SYLLABLE SSANGPIEUP-YI-SSANGSIOS -0x9890 0xC089 # HANGUL SYLLABLE SSANGPIEUP-YI-IEUNG -0x9891 0xC08A # HANGUL SYLLABLE SSANGPIEUP-YI-CIEUC -0x9892 0xC08B # HANGUL SYLLABLE SSANGPIEUP-YI-CHIEUCH -0x9893 0xC08C # HANGUL SYLLABLE SSANGPIEUP-YI-KHIEUKH -0x9894 0xC08D # HANGUL SYLLABLE SSANGPIEUP-YI-THIEUTH -0x9895 0xC08E # HANGUL SYLLABLE SSANGPIEUP-YI-PHIEUPH -0x9896 0xC08F # HANGUL SYLLABLE SSANGPIEUP-YI-HIEUH -0x9897 0xC092 # HANGUL SYLLABLE SSANGPIEUP-I-SSANGKIYEOK -0x9898 0xC093 # HANGUL SYLLABLE SSANGPIEUP-I-KIYEOKSIOS -0x9899 0xC095 # HANGUL SYLLABLE SSANGPIEUP-I-NIEUNCIEUC -0x989A 0xC096 # HANGUL SYLLABLE SSANGPIEUP-I-NIEUNHIEUH -0x989B 0xC097 # HANGUL SYLLABLE SSANGPIEUP-I-TIKEUT -0x989C 0xC099 # HANGUL SYLLABLE SSANGPIEUP-I-RIEULKIYEOK -0x989D 0xC09A # HANGUL SYLLABLE SSANGPIEUP-I-RIEULMIEUM -0x989E 0xC09B # HANGUL SYLLABLE SSANGPIEUP-I-RIEULPIEUP -0x989F 0xC09C # HANGUL SYLLABLE SSANGPIEUP-I-RIEULSIOS -0x98A0 0xC09D # HANGUL SYLLABLE SSANGPIEUP-I-RIEULTHIEUTH -0x98A1 0xC09E # HANGUL SYLLABLE SSANGPIEUP-I-RIEULPHIEUPH -0x98A2 0xC09F # HANGUL SYLLABLE SSANGPIEUP-I-RIEULHIEUH -0x98A3 0xC0A2 # HANGUL SYLLABLE SSANGPIEUP-I-PIEUPSIOS -0x98A4 0xC0A4 # HANGUL SYLLABLE SSANGPIEUP-I-SSANGSIOS -0x98A5 0xC0A6 # HANGUL SYLLABLE SSANGPIEUP-I-CIEUC -0x98A6 0xC0A7 # HANGUL SYLLABLE SSANGPIEUP-I-CHIEUCH -0x98A7 0xC0A8 # HANGUL SYLLABLE SSANGPIEUP-I-KHIEUKH -0x98A8 0xC0A9 # HANGUL SYLLABLE SSANGPIEUP-I-THIEUTH -0x98A9 0xC0AA # HANGUL SYLLABLE SSANGPIEUP-I-PHIEUPH -0x98AA 0xC0AB # HANGUL SYLLABLE SSANGPIEUP-I-HIEUH -0x98AB 0xC0AE # HANGUL SYLLABLE SIOS-A-SSANGKIYEOK -0x98AC 0xC0B1 # HANGUL SYLLABLE SIOS-A-NIEUNCIEUC -0x98AD 0xC0B2 # HANGUL SYLLABLE SIOS-A-NIEUNHIEUH -0x98AE 0xC0B7 # HANGUL SYLLABLE SIOS-A-RIEULPIEUP -0x98AF 0xC0B8 # HANGUL SYLLABLE SIOS-A-RIEULSIOS -0x98B0 0xC0B9 # HANGUL SYLLABLE SIOS-A-RIEULTHIEUTH -0x98B1 0xC0BA # HANGUL SYLLABLE SIOS-A-RIEULPHIEUPH -0x98B2 0xC0BB # HANGUL SYLLABLE SIOS-A-RIEULHIEUH -0x98B3 0xC0BE # HANGUL SYLLABLE SIOS-A-PIEUPSIOS -0x98B4 0xC0C2 # HANGUL SYLLABLE SIOS-A-CIEUC -0x98B5 0xC0C3 # HANGUL SYLLABLE SIOS-A-CHIEUCH -0x98B6 0xC0C4 # HANGUL SYLLABLE SIOS-A-KHIEUKH -0x98B7 0xC0C6 # HANGUL SYLLABLE SIOS-A-PHIEUPH -0x98B8 0xC0C7 # HANGUL SYLLABLE SIOS-A-HIEUH -0x98B9 0xC0CA # HANGUL SYLLABLE SIOS-AE-SSANGKIYEOK -0x98BA 0xC0CB # HANGUL SYLLABLE SIOS-AE-KIYEOKSIOS -0x98BB 0xC0CD # HANGUL SYLLABLE SIOS-AE-NIEUNCIEUC -0x98BC 0xC0CE # HANGUL SYLLABLE SIOS-AE-NIEUNHIEUH -0x98BD 0xC0CF # HANGUL SYLLABLE SIOS-AE-TIKEUT -0x98BE 0xC0D1 # HANGUL SYLLABLE SIOS-AE-RIEULKIYEOK -0x98BF 0xC0D2 # HANGUL SYLLABLE SIOS-AE-RIEULMIEUM -0x98C0 0xC0D3 # HANGUL SYLLABLE SIOS-AE-RIEULPIEUP -0x98C1 0xC0D4 # HANGUL SYLLABLE SIOS-AE-RIEULSIOS -0x98C2 0xC0D5 # HANGUL SYLLABLE SIOS-AE-RIEULTHIEUTH -0x98C3 0xC0D6 # HANGUL SYLLABLE SIOS-AE-RIEULPHIEUPH -0x98C4 0xC0D7 # HANGUL SYLLABLE SIOS-AE-RIEULHIEUH -0x98C5 0xC0DA # HANGUL SYLLABLE SIOS-AE-PIEUPSIOS -0x98C6 0xC0DE # HANGUL SYLLABLE SIOS-AE-CIEUC -0x98C7 0xC0DF # HANGUL SYLLABLE SIOS-AE-CHIEUCH -0x98C8 0xC0E0 # HANGUL SYLLABLE SIOS-AE-KHIEUKH -0x98C9 0xC0E1 # HANGUL SYLLABLE SIOS-AE-THIEUTH -0x98CA 0xC0E2 # HANGUL SYLLABLE SIOS-AE-PHIEUPH -0x98CB 0xC0E3 # HANGUL SYLLABLE SIOS-AE-HIEUH -0x98CC 0xC0E6 # HANGUL SYLLABLE SIOS-YA-SSANGKIYEOK -0x98CD 0xC0E7 # HANGUL SYLLABLE SIOS-YA-KIYEOKSIOS -0x98CE 0xC0E9 # HANGUL SYLLABLE SIOS-YA-NIEUNCIEUC -0x98CF 0xC0EA # HANGUL SYLLABLE SIOS-YA-NIEUNHIEUH -0x98D0 0xC0EB # HANGUL SYLLABLE SIOS-YA-TIKEUT -0x98D1 0xC0ED # HANGUL SYLLABLE SIOS-YA-RIEULKIYEOK -0x98D2 0xC0EE # HANGUL SYLLABLE SIOS-YA-RIEULMIEUM -0x98D3 0xC0EF # HANGUL SYLLABLE SIOS-YA-RIEULPIEUP -0x98D4 0xC0F0 # HANGUL SYLLABLE SIOS-YA-RIEULSIOS -0x98D5 0xC0F1 # HANGUL SYLLABLE SIOS-YA-RIEULTHIEUTH -0x98D6 0xC0F2 # HANGUL SYLLABLE SIOS-YA-RIEULPHIEUPH -0x98D7 0xC0F3 # HANGUL SYLLABLE SIOS-YA-RIEULHIEUH -0x98D8 0xC0F6 # HANGUL SYLLABLE SIOS-YA-PIEUPSIOS -0x98D9 0xC0F8 # HANGUL SYLLABLE SIOS-YA-SSANGSIOS -0x98DA 0xC0FA # HANGUL SYLLABLE SIOS-YA-CIEUC -0x98DB 0xC0FB # HANGUL SYLLABLE SIOS-YA-CHIEUCH -0x98DC 0xC0FC # HANGUL SYLLABLE SIOS-YA-KHIEUKH -0x98DD 0xC0FD # HANGUL SYLLABLE SIOS-YA-THIEUTH -0x98DE 0xC0FE # HANGUL SYLLABLE SIOS-YA-PHIEUPH -0x98DF 0xC0FF # HANGUL SYLLABLE SIOS-YA-HIEUH -0x98E0 0xC101 # HANGUL SYLLABLE SIOS-YAE-KIYEOK -0x98E1 0xC102 # HANGUL SYLLABLE SIOS-YAE-SSANGKIYEOK -0x98E2 0xC103 # HANGUL SYLLABLE SIOS-YAE-KIYEOKSIOS -0x98E3 0xC105 # HANGUL SYLLABLE SIOS-YAE-NIEUNCIEUC -0x98E4 0xC106 # HANGUL SYLLABLE SIOS-YAE-NIEUNHIEUH -0x98E5 0xC107 # HANGUL SYLLABLE SIOS-YAE-TIKEUT -0x98E6 0xC109 # HANGUL SYLLABLE SIOS-YAE-RIEULKIYEOK -0x98E7 0xC10A # HANGUL SYLLABLE SIOS-YAE-RIEULMIEUM -0x98E8 0xC10B # HANGUL SYLLABLE SIOS-YAE-RIEULPIEUP -0x98E9 0xC10C # HANGUL SYLLABLE SIOS-YAE-RIEULSIOS -0x98EA 0xC10D # HANGUL SYLLABLE SIOS-YAE-RIEULTHIEUTH -0x98EB 0xC10E # HANGUL SYLLABLE SIOS-YAE-RIEULPHIEUPH -0x98EC 0xC10F # HANGUL SYLLABLE SIOS-YAE-RIEULHIEUH -0x98ED 0xC111 # HANGUL SYLLABLE SIOS-YAE-PIEUP -0x98EE 0xC112 # HANGUL SYLLABLE SIOS-YAE-PIEUPSIOS -0x98EF 0xC113 # HANGUL SYLLABLE SIOS-YAE-SIOS -0x98F0 0xC114 # HANGUL SYLLABLE SIOS-YAE-SSANGSIOS -0x98F1 0xC116 # HANGUL SYLLABLE SIOS-YAE-CIEUC -0x98F2 0xC117 # HANGUL SYLLABLE SIOS-YAE-CHIEUCH -0x98F3 0xC118 # HANGUL SYLLABLE SIOS-YAE-KHIEUKH -0x98F4 0xC119 # HANGUL SYLLABLE SIOS-YAE-THIEUTH -0x98F5 0xC11A # HANGUL SYLLABLE SIOS-YAE-PHIEUPH -0x98F6 0xC11B # HANGUL SYLLABLE SIOS-YAE-HIEUH -0x98F7 0xC121 # HANGUL SYLLABLE SIOS-EO-NIEUNCIEUC -0x98F8 0xC122 # HANGUL SYLLABLE SIOS-EO-NIEUNHIEUH -0x98F9 0xC125 # HANGUL SYLLABLE SIOS-EO-RIEULKIYEOK -0x98FA 0xC128 # HANGUL SYLLABLE SIOS-EO-RIEULSIOS -0x98FB 0xC129 # HANGUL SYLLABLE SIOS-EO-RIEULTHIEUTH -0x98FC 0xC12A # HANGUL SYLLABLE SIOS-EO-RIEULPHIEUPH -0x98FD 0xC12B # HANGUL SYLLABLE SIOS-EO-RIEULHIEUH -0x98FE 0xC12E # HANGUL SYLLABLE SIOS-EO-PIEUPSIOS -0x9941 0xC132 # HANGUL SYLLABLE SIOS-EO-CIEUC -0x9942 0xC133 # HANGUL SYLLABLE SIOS-EO-CHIEUCH -0x9943 0xC134 # HANGUL SYLLABLE SIOS-EO-KHIEUKH -0x9944 0xC135 # HANGUL SYLLABLE SIOS-EO-THIEUTH -0x9945 0xC137 # HANGUL SYLLABLE SIOS-EO-HIEUH -0x9946 0xC13A # HANGUL SYLLABLE SIOS-E-SSANGKIYEOK -0x9947 0xC13B # HANGUL SYLLABLE SIOS-E-KIYEOKSIOS -0x9948 0xC13D # HANGUL SYLLABLE SIOS-E-NIEUNCIEUC -0x9949 0xC13E # HANGUL SYLLABLE SIOS-E-NIEUNHIEUH -0x994A 0xC13F # HANGUL SYLLABLE SIOS-E-TIKEUT -0x994B 0xC141 # HANGUL SYLLABLE SIOS-E-RIEULKIYEOK -0x994C 0xC142 # HANGUL SYLLABLE SIOS-E-RIEULMIEUM -0x994D 0xC143 # HANGUL SYLLABLE SIOS-E-RIEULPIEUP -0x994E 0xC144 # HANGUL SYLLABLE SIOS-E-RIEULSIOS -0x994F 0xC145 # HANGUL SYLLABLE SIOS-E-RIEULTHIEUTH -0x9950 0xC146 # HANGUL SYLLABLE SIOS-E-RIEULPHIEUPH -0x9951 0xC147 # HANGUL SYLLABLE SIOS-E-RIEULHIEUH -0x9952 0xC14A # HANGUL SYLLABLE SIOS-E-PIEUPSIOS -0x9953 0xC14E # HANGUL SYLLABLE SIOS-E-CIEUC -0x9954 0xC14F # HANGUL SYLLABLE SIOS-E-CHIEUCH -0x9955 0xC150 # HANGUL SYLLABLE SIOS-E-KHIEUKH -0x9956 0xC151 # HANGUL SYLLABLE SIOS-E-THIEUTH -0x9957 0xC152 # HANGUL SYLLABLE SIOS-E-PHIEUPH -0x9958 0xC153 # HANGUL SYLLABLE SIOS-E-HIEUH -0x9959 0xC156 # HANGUL SYLLABLE SIOS-YEO-SSANGKIYEOK -0x995A 0xC157 # HANGUL SYLLABLE SIOS-YEO-KIYEOKSIOS -0x9961 0xC159 # HANGUL SYLLABLE SIOS-YEO-NIEUNCIEUC -0x9962 0xC15A # HANGUL SYLLABLE SIOS-YEO-NIEUNHIEUH -0x9963 0xC15B # HANGUL SYLLABLE SIOS-YEO-TIKEUT -0x9964 0xC15D # HANGUL SYLLABLE SIOS-YEO-RIEULKIYEOK -0x9965 0xC15E # HANGUL SYLLABLE SIOS-YEO-RIEULMIEUM -0x9966 0xC15F # HANGUL SYLLABLE SIOS-YEO-RIEULPIEUP -0x9967 0xC160 # HANGUL SYLLABLE SIOS-YEO-RIEULSIOS -0x9968 0xC161 # HANGUL SYLLABLE SIOS-YEO-RIEULTHIEUTH -0x9969 0xC162 # HANGUL SYLLABLE SIOS-YEO-RIEULPHIEUPH -0x996A 0xC163 # HANGUL SYLLABLE SIOS-YEO-RIEULHIEUH -0x996B 0xC166 # HANGUL SYLLABLE SIOS-YEO-PIEUPSIOS -0x996C 0xC16A # HANGUL SYLLABLE SIOS-YEO-CIEUC -0x996D 0xC16B # HANGUL SYLLABLE SIOS-YEO-CHIEUCH -0x996E 0xC16C # HANGUL SYLLABLE SIOS-YEO-KHIEUKH -0x996F 0xC16D # HANGUL SYLLABLE SIOS-YEO-THIEUTH -0x9970 0xC16E # HANGUL SYLLABLE SIOS-YEO-PHIEUPH -0x9971 0xC16F # HANGUL SYLLABLE SIOS-YEO-HIEUH -0x9972 0xC171 # HANGUL SYLLABLE SIOS-YE-KIYEOK -0x9973 0xC172 # HANGUL SYLLABLE SIOS-YE-SSANGKIYEOK -0x9974 0xC173 # HANGUL SYLLABLE SIOS-YE-KIYEOKSIOS -0x9975 0xC175 # HANGUL SYLLABLE SIOS-YE-NIEUNCIEUC -0x9976 0xC176 # HANGUL SYLLABLE SIOS-YE-NIEUNHIEUH -0x9977 0xC177 # HANGUL SYLLABLE SIOS-YE-TIKEUT -0x9978 0xC179 # HANGUL SYLLABLE SIOS-YE-RIEULKIYEOK -0x9979 0xC17A # HANGUL SYLLABLE SIOS-YE-RIEULMIEUM -0x997A 0xC17B # HANGUL SYLLABLE SIOS-YE-RIEULPIEUP -0x9981 0xC17C # HANGUL SYLLABLE SIOS-YE-RIEULSIOS -0x9982 0xC17D # HANGUL SYLLABLE SIOS-YE-RIEULTHIEUTH -0x9983 0xC17E # HANGUL SYLLABLE SIOS-YE-RIEULPHIEUPH -0x9984 0xC17F # HANGUL SYLLABLE SIOS-YE-RIEULHIEUH -0x9985 0xC180 # HANGUL SYLLABLE SIOS-YE-MIEUM -0x9986 0xC181 # HANGUL SYLLABLE SIOS-YE-PIEUP -0x9987 0xC182 # HANGUL SYLLABLE SIOS-YE-PIEUPSIOS -0x9988 0xC183 # HANGUL SYLLABLE SIOS-YE-SIOS -0x9989 0xC184 # HANGUL SYLLABLE SIOS-YE-SSANGSIOS -0x998A 0xC186 # HANGUL SYLLABLE SIOS-YE-CIEUC -0x998B 0xC187 # HANGUL SYLLABLE SIOS-YE-CHIEUCH -0x998C 0xC188 # HANGUL SYLLABLE SIOS-YE-KHIEUKH -0x998D 0xC189 # HANGUL SYLLABLE SIOS-YE-THIEUTH -0x998E 0xC18A # HANGUL SYLLABLE SIOS-YE-PHIEUPH -0x998F 0xC18B # HANGUL SYLLABLE SIOS-YE-HIEUH -0x9990 0xC18F # HANGUL SYLLABLE SIOS-O-KIYEOKSIOS -0x9991 0xC191 # HANGUL SYLLABLE SIOS-O-NIEUNCIEUC -0x9992 0xC192 # HANGUL SYLLABLE SIOS-O-NIEUNHIEUH -0x9993 0xC193 # HANGUL SYLLABLE SIOS-O-TIKEUT -0x9994 0xC195 # HANGUL SYLLABLE SIOS-O-RIEULKIYEOK -0x9995 0xC197 # HANGUL SYLLABLE SIOS-O-RIEULPIEUP -0x9996 0xC198 # HANGUL SYLLABLE SIOS-O-RIEULSIOS -0x9997 0xC199 # HANGUL SYLLABLE SIOS-O-RIEULTHIEUTH -0x9998 0xC19A # HANGUL SYLLABLE SIOS-O-RIEULPHIEUPH -0x9999 0xC19B # HANGUL SYLLABLE SIOS-O-RIEULHIEUH -0x999A 0xC19E # HANGUL SYLLABLE SIOS-O-PIEUPSIOS -0x999B 0xC1A0 # HANGUL SYLLABLE SIOS-O-SSANGSIOS -0x999C 0xC1A2 # HANGUL SYLLABLE SIOS-O-CIEUC -0x999D 0xC1A3 # HANGUL SYLLABLE SIOS-O-CHIEUCH -0x999E 0xC1A4 # HANGUL SYLLABLE SIOS-O-KHIEUKH -0x999F 0xC1A6 # HANGUL SYLLABLE SIOS-O-PHIEUPH -0x99A0 0xC1A7 # HANGUL SYLLABLE SIOS-O-HIEUH -0x99A1 0xC1AA # HANGUL SYLLABLE SIOS-WA-SSANGKIYEOK -0x99A2 0xC1AB # HANGUL SYLLABLE SIOS-WA-KIYEOKSIOS -0x99A3 0xC1AD # HANGUL SYLLABLE SIOS-WA-NIEUNCIEUC -0x99A4 0xC1AE # HANGUL SYLLABLE SIOS-WA-NIEUNHIEUH -0x99A5 0xC1AF # HANGUL SYLLABLE SIOS-WA-TIKEUT -0x99A6 0xC1B1 # HANGUL SYLLABLE SIOS-WA-RIEULKIYEOK -0x99A7 0xC1B2 # HANGUL SYLLABLE SIOS-WA-RIEULMIEUM -0x99A8 0xC1B3 # HANGUL SYLLABLE SIOS-WA-RIEULPIEUP -0x99A9 0xC1B4 # HANGUL SYLLABLE SIOS-WA-RIEULSIOS -0x99AA 0xC1B5 # HANGUL SYLLABLE SIOS-WA-RIEULTHIEUTH -0x99AB 0xC1B6 # HANGUL SYLLABLE SIOS-WA-RIEULPHIEUPH -0x99AC 0xC1B7 # HANGUL SYLLABLE SIOS-WA-RIEULHIEUH -0x99AD 0xC1B8 # HANGUL SYLLABLE SIOS-WA-MIEUM -0x99AE 0xC1B9 # HANGUL SYLLABLE SIOS-WA-PIEUP -0x99AF 0xC1BA # HANGUL SYLLABLE SIOS-WA-PIEUPSIOS -0x99B0 0xC1BB # HANGUL SYLLABLE SIOS-WA-SIOS -0x99B1 0xC1BC # HANGUL SYLLABLE SIOS-WA-SSANGSIOS -0x99B2 0xC1BE # HANGUL SYLLABLE SIOS-WA-CIEUC -0x99B3 0xC1BF # HANGUL SYLLABLE SIOS-WA-CHIEUCH -0x99B4 0xC1C0 # HANGUL SYLLABLE SIOS-WA-KHIEUKH -0x99B5 0xC1C1 # HANGUL SYLLABLE SIOS-WA-THIEUTH -0x99B6 0xC1C2 # HANGUL SYLLABLE SIOS-WA-PHIEUPH -0x99B7 0xC1C3 # HANGUL SYLLABLE SIOS-WA-HIEUH -0x99B8 0xC1C5 # HANGUL SYLLABLE SIOS-WAE-KIYEOK -0x99B9 0xC1C6 # HANGUL SYLLABLE SIOS-WAE-SSANGKIYEOK -0x99BA 0xC1C7 # HANGUL SYLLABLE SIOS-WAE-KIYEOKSIOS -0x99BB 0xC1C9 # HANGUL SYLLABLE SIOS-WAE-NIEUNCIEUC -0x99BC 0xC1CA # HANGUL SYLLABLE SIOS-WAE-NIEUNHIEUH -0x99BD 0xC1CB # HANGUL SYLLABLE SIOS-WAE-TIKEUT -0x99BE 0xC1CD # HANGUL SYLLABLE SIOS-WAE-RIEULKIYEOK -0x99BF 0xC1CE # HANGUL SYLLABLE SIOS-WAE-RIEULMIEUM -0x99C0 0xC1CF # HANGUL SYLLABLE SIOS-WAE-RIEULPIEUP -0x99C1 0xC1D0 # HANGUL SYLLABLE SIOS-WAE-RIEULSIOS -0x99C2 0xC1D1 # HANGUL SYLLABLE SIOS-WAE-RIEULTHIEUTH -0x99C3 0xC1D2 # HANGUL SYLLABLE SIOS-WAE-RIEULPHIEUPH -0x99C4 0xC1D3 # HANGUL SYLLABLE SIOS-WAE-RIEULHIEUH -0x99C5 0xC1D5 # HANGUL SYLLABLE SIOS-WAE-PIEUP -0x99C6 0xC1D6 # HANGUL SYLLABLE SIOS-WAE-PIEUPSIOS -0x99C7 0xC1D9 # HANGUL SYLLABLE SIOS-WAE-IEUNG -0x99C8 0xC1DA # HANGUL SYLLABLE SIOS-WAE-CIEUC -0x99C9 0xC1DB # HANGUL SYLLABLE SIOS-WAE-CHIEUCH -0x99CA 0xC1DC # HANGUL SYLLABLE SIOS-WAE-KHIEUKH -0x99CB 0xC1DD # HANGUL SYLLABLE SIOS-WAE-THIEUTH -0x99CC 0xC1DE # HANGUL SYLLABLE SIOS-WAE-PHIEUPH -0x99CD 0xC1DF # HANGUL SYLLABLE SIOS-WAE-HIEUH -0x99CE 0xC1E1 # HANGUL SYLLABLE SIOS-OE-KIYEOK -0x99CF 0xC1E2 # HANGUL SYLLABLE SIOS-OE-SSANGKIYEOK -0x99D0 0xC1E3 # HANGUL SYLLABLE SIOS-OE-KIYEOKSIOS -0x99D1 0xC1E5 # HANGUL SYLLABLE SIOS-OE-NIEUNCIEUC -0x99D2 0xC1E6 # HANGUL SYLLABLE SIOS-OE-NIEUNHIEUH -0x99D3 0xC1E7 # HANGUL SYLLABLE SIOS-OE-TIKEUT -0x99D4 0xC1E9 # HANGUL SYLLABLE SIOS-OE-RIEULKIYEOK -0x99D5 0xC1EA # HANGUL SYLLABLE SIOS-OE-RIEULMIEUM -0x99D6 0xC1EB # HANGUL SYLLABLE SIOS-OE-RIEULPIEUP -0x99D7 0xC1EC # HANGUL SYLLABLE SIOS-OE-RIEULSIOS -0x99D8 0xC1ED # HANGUL SYLLABLE SIOS-OE-RIEULTHIEUTH -0x99D9 0xC1EE # HANGUL SYLLABLE SIOS-OE-RIEULPHIEUPH -0x99DA 0xC1EF # HANGUL SYLLABLE SIOS-OE-RIEULHIEUH -0x99DB 0xC1F2 # HANGUL SYLLABLE SIOS-OE-PIEUPSIOS -0x99DC 0xC1F4 # HANGUL SYLLABLE SIOS-OE-SSANGSIOS -0x99DD 0xC1F5 # HANGUL SYLLABLE SIOS-OE-IEUNG -0x99DE 0xC1F6 # HANGUL SYLLABLE SIOS-OE-CIEUC -0x99DF 0xC1F7 # HANGUL SYLLABLE SIOS-OE-CHIEUCH -0x99E0 0xC1F8 # HANGUL SYLLABLE SIOS-OE-KHIEUKH -0x99E1 0xC1F9 # HANGUL SYLLABLE SIOS-OE-THIEUTH -0x99E2 0xC1FA # HANGUL SYLLABLE SIOS-OE-PHIEUPH -0x99E3 0xC1FB # HANGUL SYLLABLE SIOS-OE-HIEUH -0x99E4 0xC1FE # HANGUL SYLLABLE SIOS-YO-SSANGKIYEOK -0x99E5 0xC1FF # HANGUL SYLLABLE SIOS-YO-KIYEOKSIOS -0x99E6 0xC201 # HANGUL SYLLABLE SIOS-YO-NIEUNCIEUC -0x99E7 0xC202 # HANGUL SYLLABLE SIOS-YO-NIEUNHIEUH -0x99E8 0xC203 # HANGUL SYLLABLE SIOS-YO-TIKEUT -0x99E9 0xC205 # HANGUL SYLLABLE SIOS-YO-RIEULKIYEOK -0x99EA 0xC206 # HANGUL SYLLABLE SIOS-YO-RIEULMIEUM -0x99EB 0xC207 # HANGUL SYLLABLE SIOS-YO-RIEULPIEUP -0x99EC 0xC208 # HANGUL SYLLABLE SIOS-YO-RIEULSIOS -0x99ED 0xC209 # HANGUL SYLLABLE SIOS-YO-RIEULTHIEUTH -0x99EE 0xC20A # HANGUL SYLLABLE SIOS-YO-RIEULPHIEUPH -0x99EF 0xC20B # HANGUL SYLLABLE SIOS-YO-RIEULHIEUH -0x99F0 0xC20E # HANGUL SYLLABLE SIOS-YO-PIEUPSIOS -0x99F1 0xC210 # HANGUL SYLLABLE SIOS-YO-SSANGSIOS -0x99F2 0xC212 # HANGUL SYLLABLE SIOS-YO-CIEUC -0x99F3 0xC213 # HANGUL SYLLABLE SIOS-YO-CHIEUCH -0x99F4 0xC214 # HANGUL SYLLABLE SIOS-YO-KHIEUKH -0x99F5 0xC215 # HANGUL SYLLABLE SIOS-YO-THIEUTH -0x99F6 0xC216 # HANGUL SYLLABLE SIOS-YO-PHIEUPH -0x99F7 0xC217 # HANGUL SYLLABLE SIOS-YO-HIEUH -0x99F8 0xC21A # HANGUL SYLLABLE SIOS-U-SSANGKIYEOK -0x99F9 0xC21B # HANGUL SYLLABLE SIOS-U-KIYEOKSIOS -0x99FA 0xC21D # HANGUL SYLLABLE SIOS-U-NIEUNCIEUC -0x99FB 0xC21E # HANGUL SYLLABLE SIOS-U-NIEUNHIEUH -0x99FC 0xC221 # HANGUL SYLLABLE SIOS-U-RIEULKIYEOK -0x99FD 0xC222 # HANGUL SYLLABLE SIOS-U-RIEULMIEUM -0x99FE 0xC223 # HANGUL SYLLABLE SIOS-U-RIEULPIEUP -0x9A41 0xC224 # HANGUL SYLLABLE SIOS-U-RIEULSIOS -0x9A42 0xC225 # HANGUL SYLLABLE SIOS-U-RIEULTHIEUTH -0x9A43 0xC226 # HANGUL SYLLABLE SIOS-U-RIEULPHIEUPH -0x9A44 0xC227 # HANGUL SYLLABLE SIOS-U-RIEULHIEUH -0x9A45 0xC22A # HANGUL SYLLABLE SIOS-U-PIEUPSIOS -0x9A46 0xC22C # HANGUL SYLLABLE SIOS-U-SSANGSIOS -0x9A47 0xC22E # HANGUL SYLLABLE SIOS-U-CIEUC -0x9A48 0xC230 # HANGUL SYLLABLE SIOS-U-KHIEUKH -0x9A49 0xC233 # HANGUL SYLLABLE SIOS-U-HIEUH -0x9A4A 0xC235 # HANGUL SYLLABLE SIOS-WEO-KIYEOK -0x9A4B 0xC236 # HANGUL SYLLABLE SIOS-WEO-SSANGKIYEOK -0x9A4C 0xC237 # HANGUL SYLLABLE SIOS-WEO-KIYEOKSIOS -0x9A4D 0xC238 # HANGUL SYLLABLE SIOS-WEO-NIEUN -0x9A4E 0xC239 # HANGUL SYLLABLE SIOS-WEO-NIEUNCIEUC -0x9A4F 0xC23A # HANGUL SYLLABLE SIOS-WEO-NIEUNHIEUH -0x9A50 0xC23B # HANGUL SYLLABLE SIOS-WEO-TIKEUT -0x9A51 0xC23C # HANGUL SYLLABLE SIOS-WEO-RIEUL -0x9A52 0xC23D # HANGUL SYLLABLE SIOS-WEO-RIEULKIYEOK -0x9A53 0xC23E # HANGUL SYLLABLE SIOS-WEO-RIEULMIEUM -0x9A54 0xC23F # HANGUL SYLLABLE SIOS-WEO-RIEULPIEUP -0x9A55 0xC240 # HANGUL SYLLABLE SIOS-WEO-RIEULSIOS -0x9A56 0xC241 # HANGUL SYLLABLE SIOS-WEO-RIEULTHIEUTH -0x9A57 0xC242 # HANGUL SYLLABLE SIOS-WEO-RIEULPHIEUPH -0x9A58 0xC243 # HANGUL SYLLABLE SIOS-WEO-RIEULHIEUH -0x9A59 0xC244 # HANGUL SYLLABLE SIOS-WEO-MIEUM -0x9A5A 0xC245 # HANGUL SYLLABLE SIOS-WEO-PIEUP -0x9A61 0xC246 # HANGUL SYLLABLE SIOS-WEO-PIEUPSIOS -0x9A62 0xC247 # HANGUL SYLLABLE SIOS-WEO-SIOS -0x9A63 0xC249 # HANGUL SYLLABLE SIOS-WEO-IEUNG -0x9A64 0xC24A # HANGUL SYLLABLE SIOS-WEO-CIEUC -0x9A65 0xC24B # HANGUL SYLLABLE SIOS-WEO-CHIEUCH -0x9A66 0xC24C # HANGUL SYLLABLE SIOS-WEO-KHIEUKH -0x9A67 0xC24D # HANGUL SYLLABLE SIOS-WEO-THIEUTH -0x9A68 0xC24E # HANGUL SYLLABLE SIOS-WEO-PHIEUPH -0x9A69 0xC24F # HANGUL SYLLABLE SIOS-WEO-HIEUH -0x9A6A 0xC252 # HANGUL SYLLABLE SIOS-WE-SSANGKIYEOK -0x9A6B 0xC253 # HANGUL SYLLABLE SIOS-WE-KIYEOKSIOS -0x9A6C 0xC255 # HANGUL SYLLABLE SIOS-WE-NIEUNCIEUC -0x9A6D 0xC256 # HANGUL SYLLABLE SIOS-WE-NIEUNHIEUH -0x9A6E 0xC257 # HANGUL SYLLABLE SIOS-WE-TIKEUT -0x9A6F 0xC259 # HANGUL SYLLABLE SIOS-WE-RIEULKIYEOK -0x9A70 0xC25A # HANGUL SYLLABLE SIOS-WE-RIEULMIEUM -0x9A71 0xC25B # HANGUL SYLLABLE SIOS-WE-RIEULPIEUP -0x9A72 0xC25C # HANGUL SYLLABLE SIOS-WE-RIEULSIOS -0x9A73 0xC25D # HANGUL SYLLABLE SIOS-WE-RIEULTHIEUTH -0x9A74 0xC25E # HANGUL SYLLABLE SIOS-WE-RIEULPHIEUPH -0x9A75 0xC25F # HANGUL SYLLABLE SIOS-WE-RIEULHIEUH -0x9A76 0xC261 # HANGUL SYLLABLE SIOS-WE-PIEUP -0x9A77 0xC262 # HANGUL SYLLABLE SIOS-WE-PIEUPSIOS -0x9A78 0xC263 # HANGUL SYLLABLE SIOS-WE-SIOS -0x9A79 0xC264 # HANGUL SYLLABLE SIOS-WE-SSANGSIOS -0x9A7A 0xC266 # HANGUL SYLLABLE SIOS-WE-CIEUC -0x9A81 0xC267 # HANGUL SYLLABLE SIOS-WE-CHIEUCH -0x9A82 0xC268 # HANGUL SYLLABLE SIOS-WE-KHIEUKH -0x9A83 0xC269 # HANGUL SYLLABLE SIOS-WE-THIEUTH -0x9A84 0xC26A # HANGUL SYLLABLE SIOS-WE-PHIEUPH -0x9A85 0xC26B # HANGUL SYLLABLE SIOS-WE-HIEUH -0x9A86 0xC26E # HANGUL SYLLABLE SIOS-WI-SSANGKIYEOK -0x9A87 0xC26F # HANGUL SYLLABLE SIOS-WI-KIYEOKSIOS -0x9A88 0xC271 # HANGUL SYLLABLE SIOS-WI-NIEUNCIEUC -0x9A89 0xC272 # HANGUL SYLLABLE SIOS-WI-NIEUNHIEUH -0x9A8A 0xC273 # HANGUL SYLLABLE SIOS-WI-TIKEUT -0x9A8B 0xC275 # HANGUL SYLLABLE SIOS-WI-RIEULKIYEOK -0x9A8C 0xC276 # HANGUL SYLLABLE SIOS-WI-RIEULMIEUM -0x9A8D 0xC277 # HANGUL SYLLABLE SIOS-WI-RIEULPIEUP -0x9A8E 0xC278 # HANGUL SYLLABLE SIOS-WI-RIEULSIOS -0x9A8F 0xC279 # HANGUL SYLLABLE SIOS-WI-RIEULTHIEUTH -0x9A90 0xC27A # HANGUL SYLLABLE SIOS-WI-RIEULPHIEUPH -0x9A91 0xC27B # HANGUL SYLLABLE SIOS-WI-RIEULHIEUH -0x9A92 0xC27E # HANGUL SYLLABLE SIOS-WI-PIEUPSIOS -0x9A93 0xC280 # HANGUL SYLLABLE SIOS-WI-SSANGSIOS -0x9A94 0xC282 # HANGUL SYLLABLE SIOS-WI-CIEUC -0x9A95 0xC283 # HANGUL SYLLABLE SIOS-WI-CHIEUCH -0x9A96 0xC284 # HANGUL SYLLABLE SIOS-WI-KHIEUKH -0x9A97 0xC285 # HANGUL SYLLABLE SIOS-WI-THIEUTH -0x9A98 0xC286 # HANGUL SYLLABLE SIOS-WI-PHIEUPH -0x9A99 0xC287 # HANGUL SYLLABLE SIOS-WI-HIEUH -0x9A9A 0xC28A # HANGUL SYLLABLE SIOS-YU-SSANGKIYEOK -0x9A9B 0xC28B # HANGUL SYLLABLE SIOS-YU-KIYEOKSIOS -0x9A9C 0xC28C # HANGUL SYLLABLE SIOS-YU-NIEUN -0x9A9D 0xC28D # HANGUL SYLLABLE SIOS-YU-NIEUNCIEUC -0x9A9E 0xC28E # HANGUL SYLLABLE SIOS-YU-NIEUNHIEUH -0x9A9F 0xC28F # HANGUL SYLLABLE SIOS-YU-TIKEUT -0x9AA0 0xC291 # HANGUL SYLLABLE SIOS-YU-RIEULKIYEOK -0x9AA1 0xC292 # HANGUL SYLLABLE SIOS-YU-RIEULMIEUM -0x9AA2 0xC293 # HANGUL SYLLABLE SIOS-YU-RIEULPIEUP -0x9AA3 0xC294 # HANGUL SYLLABLE SIOS-YU-RIEULSIOS -0x9AA4 0xC295 # HANGUL SYLLABLE SIOS-YU-RIEULTHIEUTH -0x9AA5 0xC296 # HANGUL SYLLABLE SIOS-YU-RIEULPHIEUPH -0x9AA6 0xC297 # HANGUL SYLLABLE SIOS-YU-RIEULHIEUH -0x9AA7 0xC299 # HANGUL SYLLABLE SIOS-YU-PIEUP -0x9AA8 0xC29A # HANGUL SYLLABLE SIOS-YU-PIEUPSIOS -0x9AA9 0xC29C # HANGUL SYLLABLE SIOS-YU-SSANGSIOS -0x9AAA 0xC29E # HANGUL SYLLABLE SIOS-YU-CIEUC -0x9AAB 0xC29F # HANGUL SYLLABLE SIOS-YU-CHIEUCH -0x9AAC 0xC2A0 # HANGUL SYLLABLE SIOS-YU-KHIEUKH -0x9AAD 0xC2A1 # HANGUL SYLLABLE SIOS-YU-THIEUTH -0x9AAE 0xC2A2 # HANGUL SYLLABLE SIOS-YU-PHIEUPH -0x9AAF 0xC2A3 # HANGUL SYLLABLE SIOS-YU-HIEUH -0x9AB0 0xC2A6 # HANGUL SYLLABLE SIOS-EU-SSANGKIYEOK -0x9AB1 0xC2A7 # HANGUL SYLLABLE SIOS-EU-KIYEOKSIOS -0x9AB2 0xC2A9 # HANGUL SYLLABLE SIOS-EU-NIEUNCIEUC -0x9AB3 0xC2AA # HANGUL SYLLABLE SIOS-EU-NIEUNHIEUH -0x9AB4 0xC2AB # HANGUL SYLLABLE SIOS-EU-TIKEUT -0x9AB5 0xC2AE # HANGUL SYLLABLE SIOS-EU-RIEULMIEUM -0x9AB6 0xC2AF # HANGUL SYLLABLE SIOS-EU-RIEULPIEUP -0x9AB7 0xC2B0 # HANGUL SYLLABLE SIOS-EU-RIEULSIOS -0x9AB8 0xC2B1 # HANGUL SYLLABLE SIOS-EU-RIEULTHIEUTH -0x9AB9 0xC2B2 # HANGUL SYLLABLE SIOS-EU-RIEULPHIEUPH -0x9ABA 0xC2B3 # HANGUL SYLLABLE SIOS-EU-RIEULHIEUH -0x9ABB 0xC2B6 # HANGUL SYLLABLE SIOS-EU-PIEUPSIOS -0x9ABC 0xC2B8 # HANGUL SYLLABLE SIOS-EU-SSANGSIOS -0x9ABD 0xC2BA # HANGUL SYLLABLE SIOS-EU-CIEUC -0x9ABE 0xC2BB # HANGUL SYLLABLE SIOS-EU-CHIEUCH -0x9ABF 0xC2BC # HANGUL SYLLABLE SIOS-EU-KHIEUKH -0x9AC0 0xC2BD # HANGUL SYLLABLE SIOS-EU-THIEUTH -0x9AC1 0xC2BE # HANGUL SYLLABLE SIOS-EU-PHIEUPH -0x9AC2 0xC2BF # HANGUL SYLLABLE SIOS-EU-HIEUH -0x9AC3 0xC2C0 # HANGUL SYLLABLE SIOS-YI -0x9AC4 0xC2C1 # HANGUL SYLLABLE SIOS-YI-KIYEOK -0x9AC5 0xC2C2 # HANGUL SYLLABLE SIOS-YI-SSANGKIYEOK -0x9AC6 0xC2C3 # HANGUL SYLLABLE SIOS-YI-KIYEOKSIOS -0x9AC7 0xC2C4 # HANGUL SYLLABLE SIOS-YI-NIEUN -0x9AC8 0xC2C5 # HANGUL SYLLABLE SIOS-YI-NIEUNCIEUC -0x9AC9 0xC2C6 # HANGUL SYLLABLE SIOS-YI-NIEUNHIEUH -0x9ACA 0xC2C7 # HANGUL SYLLABLE SIOS-YI-TIKEUT -0x9ACB 0xC2C8 # HANGUL SYLLABLE SIOS-YI-RIEUL -0x9ACC 0xC2C9 # HANGUL SYLLABLE SIOS-YI-RIEULKIYEOK -0x9ACD 0xC2CA # HANGUL SYLLABLE SIOS-YI-RIEULMIEUM -0x9ACE 0xC2CB # HANGUL SYLLABLE SIOS-YI-RIEULPIEUP -0x9ACF 0xC2CC # HANGUL SYLLABLE SIOS-YI-RIEULSIOS -0x9AD0 0xC2CD # HANGUL SYLLABLE SIOS-YI-RIEULTHIEUTH -0x9AD1 0xC2CE # HANGUL SYLLABLE SIOS-YI-RIEULPHIEUPH -0x9AD2 0xC2CF # HANGUL SYLLABLE SIOS-YI-RIEULHIEUH -0x9AD3 0xC2D0 # HANGUL SYLLABLE SIOS-YI-MIEUM -0x9AD4 0xC2D1 # HANGUL SYLLABLE SIOS-YI-PIEUP -0x9AD5 0xC2D2 # HANGUL SYLLABLE SIOS-YI-PIEUPSIOS -0x9AD6 0xC2D3 # HANGUL SYLLABLE SIOS-YI-SIOS -0x9AD7 0xC2D4 # HANGUL SYLLABLE SIOS-YI-SSANGSIOS -0x9AD8 0xC2D5 # HANGUL SYLLABLE SIOS-YI-IEUNG -0x9AD9 0xC2D6 # HANGUL SYLLABLE SIOS-YI-CIEUC -0x9ADA 0xC2D7 # HANGUL SYLLABLE SIOS-YI-CHIEUCH -0x9ADB 0xC2D8 # HANGUL SYLLABLE SIOS-YI-KHIEUKH -0x9ADC 0xC2D9 # HANGUL SYLLABLE SIOS-YI-THIEUTH -0x9ADD 0xC2DA # HANGUL SYLLABLE SIOS-YI-PHIEUPH -0x9ADE 0xC2DB # HANGUL SYLLABLE SIOS-YI-HIEUH -0x9ADF 0xC2DE # HANGUL SYLLABLE SIOS-I-SSANGKIYEOK -0x9AE0 0xC2DF # HANGUL SYLLABLE SIOS-I-KIYEOKSIOS -0x9AE1 0xC2E1 # HANGUL SYLLABLE SIOS-I-NIEUNCIEUC -0x9AE2 0xC2E2 # HANGUL SYLLABLE SIOS-I-NIEUNHIEUH -0x9AE3 0xC2E5 # HANGUL SYLLABLE SIOS-I-RIEULKIYEOK -0x9AE4 0xC2E6 # HANGUL SYLLABLE SIOS-I-RIEULMIEUM -0x9AE5 0xC2E7 # HANGUL SYLLABLE SIOS-I-RIEULPIEUP -0x9AE6 0xC2E8 # HANGUL SYLLABLE SIOS-I-RIEULSIOS -0x9AE7 0xC2E9 # HANGUL SYLLABLE SIOS-I-RIEULTHIEUTH -0x9AE8 0xC2EA # HANGUL SYLLABLE SIOS-I-RIEULPHIEUPH -0x9AE9 0xC2EE # HANGUL SYLLABLE SIOS-I-PIEUPSIOS -0x9AEA 0xC2F0 # HANGUL SYLLABLE SIOS-I-SSANGSIOS -0x9AEB 0xC2F2 # HANGUL SYLLABLE SIOS-I-CIEUC -0x9AEC 0xC2F3 # HANGUL SYLLABLE SIOS-I-CHIEUCH -0x9AED 0xC2F4 # HANGUL SYLLABLE SIOS-I-KHIEUKH -0x9AEE 0xC2F5 # HANGUL SYLLABLE SIOS-I-THIEUTH -0x9AEF 0xC2F7 # HANGUL SYLLABLE SIOS-I-HIEUH -0x9AF0 0xC2FA # HANGUL SYLLABLE SSANGSIOS-A-SSANGKIYEOK -0x9AF1 0xC2FD # HANGUL SYLLABLE SSANGSIOS-A-NIEUNCIEUC -0x9AF2 0xC2FE # HANGUL SYLLABLE SSANGSIOS-A-NIEUNHIEUH -0x9AF3 0xC2FF # HANGUL SYLLABLE SSANGSIOS-A-TIKEUT -0x9AF4 0xC301 # HANGUL SYLLABLE SSANGSIOS-A-RIEULKIYEOK -0x9AF5 0xC302 # HANGUL SYLLABLE SSANGSIOS-A-RIEULMIEUM -0x9AF6 0xC303 # HANGUL SYLLABLE SSANGSIOS-A-RIEULPIEUP -0x9AF7 0xC304 # HANGUL SYLLABLE SSANGSIOS-A-RIEULSIOS -0x9AF8 0xC305 # HANGUL SYLLABLE SSANGSIOS-A-RIEULTHIEUTH -0x9AF9 0xC306 # HANGUL SYLLABLE SSANGSIOS-A-RIEULPHIEUPH -0x9AFA 0xC307 # HANGUL SYLLABLE SSANGSIOS-A-RIEULHIEUH -0x9AFB 0xC30A # HANGUL SYLLABLE SSANGSIOS-A-PIEUPSIOS -0x9AFC 0xC30B # HANGUL SYLLABLE SSANGSIOS-A-SIOS -0x9AFD 0xC30E # HANGUL SYLLABLE SSANGSIOS-A-CIEUC -0x9AFE 0xC30F # HANGUL SYLLABLE SSANGSIOS-A-CHIEUCH -0x9B41 0xC310 # HANGUL SYLLABLE SSANGSIOS-A-KHIEUKH -0x9B42 0xC311 # HANGUL SYLLABLE SSANGSIOS-A-THIEUTH -0x9B43 0xC312 # HANGUL SYLLABLE SSANGSIOS-A-PHIEUPH -0x9B44 0xC316 # HANGUL SYLLABLE SSANGSIOS-AE-SSANGKIYEOK -0x9B45 0xC317 # HANGUL SYLLABLE SSANGSIOS-AE-KIYEOKSIOS -0x9B46 0xC319 # HANGUL SYLLABLE SSANGSIOS-AE-NIEUNCIEUC -0x9B47 0xC31A # HANGUL SYLLABLE SSANGSIOS-AE-NIEUNHIEUH -0x9B48 0xC31B # HANGUL SYLLABLE SSANGSIOS-AE-TIKEUT -0x9B49 0xC31D # HANGUL SYLLABLE SSANGSIOS-AE-RIEULKIYEOK -0x9B4A 0xC31E # HANGUL SYLLABLE SSANGSIOS-AE-RIEULMIEUM -0x9B4B 0xC31F # HANGUL SYLLABLE SSANGSIOS-AE-RIEULPIEUP -0x9B4C 0xC320 # HANGUL SYLLABLE SSANGSIOS-AE-RIEULSIOS -0x9B4D 0xC321 # HANGUL SYLLABLE SSANGSIOS-AE-RIEULTHIEUTH -0x9B4E 0xC322 # HANGUL SYLLABLE SSANGSIOS-AE-RIEULPHIEUPH -0x9B4F 0xC323 # HANGUL SYLLABLE SSANGSIOS-AE-RIEULHIEUH -0x9B50 0xC326 # HANGUL SYLLABLE SSANGSIOS-AE-PIEUPSIOS -0x9B51 0xC327 # HANGUL SYLLABLE SSANGSIOS-AE-SIOS -0x9B52 0xC32A # HANGUL SYLLABLE SSANGSIOS-AE-CIEUC -0x9B53 0xC32B # HANGUL SYLLABLE SSANGSIOS-AE-CHIEUCH -0x9B54 0xC32C # HANGUL SYLLABLE SSANGSIOS-AE-KHIEUKH -0x9B55 0xC32D # HANGUL SYLLABLE SSANGSIOS-AE-THIEUTH -0x9B56 0xC32E # HANGUL SYLLABLE SSANGSIOS-AE-PHIEUPH -0x9B57 0xC32F # HANGUL SYLLABLE SSANGSIOS-AE-HIEUH -0x9B58 0xC330 # HANGUL SYLLABLE SSANGSIOS-YA -0x9B59 0xC331 # HANGUL SYLLABLE SSANGSIOS-YA-KIYEOK -0x9B5A 0xC332 # HANGUL SYLLABLE SSANGSIOS-YA-SSANGKIYEOK -0x9B61 0xC333 # HANGUL SYLLABLE SSANGSIOS-YA-KIYEOKSIOS -0x9B62 0xC334 # HANGUL SYLLABLE SSANGSIOS-YA-NIEUN -0x9B63 0xC335 # HANGUL SYLLABLE SSANGSIOS-YA-NIEUNCIEUC -0x9B64 0xC336 # HANGUL SYLLABLE SSANGSIOS-YA-NIEUNHIEUH -0x9B65 0xC337 # HANGUL SYLLABLE SSANGSIOS-YA-TIKEUT -0x9B66 0xC338 # HANGUL SYLLABLE SSANGSIOS-YA-RIEUL -0x9B67 0xC339 # HANGUL SYLLABLE SSANGSIOS-YA-RIEULKIYEOK -0x9B68 0xC33A # HANGUL SYLLABLE SSANGSIOS-YA-RIEULMIEUM -0x9B69 0xC33B # HANGUL SYLLABLE SSANGSIOS-YA-RIEULPIEUP -0x9B6A 0xC33C # HANGUL SYLLABLE SSANGSIOS-YA-RIEULSIOS -0x9B6B 0xC33D # HANGUL SYLLABLE SSANGSIOS-YA-RIEULTHIEUTH -0x9B6C 0xC33E # HANGUL SYLLABLE SSANGSIOS-YA-RIEULPHIEUPH -0x9B6D 0xC33F # HANGUL SYLLABLE SSANGSIOS-YA-RIEULHIEUH -0x9B6E 0xC340 # HANGUL SYLLABLE SSANGSIOS-YA-MIEUM -0x9B6F 0xC341 # HANGUL SYLLABLE SSANGSIOS-YA-PIEUP -0x9B70 0xC342 # HANGUL SYLLABLE SSANGSIOS-YA-PIEUPSIOS -0x9B71 0xC343 # HANGUL SYLLABLE SSANGSIOS-YA-SIOS -0x9B72 0xC344 # HANGUL SYLLABLE SSANGSIOS-YA-SSANGSIOS -0x9B73 0xC346 # HANGUL SYLLABLE SSANGSIOS-YA-CIEUC -0x9B74 0xC347 # HANGUL SYLLABLE SSANGSIOS-YA-CHIEUCH -0x9B75 0xC348 # HANGUL SYLLABLE SSANGSIOS-YA-KHIEUKH -0x9B76 0xC349 # HANGUL SYLLABLE SSANGSIOS-YA-THIEUTH -0x9B77 0xC34A # HANGUL SYLLABLE SSANGSIOS-YA-PHIEUPH -0x9B78 0xC34B # HANGUL SYLLABLE SSANGSIOS-YA-HIEUH -0x9B79 0xC34C # HANGUL SYLLABLE SSANGSIOS-YAE -0x9B7A 0xC34D # HANGUL SYLLABLE SSANGSIOS-YAE-KIYEOK -0x9B81 0xC34E # HANGUL SYLLABLE SSANGSIOS-YAE-SSANGKIYEOK -0x9B82 0xC34F # HANGUL SYLLABLE SSANGSIOS-YAE-KIYEOKSIOS -0x9B83 0xC350 # HANGUL SYLLABLE SSANGSIOS-YAE-NIEUN -0x9B84 0xC351 # HANGUL SYLLABLE SSANGSIOS-YAE-NIEUNCIEUC -0x9B85 0xC352 # HANGUL SYLLABLE SSANGSIOS-YAE-NIEUNHIEUH -0x9B86 0xC353 # HANGUL SYLLABLE SSANGSIOS-YAE-TIKEUT -0x9B87 0xC354 # HANGUL SYLLABLE SSANGSIOS-YAE-RIEUL -0x9B88 0xC355 # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULKIYEOK -0x9B89 0xC356 # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULMIEUM -0x9B8A 0xC357 # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULPIEUP -0x9B8B 0xC358 # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULSIOS -0x9B8C 0xC359 # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULTHIEUTH -0x9B8D 0xC35A # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULPHIEUPH -0x9B8E 0xC35B # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULHIEUH -0x9B8F 0xC35C # HANGUL SYLLABLE SSANGSIOS-YAE-MIEUM -0x9B90 0xC35D # HANGUL SYLLABLE SSANGSIOS-YAE-PIEUP -0x9B91 0xC35E # HANGUL SYLLABLE SSANGSIOS-YAE-PIEUPSIOS -0x9B92 0xC35F # HANGUL SYLLABLE SSANGSIOS-YAE-SIOS -0x9B93 0xC360 # HANGUL SYLLABLE SSANGSIOS-YAE-SSANGSIOS -0x9B94 0xC361 # HANGUL SYLLABLE SSANGSIOS-YAE-IEUNG -0x9B95 0xC362 # HANGUL SYLLABLE SSANGSIOS-YAE-CIEUC -0x9B96 0xC363 # HANGUL SYLLABLE SSANGSIOS-YAE-CHIEUCH -0x9B97 0xC364 # HANGUL SYLLABLE SSANGSIOS-YAE-KHIEUKH -0x9B98 0xC365 # HANGUL SYLLABLE SSANGSIOS-YAE-THIEUTH -0x9B99 0xC366 # HANGUL SYLLABLE SSANGSIOS-YAE-PHIEUPH -0x9B9A 0xC367 # HANGUL SYLLABLE SSANGSIOS-YAE-HIEUH -0x9B9B 0xC36A # HANGUL SYLLABLE SSANGSIOS-EO-SSANGKIYEOK -0x9B9C 0xC36B # HANGUL SYLLABLE SSANGSIOS-EO-KIYEOKSIOS -0x9B9D 0xC36D # HANGUL SYLLABLE SSANGSIOS-EO-NIEUNCIEUC -0x9B9E 0xC36E # HANGUL SYLLABLE SSANGSIOS-EO-NIEUNHIEUH -0x9B9F 0xC36F # HANGUL SYLLABLE SSANGSIOS-EO-TIKEUT -0x9BA0 0xC371 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULKIYEOK -0x9BA1 0xC373 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULPIEUP -0x9BA2 0xC374 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULSIOS -0x9BA3 0xC375 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULTHIEUTH -0x9BA4 0xC376 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULPHIEUPH -0x9BA5 0xC377 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULHIEUH -0x9BA6 0xC37A # HANGUL SYLLABLE SSANGSIOS-EO-PIEUPSIOS -0x9BA7 0xC37B # HANGUL SYLLABLE SSANGSIOS-EO-SIOS -0x9BA8 0xC37E # HANGUL SYLLABLE SSANGSIOS-EO-CIEUC -0x9BA9 0xC37F # HANGUL SYLLABLE SSANGSIOS-EO-CHIEUCH -0x9BAA 0xC380 # HANGUL SYLLABLE SSANGSIOS-EO-KHIEUKH -0x9BAB 0xC381 # HANGUL SYLLABLE SSANGSIOS-EO-THIEUTH -0x9BAC 0xC382 # HANGUL SYLLABLE SSANGSIOS-EO-PHIEUPH -0x9BAD 0xC383 # HANGUL SYLLABLE SSANGSIOS-EO-HIEUH -0x9BAE 0xC385 # HANGUL SYLLABLE SSANGSIOS-E-KIYEOK -0x9BAF 0xC386 # HANGUL SYLLABLE SSANGSIOS-E-SSANGKIYEOK -0x9BB0 0xC387 # HANGUL SYLLABLE SSANGSIOS-E-KIYEOKSIOS -0x9BB1 0xC389 # HANGUL SYLLABLE SSANGSIOS-E-NIEUNCIEUC -0x9BB2 0xC38A # HANGUL SYLLABLE SSANGSIOS-E-NIEUNHIEUH -0x9BB3 0xC38B # HANGUL SYLLABLE SSANGSIOS-E-TIKEUT -0x9BB4 0xC38D # HANGUL SYLLABLE SSANGSIOS-E-RIEULKIYEOK -0x9BB5 0xC38E # HANGUL SYLLABLE SSANGSIOS-E-RIEULMIEUM -0x9BB6 0xC38F # HANGUL SYLLABLE SSANGSIOS-E-RIEULPIEUP -0x9BB7 0xC390 # HANGUL SYLLABLE SSANGSIOS-E-RIEULSIOS -0x9BB8 0xC391 # HANGUL SYLLABLE SSANGSIOS-E-RIEULTHIEUTH -0x9BB9 0xC392 # HANGUL SYLLABLE SSANGSIOS-E-RIEULPHIEUPH -0x9BBA 0xC393 # HANGUL SYLLABLE SSANGSIOS-E-RIEULHIEUH -0x9BBB 0xC394 # HANGUL SYLLABLE SSANGSIOS-E-MIEUM -0x9BBC 0xC395 # HANGUL SYLLABLE SSANGSIOS-E-PIEUP -0x9BBD 0xC396 # HANGUL SYLLABLE SSANGSIOS-E-PIEUPSIOS -0x9BBE 0xC397 # HANGUL SYLLABLE SSANGSIOS-E-SIOS -0x9BBF 0xC398 # HANGUL SYLLABLE SSANGSIOS-E-SSANGSIOS -0x9BC0 0xC399 # HANGUL SYLLABLE SSANGSIOS-E-IEUNG -0x9BC1 0xC39A # HANGUL SYLLABLE SSANGSIOS-E-CIEUC -0x9BC2 0xC39B # HANGUL SYLLABLE SSANGSIOS-E-CHIEUCH -0x9BC3 0xC39C # HANGUL SYLLABLE SSANGSIOS-E-KHIEUKH -0x9BC4 0xC39D # HANGUL SYLLABLE SSANGSIOS-E-THIEUTH -0x9BC5 0xC39E # HANGUL SYLLABLE SSANGSIOS-E-PHIEUPH -0x9BC6 0xC39F # HANGUL SYLLABLE SSANGSIOS-E-HIEUH -0x9BC7 0xC3A0 # HANGUL SYLLABLE SSANGSIOS-YEO -0x9BC8 0xC3A1 # HANGUL SYLLABLE SSANGSIOS-YEO-KIYEOK -0x9BC9 0xC3A2 # HANGUL SYLLABLE SSANGSIOS-YEO-SSANGKIYEOK -0x9BCA 0xC3A3 # HANGUL SYLLABLE SSANGSIOS-YEO-KIYEOKSIOS -0x9BCB 0xC3A4 # HANGUL SYLLABLE SSANGSIOS-YEO-NIEUN -0x9BCC 0xC3A5 # HANGUL SYLLABLE SSANGSIOS-YEO-NIEUNCIEUC -0x9BCD 0xC3A6 # HANGUL SYLLABLE SSANGSIOS-YEO-NIEUNHIEUH -0x9BCE 0xC3A7 # HANGUL SYLLABLE SSANGSIOS-YEO-TIKEUT -0x9BCF 0xC3A8 # HANGUL SYLLABLE SSANGSIOS-YEO-RIEUL -0x9BD0 0xC3A9 # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULKIYEOK -0x9BD1 0xC3AA # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULMIEUM -0x9BD2 0xC3AB # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULPIEUP -0x9BD3 0xC3AC # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULSIOS -0x9BD4 0xC3AD # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULTHIEUTH -0x9BD5 0xC3AE # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULPHIEUPH -0x9BD6 0xC3AF # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULHIEUH -0x9BD7 0xC3B0 # HANGUL SYLLABLE SSANGSIOS-YEO-MIEUM -0x9BD8 0xC3B1 # HANGUL SYLLABLE SSANGSIOS-YEO-PIEUP -0x9BD9 0xC3B2 # HANGUL SYLLABLE SSANGSIOS-YEO-PIEUPSIOS -0x9BDA 0xC3B3 # HANGUL SYLLABLE SSANGSIOS-YEO-SIOS -0x9BDB 0xC3B4 # HANGUL SYLLABLE SSANGSIOS-YEO-SSANGSIOS -0x9BDC 0xC3B5 # HANGUL SYLLABLE SSANGSIOS-YEO-IEUNG -0x9BDD 0xC3B6 # HANGUL SYLLABLE SSANGSIOS-YEO-CIEUC -0x9BDE 0xC3B7 # HANGUL SYLLABLE SSANGSIOS-YEO-CHIEUCH -0x9BDF 0xC3B8 # HANGUL SYLLABLE SSANGSIOS-YEO-KHIEUKH -0x9BE0 0xC3B9 # HANGUL SYLLABLE SSANGSIOS-YEO-THIEUTH -0x9BE1 0xC3BA # HANGUL SYLLABLE SSANGSIOS-YEO-PHIEUPH -0x9BE2 0xC3BB # HANGUL SYLLABLE SSANGSIOS-YEO-HIEUH -0x9BE3 0xC3BC # HANGUL SYLLABLE SSANGSIOS-YE -0x9BE4 0xC3BD # HANGUL SYLLABLE SSANGSIOS-YE-KIYEOK -0x9BE5 0xC3BE # HANGUL SYLLABLE SSANGSIOS-YE-SSANGKIYEOK -0x9BE6 0xC3BF # HANGUL SYLLABLE SSANGSIOS-YE-KIYEOKSIOS -0x9BE7 0xC3C1 # HANGUL SYLLABLE SSANGSIOS-YE-NIEUNCIEUC -0x9BE8 0xC3C2 # HANGUL SYLLABLE SSANGSIOS-YE-NIEUNHIEUH -0x9BE9 0xC3C3 # HANGUL SYLLABLE SSANGSIOS-YE-TIKEUT -0x9BEA 0xC3C4 # HANGUL SYLLABLE SSANGSIOS-YE-RIEUL -0x9BEB 0xC3C5 # HANGUL SYLLABLE SSANGSIOS-YE-RIEULKIYEOK -0x9BEC 0xC3C6 # HANGUL SYLLABLE SSANGSIOS-YE-RIEULMIEUM -0x9BED 0xC3C7 # HANGUL SYLLABLE SSANGSIOS-YE-RIEULPIEUP -0x9BEE 0xC3C8 # HANGUL SYLLABLE SSANGSIOS-YE-RIEULSIOS -0x9BEF 0xC3C9 # HANGUL SYLLABLE SSANGSIOS-YE-RIEULTHIEUTH -0x9BF0 0xC3CA # HANGUL SYLLABLE SSANGSIOS-YE-RIEULPHIEUPH -0x9BF1 0xC3CB # HANGUL SYLLABLE SSANGSIOS-YE-RIEULHIEUH -0x9BF2 0xC3CC # HANGUL SYLLABLE SSANGSIOS-YE-MIEUM -0x9BF3 0xC3CD # HANGUL SYLLABLE SSANGSIOS-YE-PIEUP -0x9BF4 0xC3CE # HANGUL SYLLABLE SSANGSIOS-YE-PIEUPSIOS -0x9BF5 0xC3CF # HANGUL SYLLABLE SSANGSIOS-YE-SIOS -0x9BF6 0xC3D0 # HANGUL SYLLABLE SSANGSIOS-YE-SSANGSIOS -0x9BF7 0xC3D1 # HANGUL SYLLABLE SSANGSIOS-YE-IEUNG -0x9BF8 0xC3D2 # HANGUL SYLLABLE SSANGSIOS-YE-CIEUC -0x9BF9 0xC3D3 # HANGUL SYLLABLE SSANGSIOS-YE-CHIEUCH -0x9BFA 0xC3D4 # HANGUL SYLLABLE SSANGSIOS-YE-KHIEUKH -0x9BFB 0xC3D5 # HANGUL SYLLABLE SSANGSIOS-YE-THIEUTH -0x9BFC 0xC3D6 # HANGUL SYLLABLE SSANGSIOS-YE-PHIEUPH -0x9BFD 0xC3D7 # HANGUL SYLLABLE SSANGSIOS-YE-HIEUH -0x9BFE 0xC3DA # HANGUL SYLLABLE SSANGSIOS-O-SSANGKIYEOK -0x9C41 0xC3DB # HANGUL SYLLABLE SSANGSIOS-O-KIYEOKSIOS -0x9C42 0xC3DD # HANGUL SYLLABLE SSANGSIOS-O-NIEUNCIEUC -0x9C43 0xC3DE # HANGUL SYLLABLE SSANGSIOS-O-NIEUNHIEUH -0x9C44 0xC3E1 # HANGUL SYLLABLE SSANGSIOS-O-RIEULKIYEOK -0x9C45 0xC3E3 # HANGUL SYLLABLE SSANGSIOS-O-RIEULPIEUP -0x9C46 0xC3E4 # HANGUL SYLLABLE SSANGSIOS-O-RIEULSIOS -0x9C47 0xC3E5 # HANGUL SYLLABLE SSANGSIOS-O-RIEULTHIEUTH -0x9C48 0xC3E6 # HANGUL SYLLABLE SSANGSIOS-O-RIEULPHIEUPH -0x9C49 0xC3E7 # HANGUL SYLLABLE SSANGSIOS-O-RIEULHIEUH -0x9C4A 0xC3EA # HANGUL SYLLABLE SSANGSIOS-O-PIEUPSIOS -0x9C4B 0xC3EB # HANGUL SYLLABLE SSANGSIOS-O-SIOS -0x9C4C 0xC3EC # HANGUL SYLLABLE SSANGSIOS-O-SSANGSIOS -0x9C4D 0xC3EE # HANGUL SYLLABLE SSANGSIOS-O-CIEUC -0x9C4E 0xC3EF # HANGUL SYLLABLE SSANGSIOS-O-CHIEUCH -0x9C4F 0xC3F0 # HANGUL SYLLABLE SSANGSIOS-O-KHIEUKH -0x9C50 0xC3F1 # HANGUL SYLLABLE SSANGSIOS-O-THIEUTH -0x9C51 0xC3F2 # HANGUL SYLLABLE SSANGSIOS-O-PHIEUPH -0x9C52 0xC3F3 # HANGUL SYLLABLE SSANGSIOS-O-HIEUH -0x9C53 0xC3F6 # HANGUL SYLLABLE SSANGSIOS-WA-SSANGKIYEOK -0x9C54 0xC3F7 # HANGUL SYLLABLE SSANGSIOS-WA-KIYEOKSIOS -0x9C55 0xC3F9 # HANGUL SYLLABLE SSANGSIOS-WA-NIEUNCIEUC -0x9C56 0xC3FA # HANGUL SYLLABLE SSANGSIOS-WA-NIEUNHIEUH -0x9C57 0xC3FB # HANGUL SYLLABLE SSANGSIOS-WA-TIKEUT -0x9C58 0xC3FC # HANGUL SYLLABLE SSANGSIOS-WA-RIEUL -0x9C59 0xC3FD # HANGUL SYLLABLE SSANGSIOS-WA-RIEULKIYEOK -0x9C5A 0xC3FE # HANGUL SYLLABLE SSANGSIOS-WA-RIEULMIEUM -0x9C61 0xC3FF # HANGUL SYLLABLE SSANGSIOS-WA-RIEULPIEUP -0x9C62 0xC400 # HANGUL SYLLABLE SSANGSIOS-WA-RIEULSIOS -0x9C63 0xC401 # HANGUL SYLLABLE SSANGSIOS-WA-RIEULTHIEUTH -0x9C64 0xC402 # HANGUL SYLLABLE SSANGSIOS-WA-RIEULPHIEUPH -0x9C65 0xC403 # HANGUL SYLLABLE SSANGSIOS-WA-RIEULHIEUH -0x9C66 0xC404 # HANGUL SYLLABLE SSANGSIOS-WA-MIEUM -0x9C67 0xC405 # HANGUL SYLLABLE SSANGSIOS-WA-PIEUP -0x9C68 0xC406 # HANGUL SYLLABLE SSANGSIOS-WA-PIEUPSIOS -0x9C69 0xC407 # HANGUL SYLLABLE SSANGSIOS-WA-SIOS -0x9C6A 0xC409 # HANGUL SYLLABLE SSANGSIOS-WA-IEUNG -0x9C6B 0xC40A # HANGUL SYLLABLE SSANGSIOS-WA-CIEUC -0x9C6C 0xC40B # HANGUL SYLLABLE SSANGSIOS-WA-CHIEUCH -0x9C6D 0xC40C # HANGUL SYLLABLE SSANGSIOS-WA-KHIEUKH -0x9C6E 0xC40D # HANGUL SYLLABLE SSANGSIOS-WA-THIEUTH -0x9C6F 0xC40E # HANGUL SYLLABLE SSANGSIOS-WA-PHIEUPH -0x9C70 0xC40F # HANGUL SYLLABLE SSANGSIOS-WA-HIEUH -0x9C71 0xC411 # HANGUL SYLLABLE SSANGSIOS-WAE-KIYEOK -0x9C72 0xC412 # HANGUL SYLLABLE SSANGSIOS-WAE-SSANGKIYEOK -0x9C73 0xC413 # HANGUL SYLLABLE SSANGSIOS-WAE-KIYEOKSIOS -0x9C74 0xC414 # HANGUL SYLLABLE SSANGSIOS-WAE-NIEUN -0x9C75 0xC415 # HANGUL SYLLABLE SSANGSIOS-WAE-NIEUNCIEUC -0x9C76 0xC416 # HANGUL SYLLABLE SSANGSIOS-WAE-NIEUNHIEUH -0x9C77 0xC417 # HANGUL SYLLABLE SSANGSIOS-WAE-TIKEUT -0x9C78 0xC418 # HANGUL SYLLABLE SSANGSIOS-WAE-RIEUL -0x9C79 0xC419 # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULKIYEOK -0x9C7A 0xC41A # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULMIEUM -0x9C81 0xC41B # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULPIEUP -0x9C82 0xC41C # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULSIOS -0x9C83 0xC41D # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULTHIEUTH -0x9C84 0xC41E # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULPHIEUPH -0x9C85 0xC41F # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULHIEUH -0x9C86 0xC420 # HANGUL SYLLABLE SSANGSIOS-WAE-MIEUM -0x9C87 0xC421 # HANGUL SYLLABLE SSANGSIOS-WAE-PIEUP -0x9C88 0xC422 # HANGUL SYLLABLE SSANGSIOS-WAE-PIEUPSIOS -0x9C89 0xC423 # HANGUL SYLLABLE SSANGSIOS-WAE-SIOS -0x9C8A 0xC425 # HANGUL SYLLABLE SSANGSIOS-WAE-IEUNG -0x9C8B 0xC426 # HANGUL SYLLABLE SSANGSIOS-WAE-CIEUC -0x9C8C 0xC427 # HANGUL SYLLABLE SSANGSIOS-WAE-CHIEUCH -0x9C8D 0xC428 # HANGUL SYLLABLE SSANGSIOS-WAE-KHIEUKH -0x9C8E 0xC429 # HANGUL SYLLABLE SSANGSIOS-WAE-THIEUTH -0x9C8F 0xC42A # HANGUL SYLLABLE SSANGSIOS-WAE-PHIEUPH -0x9C90 0xC42B # HANGUL SYLLABLE SSANGSIOS-WAE-HIEUH -0x9C91 0xC42D # HANGUL SYLLABLE SSANGSIOS-OE-KIYEOK -0x9C92 0xC42E # HANGUL SYLLABLE SSANGSIOS-OE-SSANGKIYEOK -0x9C93 0xC42F # HANGUL SYLLABLE SSANGSIOS-OE-KIYEOKSIOS -0x9C94 0xC431 # HANGUL SYLLABLE SSANGSIOS-OE-NIEUNCIEUC -0x9C95 0xC432 # HANGUL SYLLABLE SSANGSIOS-OE-NIEUNHIEUH -0x9C96 0xC433 # HANGUL SYLLABLE SSANGSIOS-OE-TIKEUT -0x9C97 0xC435 # HANGUL SYLLABLE SSANGSIOS-OE-RIEULKIYEOK -0x9C98 0xC436 # HANGUL SYLLABLE SSANGSIOS-OE-RIEULMIEUM -0x9C99 0xC437 # HANGUL SYLLABLE SSANGSIOS-OE-RIEULPIEUP -0x9C9A 0xC438 # HANGUL SYLLABLE SSANGSIOS-OE-RIEULSIOS -0x9C9B 0xC439 # HANGUL SYLLABLE SSANGSIOS-OE-RIEULTHIEUTH -0x9C9C 0xC43A # HANGUL SYLLABLE SSANGSIOS-OE-RIEULPHIEUPH -0x9C9D 0xC43B # HANGUL SYLLABLE SSANGSIOS-OE-RIEULHIEUH -0x9C9E 0xC43E # HANGUL SYLLABLE SSANGSIOS-OE-PIEUPSIOS -0x9C9F 0xC43F # HANGUL SYLLABLE SSANGSIOS-OE-SIOS -0x9CA0 0xC440 # HANGUL SYLLABLE SSANGSIOS-OE-SSANGSIOS -0x9CA1 0xC441 # HANGUL SYLLABLE SSANGSIOS-OE-IEUNG -0x9CA2 0xC442 # HANGUL SYLLABLE SSANGSIOS-OE-CIEUC -0x9CA3 0xC443 # HANGUL SYLLABLE SSANGSIOS-OE-CHIEUCH -0x9CA4 0xC444 # HANGUL SYLLABLE SSANGSIOS-OE-KHIEUKH -0x9CA5 0xC445 # HANGUL SYLLABLE SSANGSIOS-OE-THIEUTH -0x9CA6 0xC446 # HANGUL SYLLABLE SSANGSIOS-OE-PHIEUPH -0x9CA7 0xC447 # HANGUL SYLLABLE SSANGSIOS-OE-HIEUH -0x9CA8 0xC449 # HANGUL SYLLABLE SSANGSIOS-YO-KIYEOK -0x9CA9 0xC44A # HANGUL SYLLABLE SSANGSIOS-YO-SSANGKIYEOK -0x9CAA 0xC44B # HANGUL SYLLABLE SSANGSIOS-YO-KIYEOKSIOS -0x9CAB 0xC44C # HANGUL SYLLABLE SSANGSIOS-YO-NIEUN -0x9CAC 0xC44D # HANGUL SYLLABLE SSANGSIOS-YO-NIEUNCIEUC -0x9CAD 0xC44E # HANGUL SYLLABLE SSANGSIOS-YO-NIEUNHIEUH -0x9CAE 0xC44F # HANGUL SYLLABLE SSANGSIOS-YO-TIKEUT -0x9CAF 0xC450 # HANGUL SYLLABLE SSANGSIOS-YO-RIEUL -0x9CB0 0xC451 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULKIYEOK -0x9CB1 0xC452 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULMIEUM -0x9CB2 0xC453 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULPIEUP -0x9CB3 0xC454 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULSIOS -0x9CB4 0xC455 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULTHIEUTH -0x9CB5 0xC456 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULPHIEUPH -0x9CB6 0xC457 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULHIEUH -0x9CB7 0xC458 # HANGUL SYLLABLE SSANGSIOS-YO-MIEUM -0x9CB8 0xC459 # HANGUL SYLLABLE SSANGSIOS-YO-PIEUP -0x9CB9 0xC45A # HANGUL SYLLABLE SSANGSIOS-YO-PIEUPSIOS -0x9CBA 0xC45B # HANGUL SYLLABLE SSANGSIOS-YO-SIOS -0x9CBB 0xC45C # HANGUL SYLLABLE SSANGSIOS-YO-SSANGSIOS -0x9CBC 0xC45D # HANGUL SYLLABLE SSANGSIOS-YO-IEUNG -0x9CBD 0xC45E # HANGUL SYLLABLE SSANGSIOS-YO-CIEUC -0x9CBE 0xC45F # HANGUL SYLLABLE SSANGSIOS-YO-CHIEUCH -0x9CBF 0xC460 # HANGUL SYLLABLE SSANGSIOS-YO-KHIEUKH -0x9CC0 0xC461 # HANGUL SYLLABLE SSANGSIOS-YO-THIEUTH -0x9CC1 0xC462 # HANGUL SYLLABLE SSANGSIOS-YO-PHIEUPH -0x9CC2 0xC463 # HANGUL SYLLABLE SSANGSIOS-YO-HIEUH -0x9CC3 0xC466 # HANGUL SYLLABLE SSANGSIOS-U-SSANGKIYEOK -0x9CC4 0xC467 # HANGUL SYLLABLE SSANGSIOS-U-KIYEOKSIOS -0x9CC5 0xC469 # HANGUL SYLLABLE SSANGSIOS-U-NIEUNCIEUC -0x9CC6 0xC46A # HANGUL SYLLABLE SSANGSIOS-U-NIEUNHIEUH -0x9CC7 0xC46B # HANGUL SYLLABLE SSANGSIOS-U-TIKEUT -0x9CC8 0xC46D # HANGUL SYLLABLE SSANGSIOS-U-RIEULKIYEOK -0x9CC9 0xC46E # HANGUL SYLLABLE SSANGSIOS-U-RIEULMIEUM -0x9CCA 0xC46F # HANGUL SYLLABLE SSANGSIOS-U-RIEULPIEUP -0x9CCB 0xC470 # HANGUL SYLLABLE SSANGSIOS-U-RIEULSIOS -0x9CCC 0xC471 # HANGUL SYLLABLE SSANGSIOS-U-RIEULTHIEUTH -0x9CCD 0xC472 # HANGUL SYLLABLE SSANGSIOS-U-RIEULPHIEUPH -0x9CCE 0xC473 # HANGUL SYLLABLE SSANGSIOS-U-RIEULHIEUH -0x9CCF 0xC476 # HANGUL SYLLABLE SSANGSIOS-U-PIEUPSIOS -0x9CD0 0xC477 # HANGUL SYLLABLE SSANGSIOS-U-SIOS -0x9CD1 0xC478 # HANGUL SYLLABLE SSANGSIOS-U-SSANGSIOS -0x9CD2 0xC47A # HANGUL SYLLABLE SSANGSIOS-U-CIEUC -0x9CD3 0xC47B # HANGUL SYLLABLE SSANGSIOS-U-CHIEUCH -0x9CD4 0xC47C # HANGUL SYLLABLE SSANGSIOS-U-KHIEUKH -0x9CD5 0xC47D # HANGUL SYLLABLE SSANGSIOS-U-THIEUTH -0x9CD6 0xC47E # HANGUL SYLLABLE SSANGSIOS-U-PHIEUPH -0x9CD7 0xC47F # HANGUL SYLLABLE SSANGSIOS-U-HIEUH -0x9CD8 0xC481 # HANGUL SYLLABLE SSANGSIOS-WEO-KIYEOK -0x9CD9 0xC482 # HANGUL SYLLABLE SSANGSIOS-WEO-SSANGKIYEOK -0x9CDA 0xC483 # HANGUL SYLLABLE SSANGSIOS-WEO-KIYEOKSIOS -0x9CDB 0xC484 # HANGUL SYLLABLE SSANGSIOS-WEO-NIEUN -0x9CDC 0xC485 # HANGUL SYLLABLE SSANGSIOS-WEO-NIEUNCIEUC -0x9CDD 0xC486 # HANGUL SYLLABLE SSANGSIOS-WEO-NIEUNHIEUH -0x9CDE 0xC487 # HANGUL SYLLABLE SSANGSIOS-WEO-TIKEUT -0x9CDF 0xC488 # HANGUL SYLLABLE SSANGSIOS-WEO-RIEUL -0x9CE0 0xC489 # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULKIYEOK -0x9CE1 0xC48A # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULMIEUM -0x9CE2 0xC48B # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULPIEUP -0x9CE3 0xC48C # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULSIOS -0x9CE4 0xC48D # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULTHIEUTH -0x9CE5 0xC48E # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULPHIEUPH -0x9CE6 0xC48F # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULHIEUH -0x9CE7 0xC490 # HANGUL SYLLABLE SSANGSIOS-WEO-MIEUM -0x9CE8 0xC491 # HANGUL SYLLABLE SSANGSIOS-WEO-PIEUP -0x9CE9 0xC492 # HANGUL SYLLABLE SSANGSIOS-WEO-PIEUPSIOS -0x9CEA 0xC493 # HANGUL SYLLABLE SSANGSIOS-WEO-SIOS -0x9CEB 0xC495 # HANGUL SYLLABLE SSANGSIOS-WEO-IEUNG -0x9CEC 0xC496 # HANGUL SYLLABLE SSANGSIOS-WEO-CIEUC -0x9CED 0xC497 # HANGUL SYLLABLE SSANGSIOS-WEO-CHIEUCH -0x9CEE 0xC498 # HANGUL SYLLABLE SSANGSIOS-WEO-KHIEUKH -0x9CEF 0xC499 # HANGUL SYLLABLE SSANGSIOS-WEO-THIEUTH -0x9CF0 0xC49A # HANGUL SYLLABLE SSANGSIOS-WEO-PHIEUPH -0x9CF1 0xC49B # HANGUL SYLLABLE SSANGSIOS-WEO-HIEUH -0x9CF2 0xC49D # HANGUL SYLLABLE SSANGSIOS-WE-KIYEOK -0x9CF3 0xC49E # HANGUL SYLLABLE SSANGSIOS-WE-SSANGKIYEOK -0x9CF4 0xC49F # HANGUL SYLLABLE SSANGSIOS-WE-KIYEOKSIOS -0x9CF5 0xC4A0 # HANGUL SYLLABLE SSANGSIOS-WE-NIEUN -0x9CF6 0xC4A1 # HANGUL SYLLABLE SSANGSIOS-WE-NIEUNCIEUC -0x9CF7 0xC4A2 # HANGUL SYLLABLE SSANGSIOS-WE-NIEUNHIEUH -0x9CF8 0xC4A3 # HANGUL SYLLABLE SSANGSIOS-WE-TIKEUT -0x9CF9 0xC4A4 # HANGUL SYLLABLE SSANGSIOS-WE-RIEUL -0x9CFA 0xC4A5 # HANGUL SYLLABLE SSANGSIOS-WE-RIEULKIYEOK -0x9CFB 0xC4A6 # HANGUL SYLLABLE SSANGSIOS-WE-RIEULMIEUM -0x9CFC 0xC4A7 # HANGUL SYLLABLE SSANGSIOS-WE-RIEULPIEUP -0x9CFD 0xC4A8 # HANGUL SYLLABLE SSANGSIOS-WE-RIEULSIOS -0x9CFE 0xC4A9 # HANGUL SYLLABLE SSANGSIOS-WE-RIEULTHIEUTH -0x9D41 0xC4AA # HANGUL SYLLABLE SSANGSIOS-WE-RIEULPHIEUPH -0x9D42 0xC4AB # HANGUL SYLLABLE SSANGSIOS-WE-RIEULHIEUH -0x9D43 0xC4AC # HANGUL SYLLABLE SSANGSIOS-WE-MIEUM -0x9D44 0xC4AD # HANGUL SYLLABLE SSANGSIOS-WE-PIEUP -0x9D45 0xC4AE # HANGUL SYLLABLE SSANGSIOS-WE-PIEUPSIOS -0x9D46 0xC4AF # HANGUL SYLLABLE SSANGSIOS-WE-SIOS -0x9D47 0xC4B0 # HANGUL SYLLABLE SSANGSIOS-WE-SSANGSIOS -0x9D48 0xC4B1 # HANGUL SYLLABLE SSANGSIOS-WE-IEUNG -0x9D49 0xC4B2 # HANGUL SYLLABLE SSANGSIOS-WE-CIEUC -0x9D4A 0xC4B3 # HANGUL SYLLABLE SSANGSIOS-WE-CHIEUCH -0x9D4B 0xC4B4 # HANGUL SYLLABLE SSANGSIOS-WE-KHIEUKH -0x9D4C 0xC4B5 # HANGUL SYLLABLE SSANGSIOS-WE-THIEUTH -0x9D4D 0xC4B6 # HANGUL SYLLABLE SSANGSIOS-WE-PHIEUPH -0x9D4E 0xC4B7 # HANGUL SYLLABLE SSANGSIOS-WE-HIEUH -0x9D4F 0xC4B9 # HANGUL SYLLABLE SSANGSIOS-WI-KIYEOK -0x9D50 0xC4BA # HANGUL SYLLABLE SSANGSIOS-WI-SSANGKIYEOK -0x9D51 0xC4BB # HANGUL SYLLABLE SSANGSIOS-WI-KIYEOKSIOS -0x9D52 0xC4BD # HANGUL SYLLABLE SSANGSIOS-WI-NIEUNCIEUC -0x9D53 0xC4BE # HANGUL SYLLABLE SSANGSIOS-WI-NIEUNHIEUH -0x9D54 0xC4BF # HANGUL SYLLABLE SSANGSIOS-WI-TIKEUT -0x9D55 0xC4C0 # HANGUL SYLLABLE SSANGSIOS-WI-RIEUL -0x9D56 0xC4C1 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULKIYEOK -0x9D57 0xC4C2 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULMIEUM -0x9D58 0xC4C3 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULPIEUP -0x9D59 0xC4C4 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULSIOS -0x9D5A 0xC4C5 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULTHIEUTH -0x9D61 0xC4C6 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULPHIEUPH -0x9D62 0xC4C7 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULHIEUH -0x9D63 0xC4C8 # HANGUL SYLLABLE SSANGSIOS-WI-MIEUM -0x9D64 0xC4C9 # HANGUL SYLLABLE SSANGSIOS-WI-PIEUP -0x9D65 0xC4CA # HANGUL SYLLABLE SSANGSIOS-WI-PIEUPSIOS -0x9D66 0xC4CB # HANGUL SYLLABLE SSANGSIOS-WI-SIOS -0x9D67 0xC4CC # HANGUL SYLLABLE SSANGSIOS-WI-SSANGSIOS -0x9D68 0xC4CD # HANGUL SYLLABLE SSANGSIOS-WI-IEUNG -0x9D69 0xC4CE # HANGUL SYLLABLE SSANGSIOS-WI-CIEUC -0x9D6A 0xC4CF # HANGUL SYLLABLE SSANGSIOS-WI-CHIEUCH -0x9D6B 0xC4D0 # HANGUL SYLLABLE SSANGSIOS-WI-KHIEUKH -0x9D6C 0xC4D1 # HANGUL SYLLABLE SSANGSIOS-WI-THIEUTH -0x9D6D 0xC4D2 # HANGUL SYLLABLE SSANGSIOS-WI-PHIEUPH -0x9D6E 0xC4D3 # HANGUL SYLLABLE SSANGSIOS-WI-HIEUH -0x9D6F 0xC4D4 # HANGUL SYLLABLE SSANGSIOS-YU -0x9D70 0xC4D5 # HANGUL SYLLABLE SSANGSIOS-YU-KIYEOK -0x9D71 0xC4D6 # HANGUL SYLLABLE SSANGSIOS-YU-SSANGKIYEOK -0x9D72 0xC4D7 # HANGUL SYLLABLE SSANGSIOS-YU-KIYEOKSIOS -0x9D73 0xC4D8 # HANGUL SYLLABLE SSANGSIOS-YU-NIEUN -0x9D74 0xC4D9 # HANGUL SYLLABLE SSANGSIOS-YU-NIEUNCIEUC -0x9D75 0xC4DA # HANGUL SYLLABLE SSANGSIOS-YU-NIEUNHIEUH -0x9D76 0xC4DB # HANGUL SYLLABLE SSANGSIOS-YU-TIKEUT -0x9D77 0xC4DC # HANGUL SYLLABLE SSANGSIOS-YU-RIEUL -0x9D78 0xC4DD # HANGUL SYLLABLE SSANGSIOS-YU-RIEULKIYEOK -0x9D79 0xC4DE # HANGUL SYLLABLE SSANGSIOS-YU-RIEULMIEUM -0x9D7A 0xC4DF # HANGUL SYLLABLE SSANGSIOS-YU-RIEULPIEUP -0x9D81 0xC4E0 # HANGUL SYLLABLE SSANGSIOS-YU-RIEULSIOS -0x9D82 0xC4E1 # HANGUL SYLLABLE SSANGSIOS-YU-RIEULTHIEUTH -0x9D83 0xC4E2 # HANGUL SYLLABLE SSANGSIOS-YU-RIEULPHIEUPH -0x9D84 0xC4E3 # HANGUL SYLLABLE SSANGSIOS-YU-RIEULHIEUH -0x9D85 0xC4E4 # HANGUL SYLLABLE SSANGSIOS-YU-MIEUM -0x9D86 0xC4E5 # HANGUL SYLLABLE SSANGSIOS-YU-PIEUP -0x9D87 0xC4E6 # HANGUL SYLLABLE SSANGSIOS-YU-PIEUPSIOS -0x9D88 0xC4E7 # HANGUL SYLLABLE SSANGSIOS-YU-SIOS -0x9D89 0xC4E8 # HANGUL SYLLABLE SSANGSIOS-YU-SSANGSIOS -0x9D8A 0xC4EA # HANGUL SYLLABLE SSANGSIOS-YU-CIEUC -0x9D8B 0xC4EB # HANGUL SYLLABLE SSANGSIOS-YU-CHIEUCH -0x9D8C 0xC4EC # HANGUL SYLLABLE SSANGSIOS-YU-KHIEUKH -0x9D8D 0xC4ED # HANGUL SYLLABLE SSANGSIOS-YU-THIEUTH -0x9D8E 0xC4EE # HANGUL SYLLABLE SSANGSIOS-YU-PHIEUPH -0x9D8F 0xC4EF # HANGUL SYLLABLE SSANGSIOS-YU-HIEUH -0x9D90 0xC4F2 # HANGUL SYLLABLE SSANGSIOS-EU-SSANGKIYEOK -0x9D91 0xC4F3 # HANGUL SYLLABLE SSANGSIOS-EU-KIYEOKSIOS -0x9D92 0xC4F5 # HANGUL SYLLABLE SSANGSIOS-EU-NIEUNCIEUC -0x9D93 0xC4F6 # HANGUL SYLLABLE SSANGSIOS-EU-NIEUNHIEUH -0x9D94 0xC4F7 # HANGUL SYLLABLE SSANGSIOS-EU-TIKEUT -0x9D95 0xC4F9 # HANGUL SYLLABLE SSANGSIOS-EU-RIEULKIYEOK -0x9D96 0xC4FB # HANGUL SYLLABLE SSANGSIOS-EU-RIEULPIEUP -0x9D97 0xC4FC # HANGUL SYLLABLE SSANGSIOS-EU-RIEULSIOS -0x9D98 0xC4FD # HANGUL SYLLABLE SSANGSIOS-EU-RIEULTHIEUTH -0x9D99 0xC4FE # HANGUL SYLLABLE SSANGSIOS-EU-RIEULPHIEUPH -0x9D9A 0xC502 # HANGUL SYLLABLE SSANGSIOS-EU-PIEUPSIOS -0x9D9B 0xC503 # HANGUL SYLLABLE SSANGSIOS-EU-SIOS -0x9D9C 0xC504 # HANGUL SYLLABLE SSANGSIOS-EU-SSANGSIOS -0x9D9D 0xC505 # HANGUL SYLLABLE SSANGSIOS-EU-IEUNG -0x9D9E 0xC506 # HANGUL SYLLABLE SSANGSIOS-EU-CIEUC -0x9D9F 0xC507 # HANGUL SYLLABLE SSANGSIOS-EU-CHIEUCH -0x9DA0 0xC508 # HANGUL SYLLABLE SSANGSIOS-EU-KHIEUKH -0x9DA1 0xC509 # HANGUL SYLLABLE SSANGSIOS-EU-THIEUTH -0x9DA2 0xC50A # HANGUL SYLLABLE SSANGSIOS-EU-PHIEUPH -0x9DA3 0xC50B # HANGUL SYLLABLE SSANGSIOS-EU-HIEUH -0x9DA4 0xC50D # HANGUL SYLLABLE SSANGSIOS-YI-KIYEOK -0x9DA5 0xC50E # HANGUL SYLLABLE SSANGSIOS-YI-SSANGKIYEOK -0x9DA6 0xC50F # HANGUL SYLLABLE SSANGSIOS-YI-KIYEOKSIOS -0x9DA7 0xC511 # HANGUL SYLLABLE SSANGSIOS-YI-NIEUNCIEUC -0x9DA8 0xC512 # HANGUL SYLLABLE SSANGSIOS-YI-NIEUNHIEUH -0x9DA9 0xC513 # HANGUL SYLLABLE SSANGSIOS-YI-TIKEUT -0x9DAA 0xC515 # HANGUL SYLLABLE SSANGSIOS-YI-RIEULKIYEOK -0x9DAB 0xC516 # HANGUL SYLLABLE SSANGSIOS-YI-RIEULMIEUM -0x9DAC 0xC517 # HANGUL SYLLABLE SSANGSIOS-YI-RIEULPIEUP -0x9DAD 0xC518 # HANGUL SYLLABLE SSANGSIOS-YI-RIEULSIOS -0x9DAE 0xC519 # HANGUL SYLLABLE SSANGSIOS-YI-RIEULTHIEUTH -0x9DAF 0xC51A # HANGUL SYLLABLE SSANGSIOS-YI-RIEULPHIEUPH -0x9DB0 0xC51B # HANGUL SYLLABLE SSANGSIOS-YI-RIEULHIEUH -0x9DB1 0xC51D # HANGUL SYLLABLE SSANGSIOS-YI-PIEUP -0x9DB2 0xC51E # HANGUL SYLLABLE SSANGSIOS-YI-PIEUPSIOS -0x9DB3 0xC51F # HANGUL SYLLABLE SSANGSIOS-YI-SIOS -0x9DB4 0xC520 # HANGUL SYLLABLE SSANGSIOS-YI-SSANGSIOS -0x9DB5 0xC521 # HANGUL SYLLABLE SSANGSIOS-YI-IEUNG -0x9DB6 0xC522 # HANGUL SYLLABLE SSANGSIOS-YI-CIEUC -0x9DB7 0xC523 # HANGUL SYLLABLE SSANGSIOS-YI-CHIEUCH -0x9DB8 0xC524 # HANGUL SYLLABLE SSANGSIOS-YI-KHIEUKH -0x9DB9 0xC525 # HANGUL SYLLABLE SSANGSIOS-YI-THIEUTH -0x9DBA 0xC526 # HANGUL SYLLABLE SSANGSIOS-YI-PHIEUPH -0x9DBB 0xC527 # HANGUL SYLLABLE SSANGSIOS-YI-HIEUH -0x9DBC 0xC52A # HANGUL SYLLABLE SSANGSIOS-I-SSANGKIYEOK -0x9DBD 0xC52B # HANGUL SYLLABLE SSANGSIOS-I-KIYEOKSIOS -0x9DBE 0xC52D # HANGUL SYLLABLE SSANGSIOS-I-NIEUNCIEUC -0x9DBF 0xC52E # HANGUL SYLLABLE SSANGSIOS-I-NIEUNHIEUH -0x9DC0 0xC52F # HANGUL SYLLABLE SSANGSIOS-I-TIKEUT -0x9DC1 0xC531 # HANGUL SYLLABLE SSANGSIOS-I-RIEULKIYEOK -0x9DC2 0xC532 # HANGUL SYLLABLE SSANGSIOS-I-RIEULMIEUM -0x9DC3 0xC533 # HANGUL SYLLABLE SSANGSIOS-I-RIEULPIEUP -0x9DC4 0xC534 # HANGUL SYLLABLE SSANGSIOS-I-RIEULSIOS -0x9DC5 0xC535 # HANGUL SYLLABLE SSANGSIOS-I-RIEULTHIEUTH -0x9DC6 0xC536 # HANGUL SYLLABLE SSANGSIOS-I-RIEULPHIEUPH -0x9DC7 0xC537 # HANGUL SYLLABLE SSANGSIOS-I-RIEULHIEUH -0x9DC8 0xC53A # HANGUL SYLLABLE SSANGSIOS-I-PIEUPSIOS -0x9DC9 0xC53C # HANGUL SYLLABLE SSANGSIOS-I-SSANGSIOS -0x9DCA 0xC53E # HANGUL SYLLABLE SSANGSIOS-I-CIEUC -0x9DCB 0xC53F # HANGUL SYLLABLE SSANGSIOS-I-CHIEUCH -0x9DCC 0xC540 # HANGUL SYLLABLE SSANGSIOS-I-KHIEUKH -0x9DCD 0xC541 # HANGUL SYLLABLE SSANGSIOS-I-THIEUTH -0x9DCE 0xC542 # HANGUL SYLLABLE SSANGSIOS-I-PHIEUPH -0x9DCF 0xC543 # HANGUL SYLLABLE SSANGSIOS-I-HIEUH -0x9DD0 0xC546 # HANGUL SYLLABLE IEUNG-A-SSANGKIYEOK -0x9DD1 0xC547 # HANGUL SYLLABLE IEUNG-A-KIYEOKSIOS -0x9DD2 0xC54B # HANGUL SYLLABLE IEUNG-A-TIKEUT -0x9DD3 0xC54F # HANGUL SYLLABLE IEUNG-A-RIEULPIEUP -0x9DD4 0xC550 # HANGUL SYLLABLE IEUNG-A-RIEULSIOS -0x9DD5 0xC551 # HANGUL SYLLABLE IEUNG-A-RIEULTHIEUTH -0x9DD6 0xC552 # HANGUL SYLLABLE IEUNG-A-RIEULPHIEUPH -0x9DD7 0xC556 # HANGUL SYLLABLE IEUNG-A-PIEUPSIOS -0x9DD8 0xC55A # HANGUL SYLLABLE IEUNG-A-CIEUC -0x9DD9 0xC55B # HANGUL SYLLABLE IEUNG-A-CHIEUCH -0x9DDA 0xC55C # HANGUL SYLLABLE IEUNG-A-KHIEUKH -0x9DDB 0xC55F # HANGUL SYLLABLE IEUNG-A-HIEUH -0x9DDC 0xC562 # HANGUL SYLLABLE IEUNG-AE-SSANGKIYEOK -0x9DDD 0xC563 # HANGUL SYLLABLE IEUNG-AE-KIYEOKSIOS -0x9DDE 0xC565 # HANGUL SYLLABLE IEUNG-AE-NIEUNCIEUC -0x9DDF 0xC566 # HANGUL SYLLABLE IEUNG-AE-NIEUNHIEUH -0x9DE0 0xC567 # HANGUL SYLLABLE IEUNG-AE-TIKEUT -0x9DE1 0xC569 # HANGUL SYLLABLE IEUNG-AE-RIEULKIYEOK -0x9DE2 0xC56A # HANGUL SYLLABLE IEUNG-AE-RIEULMIEUM -0x9DE3 0xC56B # HANGUL SYLLABLE IEUNG-AE-RIEULPIEUP -0x9DE4 0xC56C # HANGUL SYLLABLE IEUNG-AE-RIEULSIOS -0x9DE5 0xC56D # HANGUL SYLLABLE IEUNG-AE-RIEULTHIEUTH -0x9DE6 0xC56E # HANGUL SYLLABLE IEUNG-AE-RIEULPHIEUPH -0x9DE7 0xC56F # HANGUL SYLLABLE IEUNG-AE-RIEULHIEUH -0x9DE8 0xC572 # HANGUL SYLLABLE IEUNG-AE-PIEUPSIOS -0x9DE9 0xC576 # HANGUL SYLLABLE IEUNG-AE-CIEUC -0x9DEA 0xC577 # HANGUL SYLLABLE IEUNG-AE-CHIEUCH -0x9DEB 0xC578 # HANGUL SYLLABLE IEUNG-AE-KHIEUKH -0x9DEC 0xC579 # HANGUL SYLLABLE IEUNG-AE-THIEUTH -0x9DED 0xC57A # HANGUL SYLLABLE IEUNG-AE-PHIEUPH -0x9DEE 0xC57B # HANGUL SYLLABLE IEUNG-AE-HIEUH -0x9DEF 0xC57E # HANGUL SYLLABLE IEUNG-YA-SSANGKIYEOK -0x9DF0 0xC57F # HANGUL SYLLABLE IEUNG-YA-KIYEOKSIOS -0x9DF1 0xC581 # HANGUL SYLLABLE IEUNG-YA-NIEUNCIEUC -0x9DF2 0xC582 # HANGUL SYLLABLE IEUNG-YA-NIEUNHIEUH -0x9DF3 0xC583 # HANGUL SYLLABLE IEUNG-YA-TIKEUT -0x9DF4 0xC585 # HANGUL SYLLABLE IEUNG-YA-RIEULKIYEOK -0x9DF5 0xC586 # HANGUL SYLLABLE IEUNG-YA-RIEULMIEUM -0x9DF6 0xC588 # HANGUL SYLLABLE IEUNG-YA-RIEULSIOS -0x9DF7 0xC589 # HANGUL SYLLABLE IEUNG-YA-RIEULTHIEUTH -0x9DF8 0xC58A # HANGUL SYLLABLE IEUNG-YA-RIEULPHIEUPH -0x9DF9 0xC58B # HANGUL SYLLABLE IEUNG-YA-RIEULHIEUH -0x9DFA 0xC58E # HANGUL SYLLABLE IEUNG-YA-PIEUPSIOS -0x9DFB 0xC590 # HANGUL SYLLABLE IEUNG-YA-SSANGSIOS -0x9DFC 0xC592 # HANGUL SYLLABLE IEUNG-YA-CIEUC -0x9DFD 0xC593 # HANGUL SYLLABLE IEUNG-YA-CHIEUCH -0x9DFE 0xC594 # HANGUL SYLLABLE IEUNG-YA-KHIEUKH -0x9E41 0xC596 # HANGUL SYLLABLE IEUNG-YA-PHIEUPH -0x9E42 0xC599 # HANGUL SYLLABLE IEUNG-YAE-KIYEOK -0x9E43 0xC59A # HANGUL SYLLABLE IEUNG-YAE-SSANGKIYEOK -0x9E44 0xC59B # HANGUL SYLLABLE IEUNG-YAE-KIYEOKSIOS -0x9E45 0xC59D # HANGUL SYLLABLE IEUNG-YAE-NIEUNCIEUC -0x9E46 0xC59E # HANGUL SYLLABLE IEUNG-YAE-NIEUNHIEUH -0x9E47 0xC59F # HANGUL SYLLABLE IEUNG-YAE-TIKEUT -0x9E48 0xC5A1 # HANGUL SYLLABLE IEUNG-YAE-RIEULKIYEOK -0x9E49 0xC5A2 # HANGUL SYLLABLE IEUNG-YAE-RIEULMIEUM -0x9E4A 0xC5A3 # HANGUL SYLLABLE IEUNG-YAE-RIEULPIEUP -0x9E4B 0xC5A4 # HANGUL SYLLABLE IEUNG-YAE-RIEULSIOS -0x9E4C 0xC5A5 # HANGUL SYLLABLE IEUNG-YAE-RIEULTHIEUTH -0x9E4D 0xC5A6 # HANGUL SYLLABLE IEUNG-YAE-RIEULPHIEUPH -0x9E4E 0xC5A7 # HANGUL SYLLABLE IEUNG-YAE-RIEULHIEUH -0x9E4F 0xC5A8 # HANGUL SYLLABLE IEUNG-YAE-MIEUM -0x9E50 0xC5AA # HANGUL SYLLABLE IEUNG-YAE-PIEUPSIOS -0x9E51 0xC5AB # HANGUL SYLLABLE IEUNG-YAE-SIOS -0x9E52 0xC5AC # HANGUL SYLLABLE IEUNG-YAE-SSANGSIOS -0x9E53 0xC5AD # HANGUL SYLLABLE IEUNG-YAE-IEUNG -0x9E54 0xC5AE # HANGUL SYLLABLE IEUNG-YAE-CIEUC -0x9E55 0xC5AF # HANGUL SYLLABLE IEUNG-YAE-CHIEUCH -0x9E56 0xC5B0 # HANGUL SYLLABLE IEUNG-YAE-KHIEUKH -0x9E57 0xC5B1 # HANGUL SYLLABLE IEUNG-YAE-THIEUTH -0x9E58 0xC5B2 # HANGUL SYLLABLE IEUNG-YAE-PHIEUPH -0x9E59 0xC5B3 # HANGUL SYLLABLE IEUNG-YAE-HIEUH -0x9E5A 0xC5B6 # HANGUL SYLLABLE IEUNG-EO-SSANGKIYEOK -0x9E61 0xC5B7 # HANGUL SYLLABLE IEUNG-EO-KIYEOKSIOS -0x9E62 0xC5BA # HANGUL SYLLABLE IEUNG-EO-NIEUNHIEUH -0x9E63 0xC5BF # HANGUL SYLLABLE IEUNG-EO-RIEULPIEUP -0x9E64 0xC5C0 # HANGUL SYLLABLE IEUNG-EO-RIEULSIOS -0x9E65 0xC5C1 # HANGUL SYLLABLE IEUNG-EO-RIEULTHIEUTH -0x9E66 0xC5C2 # HANGUL SYLLABLE IEUNG-EO-RIEULPHIEUPH -0x9E67 0xC5C3 # HANGUL SYLLABLE IEUNG-EO-RIEULHIEUH -0x9E68 0xC5CB # HANGUL SYLLABLE IEUNG-EO-CHIEUCH -0x9E69 0xC5CD # HANGUL SYLLABLE IEUNG-EO-THIEUTH -0x9E6A 0xC5CF # HANGUL SYLLABLE IEUNG-EO-HIEUH -0x9E6B 0xC5D2 # HANGUL SYLLABLE IEUNG-E-SSANGKIYEOK -0x9E6C 0xC5D3 # HANGUL SYLLABLE IEUNG-E-KIYEOKSIOS -0x9E6D 0xC5D5 # HANGUL SYLLABLE IEUNG-E-NIEUNCIEUC -0x9E6E 0xC5D6 # HANGUL SYLLABLE IEUNG-E-NIEUNHIEUH -0x9E6F 0xC5D7 # HANGUL SYLLABLE IEUNG-E-TIKEUT -0x9E70 0xC5D9 # HANGUL SYLLABLE IEUNG-E-RIEULKIYEOK -0x9E71 0xC5DA # HANGUL SYLLABLE IEUNG-E-RIEULMIEUM -0x9E72 0xC5DB # HANGUL SYLLABLE IEUNG-E-RIEULPIEUP -0x9E73 0xC5DC # HANGUL SYLLABLE IEUNG-E-RIEULSIOS -0x9E74 0xC5DD # HANGUL SYLLABLE IEUNG-E-RIEULTHIEUTH -0x9E75 0xC5DE # HANGUL SYLLABLE IEUNG-E-RIEULPHIEUPH -0x9E76 0xC5DF # HANGUL SYLLABLE IEUNG-E-RIEULHIEUH -0x9E77 0xC5E2 # HANGUL SYLLABLE IEUNG-E-PIEUPSIOS -0x9E78 0xC5E4 # HANGUL SYLLABLE IEUNG-E-SSANGSIOS -0x9E79 0xC5E6 # HANGUL SYLLABLE IEUNG-E-CIEUC -0x9E7A 0xC5E7 # HANGUL SYLLABLE IEUNG-E-CHIEUCH -0x9E81 0xC5E8 # HANGUL SYLLABLE IEUNG-E-KHIEUKH -0x9E82 0xC5E9 # HANGUL SYLLABLE IEUNG-E-THIEUTH -0x9E83 0xC5EA # HANGUL SYLLABLE IEUNG-E-PHIEUPH -0x9E84 0xC5EB # HANGUL SYLLABLE IEUNG-E-HIEUH -0x9E85 0xC5EF # HANGUL SYLLABLE IEUNG-YEO-KIYEOKSIOS -0x9E86 0xC5F1 # HANGUL SYLLABLE IEUNG-YEO-NIEUNCIEUC -0x9E87 0xC5F2 # HANGUL SYLLABLE IEUNG-YEO-NIEUNHIEUH -0x9E88 0xC5F3 # HANGUL SYLLABLE IEUNG-YEO-TIKEUT -0x9E89 0xC5F5 # HANGUL SYLLABLE IEUNG-YEO-RIEULKIYEOK -0x9E8A 0xC5F8 # HANGUL SYLLABLE IEUNG-YEO-RIEULSIOS -0x9E8B 0xC5F9 # HANGUL SYLLABLE IEUNG-YEO-RIEULTHIEUTH -0x9E8C 0xC5FA # HANGUL SYLLABLE IEUNG-YEO-RIEULPHIEUPH -0x9E8D 0xC5FB # HANGUL SYLLABLE IEUNG-YEO-RIEULHIEUH -0x9E8E 0xC602 # HANGUL SYLLABLE IEUNG-YEO-CIEUC -0x9E8F 0xC603 # HANGUL SYLLABLE IEUNG-YEO-CHIEUCH -0x9E90 0xC604 # HANGUL SYLLABLE IEUNG-YEO-KHIEUKH -0x9E91 0xC609 # HANGUL SYLLABLE IEUNG-YE-KIYEOK -0x9E92 0xC60A # HANGUL SYLLABLE IEUNG-YE-SSANGKIYEOK -0x9E93 0xC60B # HANGUL SYLLABLE IEUNG-YE-KIYEOKSIOS -0x9E94 0xC60D # HANGUL SYLLABLE IEUNG-YE-NIEUNCIEUC -0x9E95 0xC60E # HANGUL SYLLABLE IEUNG-YE-NIEUNHIEUH -0x9E96 0xC60F # HANGUL SYLLABLE IEUNG-YE-TIKEUT -0x9E97 0xC611 # HANGUL SYLLABLE IEUNG-YE-RIEULKIYEOK -0x9E98 0xC612 # HANGUL SYLLABLE IEUNG-YE-RIEULMIEUM -0x9E99 0xC613 # HANGUL SYLLABLE IEUNG-YE-RIEULPIEUP -0x9E9A 0xC614 # HANGUL SYLLABLE IEUNG-YE-RIEULSIOS -0x9E9B 0xC615 # HANGUL SYLLABLE IEUNG-YE-RIEULTHIEUTH -0x9E9C 0xC616 # HANGUL SYLLABLE IEUNG-YE-RIEULPHIEUPH -0x9E9D 0xC617 # HANGUL SYLLABLE IEUNG-YE-RIEULHIEUH -0x9E9E 0xC61A # HANGUL SYLLABLE IEUNG-YE-PIEUPSIOS -0x9E9F 0xC61D # HANGUL SYLLABLE IEUNG-YE-IEUNG -0x9EA0 0xC61E # HANGUL SYLLABLE IEUNG-YE-CIEUC -0x9EA1 0xC61F # HANGUL SYLLABLE IEUNG-YE-CHIEUCH -0x9EA2 0xC620 # HANGUL SYLLABLE IEUNG-YE-KHIEUKH -0x9EA3 0xC621 # HANGUL SYLLABLE IEUNG-YE-THIEUTH -0x9EA4 0xC622 # HANGUL SYLLABLE IEUNG-YE-PHIEUPH -0x9EA5 0xC623 # HANGUL SYLLABLE IEUNG-YE-HIEUH -0x9EA6 0xC626 # HANGUL SYLLABLE IEUNG-O-SSANGKIYEOK -0x9EA7 0xC627 # HANGUL SYLLABLE IEUNG-O-KIYEOKSIOS -0x9EA8 0xC629 # HANGUL SYLLABLE IEUNG-O-NIEUNCIEUC -0x9EA9 0xC62A # HANGUL SYLLABLE IEUNG-O-NIEUNHIEUH -0x9EAA 0xC62B # HANGUL SYLLABLE IEUNG-O-TIKEUT -0x9EAB 0xC62F # HANGUL SYLLABLE IEUNG-O-RIEULPIEUP -0x9EAC 0xC631 # HANGUL SYLLABLE IEUNG-O-RIEULTHIEUTH -0x9EAD 0xC632 # HANGUL SYLLABLE IEUNG-O-RIEULPHIEUPH -0x9EAE 0xC636 # HANGUL SYLLABLE IEUNG-O-PIEUPSIOS -0x9EAF 0xC638 # HANGUL SYLLABLE IEUNG-O-SSANGSIOS -0x9EB0 0xC63A # HANGUL SYLLABLE IEUNG-O-CIEUC -0x9EB1 0xC63C # HANGUL SYLLABLE IEUNG-O-KHIEUKH -0x9EB2 0xC63D # HANGUL SYLLABLE IEUNG-O-THIEUTH -0x9EB3 0xC63E # HANGUL SYLLABLE IEUNG-O-PHIEUPH -0x9EB4 0xC63F # HANGUL SYLLABLE IEUNG-O-HIEUH -0x9EB5 0xC642 # HANGUL SYLLABLE IEUNG-WA-SSANGKIYEOK -0x9EB6 0xC643 # HANGUL SYLLABLE IEUNG-WA-KIYEOKSIOS -0x9EB7 0xC645 # HANGUL SYLLABLE IEUNG-WA-NIEUNCIEUC -0x9EB8 0xC646 # HANGUL SYLLABLE IEUNG-WA-NIEUNHIEUH -0x9EB9 0xC647 # HANGUL SYLLABLE IEUNG-WA-TIKEUT -0x9EBA 0xC649 # HANGUL SYLLABLE IEUNG-WA-RIEULKIYEOK -0x9EBB 0xC64A # HANGUL SYLLABLE IEUNG-WA-RIEULMIEUM -0x9EBC 0xC64B # HANGUL SYLLABLE IEUNG-WA-RIEULPIEUP -0x9EBD 0xC64C # HANGUL SYLLABLE IEUNG-WA-RIEULSIOS -0x9EBE 0xC64D # HANGUL SYLLABLE IEUNG-WA-RIEULTHIEUTH -0x9EBF 0xC64E # HANGUL SYLLABLE IEUNG-WA-RIEULPHIEUPH -0x9EC0 0xC64F # HANGUL SYLLABLE IEUNG-WA-RIEULHIEUH -0x9EC1 0xC652 # HANGUL SYLLABLE IEUNG-WA-PIEUPSIOS -0x9EC2 0xC656 # HANGUL SYLLABLE IEUNG-WA-CIEUC -0x9EC3 0xC657 # HANGUL SYLLABLE IEUNG-WA-CHIEUCH -0x9EC4 0xC658 # HANGUL SYLLABLE IEUNG-WA-KHIEUKH -0x9EC5 0xC659 # HANGUL SYLLABLE IEUNG-WA-THIEUTH -0x9EC6 0xC65A # HANGUL SYLLABLE IEUNG-WA-PHIEUPH -0x9EC7 0xC65B # HANGUL SYLLABLE IEUNG-WA-HIEUH -0x9EC8 0xC65E # HANGUL SYLLABLE IEUNG-WAE-SSANGKIYEOK -0x9EC9 0xC65F # HANGUL SYLLABLE IEUNG-WAE-KIYEOKSIOS -0x9ECA 0xC661 # HANGUL SYLLABLE IEUNG-WAE-NIEUNCIEUC -0x9ECB 0xC662 # HANGUL SYLLABLE IEUNG-WAE-NIEUNHIEUH -0x9ECC 0xC663 # HANGUL SYLLABLE IEUNG-WAE-TIKEUT -0x9ECD 0xC664 # HANGUL SYLLABLE IEUNG-WAE-RIEUL -0x9ECE 0xC665 # HANGUL SYLLABLE IEUNG-WAE-RIEULKIYEOK -0x9ECF 0xC666 # HANGUL SYLLABLE IEUNG-WAE-RIEULMIEUM -0x9ED0 0xC667 # HANGUL SYLLABLE IEUNG-WAE-RIEULPIEUP -0x9ED1 0xC668 # HANGUL SYLLABLE IEUNG-WAE-RIEULSIOS -0x9ED2 0xC669 # HANGUL SYLLABLE IEUNG-WAE-RIEULTHIEUTH -0x9ED3 0xC66A # HANGUL SYLLABLE IEUNG-WAE-RIEULPHIEUPH -0x9ED4 0xC66B # HANGUL SYLLABLE IEUNG-WAE-RIEULHIEUH -0x9ED5 0xC66D # HANGUL SYLLABLE IEUNG-WAE-PIEUP -0x9ED6 0xC66E # HANGUL SYLLABLE IEUNG-WAE-PIEUPSIOS -0x9ED7 0xC670 # HANGUL SYLLABLE IEUNG-WAE-SSANGSIOS -0x9ED8 0xC672 # HANGUL SYLLABLE IEUNG-WAE-CIEUC -0x9ED9 0xC673 # HANGUL SYLLABLE IEUNG-WAE-CHIEUCH -0x9EDA 0xC674 # HANGUL SYLLABLE IEUNG-WAE-KHIEUKH -0x9EDB 0xC675 # HANGUL SYLLABLE IEUNG-WAE-THIEUTH -0x9EDC 0xC676 # HANGUL SYLLABLE IEUNG-WAE-PHIEUPH -0x9EDD 0xC677 # HANGUL SYLLABLE IEUNG-WAE-HIEUH -0x9EDE 0xC67A # HANGUL SYLLABLE IEUNG-OE-SSANGKIYEOK -0x9EDF 0xC67B # HANGUL SYLLABLE IEUNG-OE-KIYEOKSIOS -0x9EE0 0xC67D # HANGUL SYLLABLE IEUNG-OE-NIEUNCIEUC -0x9EE1 0xC67E # HANGUL SYLLABLE IEUNG-OE-NIEUNHIEUH -0x9EE2 0xC67F # HANGUL SYLLABLE IEUNG-OE-TIKEUT -0x9EE3 0xC681 # HANGUL SYLLABLE IEUNG-OE-RIEULKIYEOK -0x9EE4 0xC682 # HANGUL SYLLABLE IEUNG-OE-RIEULMIEUM -0x9EE5 0xC683 # HANGUL SYLLABLE IEUNG-OE-RIEULPIEUP -0x9EE6 0xC684 # HANGUL SYLLABLE IEUNG-OE-RIEULSIOS -0x9EE7 0xC685 # HANGUL SYLLABLE IEUNG-OE-RIEULTHIEUTH -0x9EE8 0xC686 # HANGUL SYLLABLE IEUNG-OE-RIEULPHIEUPH -0x9EE9 0xC687 # HANGUL SYLLABLE IEUNG-OE-RIEULHIEUH -0x9EEA 0xC68A # HANGUL SYLLABLE IEUNG-OE-PIEUPSIOS -0x9EEB 0xC68C # HANGUL SYLLABLE IEUNG-OE-SSANGSIOS -0x9EEC 0xC68E # HANGUL SYLLABLE IEUNG-OE-CIEUC -0x9EED 0xC68F # HANGUL SYLLABLE IEUNG-OE-CHIEUCH -0x9EEE 0xC690 # HANGUL SYLLABLE IEUNG-OE-KHIEUKH -0x9EEF 0xC691 # HANGUL SYLLABLE IEUNG-OE-THIEUTH -0x9EF0 0xC692 # HANGUL SYLLABLE IEUNG-OE-PHIEUPH -0x9EF1 0xC693 # HANGUL SYLLABLE IEUNG-OE-HIEUH -0x9EF2 0xC696 # HANGUL SYLLABLE IEUNG-YO-SSANGKIYEOK -0x9EF3 0xC697 # HANGUL SYLLABLE IEUNG-YO-KIYEOKSIOS -0x9EF4 0xC699 # HANGUL SYLLABLE IEUNG-YO-NIEUNCIEUC -0x9EF5 0xC69A # HANGUL SYLLABLE IEUNG-YO-NIEUNHIEUH -0x9EF6 0xC69B # HANGUL SYLLABLE IEUNG-YO-TIKEUT -0x9EF7 0xC69D # HANGUL SYLLABLE IEUNG-YO-RIEULKIYEOK -0x9EF8 0xC69E # HANGUL SYLLABLE IEUNG-YO-RIEULMIEUM -0x9EF9 0xC69F # HANGUL SYLLABLE IEUNG-YO-RIEULPIEUP -0x9EFA 0xC6A0 # HANGUL SYLLABLE IEUNG-YO-RIEULSIOS -0x9EFB 0xC6A1 # HANGUL SYLLABLE IEUNG-YO-RIEULTHIEUTH -0x9EFC 0xC6A2 # HANGUL SYLLABLE IEUNG-YO-RIEULPHIEUPH -0x9EFD 0xC6A3 # HANGUL SYLLABLE IEUNG-YO-RIEULHIEUH -0x9EFE 0xC6A6 # HANGUL SYLLABLE IEUNG-YO-PIEUPSIOS -0x9F41 0xC6A8 # HANGUL SYLLABLE IEUNG-YO-SSANGSIOS -0x9F42 0xC6AA # HANGUL SYLLABLE IEUNG-YO-CIEUC -0x9F43 0xC6AB # HANGUL SYLLABLE IEUNG-YO-CHIEUCH -0x9F44 0xC6AC # HANGUL SYLLABLE IEUNG-YO-KHIEUKH -0x9F45 0xC6AD # HANGUL SYLLABLE IEUNG-YO-THIEUTH -0x9F46 0xC6AE # HANGUL SYLLABLE IEUNG-YO-PHIEUPH -0x9F47 0xC6AF # HANGUL SYLLABLE IEUNG-YO-HIEUH -0x9F48 0xC6B2 # HANGUL SYLLABLE IEUNG-U-SSANGKIYEOK -0x9F49 0xC6B3 # HANGUL SYLLABLE IEUNG-U-KIYEOKSIOS -0x9F4A 0xC6B5 # HANGUL SYLLABLE IEUNG-U-NIEUNCIEUC -0x9F4B 0xC6B6 # HANGUL SYLLABLE IEUNG-U-NIEUNHIEUH -0x9F4C 0xC6B7 # HANGUL SYLLABLE IEUNG-U-TIKEUT -0x9F4D 0xC6BB # HANGUL SYLLABLE IEUNG-U-RIEULPIEUP -0x9F4E 0xC6BC # HANGUL SYLLABLE IEUNG-U-RIEULSIOS -0x9F4F 0xC6BD # HANGUL SYLLABLE IEUNG-U-RIEULTHIEUTH -0x9F50 0xC6BE # HANGUL SYLLABLE IEUNG-U-RIEULPHIEUPH -0x9F51 0xC6BF # HANGUL SYLLABLE IEUNG-U-RIEULHIEUH -0x9F52 0xC6C2 # HANGUL SYLLABLE IEUNG-U-PIEUPSIOS -0x9F53 0xC6C4 # HANGUL SYLLABLE IEUNG-U-SSANGSIOS -0x9F54 0xC6C6 # HANGUL SYLLABLE IEUNG-U-CIEUC -0x9F55 0xC6C7 # HANGUL SYLLABLE IEUNG-U-CHIEUCH -0x9F56 0xC6C8 # HANGUL SYLLABLE IEUNG-U-KHIEUKH -0x9F57 0xC6C9 # HANGUL SYLLABLE IEUNG-U-THIEUTH -0x9F58 0xC6CA # HANGUL SYLLABLE IEUNG-U-PHIEUPH -0x9F59 0xC6CB # HANGUL SYLLABLE IEUNG-U-HIEUH -0x9F5A 0xC6CE # HANGUL SYLLABLE IEUNG-WEO-SSANGKIYEOK -0x9F61 0xC6CF # HANGUL SYLLABLE IEUNG-WEO-KIYEOKSIOS -0x9F62 0xC6D1 # HANGUL SYLLABLE IEUNG-WEO-NIEUNCIEUC -0x9F63 0xC6D2 # HANGUL SYLLABLE IEUNG-WEO-NIEUNHIEUH -0x9F64 0xC6D3 # HANGUL SYLLABLE IEUNG-WEO-TIKEUT -0x9F65 0xC6D5 # HANGUL SYLLABLE IEUNG-WEO-RIEULKIYEOK -0x9F66 0xC6D6 # HANGUL SYLLABLE IEUNG-WEO-RIEULMIEUM -0x9F67 0xC6D7 # HANGUL SYLLABLE IEUNG-WEO-RIEULPIEUP -0x9F68 0xC6D8 # HANGUL SYLLABLE IEUNG-WEO-RIEULSIOS -0x9F69 0xC6D9 # HANGUL SYLLABLE IEUNG-WEO-RIEULTHIEUTH -0x9F6A 0xC6DA # HANGUL SYLLABLE IEUNG-WEO-RIEULPHIEUPH -0x9F6B 0xC6DB # HANGUL SYLLABLE IEUNG-WEO-RIEULHIEUH -0x9F6C 0xC6DE # HANGUL SYLLABLE IEUNG-WEO-PIEUPSIOS -0x9F6D 0xC6DF # HANGUL SYLLABLE IEUNG-WEO-SIOS -0x9F6E 0xC6E2 # HANGUL SYLLABLE IEUNG-WEO-CIEUC -0x9F6F 0xC6E3 # HANGUL SYLLABLE IEUNG-WEO-CHIEUCH -0x9F70 0xC6E4 # HANGUL SYLLABLE IEUNG-WEO-KHIEUKH -0x9F71 0xC6E5 # HANGUL SYLLABLE IEUNG-WEO-THIEUTH -0x9F72 0xC6E6 # HANGUL SYLLABLE IEUNG-WEO-PHIEUPH -0x9F73 0xC6E7 # HANGUL SYLLABLE IEUNG-WEO-HIEUH -0x9F74 0xC6EA # HANGUL SYLLABLE IEUNG-WE-SSANGKIYEOK -0x9F75 0xC6EB # HANGUL SYLLABLE IEUNG-WE-KIYEOKSIOS -0x9F76 0xC6ED # HANGUL SYLLABLE IEUNG-WE-NIEUNCIEUC -0x9F77 0xC6EE # HANGUL SYLLABLE IEUNG-WE-NIEUNHIEUH -0x9F78 0xC6EF # HANGUL SYLLABLE IEUNG-WE-TIKEUT -0x9F79 0xC6F1 # HANGUL SYLLABLE IEUNG-WE-RIEULKIYEOK -0x9F7A 0xC6F2 # HANGUL SYLLABLE IEUNG-WE-RIEULMIEUM -0x9F81 0xC6F3 # HANGUL SYLLABLE IEUNG-WE-RIEULPIEUP -0x9F82 0xC6F4 # HANGUL SYLLABLE IEUNG-WE-RIEULSIOS -0x9F83 0xC6F5 # HANGUL SYLLABLE IEUNG-WE-RIEULTHIEUTH -0x9F84 0xC6F6 # HANGUL SYLLABLE IEUNG-WE-RIEULPHIEUPH -0x9F85 0xC6F7 # HANGUL SYLLABLE IEUNG-WE-RIEULHIEUH -0x9F86 0xC6FA # HANGUL SYLLABLE IEUNG-WE-PIEUPSIOS -0x9F87 0xC6FB # HANGUL SYLLABLE IEUNG-WE-SIOS -0x9F88 0xC6FC # HANGUL SYLLABLE IEUNG-WE-SSANGSIOS -0x9F89 0xC6FE # HANGUL SYLLABLE IEUNG-WE-CIEUC -0x9F8A 0xC6FF # HANGUL SYLLABLE IEUNG-WE-CHIEUCH -0x9F8B 0xC700 # HANGUL SYLLABLE IEUNG-WE-KHIEUKH -0x9F8C 0xC701 # HANGUL SYLLABLE IEUNG-WE-THIEUTH -0x9F8D 0xC702 # HANGUL SYLLABLE IEUNG-WE-PHIEUPH -0x9F8E 0xC703 # HANGUL SYLLABLE IEUNG-WE-HIEUH -0x9F8F 0xC706 # HANGUL SYLLABLE IEUNG-WI-SSANGKIYEOK -0x9F90 0xC707 # HANGUL SYLLABLE IEUNG-WI-KIYEOKSIOS -0x9F91 0xC709 # HANGUL SYLLABLE IEUNG-WI-NIEUNCIEUC -0x9F92 0xC70A # HANGUL SYLLABLE IEUNG-WI-NIEUNHIEUH -0x9F93 0xC70B # HANGUL SYLLABLE IEUNG-WI-TIKEUT -0x9F94 0xC70D # HANGUL SYLLABLE IEUNG-WI-RIEULKIYEOK -0x9F95 0xC70E # HANGUL SYLLABLE IEUNG-WI-RIEULMIEUM -0x9F96 0xC70F # HANGUL SYLLABLE IEUNG-WI-RIEULPIEUP -0x9F97 0xC710 # HANGUL SYLLABLE IEUNG-WI-RIEULSIOS -0x9F98 0xC711 # HANGUL SYLLABLE IEUNG-WI-RIEULTHIEUTH -0x9F99 0xC712 # HANGUL SYLLABLE IEUNG-WI-RIEULPHIEUPH -0x9F9A 0xC713 # HANGUL SYLLABLE IEUNG-WI-RIEULHIEUH -0x9F9B 0xC716 # HANGUL SYLLABLE IEUNG-WI-PIEUPSIOS -0x9F9C 0xC718 # HANGUL SYLLABLE IEUNG-WI-SSANGSIOS -0x9F9D 0xC71A # HANGUL SYLLABLE IEUNG-WI-CIEUC -0x9F9E 0xC71B # HANGUL SYLLABLE IEUNG-WI-CHIEUCH -0x9F9F 0xC71C # HANGUL SYLLABLE IEUNG-WI-KHIEUKH -0x9FA0 0xC71D # HANGUL SYLLABLE IEUNG-WI-THIEUTH -0x9FA1 0xC71E # HANGUL SYLLABLE IEUNG-WI-PHIEUPH -0x9FA2 0xC71F # HANGUL SYLLABLE IEUNG-WI-HIEUH -0x9FA3 0xC722 # HANGUL SYLLABLE IEUNG-YU-SSANGKIYEOK -0x9FA4 0xC723 # HANGUL SYLLABLE IEUNG-YU-KIYEOKSIOS -0x9FA5 0xC725 # HANGUL SYLLABLE IEUNG-YU-NIEUNCIEUC -0x9FA6 0xC726 # HANGUL SYLLABLE IEUNG-YU-NIEUNHIEUH -0x9FA7 0xC727 # HANGUL SYLLABLE IEUNG-YU-TIKEUT -0x9FA8 0xC729 # HANGUL SYLLABLE IEUNG-YU-RIEULKIYEOK -0x9FA9 0xC72A # HANGUL SYLLABLE IEUNG-YU-RIEULMIEUM -0x9FAA 0xC72B # HANGUL SYLLABLE IEUNG-YU-RIEULPIEUP -0x9FAB 0xC72C # HANGUL SYLLABLE IEUNG-YU-RIEULSIOS -0x9FAC 0xC72D # HANGUL SYLLABLE IEUNG-YU-RIEULTHIEUTH -0x9FAD 0xC72E # HANGUL SYLLABLE IEUNG-YU-RIEULPHIEUPH -0x9FAE 0xC72F # HANGUL SYLLABLE IEUNG-YU-RIEULHIEUH -0x9FAF 0xC732 # HANGUL SYLLABLE IEUNG-YU-PIEUPSIOS -0x9FB0 0xC734 # HANGUL SYLLABLE IEUNG-YU-SSANGSIOS -0x9FB1 0xC736 # HANGUL SYLLABLE IEUNG-YU-CIEUC -0x9FB2 0xC738 # HANGUL SYLLABLE IEUNG-YU-KHIEUKH -0x9FB3 0xC739 # HANGUL SYLLABLE IEUNG-YU-THIEUTH -0x9FB4 0xC73A # HANGUL SYLLABLE IEUNG-YU-PHIEUPH -0x9FB5 0xC73B # HANGUL SYLLABLE IEUNG-YU-HIEUH -0x9FB6 0xC73E # HANGUL SYLLABLE IEUNG-EU-SSANGKIYEOK -0x9FB7 0xC73F # HANGUL SYLLABLE IEUNG-EU-KIYEOKSIOS -0x9FB8 0xC741 # HANGUL SYLLABLE IEUNG-EU-NIEUNCIEUC -0x9FB9 0xC742 # HANGUL SYLLABLE IEUNG-EU-NIEUNHIEUH -0x9FBA 0xC743 # HANGUL SYLLABLE IEUNG-EU-TIKEUT -0x9FBB 0xC745 # HANGUL SYLLABLE IEUNG-EU-RIEULKIYEOK -0x9FBC 0xC746 # HANGUL SYLLABLE IEUNG-EU-RIEULMIEUM -0x9FBD 0xC747 # HANGUL SYLLABLE IEUNG-EU-RIEULPIEUP -0x9FBE 0xC748 # HANGUL SYLLABLE IEUNG-EU-RIEULSIOS -0x9FBF 0xC749 # HANGUL SYLLABLE IEUNG-EU-RIEULTHIEUTH -0x9FC0 0xC74B # HANGUL SYLLABLE IEUNG-EU-RIEULHIEUH -0x9FC1 0xC74E # HANGUL SYLLABLE IEUNG-EU-PIEUPSIOS -0x9FC2 0xC750 # HANGUL SYLLABLE IEUNG-EU-SSANGSIOS -0x9FC3 0xC759 # HANGUL SYLLABLE IEUNG-YI-KIYEOK -0x9FC4 0xC75A # HANGUL SYLLABLE IEUNG-YI-SSANGKIYEOK -0x9FC5 0xC75B # HANGUL SYLLABLE IEUNG-YI-KIYEOKSIOS -0x9FC6 0xC75D # HANGUL SYLLABLE IEUNG-YI-NIEUNCIEUC -0x9FC7 0xC75E # HANGUL SYLLABLE IEUNG-YI-NIEUNHIEUH -0x9FC8 0xC75F # HANGUL SYLLABLE IEUNG-YI-TIKEUT -0x9FC9 0xC761 # HANGUL SYLLABLE IEUNG-YI-RIEULKIYEOK -0x9FCA 0xC762 # HANGUL SYLLABLE IEUNG-YI-RIEULMIEUM -0x9FCB 0xC763 # HANGUL SYLLABLE IEUNG-YI-RIEULPIEUP -0x9FCC 0xC764 # HANGUL SYLLABLE IEUNG-YI-RIEULSIOS -0x9FCD 0xC765 # HANGUL SYLLABLE IEUNG-YI-RIEULTHIEUTH -0x9FCE 0xC766 # HANGUL SYLLABLE IEUNG-YI-RIEULPHIEUPH -0x9FCF 0xC767 # HANGUL SYLLABLE IEUNG-YI-RIEULHIEUH -0x9FD0 0xC769 # HANGUL SYLLABLE IEUNG-YI-PIEUP -0x9FD1 0xC76A # HANGUL SYLLABLE IEUNG-YI-PIEUPSIOS -0x9FD2 0xC76C # HANGUL SYLLABLE IEUNG-YI-SSANGSIOS -0x9FD3 0xC76D # HANGUL SYLLABLE IEUNG-YI-IEUNG -0x9FD4 0xC76E # HANGUL SYLLABLE IEUNG-YI-CIEUC -0x9FD5 0xC76F # HANGUL SYLLABLE IEUNG-YI-CHIEUCH -0x9FD6 0xC770 # HANGUL SYLLABLE IEUNG-YI-KHIEUKH -0x9FD7 0xC771 # HANGUL SYLLABLE IEUNG-YI-THIEUTH -0x9FD8 0xC772 # HANGUL SYLLABLE IEUNG-YI-PHIEUPH -0x9FD9 0xC773 # HANGUL SYLLABLE IEUNG-YI-HIEUH -0x9FDA 0xC776 # HANGUL SYLLABLE IEUNG-I-SSANGKIYEOK -0x9FDB 0xC777 # HANGUL SYLLABLE IEUNG-I-KIYEOKSIOS -0x9FDC 0xC779 # HANGUL SYLLABLE IEUNG-I-NIEUNCIEUC -0x9FDD 0xC77A # HANGUL SYLLABLE IEUNG-I-NIEUNHIEUH -0x9FDE 0xC77B # HANGUL SYLLABLE IEUNG-I-TIKEUT -0x9FDF 0xC77F # HANGUL SYLLABLE IEUNG-I-RIEULPIEUP -0x9FE0 0xC780 # HANGUL SYLLABLE IEUNG-I-RIEULSIOS -0x9FE1 0xC781 # HANGUL SYLLABLE IEUNG-I-RIEULTHIEUTH -0x9FE2 0xC782 # HANGUL SYLLABLE IEUNG-I-RIEULPHIEUPH -0x9FE3 0xC786 # HANGUL SYLLABLE IEUNG-I-PIEUPSIOS -0x9FE4 0xC78B # HANGUL SYLLABLE IEUNG-I-CHIEUCH -0x9FE5 0xC78C # HANGUL SYLLABLE IEUNG-I-KHIEUKH -0x9FE6 0xC78D # HANGUL SYLLABLE IEUNG-I-THIEUTH -0x9FE7 0xC78F # HANGUL SYLLABLE IEUNG-I-HIEUH -0x9FE8 0xC792 # HANGUL SYLLABLE CIEUC-A-SSANGKIYEOK -0x9FE9 0xC793 # HANGUL SYLLABLE CIEUC-A-KIYEOKSIOS -0x9FEA 0xC795 # HANGUL SYLLABLE CIEUC-A-NIEUNCIEUC -0x9FEB 0xC799 # HANGUL SYLLABLE CIEUC-A-RIEULKIYEOK -0x9FEC 0xC79B # HANGUL SYLLABLE CIEUC-A-RIEULPIEUP -0x9FED 0xC79C # HANGUL SYLLABLE CIEUC-A-RIEULSIOS -0x9FEE 0xC79D # HANGUL SYLLABLE CIEUC-A-RIEULTHIEUTH -0x9FEF 0xC79E # HANGUL SYLLABLE CIEUC-A-RIEULPHIEUPH -0x9FF0 0xC79F # HANGUL SYLLABLE CIEUC-A-RIEULHIEUH -0x9FF1 0xC7A2 # HANGUL SYLLABLE CIEUC-A-PIEUPSIOS -0x9FF2 0xC7A7 # HANGUL SYLLABLE CIEUC-A-CHIEUCH -0x9FF3 0xC7A8 # HANGUL SYLLABLE CIEUC-A-KHIEUKH -0x9FF4 0xC7A9 # HANGUL SYLLABLE CIEUC-A-THIEUTH -0x9FF5 0xC7AA # HANGUL SYLLABLE CIEUC-A-PHIEUPH -0x9FF6 0xC7AB # HANGUL SYLLABLE CIEUC-A-HIEUH -0x9FF7 0xC7AE # HANGUL SYLLABLE CIEUC-AE-SSANGKIYEOK -0x9FF8 0xC7AF # HANGUL SYLLABLE CIEUC-AE-KIYEOKSIOS -0x9FF9 0xC7B1 # HANGUL SYLLABLE CIEUC-AE-NIEUNCIEUC -0x9FFA 0xC7B2 # HANGUL SYLLABLE CIEUC-AE-NIEUNHIEUH -0x9FFB 0xC7B3 # HANGUL SYLLABLE CIEUC-AE-TIKEUT -0x9FFC 0xC7B5 # HANGUL SYLLABLE CIEUC-AE-RIEULKIYEOK -0x9FFD 0xC7B6 # HANGUL SYLLABLE CIEUC-AE-RIEULMIEUM -0x9FFE 0xC7B7 # HANGUL SYLLABLE CIEUC-AE-RIEULPIEUP -0xA041 0xC7B8 # HANGUL SYLLABLE CIEUC-AE-RIEULSIOS -0xA042 0xC7B9 # HANGUL SYLLABLE CIEUC-AE-RIEULTHIEUTH -0xA043 0xC7BA # HANGUL SYLLABLE CIEUC-AE-RIEULPHIEUPH -0xA044 0xC7BB # HANGUL SYLLABLE CIEUC-AE-RIEULHIEUH -0xA045 0xC7BE # HANGUL SYLLABLE CIEUC-AE-PIEUPSIOS -0xA046 0xC7C2 # HANGUL SYLLABLE CIEUC-AE-CIEUC -0xA047 0xC7C3 # HANGUL SYLLABLE CIEUC-AE-CHIEUCH -0xA048 0xC7C4 # HANGUL SYLLABLE CIEUC-AE-KHIEUKH -0xA049 0xC7C5 # HANGUL SYLLABLE CIEUC-AE-THIEUTH -0xA04A 0xC7C6 # HANGUL SYLLABLE CIEUC-AE-PHIEUPH -0xA04B 0xC7C7 # HANGUL SYLLABLE CIEUC-AE-HIEUH -0xA04C 0xC7CA # HANGUL SYLLABLE CIEUC-YA-SSANGKIYEOK -0xA04D 0xC7CB # HANGUL SYLLABLE CIEUC-YA-KIYEOKSIOS -0xA04E 0xC7CD # HANGUL SYLLABLE CIEUC-YA-NIEUNCIEUC -0xA04F 0xC7CF # HANGUL SYLLABLE CIEUC-YA-TIKEUT -0xA050 0xC7D1 # HANGUL SYLLABLE CIEUC-YA-RIEULKIYEOK -0xA051 0xC7D2 # HANGUL SYLLABLE CIEUC-YA-RIEULMIEUM -0xA052 0xC7D3 # HANGUL SYLLABLE CIEUC-YA-RIEULPIEUP -0xA053 0xC7D4 # HANGUL SYLLABLE CIEUC-YA-RIEULSIOS -0xA054 0xC7D5 # HANGUL SYLLABLE CIEUC-YA-RIEULTHIEUTH -0xA055 0xC7D6 # HANGUL SYLLABLE CIEUC-YA-RIEULPHIEUPH -0xA056 0xC7D7 # HANGUL SYLLABLE CIEUC-YA-RIEULHIEUH -0xA057 0xC7D9 # HANGUL SYLLABLE CIEUC-YA-PIEUP -0xA058 0xC7DA # HANGUL SYLLABLE CIEUC-YA-PIEUPSIOS -0xA059 0xC7DB # HANGUL SYLLABLE CIEUC-YA-SIOS -0xA05A 0xC7DC # HANGUL SYLLABLE CIEUC-YA-SSANGSIOS -0xA061 0xC7DE # HANGUL SYLLABLE CIEUC-YA-CIEUC -0xA062 0xC7DF # HANGUL SYLLABLE CIEUC-YA-CHIEUCH -0xA063 0xC7E0 # HANGUL SYLLABLE CIEUC-YA-KHIEUKH -0xA064 0xC7E1 # HANGUL SYLLABLE CIEUC-YA-THIEUTH -0xA065 0xC7E2 # HANGUL SYLLABLE CIEUC-YA-PHIEUPH -0xA066 0xC7E3 # HANGUL SYLLABLE CIEUC-YA-HIEUH -0xA067 0xC7E5 # HANGUL SYLLABLE CIEUC-YAE-KIYEOK -0xA068 0xC7E6 # HANGUL SYLLABLE CIEUC-YAE-SSANGKIYEOK -0xA069 0xC7E7 # HANGUL SYLLABLE CIEUC-YAE-KIYEOKSIOS -0xA06A 0xC7E9 # HANGUL SYLLABLE CIEUC-YAE-NIEUNCIEUC -0xA06B 0xC7EA # HANGUL SYLLABLE CIEUC-YAE-NIEUNHIEUH -0xA06C 0xC7EB # HANGUL SYLLABLE CIEUC-YAE-TIKEUT -0xA06D 0xC7ED # HANGUL SYLLABLE CIEUC-YAE-RIEULKIYEOK -0xA06E 0xC7EE # HANGUL SYLLABLE CIEUC-YAE-RIEULMIEUM -0xA06F 0xC7EF # HANGUL SYLLABLE CIEUC-YAE-RIEULPIEUP -0xA070 0xC7F0 # HANGUL SYLLABLE CIEUC-YAE-RIEULSIOS -0xA071 0xC7F1 # HANGUL SYLLABLE CIEUC-YAE-RIEULTHIEUTH -0xA072 0xC7F2 # HANGUL SYLLABLE CIEUC-YAE-RIEULPHIEUPH -0xA073 0xC7F3 # HANGUL SYLLABLE CIEUC-YAE-RIEULHIEUH -0xA074 0xC7F4 # HANGUL SYLLABLE CIEUC-YAE-MIEUM -0xA075 0xC7F5 # HANGUL SYLLABLE CIEUC-YAE-PIEUP -0xA076 0xC7F6 # HANGUL SYLLABLE CIEUC-YAE-PIEUPSIOS -0xA077 0xC7F7 # HANGUL SYLLABLE CIEUC-YAE-SIOS -0xA078 0xC7F8 # HANGUL SYLLABLE CIEUC-YAE-SSANGSIOS -0xA079 0xC7F9 # HANGUL SYLLABLE CIEUC-YAE-IEUNG -0xA07A 0xC7FA # HANGUL SYLLABLE CIEUC-YAE-CIEUC -0xA081 0xC7FB # HANGUL SYLLABLE CIEUC-YAE-CHIEUCH -0xA082 0xC7FC # HANGUL SYLLABLE CIEUC-YAE-KHIEUKH -0xA083 0xC7FD # HANGUL SYLLABLE CIEUC-YAE-THIEUTH -0xA084 0xC7FE # HANGUL SYLLABLE CIEUC-YAE-PHIEUPH -0xA085 0xC7FF # HANGUL SYLLABLE CIEUC-YAE-HIEUH -0xA086 0xC802 # HANGUL SYLLABLE CIEUC-EO-SSANGKIYEOK -0xA087 0xC803 # HANGUL SYLLABLE CIEUC-EO-KIYEOKSIOS -0xA088 0xC805 # HANGUL SYLLABLE CIEUC-EO-NIEUNCIEUC -0xA089 0xC806 # HANGUL SYLLABLE CIEUC-EO-NIEUNHIEUH -0xA08A 0xC807 # HANGUL SYLLABLE CIEUC-EO-TIKEUT -0xA08B 0xC809 # HANGUL SYLLABLE CIEUC-EO-RIEULKIYEOK -0xA08C 0xC80B # HANGUL SYLLABLE CIEUC-EO-RIEULPIEUP -0xA08D 0xC80C # HANGUL SYLLABLE CIEUC-EO-RIEULSIOS -0xA08E 0xC80D # HANGUL SYLLABLE CIEUC-EO-RIEULTHIEUTH -0xA08F 0xC80E # HANGUL SYLLABLE CIEUC-EO-RIEULPHIEUPH -0xA090 0xC80F # HANGUL SYLLABLE CIEUC-EO-RIEULHIEUH -0xA091 0xC812 # HANGUL SYLLABLE CIEUC-EO-PIEUPSIOS -0xA092 0xC814 # HANGUL SYLLABLE CIEUC-EO-SSANGSIOS -0xA093 0xC817 # HANGUL SYLLABLE CIEUC-EO-CHIEUCH -0xA094 0xC818 # HANGUL SYLLABLE CIEUC-EO-KHIEUKH -0xA095 0xC819 # HANGUL SYLLABLE CIEUC-EO-THIEUTH -0xA096 0xC81A # HANGUL SYLLABLE CIEUC-EO-PHIEUPH -0xA097 0xC81B # HANGUL SYLLABLE CIEUC-EO-HIEUH -0xA098 0xC81E # HANGUL SYLLABLE CIEUC-E-SSANGKIYEOK -0xA099 0xC81F # HANGUL SYLLABLE CIEUC-E-KIYEOKSIOS -0xA09A 0xC821 # HANGUL SYLLABLE CIEUC-E-NIEUNCIEUC -0xA09B 0xC822 # HANGUL SYLLABLE CIEUC-E-NIEUNHIEUH -0xA09C 0xC823 # HANGUL SYLLABLE CIEUC-E-TIKEUT -0xA09D 0xC825 # HANGUL SYLLABLE CIEUC-E-RIEULKIYEOK -0xA09E 0xC826 # HANGUL SYLLABLE CIEUC-E-RIEULMIEUM -0xA09F 0xC827 # HANGUL SYLLABLE CIEUC-E-RIEULPIEUP -0xA0A0 0xC828 # HANGUL SYLLABLE CIEUC-E-RIEULSIOS -0xA0A1 0xC829 # HANGUL SYLLABLE CIEUC-E-RIEULTHIEUTH -0xA0A2 0xC82A # HANGUL SYLLABLE CIEUC-E-RIEULPHIEUPH -0xA0A3 0xC82B # HANGUL SYLLABLE CIEUC-E-RIEULHIEUH -0xA0A4 0xC82E # HANGUL SYLLABLE CIEUC-E-PIEUPSIOS -0xA0A5 0xC830 # HANGUL SYLLABLE CIEUC-E-SSANGSIOS -0xA0A6 0xC832 # HANGUL SYLLABLE CIEUC-E-CIEUC -0xA0A7 0xC833 # HANGUL SYLLABLE CIEUC-E-CHIEUCH -0xA0A8 0xC834 # HANGUL SYLLABLE CIEUC-E-KHIEUKH -0xA0A9 0xC835 # HANGUL SYLLABLE CIEUC-E-THIEUTH -0xA0AA 0xC836 # HANGUL SYLLABLE CIEUC-E-PHIEUPH -0xA0AB 0xC837 # HANGUL SYLLABLE CIEUC-E-HIEUH -0xA0AC 0xC839 # HANGUL SYLLABLE CIEUC-YEO-KIYEOK -0xA0AD 0xC83A # HANGUL SYLLABLE CIEUC-YEO-SSANGKIYEOK -0xA0AE 0xC83B # HANGUL SYLLABLE CIEUC-YEO-KIYEOKSIOS -0xA0AF 0xC83D # HANGUL SYLLABLE CIEUC-YEO-NIEUNCIEUC -0xA0B0 0xC83E # HANGUL SYLLABLE CIEUC-YEO-NIEUNHIEUH -0xA0B1 0xC83F # HANGUL SYLLABLE CIEUC-YEO-TIKEUT -0xA0B2 0xC841 # HANGUL SYLLABLE CIEUC-YEO-RIEULKIYEOK -0xA0B3 0xC842 # HANGUL SYLLABLE CIEUC-YEO-RIEULMIEUM -0xA0B4 0xC843 # HANGUL SYLLABLE CIEUC-YEO-RIEULPIEUP -0xA0B5 0xC844 # HANGUL SYLLABLE CIEUC-YEO-RIEULSIOS -0xA0B6 0xC845 # HANGUL SYLLABLE CIEUC-YEO-RIEULTHIEUTH -0xA0B7 0xC846 # HANGUL SYLLABLE CIEUC-YEO-RIEULPHIEUPH -0xA0B8 0xC847 # HANGUL SYLLABLE CIEUC-YEO-RIEULHIEUH -0xA0B9 0xC84A # HANGUL SYLLABLE CIEUC-YEO-PIEUPSIOS -0xA0BA 0xC84B # HANGUL SYLLABLE CIEUC-YEO-SIOS -0xA0BB 0xC84E # HANGUL SYLLABLE CIEUC-YEO-CIEUC -0xA0BC 0xC84F # HANGUL SYLLABLE CIEUC-YEO-CHIEUCH -0xA0BD 0xC850 # HANGUL SYLLABLE CIEUC-YEO-KHIEUKH -0xA0BE 0xC851 # HANGUL SYLLABLE CIEUC-YEO-THIEUTH -0xA0BF 0xC852 # HANGUL SYLLABLE CIEUC-YEO-PHIEUPH -0xA0C0 0xC853 # HANGUL SYLLABLE CIEUC-YEO-HIEUH -0xA0C1 0xC855 # HANGUL SYLLABLE CIEUC-YE-KIYEOK -0xA0C2 0xC856 # HANGUL SYLLABLE CIEUC-YE-SSANGKIYEOK -0xA0C3 0xC857 # HANGUL SYLLABLE CIEUC-YE-KIYEOKSIOS -0xA0C4 0xC858 # HANGUL SYLLABLE CIEUC-YE-NIEUN -0xA0C5 0xC859 # HANGUL SYLLABLE CIEUC-YE-NIEUNCIEUC -0xA0C6 0xC85A # HANGUL SYLLABLE CIEUC-YE-NIEUNHIEUH -0xA0C7 0xC85B # HANGUL SYLLABLE CIEUC-YE-TIKEUT -0xA0C8 0xC85C # HANGUL SYLLABLE CIEUC-YE-RIEUL -0xA0C9 0xC85D # HANGUL SYLLABLE CIEUC-YE-RIEULKIYEOK -0xA0CA 0xC85E # HANGUL SYLLABLE CIEUC-YE-RIEULMIEUM -0xA0CB 0xC85F # HANGUL SYLLABLE CIEUC-YE-RIEULPIEUP -0xA0CC 0xC860 # HANGUL SYLLABLE CIEUC-YE-RIEULSIOS -0xA0CD 0xC861 # HANGUL SYLLABLE CIEUC-YE-RIEULTHIEUTH -0xA0CE 0xC862 # HANGUL SYLLABLE CIEUC-YE-RIEULPHIEUPH -0xA0CF 0xC863 # HANGUL SYLLABLE CIEUC-YE-RIEULHIEUH -0xA0D0 0xC864 # HANGUL SYLLABLE CIEUC-YE-MIEUM -0xA0D1 0xC865 # HANGUL SYLLABLE CIEUC-YE-PIEUP -0xA0D2 0xC866 # HANGUL SYLLABLE CIEUC-YE-PIEUPSIOS -0xA0D3 0xC867 # HANGUL SYLLABLE CIEUC-YE-SIOS -0xA0D4 0xC868 # HANGUL SYLLABLE CIEUC-YE-SSANGSIOS -0xA0D5 0xC869 # HANGUL SYLLABLE CIEUC-YE-IEUNG -0xA0D6 0xC86A # HANGUL SYLLABLE CIEUC-YE-CIEUC -0xA0D7 0xC86B # HANGUL SYLLABLE CIEUC-YE-CHIEUCH -0xA0D8 0xC86C # HANGUL SYLLABLE CIEUC-YE-KHIEUKH -0xA0D9 0xC86D # HANGUL SYLLABLE CIEUC-YE-THIEUTH -0xA0DA 0xC86E # HANGUL SYLLABLE CIEUC-YE-PHIEUPH -0xA0DB 0xC86F # HANGUL SYLLABLE CIEUC-YE-HIEUH -0xA0DC 0xC872 # HANGUL SYLLABLE CIEUC-O-SSANGKIYEOK -0xA0DD 0xC873 # HANGUL SYLLABLE CIEUC-O-KIYEOKSIOS -0xA0DE 0xC875 # HANGUL SYLLABLE CIEUC-O-NIEUNCIEUC -0xA0DF 0xC876 # HANGUL SYLLABLE CIEUC-O-NIEUNHIEUH -0xA0E0 0xC877 # HANGUL SYLLABLE CIEUC-O-TIKEUT -0xA0E1 0xC879 # HANGUL SYLLABLE CIEUC-O-RIEULKIYEOK -0xA0E2 0xC87B # HANGUL SYLLABLE CIEUC-O-RIEULPIEUP -0xA0E3 0xC87C # HANGUL SYLLABLE CIEUC-O-RIEULSIOS -0xA0E4 0xC87D # HANGUL SYLLABLE CIEUC-O-RIEULTHIEUTH -0xA0E5 0xC87E # HANGUL SYLLABLE CIEUC-O-RIEULPHIEUPH -0xA0E6 0xC87F # HANGUL SYLLABLE CIEUC-O-RIEULHIEUH -0xA0E7 0xC882 # HANGUL SYLLABLE CIEUC-O-PIEUPSIOS -0xA0E8 0xC884 # HANGUL SYLLABLE CIEUC-O-SSANGSIOS -0xA0E9 0xC888 # HANGUL SYLLABLE CIEUC-O-KHIEUKH -0xA0EA 0xC889 # HANGUL SYLLABLE CIEUC-O-THIEUTH -0xA0EB 0xC88A # HANGUL SYLLABLE CIEUC-O-PHIEUPH -0xA0EC 0xC88E # HANGUL SYLLABLE CIEUC-WA-SSANGKIYEOK -0xA0ED 0xC88F # HANGUL SYLLABLE CIEUC-WA-KIYEOKSIOS -0xA0EE 0xC890 # HANGUL SYLLABLE CIEUC-WA-NIEUN -0xA0EF 0xC891 # HANGUL SYLLABLE CIEUC-WA-NIEUNCIEUC -0xA0F0 0xC892 # HANGUL SYLLABLE CIEUC-WA-NIEUNHIEUH -0xA0F1 0xC893 # HANGUL SYLLABLE CIEUC-WA-TIKEUT -0xA0F2 0xC895 # HANGUL SYLLABLE CIEUC-WA-RIEULKIYEOK -0xA0F3 0xC896 # HANGUL SYLLABLE CIEUC-WA-RIEULMIEUM -0xA0F4 0xC897 # HANGUL SYLLABLE CIEUC-WA-RIEULPIEUP -0xA0F5 0xC898 # HANGUL SYLLABLE CIEUC-WA-RIEULSIOS -0xA0F6 0xC899 # HANGUL SYLLABLE CIEUC-WA-RIEULTHIEUTH -0xA0F7 0xC89A # HANGUL SYLLABLE CIEUC-WA-RIEULPHIEUPH -0xA0F8 0xC89B # HANGUL SYLLABLE CIEUC-WA-RIEULHIEUH -0xA0F9 0xC89C # HANGUL SYLLABLE CIEUC-WA-MIEUM -0xA0FA 0xC89E # HANGUL SYLLABLE CIEUC-WA-PIEUPSIOS -0xA0FB 0xC8A0 # HANGUL SYLLABLE CIEUC-WA-SSANGSIOS -0xA0FC 0xC8A2 # HANGUL SYLLABLE CIEUC-WA-CIEUC -0xA0FD 0xC8A3 # HANGUL SYLLABLE CIEUC-WA-CHIEUCH -0xA0FE 0xC8A4 # HANGUL SYLLABLE CIEUC-WA-KHIEUKH -0xA141 0xC8A5 # HANGUL SYLLABLE CIEUC-WA-THIEUTH -0xA142 0xC8A6 # HANGUL SYLLABLE CIEUC-WA-PHIEUPH -0xA143 0xC8A7 # HANGUL SYLLABLE CIEUC-WA-HIEUH -0xA144 0xC8A9 # HANGUL SYLLABLE CIEUC-WAE-KIYEOK -0xA145 0xC8AA # HANGUL SYLLABLE CIEUC-WAE-SSANGKIYEOK -0xA146 0xC8AB # HANGUL SYLLABLE CIEUC-WAE-KIYEOKSIOS -0xA147 0xC8AC # HANGUL SYLLABLE CIEUC-WAE-NIEUN -0xA148 0xC8AD # HANGUL SYLLABLE CIEUC-WAE-NIEUNCIEUC -0xA149 0xC8AE # HANGUL SYLLABLE CIEUC-WAE-NIEUNHIEUH -0xA14A 0xC8AF # HANGUL SYLLABLE CIEUC-WAE-TIKEUT -0xA14B 0xC8B0 # HANGUL SYLLABLE CIEUC-WAE-RIEUL -0xA14C 0xC8B1 # HANGUL SYLLABLE CIEUC-WAE-RIEULKIYEOK -0xA14D 0xC8B2 # HANGUL SYLLABLE CIEUC-WAE-RIEULMIEUM -0xA14E 0xC8B3 # HANGUL SYLLABLE CIEUC-WAE-RIEULPIEUP -0xA14F 0xC8B4 # HANGUL SYLLABLE CIEUC-WAE-RIEULSIOS -0xA150 0xC8B5 # HANGUL SYLLABLE CIEUC-WAE-RIEULTHIEUTH -0xA151 0xC8B6 # HANGUL SYLLABLE CIEUC-WAE-RIEULPHIEUPH -0xA152 0xC8B7 # HANGUL SYLLABLE CIEUC-WAE-RIEULHIEUH -0xA153 0xC8B8 # HANGUL SYLLABLE CIEUC-WAE-MIEUM -0xA154 0xC8B9 # HANGUL SYLLABLE CIEUC-WAE-PIEUP -0xA155 0xC8BA # HANGUL SYLLABLE CIEUC-WAE-PIEUPSIOS -0xA156 0xC8BB # HANGUL SYLLABLE CIEUC-WAE-SIOS -0xA157 0xC8BE # HANGUL SYLLABLE CIEUC-WAE-CIEUC -0xA158 0xC8BF # HANGUL SYLLABLE CIEUC-WAE-CHIEUCH -0xA159 0xC8C0 # HANGUL SYLLABLE CIEUC-WAE-KHIEUKH -0xA15A 0xC8C1 # HANGUL SYLLABLE CIEUC-WAE-THIEUTH -0xA161 0xC8C2 # HANGUL SYLLABLE CIEUC-WAE-PHIEUPH -0xA162 0xC8C3 # HANGUL SYLLABLE CIEUC-WAE-HIEUH -0xA163 0xC8C5 # HANGUL SYLLABLE CIEUC-OE-KIYEOK -0xA164 0xC8C6 # HANGUL SYLLABLE CIEUC-OE-SSANGKIYEOK -0xA165 0xC8C7 # HANGUL SYLLABLE CIEUC-OE-KIYEOKSIOS -0xA166 0xC8C9 # HANGUL SYLLABLE CIEUC-OE-NIEUNCIEUC -0xA167 0xC8CA # HANGUL SYLLABLE CIEUC-OE-NIEUNHIEUH -0xA168 0xC8CB # HANGUL SYLLABLE CIEUC-OE-TIKEUT -0xA169 0xC8CD # HANGUL SYLLABLE CIEUC-OE-RIEULKIYEOK -0xA16A 0xC8CE # HANGUL SYLLABLE CIEUC-OE-RIEULMIEUM -0xA16B 0xC8CF # HANGUL SYLLABLE CIEUC-OE-RIEULPIEUP -0xA16C 0xC8D0 # HANGUL SYLLABLE CIEUC-OE-RIEULSIOS -0xA16D 0xC8D1 # HANGUL SYLLABLE CIEUC-OE-RIEULTHIEUTH -0xA16E 0xC8D2 # HANGUL SYLLABLE CIEUC-OE-RIEULPHIEUPH -0xA16F 0xC8D3 # HANGUL SYLLABLE CIEUC-OE-RIEULHIEUH -0xA170 0xC8D6 # HANGUL SYLLABLE CIEUC-OE-PIEUPSIOS -0xA171 0xC8D8 # HANGUL SYLLABLE CIEUC-OE-SSANGSIOS -0xA172 0xC8DA # HANGUL SYLLABLE CIEUC-OE-CIEUC -0xA173 0xC8DB # HANGUL SYLLABLE CIEUC-OE-CHIEUCH -0xA174 0xC8DC # HANGUL SYLLABLE CIEUC-OE-KHIEUKH -0xA175 0xC8DD # HANGUL SYLLABLE CIEUC-OE-THIEUTH -0xA176 0xC8DE # HANGUL SYLLABLE CIEUC-OE-PHIEUPH -0xA177 0xC8DF # HANGUL SYLLABLE CIEUC-OE-HIEUH -0xA178 0xC8E2 # HANGUL SYLLABLE CIEUC-YO-SSANGKIYEOK -0xA179 0xC8E3 # HANGUL SYLLABLE CIEUC-YO-KIYEOKSIOS -0xA17A 0xC8E5 # HANGUL SYLLABLE CIEUC-YO-NIEUNCIEUC -0xA181 0xC8E6 # HANGUL SYLLABLE CIEUC-YO-NIEUNHIEUH -0xA182 0xC8E7 # HANGUL SYLLABLE CIEUC-YO-TIKEUT -0xA183 0xC8E8 # HANGUL SYLLABLE CIEUC-YO-RIEUL -0xA184 0xC8E9 # HANGUL SYLLABLE CIEUC-YO-RIEULKIYEOK -0xA185 0xC8EA # HANGUL SYLLABLE CIEUC-YO-RIEULMIEUM -0xA186 0xC8EB # HANGUL SYLLABLE CIEUC-YO-RIEULPIEUP -0xA187 0xC8EC # HANGUL SYLLABLE CIEUC-YO-RIEULSIOS -0xA188 0xC8ED # HANGUL SYLLABLE CIEUC-YO-RIEULTHIEUTH -0xA189 0xC8EE # HANGUL SYLLABLE CIEUC-YO-RIEULPHIEUPH -0xA18A 0xC8EF # HANGUL SYLLABLE CIEUC-YO-RIEULHIEUH -0xA18B 0xC8F0 # HANGUL SYLLABLE CIEUC-YO-MIEUM -0xA18C 0xC8F1 # HANGUL SYLLABLE CIEUC-YO-PIEUP -0xA18D 0xC8F2 # HANGUL SYLLABLE CIEUC-YO-PIEUPSIOS -0xA18E 0xC8F3 # HANGUL SYLLABLE CIEUC-YO-SIOS -0xA18F 0xC8F4 # HANGUL SYLLABLE CIEUC-YO-SSANGSIOS -0xA190 0xC8F6 # HANGUL SYLLABLE CIEUC-YO-CIEUC -0xA191 0xC8F7 # HANGUL SYLLABLE CIEUC-YO-CHIEUCH -0xA192 0xC8F8 # HANGUL SYLLABLE CIEUC-YO-KHIEUKH -0xA193 0xC8F9 # HANGUL SYLLABLE CIEUC-YO-THIEUTH -0xA194 0xC8FA # HANGUL SYLLABLE CIEUC-YO-PHIEUPH -0xA195 0xC8FB # HANGUL SYLLABLE CIEUC-YO-HIEUH -0xA196 0xC8FE # HANGUL SYLLABLE CIEUC-U-SSANGKIYEOK -0xA197 0xC8FF # HANGUL SYLLABLE CIEUC-U-KIYEOKSIOS -0xA198 0xC901 # HANGUL SYLLABLE CIEUC-U-NIEUNCIEUC -0xA199 0xC902 # HANGUL SYLLABLE CIEUC-U-NIEUNHIEUH -0xA19A 0xC903 # HANGUL SYLLABLE CIEUC-U-TIKEUT -0xA19B 0xC907 # HANGUL SYLLABLE CIEUC-U-RIEULPIEUP -0xA19C 0xC908 # HANGUL SYLLABLE CIEUC-U-RIEULSIOS -0xA19D 0xC909 # HANGUL SYLLABLE CIEUC-U-RIEULTHIEUTH -0xA19E 0xC90A # HANGUL SYLLABLE CIEUC-U-RIEULPHIEUPH -0xA19F 0xC90B # HANGUL SYLLABLE CIEUC-U-RIEULHIEUH -0xA1A0 0xC90E # HANGUL SYLLABLE CIEUC-U-PIEUPSIOS -0xA1A1 0x3000 # IDEOGRAPHIC SPACE -0xA1A2 0x3001 # IDEOGRAPHIC COMMA -0xA1A3 0x3002 # IDEOGRAPHIC FULL STOP -0xA1A4 0x00B7 # MIDDLE DOT -0xA1A5 0x2025 # TWO DOT LEADER -0xA1A6 0x2026 # HORIZONTAL ELLIPSIS -0xA1A7 0x00A8 # DIAERESIS -0xA1A8 0x3003 # DITTO MARK -0xA1A9 0x00AD # SOFT HYPHEN -0xA1AA 0x2015 # HORIZONTAL BAR -0xA1AB 0x2225 # PARALLEL TO -0xA1AC 0xFF3C # FULLWIDTH REVERSE SOLIDUS -0xA1AD 0x223C # TILDE OPERATOR -0xA1AE 0x2018 # LEFT SINGLE QUOTATION MARK -0xA1AF 0x2019 # RIGHT SINGLE QUOTATION MARK -0xA1B0 0x201C # LEFT DOUBLE QUOTATION MARK -0xA1B1 0x201D # RIGHT DOUBLE QUOTATION MARK -0xA1B2 0x3014 # LEFT TORTOISE SHELL BRACKET -0xA1B3 0x3015 # RIGHT TORTOISE SHELL BRACKET -0xA1B4 0x3008 # LEFT ANGLE BRACKET -0xA1B5 0x3009 # RIGHT ANGLE BRACKET -0xA1B6 0x300A # LEFT DOUBLE ANGLE BRACKET -0xA1B7 0x300B # RIGHT DOUBLE ANGLE BRACKET -0xA1B8 0x300C # LEFT CORNER BRACKET -0xA1B9 0x300D # RIGHT CORNER BRACKET -0xA1BA 0x300E # LEFT WHITE CORNER BRACKET -0xA1BB 0x300F # RIGHT WHITE CORNER BRACKET -0xA1BC 0x3010 # LEFT BLACK LENTICULAR BRACKET -0xA1BD 0x3011 # RIGHT BLACK LENTICULAR BRACKET -0xA1BE 0x00B1 # PLUS-MINUS SIGN -0xA1BF 0x00D7 # MULTIPLICATION SIGN -0xA1C0 0x00F7 # DIVISION SIGN -0xA1C1 0x2260 # NOT EQUAL TO -0xA1C2 0x2264 # LESS-THAN OR EQUAL TO -0xA1C3 0x2265 # GREATER-THAN OR EQUAL TO -0xA1C4 0x221E # INFINITY -0xA1C5 0x2234 # THEREFORE -0xA1C6 0x00B0 # DEGREE SIGN -0xA1C7 0x2032 # PRIME -0xA1C8 0x2033 # DOUBLE PRIME -0xA1C9 0x2103 # DEGREE CELSIUS -0xA1CA 0x212B # ANGSTROM SIGN -0xA1CB 0xFFE0 # FULLWIDTH CENT SIGN -0xA1CC 0xFFE1 # FULLWIDTH POUND SIGN -0xA1CD 0xFFE5 # FULLWIDTH YEN SIGN -0xA1CE 0x2642 # MALE SIGN -0xA1CF 0x2640 # FEMALE SIGN -0xA1D0 0x2220 # ANGLE -0xA1D1 0x22A5 # UP TACK -0xA1D2 0x2312 # ARC -0xA1D3 0x2202 # PARTIAL DIFFERENTIAL -0xA1D4 0x2207 # NABLA -0xA1D5 0x2261 # IDENTICAL TO -0xA1D6 0x2252 # APPROXIMATELY EQUAL TO OR THE IMAGE OF -0xA1D7 0x00A7 # SECTION SIGN -0xA1D8 0x203B # REFERENCE MARK -0xA1D9 0x2606 # WHITE STAR -0xA1DA 0x2605 # BLACK STAR -0xA1DB 0x25CB # WHITE CIRCLE -0xA1DC 0x25CF # BLACK CIRCLE -0xA1DD 0x25CE # BULLSEYE -0xA1DE 0x25C7 # WHITE DIAMOND -0xA1DF 0x25C6 # BLACK DIAMOND -0xA1E0 0x25A1 # WHITE SQUARE -0xA1E1 0x25A0 # BLACK SQUARE -0xA1E2 0x25B3 # WHITE UP-POINTING TRIANGLE -0xA1E3 0x25B2 # BLACK UP-POINTING TRIANGLE -0xA1E4 0x25BD # WHITE DOWN-POINTING TRIANGLE -0xA1E5 0x25BC # BLACK DOWN-POINTING TRIANGLE -0xA1E6 0x2192 # RIGHTWARDS ARROW -0xA1E7 0x2190 # LEFTWARDS ARROW -0xA1E8 0x2191 # UPWARDS ARROW -0xA1E9 0x2193 # DOWNWARDS ARROW -0xA1EA 0x2194 # LEFT RIGHT ARROW -0xA1EB 0x3013 # GETA MARK -0xA1EC 0x226A # MUCH LESS-THAN -0xA1ED 0x226B # MUCH GREATER-THAN -0xA1EE 0x221A # SQUARE ROOT -0xA1EF 0x223D # REVERSED TILDE -0xA1F0 0x221D # PROPORTIONAL TO -0xA1F1 0x2235 # BECAUSE -0xA1F2 0x222B # INTEGRAL -0xA1F3 0x222C # DOUBLE INTEGRAL -0xA1F4 0x2208 # ELEMENT OF -0xA1F5 0x220B # CONTAINS AS MEMBER -0xA1F6 0x2286 # SUBSET OF OR EQUAL TO -0xA1F7 0x2287 # SUPERSET OF OR EQUAL TO -0xA1F8 0x2282 # SUBSET OF -0xA1F9 0x2283 # SUPERSET OF -0xA1FA 0x222A # UNION -0xA1FB 0x2229 # INTERSECTION -0xA1FC 0x2227 # LOGICAL AND -0xA1FD 0x2228 # LOGICAL OR -0xA1FE 0xFFE2 # FULLWIDTH NOT SIGN -0xA241 0xC910 # HANGUL SYLLABLE CIEUC-U-SSANGSIOS -0xA242 0xC912 # HANGUL SYLLABLE CIEUC-U-CIEUC -0xA243 0xC913 # HANGUL SYLLABLE CIEUC-U-CHIEUCH -0xA244 0xC914 # HANGUL SYLLABLE CIEUC-U-KHIEUKH -0xA245 0xC915 # HANGUL SYLLABLE CIEUC-U-THIEUTH -0xA246 0xC916 # HANGUL SYLLABLE CIEUC-U-PHIEUPH -0xA247 0xC917 # HANGUL SYLLABLE CIEUC-U-HIEUH -0xA248 0xC919 # HANGUL SYLLABLE CIEUC-WEO-KIYEOK -0xA249 0xC91A # HANGUL SYLLABLE CIEUC-WEO-SSANGKIYEOK -0xA24A 0xC91B # HANGUL SYLLABLE CIEUC-WEO-KIYEOKSIOS -0xA24B 0xC91C # HANGUL SYLLABLE CIEUC-WEO-NIEUN -0xA24C 0xC91D # HANGUL SYLLABLE CIEUC-WEO-NIEUNCIEUC -0xA24D 0xC91E # HANGUL SYLLABLE CIEUC-WEO-NIEUNHIEUH -0xA24E 0xC91F # HANGUL SYLLABLE CIEUC-WEO-TIKEUT -0xA24F 0xC920 # HANGUL SYLLABLE CIEUC-WEO-RIEUL -0xA250 0xC921 # HANGUL SYLLABLE CIEUC-WEO-RIEULKIYEOK -0xA251 0xC922 # HANGUL SYLLABLE CIEUC-WEO-RIEULMIEUM -0xA252 0xC923 # HANGUL SYLLABLE CIEUC-WEO-RIEULPIEUP -0xA253 0xC924 # HANGUL SYLLABLE CIEUC-WEO-RIEULSIOS -0xA254 0xC925 # HANGUL SYLLABLE CIEUC-WEO-RIEULTHIEUTH -0xA255 0xC926 # HANGUL SYLLABLE CIEUC-WEO-RIEULPHIEUPH -0xA256 0xC927 # HANGUL SYLLABLE CIEUC-WEO-RIEULHIEUH -0xA257 0xC928 # HANGUL SYLLABLE CIEUC-WEO-MIEUM -0xA258 0xC929 # HANGUL SYLLABLE CIEUC-WEO-PIEUP -0xA259 0xC92A # HANGUL SYLLABLE CIEUC-WEO-PIEUPSIOS -0xA25A 0xC92B # HANGUL SYLLABLE CIEUC-WEO-SIOS -0xA261 0xC92D # HANGUL SYLLABLE CIEUC-WEO-IEUNG -0xA262 0xC92E # HANGUL SYLLABLE CIEUC-WEO-CIEUC -0xA263 0xC92F # HANGUL SYLLABLE CIEUC-WEO-CHIEUCH -0xA264 0xC930 # HANGUL SYLLABLE CIEUC-WEO-KHIEUKH -0xA265 0xC931 # HANGUL SYLLABLE CIEUC-WEO-THIEUTH -0xA266 0xC932 # HANGUL SYLLABLE CIEUC-WEO-PHIEUPH -0xA267 0xC933 # HANGUL SYLLABLE CIEUC-WEO-HIEUH -0xA268 0xC935 # HANGUL SYLLABLE CIEUC-WE-KIYEOK -0xA269 0xC936 # HANGUL SYLLABLE CIEUC-WE-SSANGKIYEOK -0xA26A 0xC937 # HANGUL SYLLABLE CIEUC-WE-KIYEOKSIOS -0xA26B 0xC938 # HANGUL SYLLABLE CIEUC-WE-NIEUN -0xA26C 0xC939 # HANGUL SYLLABLE CIEUC-WE-NIEUNCIEUC -0xA26D 0xC93A # HANGUL SYLLABLE CIEUC-WE-NIEUNHIEUH -0xA26E 0xC93B # HANGUL SYLLABLE CIEUC-WE-TIKEUT -0xA26F 0xC93C # HANGUL SYLLABLE CIEUC-WE-RIEUL -0xA270 0xC93D # HANGUL SYLLABLE CIEUC-WE-RIEULKIYEOK -0xA271 0xC93E # HANGUL SYLLABLE CIEUC-WE-RIEULMIEUM -0xA272 0xC93F # HANGUL SYLLABLE CIEUC-WE-RIEULPIEUP -0xA273 0xC940 # HANGUL SYLLABLE CIEUC-WE-RIEULSIOS -0xA274 0xC941 # HANGUL SYLLABLE CIEUC-WE-RIEULTHIEUTH -0xA275 0xC942 # HANGUL SYLLABLE CIEUC-WE-RIEULPHIEUPH -0xA276 0xC943 # HANGUL SYLLABLE CIEUC-WE-RIEULHIEUH -0xA277 0xC944 # HANGUL SYLLABLE CIEUC-WE-MIEUM -0xA278 0xC945 # HANGUL SYLLABLE CIEUC-WE-PIEUP -0xA279 0xC946 # HANGUL SYLLABLE CIEUC-WE-PIEUPSIOS -0xA27A 0xC947 # HANGUL SYLLABLE CIEUC-WE-SIOS -0xA281 0xC948 # HANGUL SYLLABLE CIEUC-WE-SSANGSIOS -0xA282 0xC949 # HANGUL SYLLABLE CIEUC-WE-IEUNG -0xA283 0xC94A # HANGUL SYLLABLE CIEUC-WE-CIEUC -0xA284 0xC94B # HANGUL SYLLABLE CIEUC-WE-CHIEUCH -0xA285 0xC94C # HANGUL SYLLABLE CIEUC-WE-KHIEUKH -0xA286 0xC94D # HANGUL SYLLABLE CIEUC-WE-THIEUTH -0xA287 0xC94E # HANGUL SYLLABLE CIEUC-WE-PHIEUPH -0xA288 0xC94F # HANGUL SYLLABLE CIEUC-WE-HIEUH -0xA289 0xC952 # HANGUL SYLLABLE CIEUC-WI-SSANGKIYEOK -0xA28A 0xC953 # HANGUL SYLLABLE CIEUC-WI-KIYEOKSIOS -0xA28B 0xC955 # HANGUL SYLLABLE CIEUC-WI-NIEUNCIEUC -0xA28C 0xC956 # HANGUL SYLLABLE CIEUC-WI-NIEUNHIEUH -0xA28D 0xC957 # HANGUL SYLLABLE CIEUC-WI-TIKEUT -0xA28E 0xC959 # HANGUL SYLLABLE CIEUC-WI-RIEULKIYEOK -0xA28F 0xC95A # HANGUL SYLLABLE CIEUC-WI-RIEULMIEUM -0xA290 0xC95B # HANGUL SYLLABLE CIEUC-WI-RIEULPIEUP -0xA291 0xC95C # HANGUL SYLLABLE CIEUC-WI-RIEULSIOS -0xA292 0xC95D # HANGUL SYLLABLE CIEUC-WI-RIEULTHIEUTH -0xA293 0xC95E # HANGUL SYLLABLE CIEUC-WI-RIEULPHIEUPH -0xA294 0xC95F # HANGUL SYLLABLE CIEUC-WI-RIEULHIEUH -0xA295 0xC962 # HANGUL SYLLABLE CIEUC-WI-PIEUPSIOS -0xA296 0xC964 # HANGUL SYLLABLE CIEUC-WI-SSANGSIOS -0xA297 0xC965 # HANGUL SYLLABLE CIEUC-WI-IEUNG -0xA298 0xC966 # HANGUL SYLLABLE CIEUC-WI-CIEUC -0xA299 0xC967 # HANGUL SYLLABLE CIEUC-WI-CHIEUCH -0xA29A 0xC968 # HANGUL SYLLABLE CIEUC-WI-KHIEUKH -0xA29B 0xC969 # HANGUL SYLLABLE CIEUC-WI-THIEUTH -0xA29C 0xC96A # HANGUL SYLLABLE CIEUC-WI-PHIEUPH -0xA29D 0xC96B # HANGUL SYLLABLE CIEUC-WI-HIEUH -0xA29E 0xC96D # HANGUL SYLLABLE CIEUC-YU-KIYEOK -0xA29F 0xC96E # HANGUL SYLLABLE CIEUC-YU-SSANGKIYEOK -0xA2A0 0xC96F # HANGUL SYLLABLE CIEUC-YU-KIYEOKSIOS -0xA2A1 0x21D2 # RIGHTWARDS DOUBLE ARROW -0xA2A2 0x21D4 # LEFT RIGHT DOUBLE ARROW -0xA2A3 0x2200 # FOR ALL -0xA2A4 0x2203 # THERE EXISTS -0xA2A5 0x00B4 # ACUTE ACCENT -0xA2A6 0xFF5E # FULLWIDTH TILDE -0xA2A7 0x02C7 # CARON -0xA2A8 0x02D8 # BREVE -0xA2A9 0x02DD # DOUBLE ACUTE ACCENT -0xA2AA 0x02DA # RING ABOVE -0xA2AB 0x02D9 # DOT ABOVE -0xA2AC 0x00B8 # CEDILLA -0xA2AD 0x02DB # OGONEK -0xA2AE 0x00A1 # INVERTED EXCLAMATION MARK -0xA2AF 0x00BF # INVERTED QUESTION MARK -0xA2B0 0x02D0 # MODIFIER LETTER TRIANGULAR COLON -0xA2B1 0x222E # CONTOUR INTEGRAL -0xA2B2 0x2211 # N-ARY SUMMATION -0xA2B3 0x220F # N-ARY PRODUCT -0xA2B4 0x00A4 # CURRENCY SIGN -0xA2B5 0x2109 # DEGREE FAHRENHEIT -0xA2B6 0x2030 # PER MILLE SIGN -0xA2B7 0x25C1 # WHITE LEFT-POINTING TRIANGLE -0xA2B8 0x25C0 # BLACK LEFT-POINTING TRIANGLE -0xA2B9 0x25B7 # WHITE RIGHT-POINTING TRIANGLE -0xA2BA 0x25B6 # BLACK RIGHT-POINTING TRIANGLE -0xA2BB 0x2664 # WHITE SPADE SUIT -0xA2BC 0x2660 # BLACK SPADE SUIT -0xA2BD 0x2661 # WHITE HEART SUIT -0xA2BE 0x2665 # BLACK HEART SUIT -0xA2BF 0x2667 # WHITE CLUB SUIT -0xA2C0 0x2663 # BLACK CLUB SUIT -0xA2C1 0x2299 # CIRCLED DOT OPERATOR -0xA2C2 0x25C8 # WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND -0xA2C3 0x25A3 # WHITE SQUARE CONTAINING BLACK SMALL SQUARE -0xA2C4 0x25D0 # CIRCLE WITH LEFT HALF BLACK -0xA2C5 0x25D1 # CIRCLE WITH RIGHT HALF BLACK -0xA2C6 0x2592 # MEDIUM SHADE -0xA2C7 0x25A4 # SQUARE WITH HORIZONTAL FILL -0xA2C8 0x25A5 # SQUARE WITH VERTICAL FILL -0xA2C9 0x25A8 # SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL -0xA2CA 0x25A7 # SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL -0xA2CB 0x25A6 # SQUARE WITH ORTHOGONAL CROSSHATCH FILL -0xA2CC 0x25A9 # SQUARE WITH DIAGONAL CROSSHATCH FILL -0xA2CD 0x2668 # HOT SPRINGS -0xA2CE 0x260F # WHITE TELEPHONE -0xA2CF 0x260E # BLACK TELEPHONE -0xA2D0 0x261C # WHITE LEFT POINTING INDEX -0xA2D1 0x261E # WHITE RIGHT POINTING INDEX -0xA2D2 0x00B6 # PILCROW SIGN -0xA2D3 0x2020 # DAGGER -0xA2D4 0x2021 # DOUBLE DAGGER -0xA2D5 0x2195 # UP DOWN ARROW -0xA2D6 0x2197 # NORTH EAST ARROW -0xA2D7 0x2199 # SOUTH WEST ARROW -0xA2D8 0x2196 # NORTH WEST ARROW -0xA2D9 0x2198 # SOUTH EAST ARROW -0xA2DA 0x266D # MUSIC FLAT SIGN -0xA2DB 0x2669 # QUARTER NOTE -0xA2DC 0x266A # EIGHTH NOTE -0xA2DD 0x266C # BEAMED SIXTEENTH NOTES -0xA2DE 0x327F # KOREAN STANDARD SYMBOL -0xA2DF 0x321C # PARENTHESIZED HANGUL CIEUC U -0xA2E0 0x2116 # NUMERO SIGN -0xA2E1 0x33C7 # SQUARE CO -0xA2E2 0x2122 # TRADE MARK SIGN -0xA2E3 0x33C2 # SQUARE AM -0xA2E4 0x33D8 # SQUARE PM -0xA2E5 0x2121 # TELEPHONE SIGN -0xA341 0xC971 # HANGUL SYLLABLE CIEUC-YU-NIEUNCIEUC -0xA342 0xC972 # HANGUL SYLLABLE CIEUC-YU-NIEUNHIEUH -0xA343 0xC973 # HANGUL SYLLABLE CIEUC-YU-TIKEUT -0xA344 0xC975 # HANGUL SYLLABLE CIEUC-YU-RIEULKIYEOK -0xA345 0xC976 # HANGUL SYLLABLE CIEUC-YU-RIEULMIEUM -0xA346 0xC977 # HANGUL SYLLABLE CIEUC-YU-RIEULPIEUP -0xA347 0xC978 # HANGUL SYLLABLE CIEUC-YU-RIEULSIOS -0xA348 0xC979 # HANGUL SYLLABLE CIEUC-YU-RIEULTHIEUTH -0xA349 0xC97A # HANGUL SYLLABLE CIEUC-YU-RIEULPHIEUPH -0xA34A 0xC97B # HANGUL SYLLABLE CIEUC-YU-RIEULHIEUH -0xA34B 0xC97D # HANGUL SYLLABLE CIEUC-YU-PIEUP -0xA34C 0xC97E # HANGUL SYLLABLE CIEUC-YU-PIEUPSIOS -0xA34D 0xC97F # HANGUL SYLLABLE CIEUC-YU-SIOS -0xA34E 0xC980 # HANGUL SYLLABLE CIEUC-YU-SSANGSIOS -0xA34F 0xC981 # HANGUL SYLLABLE CIEUC-YU-IEUNG -0xA350 0xC982 # HANGUL SYLLABLE CIEUC-YU-CIEUC -0xA351 0xC983 # HANGUL SYLLABLE CIEUC-YU-CHIEUCH -0xA352 0xC984 # HANGUL SYLLABLE CIEUC-YU-KHIEUKH -0xA353 0xC985 # HANGUL SYLLABLE CIEUC-YU-THIEUTH -0xA354 0xC986 # HANGUL SYLLABLE CIEUC-YU-PHIEUPH -0xA355 0xC987 # HANGUL SYLLABLE CIEUC-YU-HIEUH -0xA356 0xC98A # HANGUL SYLLABLE CIEUC-EU-SSANGKIYEOK -0xA357 0xC98B # HANGUL SYLLABLE CIEUC-EU-KIYEOKSIOS -0xA358 0xC98D # HANGUL SYLLABLE CIEUC-EU-NIEUNCIEUC -0xA359 0xC98E # HANGUL SYLLABLE CIEUC-EU-NIEUNHIEUH -0xA35A 0xC98F # HANGUL SYLLABLE CIEUC-EU-TIKEUT -0xA361 0xC991 # HANGUL SYLLABLE CIEUC-EU-RIEULKIYEOK -0xA362 0xC992 # HANGUL SYLLABLE CIEUC-EU-RIEULMIEUM -0xA363 0xC993 # HANGUL SYLLABLE CIEUC-EU-RIEULPIEUP -0xA364 0xC994 # HANGUL SYLLABLE CIEUC-EU-RIEULSIOS -0xA365 0xC995 # HANGUL SYLLABLE CIEUC-EU-RIEULTHIEUTH -0xA366 0xC996 # HANGUL SYLLABLE CIEUC-EU-RIEULPHIEUPH -0xA367 0xC997 # HANGUL SYLLABLE CIEUC-EU-RIEULHIEUH -0xA368 0xC99A # HANGUL SYLLABLE CIEUC-EU-PIEUPSIOS -0xA369 0xC99C # HANGUL SYLLABLE CIEUC-EU-SSANGSIOS -0xA36A 0xC99E # HANGUL SYLLABLE CIEUC-EU-CIEUC -0xA36B 0xC99F # HANGUL SYLLABLE CIEUC-EU-CHIEUCH -0xA36C 0xC9A0 # HANGUL SYLLABLE CIEUC-EU-KHIEUKH -0xA36D 0xC9A1 # HANGUL SYLLABLE CIEUC-EU-THIEUTH -0xA36E 0xC9A2 # HANGUL SYLLABLE CIEUC-EU-PHIEUPH -0xA36F 0xC9A3 # HANGUL SYLLABLE CIEUC-EU-HIEUH -0xA370 0xC9A4 # HANGUL SYLLABLE CIEUC-YI -0xA371 0xC9A5 # HANGUL SYLLABLE CIEUC-YI-KIYEOK -0xA372 0xC9A6 # HANGUL SYLLABLE CIEUC-YI-SSANGKIYEOK -0xA373 0xC9A7 # HANGUL SYLLABLE CIEUC-YI-KIYEOKSIOS -0xA374 0xC9A8 # HANGUL SYLLABLE CIEUC-YI-NIEUN -0xA375 0xC9A9 # HANGUL SYLLABLE CIEUC-YI-NIEUNCIEUC -0xA376 0xC9AA # HANGUL SYLLABLE CIEUC-YI-NIEUNHIEUH -0xA377 0xC9AB # HANGUL SYLLABLE CIEUC-YI-TIKEUT -0xA378 0xC9AC # HANGUL SYLLABLE CIEUC-YI-RIEUL -0xA379 0xC9AD # HANGUL SYLLABLE CIEUC-YI-RIEULKIYEOK -0xA37A 0xC9AE # HANGUL SYLLABLE CIEUC-YI-RIEULMIEUM -0xA381 0xC9AF # HANGUL SYLLABLE CIEUC-YI-RIEULPIEUP -0xA382 0xC9B0 # HANGUL SYLLABLE CIEUC-YI-RIEULSIOS -0xA383 0xC9B1 # HANGUL SYLLABLE CIEUC-YI-RIEULTHIEUTH -0xA384 0xC9B2 # HANGUL SYLLABLE CIEUC-YI-RIEULPHIEUPH -0xA385 0xC9B3 # HANGUL SYLLABLE CIEUC-YI-RIEULHIEUH -0xA386 0xC9B4 # HANGUL SYLLABLE CIEUC-YI-MIEUM -0xA387 0xC9B5 # HANGUL SYLLABLE CIEUC-YI-PIEUP -0xA388 0xC9B6 # HANGUL SYLLABLE CIEUC-YI-PIEUPSIOS -0xA389 0xC9B7 # HANGUL SYLLABLE CIEUC-YI-SIOS -0xA38A 0xC9B8 # HANGUL SYLLABLE CIEUC-YI-SSANGSIOS -0xA38B 0xC9B9 # HANGUL SYLLABLE CIEUC-YI-IEUNG -0xA38C 0xC9BA # HANGUL SYLLABLE CIEUC-YI-CIEUC -0xA38D 0xC9BB # HANGUL SYLLABLE CIEUC-YI-CHIEUCH -0xA38E 0xC9BC # HANGUL SYLLABLE CIEUC-YI-KHIEUKH -0xA38F 0xC9BD # HANGUL SYLLABLE CIEUC-YI-THIEUTH -0xA390 0xC9BE # HANGUL SYLLABLE CIEUC-YI-PHIEUPH -0xA391 0xC9BF # HANGUL SYLLABLE CIEUC-YI-HIEUH -0xA392 0xC9C2 # HANGUL SYLLABLE CIEUC-I-SSANGKIYEOK -0xA393 0xC9C3 # HANGUL SYLLABLE CIEUC-I-KIYEOKSIOS -0xA394 0xC9C5 # HANGUL SYLLABLE CIEUC-I-NIEUNCIEUC -0xA395 0xC9C6 # HANGUL SYLLABLE CIEUC-I-NIEUNHIEUH -0xA396 0xC9C9 # HANGUL SYLLABLE CIEUC-I-RIEULKIYEOK -0xA397 0xC9CB # HANGUL SYLLABLE CIEUC-I-RIEULPIEUP -0xA398 0xC9CC # HANGUL SYLLABLE CIEUC-I-RIEULSIOS -0xA399 0xC9CD # HANGUL SYLLABLE CIEUC-I-RIEULTHIEUTH -0xA39A 0xC9CE # HANGUL SYLLABLE CIEUC-I-RIEULPHIEUPH -0xA39B 0xC9CF # HANGUL SYLLABLE CIEUC-I-RIEULHIEUH -0xA39C 0xC9D2 # HANGUL SYLLABLE CIEUC-I-PIEUPSIOS -0xA39D 0xC9D4 # HANGUL SYLLABLE CIEUC-I-SSANGSIOS -0xA39E 0xC9D7 # HANGUL SYLLABLE CIEUC-I-CHIEUCH -0xA39F 0xC9D8 # HANGUL SYLLABLE CIEUC-I-KHIEUKH -0xA3A0 0xC9DB # HANGUL SYLLABLE CIEUC-I-HIEUH -0xA3A1 0xFF01 # FULLWIDTH EXCLAMATION MARK -0xA3A2 0xFF02 # FULLWIDTH QUOTATION MARK -0xA3A3 0xFF03 # FULLWIDTH NUMBER SIGN -0xA3A4 0xFF04 # FULLWIDTH DOLLAR SIGN -0xA3A5 0xFF05 # FULLWIDTH PERCENT SIGN -0xA3A6 0xFF06 # FULLWIDTH AMPERSAND -0xA3A7 0xFF07 # FULLWIDTH APOSTROPHE -0xA3A8 0xFF08 # FULLWIDTH LEFT PARENTHESIS -0xA3A9 0xFF09 # FULLWIDTH RIGHT PARENTHESIS -0xA3AA 0xFF0A # FULLWIDTH ASTERISK -0xA3AB 0xFF0B # FULLWIDTH PLUS SIGN -0xA3AC 0xFF0C # FULLWIDTH COMMA -0xA3AD 0xFF0D # FULLWIDTH HYPHEN-MINUS -0xA3AE 0xFF0E # FULLWIDTH FULL STOP -0xA3AF 0xFF0F # FULLWIDTH SOLIDUS -0xA3B0 0xFF10 # FULLWIDTH DIGIT ZERO -0xA3B1 0xFF11 # FULLWIDTH DIGIT ONE -0xA3B2 0xFF12 # FULLWIDTH DIGIT TWO -0xA3B3 0xFF13 # FULLWIDTH DIGIT THREE -0xA3B4 0xFF14 # FULLWIDTH DIGIT FOUR -0xA3B5 0xFF15 # FULLWIDTH DIGIT FIVE -0xA3B6 0xFF16 # FULLWIDTH DIGIT SIX -0xA3B7 0xFF17 # FULLWIDTH DIGIT SEVEN -0xA3B8 0xFF18 # FULLWIDTH DIGIT EIGHT -0xA3B9 0xFF19 # FULLWIDTH DIGIT NINE -0xA3BA 0xFF1A # FULLWIDTH COLON -0xA3BB 0xFF1B # FULLWIDTH SEMICOLON -0xA3BC 0xFF1C # FULLWIDTH LESS-THAN SIGN -0xA3BD 0xFF1D # FULLWIDTH EQUALS SIGN -0xA3BE 0xFF1E # FULLWIDTH GREATER-THAN SIGN -0xA3BF 0xFF1F # FULLWIDTH QUESTION MARK -0xA3C0 0xFF20 # FULLWIDTH COMMERCIAL AT -0xA3C1 0xFF21 # FULLWIDTH LATIN CAPITAL LETTER A -0xA3C2 0xFF22 # FULLWIDTH LATIN CAPITAL LETTER B -0xA3C3 0xFF23 # FULLWIDTH LATIN CAPITAL LETTER C -0xA3C4 0xFF24 # FULLWIDTH LATIN CAPITAL LETTER D -0xA3C5 0xFF25 # FULLWIDTH LATIN CAPITAL LETTER E -0xA3C6 0xFF26 # FULLWIDTH LATIN CAPITAL LETTER F -0xA3C7 0xFF27 # FULLWIDTH LATIN CAPITAL LETTER G -0xA3C8 0xFF28 # FULLWIDTH LATIN CAPITAL LETTER H -0xA3C9 0xFF29 # FULLWIDTH LATIN CAPITAL LETTER I -0xA3CA 0xFF2A # FULLWIDTH LATIN CAPITAL LETTER J -0xA3CB 0xFF2B # FULLWIDTH LATIN CAPITAL LETTER K -0xA3CC 0xFF2C # FULLWIDTH LATIN CAPITAL LETTER L -0xA3CD 0xFF2D # FULLWIDTH LATIN CAPITAL LETTER M -0xA3CE 0xFF2E # FULLWIDTH LATIN CAPITAL LETTER N -0xA3CF 0xFF2F # FULLWIDTH LATIN CAPITAL LETTER O -0xA3D0 0xFF30 # FULLWIDTH LATIN CAPITAL LETTER P -0xA3D1 0xFF31 # FULLWIDTH LATIN CAPITAL LETTER Q -0xA3D2 0xFF32 # FULLWIDTH LATIN CAPITAL LETTER R -0xA3D3 0xFF33 # FULLWIDTH LATIN CAPITAL LETTER S -0xA3D4 0xFF34 # FULLWIDTH LATIN CAPITAL LETTER T -0xA3D5 0xFF35 # FULLWIDTH LATIN CAPITAL LETTER U -0xA3D6 0xFF36 # FULLWIDTH LATIN CAPITAL LETTER V -0xA3D7 0xFF37 # FULLWIDTH LATIN CAPITAL LETTER W -0xA3D8 0xFF38 # FULLWIDTH LATIN CAPITAL LETTER X -0xA3D9 0xFF39 # FULLWIDTH LATIN CAPITAL LETTER Y -0xA3DA 0xFF3A # FULLWIDTH LATIN CAPITAL LETTER Z -0xA3DB 0xFF3B # FULLWIDTH LEFT SQUARE BRACKET -0xA3DC 0xFFE6 # FULLWIDTH WON SIGN -0xA3DD 0xFF3D # FULLWIDTH RIGHT SQUARE BRACKET -0xA3DE 0xFF3E # FULLWIDTH CIRCUMFLEX ACCENT -0xA3DF 0xFF3F # FULLWIDTH LOW LINE -0xA3E0 0xFF40 # FULLWIDTH GRAVE ACCENT -0xA3E1 0xFF41 # FULLWIDTH LATIN SMALL LETTER A -0xA3E2 0xFF42 # FULLWIDTH LATIN SMALL LETTER B -0xA3E3 0xFF43 # FULLWIDTH LATIN SMALL LETTER C -0xA3E4 0xFF44 # FULLWIDTH LATIN SMALL LETTER D -0xA3E5 0xFF45 # FULLWIDTH LATIN SMALL LETTER E -0xA3E6 0xFF46 # FULLWIDTH LATIN SMALL LETTER F -0xA3E7 0xFF47 # FULLWIDTH LATIN SMALL LETTER G -0xA3E8 0xFF48 # FULLWIDTH LATIN SMALL LETTER H -0xA3E9 0xFF49 # FULLWIDTH LATIN SMALL LETTER I -0xA3EA 0xFF4A # FULLWIDTH LATIN SMALL LETTER J -0xA3EB 0xFF4B # FULLWIDTH LATIN SMALL LETTER K -0xA3EC 0xFF4C # FULLWIDTH LATIN SMALL LETTER L -0xA3ED 0xFF4D # FULLWIDTH LATIN SMALL LETTER M -0xA3EE 0xFF4E # FULLWIDTH LATIN SMALL LETTER N -0xA3EF 0xFF4F # FULLWIDTH LATIN SMALL LETTER O -0xA3F0 0xFF50 # FULLWIDTH LATIN SMALL LETTER P -0xA3F1 0xFF51 # FULLWIDTH LATIN SMALL LETTER Q -0xA3F2 0xFF52 # FULLWIDTH LATIN SMALL LETTER R -0xA3F3 0xFF53 # FULLWIDTH LATIN SMALL LETTER S -0xA3F4 0xFF54 # FULLWIDTH LATIN SMALL LETTER T -0xA3F5 0xFF55 # FULLWIDTH LATIN SMALL LETTER U -0xA3F6 0xFF56 # FULLWIDTH LATIN SMALL LETTER V -0xA3F7 0xFF57 # FULLWIDTH LATIN SMALL LETTER W -0xA3F8 0xFF58 # FULLWIDTH LATIN SMALL LETTER X -0xA3F9 0xFF59 # FULLWIDTH LATIN SMALL LETTER Y -0xA3FA 0xFF5A # FULLWIDTH LATIN SMALL LETTER Z -0xA3FB 0xFF5B # FULLWIDTH LEFT CURLY BRACKET -0xA3FC 0xFF5C # FULLWIDTH VERTICAL LINE -0xA3FD 0xFF5D # FULLWIDTH RIGHT CURLY BRACKET -0xA3FE 0xFFE3 # FULLWIDTH MACRON -0xA441 0xC9DE # HANGUL SYLLABLE SSANGCIEUC-A-SSANGKIYEOK -0xA442 0xC9DF # HANGUL SYLLABLE SSANGCIEUC-A-KIYEOKSIOS -0xA443 0xC9E1 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUNCIEUC -0xA444 0xC9E3 # HANGUL SYLLABLE SSANGCIEUC-A-TIKEUT -0xA445 0xC9E5 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULKIYEOK -0xA446 0xC9E6 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULMIEUM -0xA447 0xC9E8 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULSIOS -0xA448 0xC9E9 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULTHIEUTH -0xA449 0xC9EA # HANGUL SYLLABLE SSANGCIEUC-A-RIEULPHIEUPH -0xA44A 0xC9EB # HANGUL SYLLABLE SSANGCIEUC-A-RIEULHIEUH -0xA44B 0xC9EE # HANGUL SYLLABLE SSANGCIEUC-A-PIEUPSIOS -0xA44C 0xC9F2 # HANGUL SYLLABLE SSANGCIEUC-A-CIEUC -0xA44D 0xC9F3 # HANGUL SYLLABLE SSANGCIEUC-A-CHIEUCH -0xA44E 0xC9F4 # HANGUL SYLLABLE SSANGCIEUC-A-KHIEUKH -0xA44F 0xC9F5 # HANGUL SYLLABLE SSANGCIEUC-A-THIEUTH -0xA450 0xC9F6 # HANGUL SYLLABLE SSANGCIEUC-A-PHIEUPH -0xA451 0xC9F7 # HANGUL SYLLABLE SSANGCIEUC-A-HIEUH -0xA452 0xC9FA # HANGUL SYLLABLE SSANGCIEUC-AE-SSANGKIYEOK -0xA453 0xC9FB # HANGUL SYLLABLE SSANGCIEUC-AE-KIYEOKSIOS -0xA454 0xC9FD # HANGUL SYLLABLE SSANGCIEUC-AE-NIEUNCIEUC -0xA455 0xC9FE # HANGUL SYLLABLE SSANGCIEUC-AE-NIEUNHIEUH -0xA456 0xC9FF # HANGUL SYLLABLE SSANGCIEUC-AE-TIKEUT -0xA457 0xCA01 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULKIYEOK -0xA458 0xCA02 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULMIEUM -0xA459 0xCA03 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULPIEUP -0xA45A 0xCA04 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULSIOS -0xA461 0xCA05 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULTHIEUTH -0xA462 0xCA06 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULPHIEUPH -0xA463 0xCA07 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULHIEUH -0xA464 0xCA0A # HANGUL SYLLABLE SSANGCIEUC-AE-PIEUPSIOS -0xA465 0xCA0E # HANGUL SYLLABLE SSANGCIEUC-AE-CIEUC -0xA466 0xCA0F # HANGUL SYLLABLE SSANGCIEUC-AE-CHIEUCH -0xA467 0xCA10 # HANGUL SYLLABLE SSANGCIEUC-AE-KHIEUKH -0xA468 0xCA11 # HANGUL SYLLABLE SSANGCIEUC-AE-THIEUTH -0xA469 0xCA12 # HANGUL SYLLABLE SSANGCIEUC-AE-PHIEUPH -0xA46A 0xCA13 # HANGUL SYLLABLE SSANGCIEUC-AE-HIEUH -0xA46B 0xCA15 # HANGUL SYLLABLE SSANGCIEUC-YA-KIYEOK -0xA46C 0xCA16 # HANGUL SYLLABLE SSANGCIEUC-YA-SSANGKIYEOK -0xA46D 0xCA17 # HANGUL SYLLABLE SSANGCIEUC-YA-KIYEOKSIOS -0xA46E 0xCA19 # HANGUL SYLLABLE SSANGCIEUC-YA-NIEUNCIEUC -0xA46F 0xCA1A # HANGUL SYLLABLE SSANGCIEUC-YA-NIEUNHIEUH -0xA470 0xCA1B # HANGUL SYLLABLE SSANGCIEUC-YA-TIKEUT -0xA471 0xCA1C # HANGUL SYLLABLE SSANGCIEUC-YA-RIEUL -0xA472 0xCA1D # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULKIYEOK -0xA473 0xCA1E # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULMIEUM -0xA474 0xCA1F # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULPIEUP -0xA475 0xCA20 # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULSIOS -0xA476 0xCA21 # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULTHIEUTH -0xA477 0xCA22 # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULPHIEUPH -0xA478 0xCA23 # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULHIEUH -0xA479 0xCA24 # HANGUL SYLLABLE SSANGCIEUC-YA-MIEUM -0xA47A 0xCA25 # HANGUL SYLLABLE SSANGCIEUC-YA-PIEUP -0xA481 0xCA26 # HANGUL SYLLABLE SSANGCIEUC-YA-PIEUPSIOS -0xA482 0xCA27 # HANGUL SYLLABLE SSANGCIEUC-YA-SIOS -0xA483 0xCA28 # HANGUL SYLLABLE SSANGCIEUC-YA-SSANGSIOS -0xA484 0xCA2A # HANGUL SYLLABLE SSANGCIEUC-YA-CIEUC -0xA485 0xCA2B # HANGUL SYLLABLE SSANGCIEUC-YA-CHIEUCH -0xA486 0xCA2C # HANGUL SYLLABLE SSANGCIEUC-YA-KHIEUKH -0xA487 0xCA2D # HANGUL SYLLABLE SSANGCIEUC-YA-THIEUTH -0xA488 0xCA2E # HANGUL SYLLABLE SSANGCIEUC-YA-PHIEUPH -0xA489 0xCA2F # HANGUL SYLLABLE SSANGCIEUC-YA-HIEUH -0xA48A 0xCA30 # HANGUL SYLLABLE SSANGCIEUC-YAE -0xA48B 0xCA31 # HANGUL SYLLABLE SSANGCIEUC-YAE-KIYEOK -0xA48C 0xCA32 # HANGUL SYLLABLE SSANGCIEUC-YAE-SSANGKIYEOK -0xA48D 0xCA33 # HANGUL SYLLABLE SSANGCIEUC-YAE-KIYEOKSIOS -0xA48E 0xCA34 # HANGUL SYLLABLE SSANGCIEUC-YAE-NIEUN -0xA48F 0xCA35 # HANGUL SYLLABLE SSANGCIEUC-YAE-NIEUNCIEUC -0xA490 0xCA36 # HANGUL SYLLABLE SSANGCIEUC-YAE-NIEUNHIEUH -0xA491 0xCA37 # HANGUL SYLLABLE SSANGCIEUC-YAE-TIKEUT -0xA492 0xCA38 # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEUL -0xA493 0xCA39 # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULKIYEOK -0xA494 0xCA3A # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULMIEUM -0xA495 0xCA3B # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULPIEUP -0xA496 0xCA3C # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULSIOS -0xA497 0xCA3D # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULTHIEUTH -0xA498 0xCA3E # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULPHIEUPH -0xA499 0xCA3F # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULHIEUH -0xA49A 0xCA40 # HANGUL SYLLABLE SSANGCIEUC-YAE-MIEUM -0xA49B 0xCA41 # HANGUL SYLLABLE SSANGCIEUC-YAE-PIEUP -0xA49C 0xCA42 # HANGUL SYLLABLE SSANGCIEUC-YAE-PIEUPSIOS -0xA49D 0xCA43 # HANGUL SYLLABLE SSANGCIEUC-YAE-SIOS -0xA49E 0xCA44 # HANGUL SYLLABLE SSANGCIEUC-YAE-SSANGSIOS -0xA49F 0xCA45 # HANGUL SYLLABLE SSANGCIEUC-YAE-IEUNG -0xA4A0 0xCA46 # HANGUL SYLLABLE SSANGCIEUC-YAE-CIEUC -0xA4A1 0x3131 # HANGUL LETTER KIYEOK -0xA4A2 0x3132 # HANGUL LETTER SSANGKIYEOK -0xA4A3 0x3133 # HANGUL LETTER KIYEOK-SIOS -0xA4A4 0x3134 # HANGUL LETTER NIEUN -0xA4A5 0x3135 # HANGUL LETTER NIEUN-CIEUC -0xA4A6 0x3136 # HANGUL LETTER NIEUN-HIEUH -0xA4A7 0x3137 # HANGUL LETTER TIKEUT -0xA4A8 0x3138 # HANGUL LETTER SSANGTIKEUT -0xA4A9 0x3139 # HANGUL LETTER RIEUL -0xA4AA 0x313A # HANGUL LETTER RIEUL-KIYEOK -0xA4AB 0x313B # HANGUL LETTER RIEUL-MIEUM -0xA4AC 0x313C # HANGUL LETTER RIEUL-PIEUP -0xA4AD 0x313D # HANGUL LETTER RIEUL-SIOS -0xA4AE 0x313E # HANGUL LETTER RIEUL-THIEUTH -0xA4AF 0x313F # HANGUL LETTER RIEUL-PHIEUPH -0xA4B0 0x3140 # HANGUL LETTER RIEUL-HIEUH -0xA4B1 0x3141 # HANGUL LETTER MIEUM -0xA4B2 0x3142 # HANGUL LETTER PIEUP -0xA4B3 0x3143 # HANGUL LETTER SSANGPIEUP -0xA4B4 0x3144 # HANGUL LETTER PIEUP-SIOS -0xA4B5 0x3145 # HANGUL LETTER SIOS -0xA4B6 0x3146 # HANGUL LETTER SSANGSIOS -0xA4B7 0x3147 # HANGUL LETTER IEUNG -0xA4B8 0x3148 # HANGUL LETTER CIEUC -0xA4B9 0x3149 # HANGUL LETTER SSANGCIEUC -0xA4BA 0x314A # HANGUL LETTER CHIEUCH -0xA4BB 0x314B # HANGUL LETTER KHIEUKH -0xA4BC 0x314C # HANGUL LETTER THIEUTH -0xA4BD 0x314D # HANGUL LETTER PHIEUPH -0xA4BE 0x314E # HANGUL LETTER HIEUH -0xA4BF 0x314F # HANGUL LETTER A -0xA4C0 0x3150 # HANGUL LETTER AE -0xA4C1 0x3151 # HANGUL LETTER YA -0xA4C2 0x3152 # HANGUL LETTER YAE -0xA4C3 0x3153 # HANGUL LETTER EO -0xA4C4 0x3154 # HANGUL LETTER E -0xA4C5 0x3155 # HANGUL LETTER YEO -0xA4C6 0x3156 # HANGUL LETTER YE -0xA4C7 0x3157 # HANGUL LETTER O -0xA4C8 0x3158 # HANGUL LETTER WA -0xA4C9 0x3159 # HANGUL LETTER WAE -0xA4CA 0x315A # HANGUL LETTER OE -0xA4CB 0x315B # HANGUL LETTER YO -0xA4CC 0x315C # HANGUL LETTER U -0xA4CD 0x315D # HANGUL LETTER WEO -0xA4CE 0x315E # HANGUL LETTER WE -0xA4CF 0x315F # HANGUL LETTER WI -0xA4D0 0x3160 # HANGUL LETTER YU -0xA4D1 0x3161 # HANGUL LETTER EU -0xA4D2 0x3162 # HANGUL LETTER YI -0xA4D3 0x3163 # HANGUL LETTER I -0xA4D4 0x3164 # HANGUL FILLER -0xA4D5 0x3165 # HANGUL LETTER SSANGNIEUN -0xA4D6 0x3166 # HANGUL LETTER NIEUN-TIKEUT -0xA4D7 0x3167 # HANGUL LETTER NIEUN-SIOS -0xA4D8 0x3168 # HANGUL LETTER NIEUN-PANSIOS -0xA4D9 0x3169 # HANGUL LETTER RIEUL-KIYEOK-SIOS -0xA4DA 0x316A # HANGUL LETTER RIEUL-TIKEUT -0xA4DB 0x316B # HANGUL LETTER RIEUL-PIEUP-SIOS -0xA4DC 0x316C # HANGUL LETTER RIEUL-PANSIOS -0xA4DD 0x316D # HANGUL LETTER RIEUL-YEORINHIEUH -0xA4DE 0x316E # HANGUL LETTER MIEUM-PIEUP -0xA4DF 0x316F # HANGUL LETTER MIEUM-SIOS -0xA4E0 0x3170 # HANGUL LETTER MIEUM-PANSIOS -0xA4E1 0x3171 # HANGUL LETTER KAPYEOUNMIEUM -0xA4E2 0x3172 # HANGUL LETTER PIEUP-KIYEOK -0xA4E3 0x3173 # HANGUL LETTER PIEUP-TIKEUT -0xA4E4 0x3174 # HANGUL LETTER PIEUP-SIOS-KIYEOK -0xA4E5 0x3175 # HANGUL LETTER PIEUP-SIOS-TIKEUT -0xA4E6 0x3176 # HANGUL LETTER PIEUP-CIEUC -0xA4E7 0x3177 # HANGUL LETTER PIEUP-THIEUTH -0xA4E8 0x3178 # HANGUL LETTER KAPYEOUNPIEUP -0xA4E9 0x3179 # HANGUL LETTER KAPYEOUNSSANGPIEUP -0xA4EA 0x317A # HANGUL LETTER SIOS-KIYEOK -0xA4EB 0x317B # HANGUL LETTER SIOS-NIEUN -0xA4EC 0x317C # HANGUL LETTER SIOS-TIKEUT -0xA4ED 0x317D # HANGUL LETTER SIOS-PIEUP -0xA4EE 0x317E # HANGUL LETTER SIOS-CIEUC -0xA4EF 0x317F # HANGUL LETTER PANSIOS -0xA4F0 0x3180 # HANGUL LETTER SSANGIEUNG -0xA4F1 0x3181 # HANGUL LETTER YESIEUNG -0xA4F2 0x3182 # HANGUL LETTER YESIEUNG-SIOS -0xA4F3 0x3183 # HANGUL LETTER YESIEUNG-PANSIOS -0xA4F4 0x3184 # HANGUL LETTER KAPYEOUNPHIEUPH -0xA4F5 0x3185 # HANGUL LETTER SSANGHIEUH -0xA4F6 0x3186 # HANGUL LETTER YEORINHIEUH -0xA4F7 0x3187 # HANGUL LETTER YO-YA -0xA4F8 0x3188 # HANGUL LETTER YO-YAE -0xA4F9 0x3189 # HANGUL LETTER YO-I -0xA4FA 0x318A # HANGUL LETTER YU-YEO -0xA4FB 0x318B # HANGUL LETTER YU-YE -0xA4FC 0x318C # HANGUL LETTER YU-I -0xA4FD 0x318D # HANGUL LETTER ARAEA -0xA4FE 0x318E # HANGUL LETTER ARAEAE -0xA541 0xCA47 # HANGUL SYLLABLE SSANGCIEUC-YAE-CHIEUCH -0xA542 0xCA48 # HANGUL SYLLABLE SSANGCIEUC-YAE-KHIEUKH -0xA543 0xCA49 # HANGUL SYLLABLE SSANGCIEUC-YAE-THIEUTH -0xA544 0xCA4A # HANGUL SYLLABLE SSANGCIEUC-YAE-PHIEUPH -0xA545 0xCA4B # HANGUL SYLLABLE SSANGCIEUC-YAE-HIEUH -0xA546 0xCA4E # HANGUL SYLLABLE SSANGCIEUC-EO-SSANGKIYEOK -0xA547 0xCA4F # HANGUL SYLLABLE SSANGCIEUC-EO-KIYEOKSIOS -0xA548 0xCA51 # HANGUL SYLLABLE SSANGCIEUC-EO-NIEUNCIEUC -0xA549 0xCA52 # HANGUL SYLLABLE SSANGCIEUC-EO-NIEUNHIEUH -0xA54A 0xCA53 # HANGUL SYLLABLE SSANGCIEUC-EO-TIKEUT -0xA54B 0xCA55 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULKIYEOK -0xA54C 0xCA56 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULMIEUM -0xA54D 0xCA57 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULPIEUP -0xA54E 0xCA58 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULSIOS -0xA54F 0xCA59 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULTHIEUTH -0xA550 0xCA5A # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULPHIEUPH -0xA551 0xCA5B # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULHIEUH -0xA552 0xCA5E # HANGUL SYLLABLE SSANGCIEUC-EO-PIEUPSIOS -0xA553 0xCA62 # HANGUL SYLLABLE SSANGCIEUC-EO-CIEUC -0xA554 0xCA63 # HANGUL SYLLABLE SSANGCIEUC-EO-CHIEUCH -0xA555 0xCA64 # HANGUL SYLLABLE SSANGCIEUC-EO-KHIEUKH -0xA556 0xCA65 # HANGUL SYLLABLE SSANGCIEUC-EO-THIEUTH -0xA557 0xCA66 # HANGUL SYLLABLE SSANGCIEUC-EO-PHIEUPH -0xA558 0xCA67 # HANGUL SYLLABLE SSANGCIEUC-EO-HIEUH -0xA559 0xCA69 # HANGUL SYLLABLE SSANGCIEUC-E-KIYEOK -0xA55A 0xCA6A # HANGUL SYLLABLE SSANGCIEUC-E-SSANGKIYEOK -0xA561 0xCA6B # HANGUL SYLLABLE SSANGCIEUC-E-KIYEOKSIOS -0xA562 0xCA6C # HANGUL SYLLABLE SSANGCIEUC-E-NIEUN -0xA563 0xCA6D # HANGUL SYLLABLE SSANGCIEUC-E-NIEUNCIEUC -0xA564 0xCA6E # HANGUL SYLLABLE SSANGCIEUC-E-NIEUNHIEUH -0xA565 0xCA6F # HANGUL SYLLABLE SSANGCIEUC-E-TIKEUT -0xA566 0xCA70 # HANGUL SYLLABLE SSANGCIEUC-E-RIEUL -0xA567 0xCA71 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULKIYEOK -0xA568 0xCA72 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULMIEUM -0xA569 0xCA73 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULPIEUP -0xA56A 0xCA74 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULSIOS -0xA56B 0xCA75 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULTHIEUTH -0xA56C 0xCA76 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULPHIEUPH -0xA56D 0xCA77 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULHIEUH -0xA56E 0xCA78 # HANGUL SYLLABLE SSANGCIEUC-E-MIEUM -0xA56F 0xCA79 # HANGUL SYLLABLE SSANGCIEUC-E-PIEUP -0xA570 0xCA7A # HANGUL SYLLABLE SSANGCIEUC-E-PIEUPSIOS -0xA571 0xCA7B # HANGUL SYLLABLE SSANGCIEUC-E-SIOS -0xA572 0xCA7C # HANGUL SYLLABLE SSANGCIEUC-E-SSANGSIOS -0xA573 0xCA7E # HANGUL SYLLABLE SSANGCIEUC-E-CIEUC -0xA574 0xCA7F # HANGUL SYLLABLE SSANGCIEUC-E-CHIEUCH -0xA575 0xCA80 # HANGUL SYLLABLE SSANGCIEUC-E-KHIEUKH -0xA576 0xCA81 # HANGUL SYLLABLE SSANGCIEUC-E-THIEUTH -0xA577 0xCA82 # HANGUL SYLLABLE SSANGCIEUC-E-PHIEUPH -0xA578 0xCA83 # HANGUL SYLLABLE SSANGCIEUC-E-HIEUH -0xA579 0xCA85 # HANGUL SYLLABLE SSANGCIEUC-YEO-KIYEOK -0xA57A 0xCA86 # HANGUL SYLLABLE SSANGCIEUC-YEO-SSANGKIYEOK -0xA581 0xCA87 # HANGUL SYLLABLE SSANGCIEUC-YEO-KIYEOKSIOS -0xA582 0xCA88 # HANGUL SYLLABLE SSANGCIEUC-YEO-NIEUN -0xA583 0xCA89 # HANGUL SYLLABLE SSANGCIEUC-YEO-NIEUNCIEUC -0xA584 0xCA8A # HANGUL SYLLABLE SSANGCIEUC-YEO-NIEUNHIEUH -0xA585 0xCA8B # HANGUL SYLLABLE SSANGCIEUC-YEO-TIKEUT -0xA586 0xCA8C # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEUL -0xA587 0xCA8D # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULKIYEOK -0xA588 0xCA8E # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULMIEUM -0xA589 0xCA8F # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULPIEUP -0xA58A 0xCA90 # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULSIOS -0xA58B 0xCA91 # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULTHIEUTH -0xA58C 0xCA92 # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULPHIEUPH -0xA58D 0xCA93 # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULHIEUH -0xA58E 0xCA94 # HANGUL SYLLABLE SSANGCIEUC-YEO-MIEUM -0xA58F 0xCA95 # HANGUL SYLLABLE SSANGCIEUC-YEO-PIEUP -0xA590 0xCA96 # HANGUL SYLLABLE SSANGCIEUC-YEO-PIEUPSIOS -0xA591 0xCA97 # HANGUL SYLLABLE SSANGCIEUC-YEO-SIOS -0xA592 0xCA99 # HANGUL SYLLABLE SSANGCIEUC-YEO-IEUNG -0xA593 0xCA9A # HANGUL SYLLABLE SSANGCIEUC-YEO-CIEUC -0xA594 0xCA9B # HANGUL SYLLABLE SSANGCIEUC-YEO-CHIEUCH -0xA595 0xCA9C # HANGUL SYLLABLE SSANGCIEUC-YEO-KHIEUKH -0xA596 0xCA9D # HANGUL SYLLABLE SSANGCIEUC-YEO-THIEUTH -0xA597 0xCA9E # HANGUL SYLLABLE SSANGCIEUC-YEO-PHIEUPH -0xA598 0xCA9F # HANGUL SYLLABLE SSANGCIEUC-YEO-HIEUH -0xA599 0xCAA0 # HANGUL SYLLABLE SSANGCIEUC-YE -0xA59A 0xCAA1 # HANGUL SYLLABLE SSANGCIEUC-YE-KIYEOK -0xA59B 0xCAA2 # HANGUL SYLLABLE SSANGCIEUC-YE-SSANGKIYEOK -0xA59C 0xCAA3 # HANGUL SYLLABLE SSANGCIEUC-YE-KIYEOKSIOS -0xA59D 0xCAA4 # HANGUL SYLLABLE SSANGCIEUC-YE-NIEUN -0xA59E 0xCAA5 # HANGUL SYLLABLE SSANGCIEUC-YE-NIEUNCIEUC -0xA59F 0xCAA6 # HANGUL SYLLABLE SSANGCIEUC-YE-NIEUNHIEUH -0xA5A0 0xCAA7 # HANGUL SYLLABLE SSANGCIEUC-YE-TIKEUT -0xA5A1 0x2170 # SMALL ROMAN NUMERAL ONE -0xA5A2 0x2171 # SMALL ROMAN NUMERAL TWO -0xA5A3 0x2172 # SMALL ROMAN NUMERAL THREE -0xA5A4 0x2173 # SMALL ROMAN NUMERAL FOUR -0xA5A5 0x2174 # SMALL ROMAN NUMERAL FIVE -0xA5A6 0x2175 # SMALL ROMAN NUMERAL SIX -0xA5A7 0x2176 # SMALL ROMAN NUMERAL SEVEN -0xA5A8 0x2177 # SMALL ROMAN NUMERAL EIGHT -0xA5A9 0x2178 # SMALL ROMAN NUMERAL NINE -0xA5AA 0x2179 # SMALL ROMAN NUMERAL TEN -0xA5B0 0x2160 # ROMAN NUMERAL ONE -0xA5B1 0x2161 # ROMAN NUMERAL TWO -0xA5B2 0x2162 # ROMAN NUMERAL THREE -0xA5B3 0x2163 # ROMAN NUMERAL FOUR -0xA5B4 0x2164 # ROMAN NUMERAL FIVE -0xA5B5 0x2165 # ROMAN NUMERAL SIX -0xA5B6 0x2166 # ROMAN NUMERAL SEVEN -0xA5B7 0x2167 # ROMAN NUMERAL EIGHT -0xA5B8 0x2168 # ROMAN NUMERAL NINE -0xA5B9 0x2169 # ROMAN NUMERAL TEN -0xA5C1 0x0391 # GREEK CAPITAL LETTER ALPHA -0xA5C2 0x0392 # GREEK CAPITAL LETTER BETA -0xA5C3 0x0393 # GREEK CAPITAL LETTER GAMMA -0xA5C4 0x0394 # GREEK CAPITAL LETTER DELTA -0xA5C5 0x0395 # GREEK CAPITAL LETTER EPSILON -0xA5C6 0x0396 # GREEK CAPITAL LETTER ZETA -0xA5C7 0x0397 # GREEK CAPITAL LETTER ETA -0xA5C8 0x0398 # GREEK CAPITAL LETTER THETA -0xA5C9 0x0399 # GREEK CAPITAL LETTER IOTA -0xA5CA 0x039A # GREEK CAPITAL LETTER KAPPA -0xA5CB 0x039B # GREEK CAPITAL LETTER LAMDA -0xA5CC 0x039C # GREEK CAPITAL LETTER MU -0xA5CD 0x039D # GREEK CAPITAL LETTER NU -0xA5CE 0x039E # GREEK CAPITAL LETTER XI -0xA5CF 0x039F # GREEK CAPITAL LETTER OMICRON -0xA5D0 0x03A0 # GREEK CAPITAL LETTER PI -0xA5D1 0x03A1 # GREEK CAPITAL LETTER RHO -0xA5D2 0x03A3 # GREEK CAPITAL LETTER SIGMA -0xA5D3 0x03A4 # GREEK CAPITAL LETTER TAU -0xA5D4 0x03A5 # GREEK CAPITAL LETTER UPSILON -0xA5D5 0x03A6 # GREEK CAPITAL LETTER PHI -0xA5D6 0x03A7 # GREEK CAPITAL LETTER CHI -0xA5D7 0x03A8 # GREEK CAPITAL LETTER PSI -0xA5D8 0x03A9 # GREEK CAPITAL LETTER OMEGA -0xA5E1 0x03B1 # GREEK SMALL LETTER ALPHA -0xA5E2 0x03B2 # GREEK SMALL LETTER BETA -0xA5E3 0x03B3 # GREEK SMALL LETTER GAMMA -0xA5E4 0x03B4 # GREEK SMALL LETTER DELTA -0xA5E5 0x03B5 # GREEK SMALL LETTER EPSILON -0xA5E6 0x03B6 # GREEK SMALL LETTER ZETA -0xA5E7 0x03B7 # GREEK SMALL LETTER ETA -0xA5E8 0x03B8 # GREEK SMALL LETTER THETA -0xA5E9 0x03B9 # GREEK SMALL LETTER IOTA -0xA5EA 0x03BA # GREEK SMALL LETTER KAPPA -0xA5EB 0x03BB # GREEK SMALL LETTER LAMDA -0xA5EC 0x03BC # GREEK SMALL LETTER MU -0xA5ED 0x03BD # GREEK SMALL LETTER NU -0xA5EE 0x03BE # GREEK SMALL LETTER XI -0xA5EF 0x03BF # GREEK SMALL LETTER OMICRON -0xA5F0 0x03C0 # GREEK SMALL LETTER PI -0xA5F1 0x03C1 # GREEK SMALL LETTER RHO -0xA5F2 0x03C3 # GREEK SMALL LETTER SIGMA -0xA5F3 0x03C4 # GREEK SMALL LETTER TAU -0xA5F4 0x03C5 # GREEK SMALL LETTER UPSILON -0xA5F5 0x03C6 # GREEK SMALL LETTER PHI -0xA5F6 0x03C7 # GREEK SMALL LETTER CHI -0xA5F7 0x03C8 # GREEK SMALL LETTER PSI -0xA5F8 0x03C9 # GREEK SMALL LETTER OMEGA -0xA641 0xCAA8 # HANGUL SYLLABLE SSANGCIEUC-YE-RIEUL -0xA642 0xCAA9 # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULKIYEOK -0xA643 0xCAAA # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULMIEUM -0xA644 0xCAAB # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULPIEUP -0xA645 0xCAAC # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULSIOS -0xA646 0xCAAD # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULTHIEUTH -0xA647 0xCAAE # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULPHIEUPH -0xA648 0xCAAF # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULHIEUH -0xA649 0xCAB0 # HANGUL SYLLABLE SSANGCIEUC-YE-MIEUM -0xA64A 0xCAB1 # HANGUL SYLLABLE SSANGCIEUC-YE-PIEUP -0xA64B 0xCAB2 # HANGUL SYLLABLE SSANGCIEUC-YE-PIEUPSIOS -0xA64C 0xCAB3 # HANGUL SYLLABLE SSANGCIEUC-YE-SIOS -0xA64D 0xCAB4 # HANGUL SYLLABLE SSANGCIEUC-YE-SSANGSIOS -0xA64E 0xCAB5 # HANGUL SYLLABLE SSANGCIEUC-YE-IEUNG -0xA64F 0xCAB6 # HANGUL SYLLABLE SSANGCIEUC-YE-CIEUC -0xA650 0xCAB7 # HANGUL SYLLABLE SSANGCIEUC-YE-CHIEUCH -0xA651 0xCAB8 # HANGUL SYLLABLE SSANGCIEUC-YE-KHIEUKH -0xA652 0xCAB9 # HANGUL SYLLABLE SSANGCIEUC-YE-THIEUTH -0xA653 0xCABA # HANGUL SYLLABLE SSANGCIEUC-YE-PHIEUPH -0xA654 0xCABB # HANGUL SYLLABLE SSANGCIEUC-YE-HIEUH -0xA655 0xCABE # HANGUL SYLLABLE SSANGCIEUC-O-SSANGKIYEOK -0xA656 0xCABF # HANGUL SYLLABLE SSANGCIEUC-O-KIYEOKSIOS -0xA657 0xCAC1 # HANGUL SYLLABLE SSANGCIEUC-O-NIEUNCIEUC -0xA658 0xCAC2 # HANGUL SYLLABLE SSANGCIEUC-O-NIEUNHIEUH -0xA659 0xCAC3 # HANGUL SYLLABLE SSANGCIEUC-O-TIKEUT -0xA65A 0xCAC5 # HANGUL SYLLABLE SSANGCIEUC-O-RIEULKIYEOK -0xA661 0xCAC6 # HANGUL SYLLABLE SSANGCIEUC-O-RIEULMIEUM -0xA662 0xCAC7 # HANGUL SYLLABLE SSANGCIEUC-O-RIEULPIEUP -0xA663 0xCAC8 # HANGUL SYLLABLE SSANGCIEUC-O-RIEULSIOS -0xA664 0xCAC9 # HANGUL SYLLABLE SSANGCIEUC-O-RIEULTHIEUTH -0xA665 0xCACA # HANGUL SYLLABLE SSANGCIEUC-O-RIEULPHIEUPH -0xA666 0xCACB # HANGUL SYLLABLE SSANGCIEUC-O-RIEULHIEUH -0xA667 0xCACE # HANGUL SYLLABLE SSANGCIEUC-O-PIEUPSIOS -0xA668 0xCAD0 # HANGUL SYLLABLE SSANGCIEUC-O-SSANGSIOS -0xA669 0xCAD2 # HANGUL SYLLABLE SSANGCIEUC-O-CIEUC -0xA66A 0xCAD4 # HANGUL SYLLABLE SSANGCIEUC-O-KHIEUKH -0xA66B 0xCAD5 # HANGUL SYLLABLE SSANGCIEUC-O-THIEUTH -0xA66C 0xCAD6 # HANGUL SYLLABLE SSANGCIEUC-O-PHIEUPH -0xA66D 0xCAD7 # HANGUL SYLLABLE SSANGCIEUC-O-HIEUH -0xA66E 0xCADA # HANGUL SYLLABLE SSANGCIEUC-WA-SSANGKIYEOK -0xA66F 0xCADB # HANGUL SYLLABLE SSANGCIEUC-WA-KIYEOKSIOS -0xA670 0xCADC # HANGUL SYLLABLE SSANGCIEUC-WA-NIEUN -0xA671 0xCADD # HANGUL SYLLABLE SSANGCIEUC-WA-NIEUNCIEUC -0xA672 0xCADE # HANGUL SYLLABLE SSANGCIEUC-WA-NIEUNHIEUH -0xA673 0xCADF # HANGUL SYLLABLE SSANGCIEUC-WA-TIKEUT -0xA674 0xCAE1 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULKIYEOK -0xA675 0xCAE2 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULMIEUM -0xA676 0xCAE3 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULPIEUP -0xA677 0xCAE4 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULSIOS -0xA678 0xCAE5 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULTHIEUTH -0xA679 0xCAE6 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULPHIEUPH -0xA67A 0xCAE7 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULHIEUH -0xA681 0xCAE8 # HANGUL SYLLABLE SSANGCIEUC-WA-MIEUM -0xA682 0xCAE9 # HANGUL SYLLABLE SSANGCIEUC-WA-PIEUP -0xA683 0xCAEA # HANGUL SYLLABLE SSANGCIEUC-WA-PIEUPSIOS -0xA684 0xCAEB # HANGUL SYLLABLE SSANGCIEUC-WA-SIOS -0xA685 0xCAED # HANGUL SYLLABLE SSANGCIEUC-WA-IEUNG -0xA686 0xCAEE # HANGUL SYLLABLE SSANGCIEUC-WA-CIEUC -0xA687 0xCAEF # HANGUL SYLLABLE SSANGCIEUC-WA-CHIEUCH -0xA688 0xCAF0 # HANGUL SYLLABLE SSANGCIEUC-WA-KHIEUKH -0xA689 0xCAF1 # HANGUL SYLLABLE SSANGCIEUC-WA-THIEUTH -0xA68A 0xCAF2 # HANGUL SYLLABLE SSANGCIEUC-WA-PHIEUPH -0xA68B 0xCAF3 # HANGUL SYLLABLE SSANGCIEUC-WA-HIEUH -0xA68C 0xCAF5 # HANGUL SYLLABLE SSANGCIEUC-WAE-KIYEOK -0xA68D 0xCAF6 # HANGUL SYLLABLE SSANGCIEUC-WAE-SSANGKIYEOK -0xA68E 0xCAF7 # HANGUL SYLLABLE SSANGCIEUC-WAE-KIYEOKSIOS -0xA68F 0xCAF8 # HANGUL SYLLABLE SSANGCIEUC-WAE-NIEUN -0xA690 0xCAF9 # HANGUL SYLLABLE SSANGCIEUC-WAE-NIEUNCIEUC -0xA691 0xCAFA # HANGUL SYLLABLE SSANGCIEUC-WAE-NIEUNHIEUH -0xA692 0xCAFB # HANGUL SYLLABLE SSANGCIEUC-WAE-TIKEUT -0xA693 0xCAFC # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEUL -0xA694 0xCAFD # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULKIYEOK -0xA695 0xCAFE # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULMIEUM -0xA696 0xCAFF # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULPIEUP -0xA697 0xCB00 # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULSIOS -0xA698 0xCB01 # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULTHIEUTH -0xA699 0xCB02 # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULPHIEUPH -0xA69A 0xCB03 # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULHIEUH -0xA69B 0xCB04 # HANGUL SYLLABLE SSANGCIEUC-WAE-MIEUM -0xA69C 0xCB05 # HANGUL SYLLABLE SSANGCIEUC-WAE-PIEUP -0xA69D 0xCB06 # HANGUL SYLLABLE SSANGCIEUC-WAE-PIEUPSIOS -0xA69E 0xCB07 # HANGUL SYLLABLE SSANGCIEUC-WAE-SIOS -0xA69F 0xCB09 # HANGUL SYLLABLE SSANGCIEUC-WAE-IEUNG -0xA6A0 0xCB0A # HANGUL SYLLABLE SSANGCIEUC-WAE-CIEUC -0xA6A1 0x2500 # BOX DRAWINGS LIGHT HORIZONTAL -0xA6A2 0x2502 # BOX DRAWINGS LIGHT VERTICAL -0xA6A3 0x250C # BOX DRAWINGS LIGHT DOWN AND RIGHT -0xA6A4 0x2510 # BOX DRAWINGS LIGHT DOWN AND LEFT -0xA6A5 0x2518 # BOX DRAWINGS LIGHT UP AND LEFT -0xA6A6 0x2514 # BOX DRAWINGS LIGHT UP AND RIGHT -0xA6A7 0x251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT -0xA6A8 0x252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL -0xA6A9 0x2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT -0xA6AA 0x2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL -0xA6AB 0x253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL -0xA6AC 0x2501 # BOX DRAWINGS HEAVY HORIZONTAL -0xA6AD 0x2503 # BOX DRAWINGS HEAVY VERTICAL -0xA6AE 0x250F # BOX DRAWINGS HEAVY DOWN AND RIGHT -0xA6AF 0x2513 # BOX DRAWINGS HEAVY DOWN AND LEFT -0xA6B0 0x251B # BOX DRAWINGS HEAVY UP AND LEFT -0xA6B1 0x2517 # BOX DRAWINGS HEAVY UP AND RIGHT -0xA6B2 0x2523 # BOX DRAWINGS HEAVY VERTICAL AND RIGHT -0xA6B3 0x2533 # BOX DRAWINGS HEAVY DOWN AND HORIZONTAL -0xA6B4 0x252B # BOX DRAWINGS HEAVY VERTICAL AND LEFT -0xA6B5 0x253B # BOX DRAWINGS HEAVY UP AND HORIZONTAL -0xA6B6 0x254B # BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL -0xA6B7 0x2520 # BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT -0xA6B8 0x252F # BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY -0xA6B9 0x2528 # BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT -0xA6BA 0x2537 # BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY -0xA6BB 0x253F # BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY -0xA6BC 0x251D # BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY -0xA6BD 0x2530 # BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT -0xA6BE 0x2525 # BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY -0xA6BF 0x2538 # BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT -0xA6C0 0x2542 # BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT -0xA6C1 0x2512 # BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT -0xA6C2 0x2511 # BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY -0xA6C3 0x251A # BOX DRAWINGS UP HEAVY AND LEFT LIGHT -0xA6C4 0x2519 # BOX DRAWINGS UP LIGHT AND LEFT HEAVY -0xA6C5 0x2516 # BOX DRAWINGS UP HEAVY AND RIGHT LIGHT -0xA6C6 0x2515 # BOX DRAWINGS UP LIGHT AND RIGHT HEAVY -0xA6C7 0x250E # BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT -0xA6C8 0x250D # BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY -0xA6C9 0x251E # BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT -0xA6CA 0x251F # BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT -0xA6CB 0x2521 # BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY -0xA6CC 0x2522 # BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY -0xA6CD 0x2526 # BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT -0xA6CE 0x2527 # BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT -0xA6CF 0x2529 # BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY -0xA6D0 0x252A # BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY -0xA6D1 0x252D # BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT -0xA6D2 0x252E # BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT -0xA6D3 0x2531 # BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY -0xA6D4 0x2532 # BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY -0xA6D5 0x2535 # BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT -0xA6D6 0x2536 # BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT -0xA6D7 0x2539 # BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY -0xA6D8 0x253A # BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY -0xA6D9 0x253D # BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT -0xA6DA 0x253E # BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT -0xA6DB 0x2540 # BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT -0xA6DC 0x2541 # BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT -0xA6DD 0x2543 # BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT -0xA6DE 0x2544 # BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT -0xA6DF 0x2545 # BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT -0xA6E0 0x2546 # BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT -0xA6E1 0x2547 # BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY -0xA6E2 0x2548 # BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY -0xA6E3 0x2549 # BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY -0xA6E4 0x254A # BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY -0xA741 0xCB0B # HANGUL SYLLABLE SSANGCIEUC-WAE-CHIEUCH -0xA742 0xCB0C # HANGUL SYLLABLE SSANGCIEUC-WAE-KHIEUKH -0xA743 0xCB0D # HANGUL SYLLABLE SSANGCIEUC-WAE-THIEUTH -0xA744 0xCB0E # HANGUL SYLLABLE SSANGCIEUC-WAE-PHIEUPH -0xA745 0xCB0F # HANGUL SYLLABLE SSANGCIEUC-WAE-HIEUH -0xA746 0xCB11 # HANGUL SYLLABLE SSANGCIEUC-OE-KIYEOK -0xA747 0xCB12 # HANGUL SYLLABLE SSANGCIEUC-OE-SSANGKIYEOK -0xA748 0xCB13 # HANGUL SYLLABLE SSANGCIEUC-OE-KIYEOKSIOS -0xA749 0xCB15 # HANGUL SYLLABLE SSANGCIEUC-OE-NIEUNCIEUC -0xA74A 0xCB16 # HANGUL SYLLABLE SSANGCIEUC-OE-NIEUNHIEUH -0xA74B 0xCB17 # HANGUL SYLLABLE SSANGCIEUC-OE-TIKEUT -0xA74C 0xCB19 # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULKIYEOK -0xA74D 0xCB1A # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULMIEUM -0xA74E 0xCB1B # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULPIEUP -0xA74F 0xCB1C # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULSIOS -0xA750 0xCB1D # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULTHIEUTH -0xA751 0xCB1E # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULPHIEUPH -0xA752 0xCB1F # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULHIEUH -0xA753 0xCB22 # HANGUL SYLLABLE SSANGCIEUC-OE-PIEUPSIOS -0xA754 0xCB23 # HANGUL SYLLABLE SSANGCIEUC-OE-SIOS -0xA755 0xCB24 # HANGUL SYLLABLE SSANGCIEUC-OE-SSANGSIOS -0xA756 0xCB25 # HANGUL SYLLABLE SSANGCIEUC-OE-IEUNG -0xA757 0xCB26 # HANGUL SYLLABLE SSANGCIEUC-OE-CIEUC -0xA758 0xCB27 # HANGUL SYLLABLE SSANGCIEUC-OE-CHIEUCH -0xA759 0xCB28 # HANGUL SYLLABLE SSANGCIEUC-OE-KHIEUKH -0xA75A 0xCB29 # HANGUL SYLLABLE SSANGCIEUC-OE-THIEUTH -0xA761 0xCB2A # HANGUL SYLLABLE SSANGCIEUC-OE-PHIEUPH -0xA762 0xCB2B # HANGUL SYLLABLE SSANGCIEUC-OE-HIEUH -0xA763 0xCB2C # HANGUL SYLLABLE SSANGCIEUC-YO -0xA764 0xCB2D # HANGUL SYLLABLE SSANGCIEUC-YO-KIYEOK -0xA765 0xCB2E # HANGUL SYLLABLE SSANGCIEUC-YO-SSANGKIYEOK -0xA766 0xCB2F # HANGUL SYLLABLE SSANGCIEUC-YO-KIYEOKSIOS -0xA767 0xCB30 # HANGUL SYLLABLE SSANGCIEUC-YO-NIEUN -0xA768 0xCB31 # HANGUL SYLLABLE SSANGCIEUC-YO-NIEUNCIEUC -0xA769 0xCB32 # HANGUL SYLLABLE SSANGCIEUC-YO-NIEUNHIEUH -0xA76A 0xCB33 # HANGUL SYLLABLE SSANGCIEUC-YO-TIKEUT -0xA76B 0xCB34 # HANGUL SYLLABLE SSANGCIEUC-YO-RIEUL -0xA76C 0xCB35 # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULKIYEOK -0xA76D 0xCB36 # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULMIEUM -0xA76E 0xCB37 # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULPIEUP -0xA76F 0xCB38 # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULSIOS -0xA770 0xCB39 # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULTHIEUTH -0xA771 0xCB3A # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULPHIEUPH -0xA772 0xCB3B # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULHIEUH -0xA773 0xCB3C # HANGUL SYLLABLE SSANGCIEUC-YO-MIEUM -0xA774 0xCB3D # HANGUL SYLLABLE SSANGCIEUC-YO-PIEUP -0xA775 0xCB3E # HANGUL SYLLABLE SSANGCIEUC-YO-PIEUPSIOS -0xA776 0xCB3F # HANGUL SYLLABLE SSANGCIEUC-YO-SIOS -0xA777 0xCB40 # HANGUL SYLLABLE SSANGCIEUC-YO-SSANGSIOS -0xA778 0xCB42 # HANGUL SYLLABLE SSANGCIEUC-YO-CIEUC -0xA779 0xCB43 # HANGUL SYLLABLE SSANGCIEUC-YO-CHIEUCH -0xA77A 0xCB44 # HANGUL SYLLABLE SSANGCIEUC-YO-KHIEUKH -0xA781 0xCB45 # HANGUL SYLLABLE SSANGCIEUC-YO-THIEUTH -0xA782 0xCB46 # HANGUL SYLLABLE SSANGCIEUC-YO-PHIEUPH -0xA783 0xCB47 # HANGUL SYLLABLE SSANGCIEUC-YO-HIEUH -0xA784 0xCB4A # HANGUL SYLLABLE SSANGCIEUC-U-SSANGKIYEOK -0xA785 0xCB4B # HANGUL SYLLABLE SSANGCIEUC-U-KIYEOKSIOS -0xA786 0xCB4D # HANGUL SYLLABLE SSANGCIEUC-U-NIEUNCIEUC -0xA787 0xCB4E # HANGUL SYLLABLE SSANGCIEUC-U-NIEUNHIEUH -0xA788 0xCB4F # HANGUL SYLLABLE SSANGCIEUC-U-TIKEUT -0xA789 0xCB51 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULKIYEOK -0xA78A 0xCB52 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULMIEUM -0xA78B 0xCB53 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULPIEUP -0xA78C 0xCB54 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULSIOS -0xA78D 0xCB55 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULTHIEUTH -0xA78E 0xCB56 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULPHIEUPH -0xA78F 0xCB57 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULHIEUH -0xA790 0xCB5A # HANGUL SYLLABLE SSANGCIEUC-U-PIEUPSIOS -0xA791 0xCB5B # HANGUL SYLLABLE SSANGCIEUC-U-SIOS -0xA792 0xCB5C # HANGUL SYLLABLE SSANGCIEUC-U-SSANGSIOS -0xA793 0xCB5E # HANGUL SYLLABLE SSANGCIEUC-U-CIEUC -0xA794 0xCB5F # HANGUL SYLLABLE SSANGCIEUC-U-CHIEUCH -0xA795 0xCB60 # HANGUL SYLLABLE SSANGCIEUC-U-KHIEUKH -0xA796 0xCB61 # HANGUL SYLLABLE SSANGCIEUC-U-THIEUTH -0xA797 0xCB62 # HANGUL SYLLABLE SSANGCIEUC-U-PHIEUPH -0xA798 0xCB63 # HANGUL SYLLABLE SSANGCIEUC-U-HIEUH -0xA799 0xCB65 # HANGUL SYLLABLE SSANGCIEUC-WEO-KIYEOK -0xA79A 0xCB66 # HANGUL SYLLABLE SSANGCIEUC-WEO-SSANGKIYEOK -0xA79B 0xCB67 # HANGUL SYLLABLE SSANGCIEUC-WEO-KIYEOKSIOS -0xA79C 0xCB68 # HANGUL SYLLABLE SSANGCIEUC-WEO-NIEUN -0xA79D 0xCB69 # HANGUL SYLLABLE SSANGCIEUC-WEO-NIEUNCIEUC -0xA79E 0xCB6A # HANGUL SYLLABLE SSANGCIEUC-WEO-NIEUNHIEUH -0xA79F 0xCB6B # HANGUL SYLLABLE SSANGCIEUC-WEO-TIKEUT -0xA7A0 0xCB6C # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEUL -0xA7A1 0x3395 # SQUARE MU L -0xA7A2 0x3396 # SQUARE ML -0xA7A3 0x3397 # SQUARE DL -0xA7A4 0x2113 # SCRIPT SMALL L -0xA7A5 0x3398 # SQUARE KL -0xA7A6 0x33C4 # SQUARE CC -0xA7A7 0x33A3 # SQUARE MM CUBED -0xA7A8 0x33A4 # SQUARE CM CUBED -0xA7A9 0x33A5 # SQUARE M CUBED -0xA7AA 0x33A6 # SQUARE KM CUBED -0xA7AB 0x3399 # SQUARE FM -0xA7AC 0x339A # SQUARE NM -0xA7AD 0x339B # SQUARE MU M -0xA7AE 0x339C # SQUARE MM -0xA7AF 0x339D # SQUARE CM -0xA7B0 0x339E # SQUARE KM -0xA7B1 0x339F # SQUARE MM SQUARED -0xA7B2 0x33A0 # SQUARE CM SQUARED -0xA7B3 0x33A1 # SQUARE M SQUARED -0xA7B4 0x33A2 # SQUARE KM SQUARED -0xA7B5 0x33CA # SQUARE HA -0xA7B6 0x338D # SQUARE MU G -0xA7B7 0x338E # SQUARE MG -0xA7B8 0x338F # SQUARE KG -0xA7B9 0x33CF # SQUARE KT -0xA7BA 0x3388 # SQUARE CAL -0xA7BB 0x3389 # SQUARE KCAL -0xA7BC 0x33C8 # SQUARE DB -0xA7BD 0x33A7 # SQUARE M OVER S -0xA7BE 0x33A8 # SQUARE M OVER S SQUARED -0xA7BF 0x33B0 # SQUARE PS -0xA7C0 0x33B1 # SQUARE NS -0xA7C1 0x33B2 # SQUARE MU S -0xA7C2 0x33B3 # SQUARE MS -0xA7C3 0x33B4 # SQUARE PV -0xA7C4 0x33B5 # SQUARE NV -0xA7C5 0x33B6 # SQUARE MU V -0xA7C6 0x33B7 # SQUARE MV -0xA7C7 0x33B8 # SQUARE KV -0xA7C8 0x33B9 # SQUARE MV MEGA -0xA7C9 0x3380 # SQUARE PA AMPS -0xA7CA 0x3381 # SQUARE NA -0xA7CB 0x3382 # SQUARE MU A -0xA7CC 0x3383 # SQUARE MA -0xA7CD 0x3384 # SQUARE KA -0xA7CE 0x33BA # SQUARE PW -0xA7CF 0x33BB # SQUARE NW -0xA7D0 0x33BC # SQUARE MU W -0xA7D1 0x33BD # SQUARE MW -0xA7D2 0x33BE # SQUARE KW -0xA7D3 0x33BF # SQUARE MW MEGA -0xA7D4 0x3390 # SQUARE HZ -0xA7D5 0x3391 # SQUARE KHZ -0xA7D6 0x3392 # SQUARE MHZ -0xA7D7 0x3393 # SQUARE GHZ -0xA7D8 0x3394 # SQUARE THZ -0xA7D9 0x2126 # OHM SIGN -0xA7DA 0x33C0 # SQUARE K OHM -0xA7DB 0x33C1 # SQUARE M OHM -0xA7DC 0x338A # SQUARE PF -0xA7DD 0x338B # SQUARE NF -0xA7DE 0x338C # SQUARE MU F -0xA7DF 0x33D6 # SQUARE MOL -0xA7E0 0x33C5 # SQUARE CD -0xA7E1 0x33AD # SQUARE RAD -0xA7E2 0x33AE # SQUARE RAD OVER S -0xA7E3 0x33AF # SQUARE RAD OVER S SQUARED -0xA7E4 0x33DB # SQUARE SR -0xA7E5 0x33A9 # SQUARE PA -0xA7E6 0x33AA # SQUARE KPA -0xA7E7 0x33AB # SQUARE MPA -0xA7E8 0x33AC # SQUARE GPA -0xA7E9 0x33DD # SQUARE WB -0xA7EA 0x33D0 # SQUARE LM -0xA7EB 0x33D3 # SQUARE LX -0xA7EC 0x33C3 # SQUARE BQ -0xA7ED 0x33C9 # SQUARE GY -0xA7EE 0x33DC # SQUARE SV -0xA7EF 0x33C6 # SQUARE C OVER KG -0xA841 0xCB6D # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULKIYEOK -0xA842 0xCB6E # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULMIEUM -0xA843 0xCB6F # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULPIEUP -0xA844 0xCB70 # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULSIOS -0xA845 0xCB71 # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULTHIEUTH -0xA846 0xCB72 # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULPHIEUPH -0xA847 0xCB73 # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULHIEUH -0xA848 0xCB74 # HANGUL SYLLABLE SSANGCIEUC-WEO-MIEUM -0xA849 0xCB75 # HANGUL SYLLABLE SSANGCIEUC-WEO-PIEUP -0xA84A 0xCB76 # HANGUL SYLLABLE SSANGCIEUC-WEO-PIEUPSIOS -0xA84B 0xCB77 # HANGUL SYLLABLE SSANGCIEUC-WEO-SIOS -0xA84C 0xCB7A # HANGUL SYLLABLE SSANGCIEUC-WEO-CIEUC -0xA84D 0xCB7B # HANGUL SYLLABLE SSANGCIEUC-WEO-CHIEUCH -0xA84E 0xCB7C # HANGUL SYLLABLE SSANGCIEUC-WEO-KHIEUKH -0xA84F 0xCB7D # HANGUL SYLLABLE SSANGCIEUC-WEO-THIEUTH -0xA850 0xCB7E # HANGUL SYLLABLE SSANGCIEUC-WEO-PHIEUPH -0xA851 0xCB7F # HANGUL SYLLABLE SSANGCIEUC-WEO-HIEUH -0xA852 0xCB80 # HANGUL SYLLABLE SSANGCIEUC-WE -0xA853 0xCB81 # HANGUL SYLLABLE SSANGCIEUC-WE-KIYEOK -0xA854 0xCB82 # HANGUL SYLLABLE SSANGCIEUC-WE-SSANGKIYEOK -0xA855 0xCB83 # HANGUL SYLLABLE SSANGCIEUC-WE-KIYEOKSIOS -0xA856 0xCB84 # HANGUL SYLLABLE SSANGCIEUC-WE-NIEUN -0xA857 0xCB85 # HANGUL SYLLABLE SSANGCIEUC-WE-NIEUNCIEUC -0xA858 0xCB86 # HANGUL SYLLABLE SSANGCIEUC-WE-NIEUNHIEUH -0xA859 0xCB87 # HANGUL SYLLABLE SSANGCIEUC-WE-TIKEUT -0xA85A 0xCB88 # HANGUL SYLLABLE SSANGCIEUC-WE-RIEUL -0xA861 0xCB89 # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULKIYEOK -0xA862 0xCB8A # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULMIEUM -0xA863 0xCB8B # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULPIEUP -0xA864 0xCB8C # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULSIOS -0xA865 0xCB8D # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULTHIEUTH -0xA866 0xCB8E # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULPHIEUPH -0xA867 0xCB8F # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULHIEUH -0xA868 0xCB90 # HANGUL SYLLABLE SSANGCIEUC-WE-MIEUM -0xA869 0xCB91 # HANGUL SYLLABLE SSANGCIEUC-WE-PIEUP -0xA86A 0xCB92 # HANGUL SYLLABLE SSANGCIEUC-WE-PIEUPSIOS -0xA86B 0xCB93 # HANGUL SYLLABLE SSANGCIEUC-WE-SIOS -0xA86C 0xCB94 # HANGUL SYLLABLE SSANGCIEUC-WE-SSANGSIOS -0xA86D 0xCB95 # HANGUL SYLLABLE SSANGCIEUC-WE-IEUNG -0xA86E 0xCB96 # HANGUL SYLLABLE SSANGCIEUC-WE-CIEUC -0xA86F 0xCB97 # HANGUL SYLLABLE SSANGCIEUC-WE-CHIEUCH -0xA870 0xCB98 # HANGUL SYLLABLE SSANGCIEUC-WE-KHIEUKH -0xA871 0xCB99 # HANGUL SYLLABLE SSANGCIEUC-WE-THIEUTH -0xA872 0xCB9A # HANGUL SYLLABLE SSANGCIEUC-WE-PHIEUPH -0xA873 0xCB9B # HANGUL SYLLABLE SSANGCIEUC-WE-HIEUH -0xA874 0xCB9D # HANGUL SYLLABLE SSANGCIEUC-WI-KIYEOK -0xA875 0xCB9E # HANGUL SYLLABLE SSANGCIEUC-WI-SSANGKIYEOK -0xA876 0xCB9F # HANGUL SYLLABLE SSANGCIEUC-WI-KIYEOKSIOS -0xA877 0xCBA0 # HANGUL SYLLABLE SSANGCIEUC-WI-NIEUN -0xA878 0xCBA1 # HANGUL SYLLABLE SSANGCIEUC-WI-NIEUNCIEUC -0xA879 0xCBA2 # HANGUL SYLLABLE SSANGCIEUC-WI-NIEUNHIEUH -0xA87A 0xCBA3 # HANGUL SYLLABLE SSANGCIEUC-WI-TIKEUT -0xA881 0xCBA4 # HANGUL SYLLABLE SSANGCIEUC-WI-RIEUL -0xA882 0xCBA5 # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULKIYEOK -0xA883 0xCBA6 # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULMIEUM -0xA884 0xCBA7 # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULPIEUP -0xA885 0xCBA8 # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULSIOS -0xA886 0xCBA9 # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULTHIEUTH -0xA887 0xCBAA # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULPHIEUPH -0xA888 0xCBAB # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULHIEUH -0xA889 0xCBAC # HANGUL SYLLABLE SSANGCIEUC-WI-MIEUM -0xA88A 0xCBAD # HANGUL SYLLABLE SSANGCIEUC-WI-PIEUP -0xA88B 0xCBAE # HANGUL SYLLABLE SSANGCIEUC-WI-PIEUPSIOS -0xA88C 0xCBAF # HANGUL SYLLABLE SSANGCIEUC-WI-SIOS -0xA88D 0xCBB0 # HANGUL SYLLABLE SSANGCIEUC-WI-SSANGSIOS -0xA88E 0xCBB1 # HANGUL SYLLABLE SSANGCIEUC-WI-IEUNG -0xA88F 0xCBB2 # HANGUL SYLLABLE SSANGCIEUC-WI-CIEUC -0xA890 0xCBB3 # HANGUL SYLLABLE SSANGCIEUC-WI-CHIEUCH -0xA891 0xCBB4 # HANGUL SYLLABLE SSANGCIEUC-WI-KHIEUKH -0xA892 0xCBB5 # HANGUL SYLLABLE SSANGCIEUC-WI-THIEUTH -0xA893 0xCBB6 # HANGUL SYLLABLE SSANGCIEUC-WI-PHIEUPH -0xA894 0xCBB7 # HANGUL SYLLABLE SSANGCIEUC-WI-HIEUH -0xA895 0xCBB9 # HANGUL SYLLABLE SSANGCIEUC-YU-KIYEOK -0xA896 0xCBBA # HANGUL SYLLABLE SSANGCIEUC-YU-SSANGKIYEOK -0xA897 0xCBBB # HANGUL SYLLABLE SSANGCIEUC-YU-KIYEOKSIOS -0xA898 0xCBBC # HANGUL SYLLABLE SSANGCIEUC-YU-NIEUN -0xA899 0xCBBD # HANGUL SYLLABLE SSANGCIEUC-YU-NIEUNCIEUC -0xA89A 0xCBBE # HANGUL SYLLABLE SSANGCIEUC-YU-NIEUNHIEUH -0xA89B 0xCBBF # HANGUL SYLLABLE SSANGCIEUC-YU-TIKEUT -0xA89C 0xCBC0 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEUL -0xA89D 0xCBC1 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULKIYEOK -0xA89E 0xCBC2 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULMIEUM -0xA89F 0xCBC3 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULPIEUP -0xA8A0 0xCBC4 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULSIOS -0xA8A1 0x00C6 # LATIN CAPITAL LIGATURE AE -0xA8A2 0x00D0 # LATIN CAPITAL LETTER ETH -0xA8A3 0x00AA # FEMININE ORDINAL INDICATOR -0xA8A4 0x0126 # LATIN CAPITAL LETTER H WITH STROKE -0xA8A6 0x0132 # LATIN CAPITAL LIGATURE IJ -0xA8A8 0x013F # LATIN CAPITAL LETTER L WITH MIDDLE DOT -0xA8A9 0x0141 # LATIN CAPITAL LETTER L WITH STROKE -0xA8AA 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE -0xA8AB 0x0152 # LATIN CAPITAL LIGATURE OE -0xA8AC 0x00BA # MASCULINE ORDINAL INDICATOR -0xA8AD 0x00DE # LATIN CAPITAL LETTER THORN -0xA8AE 0x0166 # LATIN CAPITAL LETTER T WITH STROKE -0xA8AF 0x014A # LATIN CAPITAL LETTER ENG -0xA8B1 0x3260 # CIRCLED HANGUL KIYEOK -0xA8B2 0x3261 # CIRCLED HANGUL NIEUN -0xA8B3 0x3262 # CIRCLED HANGUL TIKEUT -0xA8B4 0x3263 # CIRCLED HANGUL RIEUL -0xA8B5 0x3264 # CIRCLED HANGUL MIEUM -0xA8B6 0x3265 # CIRCLED HANGUL PIEUP -0xA8B7 0x3266 # CIRCLED HANGUL SIOS -0xA8B8 0x3267 # CIRCLED HANGUL IEUNG -0xA8B9 0x3268 # CIRCLED HANGUL CIEUC -0xA8BA 0x3269 # CIRCLED HANGUL CHIEUCH -0xA8BB 0x326A # CIRCLED HANGUL KHIEUKH -0xA8BC 0x326B # CIRCLED HANGUL THIEUTH -0xA8BD 0x326C # CIRCLED HANGUL PHIEUPH -0xA8BE 0x326D # CIRCLED HANGUL HIEUH -0xA8BF 0x326E # CIRCLED HANGUL KIYEOK A -0xA8C0 0x326F # CIRCLED HANGUL NIEUN A -0xA8C1 0x3270 # CIRCLED HANGUL TIKEUT A -0xA8C2 0x3271 # CIRCLED HANGUL RIEUL A -0xA8C3 0x3272 # CIRCLED HANGUL MIEUM A -0xA8C4 0x3273 # CIRCLED HANGUL PIEUP A -0xA8C5 0x3274 # CIRCLED HANGUL SIOS A -0xA8C6 0x3275 # CIRCLED HANGUL IEUNG A -0xA8C7 0x3276 # CIRCLED HANGUL CIEUC A -0xA8C8 0x3277 # CIRCLED HANGUL CHIEUCH A -0xA8C9 0x3278 # CIRCLED HANGUL KHIEUKH A -0xA8CA 0x3279 # CIRCLED HANGUL THIEUTH A -0xA8CB 0x327A # CIRCLED HANGUL PHIEUPH A -0xA8CC 0x327B # CIRCLED HANGUL HIEUH A -0xA8CD 0x24D0 # CIRCLED LATIN SMALL LETTER A -0xA8CE 0x24D1 # CIRCLED LATIN SMALL LETTER B -0xA8CF 0x24D2 # CIRCLED LATIN SMALL LETTER C -0xA8D0 0x24D3 # CIRCLED LATIN SMALL LETTER D -0xA8D1 0x24D4 # CIRCLED LATIN SMALL LETTER E -0xA8D2 0x24D5 # CIRCLED LATIN SMALL LETTER F -0xA8D3 0x24D6 # CIRCLED LATIN SMALL LETTER G -0xA8D4 0x24D7 # CIRCLED LATIN SMALL LETTER H -0xA8D5 0x24D8 # CIRCLED LATIN SMALL LETTER I -0xA8D6 0x24D9 # CIRCLED LATIN SMALL LETTER J -0xA8D7 0x24DA # CIRCLED LATIN SMALL LETTER K -0xA8D8 0x24DB # CIRCLED LATIN SMALL LETTER L -0xA8D9 0x24DC # CIRCLED LATIN SMALL LETTER M -0xA8DA 0x24DD # CIRCLED LATIN SMALL LETTER N -0xA8DB 0x24DE # CIRCLED LATIN SMALL LETTER O -0xA8DC 0x24DF # CIRCLED LATIN SMALL LETTER P -0xA8DD 0x24E0 # CIRCLED LATIN SMALL LETTER Q -0xA8DE 0x24E1 # CIRCLED LATIN SMALL LETTER R -0xA8DF 0x24E2 # CIRCLED LATIN SMALL LETTER S -0xA8E0 0x24E3 # CIRCLED LATIN SMALL LETTER T -0xA8E1 0x24E4 # CIRCLED LATIN SMALL LETTER U -0xA8E2 0x24E5 # CIRCLED LATIN SMALL LETTER V -0xA8E3 0x24E6 # CIRCLED LATIN SMALL LETTER W -0xA8E4 0x24E7 # CIRCLED LATIN SMALL LETTER X -0xA8E5 0x24E8 # CIRCLED LATIN SMALL LETTER Y -0xA8E6 0x24E9 # CIRCLED LATIN SMALL LETTER Z -0xA8E7 0x2460 # CIRCLED DIGIT ONE -0xA8E8 0x2461 # CIRCLED DIGIT TWO -0xA8E9 0x2462 # CIRCLED DIGIT THREE -0xA8EA 0x2463 # CIRCLED DIGIT FOUR -0xA8EB 0x2464 # CIRCLED DIGIT FIVE -0xA8EC 0x2465 # CIRCLED DIGIT SIX -0xA8ED 0x2466 # CIRCLED DIGIT SEVEN -0xA8EE 0x2467 # CIRCLED DIGIT EIGHT -0xA8EF 0x2468 # CIRCLED DIGIT NINE -0xA8F0 0x2469 # CIRCLED NUMBER TEN -0xA8F1 0x246A # CIRCLED NUMBER ELEVEN -0xA8F2 0x246B # CIRCLED NUMBER TWELVE -0xA8F3 0x246C # CIRCLED NUMBER THIRTEEN -0xA8F4 0x246D # CIRCLED NUMBER FOURTEEN -0xA8F5 0x246E # CIRCLED NUMBER FIFTEEN -0xA8F6 0x00BD # VULGAR FRACTION ONE HALF -0xA8F7 0x2153 # VULGAR FRACTION ONE THIRD -0xA8F8 0x2154 # VULGAR FRACTION TWO THIRDS -0xA8F9 0x00BC # VULGAR FRACTION ONE QUARTER -0xA8FA 0x00BE # VULGAR FRACTION THREE QUARTERS -0xA8FB 0x215B # VULGAR FRACTION ONE EIGHTH -0xA8FC 0x215C # VULGAR FRACTION THREE EIGHTHS -0xA8FD 0x215D # VULGAR FRACTION FIVE EIGHTHS -0xA8FE 0x215E # VULGAR FRACTION SEVEN EIGHTHS -0xA941 0xCBC5 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULTHIEUTH -0xA942 0xCBC6 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULPHIEUPH -0xA943 0xCBC7 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULHIEUH -0xA944 0xCBC8 # HANGUL SYLLABLE SSANGCIEUC-YU-MIEUM -0xA945 0xCBC9 # HANGUL SYLLABLE SSANGCIEUC-YU-PIEUP -0xA946 0xCBCA # HANGUL SYLLABLE SSANGCIEUC-YU-PIEUPSIOS -0xA947 0xCBCB # HANGUL SYLLABLE SSANGCIEUC-YU-SIOS -0xA948 0xCBCC # HANGUL SYLLABLE SSANGCIEUC-YU-SSANGSIOS -0xA949 0xCBCD # HANGUL SYLLABLE SSANGCIEUC-YU-IEUNG -0xA94A 0xCBCE # HANGUL SYLLABLE SSANGCIEUC-YU-CIEUC -0xA94B 0xCBCF # HANGUL SYLLABLE SSANGCIEUC-YU-CHIEUCH -0xA94C 0xCBD0 # HANGUL SYLLABLE SSANGCIEUC-YU-KHIEUKH -0xA94D 0xCBD1 # HANGUL SYLLABLE SSANGCIEUC-YU-THIEUTH -0xA94E 0xCBD2 # HANGUL SYLLABLE SSANGCIEUC-YU-PHIEUPH -0xA94F 0xCBD3 # HANGUL SYLLABLE SSANGCIEUC-YU-HIEUH -0xA950 0xCBD5 # HANGUL SYLLABLE SSANGCIEUC-EU-KIYEOK -0xA951 0xCBD6 # HANGUL SYLLABLE SSANGCIEUC-EU-SSANGKIYEOK -0xA952 0xCBD7 # HANGUL SYLLABLE SSANGCIEUC-EU-KIYEOKSIOS -0xA953 0xCBD8 # HANGUL SYLLABLE SSANGCIEUC-EU-NIEUN -0xA954 0xCBD9 # HANGUL SYLLABLE SSANGCIEUC-EU-NIEUNCIEUC -0xA955 0xCBDA # HANGUL SYLLABLE SSANGCIEUC-EU-NIEUNHIEUH -0xA956 0xCBDB # HANGUL SYLLABLE SSANGCIEUC-EU-TIKEUT -0xA957 0xCBDC # HANGUL SYLLABLE SSANGCIEUC-EU-RIEUL -0xA958 0xCBDD # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULKIYEOK -0xA959 0xCBDE # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULMIEUM -0xA95A 0xCBDF # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULPIEUP -0xA961 0xCBE0 # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULSIOS -0xA962 0xCBE1 # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULTHIEUTH -0xA963 0xCBE2 # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULPHIEUPH -0xA964 0xCBE3 # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULHIEUH -0xA965 0xCBE5 # HANGUL SYLLABLE SSANGCIEUC-EU-PIEUP -0xA966 0xCBE6 # HANGUL SYLLABLE SSANGCIEUC-EU-PIEUPSIOS -0xA967 0xCBE8 # HANGUL SYLLABLE SSANGCIEUC-EU-SSANGSIOS -0xA968 0xCBEA # HANGUL SYLLABLE SSANGCIEUC-EU-CIEUC -0xA969 0xCBEB # HANGUL SYLLABLE SSANGCIEUC-EU-CHIEUCH -0xA96A 0xCBEC # HANGUL SYLLABLE SSANGCIEUC-EU-KHIEUKH -0xA96B 0xCBED # HANGUL SYLLABLE SSANGCIEUC-EU-THIEUTH -0xA96C 0xCBEE # HANGUL SYLLABLE SSANGCIEUC-EU-PHIEUPH -0xA96D 0xCBEF # HANGUL SYLLABLE SSANGCIEUC-EU-HIEUH -0xA96E 0xCBF0 # HANGUL SYLLABLE SSANGCIEUC-YI -0xA96F 0xCBF1 # HANGUL SYLLABLE SSANGCIEUC-YI-KIYEOK -0xA970 0xCBF2 # HANGUL SYLLABLE SSANGCIEUC-YI-SSANGKIYEOK -0xA971 0xCBF3 # HANGUL SYLLABLE SSANGCIEUC-YI-KIYEOKSIOS -0xA972 0xCBF4 # HANGUL SYLLABLE SSANGCIEUC-YI-NIEUN -0xA973 0xCBF5 # HANGUL SYLLABLE SSANGCIEUC-YI-NIEUNCIEUC -0xA974 0xCBF6 # HANGUL SYLLABLE SSANGCIEUC-YI-NIEUNHIEUH -0xA975 0xCBF7 # HANGUL SYLLABLE SSANGCIEUC-YI-TIKEUT -0xA976 0xCBF8 # HANGUL SYLLABLE SSANGCIEUC-YI-RIEUL -0xA977 0xCBF9 # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULKIYEOK -0xA978 0xCBFA # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULMIEUM -0xA979 0xCBFB # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULPIEUP -0xA97A 0xCBFC # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULSIOS -0xA981 0xCBFD # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULTHIEUTH -0xA982 0xCBFE # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULPHIEUPH -0xA983 0xCBFF # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULHIEUH -0xA984 0xCC00 # HANGUL SYLLABLE SSANGCIEUC-YI-MIEUM -0xA985 0xCC01 # HANGUL SYLLABLE SSANGCIEUC-YI-PIEUP -0xA986 0xCC02 # HANGUL SYLLABLE SSANGCIEUC-YI-PIEUPSIOS -0xA987 0xCC03 # HANGUL SYLLABLE SSANGCIEUC-YI-SIOS -0xA988 0xCC04 # HANGUL SYLLABLE SSANGCIEUC-YI-SSANGSIOS -0xA989 0xCC05 # HANGUL SYLLABLE SSANGCIEUC-YI-IEUNG -0xA98A 0xCC06 # HANGUL SYLLABLE SSANGCIEUC-YI-CIEUC -0xA98B 0xCC07 # HANGUL SYLLABLE SSANGCIEUC-YI-CHIEUCH -0xA98C 0xCC08 # HANGUL SYLLABLE SSANGCIEUC-YI-KHIEUKH -0xA98D 0xCC09 # HANGUL SYLLABLE SSANGCIEUC-YI-THIEUTH -0xA98E 0xCC0A # HANGUL SYLLABLE SSANGCIEUC-YI-PHIEUPH -0xA98F 0xCC0B # HANGUL SYLLABLE SSANGCIEUC-YI-HIEUH -0xA990 0xCC0E # HANGUL SYLLABLE SSANGCIEUC-I-SSANGKIYEOK -0xA991 0xCC0F # HANGUL SYLLABLE SSANGCIEUC-I-KIYEOKSIOS -0xA992 0xCC11 # HANGUL SYLLABLE SSANGCIEUC-I-NIEUNCIEUC -0xA993 0xCC12 # HANGUL SYLLABLE SSANGCIEUC-I-NIEUNHIEUH -0xA994 0xCC13 # HANGUL SYLLABLE SSANGCIEUC-I-TIKEUT -0xA995 0xCC15 # HANGUL SYLLABLE SSANGCIEUC-I-RIEULKIYEOK -0xA996 0xCC16 # HANGUL SYLLABLE SSANGCIEUC-I-RIEULMIEUM -0xA997 0xCC17 # HANGUL SYLLABLE SSANGCIEUC-I-RIEULPIEUP -0xA998 0xCC18 # HANGUL SYLLABLE SSANGCIEUC-I-RIEULSIOS -0xA999 0xCC19 # HANGUL SYLLABLE SSANGCIEUC-I-RIEULTHIEUTH -0xA99A 0xCC1A # HANGUL SYLLABLE SSANGCIEUC-I-RIEULPHIEUPH -0xA99B 0xCC1B # HANGUL SYLLABLE SSANGCIEUC-I-RIEULHIEUH -0xA99C 0xCC1E # HANGUL SYLLABLE SSANGCIEUC-I-PIEUPSIOS -0xA99D 0xCC1F # HANGUL SYLLABLE SSANGCIEUC-I-SIOS -0xA99E 0xCC20 # HANGUL SYLLABLE SSANGCIEUC-I-SSANGSIOS -0xA99F 0xCC23 # HANGUL SYLLABLE SSANGCIEUC-I-CHIEUCH -0xA9A0 0xCC24 # HANGUL SYLLABLE SSANGCIEUC-I-KHIEUKH -0xA9A1 0x00E6 # LATIN SMALL LIGATURE AE -0xA9A2 0x0111 # LATIN SMALL LETTER D WITH STROKE -0xA9A3 0x00F0 # LATIN SMALL LETTER ETH -0xA9A4 0x0127 # LATIN SMALL LETTER H WITH STROKE -0xA9A5 0x0131 # LATIN SMALL LETTER DOTLESS I -0xA9A6 0x0133 # LATIN SMALL LIGATURE IJ -0xA9A7 0x0138 # LATIN SMALL LETTER KRA -0xA9A8 0x0140 # LATIN SMALL LETTER L WITH MIDDLE DOT -0xA9A9 0x0142 # LATIN SMALL LETTER L WITH STROKE -0xA9AA 0x00F8 # LATIN SMALL LETTER O WITH STROKE -0xA9AB 0x0153 # LATIN SMALL LIGATURE OE -0xA9AC 0x00DF # LATIN SMALL LETTER SHARP S -0xA9AD 0x00FE # LATIN SMALL LETTER THORN -0xA9AE 0x0167 # LATIN SMALL LETTER T WITH STROKE -0xA9AF 0x014B # LATIN SMALL LETTER ENG -0xA9B0 0x0149 # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE -0xA9B1 0x3200 # PARENTHESIZED HANGUL KIYEOK -0xA9B2 0x3201 # PARENTHESIZED HANGUL NIEUN -0xA9B3 0x3202 # PARENTHESIZED HANGUL TIKEUT -0xA9B4 0x3203 # PARENTHESIZED HANGUL RIEUL -0xA9B5 0x3204 # PARENTHESIZED HANGUL MIEUM -0xA9B6 0x3205 # PARENTHESIZED HANGUL PIEUP -0xA9B7 0x3206 # PARENTHESIZED HANGUL SIOS -0xA9B8 0x3207 # PARENTHESIZED HANGUL IEUNG -0xA9B9 0x3208 # PARENTHESIZED HANGUL CIEUC -0xA9BA 0x3209 # PARENTHESIZED HANGUL CHIEUCH -0xA9BB 0x320A # PARENTHESIZED HANGUL KHIEUKH -0xA9BC 0x320B # PARENTHESIZED HANGUL THIEUTH -0xA9BD 0x320C # PARENTHESIZED HANGUL PHIEUPH -0xA9BE 0x320D # PARENTHESIZED HANGUL HIEUH -0xA9BF 0x320E # PARENTHESIZED HANGUL KIYEOK A -0xA9C0 0x320F # PARENTHESIZED HANGUL NIEUN A -0xA9C1 0x3210 # PARENTHESIZED HANGUL TIKEUT A -0xA9C2 0x3211 # PARENTHESIZED HANGUL RIEUL A -0xA9C3 0x3212 # PARENTHESIZED HANGUL MIEUM A -0xA9C4 0x3213 # PARENTHESIZED HANGUL PIEUP A -0xA9C5 0x3214 # PARENTHESIZED HANGUL SIOS A -0xA9C6 0x3215 # PARENTHESIZED HANGUL IEUNG A -0xA9C7 0x3216 # PARENTHESIZED HANGUL CIEUC A -0xA9C8 0x3217 # PARENTHESIZED HANGUL CHIEUCH A -0xA9C9 0x3218 # PARENTHESIZED HANGUL KHIEUKH A -0xA9CA 0x3219 # PARENTHESIZED HANGUL THIEUTH A -0xA9CB 0x321A # PARENTHESIZED HANGUL PHIEUPH A -0xA9CC 0x321B # PARENTHESIZED HANGUL HIEUH A -0xA9CD 0x249C # PARENTHESIZED LATIN SMALL LETTER A -0xA9CE 0x249D # PARENTHESIZED LATIN SMALL LETTER B -0xA9CF 0x249E # PARENTHESIZED LATIN SMALL LETTER C -0xA9D0 0x249F # PARENTHESIZED LATIN SMALL LETTER D -0xA9D1 0x24A0 # PARENTHESIZED LATIN SMALL LETTER E -0xA9D2 0x24A1 # PARENTHESIZED LATIN SMALL LETTER F -0xA9D3 0x24A2 # PARENTHESIZED LATIN SMALL LETTER G -0xA9D4 0x24A3 # PARENTHESIZED LATIN SMALL LETTER H -0xA9D5 0x24A4 # PARENTHESIZED LATIN SMALL LETTER I -0xA9D6 0x24A5 # PARENTHESIZED LATIN SMALL LETTER J -0xA9D7 0x24A6 # PARENTHESIZED LATIN SMALL LETTER K -0xA9D8 0x24A7 # PARENTHESIZED LATIN SMALL LETTER L -0xA9D9 0x24A8 # PARENTHESIZED LATIN SMALL LETTER M -0xA9DA 0x24A9 # PARENTHESIZED LATIN SMALL LETTER N -0xA9DB 0x24AA # PARENTHESIZED LATIN SMALL LETTER O -0xA9DC 0x24AB # PARENTHESIZED LATIN SMALL LETTER P -0xA9DD 0x24AC # PARENTHESIZED LATIN SMALL LETTER Q -0xA9DE 0x24AD # PARENTHESIZED LATIN SMALL LETTER R -0xA9DF 0x24AE # PARENTHESIZED LATIN SMALL LETTER S -0xA9E0 0x24AF # PARENTHESIZED LATIN SMALL LETTER T -0xA9E1 0x24B0 # PARENTHESIZED LATIN SMALL LETTER U -0xA9E2 0x24B1 # PARENTHESIZED LATIN SMALL LETTER V -0xA9E3 0x24B2 # PARENTHESIZED LATIN SMALL LETTER W -0xA9E4 0x24B3 # PARENTHESIZED LATIN SMALL LETTER X -0xA9E5 0x24B4 # PARENTHESIZED LATIN SMALL LETTER Y -0xA9E6 0x24B5 # PARENTHESIZED LATIN SMALL LETTER Z -0xA9E7 0x2474 # PARENTHESIZED DIGIT ONE -0xA9E8 0x2475 # PARENTHESIZED DIGIT TWO -0xA9E9 0x2476 # PARENTHESIZED DIGIT THREE -0xA9EA 0x2477 # PARENTHESIZED DIGIT FOUR -0xA9EB 0x2478 # PARENTHESIZED DIGIT FIVE -0xA9EC 0x2479 # PARENTHESIZED DIGIT SIX -0xA9ED 0x247A # PARENTHESIZED DIGIT SEVEN -0xA9EE 0x247B # PARENTHESIZED DIGIT EIGHT -0xA9EF 0x247C # PARENTHESIZED DIGIT NINE -0xA9F0 0x247D # PARENTHESIZED NUMBER TEN -0xA9F1 0x247E # PARENTHESIZED NUMBER ELEVEN -0xA9F2 0x247F # PARENTHESIZED NUMBER TWELVE -0xA9F3 0x2480 # PARENTHESIZED NUMBER THIRTEEN -0xA9F4 0x2481 # PARENTHESIZED NUMBER FOURTEEN -0xA9F5 0x2482 # PARENTHESIZED NUMBER FIFTEEN -0xA9F6 0x00B9 # SUPERSCRIPT ONE -0xA9F7 0x00B2 # SUPERSCRIPT TWO -0xA9F8 0x00B3 # SUPERSCRIPT THREE -0xA9F9 0x2074 # SUPERSCRIPT FOUR -0xA9FA 0x207F # SUPERSCRIPT LATIN SMALL LETTER N -0xA9FB 0x2081 # SUBSCRIPT ONE -0xA9FC 0x2082 # SUBSCRIPT TWO -0xA9FD 0x2083 # SUBSCRIPT THREE -0xA9FE 0x2084 # SUBSCRIPT FOUR -0xAA41 0xCC25 # HANGUL SYLLABLE SSANGCIEUC-I-THIEUTH -0xAA42 0xCC26 # HANGUL SYLLABLE SSANGCIEUC-I-PHIEUPH -0xAA43 0xCC2A # HANGUL SYLLABLE CHIEUCH-A-SSANGKIYEOK -0xAA44 0xCC2B # HANGUL SYLLABLE CHIEUCH-A-KIYEOKSIOS -0xAA45 0xCC2D # HANGUL SYLLABLE CHIEUCH-A-NIEUNCIEUC -0xAA46 0xCC2F # HANGUL SYLLABLE CHIEUCH-A-TIKEUT -0xAA47 0xCC31 # HANGUL SYLLABLE CHIEUCH-A-RIEULKIYEOK -0xAA48 0xCC32 # HANGUL SYLLABLE CHIEUCH-A-RIEULMIEUM -0xAA49 0xCC33 # HANGUL SYLLABLE CHIEUCH-A-RIEULPIEUP -0xAA4A 0xCC34 # HANGUL SYLLABLE CHIEUCH-A-RIEULSIOS -0xAA4B 0xCC35 # HANGUL SYLLABLE CHIEUCH-A-RIEULTHIEUTH -0xAA4C 0xCC36 # HANGUL SYLLABLE CHIEUCH-A-RIEULPHIEUPH -0xAA4D 0xCC37 # HANGUL SYLLABLE CHIEUCH-A-RIEULHIEUH -0xAA4E 0xCC3A # HANGUL SYLLABLE CHIEUCH-A-PIEUPSIOS -0xAA4F 0xCC3F # HANGUL SYLLABLE CHIEUCH-A-CHIEUCH -0xAA50 0xCC40 # HANGUL SYLLABLE CHIEUCH-A-KHIEUKH -0xAA51 0xCC41 # HANGUL SYLLABLE CHIEUCH-A-THIEUTH -0xAA52 0xCC42 # HANGUL SYLLABLE CHIEUCH-A-PHIEUPH -0xAA53 0xCC43 # HANGUL SYLLABLE CHIEUCH-A-HIEUH -0xAA54 0xCC46 # HANGUL SYLLABLE CHIEUCH-AE-SSANGKIYEOK -0xAA55 0xCC47 # HANGUL SYLLABLE CHIEUCH-AE-KIYEOKSIOS -0xAA56 0xCC49 # HANGUL SYLLABLE CHIEUCH-AE-NIEUNCIEUC -0xAA57 0xCC4A # HANGUL SYLLABLE CHIEUCH-AE-NIEUNHIEUH -0xAA58 0xCC4B # HANGUL SYLLABLE CHIEUCH-AE-TIKEUT -0xAA59 0xCC4D # HANGUL SYLLABLE CHIEUCH-AE-RIEULKIYEOK -0xAA5A 0xCC4E # HANGUL SYLLABLE CHIEUCH-AE-RIEULMIEUM -0xAA61 0xCC4F # HANGUL SYLLABLE CHIEUCH-AE-RIEULPIEUP -0xAA62 0xCC50 # HANGUL SYLLABLE CHIEUCH-AE-RIEULSIOS -0xAA63 0xCC51 # HANGUL SYLLABLE CHIEUCH-AE-RIEULTHIEUTH -0xAA64 0xCC52 # HANGUL SYLLABLE CHIEUCH-AE-RIEULPHIEUPH -0xAA65 0xCC53 # HANGUL SYLLABLE CHIEUCH-AE-RIEULHIEUH -0xAA66 0xCC56 # HANGUL SYLLABLE CHIEUCH-AE-PIEUPSIOS -0xAA67 0xCC5A # HANGUL SYLLABLE CHIEUCH-AE-CIEUC -0xAA68 0xCC5B # HANGUL SYLLABLE CHIEUCH-AE-CHIEUCH -0xAA69 0xCC5C # HANGUL SYLLABLE CHIEUCH-AE-KHIEUKH -0xAA6A 0xCC5D # HANGUL SYLLABLE CHIEUCH-AE-THIEUTH -0xAA6B 0xCC5E # HANGUL SYLLABLE CHIEUCH-AE-PHIEUPH -0xAA6C 0xCC5F # HANGUL SYLLABLE CHIEUCH-AE-HIEUH -0xAA6D 0xCC61 # HANGUL SYLLABLE CHIEUCH-YA-KIYEOK -0xAA6E 0xCC62 # HANGUL SYLLABLE CHIEUCH-YA-SSANGKIYEOK -0xAA6F 0xCC63 # HANGUL SYLLABLE CHIEUCH-YA-KIYEOKSIOS -0xAA70 0xCC65 # HANGUL SYLLABLE CHIEUCH-YA-NIEUNCIEUC -0xAA71 0xCC67 # HANGUL SYLLABLE CHIEUCH-YA-TIKEUT -0xAA72 0xCC69 # HANGUL SYLLABLE CHIEUCH-YA-RIEULKIYEOK -0xAA73 0xCC6A # HANGUL SYLLABLE CHIEUCH-YA-RIEULMIEUM -0xAA74 0xCC6B # HANGUL SYLLABLE CHIEUCH-YA-RIEULPIEUP -0xAA75 0xCC6C # HANGUL SYLLABLE CHIEUCH-YA-RIEULSIOS -0xAA76 0xCC6D # HANGUL SYLLABLE CHIEUCH-YA-RIEULTHIEUTH -0xAA77 0xCC6E # HANGUL SYLLABLE CHIEUCH-YA-RIEULPHIEUPH -0xAA78 0xCC6F # HANGUL SYLLABLE CHIEUCH-YA-RIEULHIEUH -0xAA79 0xCC71 # HANGUL SYLLABLE CHIEUCH-YA-PIEUP -0xAA7A 0xCC72 # HANGUL SYLLABLE CHIEUCH-YA-PIEUPSIOS -0xAA81 0xCC73 # HANGUL SYLLABLE CHIEUCH-YA-SIOS -0xAA82 0xCC74 # HANGUL SYLLABLE CHIEUCH-YA-SSANGSIOS -0xAA83 0xCC76 # HANGUL SYLLABLE CHIEUCH-YA-CIEUC -0xAA84 0xCC77 # HANGUL SYLLABLE CHIEUCH-YA-CHIEUCH -0xAA85 0xCC78 # HANGUL SYLLABLE CHIEUCH-YA-KHIEUKH -0xAA86 0xCC79 # HANGUL SYLLABLE CHIEUCH-YA-THIEUTH -0xAA87 0xCC7A # HANGUL SYLLABLE CHIEUCH-YA-PHIEUPH -0xAA88 0xCC7B # HANGUL SYLLABLE CHIEUCH-YA-HIEUH -0xAA89 0xCC7C # HANGUL SYLLABLE CHIEUCH-YAE -0xAA8A 0xCC7D # HANGUL SYLLABLE CHIEUCH-YAE-KIYEOK -0xAA8B 0xCC7E # HANGUL SYLLABLE CHIEUCH-YAE-SSANGKIYEOK -0xAA8C 0xCC7F # HANGUL SYLLABLE CHIEUCH-YAE-KIYEOKSIOS -0xAA8D 0xCC80 # HANGUL SYLLABLE CHIEUCH-YAE-NIEUN -0xAA8E 0xCC81 # HANGUL SYLLABLE CHIEUCH-YAE-NIEUNCIEUC -0xAA8F 0xCC82 # HANGUL SYLLABLE CHIEUCH-YAE-NIEUNHIEUH -0xAA90 0xCC83 # HANGUL SYLLABLE CHIEUCH-YAE-TIKEUT -0xAA91 0xCC84 # HANGUL SYLLABLE CHIEUCH-YAE-RIEUL -0xAA92 0xCC85 # HANGUL SYLLABLE CHIEUCH-YAE-RIEULKIYEOK -0xAA93 0xCC86 # HANGUL SYLLABLE CHIEUCH-YAE-RIEULMIEUM -0xAA94 0xCC87 # HANGUL SYLLABLE CHIEUCH-YAE-RIEULPIEUP -0xAA95 0xCC88 # HANGUL SYLLABLE CHIEUCH-YAE-RIEULSIOS -0xAA96 0xCC89 # HANGUL SYLLABLE CHIEUCH-YAE-RIEULTHIEUTH -0xAA97 0xCC8A # HANGUL SYLLABLE CHIEUCH-YAE-RIEULPHIEUPH -0xAA98 0xCC8B # HANGUL SYLLABLE CHIEUCH-YAE-RIEULHIEUH -0xAA99 0xCC8C # HANGUL SYLLABLE CHIEUCH-YAE-MIEUM -0xAA9A 0xCC8D # HANGUL SYLLABLE CHIEUCH-YAE-PIEUP -0xAA9B 0xCC8E # HANGUL SYLLABLE CHIEUCH-YAE-PIEUPSIOS -0xAA9C 0xCC8F # HANGUL SYLLABLE CHIEUCH-YAE-SIOS -0xAA9D 0xCC90 # HANGUL SYLLABLE CHIEUCH-YAE-SSANGSIOS -0xAA9E 0xCC91 # HANGUL SYLLABLE CHIEUCH-YAE-IEUNG -0xAA9F 0xCC92 # HANGUL SYLLABLE CHIEUCH-YAE-CIEUC -0xAAA0 0xCC93 # HANGUL SYLLABLE CHIEUCH-YAE-CHIEUCH -0xAAA1 0x3041 # HIRAGANA LETTER SMALL A -0xAAA2 0x3042 # HIRAGANA LETTER A -0xAAA3 0x3043 # HIRAGANA LETTER SMALL I -0xAAA4 0x3044 # HIRAGANA LETTER I -0xAAA5 0x3045 # HIRAGANA LETTER SMALL U -0xAAA6 0x3046 # HIRAGANA LETTER U -0xAAA7 0x3047 # HIRAGANA LETTER SMALL E -0xAAA8 0x3048 # HIRAGANA LETTER E -0xAAA9 0x3049 # HIRAGANA LETTER SMALL O -0xAAAA 0x304A # HIRAGANA LETTER O -0xAAAB 0x304B # HIRAGANA LETTER KA -0xAAAC 0x304C # HIRAGANA LETTER GA -0xAAAD 0x304D # HIRAGANA LETTER KI -0xAAAE 0x304E # HIRAGANA LETTER GI -0xAAAF 0x304F # HIRAGANA LETTER KU -0xAAB0 0x3050 # HIRAGANA LETTER GU -0xAAB1 0x3051 # HIRAGANA LETTER KE -0xAAB2 0x3052 # HIRAGANA LETTER GE -0xAAB3 0x3053 # HIRAGANA LETTER KO -0xAAB4 0x3054 # HIRAGANA LETTER GO -0xAAB5 0x3055 # HIRAGANA LETTER SA -0xAAB6 0x3056 # HIRAGANA LETTER ZA -0xAAB7 0x3057 # HIRAGANA LETTER SI -0xAAB8 0x3058 # HIRAGANA LETTER ZI -0xAAB9 0x3059 # HIRAGANA LETTER SU -0xAABA 0x305A # HIRAGANA LETTER ZU -0xAABB 0x305B # HIRAGANA LETTER SE -0xAABC 0x305C # HIRAGANA LETTER ZE -0xAABD 0x305D # HIRAGANA LETTER SO -0xAABE 0x305E # HIRAGANA LETTER ZO -0xAABF 0x305F # HIRAGANA LETTER TA -0xAAC0 0x3060 # HIRAGANA LETTER DA -0xAAC1 0x3061 # HIRAGANA LETTER TI -0xAAC2 0x3062 # HIRAGANA LETTER DI -0xAAC3 0x3063 # HIRAGANA LETTER SMALL TU -0xAAC4 0x3064 # HIRAGANA LETTER TU -0xAAC5 0x3065 # HIRAGANA LETTER DU -0xAAC6 0x3066 # HIRAGANA LETTER TE -0xAAC7 0x3067 # HIRAGANA LETTER DE -0xAAC8 0x3068 # HIRAGANA LETTER TO -0xAAC9 0x3069 # HIRAGANA LETTER DO -0xAACA 0x306A # HIRAGANA LETTER NA -0xAACB 0x306B # HIRAGANA LETTER NI -0xAACC 0x306C # HIRAGANA LETTER NU -0xAACD 0x306D # HIRAGANA LETTER NE -0xAACE 0x306E # HIRAGANA LETTER NO -0xAACF 0x306F # HIRAGANA LETTER HA -0xAAD0 0x3070 # HIRAGANA LETTER BA -0xAAD1 0x3071 # HIRAGANA LETTER PA -0xAAD2 0x3072 # HIRAGANA LETTER HI -0xAAD3 0x3073 # HIRAGANA LETTER BI -0xAAD4 0x3074 # HIRAGANA LETTER PI -0xAAD5 0x3075 # HIRAGANA LETTER HU -0xAAD6 0x3076 # HIRAGANA LETTER BU -0xAAD7 0x3077 # HIRAGANA LETTER PU -0xAAD8 0x3078 # HIRAGANA LETTER HE -0xAAD9 0x3079 # HIRAGANA LETTER BE -0xAADA 0x307A # HIRAGANA LETTER PE -0xAADB 0x307B # HIRAGANA LETTER HO -0xAADC 0x307C # HIRAGANA LETTER BO -0xAADD 0x307D # HIRAGANA LETTER PO -0xAADE 0x307E # HIRAGANA LETTER MA -0xAADF 0x307F # HIRAGANA LETTER MI -0xAAE0 0x3080 # HIRAGANA LETTER MU -0xAAE1 0x3081 # HIRAGANA LETTER ME -0xAAE2 0x3082 # HIRAGANA LETTER MO -0xAAE3 0x3083 # HIRAGANA LETTER SMALL YA -0xAAE4 0x3084 # HIRAGANA LETTER YA -0xAAE5 0x3085 # HIRAGANA LETTER SMALL YU -0xAAE6 0x3086 # HIRAGANA LETTER YU -0xAAE7 0x3087 # HIRAGANA LETTER SMALL YO -0xAAE8 0x3088 # HIRAGANA LETTER YO -0xAAE9 0x3089 # HIRAGANA LETTER RA -0xAAEA 0x308A # HIRAGANA LETTER RI -0xAAEB 0x308B # HIRAGANA LETTER RU -0xAAEC 0x308C # HIRAGANA LETTER RE -0xAAED 0x308D # HIRAGANA LETTER RO -0xAAEE 0x308E # HIRAGANA LETTER SMALL WA -0xAAEF 0x308F # HIRAGANA LETTER WA -0xAAF0 0x3090 # HIRAGANA LETTER WI -0xAAF1 0x3091 # HIRAGANA LETTER WE -0xAAF2 0x3092 # HIRAGANA LETTER WO -0xAAF3 0x3093 # HIRAGANA LETTER N -0xAB41 0xCC94 # HANGUL SYLLABLE CHIEUCH-YAE-KHIEUKH -0xAB42 0xCC95 # HANGUL SYLLABLE CHIEUCH-YAE-THIEUTH -0xAB43 0xCC96 # HANGUL SYLLABLE CHIEUCH-YAE-PHIEUPH -0xAB44 0xCC97 # HANGUL SYLLABLE CHIEUCH-YAE-HIEUH -0xAB45 0xCC9A # HANGUL SYLLABLE CHIEUCH-EO-SSANGKIYEOK -0xAB46 0xCC9B # HANGUL SYLLABLE CHIEUCH-EO-KIYEOKSIOS -0xAB47 0xCC9D # HANGUL SYLLABLE CHIEUCH-EO-NIEUNCIEUC -0xAB48 0xCC9E # HANGUL SYLLABLE CHIEUCH-EO-NIEUNHIEUH -0xAB49 0xCC9F # HANGUL SYLLABLE CHIEUCH-EO-TIKEUT -0xAB4A 0xCCA1 # HANGUL SYLLABLE CHIEUCH-EO-RIEULKIYEOK -0xAB4B 0xCCA2 # HANGUL SYLLABLE CHIEUCH-EO-RIEULMIEUM -0xAB4C 0xCCA3 # HANGUL SYLLABLE CHIEUCH-EO-RIEULPIEUP -0xAB4D 0xCCA4 # HANGUL SYLLABLE CHIEUCH-EO-RIEULSIOS -0xAB4E 0xCCA5 # HANGUL SYLLABLE CHIEUCH-EO-RIEULTHIEUTH -0xAB4F 0xCCA6 # HANGUL SYLLABLE CHIEUCH-EO-RIEULPHIEUPH -0xAB50 0xCCA7 # HANGUL SYLLABLE CHIEUCH-EO-RIEULHIEUH -0xAB51 0xCCAA # HANGUL SYLLABLE CHIEUCH-EO-PIEUPSIOS -0xAB52 0xCCAE # HANGUL SYLLABLE CHIEUCH-EO-CIEUC -0xAB53 0xCCAF # HANGUL SYLLABLE CHIEUCH-EO-CHIEUCH -0xAB54 0xCCB0 # HANGUL SYLLABLE CHIEUCH-EO-KHIEUKH -0xAB55 0xCCB1 # HANGUL SYLLABLE CHIEUCH-EO-THIEUTH -0xAB56 0xCCB2 # HANGUL SYLLABLE CHIEUCH-EO-PHIEUPH -0xAB57 0xCCB3 # HANGUL SYLLABLE CHIEUCH-EO-HIEUH -0xAB58 0xCCB6 # HANGUL SYLLABLE CHIEUCH-E-SSANGKIYEOK -0xAB59 0xCCB7 # HANGUL SYLLABLE CHIEUCH-E-KIYEOKSIOS -0xAB5A 0xCCB9 # HANGUL SYLLABLE CHIEUCH-E-NIEUNCIEUC -0xAB61 0xCCBA # HANGUL SYLLABLE CHIEUCH-E-NIEUNHIEUH -0xAB62 0xCCBB # HANGUL SYLLABLE CHIEUCH-E-TIKEUT -0xAB63 0xCCBD # HANGUL SYLLABLE CHIEUCH-E-RIEULKIYEOK -0xAB64 0xCCBE # HANGUL SYLLABLE CHIEUCH-E-RIEULMIEUM -0xAB65 0xCCBF # HANGUL SYLLABLE CHIEUCH-E-RIEULPIEUP -0xAB66 0xCCC0 # HANGUL SYLLABLE CHIEUCH-E-RIEULSIOS -0xAB67 0xCCC1 # HANGUL SYLLABLE CHIEUCH-E-RIEULTHIEUTH -0xAB68 0xCCC2 # HANGUL SYLLABLE CHIEUCH-E-RIEULPHIEUPH -0xAB69 0xCCC3 # HANGUL SYLLABLE CHIEUCH-E-RIEULHIEUH -0xAB6A 0xCCC6 # HANGUL SYLLABLE CHIEUCH-E-PIEUPSIOS -0xAB6B 0xCCC8 # HANGUL SYLLABLE CHIEUCH-E-SSANGSIOS -0xAB6C 0xCCCA # HANGUL SYLLABLE CHIEUCH-E-CIEUC -0xAB6D 0xCCCB # HANGUL SYLLABLE CHIEUCH-E-CHIEUCH -0xAB6E 0xCCCC # HANGUL SYLLABLE CHIEUCH-E-KHIEUKH -0xAB6F 0xCCCD # HANGUL SYLLABLE CHIEUCH-E-THIEUTH -0xAB70 0xCCCE # HANGUL SYLLABLE CHIEUCH-E-PHIEUPH -0xAB71 0xCCCF # HANGUL SYLLABLE CHIEUCH-E-HIEUH -0xAB72 0xCCD1 # HANGUL SYLLABLE CHIEUCH-YEO-KIYEOK -0xAB73 0xCCD2 # HANGUL SYLLABLE CHIEUCH-YEO-SSANGKIYEOK -0xAB74 0xCCD3 # HANGUL SYLLABLE CHIEUCH-YEO-KIYEOKSIOS -0xAB75 0xCCD5 # HANGUL SYLLABLE CHIEUCH-YEO-NIEUNCIEUC -0xAB76 0xCCD6 # HANGUL SYLLABLE CHIEUCH-YEO-NIEUNHIEUH -0xAB77 0xCCD7 # HANGUL SYLLABLE CHIEUCH-YEO-TIKEUT -0xAB78 0xCCD8 # HANGUL SYLLABLE CHIEUCH-YEO-RIEUL -0xAB79 0xCCD9 # HANGUL SYLLABLE CHIEUCH-YEO-RIEULKIYEOK -0xAB7A 0xCCDA # HANGUL SYLLABLE CHIEUCH-YEO-RIEULMIEUM -0xAB81 0xCCDB # HANGUL SYLLABLE CHIEUCH-YEO-RIEULPIEUP -0xAB82 0xCCDC # HANGUL SYLLABLE CHIEUCH-YEO-RIEULSIOS -0xAB83 0xCCDD # HANGUL SYLLABLE CHIEUCH-YEO-RIEULTHIEUTH -0xAB84 0xCCDE # HANGUL SYLLABLE CHIEUCH-YEO-RIEULPHIEUPH -0xAB85 0xCCDF # HANGUL SYLLABLE CHIEUCH-YEO-RIEULHIEUH -0xAB86 0xCCE0 # HANGUL SYLLABLE CHIEUCH-YEO-MIEUM -0xAB87 0xCCE1 # HANGUL SYLLABLE CHIEUCH-YEO-PIEUP -0xAB88 0xCCE2 # HANGUL SYLLABLE CHIEUCH-YEO-PIEUPSIOS -0xAB89 0xCCE3 # HANGUL SYLLABLE CHIEUCH-YEO-SIOS -0xAB8A 0xCCE5 # HANGUL SYLLABLE CHIEUCH-YEO-IEUNG -0xAB8B 0xCCE6 # HANGUL SYLLABLE CHIEUCH-YEO-CIEUC -0xAB8C 0xCCE7 # HANGUL SYLLABLE CHIEUCH-YEO-CHIEUCH -0xAB8D 0xCCE8 # HANGUL SYLLABLE CHIEUCH-YEO-KHIEUKH -0xAB8E 0xCCE9 # HANGUL SYLLABLE CHIEUCH-YEO-THIEUTH -0xAB8F 0xCCEA # HANGUL SYLLABLE CHIEUCH-YEO-PHIEUPH -0xAB90 0xCCEB # HANGUL SYLLABLE CHIEUCH-YEO-HIEUH -0xAB91 0xCCED # HANGUL SYLLABLE CHIEUCH-YE-KIYEOK -0xAB92 0xCCEE # HANGUL SYLLABLE CHIEUCH-YE-SSANGKIYEOK -0xAB93 0xCCEF # HANGUL SYLLABLE CHIEUCH-YE-KIYEOKSIOS -0xAB94 0xCCF1 # HANGUL SYLLABLE CHIEUCH-YE-NIEUNCIEUC -0xAB95 0xCCF2 # HANGUL SYLLABLE CHIEUCH-YE-NIEUNHIEUH -0xAB96 0xCCF3 # HANGUL SYLLABLE CHIEUCH-YE-TIKEUT -0xAB97 0xCCF4 # HANGUL SYLLABLE CHIEUCH-YE-RIEUL -0xAB98 0xCCF5 # HANGUL SYLLABLE CHIEUCH-YE-RIEULKIYEOK -0xAB99 0xCCF6 # HANGUL SYLLABLE CHIEUCH-YE-RIEULMIEUM -0xAB9A 0xCCF7 # HANGUL SYLLABLE CHIEUCH-YE-RIEULPIEUP -0xAB9B 0xCCF8 # HANGUL SYLLABLE CHIEUCH-YE-RIEULSIOS -0xAB9C 0xCCF9 # HANGUL SYLLABLE CHIEUCH-YE-RIEULTHIEUTH -0xAB9D 0xCCFA # HANGUL SYLLABLE CHIEUCH-YE-RIEULPHIEUPH -0xAB9E 0xCCFB # HANGUL SYLLABLE CHIEUCH-YE-RIEULHIEUH -0xAB9F 0xCCFC # HANGUL SYLLABLE CHIEUCH-YE-MIEUM -0xABA0 0xCCFD # HANGUL SYLLABLE CHIEUCH-YE-PIEUP -0xABA1 0x30A1 # KATAKANA LETTER SMALL A -0xABA2 0x30A2 # KATAKANA LETTER A -0xABA3 0x30A3 # KATAKANA LETTER SMALL I -0xABA4 0x30A4 # KATAKANA LETTER I -0xABA5 0x30A5 # KATAKANA LETTER SMALL U -0xABA6 0x30A6 # KATAKANA LETTER U -0xABA7 0x30A7 # KATAKANA LETTER SMALL E -0xABA8 0x30A8 # KATAKANA LETTER E -0xABA9 0x30A9 # KATAKANA LETTER SMALL O -0xABAA 0x30AA # KATAKANA LETTER O -0xABAB 0x30AB # KATAKANA LETTER KA -0xABAC 0x30AC # KATAKANA LETTER GA -0xABAD 0x30AD # KATAKANA LETTER KI -0xABAE 0x30AE # KATAKANA LETTER GI -0xABAF 0x30AF # KATAKANA LETTER KU -0xABB0 0x30B0 # KATAKANA LETTER GU -0xABB1 0x30B1 # KATAKANA LETTER KE -0xABB2 0x30B2 # KATAKANA LETTER GE -0xABB3 0x30B3 # KATAKANA LETTER KO -0xABB4 0x30B4 # KATAKANA LETTER GO -0xABB5 0x30B5 # KATAKANA LETTER SA -0xABB6 0x30B6 # KATAKANA LETTER ZA -0xABB7 0x30B7 # KATAKANA LETTER SI -0xABB8 0x30B8 # KATAKANA LETTER ZI -0xABB9 0x30B9 # KATAKANA LETTER SU -0xABBA 0x30BA # KATAKANA LETTER ZU -0xABBB 0x30BB # KATAKANA LETTER SE -0xABBC 0x30BC # KATAKANA LETTER ZE -0xABBD 0x30BD # KATAKANA LETTER SO -0xABBE 0x30BE # KATAKANA LETTER ZO -0xABBF 0x30BF # KATAKANA LETTER TA -0xABC0 0x30C0 # KATAKANA LETTER DA -0xABC1 0x30C1 # KATAKANA LETTER TI -0xABC2 0x30C2 # KATAKANA LETTER DI -0xABC3 0x30C3 # KATAKANA LETTER SMALL TU -0xABC4 0x30C4 # KATAKANA LETTER TU -0xABC5 0x30C5 # KATAKANA LETTER DU -0xABC6 0x30C6 # KATAKANA LETTER TE -0xABC7 0x30C7 # KATAKANA LETTER DE -0xABC8 0x30C8 # KATAKANA LETTER TO -0xABC9 0x30C9 # KATAKANA LETTER DO -0xABCA 0x30CA # KATAKANA LETTER NA -0xABCB 0x30CB # KATAKANA LETTER NI -0xABCC 0x30CC # KATAKANA LETTER NU -0xABCD 0x30CD # KATAKANA LETTER NE -0xABCE 0x30CE # KATAKANA LETTER NO -0xABCF 0x30CF # KATAKANA LETTER HA -0xABD0 0x30D0 # KATAKANA LETTER BA -0xABD1 0x30D1 # KATAKANA LETTER PA -0xABD2 0x30D2 # KATAKANA LETTER HI -0xABD3 0x30D3 # KATAKANA LETTER BI -0xABD4 0x30D4 # KATAKANA LETTER PI -0xABD5 0x30D5 # KATAKANA LETTER HU -0xABD6 0x30D6 # KATAKANA LETTER BU -0xABD7 0x30D7 # KATAKANA LETTER PU -0xABD8 0x30D8 # KATAKANA LETTER HE -0xABD9 0x30D9 # KATAKANA LETTER BE -0xABDA 0x30DA # KATAKANA LETTER PE -0xABDB 0x30DB # KATAKANA LETTER HO -0xABDC 0x30DC # KATAKANA LETTER BO -0xABDD 0x30DD # KATAKANA LETTER PO -0xABDE 0x30DE # KATAKANA LETTER MA -0xABDF 0x30DF # KATAKANA LETTER MI -0xABE0 0x30E0 # KATAKANA LETTER MU -0xABE1 0x30E1 # KATAKANA LETTER ME -0xABE2 0x30E2 # KATAKANA LETTER MO -0xABE3 0x30E3 # KATAKANA LETTER SMALL YA -0xABE4 0x30E4 # KATAKANA LETTER YA -0xABE5 0x30E5 # KATAKANA LETTER SMALL YU -0xABE6 0x30E6 # KATAKANA LETTER YU -0xABE7 0x30E7 # KATAKANA LETTER SMALL YO -0xABE8 0x30E8 # KATAKANA LETTER YO -0xABE9 0x30E9 # KATAKANA LETTER RA -0xABEA 0x30EA # KATAKANA LETTER RI -0xABEB 0x30EB # KATAKANA LETTER RU -0xABEC 0x30EC # KATAKANA LETTER RE -0xABED 0x30ED # KATAKANA LETTER RO -0xABEE 0x30EE # KATAKANA LETTER SMALL WA -0xABEF 0x30EF # KATAKANA LETTER WA -0xABF0 0x30F0 # KATAKANA LETTER WI -0xABF1 0x30F1 # KATAKANA LETTER WE -0xABF2 0x30F2 # KATAKANA LETTER WO -0xABF3 0x30F3 # KATAKANA LETTER N -0xABF4 0x30F4 # KATAKANA LETTER VU -0xABF5 0x30F5 # KATAKANA LETTER SMALL KA -0xABF6 0x30F6 # KATAKANA LETTER SMALL KE -0xAC41 0xCCFE # HANGUL SYLLABLE CHIEUCH-YE-PIEUPSIOS -0xAC42 0xCCFF # HANGUL SYLLABLE CHIEUCH-YE-SIOS -0xAC43 0xCD00 # HANGUL SYLLABLE CHIEUCH-YE-SSANGSIOS -0xAC44 0xCD02 # HANGUL SYLLABLE CHIEUCH-YE-CIEUC -0xAC45 0xCD03 # HANGUL SYLLABLE CHIEUCH-YE-CHIEUCH -0xAC46 0xCD04 # HANGUL SYLLABLE CHIEUCH-YE-KHIEUKH -0xAC47 0xCD05 # HANGUL SYLLABLE CHIEUCH-YE-THIEUTH -0xAC48 0xCD06 # HANGUL SYLLABLE CHIEUCH-YE-PHIEUPH -0xAC49 0xCD07 # HANGUL SYLLABLE CHIEUCH-YE-HIEUH -0xAC4A 0xCD0A # HANGUL SYLLABLE CHIEUCH-O-SSANGKIYEOK -0xAC4B 0xCD0B # HANGUL SYLLABLE CHIEUCH-O-KIYEOKSIOS -0xAC4C 0xCD0D # HANGUL SYLLABLE CHIEUCH-O-NIEUNCIEUC -0xAC4D 0xCD0E # HANGUL SYLLABLE CHIEUCH-O-NIEUNHIEUH -0xAC4E 0xCD0F # HANGUL SYLLABLE CHIEUCH-O-TIKEUT -0xAC4F 0xCD11 # HANGUL SYLLABLE CHIEUCH-O-RIEULKIYEOK -0xAC50 0xCD12 # HANGUL SYLLABLE CHIEUCH-O-RIEULMIEUM -0xAC51 0xCD13 # HANGUL SYLLABLE CHIEUCH-O-RIEULPIEUP -0xAC52 0xCD14 # HANGUL SYLLABLE CHIEUCH-O-RIEULSIOS -0xAC53 0xCD15 # HANGUL SYLLABLE CHIEUCH-O-RIEULTHIEUTH -0xAC54 0xCD16 # HANGUL SYLLABLE CHIEUCH-O-RIEULPHIEUPH -0xAC55 0xCD17 # HANGUL SYLLABLE CHIEUCH-O-RIEULHIEUH -0xAC56 0xCD1A # HANGUL SYLLABLE CHIEUCH-O-PIEUPSIOS -0xAC57 0xCD1C # HANGUL SYLLABLE CHIEUCH-O-SSANGSIOS -0xAC58 0xCD1E # HANGUL SYLLABLE CHIEUCH-O-CIEUC -0xAC59 0xCD1F # HANGUL SYLLABLE CHIEUCH-O-CHIEUCH -0xAC5A 0xCD20 # HANGUL SYLLABLE CHIEUCH-O-KHIEUKH -0xAC61 0xCD21 # HANGUL SYLLABLE CHIEUCH-O-THIEUTH -0xAC62 0xCD22 # HANGUL SYLLABLE CHIEUCH-O-PHIEUPH -0xAC63 0xCD23 # HANGUL SYLLABLE CHIEUCH-O-HIEUH -0xAC64 0xCD25 # HANGUL SYLLABLE CHIEUCH-WA-KIYEOK -0xAC65 0xCD26 # HANGUL SYLLABLE CHIEUCH-WA-SSANGKIYEOK -0xAC66 0xCD27 # HANGUL SYLLABLE CHIEUCH-WA-KIYEOKSIOS -0xAC67 0xCD29 # HANGUL SYLLABLE CHIEUCH-WA-NIEUNCIEUC -0xAC68 0xCD2A # HANGUL SYLLABLE CHIEUCH-WA-NIEUNHIEUH -0xAC69 0xCD2B # HANGUL SYLLABLE CHIEUCH-WA-TIKEUT -0xAC6A 0xCD2D # HANGUL SYLLABLE CHIEUCH-WA-RIEULKIYEOK -0xAC6B 0xCD2E # HANGUL SYLLABLE CHIEUCH-WA-RIEULMIEUM -0xAC6C 0xCD2F # HANGUL SYLLABLE CHIEUCH-WA-RIEULPIEUP -0xAC6D 0xCD30 # HANGUL SYLLABLE CHIEUCH-WA-RIEULSIOS -0xAC6E 0xCD31 # HANGUL SYLLABLE CHIEUCH-WA-RIEULTHIEUTH -0xAC6F 0xCD32 # HANGUL SYLLABLE CHIEUCH-WA-RIEULPHIEUPH -0xAC70 0xCD33 # HANGUL SYLLABLE CHIEUCH-WA-RIEULHIEUH -0xAC71 0xCD34 # HANGUL SYLLABLE CHIEUCH-WA-MIEUM -0xAC72 0xCD35 # HANGUL SYLLABLE CHIEUCH-WA-PIEUP -0xAC73 0xCD36 # HANGUL SYLLABLE CHIEUCH-WA-PIEUPSIOS -0xAC74 0xCD37 # HANGUL SYLLABLE CHIEUCH-WA-SIOS -0xAC75 0xCD38 # HANGUL SYLLABLE CHIEUCH-WA-SSANGSIOS -0xAC76 0xCD3A # HANGUL SYLLABLE CHIEUCH-WA-CIEUC -0xAC77 0xCD3B # HANGUL SYLLABLE CHIEUCH-WA-CHIEUCH -0xAC78 0xCD3C # HANGUL SYLLABLE CHIEUCH-WA-KHIEUKH -0xAC79 0xCD3D # HANGUL SYLLABLE CHIEUCH-WA-THIEUTH -0xAC7A 0xCD3E # HANGUL SYLLABLE CHIEUCH-WA-PHIEUPH -0xAC81 0xCD3F # HANGUL SYLLABLE CHIEUCH-WA-HIEUH -0xAC82 0xCD40 # HANGUL SYLLABLE CHIEUCH-WAE -0xAC83 0xCD41 # HANGUL SYLLABLE CHIEUCH-WAE-KIYEOK -0xAC84 0xCD42 # HANGUL SYLLABLE CHIEUCH-WAE-SSANGKIYEOK -0xAC85 0xCD43 # HANGUL SYLLABLE CHIEUCH-WAE-KIYEOKSIOS -0xAC86 0xCD44 # HANGUL SYLLABLE CHIEUCH-WAE-NIEUN -0xAC87 0xCD45 # HANGUL SYLLABLE CHIEUCH-WAE-NIEUNCIEUC -0xAC88 0xCD46 # HANGUL SYLLABLE CHIEUCH-WAE-NIEUNHIEUH -0xAC89 0xCD47 # HANGUL SYLLABLE CHIEUCH-WAE-TIKEUT -0xAC8A 0xCD48 # HANGUL SYLLABLE CHIEUCH-WAE-RIEUL -0xAC8B 0xCD49 # HANGUL SYLLABLE CHIEUCH-WAE-RIEULKIYEOK -0xAC8C 0xCD4A # HANGUL SYLLABLE CHIEUCH-WAE-RIEULMIEUM -0xAC8D 0xCD4B # HANGUL SYLLABLE CHIEUCH-WAE-RIEULPIEUP -0xAC8E 0xCD4C # HANGUL SYLLABLE CHIEUCH-WAE-RIEULSIOS -0xAC8F 0xCD4D # HANGUL SYLLABLE CHIEUCH-WAE-RIEULTHIEUTH -0xAC90 0xCD4E # HANGUL SYLLABLE CHIEUCH-WAE-RIEULPHIEUPH -0xAC91 0xCD4F # HANGUL SYLLABLE CHIEUCH-WAE-RIEULHIEUH -0xAC92 0xCD50 # HANGUL SYLLABLE CHIEUCH-WAE-MIEUM -0xAC93 0xCD51 # HANGUL SYLLABLE CHIEUCH-WAE-PIEUP -0xAC94 0xCD52 # HANGUL SYLLABLE CHIEUCH-WAE-PIEUPSIOS -0xAC95 0xCD53 # HANGUL SYLLABLE CHIEUCH-WAE-SIOS -0xAC96 0xCD54 # HANGUL SYLLABLE CHIEUCH-WAE-SSANGSIOS -0xAC97 0xCD55 # HANGUL SYLLABLE CHIEUCH-WAE-IEUNG -0xAC98 0xCD56 # HANGUL SYLLABLE CHIEUCH-WAE-CIEUC -0xAC99 0xCD57 # HANGUL SYLLABLE CHIEUCH-WAE-CHIEUCH -0xAC9A 0xCD58 # HANGUL SYLLABLE CHIEUCH-WAE-KHIEUKH -0xAC9B 0xCD59 # HANGUL SYLLABLE CHIEUCH-WAE-THIEUTH -0xAC9C 0xCD5A # HANGUL SYLLABLE CHIEUCH-WAE-PHIEUPH -0xAC9D 0xCD5B # HANGUL SYLLABLE CHIEUCH-WAE-HIEUH -0xAC9E 0xCD5D # HANGUL SYLLABLE CHIEUCH-OE-KIYEOK -0xAC9F 0xCD5E # HANGUL SYLLABLE CHIEUCH-OE-SSANGKIYEOK -0xACA0 0xCD5F # HANGUL SYLLABLE CHIEUCH-OE-KIYEOKSIOS -0xACA1 0x0410 # CYRILLIC CAPITAL LETTER A -0xACA2 0x0411 # CYRILLIC CAPITAL LETTER BE -0xACA3 0x0412 # CYRILLIC CAPITAL LETTER VE -0xACA4 0x0413 # CYRILLIC CAPITAL LETTER GHE -0xACA5 0x0414 # CYRILLIC CAPITAL LETTER DE -0xACA6 0x0415 # CYRILLIC CAPITAL LETTER IE -0xACA7 0x0401 # CYRILLIC CAPITAL LETTER IO -0xACA8 0x0416 # CYRILLIC CAPITAL LETTER ZHE -0xACA9 0x0417 # CYRILLIC CAPITAL LETTER ZE -0xACAA 0x0418 # CYRILLIC CAPITAL LETTER I -0xACAB 0x0419 # CYRILLIC CAPITAL LETTER SHORT I -0xACAC 0x041A # CYRILLIC CAPITAL LETTER KA -0xACAD 0x041B # CYRILLIC CAPITAL LETTER EL -0xACAE 0x041C # CYRILLIC CAPITAL LETTER EM -0xACAF 0x041D # CYRILLIC CAPITAL LETTER EN -0xACB0 0x041E # CYRILLIC CAPITAL LETTER O -0xACB1 0x041F # CYRILLIC CAPITAL LETTER PE -0xACB2 0x0420 # CYRILLIC CAPITAL LETTER ER -0xACB3 0x0421 # CYRILLIC CAPITAL LETTER ES -0xACB4 0x0422 # CYRILLIC CAPITAL LETTER TE -0xACB5 0x0423 # CYRILLIC CAPITAL LETTER U -0xACB6 0x0424 # CYRILLIC CAPITAL LETTER EF -0xACB7 0x0425 # CYRILLIC CAPITAL LETTER HA -0xACB8 0x0426 # CYRILLIC CAPITAL LETTER TSE -0xACB9 0x0427 # CYRILLIC CAPITAL LETTER CHE -0xACBA 0x0428 # CYRILLIC CAPITAL LETTER SHA -0xACBB 0x0429 # CYRILLIC CAPITAL LETTER SHCHA -0xACBC 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN -0xACBD 0x042B # CYRILLIC CAPITAL LETTER YERU -0xACBE 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN -0xACBF 0x042D # CYRILLIC CAPITAL LETTER E -0xACC0 0x042E # CYRILLIC CAPITAL LETTER YU -0xACC1 0x042F # CYRILLIC CAPITAL LETTER YA -0xACD1 0x0430 # CYRILLIC SMALL LETTER A -0xACD2 0x0431 # CYRILLIC SMALL LETTER BE -0xACD3 0x0432 # CYRILLIC SMALL LETTER VE -0xACD4 0x0433 # CYRILLIC SMALL LETTER GHE -0xACD5 0x0434 # CYRILLIC SMALL LETTER DE -0xACD6 0x0435 # CYRILLIC SMALL LETTER IE -0xACD7 0x0451 # CYRILLIC SMALL LETTER IO -0xACD8 0x0436 # CYRILLIC SMALL LETTER ZHE -0xACD9 0x0437 # CYRILLIC SMALL LETTER ZE -0xACDA 0x0438 # CYRILLIC SMALL LETTER I -0xACDB 0x0439 # CYRILLIC SMALL LETTER SHORT I -0xACDC 0x043A # CYRILLIC SMALL LETTER KA -0xACDD 0x043B # CYRILLIC SMALL LETTER EL -0xACDE 0x043C # CYRILLIC SMALL LETTER EM -0xACDF 0x043D # CYRILLIC SMALL LETTER EN -0xACE0 0x043E # CYRILLIC SMALL LETTER O -0xACE1 0x043F # CYRILLIC SMALL LETTER PE -0xACE2 0x0440 # CYRILLIC SMALL LETTER ER -0xACE3 0x0441 # CYRILLIC SMALL LETTER ES -0xACE4 0x0442 # CYRILLIC SMALL LETTER TE -0xACE5 0x0443 # CYRILLIC SMALL LETTER U -0xACE6 0x0444 # CYRILLIC SMALL LETTER EF -0xACE7 0x0445 # CYRILLIC SMALL LETTER HA -0xACE8 0x0446 # CYRILLIC SMALL LETTER TSE -0xACE9 0x0447 # CYRILLIC SMALL LETTER CHE -0xACEA 0x0448 # CYRILLIC SMALL LETTER SHA -0xACEB 0x0449 # CYRILLIC SMALL LETTER SHCHA -0xACEC 0x044A # CYRILLIC SMALL LETTER HARD SIGN -0xACED 0x044B # CYRILLIC SMALL LETTER YERU -0xACEE 0x044C # CYRILLIC SMALL LETTER SOFT SIGN -0xACEF 0x044D # CYRILLIC SMALL LETTER E -0xACF0 0x044E # CYRILLIC SMALL LETTER YU -0xACF1 0x044F # CYRILLIC SMALL LETTER YA -0xAD41 0xCD61 # HANGUL SYLLABLE CHIEUCH-OE-NIEUNCIEUC -0xAD42 0xCD62 # HANGUL SYLLABLE CHIEUCH-OE-NIEUNHIEUH -0xAD43 0xCD63 # HANGUL SYLLABLE CHIEUCH-OE-TIKEUT -0xAD44 0xCD65 # HANGUL SYLLABLE CHIEUCH-OE-RIEULKIYEOK -0xAD45 0xCD66 # HANGUL SYLLABLE CHIEUCH-OE-RIEULMIEUM -0xAD46 0xCD67 # HANGUL SYLLABLE CHIEUCH-OE-RIEULPIEUP -0xAD47 0xCD68 # HANGUL SYLLABLE CHIEUCH-OE-RIEULSIOS -0xAD48 0xCD69 # HANGUL SYLLABLE CHIEUCH-OE-RIEULTHIEUTH -0xAD49 0xCD6A # HANGUL SYLLABLE CHIEUCH-OE-RIEULPHIEUPH -0xAD4A 0xCD6B # HANGUL SYLLABLE CHIEUCH-OE-RIEULHIEUH -0xAD4B 0xCD6E # HANGUL SYLLABLE CHIEUCH-OE-PIEUPSIOS -0xAD4C 0xCD70 # HANGUL SYLLABLE CHIEUCH-OE-SSANGSIOS -0xAD4D 0xCD72 # HANGUL SYLLABLE CHIEUCH-OE-CIEUC -0xAD4E 0xCD73 # HANGUL SYLLABLE CHIEUCH-OE-CHIEUCH -0xAD4F 0xCD74 # HANGUL SYLLABLE CHIEUCH-OE-KHIEUKH -0xAD50 0xCD75 # HANGUL SYLLABLE CHIEUCH-OE-THIEUTH -0xAD51 0xCD76 # HANGUL SYLLABLE CHIEUCH-OE-PHIEUPH -0xAD52 0xCD77 # HANGUL SYLLABLE CHIEUCH-OE-HIEUH -0xAD53 0xCD79 # HANGUL SYLLABLE CHIEUCH-YO-KIYEOK -0xAD54 0xCD7A # HANGUL SYLLABLE CHIEUCH-YO-SSANGKIYEOK -0xAD55 0xCD7B # HANGUL SYLLABLE CHIEUCH-YO-KIYEOKSIOS -0xAD56 0xCD7C # HANGUL SYLLABLE CHIEUCH-YO-NIEUN -0xAD57 0xCD7D # HANGUL SYLLABLE CHIEUCH-YO-NIEUNCIEUC -0xAD58 0xCD7E # HANGUL SYLLABLE CHIEUCH-YO-NIEUNHIEUH -0xAD59 0xCD7F # HANGUL SYLLABLE CHIEUCH-YO-TIKEUT -0xAD5A 0xCD80 # HANGUL SYLLABLE CHIEUCH-YO-RIEUL -0xAD61 0xCD81 # HANGUL SYLLABLE CHIEUCH-YO-RIEULKIYEOK -0xAD62 0xCD82 # HANGUL SYLLABLE CHIEUCH-YO-RIEULMIEUM -0xAD63 0xCD83 # HANGUL SYLLABLE CHIEUCH-YO-RIEULPIEUP -0xAD64 0xCD84 # HANGUL SYLLABLE CHIEUCH-YO-RIEULSIOS -0xAD65 0xCD85 # HANGUL SYLLABLE CHIEUCH-YO-RIEULTHIEUTH -0xAD66 0xCD86 # HANGUL SYLLABLE CHIEUCH-YO-RIEULPHIEUPH -0xAD67 0xCD87 # HANGUL SYLLABLE CHIEUCH-YO-RIEULHIEUH -0xAD68 0xCD89 # HANGUL SYLLABLE CHIEUCH-YO-PIEUP -0xAD69 0xCD8A # HANGUL SYLLABLE CHIEUCH-YO-PIEUPSIOS -0xAD6A 0xCD8B # HANGUL SYLLABLE CHIEUCH-YO-SIOS -0xAD6B 0xCD8C # HANGUL SYLLABLE CHIEUCH-YO-SSANGSIOS -0xAD6C 0xCD8D # HANGUL SYLLABLE CHIEUCH-YO-IEUNG -0xAD6D 0xCD8E # HANGUL SYLLABLE CHIEUCH-YO-CIEUC -0xAD6E 0xCD8F # HANGUL SYLLABLE CHIEUCH-YO-CHIEUCH -0xAD6F 0xCD90 # HANGUL SYLLABLE CHIEUCH-YO-KHIEUKH -0xAD70 0xCD91 # HANGUL SYLLABLE CHIEUCH-YO-THIEUTH -0xAD71 0xCD92 # HANGUL SYLLABLE CHIEUCH-YO-PHIEUPH -0xAD72 0xCD93 # HANGUL SYLLABLE CHIEUCH-YO-HIEUH -0xAD73 0xCD96 # HANGUL SYLLABLE CHIEUCH-U-SSANGKIYEOK -0xAD74 0xCD97 # HANGUL SYLLABLE CHIEUCH-U-KIYEOKSIOS -0xAD75 0xCD99 # HANGUL SYLLABLE CHIEUCH-U-NIEUNCIEUC -0xAD76 0xCD9A # HANGUL SYLLABLE CHIEUCH-U-NIEUNHIEUH -0xAD77 0xCD9B # HANGUL SYLLABLE CHIEUCH-U-TIKEUT -0xAD78 0xCD9D # HANGUL SYLLABLE CHIEUCH-U-RIEULKIYEOK -0xAD79 0xCD9E # HANGUL SYLLABLE CHIEUCH-U-RIEULMIEUM -0xAD7A 0xCD9F # HANGUL SYLLABLE CHIEUCH-U-RIEULPIEUP -0xAD81 0xCDA0 # HANGUL SYLLABLE CHIEUCH-U-RIEULSIOS -0xAD82 0xCDA1 # HANGUL SYLLABLE CHIEUCH-U-RIEULTHIEUTH -0xAD83 0xCDA2 # HANGUL SYLLABLE CHIEUCH-U-RIEULPHIEUPH -0xAD84 0xCDA3 # HANGUL SYLLABLE CHIEUCH-U-RIEULHIEUH -0xAD85 0xCDA6 # HANGUL SYLLABLE CHIEUCH-U-PIEUPSIOS -0xAD86 0xCDA8 # HANGUL SYLLABLE CHIEUCH-U-SSANGSIOS -0xAD87 0xCDAA # HANGUL SYLLABLE CHIEUCH-U-CIEUC -0xAD88 0xCDAB # HANGUL SYLLABLE CHIEUCH-U-CHIEUCH -0xAD89 0xCDAC # HANGUL SYLLABLE CHIEUCH-U-KHIEUKH -0xAD8A 0xCDAD # HANGUL SYLLABLE CHIEUCH-U-THIEUTH -0xAD8B 0xCDAE # HANGUL SYLLABLE CHIEUCH-U-PHIEUPH -0xAD8C 0xCDAF # HANGUL SYLLABLE CHIEUCH-U-HIEUH -0xAD8D 0xCDB1 # HANGUL SYLLABLE CHIEUCH-WEO-KIYEOK -0xAD8E 0xCDB2 # HANGUL SYLLABLE CHIEUCH-WEO-SSANGKIYEOK -0xAD8F 0xCDB3 # HANGUL SYLLABLE CHIEUCH-WEO-KIYEOKSIOS -0xAD90 0xCDB4 # HANGUL SYLLABLE CHIEUCH-WEO-NIEUN -0xAD91 0xCDB5 # HANGUL SYLLABLE CHIEUCH-WEO-NIEUNCIEUC -0xAD92 0xCDB6 # HANGUL SYLLABLE CHIEUCH-WEO-NIEUNHIEUH -0xAD93 0xCDB7 # HANGUL SYLLABLE CHIEUCH-WEO-TIKEUT -0xAD94 0xCDB8 # HANGUL SYLLABLE CHIEUCH-WEO-RIEUL -0xAD95 0xCDB9 # HANGUL SYLLABLE CHIEUCH-WEO-RIEULKIYEOK -0xAD96 0xCDBA # HANGUL SYLLABLE CHIEUCH-WEO-RIEULMIEUM -0xAD97 0xCDBB # HANGUL SYLLABLE CHIEUCH-WEO-RIEULPIEUP -0xAD98 0xCDBC # HANGUL SYLLABLE CHIEUCH-WEO-RIEULSIOS -0xAD99 0xCDBD # HANGUL SYLLABLE CHIEUCH-WEO-RIEULTHIEUTH -0xAD9A 0xCDBE # HANGUL SYLLABLE CHIEUCH-WEO-RIEULPHIEUPH -0xAD9B 0xCDBF # HANGUL SYLLABLE CHIEUCH-WEO-RIEULHIEUH -0xAD9C 0xCDC0 # HANGUL SYLLABLE CHIEUCH-WEO-MIEUM -0xAD9D 0xCDC1 # HANGUL SYLLABLE CHIEUCH-WEO-PIEUP -0xAD9E 0xCDC2 # HANGUL SYLLABLE CHIEUCH-WEO-PIEUPSIOS -0xAD9F 0xCDC3 # HANGUL SYLLABLE CHIEUCH-WEO-SIOS -0xADA0 0xCDC5 # HANGUL SYLLABLE CHIEUCH-WEO-IEUNG -0xAE41 0xCDC6 # HANGUL SYLLABLE CHIEUCH-WEO-CIEUC -0xAE42 0xCDC7 # HANGUL SYLLABLE CHIEUCH-WEO-CHIEUCH -0xAE43 0xCDC8 # HANGUL SYLLABLE CHIEUCH-WEO-KHIEUKH -0xAE44 0xCDC9 # HANGUL SYLLABLE CHIEUCH-WEO-THIEUTH -0xAE45 0xCDCA # HANGUL SYLLABLE CHIEUCH-WEO-PHIEUPH -0xAE46 0xCDCB # HANGUL SYLLABLE CHIEUCH-WEO-HIEUH -0xAE47 0xCDCD # HANGUL SYLLABLE CHIEUCH-WE-KIYEOK -0xAE48 0xCDCE # HANGUL SYLLABLE CHIEUCH-WE-SSANGKIYEOK -0xAE49 0xCDCF # HANGUL SYLLABLE CHIEUCH-WE-KIYEOKSIOS -0xAE4A 0xCDD1 # HANGUL SYLLABLE CHIEUCH-WE-NIEUNCIEUC -0xAE4B 0xCDD2 # HANGUL SYLLABLE CHIEUCH-WE-NIEUNHIEUH -0xAE4C 0xCDD3 # HANGUL SYLLABLE CHIEUCH-WE-TIKEUT -0xAE4D 0xCDD4 # HANGUL SYLLABLE CHIEUCH-WE-RIEUL -0xAE4E 0xCDD5 # HANGUL SYLLABLE CHIEUCH-WE-RIEULKIYEOK -0xAE4F 0xCDD6 # HANGUL SYLLABLE CHIEUCH-WE-RIEULMIEUM -0xAE50 0xCDD7 # HANGUL SYLLABLE CHIEUCH-WE-RIEULPIEUP -0xAE51 0xCDD8 # HANGUL SYLLABLE CHIEUCH-WE-RIEULSIOS -0xAE52 0xCDD9 # HANGUL SYLLABLE CHIEUCH-WE-RIEULTHIEUTH -0xAE53 0xCDDA # HANGUL SYLLABLE CHIEUCH-WE-RIEULPHIEUPH -0xAE54 0xCDDB # HANGUL SYLLABLE CHIEUCH-WE-RIEULHIEUH -0xAE55 0xCDDC # HANGUL SYLLABLE CHIEUCH-WE-MIEUM -0xAE56 0xCDDD # HANGUL SYLLABLE CHIEUCH-WE-PIEUP -0xAE57 0xCDDE # HANGUL SYLLABLE CHIEUCH-WE-PIEUPSIOS -0xAE58 0xCDDF # HANGUL SYLLABLE CHIEUCH-WE-SIOS -0xAE59 0xCDE0 # HANGUL SYLLABLE CHIEUCH-WE-SSANGSIOS -0xAE5A 0xCDE1 # HANGUL SYLLABLE CHIEUCH-WE-IEUNG -0xAE61 0xCDE2 # HANGUL SYLLABLE CHIEUCH-WE-CIEUC -0xAE62 0xCDE3 # HANGUL SYLLABLE CHIEUCH-WE-CHIEUCH -0xAE63 0xCDE4 # HANGUL SYLLABLE CHIEUCH-WE-KHIEUKH -0xAE64 0xCDE5 # HANGUL SYLLABLE CHIEUCH-WE-THIEUTH -0xAE65 0xCDE6 # HANGUL SYLLABLE CHIEUCH-WE-PHIEUPH -0xAE66 0xCDE7 # HANGUL SYLLABLE CHIEUCH-WE-HIEUH -0xAE67 0xCDE9 # HANGUL SYLLABLE CHIEUCH-WI-KIYEOK -0xAE68 0xCDEA # HANGUL SYLLABLE CHIEUCH-WI-SSANGKIYEOK -0xAE69 0xCDEB # HANGUL SYLLABLE CHIEUCH-WI-KIYEOKSIOS -0xAE6A 0xCDED # HANGUL SYLLABLE CHIEUCH-WI-NIEUNCIEUC -0xAE6B 0xCDEE # HANGUL SYLLABLE CHIEUCH-WI-NIEUNHIEUH -0xAE6C 0xCDEF # HANGUL SYLLABLE CHIEUCH-WI-TIKEUT -0xAE6D 0xCDF1 # HANGUL SYLLABLE CHIEUCH-WI-RIEULKIYEOK -0xAE6E 0xCDF2 # HANGUL SYLLABLE CHIEUCH-WI-RIEULMIEUM -0xAE6F 0xCDF3 # HANGUL SYLLABLE CHIEUCH-WI-RIEULPIEUP -0xAE70 0xCDF4 # HANGUL SYLLABLE CHIEUCH-WI-RIEULSIOS -0xAE71 0xCDF5 # HANGUL SYLLABLE CHIEUCH-WI-RIEULTHIEUTH -0xAE72 0xCDF6 # HANGUL SYLLABLE CHIEUCH-WI-RIEULPHIEUPH -0xAE73 0xCDF7 # HANGUL SYLLABLE CHIEUCH-WI-RIEULHIEUH -0xAE74 0xCDFA # HANGUL SYLLABLE CHIEUCH-WI-PIEUPSIOS -0xAE75 0xCDFC # HANGUL SYLLABLE CHIEUCH-WI-SSANGSIOS -0xAE76 0xCDFE # HANGUL SYLLABLE CHIEUCH-WI-CIEUC -0xAE77 0xCDFF # HANGUL SYLLABLE CHIEUCH-WI-CHIEUCH -0xAE78 0xCE00 # HANGUL SYLLABLE CHIEUCH-WI-KHIEUKH -0xAE79 0xCE01 # HANGUL SYLLABLE CHIEUCH-WI-THIEUTH -0xAE7A 0xCE02 # HANGUL SYLLABLE CHIEUCH-WI-PHIEUPH -0xAE81 0xCE03 # HANGUL SYLLABLE CHIEUCH-WI-HIEUH -0xAE82 0xCE05 # HANGUL SYLLABLE CHIEUCH-YU-KIYEOK -0xAE83 0xCE06 # HANGUL SYLLABLE CHIEUCH-YU-SSANGKIYEOK -0xAE84 0xCE07 # HANGUL SYLLABLE CHIEUCH-YU-KIYEOKSIOS -0xAE85 0xCE09 # HANGUL SYLLABLE CHIEUCH-YU-NIEUNCIEUC -0xAE86 0xCE0A # HANGUL SYLLABLE CHIEUCH-YU-NIEUNHIEUH -0xAE87 0xCE0B # HANGUL SYLLABLE CHIEUCH-YU-TIKEUT -0xAE88 0xCE0D # HANGUL SYLLABLE CHIEUCH-YU-RIEULKIYEOK -0xAE89 0xCE0E # HANGUL SYLLABLE CHIEUCH-YU-RIEULMIEUM -0xAE8A 0xCE0F # HANGUL SYLLABLE CHIEUCH-YU-RIEULPIEUP -0xAE8B 0xCE10 # HANGUL SYLLABLE CHIEUCH-YU-RIEULSIOS -0xAE8C 0xCE11 # HANGUL SYLLABLE CHIEUCH-YU-RIEULTHIEUTH -0xAE8D 0xCE12 # HANGUL SYLLABLE CHIEUCH-YU-RIEULPHIEUPH -0xAE8E 0xCE13 # HANGUL SYLLABLE CHIEUCH-YU-RIEULHIEUH -0xAE8F 0xCE15 # HANGUL SYLLABLE CHIEUCH-YU-PIEUP -0xAE90 0xCE16 # HANGUL SYLLABLE CHIEUCH-YU-PIEUPSIOS -0xAE91 0xCE17 # HANGUL SYLLABLE CHIEUCH-YU-SIOS -0xAE92 0xCE18 # HANGUL SYLLABLE CHIEUCH-YU-SSANGSIOS -0xAE93 0xCE1A # HANGUL SYLLABLE CHIEUCH-YU-CIEUC -0xAE94 0xCE1B # HANGUL SYLLABLE CHIEUCH-YU-CHIEUCH -0xAE95 0xCE1C # HANGUL SYLLABLE CHIEUCH-YU-KHIEUKH -0xAE96 0xCE1D # HANGUL SYLLABLE CHIEUCH-YU-THIEUTH -0xAE97 0xCE1E # HANGUL SYLLABLE CHIEUCH-YU-PHIEUPH -0xAE98 0xCE1F # HANGUL SYLLABLE CHIEUCH-YU-HIEUH -0xAE99 0xCE22 # HANGUL SYLLABLE CHIEUCH-EU-SSANGKIYEOK -0xAE9A 0xCE23 # HANGUL SYLLABLE CHIEUCH-EU-KIYEOKSIOS -0xAE9B 0xCE25 # HANGUL SYLLABLE CHIEUCH-EU-NIEUNCIEUC -0xAE9C 0xCE26 # HANGUL SYLLABLE CHIEUCH-EU-NIEUNHIEUH -0xAE9D 0xCE27 # HANGUL SYLLABLE CHIEUCH-EU-TIKEUT -0xAE9E 0xCE29 # HANGUL SYLLABLE CHIEUCH-EU-RIEULKIYEOK -0xAE9F 0xCE2A # HANGUL SYLLABLE CHIEUCH-EU-RIEULMIEUM -0xAEA0 0xCE2B # HANGUL SYLLABLE CHIEUCH-EU-RIEULPIEUP -0xAF41 0xCE2C # HANGUL SYLLABLE CHIEUCH-EU-RIEULSIOS -0xAF42 0xCE2D # HANGUL SYLLABLE CHIEUCH-EU-RIEULTHIEUTH -0xAF43 0xCE2E # HANGUL SYLLABLE CHIEUCH-EU-RIEULPHIEUPH -0xAF44 0xCE2F # HANGUL SYLLABLE CHIEUCH-EU-RIEULHIEUH -0xAF45 0xCE32 # HANGUL SYLLABLE CHIEUCH-EU-PIEUPSIOS -0xAF46 0xCE34 # HANGUL SYLLABLE CHIEUCH-EU-SSANGSIOS -0xAF47 0xCE36 # HANGUL SYLLABLE CHIEUCH-EU-CIEUC -0xAF48 0xCE37 # HANGUL SYLLABLE CHIEUCH-EU-CHIEUCH -0xAF49 0xCE38 # HANGUL SYLLABLE CHIEUCH-EU-KHIEUKH -0xAF4A 0xCE39 # HANGUL SYLLABLE CHIEUCH-EU-THIEUTH -0xAF4B 0xCE3A # HANGUL SYLLABLE CHIEUCH-EU-PHIEUPH -0xAF4C 0xCE3B # HANGUL SYLLABLE CHIEUCH-EU-HIEUH -0xAF4D 0xCE3C # HANGUL SYLLABLE CHIEUCH-YI -0xAF4E 0xCE3D # HANGUL SYLLABLE CHIEUCH-YI-KIYEOK -0xAF4F 0xCE3E # HANGUL SYLLABLE CHIEUCH-YI-SSANGKIYEOK -0xAF50 0xCE3F # HANGUL SYLLABLE CHIEUCH-YI-KIYEOKSIOS -0xAF51 0xCE40 # HANGUL SYLLABLE CHIEUCH-YI-NIEUN -0xAF52 0xCE41 # HANGUL SYLLABLE CHIEUCH-YI-NIEUNCIEUC -0xAF53 0xCE42 # HANGUL SYLLABLE CHIEUCH-YI-NIEUNHIEUH -0xAF54 0xCE43 # HANGUL SYLLABLE CHIEUCH-YI-TIKEUT -0xAF55 0xCE44 # HANGUL SYLLABLE CHIEUCH-YI-RIEUL -0xAF56 0xCE45 # HANGUL SYLLABLE CHIEUCH-YI-RIEULKIYEOK -0xAF57 0xCE46 # HANGUL SYLLABLE CHIEUCH-YI-RIEULMIEUM -0xAF58 0xCE47 # HANGUL SYLLABLE CHIEUCH-YI-RIEULPIEUP -0xAF59 0xCE48 # HANGUL SYLLABLE CHIEUCH-YI-RIEULSIOS -0xAF5A 0xCE49 # HANGUL SYLLABLE CHIEUCH-YI-RIEULTHIEUTH -0xAF61 0xCE4A # HANGUL SYLLABLE CHIEUCH-YI-RIEULPHIEUPH -0xAF62 0xCE4B # HANGUL SYLLABLE CHIEUCH-YI-RIEULHIEUH -0xAF63 0xCE4C # HANGUL SYLLABLE CHIEUCH-YI-MIEUM -0xAF64 0xCE4D # HANGUL SYLLABLE CHIEUCH-YI-PIEUP -0xAF65 0xCE4E # HANGUL SYLLABLE CHIEUCH-YI-PIEUPSIOS -0xAF66 0xCE4F # HANGUL SYLLABLE CHIEUCH-YI-SIOS -0xAF67 0xCE50 # HANGUL SYLLABLE CHIEUCH-YI-SSANGSIOS -0xAF68 0xCE51 # HANGUL SYLLABLE CHIEUCH-YI-IEUNG -0xAF69 0xCE52 # HANGUL SYLLABLE CHIEUCH-YI-CIEUC -0xAF6A 0xCE53 # HANGUL SYLLABLE CHIEUCH-YI-CHIEUCH -0xAF6B 0xCE54 # HANGUL SYLLABLE CHIEUCH-YI-KHIEUKH -0xAF6C 0xCE55 # HANGUL SYLLABLE CHIEUCH-YI-THIEUTH -0xAF6D 0xCE56 # HANGUL SYLLABLE CHIEUCH-YI-PHIEUPH -0xAF6E 0xCE57 # HANGUL SYLLABLE CHIEUCH-YI-HIEUH -0xAF6F 0xCE5A # HANGUL SYLLABLE CHIEUCH-I-SSANGKIYEOK -0xAF70 0xCE5B # HANGUL SYLLABLE CHIEUCH-I-KIYEOKSIOS -0xAF71 0xCE5D # HANGUL SYLLABLE CHIEUCH-I-NIEUNCIEUC -0xAF72 0xCE5E # HANGUL SYLLABLE CHIEUCH-I-NIEUNHIEUH -0xAF73 0xCE62 # HANGUL SYLLABLE CHIEUCH-I-RIEULMIEUM -0xAF74 0xCE63 # HANGUL SYLLABLE CHIEUCH-I-RIEULPIEUP -0xAF75 0xCE64 # HANGUL SYLLABLE CHIEUCH-I-RIEULSIOS -0xAF76 0xCE65 # HANGUL SYLLABLE CHIEUCH-I-RIEULTHIEUTH -0xAF77 0xCE66 # HANGUL SYLLABLE CHIEUCH-I-RIEULPHIEUPH -0xAF78 0xCE67 # HANGUL SYLLABLE CHIEUCH-I-RIEULHIEUH -0xAF79 0xCE6A # HANGUL SYLLABLE CHIEUCH-I-PIEUPSIOS -0xAF7A 0xCE6C # HANGUL SYLLABLE CHIEUCH-I-SSANGSIOS -0xAF81 0xCE6E # HANGUL SYLLABLE CHIEUCH-I-CIEUC -0xAF82 0xCE6F # HANGUL SYLLABLE CHIEUCH-I-CHIEUCH -0xAF83 0xCE70 # HANGUL SYLLABLE CHIEUCH-I-KHIEUKH -0xAF84 0xCE71 # HANGUL SYLLABLE CHIEUCH-I-THIEUTH -0xAF85 0xCE72 # HANGUL SYLLABLE CHIEUCH-I-PHIEUPH -0xAF86 0xCE73 # HANGUL SYLLABLE CHIEUCH-I-HIEUH -0xAF87 0xCE76 # HANGUL SYLLABLE KHIEUKH-A-SSANGKIYEOK -0xAF88 0xCE77 # HANGUL SYLLABLE KHIEUKH-A-KIYEOKSIOS -0xAF89 0xCE79 # HANGUL SYLLABLE KHIEUKH-A-NIEUNCIEUC -0xAF8A 0xCE7A # HANGUL SYLLABLE KHIEUKH-A-NIEUNHIEUH -0xAF8B 0xCE7B # HANGUL SYLLABLE KHIEUKH-A-TIKEUT -0xAF8C 0xCE7D # HANGUL SYLLABLE KHIEUKH-A-RIEULKIYEOK -0xAF8D 0xCE7E # HANGUL SYLLABLE KHIEUKH-A-RIEULMIEUM -0xAF8E 0xCE7F # HANGUL SYLLABLE KHIEUKH-A-RIEULPIEUP -0xAF8F 0xCE80 # HANGUL SYLLABLE KHIEUKH-A-RIEULSIOS -0xAF90 0xCE81 # HANGUL SYLLABLE KHIEUKH-A-RIEULTHIEUTH -0xAF91 0xCE82 # HANGUL SYLLABLE KHIEUKH-A-RIEULPHIEUPH -0xAF92 0xCE83 # HANGUL SYLLABLE KHIEUKH-A-RIEULHIEUH -0xAF93 0xCE86 # HANGUL SYLLABLE KHIEUKH-A-PIEUPSIOS -0xAF94 0xCE88 # HANGUL SYLLABLE KHIEUKH-A-SSANGSIOS -0xAF95 0xCE8A # HANGUL SYLLABLE KHIEUKH-A-CIEUC -0xAF96 0xCE8B # HANGUL SYLLABLE KHIEUKH-A-CHIEUCH -0xAF97 0xCE8C # HANGUL SYLLABLE KHIEUKH-A-KHIEUKH -0xAF98 0xCE8D # HANGUL SYLLABLE KHIEUKH-A-THIEUTH -0xAF99 0xCE8E # HANGUL SYLLABLE KHIEUKH-A-PHIEUPH -0xAF9A 0xCE8F # HANGUL SYLLABLE KHIEUKH-A-HIEUH -0xAF9B 0xCE92 # HANGUL SYLLABLE KHIEUKH-AE-SSANGKIYEOK -0xAF9C 0xCE93 # HANGUL SYLLABLE KHIEUKH-AE-KIYEOKSIOS -0xAF9D 0xCE95 # HANGUL SYLLABLE KHIEUKH-AE-NIEUNCIEUC -0xAF9E 0xCE96 # HANGUL SYLLABLE KHIEUKH-AE-NIEUNHIEUH -0xAF9F 0xCE97 # HANGUL SYLLABLE KHIEUKH-AE-TIKEUT -0xAFA0 0xCE99 # HANGUL SYLLABLE KHIEUKH-AE-RIEULKIYEOK -0xB041 0xCE9A # HANGUL SYLLABLE KHIEUKH-AE-RIEULMIEUM -0xB042 0xCE9B # HANGUL SYLLABLE KHIEUKH-AE-RIEULPIEUP -0xB043 0xCE9C # HANGUL SYLLABLE KHIEUKH-AE-RIEULSIOS -0xB044 0xCE9D # HANGUL SYLLABLE KHIEUKH-AE-RIEULTHIEUTH -0xB045 0xCE9E # HANGUL SYLLABLE KHIEUKH-AE-RIEULPHIEUPH -0xB046 0xCE9F # HANGUL SYLLABLE KHIEUKH-AE-RIEULHIEUH -0xB047 0xCEA2 # HANGUL SYLLABLE KHIEUKH-AE-PIEUPSIOS -0xB048 0xCEA6 # HANGUL SYLLABLE KHIEUKH-AE-CIEUC -0xB049 0xCEA7 # HANGUL SYLLABLE KHIEUKH-AE-CHIEUCH -0xB04A 0xCEA8 # HANGUL SYLLABLE KHIEUKH-AE-KHIEUKH -0xB04B 0xCEA9 # HANGUL SYLLABLE KHIEUKH-AE-THIEUTH -0xB04C 0xCEAA # HANGUL SYLLABLE KHIEUKH-AE-PHIEUPH -0xB04D 0xCEAB # HANGUL SYLLABLE KHIEUKH-AE-HIEUH -0xB04E 0xCEAE # HANGUL SYLLABLE KHIEUKH-YA-SSANGKIYEOK -0xB04F 0xCEAF # HANGUL SYLLABLE KHIEUKH-YA-KIYEOKSIOS -0xB050 0xCEB0 # HANGUL SYLLABLE KHIEUKH-YA-NIEUN -0xB051 0xCEB1 # HANGUL SYLLABLE KHIEUKH-YA-NIEUNCIEUC -0xB052 0xCEB2 # HANGUL SYLLABLE KHIEUKH-YA-NIEUNHIEUH -0xB053 0xCEB3 # HANGUL SYLLABLE KHIEUKH-YA-TIKEUT -0xB054 0xCEB4 # HANGUL SYLLABLE KHIEUKH-YA-RIEUL -0xB055 0xCEB5 # HANGUL SYLLABLE KHIEUKH-YA-RIEULKIYEOK -0xB056 0xCEB6 # HANGUL SYLLABLE KHIEUKH-YA-RIEULMIEUM -0xB057 0xCEB7 # HANGUL SYLLABLE KHIEUKH-YA-RIEULPIEUP -0xB058 0xCEB8 # HANGUL SYLLABLE KHIEUKH-YA-RIEULSIOS -0xB059 0xCEB9 # HANGUL SYLLABLE KHIEUKH-YA-RIEULTHIEUTH -0xB05A 0xCEBA # HANGUL SYLLABLE KHIEUKH-YA-RIEULPHIEUPH -0xB061 0xCEBB # HANGUL SYLLABLE KHIEUKH-YA-RIEULHIEUH -0xB062 0xCEBC # HANGUL SYLLABLE KHIEUKH-YA-MIEUM -0xB063 0xCEBD # HANGUL SYLLABLE KHIEUKH-YA-PIEUP -0xB064 0xCEBE # HANGUL SYLLABLE KHIEUKH-YA-PIEUPSIOS -0xB065 0xCEBF # HANGUL SYLLABLE KHIEUKH-YA-SIOS -0xB066 0xCEC0 # HANGUL SYLLABLE KHIEUKH-YA-SSANGSIOS -0xB067 0xCEC2 # HANGUL SYLLABLE KHIEUKH-YA-CIEUC -0xB068 0xCEC3 # HANGUL SYLLABLE KHIEUKH-YA-CHIEUCH -0xB069 0xCEC4 # HANGUL SYLLABLE KHIEUKH-YA-KHIEUKH -0xB06A 0xCEC5 # HANGUL SYLLABLE KHIEUKH-YA-THIEUTH -0xB06B 0xCEC6 # HANGUL SYLLABLE KHIEUKH-YA-PHIEUPH -0xB06C 0xCEC7 # HANGUL SYLLABLE KHIEUKH-YA-HIEUH -0xB06D 0xCEC8 # HANGUL SYLLABLE KHIEUKH-YAE -0xB06E 0xCEC9 # HANGUL SYLLABLE KHIEUKH-YAE-KIYEOK -0xB06F 0xCECA # HANGUL SYLLABLE KHIEUKH-YAE-SSANGKIYEOK -0xB070 0xCECB # HANGUL SYLLABLE KHIEUKH-YAE-KIYEOKSIOS -0xB071 0xCECC # HANGUL SYLLABLE KHIEUKH-YAE-NIEUN -0xB072 0xCECD # HANGUL SYLLABLE KHIEUKH-YAE-NIEUNCIEUC -0xB073 0xCECE # HANGUL SYLLABLE KHIEUKH-YAE-NIEUNHIEUH -0xB074 0xCECF # HANGUL SYLLABLE KHIEUKH-YAE-TIKEUT -0xB075 0xCED0 # HANGUL SYLLABLE KHIEUKH-YAE-RIEUL -0xB076 0xCED1 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULKIYEOK -0xB077 0xCED2 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULMIEUM -0xB078 0xCED3 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULPIEUP -0xB079 0xCED4 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULSIOS -0xB07A 0xCED5 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULTHIEUTH -0xB081 0xCED6 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULPHIEUPH -0xB082 0xCED7 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULHIEUH -0xB083 0xCED8 # HANGUL SYLLABLE KHIEUKH-YAE-MIEUM -0xB084 0xCED9 # HANGUL SYLLABLE KHIEUKH-YAE-PIEUP -0xB085 0xCEDA # HANGUL SYLLABLE KHIEUKH-YAE-PIEUPSIOS -0xB086 0xCEDB # HANGUL SYLLABLE KHIEUKH-YAE-SIOS -0xB087 0xCEDC # HANGUL SYLLABLE KHIEUKH-YAE-SSANGSIOS -0xB088 0xCEDD # HANGUL SYLLABLE KHIEUKH-YAE-IEUNG -0xB089 0xCEDE # HANGUL SYLLABLE KHIEUKH-YAE-CIEUC -0xB08A 0xCEDF # HANGUL SYLLABLE KHIEUKH-YAE-CHIEUCH -0xB08B 0xCEE0 # HANGUL SYLLABLE KHIEUKH-YAE-KHIEUKH -0xB08C 0xCEE1 # HANGUL SYLLABLE KHIEUKH-YAE-THIEUTH -0xB08D 0xCEE2 # HANGUL SYLLABLE KHIEUKH-YAE-PHIEUPH -0xB08E 0xCEE3 # HANGUL SYLLABLE KHIEUKH-YAE-HIEUH -0xB08F 0xCEE6 # HANGUL SYLLABLE KHIEUKH-EO-SSANGKIYEOK -0xB090 0xCEE7 # HANGUL SYLLABLE KHIEUKH-EO-KIYEOKSIOS -0xB091 0xCEE9 # HANGUL SYLLABLE KHIEUKH-EO-NIEUNCIEUC -0xB092 0xCEEA # HANGUL SYLLABLE KHIEUKH-EO-NIEUNHIEUH -0xB093 0xCEED # HANGUL SYLLABLE KHIEUKH-EO-RIEULKIYEOK -0xB094 0xCEEE # HANGUL SYLLABLE KHIEUKH-EO-RIEULMIEUM -0xB095 0xCEEF # HANGUL SYLLABLE KHIEUKH-EO-RIEULPIEUP -0xB096 0xCEF0 # HANGUL SYLLABLE KHIEUKH-EO-RIEULSIOS -0xB097 0xCEF1 # HANGUL SYLLABLE KHIEUKH-EO-RIEULTHIEUTH -0xB098 0xCEF2 # HANGUL SYLLABLE KHIEUKH-EO-RIEULPHIEUPH -0xB099 0xCEF3 # HANGUL SYLLABLE KHIEUKH-EO-RIEULHIEUH -0xB09A 0xCEF6 # HANGUL SYLLABLE KHIEUKH-EO-PIEUPSIOS -0xB09B 0xCEFA # HANGUL SYLLABLE KHIEUKH-EO-CIEUC -0xB09C 0xCEFB # HANGUL SYLLABLE KHIEUKH-EO-CHIEUCH -0xB09D 0xCEFC # HANGUL SYLLABLE KHIEUKH-EO-KHIEUKH -0xB09E 0xCEFD # HANGUL SYLLABLE KHIEUKH-EO-THIEUTH -0xB09F 0xCEFE # HANGUL SYLLABLE KHIEUKH-EO-PHIEUPH -0xB0A0 0xCEFF # HANGUL SYLLABLE KHIEUKH-EO-HIEUH -0xB0A1 0xAC00 # HANGUL SYLLABLE KIYEOK-A -0xB0A2 0xAC01 # HANGUL SYLLABLE KIYEOK-A-KIYEOK -0xB0A3 0xAC04 # HANGUL SYLLABLE KIYEOK-A-NIEUN -0xB0A4 0xAC07 # HANGUL SYLLABLE KIYEOK-A-TIKEUT -0xB0A5 0xAC08 # HANGUL SYLLABLE KIYEOK-A-RIEUL -0xB0A6 0xAC09 # HANGUL SYLLABLE KIYEOK-A-RIEULKIYEOK -0xB0A7 0xAC0A # HANGUL SYLLABLE KIYEOK-A-RIEULMIEUM -0xB0A8 0xAC10 # HANGUL SYLLABLE KIYEOK-A-MIEUM -0xB0A9 0xAC11 # HANGUL SYLLABLE KIYEOK-A-PIEUP -0xB0AA 0xAC12 # HANGUL SYLLABLE KIYEOK-A-PIEUPSIOS -0xB0AB 0xAC13 # HANGUL SYLLABLE KIYEOK-A-SIOS -0xB0AC 0xAC14 # HANGUL SYLLABLE KIYEOK-A-SSANGSIOS -0xB0AD 0xAC15 # HANGUL SYLLABLE KIYEOK-A-IEUNG -0xB0AE 0xAC16 # HANGUL SYLLABLE KIYEOK-A-CIEUC -0xB0AF 0xAC17 # HANGUL SYLLABLE KIYEOK-A-CHIEUCH -0xB0B0 0xAC19 # HANGUL SYLLABLE KIYEOK-A-THIEUTH -0xB0B1 0xAC1A # HANGUL SYLLABLE KIYEOK-A-PHIEUPH -0xB0B2 0xAC1B # HANGUL SYLLABLE KIYEOK-A-HIEUH -0xB0B3 0xAC1C # HANGUL SYLLABLE KIYEOK-AE -0xB0B4 0xAC1D # HANGUL SYLLABLE KIYEOK-AE-KIYEOK -0xB0B5 0xAC20 # HANGUL SYLLABLE KIYEOK-AE-NIEUN -0xB0B6 0xAC24 # HANGUL SYLLABLE KIYEOK-AE-RIEUL -0xB0B7 0xAC2C # HANGUL SYLLABLE KIYEOK-AE-MIEUM -0xB0B8 0xAC2D # HANGUL SYLLABLE KIYEOK-AE-PIEUP -0xB0B9 0xAC2F # HANGUL SYLLABLE KIYEOK-AE-SIOS -0xB0BA 0xAC30 # HANGUL SYLLABLE KIYEOK-AE-SSANGSIOS -0xB0BB 0xAC31 # HANGUL SYLLABLE KIYEOK-AE-IEUNG -0xB0BC 0xAC38 # HANGUL SYLLABLE KIYEOK-YA -0xB0BD 0xAC39 # HANGUL SYLLABLE KIYEOK-YA-KIYEOK -0xB0BE 0xAC3C # HANGUL SYLLABLE KIYEOK-YA-NIEUN -0xB0BF 0xAC40 # HANGUL SYLLABLE KIYEOK-YA-RIEUL -0xB0C0 0xAC4B # HANGUL SYLLABLE KIYEOK-YA-SIOS -0xB0C1 0xAC4D # HANGUL SYLLABLE KIYEOK-YA-IEUNG -0xB0C2 0xAC54 # HANGUL SYLLABLE KIYEOK-YAE -0xB0C3 0xAC58 # HANGUL SYLLABLE KIYEOK-YAE-NIEUN -0xB0C4 0xAC5C # HANGUL SYLLABLE KIYEOK-YAE-RIEUL -0xB0C5 0xAC70 # HANGUL SYLLABLE KIYEOK-EO -0xB0C6 0xAC71 # HANGUL SYLLABLE KIYEOK-EO-KIYEOK -0xB0C7 0xAC74 # HANGUL SYLLABLE KIYEOK-EO-NIEUN -0xB0C8 0xAC77 # HANGUL SYLLABLE KIYEOK-EO-TIKEUT -0xB0C9 0xAC78 # HANGUL SYLLABLE KIYEOK-EO-RIEUL -0xB0CA 0xAC7A # HANGUL SYLLABLE KIYEOK-EO-RIEULMIEUM -0xB0CB 0xAC80 # HANGUL SYLLABLE KIYEOK-EO-MIEUM -0xB0CC 0xAC81 # HANGUL SYLLABLE KIYEOK-EO-PIEUP -0xB0CD 0xAC83 # HANGUL SYLLABLE KIYEOK-EO-SIOS -0xB0CE 0xAC84 # HANGUL SYLLABLE KIYEOK-EO-SSANGSIOS -0xB0CF 0xAC85 # HANGUL SYLLABLE KIYEOK-EO-IEUNG -0xB0D0 0xAC86 # HANGUL SYLLABLE KIYEOK-EO-CIEUC -0xB0D1 0xAC89 # HANGUL SYLLABLE KIYEOK-EO-THIEUTH -0xB0D2 0xAC8A # HANGUL SYLLABLE KIYEOK-EO-PHIEUPH -0xB0D3 0xAC8B # HANGUL SYLLABLE KIYEOK-EO-HIEUH -0xB0D4 0xAC8C # HANGUL SYLLABLE KIYEOK-E -0xB0D5 0xAC90 # HANGUL SYLLABLE KIYEOK-E-NIEUN -0xB0D6 0xAC94 # HANGUL SYLLABLE KIYEOK-E-RIEUL -0xB0D7 0xAC9C # HANGUL SYLLABLE KIYEOK-E-MIEUM -0xB0D8 0xAC9D # HANGUL SYLLABLE KIYEOK-E-PIEUP -0xB0D9 0xAC9F # HANGUL SYLLABLE KIYEOK-E-SIOS -0xB0DA 0xACA0 # HANGUL SYLLABLE KIYEOK-E-SSANGSIOS -0xB0DB 0xACA1 # HANGUL SYLLABLE KIYEOK-E-IEUNG -0xB0DC 0xACA8 # HANGUL SYLLABLE KIYEOK-YEO -0xB0DD 0xACA9 # HANGUL SYLLABLE KIYEOK-YEO-KIYEOK -0xB0DE 0xACAA # HANGUL SYLLABLE KIYEOK-YEO-SSANGKIYEOK -0xB0DF 0xACAC # HANGUL SYLLABLE KIYEOK-YEO-NIEUN -0xB0E0 0xACAF # HANGUL SYLLABLE KIYEOK-YEO-TIKEUT -0xB0E1 0xACB0 # HANGUL SYLLABLE KIYEOK-YEO-RIEUL -0xB0E2 0xACB8 # HANGUL SYLLABLE KIYEOK-YEO-MIEUM -0xB0E3 0xACB9 # HANGUL SYLLABLE KIYEOK-YEO-PIEUP -0xB0E4 0xACBB # HANGUL SYLLABLE KIYEOK-YEO-SIOS -0xB0E5 0xACBC # HANGUL SYLLABLE KIYEOK-YEO-SSANGSIOS -0xB0E6 0xACBD # HANGUL SYLLABLE KIYEOK-YEO-IEUNG -0xB0E7 0xACC1 # HANGUL SYLLABLE KIYEOK-YEO-THIEUTH -0xB0E8 0xACC4 # HANGUL SYLLABLE KIYEOK-YE -0xB0E9 0xACC8 # HANGUL SYLLABLE KIYEOK-YE-NIEUN -0xB0EA 0xACCC # HANGUL SYLLABLE KIYEOK-YE-RIEUL -0xB0EB 0xACD5 # HANGUL SYLLABLE KIYEOK-YE-PIEUP -0xB0EC 0xACD7 # HANGUL SYLLABLE KIYEOK-YE-SIOS -0xB0ED 0xACE0 # HANGUL SYLLABLE KIYEOK-O -0xB0EE 0xACE1 # HANGUL SYLLABLE KIYEOK-O-KIYEOK -0xB0EF 0xACE4 # HANGUL SYLLABLE KIYEOK-O-NIEUN -0xB0F0 0xACE7 # HANGUL SYLLABLE KIYEOK-O-TIKEUT -0xB0F1 0xACE8 # HANGUL SYLLABLE KIYEOK-O-RIEUL -0xB0F2 0xACEA # HANGUL SYLLABLE KIYEOK-O-RIEULMIEUM -0xB0F3 0xACEC # HANGUL SYLLABLE KIYEOK-O-RIEULSIOS -0xB0F4 0xACEF # HANGUL SYLLABLE KIYEOK-O-RIEULHIEUH -0xB0F5 0xACF0 # HANGUL SYLLABLE KIYEOK-O-MIEUM -0xB0F6 0xACF1 # HANGUL SYLLABLE KIYEOK-O-PIEUP -0xB0F7 0xACF3 # HANGUL SYLLABLE KIYEOK-O-SIOS -0xB0F8 0xACF5 # HANGUL SYLLABLE KIYEOK-O-IEUNG -0xB0F9 0xACF6 # HANGUL SYLLABLE KIYEOK-O-CIEUC -0xB0FA 0xACFC # HANGUL SYLLABLE KIYEOK-WA -0xB0FB 0xACFD # HANGUL SYLLABLE KIYEOK-WA-KIYEOK -0xB0FC 0xAD00 # HANGUL SYLLABLE KIYEOK-WA-NIEUN -0xB0FD 0xAD04 # HANGUL SYLLABLE KIYEOK-WA-RIEUL -0xB0FE 0xAD06 # HANGUL SYLLABLE KIYEOK-WA-RIEULMIEUM -0xB141 0xCF02 # HANGUL SYLLABLE KHIEUKH-E-SSANGKIYEOK -0xB142 0xCF03 # HANGUL SYLLABLE KHIEUKH-E-KIYEOKSIOS -0xB143 0xCF05 # HANGUL SYLLABLE KHIEUKH-E-NIEUNCIEUC -0xB144 0xCF06 # HANGUL SYLLABLE KHIEUKH-E-NIEUNHIEUH -0xB145 0xCF07 # HANGUL SYLLABLE KHIEUKH-E-TIKEUT -0xB146 0xCF09 # HANGUL SYLLABLE KHIEUKH-E-RIEULKIYEOK -0xB147 0xCF0A # HANGUL SYLLABLE KHIEUKH-E-RIEULMIEUM -0xB148 0xCF0B # HANGUL SYLLABLE KHIEUKH-E-RIEULPIEUP -0xB149 0xCF0C # HANGUL SYLLABLE KHIEUKH-E-RIEULSIOS -0xB14A 0xCF0D # HANGUL SYLLABLE KHIEUKH-E-RIEULTHIEUTH -0xB14B 0xCF0E # HANGUL SYLLABLE KHIEUKH-E-RIEULPHIEUPH -0xB14C 0xCF0F # HANGUL SYLLABLE KHIEUKH-E-RIEULHIEUH -0xB14D 0xCF12 # HANGUL SYLLABLE KHIEUKH-E-PIEUPSIOS -0xB14E 0xCF14 # HANGUL SYLLABLE KHIEUKH-E-SSANGSIOS -0xB14F 0xCF16 # HANGUL SYLLABLE KHIEUKH-E-CIEUC -0xB150 0xCF17 # HANGUL SYLLABLE KHIEUKH-E-CHIEUCH -0xB151 0xCF18 # HANGUL SYLLABLE KHIEUKH-E-KHIEUKH -0xB152 0xCF19 # HANGUL SYLLABLE KHIEUKH-E-THIEUTH -0xB153 0xCF1A # HANGUL SYLLABLE KHIEUKH-E-PHIEUPH -0xB154 0xCF1B # HANGUL SYLLABLE KHIEUKH-E-HIEUH -0xB155 0xCF1D # HANGUL SYLLABLE KHIEUKH-YEO-KIYEOK -0xB156 0xCF1E # HANGUL SYLLABLE KHIEUKH-YEO-SSANGKIYEOK -0xB157 0xCF1F # HANGUL SYLLABLE KHIEUKH-YEO-KIYEOKSIOS -0xB158 0xCF21 # HANGUL SYLLABLE KHIEUKH-YEO-NIEUNCIEUC -0xB159 0xCF22 # HANGUL SYLLABLE KHIEUKH-YEO-NIEUNHIEUH -0xB15A 0xCF23 # HANGUL SYLLABLE KHIEUKH-YEO-TIKEUT -0xB161 0xCF25 # HANGUL SYLLABLE KHIEUKH-YEO-RIEULKIYEOK -0xB162 0xCF26 # HANGUL SYLLABLE KHIEUKH-YEO-RIEULMIEUM -0xB163 0xCF27 # HANGUL SYLLABLE KHIEUKH-YEO-RIEULPIEUP -0xB164 0xCF28 # HANGUL SYLLABLE KHIEUKH-YEO-RIEULSIOS -0xB165 0xCF29 # HANGUL SYLLABLE KHIEUKH-YEO-RIEULTHIEUTH -0xB166 0xCF2A # HANGUL SYLLABLE KHIEUKH-YEO-RIEULPHIEUPH -0xB167 0xCF2B # HANGUL SYLLABLE KHIEUKH-YEO-RIEULHIEUH -0xB168 0xCF2E # HANGUL SYLLABLE KHIEUKH-YEO-PIEUPSIOS -0xB169 0xCF32 # HANGUL SYLLABLE KHIEUKH-YEO-CIEUC -0xB16A 0xCF33 # HANGUL SYLLABLE KHIEUKH-YEO-CHIEUCH -0xB16B 0xCF34 # HANGUL SYLLABLE KHIEUKH-YEO-KHIEUKH -0xB16C 0xCF35 # HANGUL SYLLABLE KHIEUKH-YEO-THIEUTH -0xB16D 0xCF36 # HANGUL SYLLABLE KHIEUKH-YEO-PHIEUPH -0xB16E 0xCF37 # HANGUL SYLLABLE KHIEUKH-YEO-HIEUH -0xB16F 0xCF39 # HANGUL SYLLABLE KHIEUKH-YE-KIYEOK -0xB170 0xCF3A # HANGUL SYLLABLE KHIEUKH-YE-SSANGKIYEOK -0xB171 0xCF3B # HANGUL SYLLABLE KHIEUKH-YE-KIYEOKSIOS -0xB172 0xCF3C # HANGUL SYLLABLE KHIEUKH-YE-NIEUN -0xB173 0xCF3D # HANGUL SYLLABLE KHIEUKH-YE-NIEUNCIEUC -0xB174 0xCF3E # HANGUL SYLLABLE KHIEUKH-YE-NIEUNHIEUH -0xB175 0xCF3F # HANGUL SYLLABLE KHIEUKH-YE-TIKEUT -0xB176 0xCF40 # HANGUL SYLLABLE KHIEUKH-YE-RIEUL -0xB177 0xCF41 # HANGUL SYLLABLE KHIEUKH-YE-RIEULKIYEOK -0xB178 0xCF42 # HANGUL SYLLABLE KHIEUKH-YE-RIEULMIEUM -0xB179 0xCF43 # HANGUL SYLLABLE KHIEUKH-YE-RIEULPIEUP -0xB17A 0xCF44 # HANGUL SYLLABLE KHIEUKH-YE-RIEULSIOS -0xB181 0xCF45 # HANGUL SYLLABLE KHIEUKH-YE-RIEULTHIEUTH -0xB182 0xCF46 # HANGUL SYLLABLE KHIEUKH-YE-RIEULPHIEUPH -0xB183 0xCF47 # HANGUL SYLLABLE KHIEUKH-YE-RIEULHIEUH -0xB184 0xCF48 # HANGUL SYLLABLE KHIEUKH-YE-MIEUM -0xB185 0xCF49 # HANGUL SYLLABLE KHIEUKH-YE-PIEUP -0xB186 0xCF4A # HANGUL SYLLABLE KHIEUKH-YE-PIEUPSIOS -0xB187 0xCF4B # HANGUL SYLLABLE KHIEUKH-YE-SIOS -0xB188 0xCF4C # HANGUL SYLLABLE KHIEUKH-YE-SSANGSIOS -0xB189 0xCF4D # HANGUL SYLLABLE KHIEUKH-YE-IEUNG -0xB18A 0xCF4E # HANGUL SYLLABLE KHIEUKH-YE-CIEUC -0xB18B 0xCF4F # HANGUL SYLLABLE KHIEUKH-YE-CHIEUCH -0xB18C 0xCF50 # HANGUL SYLLABLE KHIEUKH-YE-KHIEUKH -0xB18D 0xCF51 # HANGUL SYLLABLE KHIEUKH-YE-THIEUTH -0xB18E 0xCF52 # HANGUL SYLLABLE KHIEUKH-YE-PHIEUPH -0xB18F 0xCF53 # HANGUL SYLLABLE KHIEUKH-YE-HIEUH -0xB190 0xCF56 # HANGUL SYLLABLE KHIEUKH-O-SSANGKIYEOK -0xB191 0xCF57 # HANGUL SYLLABLE KHIEUKH-O-KIYEOKSIOS -0xB192 0xCF59 # HANGUL SYLLABLE KHIEUKH-O-NIEUNCIEUC -0xB193 0xCF5A # HANGUL SYLLABLE KHIEUKH-O-NIEUNHIEUH -0xB194 0xCF5B # HANGUL SYLLABLE KHIEUKH-O-TIKEUT -0xB195 0xCF5D # HANGUL SYLLABLE KHIEUKH-O-RIEULKIYEOK -0xB196 0xCF5E # HANGUL SYLLABLE KHIEUKH-O-RIEULMIEUM -0xB197 0xCF5F # HANGUL SYLLABLE KHIEUKH-O-RIEULPIEUP -0xB198 0xCF60 # HANGUL SYLLABLE KHIEUKH-O-RIEULSIOS -0xB199 0xCF61 # HANGUL SYLLABLE KHIEUKH-O-RIEULTHIEUTH -0xB19A 0xCF62 # HANGUL SYLLABLE KHIEUKH-O-RIEULPHIEUPH -0xB19B 0xCF63 # HANGUL SYLLABLE KHIEUKH-O-RIEULHIEUH -0xB19C 0xCF66 # HANGUL SYLLABLE KHIEUKH-O-PIEUPSIOS -0xB19D 0xCF68 # HANGUL SYLLABLE KHIEUKH-O-SSANGSIOS -0xB19E 0xCF6A # HANGUL SYLLABLE KHIEUKH-O-CIEUC -0xB19F 0xCF6B # HANGUL SYLLABLE KHIEUKH-O-CHIEUCH -0xB1A0 0xCF6C # HANGUL SYLLABLE KHIEUKH-O-KHIEUKH -0xB1A1 0xAD0C # HANGUL SYLLABLE KIYEOK-WA-MIEUM -0xB1A2 0xAD0D # HANGUL SYLLABLE KIYEOK-WA-PIEUP -0xB1A3 0xAD0F # HANGUL SYLLABLE KIYEOK-WA-SIOS -0xB1A4 0xAD11 # HANGUL SYLLABLE KIYEOK-WA-IEUNG -0xB1A5 0xAD18 # HANGUL SYLLABLE KIYEOK-WAE -0xB1A6 0xAD1C # HANGUL SYLLABLE KIYEOK-WAE-NIEUN -0xB1A7 0xAD20 # HANGUL SYLLABLE KIYEOK-WAE-RIEUL -0xB1A8 0xAD29 # HANGUL SYLLABLE KIYEOK-WAE-PIEUP -0xB1A9 0xAD2C # HANGUL SYLLABLE KIYEOK-WAE-SSANGSIOS -0xB1AA 0xAD2D # HANGUL SYLLABLE KIYEOK-WAE-IEUNG -0xB1AB 0xAD34 # HANGUL SYLLABLE KIYEOK-OE -0xB1AC 0xAD35 # HANGUL SYLLABLE KIYEOK-OE-KIYEOK -0xB1AD 0xAD38 # HANGUL SYLLABLE KIYEOK-OE-NIEUN -0xB1AE 0xAD3C # HANGUL SYLLABLE KIYEOK-OE-RIEUL -0xB1AF 0xAD44 # HANGUL SYLLABLE KIYEOK-OE-MIEUM -0xB1B0 0xAD45 # HANGUL SYLLABLE KIYEOK-OE-PIEUP -0xB1B1 0xAD47 # HANGUL SYLLABLE KIYEOK-OE-SIOS -0xB1B2 0xAD49 # HANGUL SYLLABLE KIYEOK-OE-IEUNG -0xB1B3 0xAD50 # HANGUL SYLLABLE KIYEOK-YO -0xB1B4 0xAD54 # HANGUL SYLLABLE KIYEOK-YO-NIEUN -0xB1B5 0xAD58 # HANGUL SYLLABLE KIYEOK-YO-RIEUL -0xB1B6 0xAD61 # HANGUL SYLLABLE KIYEOK-YO-PIEUP -0xB1B7 0xAD63 # HANGUL SYLLABLE KIYEOK-YO-SIOS -0xB1B8 0xAD6C # HANGUL SYLLABLE KIYEOK-U -0xB1B9 0xAD6D # HANGUL SYLLABLE KIYEOK-U-KIYEOK -0xB1BA 0xAD70 # HANGUL SYLLABLE KIYEOK-U-NIEUN -0xB1BB 0xAD73 # HANGUL SYLLABLE KIYEOK-U-TIKEUT -0xB1BC 0xAD74 # HANGUL SYLLABLE KIYEOK-U-RIEUL -0xB1BD 0xAD75 # HANGUL SYLLABLE KIYEOK-U-RIEULKIYEOK -0xB1BE 0xAD76 # HANGUL SYLLABLE KIYEOK-U-RIEULMIEUM -0xB1BF 0xAD7B # HANGUL SYLLABLE KIYEOK-U-RIEULHIEUH -0xB1C0 0xAD7C # HANGUL SYLLABLE KIYEOK-U-MIEUM -0xB1C1 0xAD7D # HANGUL SYLLABLE KIYEOK-U-PIEUP -0xB1C2 0xAD7F # HANGUL SYLLABLE KIYEOK-U-SIOS -0xB1C3 0xAD81 # HANGUL SYLLABLE KIYEOK-U-IEUNG -0xB1C4 0xAD82 # HANGUL SYLLABLE KIYEOK-U-CIEUC -0xB1C5 0xAD88 # HANGUL SYLLABLE KIYEOK-WEO -0xB1C6 0xAD89 # HANGUL SYLLABLE KIYEOK-WEO-KIYEOK -0xB1C7 0xAD8C # HANGUL SYLLABLE KIYEOK-WEO-NIEUN -0xB1C8 0xAD90 # HANGUL SYLLABLE KIYEOK-WEO-RIEUL -0xB1C9 0xAD9C # HANGUL SYLLABLE KIYEOK-WEO-SSANGSIOS -0xB1CA 0xAD9D # HANGUL SYLLABLE KIYEOK-WEO-IEUNG -0xB1CB 0xADA4 # HANGUL SYLLABLE KIYEOK-WE -0xB1CC 0xADB7 # HANGUL SYLLABLE KIYEOK-WE-SIOS -0xB1CD 0xADC0 # HANGUL SYLLABLE KIYEOK-WI -0xB1CE 0xADC1 # HANGUL SYLLABLE KIYEOK-WI-KIYEOK -0xB1CF 0xADC4 # HANGUL SYLLABLE KIYEOK-WI-NIEUN -0xB1D0 0xADC8 # HANGUL SYLLABLE KIYEOK-WI-RIEUL -0xB1D1 0xADD0 # HANGUL SYLLABLE KIYEOK-WI-MIEUM -0xB1D2 0xADD1 # HANGUL SYLLABLE KIYEOK-WI-PIEUP -0xB1D3 0xADD3 # HANGUL SYLLABLE KIYEOK-WI-SIOS -0xB1D4 0xADDC # HANGUL SYLLABLE KIYEOK-YU -0xB1D5 0xADE0 # HANGUL SYLLABLE KIYEOK-YU-NIEUN -0xB1D6 0xADE4 # HANGUL SYLLABLE KIYEOK-YU-RIEUL -0xB1D7 0xADF8 # HANGUL SYLLABLE KIYEOK-EU -0xB1D8 0xADF9 # HANGUL SYLLABLE KIYEOK-EU-KIYEOK -0xB1D9 0xADFC # HANGUL SYLLABLE KIYEOK-EU-NIEUN -0xB1DA 0xADFF # HANGUL SYLLABLE KIYEOK-EU-TIKEUT -0xB1DB 0xAE00 # HANGUL SYLLABLE KIYEOK-EU-RIEUL -0xB1DC 0xAE01 # HANGUL SYLLABLE KIYEOK-EU-RIEULKIYEOK -0xB1DD 0xAE08 # HANGUL SYLLABLE KIYEOK-EU-MIEUM -0xB1DE 0xAE09 # HANGUL SYLLABLE KIYEOK-EU-PIEUP -0xB1DF 0xAE0B # HANGUL SYLLABLE KIYEOK-EU-SIOS -0xB1E0 0xAE0D # HANGUL SYLLABLE KIYEOK-EU-IEUNG -0xB1E1 0xAE14 # HANGUL SYLLABLE KIYEOK-YI -0xB1E2 0xAE30 # HANGUL SYLLABLE KIYEOK-I -0xB1E3 0xAE31 # HANGUL SYLLABLE KIYEOK-I-KIYEOK -0xB1E4 0xAE34 # HANGUL SYLLABLE KIYEOK-I-NIEUN -0xB1E5 0xAE37 # HANGUL SYLLABLE KIYEOK-I-TIKEUT -0xB1E6 0xAE38 # HANGUL SYLLABLE KIYEOK-I-RIEUL -0xB1E7 0xAE3A # HANGUL SYLLABLE KIYEOK-I-RIEULMIEUM -0xB1E8 0xAE40 # HANGUL SYLLABLE KIYEOK-I-MIEUM -0xB1E9 0xAE41 # HANGUL SYLLABLE KIYEOK-I-PIEUP -0xB1EA 0xAE43 # HANGUL SYLLABLE KIYEOK-I-SIOS -0xB1EB 0xAE45 # HANGUL SYLLABLE KIYEOK-I-IEUNG -0xB1EC 0xAE46 # HANGUL SYLLABLE KIYEOK-I-CIEUC -0xB1ED 0xAE4A # HANGUL SYLLABLE KIYEOK-I-PHIEUPH -0xB1EE 0xAE4C # HANGUL SYLLABLE SSANGKIYEOK-A -0xB1EF 0xAE4D # HANGUL SYLLABLE SSANGKIYEOK-A-KIYEOK -0xB1F0 0xAE4E # HANGUL SYLLABLE SSANGKIYEOK-A-SSANGKIYEOK -0xB1F1 0xAE50 # HANGUL SYLLABLE SSANGKIYEOK-A-NIEUN -0xB1F2 0xAE54 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEUL -0xB1F3 0xAE56 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULMIEUM -0xB1F4 0xAE5C # HANGUL SYLLABLE SSANGKIYEOK-A-MIEUM -0xB1F5 0xAE5D # HANGUL SYLLABLE SSANGKIYEOK-A-PIEUP -0xB1F6 0xAE5F # HANGUL SYLLABLE SSANGKIYEOK-A-SIOS -0xB1F7 0xAE60 # HANGUL SYLLABLE SSANGKIYEOK-A-SSANGSIOS -0xB1F8 0xAE61 # HANGUL SYLLABLE SSANGKIYEOK-A-IEUNG -0xB1F9 0xAE65 # HANGUL SYLLABLE SSANGKIYEOK-A-THIEUTH -0xB1FA 0xAE68 # HANGUL SYLLABLE SSANGKIYEOK-AE -0xB1FB 0xAE69 # HANGUL SYLLABLE SSANGKIYEOK-AE-KIYEOK -0xB1FC 0xAE6C # HANGUL SYLLABLE SSANGKIYEOK-AE-NIEUN -0xB1FD 0xAE70 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEUL -0xB1FE 0xAE78 # HANGUL SYLLABLE SSANGKIYEOK-AE-MIEUM -0xB241 0xCF6D # HANGUL SYLLABLE KHIEUKH-O-THIEUTH -0xB242 0xCF6E # HANGUL SYLLABLE KHIEUKH-O-PHIEUPH -0xB243 0xCF6F # HANGUL SYLLABLE KHIEUKH-O-HIEUH -0xB244 0xCF72 # HANGUL SYLLABLE KHIEUKH-WA-SSANGKIYEOK -0xB245 0xCF73 # HANGUL SYLLABLE KHIEUKH-WA-KIYEOKSIOS -0xB246 0xCF75 # HANGUL SYLLABLE KHIEUKH-WA-NIEUNCIEUC -0xB247 0xCF76 # HANGUL SYLLABLE KHIEUKH-WA-NIEUNHIEUH -0xB248 0xCF77 # HANGUL SYLLABLE KHIEUKH-WA-TIKEUT -0xB249 0xCF79 # HANGUL SYLLABLE KHIEUKH-WA-RIEULKIYEOK -0xB24A 0xCF7A # HANGUL SYLLABLE KHIEUKH-WA-RIEULMIEUM -0xB24B 0xCF7B # HANGUL SYLLABLE KHIEUKH-WA-RIEULPIEUP -0xB24C 0xCF7C # HANGUL SYLLABLE KHIEUKH-WA-RIEULSIOS -0xB24D 0xCF7D # HANGUL SYLLABLE KHIEUKH-WA-RIEULTHIEUTH -0xB24E 0xCF7E # HANGUL SYLLABLE KHIEUKH-WA-RIEULPHIEUPH -0xB24F 0xCF7F # HANGUL SYLLABLE KHIEUKH-WA-RIEULHIEUH -0xB250 0xCF81 # HANGUL SYLLABLE KHIEUKH-WA-PIEUP -0xB251 0xCF82 # HANGUL SYLLABLE KHIEUKH-WA-PIEUPSIOS -0xB252 0xCF83 # HANGUL SYLLABLE KHIEUKH-WA-SIOS -0xB253 0xCF84 # HANGUL SYLLABLE KHIEUKH-WA-SSANGSIOS -0xB254 0xCF86 # HANGUL SYLLABLE KHIEUKH-WA-CIEUC -0xB255 0xCF87 # HANGUL SYLLABLE KHIEUKH-WA-CHIEUCH -0xB256 0xCF88 # HANGUL SYLLABLE KHIEUKH-WA-KHIEUKH -0xB257 0xCF89 # HANGUL SYLLABLE KHIEUKH-WA-THIEUTH -0xB258 0xCF8A # HANGUL SYLLABLE KHIEUKH-WA-PHIEUPH -0xB259 0xCF8B # HANGUL SYLLABLE KHIEUKH-WA-HIEUH -0xB25A 0xCF8D # HANGUL SYLLABLE KHIEUKH-WAE-KIYEOK -0xB261 0xCF8E # HANGUL SYLLABLE KHIEUKH-WAE-SSANGKIYEOK -0xB262 0xCF8F # HANGUL SYLLABLE KHIEUKH-WAE-KIYEOKSIOS -0xB263 0xCF90 # HANGUL SYLLABLE KHIEUKH-WAE-NIEUN -0xB264 0xCF91 # HANGUL SYLLABLE KHIEUKH-WAE-NIEUNCIEUC -0xB265 0xCF92 # HANGUL SYLLABLE KHIEUKH-WAE-NIEUNHIEUH -0xB266 0xCF93 # HANGUL SYLLABLE KHIEUKH-WAE-TIKEUT -0xB267 0xCF94 # HANGUL SYLLABLE KHIEUKH-WAE-RIEUL -0xB268 0xCF95 # HANGUL SYLLABLE KHIEUKH-WAE-RIEULKIYEOK -0xB269 0xCF96 # HANGUL SYLLABLE KHIEUKH-WAE-RIEULMIEUM -0xB26A 0xCF97 # HANGUL SYLLABLE KHIEUKH-WAE-RIEULPIEUP -0xB26B 0xCF98 # HANGUL SYLLABLE KHIEUKH-WAE-RIEULSIOS -0xB26C 0xCF99 # HANGUL SYLLABLE KHIEUKH-WAE-RIEULTHIEUTH -0xB26D 0xCF9A # HANGUL SYLLABLE KHIEUKH-WAE-RIEULPHIEUPH -0xB26E 0xCF9B # HANGUL SYLLABLE KHIEUKH-WAE-RIEULHIEUH -0xB26F 0xCF9C # HANGUL SYLLABLE KHIEUKH-WAE-MIEUM -0xB270 0xCF9D # HANGUL SYLLABLE KHIEUKH-WAE-PIEUP -0xB271 0xCF9E # HANGUL SYLLABLE KHIEUKH-WAE-PIEUPSIOS -0xB272 0xCF9F # HANGUL SYLLABLE KHIEUKH-WAE-SIOS -0xB273 0xCFA0 # HANGUL SYLLABLE KHIEUKH-WAE-SSANGSIOS -0xB274 0xCFA2 # HANGUL SYLLABLE KHIEUKH-WAE-CIEUC -0xB275 0xCFA3 # HANGUL SYLLABLE KHIEUKH-WAE-CHIEUCH -0xB276 0xCFA4 # HANGUL SYLLABLE KHIEUKH-WAE-KHIEUKH -0xB277 0xCFA5 # HANGUL SYLLABLE KHIEUKH-WAE-THIEUTH -0xB278 0xCFA6 # HANGUL SYLLABLE KHIEUKH-WAE-PHIEUPH -0xB279 0xCFA7 # HANGUL SYLLABLE KHIEUKH-WAE-HIEUH -0xB27A 0xCFA9 # HANGUL SYLLABLE KHIEUKH-OE-KIYEOK -0xB281 0xCFAA # HANGUL SYLLABLE KHIEUKH-OE-SSANGKIYEOK -0xB282 0xCFAB # HANGUL SYLLABLE KHIEUKH-OE-KIYEOKSIOS -0xB283 0xCFAC # HANGUL SYLLABLE KHIEUKH-OE-NIEUN -0xB284 0xCFAD # HANGUL SYLLABLE KHIEUKH-OE-NIEUNCIEUC -0xB285 0xCFAE # HANGUL SYLLABLE KHIEUKH-OE-NIEUNHIEUH -0xB286 0xCFAF # HANGUL SYLLABLE KHIEUKH-OE-TIKEUT -0xB287 0xCFB1 # HANGUL SYLLABLE KHIEUKH-OE-RIEULKIYEOK -0xB288 0xCFB2 # HANGUL SYLLABLE KHIEUKH-OE-RIEULMIEUM -0xB289 0xCFB3 # HANGUL SYLLABLE KHIEUKH-OE-RIEULPIEUP -0xB28A 0xCFB4 # HANGUL SYLLABLE KHIEUKH-OE-RIEULSIOS -0xB28B 0xCFB5 # HANGUL SYLLABLE KHIEUKH-OE-RIEULTHIEUTH -0xB28C 0xCFB6 # HANGUL SYLLABLE KHIEUKH-OE-RIEULPHIEUPH -0xB28D 0xCFB7 # HANGUL SYLLABLE KHIEUKH-OE-RIEULHIEUH -0xB28E 0xCFB8 # HANGUL SYLLABLE KHIEUKH-OE-MIEUM -0xB28F 0xCFB9 # HANGUL SYLLABLE KHIEUKH-OE-PIEUP -0xB290 0xCFBA # HANGUL SYLLABLE KHIEUKH-OE-PIEUPSIOS -0xB291 0xCFBB # HANGUL SYLLABLE KHIEUKH-OE-SIOS -0xB292 0xCFBC # HANGUL SYLLABLE KHIEUKH-OE-SSANGSIOS -0xB293 0xCFBD # HANGUL SYLLABLE KHIEUKH-OE-IEUNG -0xB294 0xCFBE # HANGUL SYLLABLE KHIEUKH-OE-CIEUC -0xB295 0xCFBF # HANGUL SYLLABLE KHIEUKH-OE-CHIEUCH -0xB296 0xCFC0 # HANGUL SYLLABLE KHIEUKH-OE-KHIEUKH -0xB297 0xCFC1 # HANGUL SYLLABLE KHIEUKH-OE-THIEUTH -0xB298 0xCFC2 # HANGUL SYLLABLE KHIEUKH-OE-PHIEUPH -0xB299 0xCFC3 # HANGUL SYLLABLE KHIEUKH-OE-HIEUH -0xB29A 0xCFC5 # HANGUL SYLLABLE KHIEUKH-YO-KIYEOK -0xB29B 0xCFC6 # HANGUL SYLLABLE KHIEUKH-YO-SSANGKIYEOK -0xB29C 0xCFC7 # HANGUL SYLLABLE KHIEUKH-YO-KIYEOKSIOS -0xB29D 0xCFC8 # HANGUL SYLLABLE KHIEUKH-YO-NIEUN -0xB29E 0xCFC9 # HANGUL SYLLABLE KHIEUKH-YO-NIEUNCIEUC -0xB29F 0xCFCA # HANGUL SYLLABLE KHIEUKH-YO-NIEUNHIEUH -0xB2A0 0xCFCB # HANGUL SYLLABLE KHIEUKH-YO-TIKEUT -0xB2A1 0xAE79 # HANGUL SYLLABLE SSANGKIYEOK-AE-PIEUP -0xB2A2 0xAE7B # HANGUL SYLLABLE SSANGKIYEOK-AE-SIOS -0xB2A3 0xAE7C # HANGUL SYLLABLE SSANGKIYEOK-AE-SSANGSIOS -0xB2A4 0xAE7D # HANGUL SYLLABLE SSANGKIYEOK-AE-IEUNG -0xB2A5 0xAE84 # HANGUL SYLLABLE SSANGKIYEOK-YA -0xB2A6 0xAE85 # HANGUL SYLLABLE SSANGKIYEOK-YA-KIYEOK -0xB2A7 0xAE8C # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEUL -0xB2A8 0xAEBC # HANGUL SYLLABLE SSANGKIYEOK-EO -0xB2A9 0xAEBD # HANGUL SYLLABLE SSANGKIYEOK-EO-KIYEOK -0xB2AA 0xAEBE # HANGUL SYLLABLE SSANGKIYEOK-EO-SSANGKIYEOK -0xB2AB 0xAEC0 # HANGUL SYLLABLE SSANGKIYEOK-EO-NIEUN -0xB2AC 0xAEC4 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEUL -0xB2AD 0xAECC # HANGUL SYLLABLE SSANGKIYEOK-EO-MIEUM -0xB2AE 0xAECD # HANGUL SYLLABLE SSANGKIYEOK-EO-PIEUP -0xB2AF 0xAECF # HANGUL SYLLABLE SSANGKIYEOK-EO-SIOS -0xB2B0 0xAED0 # HANGUL SYLLABLE SSANGKIYEOK-EO-SSANGSIOS -0xB2B1 0xAED1 # HANGUL SYLLABLE SSANGKIYEOK-EO-IEUNG -0xB2B2 0xAED8 # HANGUL SYLLABLE SSANGKIYEOK-E -0xB2B3 0xAED9 # HANGUL SYLLABLE SSANGKIYEOK-E-KIYEOK -0xB2B4 0xAEDC # HANGUL SYLLABLE SSANGKIYEOK-E-NIEUN -0xB2B5 0xAEE8 # HANGUL SYLLABLE SSANGKIYEOK-E-MIEUM -0xB2B6 0xAEEB # HANGUL SYLLABLE SSANGKIYEOK-E-SIOS -0xB2B7 0xAEED # HANGUL SYLLABLE SSANGKIYEOK-E-IEUNG -0xB2B8 0xAEF4 # HANGUL SYLLABLE SSANGKIYEOK-YEO -0xB2B9 0xAEF8 # HANGUL SYLLABLE SSANGKIYEOK-YEO-NIEUN -0xB2BA 0xAEFC # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEUL -0xB2BB 0xAF07 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SIOS -0xB2BC 0xAF08 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SSANGSIOS -0xB2BD 0xAF0D # HANGUL SYLLABLE SSANGKIYEOK-YEO-THIEUTH -0xB2BE 0xAF10 # HANGUL SYLLABLE SSANGKIYEOK-YE -0xB2BF 0xAF2C # HANGUL SYLLABLE SSANGKIYEOK-O -0xB2C0 0xAF2D # HANGUL SYLLABLE SSANGKIYEOK-O-KIYEOK -0xB2C1 0xAF30 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUN -0xB2C2 0xAF32 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUNHIEUH -0xB2C3 0xAF34 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEUL -0xB2C4 0xAF3C # HANGUL SYLLABLE SSANGKIYEOK-O-MIEUM -0xB2C5 0xAF3D # HANGUL SYLLABLE SSANGKIYEOK-O-PIEUP -0xB2C6 0xAF3F # HANGUL SYLLABLE SSANGKIYEOK-O-SIOS -0xB2C7 0xAF41 # HANGUL SYLLABLE SSANGKIYEOK-O-IEUNG -0xB2C8 0xAF42 # HANGUL SYLLABLE SSANGKIYEOK-O-CIEUC -0xB2C9 0xAF43 # HANGUL SYLLABLE SSANGKIYEOK-O-CHIEUCH -0xB2CA 0xAF48 # HANGUL SYLLABLE SSANGKIYEOK-WA -0xB2CB 0xAF49 # HANGUL SYLLABLE SSANGKIYEOK-WA-KIYEOK -0xB2CC 0xAF50 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEUL -0xB2CD 0xAF5C # HANGUL SYLLABLE SSANGKIYEOK-WA-SSANGSIOS -0xB2CE 0xAF5D # HANGUL SYLLABLE SSANGKIYEOK-WA-IEUNG -0xB2CF 0xAF64 # HANGUL SYLLABLE SSANGKIYEOK-WAE -0xB2D0 0xAF65 # HANGUL SYLLABLE SSANGKIYEOK-WAE-KIYEOK -0xB2D1 0xAF79 # HANGUL SYLLABLE SSANGKIYEOK-WAE-IEUNG -0xB2D2 0xAF80 # HANGUL SYLLABLE SSANGKIYEOK-OE -0xB2D3 0xAF84 # HANGUL SYLLABLE SSANGKIYEOK-OE-NIEUN -0xB2D4 0xAF88 # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEUL -0xB2D5 0xAF90 # HANGUL SYLLABLE SSANGKIYEOK-OE-MIEUM -0xB2D6 0xAF91 # HANGUL SYLLABLE SSANGKIYEOK-OE-PIEUP -0xB2D7 0xAF95 # HANGUL SYLLABLE SSANGKIYEOK-OE-IEUNG -0xB2D8 0xAF9C # HANGUL SYLLABLE SSANGKIYEOK-YO -0xB2D9 0xAFB8 # HANGUL SYLLABLE SSANGKIYEOK-U -0xB2DA 0xAFB9 # HANGUL SYLLABLE SSANGKIYEOK-U-KIYEOK -0xB2DB 0xAFBC # HANGUL SYLLABLE SSANGKIYEOK-U-NIEUN -0xB2DC 0xAFC0 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEUL -0xB2DD 0xAFC7 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULHIEUH -0xB2DE 0xAFC8 # HANGUL SYLLABLE SSANGKIYEOK-U-MIEUM -0xB2DF 0xAFC9 # HANGUL SYLLABLE SSANGKIYEOK-U-PIEUP -0xB2E0 0xAFCB # HANGUL SYLLABLE SSANGKIYEOK-U-SIOS -0xB2E1 0xAFCD # HANGUL SYLLABLE SSANGKIYEOK-U-IEUNG -0xB2E2 0xAFCE # HANGUL SYLLABLE SSANGKIYEOK-U-CIEUC -0xB2E3 0xAFD4 # HANGUL SYLLABLE SSANGKIYEOK-WEO -0xB2E4 0xAFDC # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEUL -0xB2E5 0xAFE8 # HANGUL SYLLABLE SSANGKIYEOK-WEO-SSANGSIOS -0xB2E6 0xAFE9 # HANGUL SYLLABLE SSANGKIYEOK-WEO-IEUNG -0xB2E7 0xAFF0 # HANGUL SYLLABLE SSANGKIYEOK-WE -0xB2E8 0xAFF1 # HANGUL SYLLABLE SSANGKIYEOK-WE-KIYEOK -0xB2E9 0xAFF4 # HANGUL SYLLABLE SSANGKIYEOK-WE-NIEUN -0xB2EA 0xAFF8 # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEUL -0xB2EB 0xB000 # HANGUL SYLLABLE SSANGKIYEOK-WE-MIEUM -0xB2EC 0xB001 # HANGUL SYLLABLE SSANGKIYEOK-WE-PIEUP -0xB2ED 0xB004 # HANGUL SYLLABLE SSANGKIYEOK-WE-SSANGSIOS -0xB2EE 0xB00C # HANGUL SYLLABLE SSANGKIYEOK-WI -0xB2EF 0xB010 # HANGUL SYLLABLE SSANGKIYEOK-WI-NIEUN -0xB2F0 0xB014 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEUL -0xB2F1 0xB01C # HANGUL SYLLABLE SSANGKIYEOK-WI-MIEUM -0xB2F2 0xB01D # HANGUL SYLLABLE SSANGKIYEOK-WI-PIEUP -0xB2F3 0xB028 # HANGUL SYLLABLE SSANGKIYEOK-YU -0xB2F4 0xB044 # HANGUL SYLLABLE SSANGKIYEOK-EU -0xB2F5 0xB045 # HANGUL SYLLABLE SSANGKIYEOK-EU-KIYEOK -0xB2F6 0xB048 # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUN -0xB2F7 0xB04A # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUNHIEUH -0xB2F8 0xB04C # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEUL -0xB2F9 0xB04E # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULMIEUM -0xB2FA 0xB053 # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULHIEUH -0xB2FB 0xB054 # HANGUL SYLLABLE SSANGKIYEOK-EU-MIEUM -0xB2FC 0xB055 # HANGUL SYLLABLE SSANGKIYEOK-EU-PIEUP -0xB2FD 0xB057 # HANGUL SYLLABLE SSANGKIYEOK-EU-SIOS -0xB2FE 0xB059 # HANGUL SYLLABLE SSANGKIYEOK-EU-IEUNG -0xB341 0xCFCC # HANGUL SYLLABLE KHIEUKH-YO-RIEUL -0xB342 0xCFCD # HANGUL SYLLABLE KHIEUKH-YO-RIEULKIYEOK -0xB343 0xCFCE # HANGUL SYLLABLE KHIEUKH-YO-RIEULMIEUM -0xB344 0xCFCF # HANGUL SYLLABLE KHIEUKH-YO-RIEULPIEUP -0xB345 0xCFD0 # HANGUL SYLLABLE KHIEUKH-YO-RIEULSIOS -0xB346 0xCFD1 # HANGUL SYLLABLE KHIEUKH-YO-RIEULTHIEUTH -0xB347 0xCFD2 # HANGUL SYLLABLE KHIEUKH-YO-RIEULPHIEUPH -0xB348 0xCFD3 # HANGUL SYLLABLE KHIEUKH-YO-RIEULHIEUH -0xB349 0xCFD4 # HANGUL SYLLABLE KHIEUKH-YO-MIEUM -0xB34A 0xCFD5 # HANGUL SYLLABLE KHIEUKH-YO-PIEUP -0xB34B 0xCFD6 # HANGUL SYLLABLE KHIEUKH-YO-PIEUPSIOS -0xB34C 0xCFD7 # HANGUL SYLLABLE KHIEUKH-YO-SIOS -0xB34D 0xCFD8 # HANGUL SYLLABLE KHIEUKH-YO-SSANGSIOS -0xB34E 0xCFD9 # HANGUL SYLLABLE KHIEUKH-YO-IEUNG -0xB34F 0xCFDA # HANGUL SYLLABLE KHIEUKH-YO-CIEUC -0xB350 0xCFDB # HANGUL SYLLABLE KHIEUKH-YO-CHIEUCH -0xB351 0xCFDC # HANGUL SYLLABLE KHIEUKH-YO-KHIEUKH -0xB352 0xCFDD # HANGUL SYLLABLE KHIEUKH-YO-THIEUTH -0xB353 0xCFDE # HANGUL SYLLABLE KHIEUKH-YO-PHIEUPH -0xB354 0xCFDF # HANGUL SYLLABLE KHIEUKH-YO-HIEUH -0xB355 0xCFE2 # HANGUL SYLLABLE KHIEUKH-U-SSANGKIYEOK -0xB356 0xCFE3 # HANGUL SYLLABLE KHIEUKH-U-KIYEOKSIOS -0xB357 0xCFE5 # HANGUL SYLLABLE KHIEUKH-U-NIEUNCIEUC -0xB358 0xCFE6 # HANGUL SYLLABLE KHIEUKH-U-NIEUNHIEUH -0xB359 0xCFE7 # HANGUL SYLLABLE KHIEUKH-U-TIKEUT -0xB35A 0xCFE9 # HANGUL SYLLABLE KHIEUKH-U-RIEULKIYEOK -0xB361 0xCFEA # HANGUL SYLLABLE KHIEUKH-U-RIEULMIEUM -0xB362 0xCFEB # HANGUL SYLLABLE KHIEUKH-U-RIEULPIEUP -0xB363 0xCFEC # HANGUL SYLLABLE KHIEUKH-U-RIEULSIOS -0xB364 0xCFED # HANGUL SYLLABLE KHIEUKH-U-RIEULTHIEUTH -0xB365 0xCFEE # HANGUL SYLLABLE KHIEUKH-U-RIEULPHIEUPH -0xB366 0xCFEF # HANGUL SYLLABLE KHIEUKH-U-RIEULHIEUH -0xB367 0xCFF2 # HANGUL SYLLABLE KHIEUKH-U-PIEUPSIOS -0xB368 0xCFF4 # HANGUL SYLLABLE KHIEUKH-U-SSANGSIOS -0xB369 0xCFF6 # HANGUL SYLLABLE KHIEUKH-U-CIEUC -0xB36A 0xCFF7 # HANGUL SYLLABLE KHIEUKH-U-CHIEUCH -0xB36B 0xCFF8 # HANGUL SYLLABLE KHIEUKH-U-KHIEUKH -0xB36C 0xCFF9 # HANGUL SYLLABLE KHIEUKH-U-THIEUTH -0xB36D 0xCFFA # HANGUL SYLLABLE KHIEUKH-U-PHIEUPH -0xB36E 0xCFFB # HANGUL SYLLABLE KHIEUKH-U-HIEUH -0xB36F 0xCFFD # HANGUL SYLLABLE KHIEUKH-WEO-KIYEOK -0xB370 0xCFFE # HANGUL SYLLABLE KHIEUKH-WEO-SSANGKIYEOK -0xB371 0xCFFF # HANGUL SYLLABLE KHIEUKH-WEO-KIYEOKSIOS -0xB372 0xD001 # HANGUL SYLLABLE KHIEUKH-WEO-NIEUNCIEUC -0xB373 0xD002 # HANGUL SYLLABLE KHIEUKH-WEO-NIEUNHIEUH -0xB374 0xD003 # HANGUL SYLLABLE KHIEUKH-WEO-TIKEUT -0xB375 0xD005 # HANGUL SYLLABLE KHIEUKH-WEO-RIEULKIYEOK -0xB376 0xD006 # HANGUL SYLLABLE KHIEUKH-WEO-RIEULMIEUM -0xB377 0xD007 # HANGUL SYLLABLE KHIEUKH-WEO-RIEULPIEUP -0xB378 0xD008 # HANGUL SYLLABLE KHIEUKH-WEO-RIEULSIOS -0xB379 0xD009 # HANGUL SYLLABLE KHIEUKH-WEO-RIEULTHIEUTH -0xB37A 0xD00A # HANGUL SYLLABLE KHIEUKH-WEO-RIEULPHIEUPH -0xB381 0xD00B # HANGUL SYLLABLE KHIEUKH-WEO-RIEULHIEUH -0xB382 0xD00C # HANGUL SYLLABLE KHIEUKH-WEO-MIEUM -0xB383 0xD00D # HANGUL SYLLABLE KHIEUKH-WEO-PIEUP -0xB384 0xD00E # HANGUL SYLLABLE KHIEUKH-WEO-PIEUPSIOS -0xB385 0xD00F # HANGUL SYLLABLE KHIEUKH-WEO-SIOS -0xB386 0xD010 # HANGUL SYLLABLE KHIEUKH-WEO-SSANGSIOS -0xB387 0xD012 # HANGUL SYLLABLE KHIEUKH-WEO-CIEUC -0xB388 0xD013 # HANGUL SYLLABLE KHIEUKH-WEO-CHIEUCH -0xB389 0xD014 # HANGUL SYLLABLE KHIEUKH-WEO-KHIEUKH -0xB38A 0xD015 # HANGUL SYLLABLE KHIEUKH-WEO-THIEUTH -0xB38B 0xD016 # HANGUL SYLLABLE KHIEUKH-WEO-PHIEUPH -0xB38C 0xD017 # HANGUL SYLLABLE KHIEUKH-WEO-HIEUH -0xB38D 0xD019 # HANGUL SYLLABLE KHIEUKH-WE-KIYEOK -0xB38E 0xD01A # HANGUL SYLLABLE KHIEUKH-WE-SSANGKIYEOK -0xB38F 0xD01B # HANGUL SYLLABLE KHIEUKH-WE-KIYEOKSIOS -0xB390 0xD01C # HANGUL SYLLABLE KHIEUKH-WE-NIEUN -0xB391 0xD01D # HANGUL SYLLABLE KHIEUKH-WE-NIEUNCIEUC -0xB392 0xD01E # HANGUL SYLLABLE KHIEUKH-WE-NIEUNHIEUH -0xB393 0xD01F # HANGUL SYLLABLE KHIEUKH-WE-TIKEUT -0xB394 0xD020 # HANGUL SYLLABLE KHIEUKH-WE-RIEUL -0xB395 0xD021 # HANGUL SYLLABLE KHIEUKH-WE-RIEULKIYEOK -0xB396 0xD022 # HANGUL SYLLABLE KHIEUKH-WE-RIEULMIEUM -0xB397 0xD023 # HANGUL SYLLABLE KHIEUKH-WE-RIEULPIEUP -0xB398 0xD024 # HANGUL SYLLABLE KHIEUKH-WE-RIEULSIOS -0xB399 0xD025 # HANGUL SYLLABLE KHIEUKH-WE-RIEULTHIEUTH -0xB39A 0xD026 # HANGUL SYLLABLE KHIEUKH-WE-RIEULPHIEUPH -0xB39B 0xD027 # HANGUL SYLLABLE KHIEUKH-WE-RIEULHIEUH -0xB39C 0xD028 # HANGUL SYLLABLE KHIEUKH-WE-MIEUM -0xB39D 0xD029 # HANGUL SYLLABLE KHIEUKH-WE-PIEUP -0xB39E 0xD02A # HANGUL SYLLABLE KHIEUKH-WE-PIEUPSIOS -0xB39F 0xD02B # HANGUL SYLLABLE KHIEUKH-WE-SIOS -0xB3A0 0xD02C # HANGUL SYLLABLE KHIEUKH-WE-SSANGSIOS -0xB3A1 0xB05D # HANGUL SYLLABLE SSANGKIYEOK-EU-THIEUTH -0xB3A2 0xB07C # HANGUL SYLLABLE SSANGKIYEOK-I -0xB3A3 0xB07D # HANGUL SYLLABLE SSANGKIYEOK-I-KIYEOK -0xB3A4 0xB080 # HANGUL SYLLABLE SSANGKIYEOK-I-NIEUN -0xB3A5 0xB084 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEUL -0xB3A6 0xB08C # HANGUL SYLLABLE SSANGKIYEOK-I-MIEUM -0xB3A7 0xB08D # HANGUL SYLLABLE SSANGKIYEOK-I-PIEUP -0xB3A8 0xB08F # HANGUL SYLLABLE SSANGKIYEOK-I-SIOS -0xB3A9 0xB091 # HANGUL SYLLABLE SSANGKIYEOK-I-IEUNG -0xB3AA 0xB098 # HANGUL SYLLABLE NIEUN-A -0xB3AB 0xB099 # HANGUL SYLLABLE NIEUN-A-KIYEOK -0xB3AC 0xB09A # HANGUL SYLLABLE NIEUN-A-SSANGKIYEOK -0xB3AD 0xB09C # HANGUL SYLLABLE NIEUN-A-NIEUN -0xB3AE 0xB09F # HANGUL SYLLABLE NIEUN-A-TIKEUT -0xB3AF 0xB0A0 # HANGUL SYLLABLE NIEUN-A-RIEUL -0xB3B0 0xB0A1 # HANGUL SYLLABLE NIEUN-A-RIEULKIYEOK -0xB3B1 0xB0A2 # HANGUL SYLLABLE NIEUN-A-RIEULMIEUM -0xB3B2 0xB0A8 # HANGUL SYLLABLE NIEUN-A-MIEUM -0xB3B3 0xB0A9 # HANGUL SYLLABLE NIEUN-A-PIEUP -0xB3B4 0xB0AB # HANGUL SYLLABLE NIEUN-A-SIOS -0xB3B5 0xB0AC # HANGUL SYLLABLE NIEUN-A-SSANGSIOS -0xB3B6 0xB0AD # HANGUL SYLLABLE NIEUN-A-IEUNG -0xB3B7 0xB0AE # HANGUL SYLLABLE NIEUN-A-CIEUC -0xB3B8 0xB0AF # HANGUL SYLLABLE NIEUN-A-CHIEUCH -0xB3B9 0xB0B1 # HANGUL SYLLABLE NIEUN-A-THIEUTH -0xB3BA 0xB0B3 # HANGUL SYLLABLE NIEUN-A-HIEUH -0xB3BB 0xB0B4 # HANGUL SYLLABLE NIEUN-AE -0xB3BC 0xB0B5 # HANGUL SYLLABLE NIEUN-AE-KIYEOK -0xB3BD 0xB0B8 # HANGUL SYLLABLE NIEUN-AE-NIEUN -0xB3BE 0xB0BC # HANGUL SYLLABLE NIEUN-AE-RIEUL -0xB3BF 0xB0C4 # HANGUL SYLLABLE NIEUN-AE-MIEUM -0xB3C0 0xB0C5 # HANGUL SYLLABLE NIEUN-AE-PIEUP -0xB3C1 0xB0C7 # HANGUL SYLLABLE NIEUN-AE-SIOS -0xB3C2 0xB0C8 # HANGUL SYLLABLE NIEUN-AE-SSANGSIOS -0xB3C3 0xB0C9 # HANGUL SYLLABLE NIEUN-AE-IEUNG -0xB3C4 0xB0D0 # HANGUL SYLLABLE NIEUN-YA -0xB3C5 0xB0D1 # HANGUL SYLLABLE NIEUN-YA-KIYEOK -0xB3C6 0xB0D4 # HANGUL SYLLABLE NIEUN-YA-NIEUN -0xB3C7 0xB0D8 # HANGUL SYLLABLE NIEUN-YA-RIEUL -0xB3C8 0xB0E0 # HANGUL SYLLABLE NIEUN-YA-MIEUM -0xB3C9 0xB0E5 # HANGUL SYLLABLE NIEUN-YA-IEUNG -0xB3CA 0xB108 # HANGUL SYLLABLE NIEUN-EO -0xB3CB 0xB109 # HANGUL SYLLABLE NIEUN-EO-KIYEOK -0xB3CC 0xB10B # HANGUL SYLLABLE NIEUN-EO-KIYEOKSIOS -0xB3CD 0xB10C # HANGUL SYLLABLE NIEUN-EO-NIEUN -0xB3CE 0xB110 # HANGUL SYLLABLE NIEUN-EO-RIEUL -0xB3CF 0xB112 # HANGUL SYLLABLE NIEUN-EO-RIEULMIEUM -0xB3D0 0xB113 # HANGUL SYLLABLE NIEUN-EO-RIEULPIEUP -0xB3D1 0xB118 # HANGUL SYLLABLE NIEUN-EO-MIEUM -0xB3D2 0xB119 # HANGUL SYLLABLE NIEUN-EO-PIEUP -0xB3D3 0xB11B # HANGUL SYLLABLE NIEUN-EO-SIOS -0xB3D4 0xB11C # HANGUL SYLLABLE NIEUN-EO-SSANGSIOS -0xB3D5 0xB11D # HANGUL SYLLABLE NIEUN-EO-IEUNG -0xB3D6 0xB123 # HANGUL SYLLABLE NIEUN-EO-HIEUH -0xB3D7 0xB124 # HANGUL SYLLABLE NIEUN-E -0xB3D8 0xB125 # HANGUL SYLLABLE NIEUN-E-KIYEOK -0xB3D9 0xB128 # HANGUL SYLLABLE NIEUN-E-NIEUN -0xB3DA 0xB12C # HANGUL SYLLABLE NIEUN-E-RIEUL -0xB3DB 0xB134 # HANGUL SYLLABLE NIEUN-E-MIEUM -0xB3DC 0xB135 # HANGUL SYLLABLE NIEUN-E-PIEUP -0xB3DD 0xB137 # HANGUL SYLLABLE NIEUN-E-SIOS -0xB3DE 0xB138 # HANGUL SYLLABLE NIEUN-E-SSANGSIOS -0xB3DF 0xB139 # HANGUL SYLLABLE NIEUN-E-IEUNG -0xB3E0 0xB140 # HANGUL SYLLABLE NIEUN-YEO -0xB3E1 0xB141 # HANGUL SYLLABLE NIEUN-YEO-KIYEOK -0xB3E2 0xB144 # HANGUL SYLLABLE NIEUN-YEO-NIEUN -0xB3E3 0xB148 # HANGUL SYLLABLE NIEUN-YEO-RIEUL -0xB3E4 0xB150 # HANGUL SYLLABLE NIEUN-YEO-MIEUM -0xB3E5 0xB151 # HANGUL SYLLABLE NIEUN-YEO-PIEUP -0xB3E6 0xB154 # HANGUL SYLLABLE NIEUN-YEO-SSANGSIOS -0xB3E7 0xB155 # HANGUL SYLLABLE NIEUN-YEO-IEUNG -0xB3E8 0xB158 # HANGUL SYLLABLE NIEUN-YEO-KHIEUKH -0xB3E9 0xB15C # HANGUL SYLLABLE NIEUN-YE -0xB3EA 0xB160 # HANGUL SYLLABLE NIEUN-YE-NIEUN -0xB3EB 0xB178 # HANGUL SYLLABLE NIEUN-O -0xB3EC 0xB179 # HANGUL SYLLABLE NIEUN-O-KIYEOK -0xB3ED 0xB17C # HANGUL SYLLABLE NIEUN-O-NIEUN -0xB3EE 0xB180 # HANGUL SYLLABLE NIEUN-O-RIEUL -0xB3EF 0xB182 # HANGUL SYLLABLE NIEUN-O-RIEULMIEUM -0xB3F0 0xB188 # HANGUL SYLLABLE NIEUN-O-MIEUM -0xB3F1 0xB189 # HANGUL SYLLABLE NIEUN-O-PIEUP -0xB3F2 0xB18B # HANGUL SYLLABLE NIEUN-O-SIOS -0xB3F3 0xB18D # HANGUL SYLLABLE NIEUN-O-IEUNG -0xB3F4 0xB192 # HANGUL SYLLABLE NIEUN-O-PHIEUPH -0xB3F5 0xB193 # HANGUL SYLLABLE NIEUN-O-HIEUH -0xB3F6 0xB194 # HANGUL SYLLABLE NIEUN-WA -0xB3F7 0xB198 # HANGUL SYLLABLE NIEUN-WA-NIEUN -0xB3F8 0xB19C # HANGUL SYLLABLE NIEUN-WA-RIEUL -0xB3F9 0xB1A8 # HANGUL SYLLABLE NIEUN-WA-SSANGSIOS -0xB3FA 0xB1CC # HANGUL SYLLABLE NIEUN-OE -0xB3FB 0xB1D0 # HANGUL SYLLABLE NIEUN-OE-NIEUN -0xB3FC 0xB1D4 # HANGUL SYLLABLE NIEUN-OE-RIEUL -0xB3FD 0xB1DC # HANGUL SYLLABLE NIEUN-OE-MIEUM -0xB3FE 0xB1DD # HANGUL SYLLABLE NIEUN-OE-PIEUP -0xB441 0xD02E # HANGUL SYLLABLE KHIEUKH-WE-CIEUC -0xB442 0xD02F # HANGUL SYLLABLE KHIEUKH-WE-CHIEUCH -0xB443 0xD030 # HANGUL SYLLABLE KHIEUKH-WE-KHIEUKH -0xB444 0xD031 # HANGUL SYLLABLE KHIEUKH-WE-THIEUTH -0xB445 0xD032 # HANGUL SYLLABLE KHIEUKH-WE-PHIEUPH -0xB446 0xD033 # HANGUL SYLLABLE KHIEUKH-WE-HIEUH -0xB447 0xD036 # HANGUL SYLLABLE KHIEUKH-WI-SSANGKIYEOK -0xB448 0xD037 # HANGUL SYLLABLE KHIEUKH-WI-KIYEOKSIOS -0xB449 0xD039 # HANGUL SYLLABLE KHIEUKH-WI-NIEUNCIEUC -0xB44A 0xD03A # HANGUL SYLLABLE KHIEUKH-WI-NIEUNHIEUH -0xB44B 0xD03B # HANGUL SYLLABLE KHIEUKH-WI-TIKEUT -0xB44C 0xD03D # HANGUL SYLLABLE KHIEUKH-WI-RIEULKIYEOK -0xB44D 0xD03E # HANGUL SYLLABLE KHIEUKH-WI-RIEULMIEUM -0xB44E 0xD03F # HANGUL SYLLABLE KHIEUKH-WI-RIEULPIEUP -0xB44F 0xD040 # HANGUL SYLLABLE KHIEUKH-WI-RIEULSIOS -0xB450 0xD041 # HANGUL SYLLABLE KHIEUKH-WI-RIEULTHIEUTH -0xB451 0xD042 # HANGUL SYLLABLE KHIEUKH-WI-RIEULPHIEUPH -0xB452 0xD043 # HANGUL SYLLABLE KHIEUKH-WI-RIEULHIEUH -0xB453 0xD046 # HANGUL SYLLABLE KHIEUKH-WI-PIEUPSIOS -0xB454 0xD048 # HANGUL SYLLABLE KHIEUKH-WI-SSANGSIOS -0xB455 0xD04A # HANGUL SYLLABLE KHIEUKH-WI-CIEUC -0xB456 0xD04B # HANGUL SYLLABLE KHIEUKH-WI-CHIEUCH -0xB457 0xD04C # HANGUL SYLLABLE KHIEUKH-WI-KHIEUKH -0xB458 0xD04D # HANGUL SYLLABLE KHIEUKH-WI-THIEUTH -0xB459 0xD04E # HANGUL SYLLABLE KHIEUKH-WI-PHIEUPH -0xB45A 0xD04F # HANGUL SYLLABLE KHIEUKH-WI-HIEUH -0xB461 0xD051 # HANGUL SYLLABLE KHIEUKH-YU-KIYEOK -0xB462 0xD052 # HANGUL SYLLABLE KHIEUKH-YU-SSANGKIYEOK -0xB463 0xD053 # HANGUL SYLLABLE KHIEUKH-YU-KIYEOKSIOS -0xB464 0xD055 # HANGUL SYLLABLE KHIEUKH-YU-NIEUNCIEUC -0xB465 0xD056 # HANGUL SYLLABLE KHIEUKH-YU-NIEUNHIEUH -0xB466 0xD057 # HANGUL SYLLABLE KHIEUKH-YU-TIKEUT -0xB467 0xD059 # HANGUL SYLLABLE KHIEUKH-YU-RIEULKIYEOK -0xB468 0xD05A # HANGUL SYLLABLE KHIEUKH-YU-RIEULMIEUM -0xB469 0xD05B # HANGUL SYLLABLE KHIEUKH-YU-RIEULPIEUP -0xB46A 0xD05C # HANGUL SYLLABLE KHIEUKH-YU-RIEULSIOS -0xB46B 0xD05D # HANGUL SYLLABLE KHIEUKH-YU-RIEULTHIEUTH -0xB46C 0xD05E # HANGUL SYLLABLE KHIEUKH-YU-RIEULPHIEUPH -0xB46D 0xD05F # HANGUL SYLLABLE KHIEUKH-YU-RIEULHIEUH -0xB46E 0xD061 # HANGUL SYLLABLE KHIEUKH-YU-PIEUP -0xB46F 0xD062 # HANGUL SYLLABLE KHIEUKH-YU-PIEUPSIOS -0xB470 0xD063 # HANGUL SYLLABLE KHIEUKH-YU-SIOS -0xB471 0xD064 # HANGUL SYLLABLE KHIEUKH-YU-SSANGSIOS -0xB472 0xD065 # HANGUL SYLLABLE KHIEUKH-YU-IEUNG -0xB473 0xD066 # HANGUL SYLLABLE KHIEUKH-YU-CIEUC -0xB474 0xD067 # HANGUL SYLLABLE KHIEUKH-YU-CHIEUCH -0xB475 0xD068 # HANGUL SYLLABLE KHIEUKH-YU-KHIEUKH -0xB476 0xD069 # HANGUL SYLLABLE KHIEUKH-YU-THIEUTH -0xB477 0xD06A # HANGUL SYLLABLE KHIEUKH-YU-PHIEUPH -0xB478 0xD06B # HANGUL SYLLABLE KHIEUKH-YU-HIEUH -0xB479 0xD06E # HANGUL SYLLABLE KHIEUKH-EU-SSANGKIYEOK -0xB47A 0xD06F # HANGUL SYLLABLE KHIEUKH-EU-KIYEOKSIOS -0xB481 0xD071 # HANGUL SYLLABLE KHIEUKH-EU-NIEUNCIEUC -0xB482 0xD072 # HANGUL SYLLABLE KHIEUKH-EU-NIEUNHIEUH -0xB483 0xD073 # HANGUL SYLLABLE KHIEUKH-EU-TIKEUT -0xB484 0xD075 # HANGUL SYLLABLE KHIEUKH-EU-RIEULKIYEOK -0xB485 0xD076 # HANGUL SYLLABLE KHIEUKH-EU-RIEULMIEUM -0xB486 0xD077 # HANGUL SYLLABLE KHIEUKH-EU-RIEULPIEUP -0xB487 0xD078 # HANGUL SYLLABLE KHIEUKH-EU-RIEULSIOS -0xB488 0xD079 # HANGUL SYLLABLE KHIEUKH-EU-RIEULTHIEUTH -0xB489 0xD07A # HANGUL SYLLABLE KHIEUKH-EU-RIEULPHIEUPH -0xB48A 0xD07B # HANGUL SYLLABLE KHIEUKH-EU-RIEULHIEUH -0xB48B 0xD07E # HANGUL SYLLABLE KHIEUKH-EU-PIEUPSIOS -0xB48C 0xD07F # HANGUL SYLLABLE KHIEUKH-EU-SIOS -0xB48D 0xD080 # HANGUL SYLLABLE KHIEUKH-EU-SSANGSIOS -0xB48E 0xD082 # HANGUL SYLLABLE KHIEUKH-EU-CIEUC -0xB48F 0xD083 # HANGUL SYLLABLE KHIEUKH-EU-CHIEUCH -0xB490 0xD084 # HANGUL SYLLABLE KHIEUKH-EU-KHIEUKH -0xB491 0xD085 # HANGUL SYLLABLE KHIEUKH-EU-THIEUTH -0xB492 0xD086 # HANGUL SYLLABLE KHIEUKH-EU-PHIEUPH -0xB493 0xD087 # HANGUL SYLLABLE KHIEUKH-EU-HIEUH -0xB494 0xD088 # HANGUL SYLLABLE KHIEUKH-YI -0xB495 0xD089 # HANGUL SYLLABLE KHIEUKH-YI-KIYEOK -0xB496 0xD08A # HANGUL SYLLABLE KHIEUKH-YI-SSANGKIYEOK -0xB497 0xD08B # HANGUL SYLLABLE KHIEUKH-YI-KIYEOKSIOS -0xB498 0xD08C # HANGUL SYLLABLE KHIEUKH-YI-NIEUN -0xB499 0xD08D # HANGUL SYLLABLE KHIEUKH-YI-NIEUNCIEUC -0xB49A 0xD08E # HANGUL SYLLABLE KHIEUKH-YI-NIEUNHIEUH -0xB49B 0xD08F # HANGUL SYLLABLE KHIEUKH-YI-TIKEUT -0xB49C 0xD090 # HANGUL SYLLABLE KHIEUKH-YI-RIEUL -0xB49D 0xD091 # HANGUL SYLLABLE KHIEUKH-YI-RIEULKIYEOK -0xB49E 0xD092 # HANGUL SYLLABLE KHIEUKH-YI-RIEULMIEUM -0xB49F 0xD093 # HANGUL SYLLABLE KHIEUKH-YI-RIEULPIEUP -0xB4A0 0xD094 # HANGUL SYLLABLE KHIEUKH-YI-RIEULSIOS -0xB4A1 0xB1DF # HANGUL SYLLABLE NIEUN-OE-SIOS -0xB4A2 0xB1E8 # HANGUL SYLLABLE NIEUN-YO -0xB4A3 0xB1E9 # HANGUL SYLLABLE NIEUN-YO-KIYEOK -0xB4A4 0xB1EC # HANGUL SYLLABLE NIEUN-YO-NIEUN -0xB4A5 0xB1F0 # HANGUL SYLLABLE NIEUN-YO-RIEUL -0xB4A6 0xB1F9 # HANGUL SYLLABLE NIEUN-YO-PIEUP -0xB4A7 0xB1FB # HANGUL SYLLABLE NIEUN-YO-SIOS -0xB4A8 0xB1FD # HANGUL SYLLABLE NIEUN-YO-IEUNG -0xB4A9 0xB204 # HANGUL SYLLABLE NIEUN-U -0xB4AA 0xB205 # HANGUL SYLLABLE NIEUN-U-KIYEOK -0xB4AB 0xB208 # HANGUL SYLLABLE NIEUN-U-NIEUN -0xB4AC 0xB20B # HANGUL SYLLABLE NIEUN-U-TIKEUT -0xB4AD 0xB20C # HANGUL SYLLABLE NIEUN-U-RIEUL -0xB4AE 0xB214 # HANGUL SYLLABLE NIEUN-U-MIEUM -0xB4AF 0xB215 # HANGUL SYLLABLE NIEUN-U-PIEUP -0xB4B0 0xB217 # HANGUL SYLLABLE NIEUN-U-SIOS -0xB4B1 0xB219 # HANGUL SYLLABLE NIEUN-U-IEUNG -0xB4B2 0xB220 # HANGUL SYLLABLE NIEUN-WEO -0xB4B3 0xB234 # HANGUL SYLLABLE NIEUN-WEO-SSANGSIOS -0xB4B4 0xB23C # HANGUL SYLLABLE NIEUN-WE -0xB4B5 0xB258 # HANGUL SYLLABLE NIEUN-WI -0xB4B6 0xB25C # HANGUL SYLLABLE NIEUN-WI-NIEUN -0xB4B7 0xB260 # HANGUL SYLLABLE NIEUN-WI-RIEUL -0xB4B8 0xB268 # HANGUL SYLLABLE NIEUN-WI-MIEUM -0xB4B9 0xB269 # HANGUL SYLLABLE NIEUN-WI-PIEUP -0xB4BA 0xB274 # HANGUL SYLLABLE NIEUN-YU -0xB4BB 0xB275 # HANGUL SYLLABLE NIEUN-YU-KIYEOK -0xB4BC 0xB27C # HANGUL SYLLABLE NIEUN-YU-RIEUL -0xB4BD 0xB284 # HANGUL SYLLABLE NIEUN-YU-MIEUM -0xB4BE 0xB285 # HANGUL SYLLABLE NIEUN-YU-PIEUP -0xB4BF 0xB289 # HANGUL SYLLABLE NIEUN-YU-IEUNG -0xB4C0 0xB290 # HANGUL SYLLABLE NIEUN-EU -0xB4C1 0xB291 # HANGUL SYLLABLE NIEUN-EU-KIYEOK -0xB4C2 0xB294 # HANGUL SYLLABLE NIEUN-EU-NIEUN -0xB4C3 0xB298 # HANGUL SYLLABLE NIEUN-EU-RIEUL -0xB4C4 0xB299 # HANGUL SYLLABLE NIEUN-EU-RIEULKIYEOK -0xB4C5 0xB29A # HANGUL SYLLABLE NIEUN-EU-RIEULMIEUM -0xB4C6 0xB2A0 # HANGUL SYLLABLE NIEUN-EU-MIEUM -0xB4C7 0xB2A1 # HANGUL SYLLABLE NIEUN-EU-PIEUP -0xB4C8 0xB2A3 # HANGUL SYLLABLE NIEUN-EU-SIOS -0xB4C9 0xB2A5 # HANGUL SYLLABLE NIEUN-EU-IEUNG -0xB4CA 0xB2A6 # HANGUL SYLLABLE NIEUN-EU-CIEUC -0xB4CB 0xB2AA # HANGUL SYLLABLE NIEUN-EU-PHIEUPH -0xB4CC 0xB2AC # HANGUL SYLLABLE NIEUN-YI -0xB4CD 0xB2B0 # HANGUL SYLLABLE NIEUN-YI-NIEUN -0xB4CE 0xB2B4 # HANGUL SYLLABLE NIEUN-YI-RIEUL -0xB4CF 0xB2C8 # HANGUL SYLLABLE NIEUN-I -0xB4D0 0xB2C9 # HANGUL SYLLABLE NIEUN-I-KIYEOK -0xB4D1 0xB2CC # HANGUL SYLLABLE NIEUN-I-NIEUN -0xB4D2 0xB2D0 # HANGUL SYLLABLE NIEUN-I-RIEUL -0xB4D3 0xB2D2 # HANGUL SYLLABLE NIEUN-I-RIEULMIEUM-<3/22/95> -0xB4D4 0xB2D8 # HANGUL SYLLABLE NIEUN-I-MIEUM -0xB4D5 0xB2D9 # HANGUL SYLLABLE NIEUN-I-PIEUP -0xB4D6 0xB2DB # HANGUL SYLLABLE NIEUN-I-SIOS -0xB4D7 0xB2DD # HANGUL SYLLABLE NIEUN-I-IEUNG -0xB4D8 0xB2E2 # HANGUL SYLLABLE NIEUN-I-PHIEUPH -0xB4D9 0xB2E4 # HANGUL SYLLABLE TIKEUT-A -0xB4DA 0xB2E5 # HANGUL SYLLABLE TIKEUT-A-KIYEOK -0xB4DB 0xB2E6 # HANGUL SYLLABLE TIKEUT-A-SSANGKIYEOK -0xB4DC 0xB2E8 # HANGUL SYLLABLE TIKEUT-A-NIEUN -0xB4DD 0xB2EB # HANGUL SYLLABLE TIKEUT-A-TIKEUT -0xB4DE 0xB2EC # HANGUL SYLLABLE TIKEUT-A-RIEUL -0xB4DF 0xB2ED # HANGUL SYLLABLE TIKEUT-A-RIEULKIYEOK -0xB4E0 0xB2EE # HANGUL SYLLABLE TIKEUT-A-RIEULMIEUM -0xB4E1 0xB2EF # HANGUL SYLLABLE TIKEUT-A-RIEULPIEUP -0xB4E2 0xB2F3 # HANGUL SYLLABLE TIKEUT-A-RIEULHIEUH -0xB4E3 0xB2F4 # HANGUL SYLLABLE TIKEUT-A-MIEUM -0xB4E4 0xB2F5 # HANGUL SYLLABLE TIKEUT-A-PIEUP -0xB4E5 0xB2F7 # HANGUL SYLLABLE TIKEUT-A-SIOS -0xB4E6 0xB2F8 # HANGUL SYLLABLE TIKEUT-A-SSANGSIOS -0xB4E7 0xB2F9 # HANGUL SYLLABLE TIKEUT-A-IEUNG -0xB4E8 0xB2FA # HANGUL SYLLABLE TIKEUT-A-CIEUC -0xB4E9 0xB2FB # HANGUL SYLLABLE TIKEUT-A-CHIEUCH -0xB4EA 0xB2FF # HANGUL SYLLABLE TIKEUT-A-HIEUH -0xB4EB 0xB300 # HANGUL SYLLABLE TIKEUT-AE -0xB4EC 0xB301 # HANGUL SYLLABLE TIKEUT-AE-KIYEOK -0xB4ED 0xB304 # HANGUL SYLLABLE TIKEUT-AE-NIEUN -0xB4EE 0xB308 # HANGUL SYLLABLE TIKEUT-AE-RIEUL -0xB4EF 0xB310 # HANGUL SYLLABLE TIKEUT-AE-MIEUM -0xB4F0 0xB311 # HANGUL SYLLABLE TIKEUT-AE-PIEUP -0xB4F1 0xB313 # HANGUL SYLLABLE TIKEUT-AE-SIOS -0xB4F2 0xB314 # HANGUL SYLLABLE TIKEUT-AE-SSANGSIOS -0xB4F3 0xB315 # HANGUL SYLLABLE TIKEUT-AE-IEUNG -0xB4F4 0xB31C # HANGUL SYLLABLE TIKEUT-YA -0xB4F5 0xB354 # HANGUL SYLLABLE TIKEUT-EO -0xB4F6 0xB355 # HANGUL SYLLABLE TIKEUT-EO-KIYEOK -0xB4F7 0xB356 # HANGUL SYLLABLE TIKEUT-EO-SSANGKIYEOK -0xB4F8 0xB358 # HANGUL SYLLABLE TIKEUT-EO-NIEUN -0xB4F9 0xB35B # HANGUL SYLLABLE TIKEUT-EO-TIKEUT -0xB4FA 0xB35C # HANGUL SYLLABLE TIKEUT-EO-RIEUL -0xB4FB 0xB35E # HANGUL SYLLABLE TIKEUT-EO-RIEULMIEUM -0xB4FC 0xB35F # HANGUL SYLLABLE TIKEUT-EO-RIEULPIEUP -0xB4FD 0xB364 # HANGUL SYLLABLE TIKEUT-EO-MIEUM -0xB4FE 0xB365 # HANGUL SYLLABLE TIKEUT-EO-PIEUP -0xB541 0xD095 # HANGUL SYLLABLE KHIEUKH-YI-RIEULTHIEUTH -0xB542 0xD096 # HANGUL SYLLABLE KHIEUKH-YI-RIEULPHIEUPH -0xB543 0xD097 # HANGUL SYLLABLE KHIEUKH-YI-RIEULHIEUH -0xB544 0xD098 # HANGUL SYLLABLE KHIEUKH-YI-MIEUM -0xB545 0xD099 # HANGUL SYLLABLE KHIEUKH-YI-PIEUP -0xB546 0xD09A # HANGUL SYLLABLE KHIEUKH-YI-PIEUPSIOS -0xB547 0xD09B # HANGUL SYLLABLE KHIEUKH-YI-SIOS -0xB548 0xD09C # HANGUL SYLLABLE KHIEUKH-YI-SSANGSIOS -0xB549 0xD09D # HANGUL SYLLABLE KHIEUKH-YI-IEUNG -0xB54A 0xD09E # HANGUL SYLLABLE KHIEUKH-YI-CIEUC -0xB54B 0xD09F # HANGUL SYLLABLE KHIEUKH-YI-CHIEUCH -0xB54C 0xD0A0 # HANGUL SYLLABLE KHIEUKH-YI-KHIEUKH -0xB54D 0xD0A1 # HANGUL SYLLABLE KHIEUKH-YI-THIEUTH -0xB54E 0xD0A2 # HANGUL SYLLABLE KHIEUKH-YI-PHIEUPH -0xB54F 0xD0A3 # HANGUL SYLLABLE KHIEUKH-YI-HIEUH -0xB550 0xD0A6 # HANGUL SYLLABLE KHIEUKH-I-SSANGKIYEOK -0xB551 0xD0A7 # HANGUL SYLLABLE KHIEUKH-I-KIYEOKSIOS -0xB552 0xD0A9 # HANGUL SYLLABLE KHIEUKH-I-NIEUNCIEUC -0xB553 0xD0AA # HANGUL SYLLABLE KHIEUKH-I-NIEUNHIEUH -0xB554 0xD0AB # HANGUL SYLLABLE KHIEUKH-I-TIKEUT -0xB555 0xD0AD # HANGUL SYLLABLE KHIEUKH-I-RIEULKIYEOK -0xB556 0xD0AE # HANGUL SYLLABLE KHIEUKH-I-RIEULMIEUM -0xB557 0xD0AF # HANGUL SYLLABLE KHIEUKH-I-RIEULPIEUP -0xB558 0xD0B0 # HANGUL SYLLABLE KHIEUKH-I-RIEULSIOS -0xB559 0xD0B1 # HANGUL SYLLABLE KHIEUKH-I-RIEULTHIEUTH -0xB55A 0xD0B2 # HANGUL SYLLABLE KHIEUKH-I-RIEULPHIEUPH -0xB561 0xD0B3 # HANGUL SYLLABLE KHIEUKH-I-RIEULHIEUH -0xB562 0xD0B6 # HANGUL SYLLABLE KHIEUKH-I-PIEUPSIOS -0xB563 0xD0B8 # HANGUL SYLLABLE KHIEUKH-I-SSANGSIOS -0xB564 0xD0BA # HANGUL SYLLABLE KHIEUKH-I-CIEUC -0xB565 0xD0BB # HANGUL SYLLABLE KHIEUKH-I-CHIEUCH -0xB566 0xD0BC # HANGUL SYLLABLE KHIEUKH-I-KHIEUKH -0xB567 0xD0BD # HANGUL SYLLABLE KHIEUKH-I-THIEUTH -0xB568 0xD0BE # HANGUL SYLLABLE KHIEUKH-I-PHIEUPH -0xB569 0xD0BF # HANGUL SYLLABLE KHIEUKH-I-HIEUH -0xB56A 0xD0C2 # HANGUL SYLLABLE THIEUTH-A-SSANGKIYEOK -0xB56B 0xD0C3 # HANGUL SYLLABLE THIEUTH-A-KIYEOKSIOS -0xB56C 0xD0C5 # HANGUL SYLLABLE THIEUTH-A-NIEUNCIEUC -0xB56D 0xD0C6 # HANGUL SYLLABLE THIEUTH-A-NIEUNHIEUH -0xB56E 0xD0C7 # HANGUL SYLLABLE THIEUTH-A-TIKEUT -0xB56F 0xD0CA # HANGUL SYLLABLE THIEUTH-A-RIEULMIEUM -0xB570 0xD0CB # HANGUL SYLLABLE THIEUTH-A-RIEULPIEUP -0xB571 0xD0CC # HANGUL SYLLABLE THIEUTH-A-RIEULSIOS -0xB572 0xD0CD # HANGUL SYLLABLE THIEUTH-A-RIEULTHIEUTH -0xB573 0xD0CE # HANGUL SYLLABLE THIEUTH-A-RIEULPHIEUPH -0xB574 0xD0CF # HANGUL SYLLABLE THIEUTH-A-RIEULHIEUH -0xB575 0xD0D2 # HANGUL SYLLABLE THIEUTH-A-PIEUPSIOS -0xB576 0xD0D6 # HANGUL SYLLABLE THIEUTH-A-CIEUC -0xB577 0xD0D7 # HANGUL SYLLABLE THIEUTH-A-CHIEUCH -0xB578 0xD0D8 # HANGUL SYLLABLE THIEUTH-A-KHIEUKH -0xB579 0xD0D9 # HANGUL SYLLABLE THIEUTH-A-THIEUTH -0xB57A 0xD0DA # HANGUL SYLLABLE THIEUTH-A-PHIEUPH -0xB581 0xD0DB # HANGUL SYLLABLE THIEUTH-A-HIEUH -0xB582 0xD0DE # HANGUL SYLLABLE THIEUTH-AE-SSANGKIYEOK -0xB583 0xD0DF # HANGUL SYLLABLE THIEUTH-AE-KIYEOKSIOS -0xB584 0xD0E1 # HANGUL SYLLABLE THIEUTH-AE-NIEUNCIEUC -0xB585 0xD0E2 # HANGUL SYLLABLE THIEUTH-AE-NIEUNHIEUH -0xB586 0xD0E3 # HANGUL SYLLABLE THIEUTH-AE-TIKEUT -0xB587 0xD0E5 # HANGUL SYLLABLE THIEUTH-AE-RIEULKIYEOK -0xB588 0xD0E6 # HANGUL SYLLABLE THIEUTH-AE-RIEULMIEUM -0xB589 0xD0E7 # HANGUL SYLLABLE THIEUTH-AE-RIEULPIEUP -0xB58A 0xD0E8 # HANGUL SYLLABLE THIEUTH-AE-RIEULSIOS -0xB58B 0xD0E9 # HANGUL SYLLABLE THIEUTH-AE-RIEULTHIEUTH -0xB58C 0xD0EA # HANGUL SYLLABLE THIEUTH-AE-RIEULPHIEUPH -0xB58D 0xD0EB # HANGUL SYLLABLE THIEUTH-AE-RIEULHIEUH -0xB58E 0xD0EE # HANGUL SYLLABLE THIEUTH-AE-PIEUPSIOS -0xB58F 0xD0F2 # HANGUL SYLLABLE THIEUTH-AE-CIEUC -0xB590 0xD0F3 # HANGUL SYLLABLE THIEUTH-AE-CHIEUCH -0xB591 0xD0F4 # HANGUL SYLLABLE THIEUTH-AE-KHIEUKH -0xB592 0xD0F5 # HANGUL SYLLABLE THIEUTH-AE-THIEUTH -0xB593 0xD0F6 # HANGUL SYLLABLE THIEUTH-AE-PHIEUPH -0xB594 0xD0F7 # HANGUL SYLLABLE THIEUTH-AE-HIEUH -0xB595 0xD0F9 # HANGUL SYLLABLE THIEUTH-YA-KIYEOK -0xB596 0xD0FA # HANGUL SYLLABLE THIEUTH-YA-SSANGKIYEOK -0xB597 0xD0FB # HANGUL SYLLABLE THIEUTH-YA-KIYEOKSIOS -0xB598 0xD0FC # HANGUL SYLLABLE THIEUTH-YA-NIEUN -0xB599 0xD0FD # HANGUL SYLLABLE THIEUTH-YA-NIEUNCIEUC -0xB59A 0xD0FE # HANGUL SYLLABLE THIEUTH-YA-NIEUNHIEUH -0xB59B 0xD0FF # HANGUL SYLLABLE THIEUTH-YA-TIKEUT -0xB59C 0xD100 # HANGUL SYLLABLE THIEUTH-YA-RIEUL -0xB59D 0xD101 # HANGUL SYLLABLE THIEUTH-YA-RIEULKIYEOK -0xB59E 0xD102 # HANGUL SYLLABLE THIEUTH-YA-RIEULMIEUM -0xB59F 0xD103 # HANGUL SYLLABLE THIEUTH-YA-RIEULPIEUP -0xB5A0 0xD104 # HANGUL SYLLABLE THIEUTH-YA-RIEULSIOS -0xB5A1 0xB367 # HANGUL SYLLABLE TIKEUT-EO-SIOS -0xB5A2 0xB369 # HANGUL SYLLABLE TIKEUT-EO-IEUNG -0xB5A3 0xB36B # HANGUL SYLLABLE TIKEUT-EO-CHIEUCH -0xB5A4 0xB36E # HANGUL SYLLABLE TIKEUT-EO-PHIEUPH -0xB5A5 0xB370 # HANGUL SYLLABLE TIKEUT-E -0xB5A6 0xB371 # HANGUL SYLLABLE TIKEUT-E-KIYEOK -0xB5A7 0xB374 # HANGUL SYLLABLE TIKEUT-E-NIEUN -0xB5A8 0xB378 # HANGUL SYLLABLE TIKEUT-E-RIEUL -0xB5A9 0xB380 # HANGUL SYLLABLE TIKEUT-E-MIEUM -0xB5AA 0xB381 # HANGUL SYLLABLE TIKEUT-E-PIEUP -0xB5AB 0xB383 # HANGUL SYLLABLE TIKEUT-E-SIOS -0xB5AC 0xB384 # HANGUL SYLLABLE TIKEUT-E-SSANGSIOS -0xB5AD 0xB385 # HANGUL SYLLABLE TIKEUT-E-IEUNG -0xB5AE 0xB38C # HANGUL SYLLABLE TIKEUT-YEO -0xB5AF 0xB390 # HANGUL SYLLABLE TIKEUT-YEO-NIEUN -0xB5B0 0xB394 # HANGUL SYLLABLE TIKEUT-YEO-RIEUL -0xB5B1 0xB3A0 # HANGUL SYLLABLE TIKEUT-YEO-SSANGSIOS -0xB5B2 0xB3A1 # HANGUL SYLLABLE TIKEUT-YEO-IEUNG -0xB5B3 0xB3A8 # HANGUL SYLLABLE TIKEUT-YE -0xB5B4 0xB3AC # HANGUL SYLLABLE TIKEUT-YE-NIEUN -0xB5B5 0xB3C4 # HANGUL SYLLABLE TIKEUT-O -0xB5B6 0xB3C5 # HANGUL SYLLABLE TIKEUT-O-KIYEOK -0xB5B7 0xB3C8 # HANGUL SYLLABLE TIKEUT-O-NIEUN -0xB5B8 0xB3CB # HANGUL SYLLABLE TIKEUT-O-TIKEUT -0xB5B9 0xB3CC # HANGUL SYLLABLE TIKEUT-O-RIEUL -0xB5BA 0xB3CE # HANGUL SYLLABLE TIKEUT-O-RIEULMIEUM -0xB5BB 0xB3D0 # HANGUL SYLLABLE TIKEUT-O-RIEULSIOS -0xB5BC 0xB3D4 # HANGUL SYLLABLE TIKEUT-O-MIEUM -0xB5BD 0xB3D5 # HANGUL SYLLABLE TIKEUT-O-PIEUP -0xB5BE 0xB3D7 # HANGUL SYLLABLE TIKEUT-O-SIOS -0xB5BF 0xB3D9 # HANGUL SYLLABLE TIKEUT-O-IEUNG -0xB5C0 0xB3DB # HANGUL SYLLABLE TIKEUT-O-CHIEUCH -0xB5C1 0xB3DD # HANGUL SYLLABLE TIKEUT-O-THIEUTH -0xB5C2 0xB3E0 # HANGUL SYLLABLE TIKEUT-WA -0xB5C3 0xB3E4 # HANGUL SYLLABLE TIKEUT-WA-NIEUN -0xB5C4 0xB3E8 # HANGUL SYLLABLE TIKEUT-WA-RIEUL -0xB5C5 0xB3FC # HANGUL SYLLABLE TIKEUT-WAE -0xB5C6 0xB410 # HANGUL SYLLABLE TIKEUT-WAE-SSANGSIOS -0xB5C7 0xB418 # HANGUL SYLLABLE TIKEUT-OE -0xB5C8 0xB41C # HANGUL SYLLABLE TIKEUT-OE-NIEUN -0xB5C9 0xB420 # HANGUL SYLLABLE TIKEUT-OE-RIEUL -0xB5CA 0xB428 # HANGUL SYLLABLE TIKEUT-OE-MIEUM -0xB5CB 0xB429 # HANGUL SYLLABLE TIKEUT-OE-PIEUP -0xB5CC 0xB42B # HANGUL SYLLABLE TIKEUT-OE-SIOS -0xB5CD 0xB434 # HANGUL SYLLABLE TIKEUT-YO -0xB5CE 0xB450 # HANGUL SYLLABLE TIKEUT-U -0xB5CF 0xB451 # HANGUL SYLLABLE TIKEUT-U-KIYEOK -0xB5D0 0xB454 # HANGUL SYLLABLE TIKEUT-U-NIEUN -0xB5D1 0xB458 # HANGUL SYLLABLE TIKEUT-U-RIEUL -0xB5D2 0xB460 # HANGUL SYLLABLE TIKEUT-U-MIEUM -0xB5D3 0xB461 # HANGUL SYLLABLE TIKEUT-U-PIEUP -0xB5D4 0xB463 # HANGUL SYLLABLE TIKEUT-U-SIOS -0xB5D5 0xB465 # HANGUL SYLLABLE TIKEUT-U-IEUNG -0xB5D6 0xB46C # HANGUL SYLLABLE TIKEUT-WEO -0xB5D7 0xB480 # HANGUL SYLLABLE TIKEUT-WEO-SSANGSIOS -0xB5D8 0xB488 # HANGUL SYLLABLE TIKEUT-WE -0xB5D9 0xB49D # HANGUL SYLLABLE TIKEUT-WE-IEUNG -0xB5DA 0xB4A4 # HANGUL SYLLABLE TIKEUT-WI -0xB5DB 0xB4A8 # HANGUL SYLLABLE TIKEUT-WI-NIEUN -0xB5DC 0xB4AC # HANGUL SYLLABLE TIKEUT-WI-RIEUL -0xB5DD 0xB4B5 # HANGUL SYLLABLE TIKEUT-WI-PIEUP -0xB5DE 0xB4B7 # HANGUL SYLLABLE TIKEUT-WI-SIOS -0xB5DF 0xB4B9 # HANGUL SYLLABLE TIKEUT-WI-IEUNG -0xB5E0 0xB4C0 # HANGUL SYLLABLE TIKEUT-YU -0xB5E1 0xB4C4 # HANGUL SYLLABLE TIKEUT-YU-NIEUN -0xB5E2 0xB4C8 # HANGUL SYLLABLE TIKEUT-YU-RIEUL -0xB5E3 0xB4D0 # HANGUL SYLLABLE TIKEUT-YU-MIEUM -0xB5E4 0xB4D5 # HANGUL SYLLABLE TIKEUT-YU-IEUNG -0xB5E5 0xB4DC # HANGUL SYLLABLE TIKEUT-EU -0xB5E6 0xB4DD # HANGUL SYLLABLE TIKEUT-EU-KIYEOK -0xB5E7 0xB4E0 # HANGUL SYLLABLE TIKEUT-EU-NIEUN -0xB5E8 0xB4E3 # HANGUL SYLLABLE TIKEUT-EU-TIKEUT -0xB5E9 0xB4E4 # HANGUL SYLLABLE TIKEUT-EU-RIEUL -0xB5EA 0xB4E6 # HANGUL SYLLABLE TIKEUT-EU-RIEULMIEUM -0xB5EB 0xB4EC # HANGUL SYLLABLE TIKEUT-EU-MIEUM -0xB5EC 0xB4ED # HANGUL SYLLABLE TIKEUT-EU-PIEUP -0xB5ED 0xB4EF # HANGUL SYLLABLE TIKEUT-EU-SIOS -0xB5EE 0xB4F1 # HANGUL SYLLABLE TIKEUT-EU-IEUNG -0xB5EF 0xB4F8 # HANGUL SYLLABLE TIKEUT-YI -0xB5F0 0xB514 # HANGUL SYLLABLE TIKEUT-I -0xB5F1 0xB515 # HANGUL SYLLABLE TIKEUT-I-KIYEOK -0xB5F2 0xB518 # HANGUL SYLLABLE TIKEUT-I-NIEUN -0xB5F3 0xB51B # HANGUL SYLLABLE TIKEUT-I-TIKEUT -0xB5F4 0xB51C # HANGUL SYLLABLE TIKEUT-I-RIEUL -0xB5F5 0xB524 # HANGUL SYLLABLE TIKEUT-I-MIEUM -0xB5F6 0xB525 # HANGUL SYLLABLE TIKEUT-I-PIEUP -0xB5F7 0xB527 # HANGUL SYLLABLE TIKEUT-I-SIOS -0xB5F8 0xB528 # HANGUL SYLLABLE TIKEUT-I-SSANGSIOS -0xB5F9 0xB529 # HANGUL SYLLABLE TIKEUT-I-IEUNG -0xB5FA 0xB52A # HANGUL SYLLABLE TIKEUT-I-CIEUC -0xB5FB 0xB530 # HANGUL SYLLABLE SSANGTIKEUT-A -0xB5FC 0xB531 # HANGUL SYLLABLE SSANGTIKEUT-A-KIYEOK -0xB5FD 0xB534 # HANGUL SYLLABLE SSANGTIKEUT-A-NIEUN -0xB5FE 0xB538 # HANGUL SYLLABLE SSANGTIKEUT-A-RIEUL -0xB641 0xD105 # HANGUL SYLLABLE THIEUTH-YA-RIEULTHIEUTH -0xB642 0xD106 # HANGUL SYLLABLE THIEUTH-YA-RIEULPHIEUPH -0xB643 0xD107 # HANGUL SYLLABLE THIEUTH-YA-RIEULHIEUH -0xB644 0xD108 # HANGUL SYLLABLE THIEUTH-YA-MIEUM -0xB645 0xD109 # HANGUL SYLLABLE THIEUTH-YA-PIEUP -0xB646 0xD10A # HANGUL SYLLABLE THIEUTH-YA-PIEUPSIOS -0xB647 0xD10B # HANGUL SYLLABLE THIEUTH-YA-SIOS -0xB648 0xD10C # HANGUL SYLLABLE THIEUTH-YA-SSANGSIOS -0xB649 0xD10E # HANGUL SYLLABLE THIEUTH-YA-CIEUC -0xB64A 0xD10F # HANGUL SYLLABLE THIEUTH-YA-CHIEUCH -0xB64B 0xD110 # HANGUL SYLLABLE THIEUTH-YA-KHIEUKH -0xB64C 0xD111 # HANGUL SYLLABLE THIEUTH-YA-THIEUTH -0xB64D 0xD112 # HANGUL SYLLABLE THIEUTH-YA-PHIEUPH -0xB64E 0xD113 # HANGUL SYLLABLE THIEUTH-YA-HIEUH -0xB64F 0xD114 # HANGUL SYLLABLE THIEUTH-YAE -0xB650 0xD115 # HANGUL SYLLABLE THIEUTH-YAE-KIYEOK -0xB651 0xD116 # HANGUL SYLLABLE THIEUTH-YAE-SSANGKIYEOK -0xB652 0xD117 # HANGUL SYLLABLE THIEUTH-YAE-KIYEOKSIOS -0xB653 0xD118 # HANGUL SYLLABLE THIEUTH-YAE-NIEUN -0xB654 0xD119 # HANGUL SYLLABLE THIEUTH-YAE-NIEUNCIEUC -0xB655 0xD11A # HANGUL SYLLABLE THIEUTH-YAE-NIEUNHIEUH -0xB656 0xD11B # HANGUL SYLLABLE THIEUTH-YAE-TIKEUT -0xB657 0xD11C # HANGUL SYLLABLE THIEUTH-YAE-RIEUL -0xB658 0xD11D # HANGUL SYLLABLE THIEUTH-YAE-RIEULKIYEOK -0xB659 0xD11E # HANGUL SYLLABLE THIEUTH-YAE-RIEULMIEUM -0xB65A 0xD11F # HANGUL SYLLABLE THIEUTH-YAE-RIEULPIEUP -0xB661 0xD120 # HANGUL SYLLABLE THIEUTH-YAE-RIEULSIOS -0xB662 0xD121 # HANGUL SYLLABLE THIEUTH-YAE-RIEULTHIEUTH -0xB663 0xD122 # HANGUL SYLLABLE THIEUTH-YAE-RIEULPHIEUPH -0xB664 0xD123 # HANGUL SYLLABLE THIEUTH-YAE-RIEULHIEUH -0xB665 0xD124 # HANGUL SYLLABLE THIEUTH-YAE-MIEUM -0xB666 0xD125 # HANGUL SYLLABLE THIEUTH-YAE-PIEUP -0xB667 0xD126 # HANGUL SYLLABLE THIEUTH-YAE-PIEUPSIOS -0xB668 0xD127 # HANGUL SYLLABLE THIEUTH-YAE-SIOS -0xB669 0xD128 # HANGUL SYLLABLE THIEUTH-YAE-SSANGSIOS -0xB66A 0xD129 # HANGUL SYLLABLE THIEUTH-YAE-IEUNG -0xB66B 0xD12A # HANGUL SYLLABLE THIEUTH-YAE-CIEUC -0xB66C 0xD12B # HANGUL SYLLABLE THIEUTH-YAE-CHIEUCH -0xB66D 0xD12C # HANGUL SYLLABLE THIEUTH-YAE-KHIEUKH -0xB66E 0xD12D # HANGUL SYLLABLE THIEUTH-YAE-THIEUTH -0xB66F 0xD12E # HANGUL SYLLABLE THIEUTH-YAE-PHIEUPH -0xB670 0xD12F # HANGUL SYLLABLE THIEUTH-YAE-HIEUH -0xB671 0xD132 # HANGUL SYLLABLE THIEUTH-EO-SSANGKIYEOK -0xB672 0xD133 # HANGUL SYLLABLE THIEUTH-EO-KIYEOKSIOS -0xB673 0xD135 # HANGUL SYLLABLE THIEUTH-EO-NIEUNCIEUC -0xB674 0xD136 # HANGUL SYLLABLE THIEUTH-EO-NIEUNHIEUH -0xB675 0xD137 # HANGUL SYLLABLE THIEUTH-EO-TIKEUT -0xB676 0xD139 # HANGUL SYLLABLE THIEUTH-EO-RIEULKIYEOK -0xB677 0xD13B # HANGUL SYLLABLE THIEUTH-EO-RIEULPIEUP -0xB678 0xD13C # HANGUL SYLLABLE THIEUTH-EO-RIEULSIOS -0xB679 0xD13D # HANGUL SYLLABLE THIEUTH-EO-RIEULTHIEUTH -0xB67A 0xD13E # HANGUL SYLLABLE THIEUTH-EO-RIEULPHIEUPH -0xB681 0xD13F # HANGUL SYLLABLE THIEUTH-EO-RIEULHIEUH -0xB682 0xD142 # HANGUL SYLLABLE THIEUTH-EO-PIEUPSIOS -0xB683 0xD146 # HANGUL SYLLABLE THIEUTH-EO-CIEUC -0xB684 0xD147 # HANGUL SYLLABLE THIEUTH-EO-CHIEUCH -0xB685 0xD148 # HANGUL SYLLABLE THIEUTH-EO-KHIEUKH -0xB686 0xD149 # HANGUL SYLLABLE THIEUTH-EO-THIEUTH -0xB687 0xD14A # HANGUL SYLLABLE THIEUTH-EO-PHIEUPH -0xB688 0xD14B # HANGUL SYLLABLE THIEUTH-EO-HIEUH -0xB689 0xD14E # HANGUL SYLLABLE THIEUTH-E-SSANGKIYEOK -0xB68A 0xD14F # HANGUL SYLLABLE THIEUTH-E-KIYEOKSIOS -0xB68B 0xD151 # HANGUL SYLLABLE THIEUTH-E-NIEUNCIEUC -0xB68C 0xD152 # HANGUL SYLLABLE THIEUTH-E-NIEUNHIEUH -0xB68D 0xD153 # HANGUL SYLLABLE THIEUTH-E-TIKEUT -0xB68E 0xD155 # HANGUL SYLLABLE THIEUTH-E-RIEULKIYEOK -0xB68F 0xD156 # HANGUL SYLLABLE THIEUTH-E-RIEULMIEUM -0xB690 0xD157 # HANGUL SYLLABLE THIEUTH-E-RIEULPIEUP -0xB691 0xD158 # HANGUL SYLLABLE THIEUTH-E-RIEULSIOS -0xB692 0xD159 # HANGUL SYLLABLE THIEUTH-E-RIEULTHIEUTH -0xB693 0xD15A # HANGUL SYLLABLE THIEUTH-E-RIEULPHIEUPH -0xB694 0xD15B # HANGUL SYLLABLE THIEUTH-E-RIEULHIEUH -0xB695 0xD15E # HANGUL SYLLABLE THIEUTH-E-PIEUPSIOS -0xB696 0xD160 # HANGUL SYLLABLE THIEUTH-E-SSANGSIOS -0xB697 0xD162 # HANGUL SYLLABLE THIEUTH-E-CIEUC -0xB698 0xD163 # HANGUL SYLLABLE THIEUTH-E-CHIEUCH -0xB699 0xD164 # HANGUL SYLLABLE THIEUTH-E-KHIEUKH -0xB69A 0xD165 # HANGUL SYLLABLE THIEUTH-E-THIEUTH -0xB69B 0xD166 # HANGUL SYLLABLE THIEUTH-E-PHIEUPH -0xB69C 0xD167 # HANGUL SYLLABLE THIEUTH-E-HIEUH -0xB69D 0xD169 # HANGUL SYLLABLE THIEUTH-YEO-KIYEOK -0xB69E 0xD16A # HANGUL SYLLABLE THIEUTH-YEO-SSANGKIYEOK -0xB69F 0xD16B # HANGUL SYLLABLE THIEUTH-YEO-KIYEOKSIOS -0xB6A0 0xD16D # HANGUL SYLLABLE THIEUTH-YEO-NIEUNCIEUC -0xB6A1 0xB540 # HANGUL SYLLABLE SSANGTIKEUT-A-MIEUM -0xB6A2 0xB541 # HANGUL SYLLABLE SSANGTIKEUT-A-PIEUP -0xB6A3 0xB543 # HANGUL SYLLABLE SSANGTIKEUT-A-SIOS -0xB6A4 0xB544 # HANGUL SYLLABLE SSANGTIKEUT-A-SSANGSIOS -0xB6A5 0xB545 # HANGUL SYLLABLE SSANGTIKEUT-A-IEUNG -0xB6A6 0xB54B # HANGUL SYLLABLE SSANGTIKEUT-A-HIEUH -0xB6A7 0xB54C # HANGUL SYLLABLE SSANGTIKEUT-AE -0xB6A8 0xB54D # HANGUL SYLLABLE SSANGTIKEUT-AE-KIYEOK -0xB6A9 0xB550 # HANGUL SYLLABLE SSANGTIKEUT-AE-NIEUN -0xB6AA 0xB554 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEUL -0xB6AB 0xB55C # HANGUL SYLLABLE SSANGTIKEUT-AE-MIEUM -0xB6AC 0xB55D # HANGUL SYLLABLE SSANGTIKEUT-AE-PIEUP -0xB6AD 0xB55F # HANGUL SYLLABLE SSANGTIKEUT-AE-SIOS -0xB6AE 0xB560 # HANGUL SYLLABLE SSANGTIKEUT-AE-SSANGSIOS -0xB6AF 0xB561 # HANGUL SYLLABLE SSANGTIKEUT-AE-IEUNG -0xB6B0 0xB5A0 # HANGUL SYLLABLE SSANGTIKEUT-EO -0xB6B1 0xB5A1 # HANGUL SYLLABLE SSANGTIKEUT-EO-KIYEOK -0xB6B2 0xB5A4 # HANGUL SYLLABLE SSANGTIKEUT-EO-NIEUN -0xB6B3 0xB5A8 # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEUL -0xB6B4 0xB5AA # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULMIEUM -0xB6B5 0xB5AB # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULPIEUP -0xB6B6 0xB5B0 # HANGUL SYLLABLE SSANGTIKEUT-EO-MIEUM -0xB6B7 0xB5B1 # HANGUL SYLLABLE SSANGTIKEUT-EO-PIEUP -0xB6B8 0xB5B3 # HANGUL SYLLABLE SSANGTIKEUT-EO-SIOS -0xB6B9 0xB5B4 # HANGUL SYLLABLE SSANGTIKEUT-EO-SSANGSIOS -0xB6BA 0xB5B5 # HANGUL SYLLABLE SSANGTIKEUT-EO-IEUNG -0xB6BB 0xB5BB # HANGUL SYLLABLE SSANGTIKEUT-EO-HIEUH -0xB6BC 0xB5BC # HANGUL SYLLABLE SSANGTIKEUT-E -0xB6BD 0xB5BD # HANGUL SYLLABLE SSANGTIKEUT-E-KIYEOK -0xB6BE 0xB5C0 # HANGUL SYLLABLE SSANGTIKEUT-E-NIEUN -0xB6BF 0xB5C4 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEUL -0xB6C0 0xB5CC # HANGUL SYLLABLE SSANGTIKEUT-E-MIEUM -0xB6C1 0xB5CD # HANGUL SYLLABLE SSANGTIKEUT-E-PIEUP -0xB6C2 0xB5CF # HANGUL SYLLABLE SSANGTIKEUT-E-SIOS -0xB6C3 0xB5D0 # HANGUL SYLLABLE SSANGTIKEUT-E-SSANGSIOS -0xB6C4 0xB5D1 # HANGUL SYLLABLE SSANGTIKEUT-E-IEUNG -0xB6C5 0xB5D8 # HANGUL SYLLABLE SSANGTIKEUT-YEO -0xB6C6 0xB5EC # HANGUL SYLLABLE SSANGTIKEUT-YEO-SSANGSIOS -0xB6C7 0xB610 # HANGUL SYLLABLE SSANGTIKEUT-O -0xB6C8 0xB611 # HANGUL SYLLABLE SSANGTIKEUT-O-KIYEOK -0xB6C9 0xB614 # HANGUL SYLLABLE SSANGTIKEUT-O-NIEUN -0xB6CA 0xB618 # HANGUL SYLLABLE SSANGTIKEUT-O-RIEUL -0xB6CB 0xB625 # HANGUL SYLLABLE SSANGTIKEUT-O-IEUNG -0xB6CC 0xB62C # HANGUL SYLLABLE SSANGTIKEUT-WA -0xB6CD 0xB634 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEUL -0xB6CE 0xB648 # HANGUL SYLLABLE SSANGTIKEUT-WAE -0xB6CF 0xB664 # HANGUL SYLLABLE SSANGTIKEUT-OE -0xB6D0 0xB668 # HANGUL SYLLABLE SSANGTIKEUT-OE-NIEUN -0xB6D1 0xB69C # HANGUL SYLLABLE SSANGTIKEUT-U -0xB6D2 0xB69D # HANGUL SYLLABLE SSANGTIKEUT-U-KIYEOK -0xB6D3 0xB6A0 # HANGUL SYLLABLE SSANGTIKEUT-U-NIEUN -0xB6D4 0xB6A4 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEUL -0xB6D5 0xB6AB # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULHIEUH -0xB6D6 0xB6AC # HANGUL SYLLABLE SSANGTIKEUT-U-MIEUM -0xB6D7 0xB6B1 # HANGUL SYLLABLE SSANGTIKEUT-U-IEUNG -0xB6D8 0xB6D4 # HANGUL SYLLABLE SSANGTIKEUT-WE -0xB6D9 0xB6F0 # HANGUL SYLLABLE SSANGTIKEUT-WI -0xB6DA 0xB6F4 # HANGUL SYLLABLE SSANGTIKEUT-WI-NIEUN -0xB6DB 0xB6F8 # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEUL -0xB6DC 0xB700 # HANGUL SYLLABLE SSANGTIKEUT-WI-MIEUM -0xB6DD 0xB701 # HANGUL SYLLABLE SSANGTIKEUT-WI-PIEUP -0xB6DE 0xB705 # HANGUL SYLLABLE SSANGTIKEUT-WI-IEUNG -0xB6DF 0xB728 # HANGUL SYLLABLE SSANGTIKEUT-EU -0xB6E0 0xB729 # HANGUL SYLLABLE SSANGTIKEUT-EU-KIYEOK -0xB6E1 0xB72C # HANGUL SYLLABLE SSANGTIKEUT-EU-NIEUN -0xB6E2 0xB72F # HANGUL SYLLABLE SSANGTIKEUT-EU-TIKEUT -0xB6E3 0xB730 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEUL -0xB6E4 0xB738 # HANGUL SYLLABLE SSANGTIKEUT-EU-MIEUM -0xB6E5 0xB739 # HANGUL SYLLABLE SSANGTIKEUT-EU-PIEUP -0xB6E6 0xB73B # HANGUL SYLLABLE SSANGTIKEUT-EU-SIOS -0xB6E7 0xB744 # HANGUL SYLLABLE SSANGTIKEUT-YI -0xB6E8 0xB748 # HANGUL SYLLABLE SSANGTIKEUT-YI-NIEUN -0xB6E9 0xB74C # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEUL -0xB6EA 0xB754 # HANGUL SYLLABLE SSANGTIKEUT-YI-MIEUM -0xB6EB 0xB755 # HANGUL SYLLABLE SSANGTIKEUT-YI-PIEUP -0xB6EC 0xB760 # HANGUL SYLLABLE SSANGTIKEUT-I -0xB6ED 0xB764 # HANGUL SYLLABLE SSANGTIKEUT-I-NIEUN -0xB6EE 0xB768 # HANGUL SYLLABLE SSANGTIKEUT-I-RIEUL -0xB6EF 0xB770 # HANGUL SYLLABLE SSANGTIKEUT-I-MIEUM -0xB6F0 0xB771 # HANGUL SYLLABLE SSANGTIKEUT-I-PIEUP -0xB6F1 0xB773 # HANGUL SYLLABLE SSANGTIKEUT-I-SIOS -0xB6F2 0xB775 # HANGUL SYLLABLE SSANGTIKEUT-I-IEUNG -0xB6F3 0xB77C # HANGUL SYLLABLE RIEUL-A -0xB6F4 0xB77D # HANGUL SYLLABLE RIEUL-A-KIYEOK -0xB6F5 0xB780 # HANGUL SYLLABLE RIEUL-A-NIEUN -0xB6F6 0xB784 # HANGUL SYLLABLE RIEUL-A-RIEUL -0xB6F7 0xB78C # HANGUL SYLLABLE RIEUL-A-MIEUM -0xB6F8 0xB78D # HANGUL SYLLABLE RIEUL-A-PIEUP -0xB6F9 0xB78F # HANGUL SYLLABLE RIEUL-A-SIOS -0xB6FA 0xB790 # HANGUL SYLLABLE RIEUL-A-SSANGSIOS -0xB6FB 0xB791 # HANGUL SYLLABLE RIEUL-A-IEUNG -0xB6FC 0xB792 # HANGUL SYLLABLE RIEUL-A-CIEUC -0xB6FD 0xB796 # HANGUL SYLLABLE RIEUL-A-PHIEUPH -0xB6FE 0xB797 # HANGUL SYLLABLE RIEUL-A-HIEUH -0xB741 0xD16E # HANGUL SYLLABLE THIEUTH-YEO-NIEUNHIEUH -0xB742 0xD16F # HANGUL SYLLABLE THIEUTH-YEO-TIKEUT -0xB743 0xD170 # HANGUL SYLLABLE THIEUTH-YEO-RIEUL -0xB744 0xD171 # HANGUL SYLLABLE THIEUTH-YEO-RIEULKIYEOK -0xB745 0xD172 # HANGUL SYLLABLE THIEUTH-YEO-RIEULMIEUM -0xB746 0xD173 # HANGUL SYLLABLE THIEUTH-YEO-RIEULPIEUP -0xB747 0xD174 # HANGUL SYLLABLE THIEUTH-YEO-RIEULSIOS -0xB748 0xD175 # HANGUL SYLLABLE THIEUTH-YEO-RIEULTHIEUTH -0xB749 0xD176 # HANGUL SYLLABLE THIEUTH-YEO-RIEULPHIEUPH -0xB74A 0xD177 # HANGUL SYLLABLE THIEUTH-YEO-RIEULHIEUH -0xB74B 0xD178 # HANGUL SYLLABLE THIEUTH-YEO-MIEUM -0xB74C 0xD179 # HANGUL SYLLABLE THIEUTH-YEO-PIEUP -0xB74D 0xD17A # HANGUL SYLLABLE THIEUTH-YEO-PIEUPSIOS -0xB74E 0xD17B # HANGUL SYLLABLE THIEUTH-YEO-SIOS -0xB74F 0xD17D # HANGUL SYLLABLE THIEUTH-YEO-IEUNG -0xB750 0xD17E # HANGUL SYLLABLE THIEUTH-YEO-CIEUC -0xB751 0xD17F # HANGUL SYLLABLE THIEUTH-YEO-CHIEUCH -0xB752 0xD180 # HANGUL SYLLABLE THIEUTH-YEO-KHIEUKH -0xB753 0xD181 # HANGUL SYLLABLE THIEUTH-YEO-THIEUTH -0xB754 0xD182 # HANGUL SYLLABLE THIEUTH-YEO-PHIEUPH -0xB755 0xD183 # HANGUL SYLLABLE THIEUTH-YEO-HIEUH -0xB756 0xD185 # HANGUL SYLLABLE THIEUTH-YE-KIYEOK -0xB757 0xD186 # HANGUL SYLLABLE THIEUTH-YE-SSANGKIYEOK -0xB758 0xD187 # HANGUL SYLLABLE THIEUTH-YE-KIYEOKSIOS -0xB759 0xD189 # HANGUL SYLLABLE THIEUTH-YE-NIEUNCIEUC -0xB75A 0xD18A # HANGUL SYLLABLE THIEUTH-YE-NIEUNHIEUH -0xB761 0xD18B # HANGUL SYLLABLE THIEUTH-YE-TIKEUT -0xB762 0xD18C # HANGUL SYLLABLE THIEUTH-YE-RIEUL -0xB763 0xD18D # HANGUL SYLLABLE THIEUTH-YE-RIEULKIYEOK -0xB764 0xD18E # HANGUL SYLLABLE THIEUTH-YE-RIEULMIEUM -0xB765 0xD18F # HANGUL SYLLABLE THIEUTH-YE-RIEULPIEUP -0xB766 0xD190 # HANGUL SYLLABLE THIEUTH-YE-RIEULSIOS -0xB767 0xD191 # HANGUL SYLLABLE THIEUTH-YE-RIEULTHIEUTH -0xB768 0xD192 # HANGUL SYLLABLE THIEUTH-YE-RIEULPHIEUPH -0xB769 0xD193 # HANGUL SYLLABLE THIEUTH-YE-RIEULHIEUH -0xB76A 0xD194 # HANGUL SYLLABLE THIEUTH-YE-MIEUM -0xB76B 0xD195 # HANGUL SYLLABLE THIEUTH-YE-PIEUP -0xB76C 0xD196 # HANGUL SYLLABLE THIEUTH-YE-PIEUPSIOS -0xB76D 0xD197 # HANGUL SYLLABLE THIEUTH-YE-SIOS -0xB76E 0xD198 # HANGUL SYLLABLE THIEUTH-YE-SSANGSIOS -0xB76F 0xD199 # HANGUL SYLLABLE THIEUTH-YE-IEUNG -0xB770 0xD19A # HANGUL SYLLABLE THIEUTH-YE-CIEUC -0xB771 0xD19B # HANGUL SYLLABLE THIEUTH-YE-CHIEUCH -0xB772 0xD19C # HANGUL SYLLABLE THIEUTH-YE-KHIEUKH -0xB773 0xD19D # HANGUL SYLLABLE THIEUTH-YE-THIEUTH -0xB774 0xD19E # HANGUL SYLLABLE THIEUTH-YE-PHIEUPH -0xB775 0xD19F # HANGUL SYLLABLE THIEUTH-YE-HIEUH -0xB776 0xD1A2 # HANGUL SYLLABLE THIEUTH-O-SSANGKIYEOK -0xB777 0xD1A3 # HANGUL SYLLABLE THIEUTH-O-KIYEOKSIOS -0xB778 0xD1A5 # HANGUL SYLLABLE THIEUTH-O-NIEUNCIEUC -0xB779 0xD1A6 # HANGUL SYLLABLE THIEUTH-O-NIEUNHIEUH -0xB77A 0xD1A7 # HANGUL SYLLABLE THIEUTH-O-TIKEUT -0xB781 0xD1A9 # HANGUL SYLLABLE THIEUTH-O-RIEULKIYEOK -0xB782 0xD1AA # HANGUL SYLLABLE THIEUTH-O-RIEULMIEUM -0xB783 0xD1AB # HANGUL SYLLABLE THIEUTH-O-RIEULPIEUP -0xB784 0xD1AC # HANGUL SYLLABLE THIEUTH-O-RIEULSIOS -0xB785 0xD1AD # HANGUL SYLLABLE THIEUTH-O-RIEULTHIEUTH -0xB786 0xD1AE # HANGUL SYLLABLE THIEUTH-O-RIEULPHIEUPH -0xB787 0xD1AF # HANGUL SYLLABLE THIEUTH-O-RIEULHIEUH -0xB788 0xD1B2 # HANGUL SYLLABLE THIEUTH-O-PIEUPSIOS -0xB789 0xD1B4 # HANGUL SYLLABLE THIEUTH-O-SSANGSIOS -0xB78A 0xD1B6 # HANGUL SYLLABLE THIEUTH-O-CIEUC -0xB78B 0xD1B7 # HANGUL SYLLABLE THIEUTH-O-CHIEUCH -0xB78C 0xD1B8 # HANGUL SYLLABLE THIEUTH-O-KHIEUKH -0xB78D 0xD1B9 # HANGUL SYLLABLE THIEUTH-O-THIEUTH -0xB78E 0xD1BB # HANGUL SYLLABLE THIEUTH-O-HIEUH -0xB78F 0xD1BD # HANGUL SYLLABLE THIEUTH-WA-KIYEOK -0xB790 0xD1BE # HANGUL SYLLABLE THIEUTH-WA-SSANGKIYEOK -0xB791 0xD1BF # HANGUL SYLLABLE THIEUTH-WA-KIYEOKSIOS -0xB792 0xD1C1 # HANGUL SYLLABLE THIEUTH-WA-NIEUNCIEUC -0xB793 0xD1C2 # HANGUL SYLLABLE THIEUTH-WA-NIEUNHIEUH -0xB794 0xD1C3 # HANGUL SYLLABLE THIEUTH-WA-TIKEUT -0xB795 0xD1C4 # HANGUL SYLLABLE THIEUTH-WA-RIEUL -0xB796 0xD1C5 # HANGUL SYLLABLE THIEUTH-WA-RIEULKIYEOK -0xB797 0xD1C6 # HANGUL SYLLABLE THIEUTH-WA-RIEULMIEUM -0xB798 0xD1C7 # HANGUL SYLLABLE THIEUTH-WA-RIEULPIEUP -0xB799 0xD1C8 # HANGUL SYLLABLE THIEUTH-WA-RIEULSIOS -0xB79A 0xD1C9 # HANGUL SYLLABLE THIEUTH-WA-RIEULTHIEUTH -0xB79B 0xD1CA # HANGUL SYLLABLE THIEUTH-WA-RIEULPHIEUPH -0xB79C 0xD1CB # HANGUL SYLLABLE THIEUTH-WA-RIEULHIEUH -0xB79D 0xD1CC # HANGUL SYLLABLE THIEUTH-WA-MIEUM -0xB79E 0xD1CD # HANGUL SYLLABLE THIEUTH-WA-PIEUP -0xB79F 0xD1CE # HANGUL SYLLABLE THIEUTH-WA-PIEUPSIOS -0xB7A0 0xD1CF # HANGUL SYLLABLE THIEUTH-WA-SIOS -0xB7A1 0xB798 # HANGUL SYLLABLE RIEUL-AE -0xB7A2 0xB799 # HANGUL SYLLABLE RIEUL-AE-KIYEOK -0xB7A3 0xB79C # HANGUL SYLLABLE RIEUL-AE-NIEUN -0xB7A4 0xB7A0 # HANGUL SYLLABLE RIEUL-AE-RIEUL -0xB7A5 0xB7A8 # HANGUL SYLLABLE RIEUL-AE-MIEUM -0xB7A6 0xB7A9 # HANGUL SYLLABLE RIEUL-AE-PIEUP -0xB7A7 0xB7AB # HANGUL SYLLABLE RIEUL-AE-SIOS -0xB7A8 0xB7AC # HANGUL SYLLABLE RIEUL-AE-SSANGSIOS -0xB7A9 0xB7AD # HANGUL SYLLABLE RIEUL-AE-IEUNG -0xB7AA 0xB7B4 # HANGUL SYLLABLE RIEUL-YA -0xB7AB 0xB7B5 # HANGUL SYLLABLE RIEUL-YA-KIYEOK -0xB7AC 0xB7B8 # HANGUL SYLLABLE RIEUL-YA-NIEUN -0xB7AD 0xB7C7 # HANGUL SYLLABLE RIEUL-YA-SIOS -0xB7AE 0xB7C9 # HANGUL SYLLABLE RIEUL-YA-IEUNG -0xB7AF 0xB7EC # HANGUL SYLLABLE RIEUL-EO -0xB7B0 0xB7ED # HANGUL SYLLABLE RIEUL-EO-KIYEOK -0xB7B1 0xB7F0 # HANGUL SYLLABLE RIEUL-EO-NIEUN -0xB7B2 0xB7F4 # HANGUL SYLLABLE RIEUL-EO-RIEUL -0xB7B3 0xB7FC # HANGUL SYLLABLE RIEUL-EO-MIEUM -0xB7B4 0xB7FD # HANGUL SYLLABLE RIEUL-EO-PIEUP -0xB7B5 0xB7FF # HANGUL SYLLABLE RIEUL-EO-SIOS -0xB7B6 0xB800 # HANGUL SYLLABLE RIEUL-EO-SSANGSIOS -0xB7B7 0xB801 # HANGUL SYLLABLE RIEUL-EO-IEUNG -0xB7B8 0xB807 # HANGUL SYLLABLE RIEUL-EO-HIEUH -0xB7B9 0xB808 # HANGUL SYLLABLE RIEUL-E -0xB7BA 0xB809 # HANGUL SYLLABLE RIEUL-E-KIYEOK -0xB7BB 0xB80C # HANGUL SYLLABLE RIEUL-E-NIEUN -0xB7BC 0xB810 # HANGUL SYLLABLE RIEUL-E-RIEUL -0xB7BD 0xB818 # HANGUL SYLLABLE RIEUL-E-MIEUM -0xB7BE 0xB819 # HANGUL SYLLABLE RIEUL-E-PIEUP -0xB7BF 0xB81B # HANGUL SYLLABLE RIEUL-E-SIOS -0xB7C0 0xB81D # HANGUL SYLLABLE RIEUL-E-IEUNG -0xB7C1 0xB824 # HANGUL SYLLABLE RIEUL-YEO -0xB7C2 0xB825 # HANGUL SYLLABLE RIEUL-YEO-KIYEOK -0xB7C3 0xB828 # HANGUL SYLLABLE RIEUL-YEO-NIEUN -0xB7C4 0xB82C # HANGUL SYLLABLE RIEUL-YEO-RIEUL -0xB7C5 0xB834 # HANGUL SYLLABLE RIEUL-YEO-MIEUM -0xB7C6 0xB835 # HANGUL SYLLABLE RIEUL-YEO-PIEUP -0xB7C7 0xB837 # HANGUL SYLLABLE RIEUL-YEO-SIOS -0xB7C8 0xB838 # HANGUL SYLLABLE RIEUL-YEO-SSANGSIOS -0xB7C9 0xB839 # HANGUL SYLLABLE RIEUL-YEO-IEUNG -0xB7CA 0xB840 # HANGUL SYLLABLE RIEUL-YE -0xB7CB 0xB844 # HANGUL SYLLABLE RIEUL-YE-NIEUN -0xB7CC 0xB851 # HANGUL SYLLABLE RIEUL-YE-PIEUP -0xB7CD 0xB853 # HANGUL SYLLABLE RIEUL-YE-SIOS -0xB7CE 0xB85C # HANGUL SYLLABLE RIEUL-O -0xB7CF 0xB85D # HANGUL SYLLABLE RIEUL-O-KIYEOK -0xB7D0 0xB860 # HANGUL SYLLABLE RIEUL-O-NIEUN -0xB7D1 0xB864 # HANGUL SYLLABLE RIEUL-O-RIEUL -0xB7D2 0xB86C # HANGUL SYLLABLE RIEUL-O-MIEUM -0xB7D3 0xB86D # HANGUL SYLLABLE RIEUL-O-PIEUP -0xB7D4 0xB86F # HANGUL SYLLABLE RIEUL-O-SIOS -0xB7D5 0xB871 # HANGUL SYLLABLE RIEUL-O-IEUNG -0xB7D6 0xB878 # HANGUL SYLLABLE RIEUL-WA -0xB7D7 0xB87C # HANGUL SYLLABLE RIEUL-WA-NIEUN -0xB7D8 0xB88D # HANGUL SYLLABLE RIEUL-WA-IEUNG -0xB7D9 0xB8A8 # HANGUL SYLLABLE RIEUL-WAE-SSANGSIOS -0xB7DA 0xB8B0 # HANGUL SYLLABLE RIEUL-OE -0xB7DB 0xB8B4 # HANGUL SYLLABLE RIEUL-OE-NIEUN -0xB7DC 0xB8B8 # HANGUL SYLLABLE RIEUL-OE-RIEUL -0xB7DD 0xB8C0 # HANGUL SYLLABLE RIEUL-OE-MIEUM -0xB7DE 0xB8C1 # HANGUL SYLLABLE RIEUL-OE-PIEUP -0xB7DF 0xB8C3 # HANGUL SYLLABLE RIEUL-OE-SIOS -0xB7E0 0xB8C5 # HANGUL SYLLABLE RIEUL-OE-IEUNG -0xB7E1 0xB8CC # HANGUL SYLLABLE RIEUL-YO -0xB7E2 0xB8D0 # HANGUL SYLLABLE RIEUL-YO-NIEUN -0xB7E3 0xB8D4 # HANGUL SYLLABLE RIEUL-YO-RIEUL -0xB7E4 0xB8DD # HANGUL SYLLABLE RIEUL-YO-PIEUP -0xB7E5 0xB8DF # HANGUL SYLLABLE RIEUL-YO-SIOS -0xB7E6 0xB8E1 # HANGUL SYLLABLE RIEUL-YO-IEUNG -0xB7E7 0xB8E8 # HANGUL SYLLABLE RIEUL-U -0xB7E8 0xB8E9 # HANGUL SYLLABLE RIEUL-U-KIYEOK -0xB7E9 0xB8EC # HANGUL SYLLABLE RIEUL-U-NIEUN -0xB7EA 0xB8F0 # HANGUL SYLLABLE RIEUL-U-RIEUL -0xB7EB 0xB8F8 # HANGUL SYLLABLE RIEUL-U-MIEUM -0xB7EC 0xB8F9 # HANGUL SYLLABLE RIEUL-U-PIEUP -0xB7ED 0xB8FB # HANGUL SYLLABLE RIEUL-U-SIOS -0xB7EE 0xB8FD # HANGUL SYLLABLE RIEUL-U-IEUNG -0xB7EF 0xB904 # HANGUL SYLLABLE RIEUL-WEO -0xB7F0 0xB918 # HANGUL SYLLABLE RIEUL-WEO-SSANGSIOS -0xB7F1 0xB920 # HANGUL SYLLABLE RIEUL-WE -0xB7F2 0xB93C # HANGUL SYLLABLE RIEUL-WI -0xB7F3 0xB93D # HANGUL SYLLABLE RIEUL-WI-KIYEOK -0xB7F4 0xB940 # HANGUL SYLLABLE RIEUL-WI-NIEUN -0xB7F5 0xB944 # HANGUL SYLLABLE RIEUL-WI-RIEUL -0xB7F6 0xB94C # HANGUL SYLLABLE RIEUL-WI-MIEUM -0xB7F7 0xB94F # HANGUL SYLLABLE RIEUL-WI-SIOS -0xB7F8 0xB951 # HANGUL SYLLABLE RIEUL-WI-IEUNG -0xB7F9 0xB958 # HANGUL SYLLABLE RIEUL-YU -0xB7FA 0xB959 # HANGUL SYLLABLE RIEUL-YU-KIYEOK -0xB7FB 0xB95C # HANGUL SYLLABLE RIEUL-YU-NIEUN -0xB7FC 0xB960 # HANGUL SYLLABLE RIEUL-YU-RIEUL -0xB7FD 0xB968 # HANGUL SYLLABLE RIEUL-YU-MIEUM -0xB7FE 0xB969 # HANGUL SYLLABLE RIEUL-YU-PIEUP -0xB841 0xD1D0 # HANGUL SYLLABLE THIEUTH-WA-SSANGSIOS -0xB842 0xD1D1 # HANGUL SYLLABLE THIEUTH-WA-IEUNG -0xB843 0xD1D2 # HANGUL SYLLABLE THIEUTH-WA-CIEUC -0xB844 0xD1D3 # HANGUL SYLLABLE THIEUTH-WA-CHIEUCH -0xB845 0xD1D4 # HANGUL SYLLABLE THIEUTH-WA-KHIEUKH -0xB846 0xD1D5 # HANGUL SYLLABLE THIEUTH-WA-THIEUTH -0xB847 0xD1D6 # HANGUL SYLLABLE THIEUTH-WA-PHIEUPH -0xB848 0xD1D7 # HANGUL SYLLABLE THIEUTH-WA-HIEUH -0xB849 0xD1D9 # HANGUL SYLLABLE THIEUTH-WAE-KIYEOK -0xB84A 0xD1DA # HANGUL SYLLABLE THIEUTH-WAE-SSANGKIYEOK -0xB84B 0xD1DB # HANGUL SYLLABLE THIEUTH-WAE-KIYEOKSIOS -0xB84C 0xD1DC # HANGUL SYLLABLE THIEUTH-WAE-NIEUN -0xB84D 0xD1DD # HANGUL SYLLABLE THIEUTH-WAE-NIEUNCIEUC -0xB84E 0xD1DE # HANGUL SYLLABLE THIEUTH-WAE-NIEUNHIEUH -0xB84F 0xD1DF # HANGUL SYLLABLE THIEUTH-WAE-TIKEUT -0xB850 0xD1E0 # HANGUL SYLLABLE THIEUTH-WAE-RIEUL -0xB851 0xD1E1 # HANGUL SYLLABLE THIEUTH-WAE-RIEULKIYEOK -0xB852 0xD1E2 # HANGUL SYLLABLE THIEUTH-WAE-RIEULMIEUM -0xB853 0xD1E3 # HANGUL SYLLABLE THIEUTH-WAE-RIEULPIEUP -0xB854 0xD1E4 # HANGUL SYLLABLE THIEUTH-WAE-RIEULSIOS -0xB855 0xD1E5 # HANGUL SYLLABLE THIEUTH-WAE-RIEULTHIEUTH -0xB856 0xD1E6 # HANGUL SYLLABLE THIEUTH-WAE-RIEULPHIEUPH -0xB857 0xD1E7 # HANGUL SYLLABLE THIEUTH-WAE-RIEULHIEUH -0xB858 0xD1E8 # HANGUL SYLLABLE THIEUTH-WAE-MIEUM -0xB859 0xD1E9 # HANGUL SYLLABLE THIEUTH-WAE-PIEUP -0xB85A 0xD1EA # HANGUL SYLLABLE THIEUTH-WAE-PIEUPSIOS -0xB861 0xD1EB # HANGUL SYLLABLE THIEUTH-WAE-SIOS -0xB862 0xD1EC # HANGUL SYLLABLE THIEUTH-WAE-SSANGSIOS -0xB863 0xD1ED # HANGUL SYLLABLE THIEUTH-WAE-IEUNG -0xB864 0xD1EE # HANGUL SYLLABLE THIEUTH-WAE-CIEUC -0xB865 0xD1EF # HANGUL SYLLABLE THIEUTH-WAE-CHIEUCH -0xB866 0xD1F0 # HANGUL SYLLABLE THIEUTH-WAE-KHIEUKH -0xB867 0xD1F1 # HANGUL SYLLABLE THIEUTH-WAE-THIEUTH -0xB868 0xD1F2 # HANGUL SYLLABLE THIEUTH-WAE-PHIEUPH -0xB869 0xD1F3 # HANGUL SYLLABLE THIEUTH-WAE-HIEUH -0xB86A 0xD1F5 # HANGUL SYLLABLE THIEUTH-OE-KIYEOK -0xB86B 0xD1F6 # HANGUL SYLLABLE THIEUTH-OE-SSANGKIYEOK -0xB86C 0xD1F7 # HANGUL SYLLABLE THIEUTH-OE-KIYEOKSIOS -0xB86D 0xD1F9 # HANGUL SYLLABLE THIEUTH-OE-NIEUNCIEUC -0xB86E 0xD1FA # HANGUL SYLLABLE THIEUTH-OE-NIEUNHIEUH -0xB86F 0xD1FB # HANGUL SYLLABLE THIEUTH-OE-TIKEUT -0xB870 0xD1FC # HANGUL SYLLABLE THIEUTH-OE-RIEUL -0xB871 0xD1FD # HANGUL SYLLABLE THIEUTH-OE-RIEULKIYEOK -0xB872 0xD1FE # HANGUL SYLLABLE THIEUTH-OE-RIEULMIEUM -0xB873 0xD1FF # HANGUL SYLLABLE THIEUTH-OE-RIEULPIEUP -0xB874 0xD200 # HANGUL SYLLABLE THIEUTH-OE-RIEULSIOS -0xB875 0xD201 # HANGUL SYLLABLE THIEUTH-OE-RIEULTHIEUTH -0xB876 0xD202 # HANGUL SYLLABLE THIEUTH-OE-RIEULPHIEUPH -0xB877 0xD203 # HANGUL SYLLABLE THIEUTH-OE-RIEULHIEUH -0xB878 0xD204 # HANGUL SYLLABLE THIEUTH-OE-MIEUM -0xB879 0xD205 # HANGUL SYLLABLE THIEUTH-OE-PIEUP -0xB87A 0xD206 # HANGUL SYLLABLE THIEUTH-OE-PIEUPSIOS -0xB881 0xD208 # HANGUL SYLLABLE THIEUTH-OE-SSANGSIOS -0xB882 0xD20A # HANGUL SYLLABLE THIEUTH-OE-CIEUC -0xB883 0xD20B # HANGUL SYLLABLE THIEUTH-OE-CHIEUCH -0xB884 0xD20C # HANGUL SYLLABLE THIEUTH-OE-KHIEUKH -0xB885 0xD20D # HANGUL SYLLABLE THIEUTH-OE-THIEUTH -0xB886 0xD20E # HANGUL SYLLABLE THIEUTH-OE-PHIEUPH -0xB887 0xD20F # HANGUL SYLLABLE THIEUTH-OE-HIEUH -0xB888 0xD211 # HANGUL SYLLABLE THIEUTH-YO-KIYEOK -0xB889 0xD212 # HANGUL SYLLABLE THIEUTH-YO-SSANGKIYEOK -0xB88A 0xD213 # HANGUL SYLLABLE THIEUTH-YO-KIYEOKSIOS -0xB88B 0xD214 # HANGUL SYLLABLE THIEUTH-YO-NIEUN -0xB88C 0xD215 # HANGUL SYLLABLE THIEUTH-YO-NIEUNCIEUC -0xB88D 0xD216 # HANGUL SYLLABLE THIEUTH-YO-NIEUNHIEUH -0xB88E 0xD217 # HANGUL SYLLABLE THIEUTH-YO-TIKEUT -0xB88F 0xD218 # HANGUL SYLLABLE THIEUTH-YO-RIEUL -0xB890 0xD219 # HANGUL SYLLABLE THIEUTH-YO-RIEULKIYEOK -0xB891 0xD21A # HANGUL SYLLABLE THIEUTH-YO-RIEULMIEUM -0xB892 0xD21B # HANGUL SYLLABLE THIEUTH-YO-RIEULPIEUP -0xB893 0xD21C # HANGUL SYLLABLE THIEUTH-YO-RIEULSIOS -0xB894 0xD21D # HANGUL SYLLABLE THIEUTH-YO-RIEULTHIEUTH -0xB895 0xD21E # HANGUL SYLLABLE THIEUTH-YO-RIEULPHIEUPH -0xB896 0xD21F # HANGUL SYLLABLE THIEUTH-YO-RIEULHIEUH -0xB897 0xD220 # HANGUL SYLLABLE THIEUTH-YO-MIEUM -0xB898 0xD221 # HANGUL SYLLABLE THIEUTH-YO-PIEUP -0xB899 0xD222 # HANGUL SYLLABLE THIEUTH-YO-PIEUPSIOS -0xB89A 0xD223 # HANGUL SYLLABLE THIEUTH-YO-SIOS -0xB89B 0xD224 # HANGUL SYLLABLE THIEUTH-YO-SSANGSIOS -0xB89C 0xD225 # HANGUL SYLLABLE THIEUTH-YO-IEUNG -0xB89D 0xD226 # HANGUL SYLLABLE THIEUTH-YO-CIEUC -0xB89E 0xD227 # HANGUL SYLLABLE THIEUTH-YO-CHIEUCH -0xB89F 0xD228 # HANGUL SYLLABLE THIEUTH-YO-KHIEUKH -0xB8A0 0xD229 # HANGUL SYLLABLE THIEUTH-YO-THIEUTH -0xB8A1 0xB96B # HANGUL SYLLABLE RIEUL-YU-SIOS -0xB8A2 0xB96D # HANGUL SYLLABLE RIEUL-YU-IEUNG -0xB8A3 0xB974 # HANGUL SYLLABLE RIEUL-EU -0xB8A4 0xB975 # HANGUL SYLLABLE RIEUL-EU-KIYEOK -0xB8A5 0xB978 # HANGUL SYLLABLE RIEUL-EU-NIEUN -0xB8A6 0xB97C # HANGUL SYLLABLE RIEUL-EU-RIEUL -0xB8A7 0xB984 # HANGUL SYLLABLE RIEUL-EU-MIEUM -0xB8A8 0xB985 # HANGUL SYLLABLE RIEUL-EU-PIEUP -0xB8A9 0xB987 # HANGUL SYLLABLE RIEUL-EU-SIOS -0xB8AA 0xB989 # HANGUL SYLLABLE RIEUL-EU-IEUNG -0xB8AB 0xB98A # HANGUL SYLLABLE RIEUL-EU-CIEUC -0xB8AC 0xB98D # HANGUL SYLLABLE RIEUL-EU-THIEUTH -0xB8AD 0xB98E # HANGUL SYLLABLE RIEUL-EU-PHIEUPH -0xB8AE 0xB9AC # HANGUL SYLLABLE RIEUL-I -0xB8AF 0xB9AD # HANGUL SYLLABLE RIEUL-I-KIYEOK -0xB8B0 0xB9B0 # HANGUL SYLLABLE RIEUL-I-NIEUN -0xB8B1 0xB9B4 # HANGUL SYLLABLE RIEUL-I-RIEUL -0xB8B2 0xB9BC # HANGUL SYLLABLE RIEUL-I-MIEUM -0xB8B3 0xB9BD # HANGUL SYLLABLE RIEUL-I-PIEUP -0xB8B4 0xB9BF # HANGUL SYLLABLE RIEUL-I-SIOS -0xB8B5 0xB9C1 # HANGUL SYLLABLE RIEUL-I-IEUNG -0xB8B6 0xB9C8 # HANGUL SYLLABLE MIEUM-A -0xB8B7 0xB9C9 # HANGUL SYLLABLE MIEUM-A-KIYEOK -0xB8B8 0xB9CC # HANGUL SYLLABLE MIEUM-A-NIEUN -0xB8B9 0xB9CE # HANGUL SYLLABLE MIEUM-A-NIEUNHIEUH -0xB8BA 0xB9CF # HANGUL SYLLABLE MIEUM-A-TIKEUT -0xB8BB 0xB9D0 # HANGUL SYLLABLE MIEUM-A-RIEUL -0xB8BC 0xB9D1 # HANGUL SYLLABLE MIEUM-A-RIEULKIYEOK -0xB8BD 0xB9D2 # HANGUL SYLLABLE MIEUM-A-RIEULMIEUM -0xB8BE 0xB9D8 # HANGUL SYLLABLE MIEUM-A-MIEUM -0xB8BF 0xB9D9 # HANGUL SYLLABLE MIEUM-A-PIEUP -0xB8C0 0xB9DB # HANGUL SYLLABLE MIEUM-A-SIOS -0xB8C1 0xB9DD # HANGUL SYLLABLE MIEUM-A-IEUNG -0xB8C2 0xB9DE # HANGUL SYLLABLE MIEUM-A-CIEUC -0xB8C3 0xB9E1 # HANGUL SYLLABLE MIEUM-A-THIEUTH -0xB8C4 0xB9E3 # HANGUL SYLLABLE MIEUM-A-HIEUH -0xB8C5 0xB9E4 # HANGUL SYLLABLE MIEUM-AE -0xB8C6 0xB9E5 # HANGUL SYLLABLE MIEUM-AE-KIYEOK -0xB8C7 0xB9E8 # HANGUL SYLLABLE MIEUM-AE-NIEUN -0xB8C8 0xB9EC # HANGUL SYLLABLE MIEUM-AE-RIEUL -0xB8C9 0xB9F4 # HANGUL SYLLABLE MIEUM-AE-MIEUM -0xB8CA 0xB9F5 # HANGUL SYLLABLE MIEUM-AE-PIEUP -0xB8CB 0xB9F7 # HANGUL SYLLABLE MIEUM-AE-SIOS -0xB8CC 0xB9F8 # HANGUL SYLLABLE MIEUM-AE-SSANGSIOS -0xB8CD 0xB9F9 # HANGUL SYLLABLE MIEUM-AE-IEUNG -0xB8CE 0xB9FA # HANGUL SYLLABLE MIEUM-AE-CIEUC -0xB8CF 0xBA00 # HANGUL SYLLABLE MIEUM-YA -0xB8D0 0xBA01 # HANGUL SYLLABLE MIEUM-YA-KIYEOK -0xB8D1 0xBA08 # HANGUL SYLLABLE MIEUM-YA-RIEUL -0xB8D2 0xBA15 # HANGUL SYLLABLE MIEUM-YA-IEUNG -0xB8D3 0xBA38 # HANGUL SYLLABLE MIEUM-EO -0xB8D4 0xBA39 # HANGUL SYLLABLE MIEUM-EO-KIYEOK -0xB8D5 0xBA3C # HANGUL SYLLABLE MIEUM-EO-NIEUN -0xB8D6 0xBA40 # HANGUL SYLLABLE MIEUM-EO-RIEUL -0xB8D7 0xBA42 # HANGUL SYLLABLE MIEUM-EO-RIEULMIEUM -0xB8D8 0xBA48 # HANGUL SYLLABLE MIEUM-EO-MIEUM -0xB8D9 0xBA49 # HANGUL SYLLABLE MIEUM-EO-PIEUP -0xB8DA 0xBA4B # HANGUL SYLLABLE MIEUM-EO-SIOS -0xB8DB 0xBA4D # HANGUL SYLLABLE MIEUM-EO-IEUNG -0xB8DC 0xBA4E # HANGUL SYLLABLE MIEUM-EO-CIEUC -0xB8DD 0xBA53 # HANGUL SYLLABLE MIEUM-EO-HIEUH -0xB8DE 0xBA54 # HANGUL SYLLABLE MIEUM-E -0xB8DF 0xBA55 # HANGUL SYLLABLE MIEUM-E-KIYEOK -0xB8E0 0xBA58 # HANGUL SYLLABLE MIEUM-E-NIEUN -0xB8E1 0xBA5C # HANGUL SYLLABLE MIEUM-E-RIEUL -0xB8E2 0xBA64 # HANGUL SYLLABLE MIEUM-E-MIEUM -0xB8E3 0xBA65 # HANGUL SYLLABLE MIEUM-E-PIEUP -0xB8E4 0xBA67 # HANGUL SYLLABLE MIEUM-E-SIOS -0xB8E5 0xBA68 # HANGUL SYLLABLE MIEUM-E-SSANGSIOS -0xB8E6 0xBA69 # HANGUL SYLLABLE MIEUM-E-IEUNG -0xB8E7 0xBA70 # HANGUL SYLLABLE MIEUM-YEO -0xB8E8 0xBA71 # HANGUL SYLLABLE MIEUM-YEO-KIYEOK -0xB8E9 0xBA74 # HANGUL SYLLABLE MIEUM-YEO-NIEUN -0xB8EA 0xBA78 # HANGUL SYLLABLE MIEUM-YEO-RIEUL -0xB8EB 0xBA83 # HANGUL SYLLABLE MIEUM-YEO-SIOS -0xB8EC 0xBA84 # HANGUL SYLLABLE MIEUM-YEO-SSANGSIOS -0xB8ED 0xBA85 # HANGUL SYLLABLE MIEUM-YEO-IEUNG -0xB8EE 0xBA87 # HANGUL SYLLABLE MIEUM-YEO-CHIEUCH -0xB8EF 0xBA8C # HANGUL SYLLABLE MIEUM-YE -0xB8F0 0xBAA8 # HANGUL SYLLABLE MIEUM-O -0xB8F1 0xBAA9 # HANGUL SYLLABLE MIEUM-O-KIYEOK -0xB8F2 0xBAAB # HANGUL SYLLABLE MIEUM-O-KIYEOKSIOS -0xB8F3 0xBAAC # HANGUL SYLLABLE MIEUM-O-NIEUN -0xB8F4 0xBAB0 # HANGUL SYLLABLE MIEUM-O-RIEUL -0xB8F5 0xBAB2 # HANGUL SYLLABLE MIEUM-O-RIEULMIEUM -0xB8F6 0xBAB8 # HANGUL SYLLABLE MIEUM-O-MIEUM -0xB8F7 0xBAB9 # HANGUL SYLLABLE MIEUM-O-PIEUP -0xB8F8 0xBABB # HANGUL SYLLABLE MIEUM-O-SIOS -0xB8F9 0xBABD # HANGUL SYLLABLE MIEUM-O-IEUNG -0xB8FA 0xBAC4 # HANGUL SYLLABLE MIEUM-WA -0xB8FB 0xBAC8 # HANGUL SYLLABLE MIEUM-WA-NIEUN -0xB8FC 0xBAD8 # HANGUL SYLLABLE MIEUM-WA-SSANGSIOS -0xB8FD 0xBAD9 # HANGUL SYLLABLE MIEUM-WA-IEUNG -0xB8FE 0xBAFC # HANGUL SYLLABLE MIEUM-OE -0xB941 0xD22A # HANGUL SYLLABLE THIEUTH-YO-PHIEUPH -0xB942 0xD22B # HANGUL SYLLABLE THIEUTH-YO-HIEUH -0xB943 0xD22E # HANGUL SYLLABLE THIEUTH-U-SSANGKIYEOK -0xB944 0xD22F # HANGUL SYLLABLE THIEUTH-U-KIYEOKSIOS -0xB945 0xD231 # HANGUL SYLLABLE THIEUTH-U-NIEUNCIEUC -0xB946 0xD232 # HANGUL SYLLABLE THIEUTH-U-NIEUNHIEUH -0xB947 0xD233 # HANGUL SYLLABLE THIEUTH-U-TIKEUT -0xB948 0xD235 # HANGUL SYLLABLE THIEUTH-U-RIEULKIYEOK -0xB949 0xD236 # HANGUL SYLLABLE THIEUTH-U-RIEULMIEUM -0xB94A 0xD237 # HANGUL SYLLABLE THIEUTH-U-RIEULPIEUP -0xB94B 0xD238 # HANGUL SYLLABLE THIEUTH-U-RIEULSIOS -0xB94C 0xD239 # HANGUL SYLLABLE THIEUTH-U-RIEULTHIEUTH -0xB94D 0xD23A # HANGUL SYLLABLE THIEUTH-U-RIEULPHIEUPH -0xB94E 0xD23B # HANGUL SYLLABLE THIEUTH-U-RIEULHIEUH -0xB94F 0xD23E # HANGUL SYLLABLE THIEUTH-U-PIEUPSIOS -0xB950 0xD240 # HANGUL SYLLABLE THIEUTH-U-SSANGSIOS -0xB951 0xD242 # HANGUL SYLLABLE THIEUTH-U-CIEUC -0xB952 0xD243 # HANGUL SYLLABLE THIEUTH-U-CHIEUCH -0xB953 0xD244 # HANGUL SYLLABLE THIEUTH-U-KHIEUKH -0xB954 0xD245 # HANGUL SYLLABLE THIEUTH-U-THIEUTH -0xB955 0xD246 # HANGUL SYLLABLE THIEUTH-U-PHIEUPH -0xB956 0xD247 # HANGUL SYLLABLE THIEUTH-U-HIEUH -0xB957 0xD249 # HANGUL SYLLABLE THIEUTH-WEO-KIYEOK -0xB958 0xD24A # HANGUL SYLLABLE THIEUTH-WEO-SSANGKIYEOK -0xB959 0xD24B # HANGUL SYLLABLE THIEUTH-WEO-KIYEOKSIOS -0xB95A 0xD24C # HANGUL SYLLABLE THIEUTH-WEO-NIEUN -0xB961 0xD24D # HANGUL SYLLABLE THIEUTH-WEO-NIEUNCIEUC -0xB962 0xD24E # HANGUL SYLLABLE THIEUTH-WEO-NIEUNHIEUH -0xB963 0xD24F # HANGUL SYLLABLE THIEUTH-WEO-TIKEUT -0xB964 0xD250 # HANGUL SYLLABLE THIEUTH-WEO-RIEUL -0xB965 0xD251 # HANGUL SYLLABLE THIEUTH-WEO-RIEULKIYEOK -0xB966 0xD252 # HANGUL SYLLABLE THIEUTH-WEO-RIEULMIEUM -0xB967 0xD253 # HANGUL SYLLABLE THIEUTH-WEO-RIEULPIEUP -0xB968 0xD254 # HANGUL SYLLABLE THIEUTH-WEO-RIEULSIOS -0xB969 0xD255 # HANGUL SYLLABLE THIEUTH-WEO-RIEULTHIEUTH -0xB96A 0xD256 # HANGUL SYLLABLE THIEUTH-WEO-RIEULPHIEUPH -0xB96B 0xD257 # HANGUL SYLLABLE THIEUTH-WEO-RIEULHIEUH -0xB96C 0xD258 # HANGUL SYLLABLE THIEUTH-WEO-MIEUM -0xB96D 0xD259 # HANGUL SYLLABLE THIEUTH-WEO-PIEUP -0xB96E 0xD25A # HANGUL SYLLABLE THIEUTH-WEO-PIEUPSIOS -0xB96F 0xD25B # HANGUL SYLLABLE THIEUTH-WEO-SIOS -0xB970 0xD25D # HANGUL SYLLABLE THIEUTH-WEO-IEUNG -0xB971 0xD25E # HANGUL SYLLABLE THIEUTH-WEO-CIEUC -0xB972 0xD25F # HANGUL SYLLABLE THIEUTH-WEO-CHIEUCH -0xB973 0xD260 # HANGUL SYLLABLE THIEUTH-WEO-KHIEUKH -0xB974 0xD261 # HANGUL SYLLABLE THIEUTH-WEO-THIEUTH -0xB975 0xD262 # HANGUL SYLLABLE THIEUTH-WEO-PHIEUPH -0xB976 0xD263 # HANGUL SYLLABLE THIEUTH-WEO-HIEUH -0xB977 0xD265 # HANGUL SYLLABLE THIEUTH-WE-KIYEOK -0xB978 0xD266 # HANGUL SYLLABLE THIEUTH-WE-SSANGKIYEOK -0xB979 0xD267 # HANGUL SYLLABLE THIEUTH-WE-KIYEOKSIOS -0xB97A 0xD268 # HANGUL SYLLABLE THIEUTH-WE-NIEUN -0xB981 0xD269 # HANGUL SYLLABLE THIEUTH-WE-NIEUNCIEUC -0xB982 0xD26A # HANGUL SYLLABLE THIEUTH-WE-NIEUNHIEUH -0xB983 0xD26B # HANGUL SYLLABLE THIEUTH-WE-TIKEUT -0xB984 0xD26C # HANGUL SYLLABLE THIEUTH-WE-RIEUL -0xB985 0xD26D # HANGUL SYLLABLE THIEUTH-WE-RIEULKIYEOK -0xB986 0xD26E # HANGUL SYLLABLE THIEUTH-WE-RIEULMIEUM -0xB987 0xD26F # HANGUL SYLLABLE THIEUTH-WE-RIEULPIEUP -0xB988 0xD270 # HANGUL SYLLABLE THIEUTH-WE-RIEULSIOS -0xB989 0xD271 # HANGUL SYLLABLE THIEUTH-WE-RIEULTHIEUTH -0xB98A 0xD272 # HANGUL SYLLABLE THIEUTH-WE-RIEULPHIEUPH -0xB98B 0xD273 # HANGUL SYLLABLE THIEUTH-WE-RIEULHIEUH -0xB98C 0xD274 # HANGUL SYLLABLE THIEUTH-WE-MIEUM -0xB98D 0xD275 # HANGUL SYLLABLE THIEUTH-WE-PIEUP -0xB98E 0xD276 # HANGUL SYLLABLE THIEUTH-WE-PIEUPSIOS -0xB98F 0xD277 # HANGUL SYLLABLE THIEUTH-WE-SIOS -0xB990 0xD278 # HANGUL SYLLABLE THIEUTH-WE-SSANGSIOS -0xB991 0xD279 # HANGUL SYLLABLE THIEUTH-WE-IEUNG -0xB992 0xD27A # HANGUL SYLLABLE THIEUTH-WE-CIEUC -0xB993 0xD27B # HANGUL SYLLABLE THIEUTH-WE-CHIEUCH -0xB994 0xD27C # HANGUL SYLLABLE THIEUTH-WE-KHIEUKH -0xB995 0xD27D # HANGUL SYLLABLE THIEUTH-WE-THIEUTH -0xB996 0xD27E # HANGUL SYLLABLE THIEUTH-WE-PHIEUPH -0xB997 0xD27F # HANGUL SYLLABLE THIEUTH-WE-HIEUH -0xB998 0xD282 # HANGUL SYLLABLE THIEUTH-WI-SSANGKIYEOK -0xB999 0xD283 # HANGUL SYLLABLE THIEUTH-WI-KIYEOKSIOS -0xB99A 0xD285 # HANGUL SYLLABLE THIEUTH-WI-NIEUNCIEUC -0xB99B 0xD286 # HANGUL SYLLABLE THIEUTH-WI-NIEUNHIEUH -0xB99C 0xD287 # HANGUL SYLLABLE THIEUTH-WI-TIKEUT -0xB99D 0xD289 # HANGUL SYLLABLE THIEUTH-WI-RIEULKIYEOK -0xB99E 0xD28A # HANGUL SYLLABLE THIEUTH-WI-RIEULMIEUM -0xB99F 0xD28B # HANGUL SYLLABLE THIEUTH-WI-RIEULPIEUP -0xB9A0 0xD28C # HANGUL SYLLABLE THIEUTH-WI-RIEULSIOS -0xB9A1 0xBB00 # HANGUL SYLLABLE MIEUM-OE-NIEUN -0xB9A2 0xBB04 # HANGUL SYLLABLE MIEUM-OE-RIEUL -0xB9A3 0xBB0D # HANGUL SYLLABLE MIEUM-OE-PIEUP -0xB9A4 0xBB0F # HANGUL SYLLABLE MIEUM-OE-SIOS -0xB9A5 0xBB11 # HANGUL SYLLABLE MIEUM-OE-IEUNG -0xB9A6 0xBB18 # HANGUL SYLLABLE MIEUM-YO -0xB9A7 0xBB1C # HANGUL SYLLABLE MIEUM-YO-NIEUN -0xB9A8 0xBB20 # HANGUL SYLLABLE MIEUM-YO-RIEUL -0xB9A9 0xBB29 # HANGUL SYLLABLE MIEUM-YO-PIEUP -0xB9AA 0xBB2B # HANGUL SYLLABLE MIEUM-YO-SIOS -0xB9AB 0xBB34 # HANGUL SYLLABLE MIEUM-U -0xB9AC 0xBB35 # HANGUL SYLLABLE MIEUM-U-KIYEOK -0xB9AD 0xBB36 # HANGUL SYLLABLE MIEUM-U-SSANGKIYEOK -0xB9AE 0xBB38 # HANGUL SYLLABLE MIEUM-U-NIEUN -0xB9AF 0xBB3B # HANGUL SYLLABLE MIEUM-U-TIKEUT -0xB9B0 0xBB3C # HANGUL SYLLABLE MIEUM-U-RIEUL -0xB9B1 0xBB3D # HANGUL SYLLABLE MIEUM-U-RIEULKIYEOK -0xB9B2 0xBB3E # HANGUL SYLLABLE MIEUM-U-RIEULMIEUM -0xB9B3 0xBB44 # HANGUL SYLLABLE MIEUM-U-MIEUM -0xB9B4 0xBB45 # HANGUL SYLLABLE MIEUM-U-PIEUP -0xB9B5 0xBB47 # HANGUL SYLLABLE MIEUM-U-SIOS -0xB9B6 0xBB49 # HANGUL SYLLABLE MIEUM-U-IEUNG -0xB9B7 0xBB4D # HANGUL SYLLABLE MIEUM-U-THIEUTH -0xB9B8 0xBB4F # HANGUL SYLLABLE MIEUM-U-HIEUH -0xB9B9 0xBB50 # HANGUL SYLLABLE MIEUM-WEO -0xB9BA 0xBB54 # HANGUL SYLLABLE MIEUM-WEO-NIEUN -0xB9BB 0xBB58 # HANGUL SYLLABLE MIEUM-WEO-RIEUL -0xB9BC 0xBB61 # HANGUL SYLLABLE MIEUM-WEO-PIEUP -0xB9BD 0xBB63 # HANGUL SYLLABLE MIEUM-WEO-SIOS -0xB9BE 0xBB6C # HANGUL SYLLABLE MIEUM-WE -0xB9BF 0xBB88 # HANGUL SYLLABLE MIEUM-WI -0xB9C0 0xBB8C # HANGUL SYLLABLE MIEUM-WI-NIEUN -0xB9C1 0xBB90 # HANGUL SYLLABLE MIEUM-WI-RIEUL -0xB9C2 0xBBA4 # HANGUL SYLLABLE MIEUM-YU -0xB9C3 0xBBA8 # HANGUL SYLLABLE MIEUM-YU-NIEUN -0xB9C4 0xBBAC # HANGUL SYLLABLE MIEUM-YU-RIEUL -0xB9C5 0xBBB4 # HANGUL SYLLABLE MIEUM-YU-MIEUM -0xB9C6 0xBBB7 # HANGUL SYLLABLE MIEUM-YU-SIOS -0xB9C7 0xBBC0 # HANGUL SYLLABLE MIEUM-EU -0xB9C8 0xBBC4 # HANGUL SYLLABLE MIEUM-EU-NIEUN -0xB9C9 0xBBC8 # HANGUL SYLLABLE MIEUM-EU-RIEUL -0xB9CA 0xBBD0 # HANGUL SYLLABLE MIEUM-EU-MIEUM -0xB9CB 0xBBD3 # HANGUL SYLLABLE MIEUM-EU-SIOS -0xB9CC 0xBBF8 # HANGUL SYLLABLE MIEUM-I -0xB9CD 0xBBF9 # HANGUL SYLLABLE MIEUM-I-KIYEOK -0xB9CE 0xBBFC # HANGUL SYLLABLE MIEUM-I-NIEUN -0xB9CF 0xBBFF # HANGUL SYLLABLE MIEUM-I-TIKEUT -0xB9D0 0xBC00 # HANGUL SYLLABLE MIEUM-I-RIEUL -0xB9D1 0xBC02 # HANGUL SYLLABLE MIEUM-I-RIEULMIEUM -0xB9D2 0xBC08 # HANGUL SYLLABLE MIEUM-I-MIEUM -0xB9D3 0xBC09 # HANGUL SYLLABLE MIEUM-I-PIEUP -0xB9D4 0xBC0B # HANGUL SYLLABLE MIEUM-I-SIOS -0xB9D5 0xBC0C # HANGUL SYLLABLE MIEUM-I-SSANGSIOS -0xB9D6 0xBC0D # HANGUL SYLLABLE MIEUM-I-IEUNG -0xB9D7 0xBC0F # HANGUL SYLLABLE MIEUM-I-CHIEUCH -0xB9D8 0xBC11 # HANGUL SYLLABLE MIEUM-I-THIEUTH -0xB9D9 0xBC14 # HANGUL SYLLABLE PIEUP-A -0xB9DA 0xBC15 # HANGUL SYLLABLE PIEUP-A-KIYEOK -0xB9DB 0xBC16 # HANGUL SYLLABLE PIEUP-A-SSANGKIYEOK -0xB9DC 0xBC17 # HANGUL SYLLABLE PIEUP-A-KIYEOKSIOS -0xB9DD 0xBC18 # HANGUL SYLLABLE PIEUP-A-NIEUN -0xB9DE 0xBC1B # HANGUL SYLLABLE PIEUP-A-TIKEUT -0xB9DF 0xBC1C # HANGUL SYLLABLE PIEUP-A-RIEUL -0xB9E0 0xBC1D # HANGUL SYLLABLE PIEUP-A-RIEULKIYEOK -0xB9E1 0xBC1E # HANGUL SYLLABLE PIEUP-A-RIEULMIEUM -0xB9E2 0xBC1F # HANGUL SYLLABLE PIEUP-A-RIEULPIEUP -0xB9E3 0xBC24 # HANGUL SYLLABLE PIEUP-A-MIEUM -0xB9E4 0xBC25 # HANGUL SYLLABLE PIEUP-A-PIEUP -0xB9E5 0xBC27 # HANGUL SYLLABLE PIEUP-A-SIOS -0xB9E6 0xBC29 # HANGUL SYLLABLE PIEUP-A-IEUNG -0xB9E7 0xBC2D # HANGUL SYLLABLE PIEUP-A-THIEUTH -0xB9E8 0xBC30 # HANGUL SYLLABLE PIEUP-AE -0xB9E9 0xBC31 # HANGUL SYLLABLE PIEUP-AE-KIYEOK -0xB9EA 0xBC34 # HANGUL SYLLABLE PIEUP-AE-NIEUN -0xB9EB 0xBC38 # HANGUL SYLLABLE PIEUP-AE-RIEUL -0xB9EC 0xBC40 # HANGUL SYLLABLE PIEUP-AE-MIEUM -0xB9ED 0xBC41 # HANGUL SYLLABLE PIEUP-AE-PIEUP -0xB9EE 0xBC43 # HANGUL SYLLABLE PIEUP-AE-SIOS -0xB9EF 0xBC44 # HANGUL SYLLABLE PIEUP-AE-SSANGSIOS -0xB9F0 0xBC45 # HANGUL SYLLABLE PIEUP-AE-IEUNG -0xB9F1 0xBC49 # HANGUL SYLLABLE PIEUP-AE-THIEUTH -0xB9F2 0xBC4C # HANGUL SYLLABLE PIEUP-YA -0xB9F3 0xBC4D # HANGUL SYLLABLE PIEUP-YA-KIYEOK -0xB9F4 0xBC50 # HANGUL SYLLABLE PIEUP-YA-NIEUN -0xB9F5 0xBC5D # HANGUL SYLLABLE PIEUP-YA-PIEUP -0xB9F6 0xBC84 # HANGUL SYLLABLE PIEUP-EO -0xB9F7 0xBC85 # HANGUL SYLLABLE PIEUP-EO-KIYEOK -0xB9F8 0xBC88 # HANGUL SYLLABLE PIEUP-EO-NIEUN -0xB9F9 0xBC8B # HANGUL SYLLABLE PIEUP-EO-TIKEUT -0xB9FA 0xBC8C # HANGUL SYLLABLE PIEUP-EO-RIEUL -0xB9FB 0xBC8E # HANGUL SYLLABLE PIEUP-EO-RIEULMIEUM -0xB9FC 0xBC94 # HANGUL SYLLABLE PIEUP-EO-MIEUM -0xB9FD 0xBC95 # HANGUL SYLLABLE PIEUP-EO-PIEUP -0xB9FE 0xBC97 # HANGUL SYLLABLE PIEUP-EO-SIOS -0xBA41 0xD28D # HANGUL SYLLABLE THIEUTH-WI-RIEULTHIEUTH -0xBA42 0xD28E # HANGUL SYLLABLE THIEUTH-WI-RIEULPHIEUPH -0xBA43 0xD28F # HANGUL SYLLABLE THIEUTH-WI-RIEULHIEUH -0xBA44 0xD292 # HANGUL SYLLABLE THIEUTH-WI-PIEUPSIOS -0xBA45 0xD293 # HANGUL SYLLABLE THIEUTH-WI-SIOS -0xBA46 0xD294 # HANGUL SYLLABLE THIEUTH-WI-SSANGSIOS -0xBA47 0xD296 # HANGUL SYLLABLE THIEUTH-WI-CIEUC -0xBA48 0xD297 # HANGUL SYLLABLE THIEUTH-WI-CHIEUCH -0xBA49 0xD298 # HANGUL SYLLABLE THIEUTH-WI-KHIEUKH -0xBA4A 0xD299 # HANGUL SYLLABLE THIEUTH-WI-THIEUTH -0xBA4B 0xD29A # HANGUL SYLLABLE THIEUTH-WI-PHIEUPH -0xBA4C 0xD29B # HANGUL SYLLABLE THIEUTH-WI-HIEUH -0xBA4D 0xD29D # HANGUL SYLLABLE THIEUTH-YU-KIYEOK -0xBA4E 0xD29E # HANGUL SYLLABLE THIEUTH-YU-SSANGKIYEOK -0xBA4F 0xD29F # HANGUL SYLLABLE THIEUTH-YU-KIYEOKSIOS -0xBA50 0xD2A1 # HANGUL SYLLABLE THIEUTH-YU-NIEUNCIEUC -0xBA51 0xD2A2 # HANGUL SYLLABLE THIEUTH-YU-NIEUNHIEUH -0xBA52 0xD2A3 # HANGUL SYLLABLE THIEUTH-YU-TIKEUT -0xBA53 0xD2A5 # HANGUL SYLLABLE THIEUTH-YU-RIEULKIYEOK -0xBA54 0xD2A6 # HANGUL SYLLABLE THIEUTH-YU-RIEULMIEUM -0xBA55 0xD2A7 # HANGUL SYLLABLE THIEUTH-YU-RIEULPIEUP -0xBA56 0xD2A8 # HANGUL SYLLABLE THIEUTH-YU-RIEULSIOS -0xBA57 0xD2A9 # HANGUL SYLLABLE THIEUTH-YU-RIEULTHIEUTH -0xBA58 0xD2AA # HANGUL SYLLABLE THIEUTH-YU-RIEULPHIEUPH -0xBA59 0xD2AB # HANGUL SYLLABLE THIEUTH-YU-RIEULHIEUH -0xBA5A 0xD2AD # HANGUL SYLLABLE THIEUTH-YU-PIEUP -0xBA61 0xD2AE # HANGUL SYLLABLE THIEUTH-YU-PIEUPSIOS -0xBA62 0xD2AF # HANGUL SYLLABLE THIEUTH-YU-SIOS -0xBA63 0xD2B0 # HANGUL SYLLABLE THIEUTH-YU-SSANGSIOS -0xBA64 0xD2B2 # HANGUL SYLLABLE THIEUTH-YU-CIEUC -0xBA65 0xD2B3 # HANGUL SYLLABLE THIEUTH-YU-CHIEUCH -0xBA66 0xD2B4 # HANGUL SYLLABLE THIEUTH-YU-KHIEUKH -0xBA67 0xD2B5 # HANGUL SYLLABLE THIEUTH-YU-THIEUTH -0xBA68 0xD2B6 # HANGUL SYLLABLE THIEUTH-YU-PHIEUPH -0xBA69 0xD2B7 # HANGUL SYLLABLE THIEUTH-YU-HIEUH -0xBA6A 0xD2BA # HANGUL SYLLABLE THIEUTH-EU-SSANGKIYEOK -0xBA6B 0xD2BB # HANGUL SYLLABLE THIEUTH-EU-KIYEOKSIOS -0xBA6C 0xD2BD # HANGUL SYLLABLE THIEUTH-EU-NIEUNCIEUC -0xBA6D 0xD2BE # HANGUL SYLLABLE THIEUTH-EU-NIEUNHIEUH -0xBA6E 0xD2C1 # HANGUL SYLLABLE THIEUTH-EU-RIEULKIYEOK -0xBA6F 0xD2C3 # HANGUL SYLLABLE THIEUTH-EU-RIEULPIEUP -0xBA70 0xD2C4 # HANGUL SYLLABLE THIEUTH-EU-RIEULSIOS -0xBA71 0xD2C5 # HANGUL SYLLABLE THIEUTH-EU-RIEULTHIEUTH -0xBA72 0xD2C6 # HANGUL SYLLABLE THIEUTH-EU-RIEULPHIEUPH -0xBA73 0xD2C7 # HANGUL SYLLABLE THIEUTH-EU-RIEULHIEUH -0xBA74 0xD2CA # HANGUL SYLLABLE THIEUTH-EU-PIEUPSIOS -0xBA75 0xD2CC # HANGUL SYLLABLE THIEUTH-EU-SSANGSIOS -0xBA76 0xD2CD # HANGUL SYLLABLE THIEUTH-EU-IEUNG -0xBA77 0xD2CE # HANGUL SYLLABLE THIEUTH-EU-CIEUC -0xBA78 0xD2CF # HANGUL SYLLABLE THIEUTH-EU-CHIEUCH -0xBA79 0xD2D0 # HANGUL SYLLABLE THIEUTH-EU-KHIEUKH -0xBA7A 0xD2D1 # HANGUL SYLLABLE THIEUTH-EU-THIEUTH -0xBA81 0xD2D2 # HANGUL SYLLABLE THIEUTH-EU-PHIEUPH -0xBA82 0xD2D3 # HANGUL SYLLABLE THIEUTH-EU-HIEUH -0xBA83 0xD2D5 # HANGUL SYLLABLE THIEUTH-YI-KIYEOK -0xBA84 0xD2D6 # HANGUL SYLLABLE THIEUTH-YI-SSANGKIYEOK -0xBA85 0xD2D7 # HANGUL SYLLABLE THIEUTH-YI-KIYEOKSIOS -0xBA86 0xD2D9 # HANGUL SYLLABLE THIEUTH-YI-NIEUNCIEUC -0xBA87 0xD2DA # HANGUL SYLLABLE THIEUTH-YI-NIEUNHIEUH -0xBA88 0xD2DB # HANGUL SYLLABLE THIEUTH-YI-TIKEUT -0xBA89 0xD2DD # HANGUL SYLLABLE THIEUTH-YI-RIEULKIYEOK -0xBA8A 0xD2DE # HANGUL SYLLABLE THIEUTH-YI-RIEULMIEUM -0xBA8B 0xD2DF # HANGUL SYLLABLE THIEUTH-YI-RIEULPIEUP -0xBA8C 0xD2E0 # HANGUL SYLLABLE THIEUTH-YI-RIEULSIOS -0xBA8D 0xD2E1 # HANGUL SYLLABLE THIEUTH-YI-RIEULTHIEUTH -0xBA8E 0xD2E2 # HANGUL SYLLABLE THIEUTH-YI-RIEULPHIEUPH -0xBA8F 0xD2E3 # HANGUL SYLLABLE THIEUTH-YI-RIEULHIEUH -0xBA90 0xD2E6 # HANGUL SYLLABLE THIEUTH-YI-PIEUPSIOS -0xBA91 0xD2E7 # HANGUL SYLLABLE THIEUTH-YI-SIOS -0xBA92 0xD2E8 # HANGUL SYLLABLE THIEUTH-YI-SSANGSIOS -0xBA93 0xD2E9 # HANGUL SYLLABLE THIEUTH-YI-IEUNG -0xBA94 0xD2EA # HANGUL SYLLABLE THIEUTH-YI-CIEUC -0xBA95 0xD2EB # HANGUL SYLLABLE THIEUTH-YI-CHIEUCH -0xBA96 0xD2EC # HANGUL SYLLABLE THIEUTH-YI-KHIEUKH -0xBA97 0xD2ED # HANGUL SYLLABLE THIEUTH-YI-THIEUTH -0xBA98 0xD2EE # HANGUL SYLLABLE THIEUTH-YI-PHIEUPH -0xBA99 0xD2EF # HANGUL SYLLABLE THIEUTH-YI-HIEUH -0xBA9A 0xD2F2 # HANGUL SYLLABLE THIEUTH-I-SSANGKIYEOK -0xBA9B 0xD2F3 # HANGUL SYLLABLE THIEUTH-I-KIYEOKSIOS -0xBA9C 0xD2F5 # HANGUL SYLLABLE THIEUTH-I-NIEUNCIEUC -0xBA9D 0xD2F6 # HANGUL SYLLABLE THIEUTH-I-NIEUNHIEUH -0xBA9E 0xD2F7 # HANGUL SYLLABLE THIEUTH-I-TIKEUT -0xBA9F 0xD2F9 # HANGUL SYLLABLE THIEUTH-I-RIEULKIYEOK -0xBAA0 0xD2FA # HANGUL SYLLABLE THIEUTH-I-RIEULMIEUM -0xBAA1 0xBC99 # HANGUL SYLLABLE PIEUP-EO-IEUNG -0xBAA2 0xBC9A # HANGUL SYLLABLE PIEUP-EO-CIEUC -0xBAA3 0xBCA0 # HANGUL SYLLABLE PIEUP-E -0xBAA4 0xBCA1 # HANGUL SYLLABLE PIEUP-E-KIYEOK -0xBAA5 0xBCA4 # HANGUL SYLLABLE PIEUP-E-NIEUN -0xBAA6 0xBCA7 # HANGUL SYLLABLE PIEUP-E-TIKEUT -0xBAA7 0xBCA8 # HANGUL SYLLABLE PIEUP-E-RIEUL -0xBAA8 0xBCB0 # HANGUL SYLLABLE PIEUP-E-MIEUM -0xBAA9 0xBCB1 # HANGUL SYLLABLE PIEUP-E-PIEUP -0xBAAA 0xBCB3 # HANGUL SYLLABLE PIEUP-E-SIOS -0xBAAB 0xBCB4 # HANGUL SYLLABLE PIEUP-E-SSANGSIOS -0xBAAC 0xBCB5 # HANGUL SYLLABLE PIEUP-E-IEUNG -0xBAAD 0xBCBC # HANGUL SYLLABLE PIEUP-YEO -0xBAAE 0xBCBD # HANGUL SYLLABLE PIEUP-YEO-KIYEOK -0xBAAF 0xBCC0 # HANGUL SYLLABLE PIEUP-YEO-NIEUN -0xBAB0 0xBCC4 # HANGUL SYLLABLE PIEUP-YEO-RIEUL -0xBAB1 0xBCCD # HANGUL SYLLABLE PIEUP-YEO-PIEUP -0xBAB2 0xBCCF # HANGUL SYLLABLE PIEUP-YEO-SIOS -0xBAB3 0xBCD0 # HANGUL SYLLABLE PIEUP-YEO-SSANGSIOS -0xBAB4 0xBCD1 # HANGUL SYLLABLE PIEUP-YEO-IEUNG -0xBAB5 0xBCD5 # HANGUL SYLLABLE PIEUP-YEO-THIEUTH -0xBAB6 0xBCD8 # HANGUL SYLLABLE PIEUP-YE -0xBAB7 0xBCDC # HANGUL SYLLABLE PIEUP-YE-NIEUN -0xBAB8 0xBCF4 # HANGUL SYLLABLE PIEUP-O -0xBAB9 0xBCF5 # HANGUL SYLLABLE PIEUP-O-KIYEOK -0xBABA 0xBCF6 # HANGUL SYLLABLE PIEUP-O-SSANGKIYEOK -0xBABB 0xBCF8 # HANGUL SYLLABLE PIEUP-O-NIEUN -0xBABC 0xBCFC # HANGUL SYLLABLE PIEUP-O-RIEUL -0xBABD 0xBD04 # HANGUL SYLLABLE PIEUP-O-MIEUM -0xBABE 0xBD05 # HANGUL SYLLABLE PIEUP-O-PIEUP -0xBABF 0xBD07 # HANGUL SYLLABLE PIEUP-O-SIOS -0xBAC0 0xBD09 # HANGUL SYLLABLE PIEUP-O-IEUNG -0xBAC1 0xBD10 # HANGUL SYLLABLE PIEUP-WA -0xBAC2 0xBD14 # HANGUL SYLLABLE PIEUP-WA-NIEUN -0xBAC3 0xBD24 # HANGUL SYLLABLE PIEUP-WA-SSANGSIOS -0xBAC4 0xBD2C # HANGUL SYLLABLE PIEUP-WAE -0xBAC5 0xBD40 # HANGUL SYLLABLE PIEUP-WAE-SSANGSIOS -0xBAC6 0xBD48 # HANGUL SYLLABLE PIEUP-OE -0xBAC7 0xBD49 # HANGUL SYLLABLE PIEUP-OE-KIYEOK -0xBAC8 0xBD4C # HANGUL SYLLABLE PIEUP-OE-NIEUN -0xBAC9 0xBD50 # HANGUL SYLLABLE PIEUP-OE-RIEUL -0xBACA 0xBD58 # HANGUL SYLLABLE PIEUP-OE-MIEUM -0xBACB 0xBD59 # HANGUL SYLLABLE PIEUP-OE-PIEUP -0xBACC 0xBD64 # HANGUL SYLLABLE PIEUP-YO -0xBACD 0xBD68 # HANGUL SYLLABLE PIEUP-YO-NIEUN -0xBACE 0xBD80 # HANGUL SYLLABLE PIEUP-U -0xBACF 0xBD81 # HANGUL SYLLABLE PIEUP-U-KIYEOK -0xBAD0 0xBD84 # HANGUL SYLLABLE PIEUP-U-NIEUN -0xBAD1 0xBD87 # HANGUL SYLLABLE PIEUP-U-TIKEUT -0xBAD2 0xBD88 # HANGUL SYLLABLE PIEUP-U-RIEUL -0xBAD3 0xBD89 # HANGUL SYLLABLE PIEUP-U-RIEULKIYEOK -0xBAD4 0xBD8A # HANGUL SYLLABLE PIEUP-U-RIEULMIEUM -0xBAD5 0xBD90 # HANGUL SYLLABLE PIEUP-U-MIEUM -0xBAD6 0xBD91 # HANGUL SYLLABLE PIEUP-U-PIEUP -0xBAD7 0xBD93 # HANGUL SYLLABLE PIEUP-U-SIOS -0xBAD8 0xBD95 # HANGUL SYLLABLE PIEUP-U-IEUNG -0xBAD9 0xBD99 # HANGUL SYLLABLE PIEUP-U-THIEUTH -0xBADA 0xBD9A # HANGUL SYLLABLE PIEUP-U-PHIEUPH -0xBADB 0xBD9C # HANGUL SYLLABLE PIEUP-WEO -0xBADC 0xBDA4 # HANGUL SYLLABLE PIEUP-WEO-RIEUL -0xBADD 0xBDB0 # HANGUL SYLLABLE PIEUP-WEO-SSANGSIOS -0xBADE 0xBDB8 # HANGUL SYLLABLE PIEUP-WE -0xBADF 0xBDD4 # HANGUL SYLLABLE PIEUP-WI -0xBAE0 0xBDD5 # HANGUL SYLLABLE PIEUP-WI-KIYEOK -0xBAE1 0xBDD8 # HANGUL SYLLABLE PIEUP-WI-NIEUN -0xBAE2 0xBDDC # HANGUL SYLLABLE PIEUP-WI-RIEUL -0xBAE3 0xBDE9 # HANGUL SYLLABLE PIEUP-WI-IEUNG -0xBAE4 0xBDF0 # HANGUL SYLLABLE PIEUP-YU -0xBAE5 0xBDF4 # HANGUL SYLLABLE PIEUP-YU-NIEUN -0xBAE6 0xBDF8 # HANGUL SYLLABLE PIEUP-YU-RIEUL -0xBAE7 0xBE00 # HANGUL SYLLABLE PIEUP-YU-MIEUM -0xBAE8 0xBE03 # HANGUL SYLLABLE PIEUP-YU-SIOS -0xBAE9 0xBE05 # HANGUL SYLLABLE PIEUP-YU-IEUNG -0xBAEA 0xBE0C # HANGUL SYLLABLE PIEUP-EU -0xBAEB 0xBE0D # HANGUL SYLLABLE PIEUP-EU-KIYEOK -0xBAEC 0xBE10 # HANGUL SYLLABLE PIEUP-EU-NIEUN -0xBAED 0xBE14 # HANGUL SYLLABLE PIEUP-EU-RIEUL -0xBAEE 0xBE1C # HANGUL SYLLABLE PIEUP-EU-MIEUM -0xBAEF 0xBE1D # HANGUL SYLLABLE PIEUP-EU-PIEUP -0xBAF0 0xBE1F # HANGUL SYLLABLE PIEUP-EU-SIOS -0xBAF1 0xBE44 # HANGUL SYLLABLE PIEUP-I -0xBAF2 0xBE45 # HANGUL SYLLABLE PIEUP-I-KIYEOK -0xBAF3 0xBE48 # HANGUL SYLLABLE PIEUP-I-NIEUN -0xBAF4 0xBE4C # HANGUL SYLLABLE PIEUP-I-RIEUL -0xBAF5 0xBE4E # HANGUL SYLLABLE PIEUP-I-RIEULMIEUM -0xBAF6 0xBE54 # HANGUL SYLLABLE PIEUP-I-MIEUM -0xBAF7 0xBE55 # HANGUL SYLLABLE PIEUP-I-PIEUP -0xBAF8 0xBE57 # HANGUL SYLLABLE PIEUP-I-SIOS -0xBAF9 0xBE59 # HANGUL SYLLABLE PIEUP-I-IEUNG -0xBAFA 0xBE5A # HANGUL SYLLABLE PIEUP-I-CIEUC -0xBAFB 0xBE5B # HANGUL SYLLABLE PIEUP-I-CHIEUCH -0xBAFC 0xBE60 # HANGUL SYLLABLE SSANGPIEUP-A -0xBAFD 0xBE61 # HANGUL SYLLABLE SSANGPIEUP-A-KIYEOK -0xBAFE 0xBE64 # HANGUL SYLLABLE SSANGPIEUP-A-NIEUN -0xBB41 0xD2FB # HANGUL SYLLABLE THIEUTH-I-RIEULPIEUP -0xBB42 0xD2FC # HANGUL SYLLABLE THIEUTH-I-RIEULSIOS -0xBB43 0xD2FD # HANGUL SYLLABLE THIEUTH-I-RIEULTHIEUTH -0xBB44 0xD2FE # HANGUL SYLLABLE THIEUTH-I-RIEULPHIEUPH -0xBB45 0xD2FF # HANGUL SYLLABLE THIEUTH-I-RIEULHIEUH -0xBB46 0xD302 # HANGUL SYLLABLE THIEUTH-I-PIEUPSIOS -0xBB47 0xD304 # HANGUL SYLLABLE THIEUTH-I-SSANGSIOS -0xBB48 0xD306 # HANGUL SYLLABLE THIEUTH-I-CIEUC -0xBB49 0xD307 # HANGUL SYLLABLE THIEUTH-I-CHIEUCH -0xBB4A 0xD308 # HANGUL SYLLABLE THIEUTH-I-KHIEUKH -0xBB4B 0xD309 # HANGUL SYLLABLE THIEUTH-I-THIEUTH -0xBB4C 0xD30A # HANGUL SYLLABLE THIEUTH-I-PHIEUPH -0xBB4D 0xD30B # HANGUL SYLLABLE THIEUTH-I-HIEUH -0xBB4E 0xD30F # HANGUL SYLLABLE PHIEUPH-A-KIYEOKSIOS -0xBB4F 0xD311 # HANGUL SYLLABLE PHIEUPH-A-NIEUNCIEUC -0xBB50 0xD312 # HANGUL SYLLABLE PHIEUPH-A-NIEUNHIEUH -0xBB51 0xD313 # HANGUL SYLLABLE PHIEUPH-A-TIKEUT -0xBB52 0xD315 # HANGUL SYLLABLE PHIEUPH-A-RIEULKIYEOK -0xBB53 0xD317 # HANGUL SYLLABLE PHIEUPH-A-RIEULPIEUP -0xBB54 0xD318 # HANGUL SYLLABLE PHIEUPH-A-RIEULSIOS -0xBB55 0xD319 # HANGUL SYLLABLE PHIEUPH-A-RIEULTHIEUTH -0xBB56 0xD31A # HANGUL SYLLABLE PHIEUPH-A-RIEULPHIEUPH -0xBB57 0xD31B # HANGUL SYLLABLE PHIEUPH-A-RIEULHIEUH -0xBB58 0xD31E # HANGUL SYLLABLE PHIEUPH-A-PIEUPSIOS -0xBB59 0xD322 # HANGUL SYLLABLE PHIEUPH-A-CIEUC -0xBB5A 0xD323 # HANGUL SYLLABLE PHIEUPH-A-CHIEUCH -0xBB61 0xD324 # HANGUL SYLLABLE PHIEUPH-A-KHIEUKH -0xBB62 0xD326 # HANGUL SYLLABLE PHIEUPH-A-PHIEUPH -0xBB63 0xD327 # HANGUL SYLLABLE PHIEUPH-A-HIEUH -0xBB64 0xD32A # HANGUL SYLLABLE PHIEUPH-AE-SSANGKIYEOK -0xBB65 0xD32B # HANGUL SYLLABLE PHIEUPH-AE-KIYEOKSIOS -0xBB66 0xD32D # HANGUL SYLLABLE PHIEUPH-AE-NIEUNCIEUC -0xBB67 0xD32E # HANGUL SYLLABLE PHIEUPH-AE-NIEUNHIEUH -0xBB68 0xD32F # HANGUL SYLLABLE PHIEUPH-AE-TIKEUT -0xBB69 0xD331 # HANGUL SYLLABLE PHIEUPH-AE-RIEULKIYEOK -0xBB6A 0xD332 # HANGUL SYLLABLE PHIEUPH-AE-RIEULMIEUM -0xBB6B 0xD333 # HANGUL SYLLABLE PHIEUPH-AE-RIEULPIEUP -0xBB6C 0xD334 # HANGUL SYLLABLE PHIEUPH-AE-RIEULSIOS -0xBB6D 0xD335 # HANGUL SYLLABLE PHIEUPH-AE-RIEULTHIEUTH -0xBB6E 0xD336 # HANGUL SYLLABLE PHIEUPH-AE-RIEULPHIEUPH -0xBB6F 0xD337 # HANGUL SYLLABLE PHIEUPH-AE-RIEULHIEUH -0xBB70 0xD33A # HANGUL SYLLABLE PHIEUPH-AE-PIEUPSIOS -0xBB71 0xD33E # HANGUL SYLLABLE PHIEUPH-AE-CIEUC -0xBB72 0xD33F # HANGUL SYLLABLE PHIEUPH-AE-CHIEUCH -0xBB73 0xD340 # HANGUL SYLLABLE PHIEUPH-AE-KHIEUKH -0xBB74 0xD341 # HANGUL SYLLABLE PHIEUPH-AE-THIEUTH -0xBB75 0xD342 # HANGUL SYLLABLE PHIEUPH-AE-PHIEUPH -0xBB76 0xD343 # HANGUL SYLLABLE PHIEUPH-AE-HIEUH -0xBB77 0xD346 # HANGUL SYLLABLE PHIEUPH-YA-SSANGKIYEOK -0xBB78 0xD347 # HANGUL SYLLABLE PHIEUPH-YA-KIYEOKSIOS -0xBB79 0xD348 # HANGUL SYLLABLE PHIEUPH-YA-NIEUN -0xBB7A 0xD349 # HANGUL SYLLABLE PHIEUPH-YA-NIEUNCIEUC -0xBB81 0xD34A # HANGUL SYLLABLE PHIEUPH-YA-NIEUNHIEUH -0xBB82 0xD34B # HANGUL SYLLABLE PHIEUPH-YA-TIKEUT -0xBB83 0xD34C # HANGUL SYLLABLE PHIEUPH-YA-RIEUL -0xBB84 0xD34D # HANGUL SYLLABLE PHIEUPH-YA-RIEULKIYEOK -0xBB85 0xD34E # HANGUL SYLLABLE PHIEUPH-YA-RIEULMIEUM -0xBB86 0xD34F # HANGUL SYLLABLE PHIEUPH-YA-RIEULPIEUP -0xBB87 0xD350 # HANGUL SYLLABLE PHIEUPH-YA-RIEULSIOS -0xBB88 0xD351 # HANGUL SYLLABLE PHIEUPH-YA-RIEULTHIEUTH -0xBB89 0xD352 # HANGUL SYLLABLE PHIEUPH-YA-RIEULPHIEUPH -0xBB8A 0xD353 # HANGUL SYLLABLE PHIEUPH-YA-RIEULHIEUH -0xBB8B 0xD354 # HANGUL SYLLABLE PHIEUPH-YA-MIEUM -0xBB8C 0xD355 # HANGUL SYLLABLE PHIEUPH-YA-PIEUP -0xBB8D 0xD356 # HANGUL SYLLABLE PHIEUPH-YA-PIEUPSIOS -0xBB8E 0xD357 # HANGUL SYLLABLE PHIEUPH-YA-SIOS -0xBB8F 0xD358 # HANGUL SYLLABLE PHIEUPH-YA-SSANGSIOS -0xBB90 0xD359 # HANGUL SYLLABLE PHIEUPH-YA-IEUNG -0xBB91 0xD35A # HANGUL SYLLABLE PHIEUPH-YA-CIEUC -0xBB92 0xD35B # HANGUL SYLLABLE PHIEUPH-YA-CHIEUCH -0xBB93 0xD35C # HANGUL SYLLABLE PHIEUPH-YA-KHIEUKH -0xBB94 0xD35D # HANGUL SYLLABLE PHIEUPH-YA-THIEUTH -0xBB95 0xD35E # HANGUL SYLLABLE PHIEUPH-YA-PHIEUPH -0xBB96 0xD35F # HANGUL SYLLABLE PHIEUPH-YA-HIEUH -0xBB97 0xD360 # HANGUL SYLLABLE PHIEUPH-YAE -0xBB98 0xD361 # HANGUL SYLLABLE PHIEUPH-YAE-KIYEOK -0xBB99 0xD362 # HANGUL SYLLABLE PHIEUPH-YAE-SSANGKIYEOK -0xBB9A 0xD363 # HANGUL SYLLABLE PHIEUPH-YAE-KIYEOKSIOS -0xBB9B 0xD364 # HANGUL SYLLABLE PHIEUPH-YAE-NIEUN -0xBB9C 0xD365 # HANGUL SYLLABLE PHIEUPH-YAE-NIEUNCIEUC -0xBB9D 0xD366 # HANGUL SYLLABLE PHIEUPH-YAE-NIEUNHIEUH -0xBB9E 0xD367 # HANGUL SYLLABLE PHIEUPH-YAE-TIKEUT -0xBB9F 0xD368 # HANGUL SYLLABLE PHIEUPH-YAE-RIEUL -0xBBA0 0xD369 # HANGUL SYLLABLE PHIEUPH-YAE-RIEULKIYEOK -0xBBA1 0xBE68 # HANGUL SYLLABLE SSANGPIEUP-A-RIEUL -0xBBA2 0xBE6A # HANGUL SYLLABLE SSANGPIEUP-A-RIEULMIEUM -0xBBA3 0xBE70 # HANGUL SYLLABLE SSANGPIEUP-A-MIEUM -0xBBA4 0xBE71 # HANGUL SYLLABLE SSANGPIEUP-A-PIEUP -0xBBA5 0xBE73 # HANGUL SYLLABLE SSANGPIEUP-A-SIOS -0xBBA6 0xBE74 # HANGUL SYLLABLE SSANGPIEUP-A-SSANGSIOS -0xBBA7 0xBE75 # HANGUL SYLLABLE SSANGPIEUP-A-IEUNG -0xBBA8 0xBE7B # HANGUL SYLLABLE SSANGPIEUP-A-HIEUH -0xBBA9 0xBE7C # HANGUL SYLLABLE SSANGPIEUP-AE -0xBBAA 0xBE7D # HANGUL SYLLABLE SSANGPIEUP-AE-KIYEOK -0xBBAB 0xBE80 # HANGUL SYLLABLE SSANGPIEUP-AE-NIEUN -0xBBAC 0xBE84 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEUL -0xBBAD 0xBE8C # HANGUL SYLLABLE SSANGPIEUP-AE-MIEUM -0xBBAE 0xBE8D # HANGUL SYLLABLE SSANGPIEUP-AE-PIEUP -0xBBAF 0xBE8F # HANGUL SYLLABLE SSANGPIEUP-AE-SIOS -0xBBB0 0xBE90 # HANGUL SYLLABLE SSANGPIEUP-AE-SSANGSIOS -0xBBB1 0xBE91 # HANGUL SYLLABLE SSANGPIEUP-AE-IEUNG -0xBBB2 0xBE98 # HANGUL SYLLABLE SSANGPIEUP-YA -0xBBB3 0xBE99 # HANGUL SYLLABLE SSANGPIEUP-YA-KIYEOK -0xBBB4 0xBEA8 # HANGUL SYLLABLE SSANGPIEUP-YA-MIEUM -0xBBB5 0xBED0 # HANGUL SYLLABLE SSANGPIEUP-EO -0xBBB6 0xBED1 # HANGUL SYLLABLE SSANGPIEUP-EO-KIYEOK -0xBBB7 0xBED4 # HANGUL SYLLABLE SSANGPIEUP-EO-NIEUN -0xBBB8 0xBED7 # HANGUL SYLLABLE SSANGPIEUP-EO-TIKEUT -0xBBB9 0xBED8 # HANGUL SYLLABLE SSANGPIEUP-EO-RIEUL -0xBBBA 0xBEE0 # HANGUL SYLLABLE SSANGPIEUP-EO-MIEUM -0xBBBB 0xBEE3 # HANGUL SYLLABLE SSANGPIEUP-EO-SIOS -0xBBBC 0xBEE4 # HANGUL SYLLABLE SSANGPIEUP-EO-SSANGSIOS -0xBBBD 0xBEE5 # HANGUL SYLLABLE SSANGPIEUP-EO-IEUNG -0xBBBE 0xBEEC # HANGUL SYLLABLE SSANGPIEUP-E -0xBBBF 0xBF01 # HANGUL SYLLABLE SSANGPIEUP-E-IEUNG -0xBBC0 0xBF08 # HANGUL SYLLABLE SSANGPIEUP-YEO -0xBBC1 0xBF09 # HANGUL SYLLABLE SSANGPIEUP-YEO-KIYEOK -0xBBC2 0xBF18 # HANGUL SYLLABLE SSANGPIEUP-YEO-MIEUM -0xBBC3 0xBF19 # HANGUL SYLLABLE SSANGPIEUP-YEO-PIEUP -0xBBC4 0xBF1B # HANGUL SYLLABLE SSANGPIEUP-YEO-SIOS -0xBBC5 0xBF1C # HANGUL SYLLABLE SSANGPIEUP-YEO-SSANGSIOS -0xBBC6 0xBF1D # HANGUL SYLLABLE SSANGPIEUP-YEO-IEUNG -0xBBC7 0xBF40 # HANGUL SYLLABLE SSANGPIEUP-O -0xBBC8 0xBF41 # HANGUL SYLLABLE SSANGPIEUP-O-KIYEOK -0xBBC9 0xBF44 # HANGUL SYLLABLE SSANGPIEUP-O-NIEUN -0xBBCA 0xBF48 # HANGUL SYLLABLE SSANGPIEUP-O-RIEUL -0xBBCB 0xBF50 # HANGUL SYLLABLE SSANGPIEUP-O-MIEUM -0xBBCC 0xBF51 # HANGUL SYLLABLE SSANGPIEUP-O-PIEUP -0xBBCD 0xBF55 # HANGUL SYLLABLE SSANGPIEUP-O-IEUNG -0xBBCE 0xBF94 # HANGUL SYLLABLE SSANGPIEUP-OE -0xBBCF 0xBFB0 # HANGUL SYLLABLE SSANGPIEUP-YO -0xBBD0 0xBFC5 # HANGUL SYLLABLE SSANGPIEUP-YO-IEUNG -0xBBD1 0xBFCC # HANGUL SYLLABLE SSANGPIEUP-U -0xBBD2 0xBFCD # HANGUL SYLLABLE SSANGPIEUP-U-KIYEOK -0xBBD3 0xBFD0 # HANGUL SYLLABLE SSANGPIEUP-U-NIEUN -0xBBD4 0xBFD4 # HANGUL SYLLABLE SSANGPIEUP-U-RIEUL -0xBBD5 0xBFDC # HANGUL SYLLABLE SSANGPIEUP-U-MIEUM -0xBBD6 0xBFDF # HANGUL SYLLABLE SSANGPIEUP-U-SIOS -0xBBD7 0xBFE1 # HANGUL SYLLABLE SSANGPIEUP-U-IEUNG -0xBBD8 0xC03C # HANGUL SYLLABLE SSANGPIEUP-YU -0xBBD9 0xC051 # HANGUL SYLLABLE SSANGPIEUP-YU-IEUNG -0xBBDA 0xC058 # HANGUL SYLLABLE SSANGPIEUP-EU -0xBBDB 0xC05C # HANGUL SYLLABLE SSANGPIEUP-EU-NIEUN -0xBBDC 0xC060 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEUL -0xBBDD 0xC068 # HANGUL SYLLABLE SSANGPIEUP-EU-MIEUM -0xBBDE 0xC069 # HANGUL SYLLABLE SSANGPIEUP-EU-PIEUP -0xBBDF 0xC090 # HANGUL SYLLABLE SSANGPIEUP-I -0xBBE0 0xC091 # HANGUL SYLLABLE SSANGPIEUP-I-KIYEOK -0xBBE1 0xC094 # HANGUL SYLLABLE SSANGPIEUP-I-NIEUN -0xBBE2 0xC098 # HANGUL SYLLABLE SSANGPIEUP-I-RIEUL -0xBBE3 0xC0A0 # HANGUL SYLLABLE SSANGPIEUP-I-MIEUM -0xBBE4 0xC0A1 # HANGUL SYLLABLE SSANGPIEUP-I-PIEUP -0xBBE5 0xC0A3 # HANGUL SYLLABLE SSANGPIEUP-I-SIOS -0xBBE6 0xC0A5 # HANGUL SYLLABLE SSANGPIEUP-I-IEUNG -0xBBE7 0xC0AC # HANGUL SYLLABLE SIOS-A -0xBBE8 0xC0AD # HANGUL SYLLABLE SIOS-A-KIYEOK -0xBBE9 0xC0AF # HANGUL SYLLABLE SIOS-A-KIYEOKSIOS -0xBBEA 0xC0B0 # HANGUL SYLLABLE SIOS-A-NIEUN -0xBBEB 0xC0B3 # HANGUL SYLLABLE SIOS-A-TIKEUT -0xBBEC 0xC0B4 # HANGUL SYLLABLE SIOS-A-RIEUL -0xBBED 0xC0B5 # HANGUL SYLLABLE SIOS-A-RIEULKIYEOK -0xBBEE 0xC0B6 # HANGUL SYLLABLE SIOS-A-RIEULMIEUM -0xBBEF 0xC0BC # HANGUL SYLLABLE SIOS-A-MIEUM -0xBBF0 0xC0BD # HANGUL SYLLABLE SIOS-A-PIEUP -0xBBF1 0xC0BF # HANGUL SYLLABLE SIOS-A-SIOS -0xBBF2 0xC0C0 # HANGUL SYLLABLE SIOS-A-SSANGSIOS -0xBBF3 0xC0C1 # HANGUL SYLLABLE SIOS-A-IEUNG -0xBBF4 0xC0C5 # HANGUL SYLLABLE SIOS-A-THIEUTH -0xBBF5 0xC0C8 # HANGUL SYLLABLE SIOS-AE -0xBBF6 0xC0C9 # HANGUL SYLLABLE SIOS-AE-KIYEOK -0xBBF7 0xC0CC # HANGUL SYLLABLE SIOS-AE-NIEUN -0xBBF8 0xC0D0 # HANGUL SYLLABLE SIOS-AE-RIEUL -0xBBF9 0xC0D8 # HANGUL SYLLABLE SIOS-AE-MIEUM -0xBBFA 0xC0D9 # HANGUL SYLLABLE SIOS-AE-PIEUP -0xBBFB 0xC0DB # HANGUL SYLLABLE SIOS-AE-SIOS -0xBBFC 0xC0DC # HANGUL SYLLABLE SIOS-AE-SSANGSIOS -0xBBFD 0xC0DD # HANGUL SYLLABLE SIOS-AE-IEUNG -0xBBFE 0xC0E4 # HANGUL SYLLABLE SIOS-YA -0xBC41 0xD36A # HANGUL SYLLABLE PHIEUPH-YAE-RIEULMIEUM -0xBC42 0xD36B # HANGUL SYLLABLE PHIEUPH-YAE-RIEULPIEUP -0xBC43 0xD36C # HANGUL SYLLABLE PHIEUPH-YAE-RIEULSIOS -0xBC44 0xD36D # HANGUL SYLLABLE PHIEUPH-YAE-RIEULTHIEUTH -0xBC45 0xD36E # HANGUL SYLLABLE PHIEUPH-YAE-RIEULPHIEUPH -0xBC46 0xD36F # HANGUL SYLLABLE PHIEUPH-YAE-RIEULHIEUH -0xBC47 0xD370 # HANGUL SYLLABLE PHIEUPH-YAE-MIEUM -0xBC48 0xD371 # HANGUL SYLLABLE PHIEUPH-YAE-PIEUP -0xBC49 0xD372 # HANGUL SYLLABLE PHIEUPH-YAE-PIEUPSIOS -0xBC4A 0xD373 # HANGUL SYLLABLE PHIEUPH-YAE-SIOS -0xBC4B 0xD374 # HANGUL SYLLABLE PHIEUPH-YAE-SSANGSIOS -0xBC4C 0xD375 # HANGUL SYLLABLE PHIEUPH-YAE-IEUNG -0xBC4D 0xD376 # HANGUL SYLLABLE PHIEUPH-YAE-CIEUC -0xBC4E 0xD377 # HANGUL SYLLABLE PHIEUPH-YAE-CHIEUCH -0xBC4F 0xD378 # HANGUL SYLLABLE PHIEUPH-YAE-KHIEUKH -0xBC50 0xD379 # HANGUL SYLLABLE PHIEUPH-YAE-THIEUTH -0xBC51 0xD37A # HANGUL SYLLABLE PHIEUPH-YAE-PHIEUPH -0xBC52 0xD37B # HANGUL SYLLABLE PHIEUPH-YAE-HIEUH -0xBC53 0xD37E # HANGUL SYLLABLE PHIEUPH-EO-SSANGKIYEOK -0xBC54 0xD37F # HANGUL SYLLABLE PHIEUPH-EO-KIYEOKSIOS -0xBC55 0xD381 # HANGUL SYLLABLE PHIEUPH-EO-NIEUNCIEUC -0xBC56 0xD382 # HANGUL SYLLABLE PHIEUPH-EO-NIEUNHIEUH -0xBC57 0xD383 # HANGUL SYLLABLE PHIEUPH-EO-TIKEUT -0xBC58 0xD385 # HANGUL SYLLABLE PHIEUPH-EO-RIEULKIYEOK -0xBC59 0xD386 # HANGUL SYLLABLE PHIEUPH-EO-RIEULMIEUM -0xBC5A 0xD387 # HANGUL SYLLABLE PHIEUPH-EO-RIEULPIEUP -0xBC61 0xD388 # HANGUL SYLLABLE PHIEUPH-EO-RIEULSIOS -0xBC62 0xD389 # HANGUL SYLLABLE PHIEUPH-EO-RIEULTHIEUTH -0xBC63 0xD38A # HANGUL SYLLABLE PHIEUPH-EO-RIEULPHIEUPH -0xBC64 0xD38B # HANGUL SYLLABLE PHIEUPH-EO-RIEULHIEUH -0xBC65 0xD38E # HANGUL SYLLABLE PHIEUPH-EO-PIEUPSIOS -0xBC66 0xD392 # HANGUL SYLLABLE PHIEUPH-EO-CIEUC -0xBC67 0xD393 # HANGUL SYLLABLE PHIEUPH-EO-CHIEUCH -0xBC68 0xD394 # HANGUL SYLLABLE PHIEUPH-EO-KHIEUKH -0xBC69 0xD395 # HANGUL SYLLABLE PHIEUPH-EO-THIEUTH -0xBC6A 0xD396 # HANGUL SYLLABLE PHIEUPH-EO-PHIEUPH -0xBC6B 0xD397 # HANGUL SYLLABLE PHIEUPH-EO-HIEUH -0xBC6C 0xD39A # HANGUL SYLLABLE PHIEUPH-E-SSANGKIYEOK -0xBC6D 0xD39B # HANGUL SYLLABLE PHIEUPH-E-KIYEOKSIOS -0xBC6E 0xD39D # HANGUL SYLLABLE PHIEUPH-E-NIEUNCIEUC -0xBC6F 0xD39E # HANGUL SYLLABLE PHIEUPH-E-NIEUNHIEUH -0xBC70 0xD39F # HANGUL SYLLABLE PHIEUPH-E-TIKEUT -0xBC71 0xD3A1 # HANGUL SYLLABLE PHIEUPH-E-RIEULKIYEOK -0xBC72 0xD3A2 # HANGUL SYLLABLE PHIEUPH-E-RIEULMIEUM -0xBC73 0xD3A3 # HANGUL SYLLABLE PHIEUPH-E-RIEULPIEUP -0xBC74 0xD3A4 # HANGUL SYLLABLE PHIEUPH-E-RIEULSIOS -0xBC75 0xD3A5 # HANGUL SYLLABLE PHIEUPH-E-RIEULTHIEUTH -0xBC76 0xD3A6 # HANGUL SYLLABLE PHIEUPH-E-RIEULPHIEUPH -0xBC77 0xD3A7 # HANGUL SYLLABLE PHIEUPH-E-RIEULHIEUH -0xBC78 0xD3AA # HANGUL SYLLABLE PHIEUPH-E-PIEUPSIOS -0xBC79 0xD3AC # HANGUL SYLLABLE PHIEUPH-E-SSANGSIOS -0xBC7A 0xD3AE # HANGUL SYLLABLE PHIEUPH-E-CIEUC -0xBC81 0xD3AF # HANGUL SYLLABLE PHIEUPH-E-CHIEUCH -0xBC82 0xD3B0 # HANGUL SYLLABLE PHIEUPH-E-KHIEUKH -0xBC83 0xD3B1 # HANGUL SYLLABLE PHIEUPH-E-THIEUTH -0xBC84 0xD3B2 # HANGUL SYLLABLE PHIEUPH-E-PHIEUPH -0xBC85 0xD3B3 # HANGUL SYLLABLE PHIEUPH-E-HIEUH -0xBC86 0xD3B5 # HANGUL SYLLABLE PHIEUPH-YEO-KIYEOK -0xBC87 0xD3B6 # HANGUL SYLLABLE PHIEUPH-YEO-SSANGKIYEOK -0xBC88 0xD3B7 # HANGUL SYLLABLE PHIEUPH-YEO-KIYEOKSIOS -0xBC89 0xD3B9 # HANGUL SYLLABLE PHIEUPH-YEO-NIEUNCIEUC -0xBC8A 0xD3BA # HANGUL SYLLABLE PHIEUPH-YEO-NIEUNHIEUH -0xBC8B 0xD3BB # HANGUL SYLLABLE PHIEUPH-YEO-TIKEUT -0xBC8C 0xD3BD # HANGUL SYLLABLE PHIEUPH-YEO-RIEULKIYEOK -0xBC8D 0xD3BE # HANGUL SYLLABLE PHIEUPH-YEO-RIEULMIEUM -0xBC8E 0xD3BF # HANGUL SYLLABLE PHIEUPH-YEO-RIEULPIEUP -0xBC8F 0xD3C0 # HANGUL SYLLABLE PHIEUPH-YEO-RIEULSIOS -0xBC90 0xD3C1 # HANGUL SYLLABLE PHIEUPH-YEO-RIEULTHIEUTH -0xBC91 0xD3C2 # HANGUL SYLLABLE PHIEUPH-YEO-RIEULPHIEUPH -0xBC92 0xD3C3 # HANGUL SYLLABLE PHIEUPH-YEO-RIEULHIEUH -0xBC93 0xD3C6 # HANGUL SYLLABLE PHIEUPH-YEO-PIEUPSIOS -0xBC94 0xD3C7 # HANGUL SYLLABLE PHIEUPH-YEO-SIOS -0xBC95 0xD3CA # HANGUL SYLLABLE PHIEUPH-YEO-CIEUC -0xBC96 0xD3CB # HANGUL SYLLABLE PHIEUPH-YEO-CHIEUCH -0xBC97 0xD3CC # HANGUL SYLLABLE PHIEUPH-YEO-KHIEUKH -0xBC98 0xD3CD # HANGUL SYLLABLE PHIEUPH-YEO-THIEUTH -0xBC99 0xD3CE # HANGUL SYLLABLE PHIEUPH-YEO-PHIEUPH -0xBC9A 0xD3CF # HANGUL SYLLABLE PHIEUPH-YEO-HIEUH -0xBC9B 0xD3D1 # HANGUL SYLLABLE PHIEUPH-YE-KIYEOK -0xBC9C 0xD3D2 # HANGUL SYLLABLE PHIEUPH-YE-SSANGKIYEOK -0xBC9D 0xD3D3 # HANGUL SYLLABLE PHIEUPH-YE-KIYEOKSIOS -0xBC9E 0xD3D4 # HANGUL SYLLABLE PHIEUPH-YE-NIEUN -0xBC9F 0xD3D5 # HANGUL SYLLABLE PHIEUPH-YE-NIEUNCIEUC -0xBCA0 0xD3D6 # HANGUL SYLLABLE PHIEUPH-YE-NIEUNHIEUH -0xBCA1 0xC0E5 # HANGUL SYLLABLE SIOS-YA-KIYEOK -0xBCA2 0xC0E8 # HANGUL SYLLABLE SIOS-YA-NIEUN -0xBCA3 0xC0EC # HANGUL SYLLABLE SIOS-YA-RIEUL -0xBCA4 0xC0F4 # HANGUL SYLLABLE SIOS-YA-MIEUM -0xBCA5 0xC0F5 # HANGUL SYLLABLE SIOS-YA-PIEUP -0xBCA6 0xC0F7 # HANGUL SYLLABLE SIOS-YA-SIOS -0xBCA7 0xC0F9 # HANGUL SYLLABLE SIOS-YA-IEUNG -0xBCA8 0xC100 # HANGUL SYLLABLE SIOS-YAE -0xBCA9 0xC104 # HANGUL SYLLABLE SIOS-YAE-NIEUN -0xBCAA 0xC108 # HANGUL SYLLABLE SIOS-YAE-RIEUL -0xBCAB 0xC110 # HANGUL SYLLABLE SIOS-YAE-MIEUM -0xBCAC 0xC115 # HANGUL SYLLABLE SIOS-YAE-IEUNG -0xBCAD 0xC11C # HANGUL SYLLABLE SIOS-EO -0xBCAE 0xC11D # HANGUL SYLLABLE SIOS-EO-KIYEOK -0xBCAF 0xC11E # HANGUL SYLLABLE SIOS-EO-SSANGKIYEOK -0xBCB0 0xC11F # HANGUL SYLLABLE SIOS-EO-KIYEOKSIOS -0xBCB1 0xC120 # HANGUL SYLLABLE SIOS-EO-NIEUN -0xBCB2 0xC123 # HANGUL SYLLABLE SIOS-EO-TIKEUT -0xBCB3 0xC124 # HANGUL SYLLABLE SIOS-EO-RIEUL -0xBCB4 0xC126 # HANGUL SYLLABLE SIOS-EO-RIEULMIEUM -0xBCB5 0xC127 # HANGUL SYLLABLE SIOS-EO-RIEULPIEUP -0xBCB6 0xC12C # HANGUL SYLLABLE SIOS-EO-MIEUM -0xBCB7 0xC12D # HANGUL SYLLABLE SIOS-EO-PIEUP -0xBCB8 0xC12F # HANGUL SYLLABLE SIOS-EO-SIOS -0xBCB9 0xC130 # HANGUL SYLLABLE SIOS-EO-SSANGSIOS -0xBCBA 0xC131 # HANGUL SYLLABLE SIOS-EO-IEUNG -0xBCBB 0xC136 # HANGUL SYLLABLE SIOS-EO-PHIEUPH -0xBCBC 0xC138 # HANGUL SYLLABLE SIOS-E -0xBCBD 0xC139 # HANGUL SYLLABLE SIOS-E-KIYEOK -0xBCBE 0xC13C # HANGUL SYLLABLE SIOS-E-NIEUN -0xBCBF 0xC140 # HANGUL SYLLABLE SIOS-E-RIEUL -0xBCC0 0xC148 # HANGUL SYLLABLE SIOS-E-MIEUM -0xBCC1 0xC149 # HANGUL SYLLABLE SIOS-E-PIEUP -0xBCC2 0xC14B # HANGUL SYLLABLE SIOS-E-SIOS -0xBCC3 0xC14C # HANGUL SYLLABLE SIOS-E-SSANGSIOS -0xBCC4 0xC14D # HANGUL SYLLABLE SIOS-E-IEUNG -0xBCC5 0xC154 # HANGUL SYLLABLE SIOS-YEO -0xBCC6 0xC155 # HANGUL SYLLABLE SIOS-YEO-KIYEOK -0xBCC7 0xC158 # HANGUL SYLLABLE SIOS-YEO-NIEUN -0xBCC8 0xC15C # HANGUL SYLLABLE SIOS-YEO-RIEUL -0xBCC9 0xC164 # HANGUL SYLLABLE SIOS-YEO-MIEUM -0xBCCA 0xC165 # HANGUL SYLLABLE SIOS-YEO-PIEUP -0xBCCB 0xC167 # HANGUL SYLLABLE SIOS-YEO-SIOS -0xBCCC 0xC168 # HANGUL SYLLABLE SIOS-YEO-SSANGSIOS -0xBCCD 0xC169 # HANGUL SYLLABLE SIOS-YEO-IEUNG -0xBCCE 0xC170 # HANGUL SYLLABLE SIOS-YE -0xBCCF 0xC174 # HANGUL SYLLABLE SIOS-YE-NIEUN -0xBCD0 0xC178 # HANGUL SYLLABLE SIOS-YE-RIEUL -0xBCD1 0xC185 # HANGUL SYLLABLE SIOS-YE-IEUNG -0xBCD2 0xC18C # HANGUL SYLLABLE SIOS-O -0xBCD3 0xC18D # HANGUL SYLLABLE SIOS-O-KIYEOK -0xBCD4 0xC18E # HANGUL SYLLABLE SIOS-O-SSANGKIYEOK -0xBCD5 0xC190 # HANGUL SYLLABLE SIOS-O-NIEUN -0xBCD6 0xC194 # HANGUL SYLLABLE SIOS-O-RIEUL -0xBCD7 0xC196 # HANGUL SYLLABLE SIOS-O-RIEULMIEUM -0xBCD8 0xC19C # HANGUL SYLLABLE SIOS-O-MIEUM -0xBCD9 0xC19D # HANGUL SYLLABLE SIOS-O-PIEUP -0xBCDA 0xC19F # HANGUL SYLLABLE SIOS-O-SIOS -0xBCDB 0xC1A1 # HANGUL SYLLABLE SIOS-O-IEUNG -0xBCDC 0xC1A5 # HANGUL SYLLABLE SIOS-O-THIEUTH -0xBCDD 0xC1A8 # HANGUL SYLLABLE SIOS-WA -0xBCDE 0xC1A9 # HANGUL SYLLABLE SIOS-WA-KIYEOK -0xBCDF 0xC1AC # HANGUL SYLLABLE SIOS-WA-NIEUN -0xBCE0 0xC1B0 # HANGUL SYLLABLE SIOS-WA-RIEUL -0xBCE1 0xC1BD # HANGUL SYLLABLE SIOS-WA-IEUNG -0xBCE2 0xC1C4 # HANGUL SYLLABLE SIOS-WAE -0xBCE3 0xC1C8 # HANGUL SYLLABLE SIOS-WAE-NIEUN -0xBCE4 0xC1CC # HANGUL SYLLABLE SIOS-WAE-RIEUL -0xBCE5 0xC1D4 # HANGUL SYLLABLE SIOS-WAE-MIEUM -0xBCE6 0xC1D7 # HANGUL SYLLABLE SIOS-WAE-SIOS -0xBCE7 0xC1D8 # HANGUL SYLLABLE SIOS-WAE-SSANGSIOS -0xBCE8 0xC1E0 # HANGUL SYLLABLE SIOS-OE -0xBCE9 0xC1E4 # HANGUL SYLLABLE SIOS-OE-NIEUN -0xBCEA 0xC1E8 # HANGUL SYLLABLE SIOS-OE-RIEUL -0xBCEB 0xC1F0 # HANGUL SYLLABLE SIOS-OE-MIEUM -0xBCEC 0xC1F1 # HANGUL SYLLABLE SIOS-OE-PIEUP -0xBCED 0xC1F3 # HANGUL SYLLABLE SIOS-OE-SIOS -0xBCEE 0xC1FC # HANGUL SYLLABLE SIOS-YO -0xBCEF 0xC1FD # HANGUL SYLLABLE SIOS-YO-KIYEOK -0xBCF0 0xC200 # HANGUL SYLLABLE SIOS-YO-NIEUN -0xBCF1 0xC204 # HANGUL SYLLABLE SIOS-YO-RIEUL -0xBCF2 0xC20C # HANGUL SYLLABLE SIOS-YO-MIEUM -0xBCF3 0xC20D # HANGUL SYLLABLE SIOS-YO-PIEUP -0xBCF4 0xC20F # HANGUL SYLLABLE SIOS-YO-SIOS -0xBCF5 0xC211 # HANGUL SYLLABLE SIOS-YO-IEUNG -0xBCF6 0xC218 # HANGUL SYLLABLE SIOS-U -0xBCF7 0xC219 # HANGUL SYLLABLE SIOS-U-KIYEOK -0xBCF8 0xC21C # HANGUL SYLLABLE SIOS-U-NIEUN -0xBCF9 0xC21F # HANGUL SYLLABLE SIOS-U-TIKEUT -0xBCFA 0xC220 # HANGUL SYLLABLE SIOS-U-RIEUL -0xBCFB 0xC228 # HANGUL SYLLABLE SIOS-U-MIEUM -0xBCFC 0xC229 # HANGUL SYLLABLE SIOS-U-PIEUP -0xBCFD 0xC22B # HANGUL SYLLABLE SIOS-U-SIOS -0xBCFE 0xC22D # HANGUL SYLLABLE SIOS-U-IEUNG -0xBD41 0xD3D7 # HANGUL SYLLABLE PHIEUPH-YE-TIKEUT -0xBD42 0xD3D9 # HANGUL SYLLABLE PHIEUPH-YE-RIEULKIYEOK -0xBD43 0xD3DA # HANGUL SYLLABLE PHIEUPH-YE-RIEULMIEUM -0xBD44 0xD3DB # HANGUL SYLLABLE PHIEUPH-YE-RIEULPIEUP -0xBD45 0xD3DC # HANGUL SYLLABLE PHIEUPH-YE-RIEULSIOS -0xBD46 0xD3DD # HANGUL SYLLABLE PHIEUPH-YE-RIEULTHIEUTH -0xBD47 0xD3DE # HANGUL SYLLABLE PHIEUPH-YE-RIEULPHIEUPH -0xBD48 0xD3DF # HANGUL SYLLABLE PHIEUPH-YE-RIEULHIEUH -0xBD49 0xD3E0 # HANGUL SYLLABLE PHIEUPH-YE-MIEUM -0xBD4A 0xD3E2 # HANGUL SYLLABLE PHIEUPH-YE-PIEUPSIOS -0xBD4B 0xD3E4 # HANGUL SYLLABLE PHIEUPH-YE-SSANGSIOS -0xBD4C 0xD3E5 # HANGUL SYLLABLE PHIEUPH-YE-IEUNG -0xBD4D 0xD3E6 # HANGUL SYLLABLE PHIEUPH-YE-CIEUC -0xBD4E 0xD3E7 # HANGUL SYLLABLE PHIEUPH-YE-CHIEUCH -0xBD4F 0xD3E8 # HANGUL SYLLABLE PHIEUPH-YE-KHIEUKH -0xBD50 0xD3E9 # HANGUL SYLLABLE PHIEUPH-YE-THIEUTH -0xBD51 0xD3EA # HANGUL SYLLABLE PHIEUPH-YE-PHIEUPH -0xBD52 0xD3EB # HANGUL SYLLABLE PHIEUPH-YE-HIEUH -0xBD53 0xD3EE # HANGUL SYLLABLE PHIEUPH-O-SSANGKIYEOK -0xBD54 0xD3EF # HANGUL SYLLABLE PHIEUPH-O-KIYEOKSIOS -0xBD55 0xD3F1 # HANGUL SYLLABLE PHIEUPH-O-NIEUNCIEUC -0xBD56 0xD3F2 # HANGUL SYLLABLE PHIEUPH-O-NIEUNHIEUH -0xBD57 0xD3F3 # HANGUL SYLLABLE PHIEUPH-O-TIKEUT -0xBD58 0xD3F5 # HANGUL SYLLABLE PHIEUPH-O-RIEULKIYEOK -0xBD59 0xD3F6 # HANGUL SYLLABLE PHIEUPH-O-RIEULMIEUM -0xBD5A 0xD3F7 # HANGUL SYLLABLE PHIEUPH-O-RIEULPIEUP -0xBD61 0xD3F8 # HANGUL SYLLABLE PHIEUPH-O-RIEULSIOS -0xBD62 0xD3F9 # HANGUL SYLLABLE PHIEUPH-O-RIEULTHIEUTH -0xBD63 0xD3FA # HANGUL SYLLABLE PHIEUPH-O-RIEULPHIEUPH -0xBD64 0xD3FB # HANGUL SYLLABLE PHIEUPH-O-RIEULHIEUH -0xBD65 0xD3FE # HANGUL SYLLABLE PHIEUPH-O-PIEUPSIOS -0xBD66 0xD400 # HANGUL SYLLABLE PHIEUPH-O-SSANGSIOS -0xBD67 0xD402 # HANGUL SYLLABLE PHIEUPH-O-CIEUC -0xBD68 0xD403 # HANGUL SYLLABLE PHIEUPH-O-CHIEUCH -0xBD69 0xD404 # HANGUL SYLLABLE PHIEUPH-O-KHIEUKH -0xBD6A 0xD405 # HANGUL SYLLABLE PHIEUPH-O-THIEUTH -0xBD6B 0xD406 # HANGUL SYLLABLE PHIEUPH-O-PHIEUPH -0xBD6C 0xD407 # HANGUL SYLLABLE PHIEUPH-O-HIEUH -0xBD6D 0xD409 # HANGUL SYLLABLE PHIEUPH-WA-KIYEOK -0xBD6E 0xD40A # HANGUL SYLLABLE PHIEUPH-WA-SSANGKIYEOK -0xBD6F 0xD40B # HANGUL SYLLABLE PHIEUPH-WA-KIYEOKSIOS -0xBD70 0xD40C # HANGUL SYLLABLE PHIEUPH-WA-NIEUN -0xBD71 0xD40D # HANGUL SYLLABLE PHIEUPH-WA-NIEUNCIEUC -0xBD72 0xD40E # HANGUL SYLLABLE PHIEUPH-WA-NIEUNHIEUH -0xBD73 0xD40F # HANGUL SYLLABLE PHIEUPH-WA-TIKEUT -0xBD74 0xD410 # HANGUL SYLLABLE PHIEUPH-WA-RIEUL -0xBD75 0xD411 # HANGUL SYLLABLE PHIEUPH-WA-RIEULKIYEOK -0xBD76 0xD412 # HANGUL SYLLABLE PHIEUPH-WA-RIEULMIEUM -0xBD77 0xD413 # HANGUL SYLLABLE PHIEUPH-WA-RIEULPIEUP -0xBD78 0xD414 # HANGUL SYLLABLE PHIEUPH-WA-RIEULSIOS -0xBD79 0xD415 # HANGUL SYLLABLE PHIEUPH-WA-RIEULTHIEUTH -0xBD7A 0xD416 # HANGUL SYLLABLE PHIEUPH-WA-RIEULPHIEUPH -0xBD81 0xD417 # HANGUL SYLLABLE PHIEUPH-WA-RIEULHIEUH -0xBD82 0xD418 # HANGUL SYLLABLE PHIEUPH-WA-MIEUM -0xBD83 0xD419 # HANGUL SYLLABLE PHIEUPH-WA-PIEUP -0xBD84 0xD41A # HANGUL SYLLABLE PHIEUPH-WA-PIEUPSIOS -0xBD85 0xD41B # HANGUL SYLLABLE PHIEUPH-WA-SIOS -0xBD86 0xD41C # HANGUL SYLLABLE PHIEUPH-WA-SSANGSIOS -0xBD87 0xD41E # HANGUL SYLLABLE PHIEUPH-WA-CIEUC -0xBD88 0xD41F # HANGUL SYLLABLE PHIEUPH-WA-CHIEUCH -0xBD89 0xD420 # HANGUL SYLLABLE PHIEUPH-WA-KHIEUKH -0xBD8A 0xD421 # HANGUL SYLLABLE PHIEUPH-WA-THIEUTH -0xBD8B 0xD422 # HANGUL SYLLABLE PHIEUPH-WA-PHIEUPH -0xBD8C 0xD423 # HANGUL SYLLABLE PHIEUPH-WA-HIEUH -0xBD8D 0xD424 # HANGUL SYLLABLE PHIEUPH-WAE -0xBD8E 0xD425 # HANGUL SYLLABLE PHIEUPH-WAE-KIYEOK -0xBD8F 0xD426 # HANGUL SYLLABLE PHIEUPH-WAE-SSANGKIYEOK -0xBD90 0xD427 # HANGUL SYLLABLE PHIEUPH-WAE-KIYEOKSIOS -0xBD91 0xD428 # HANGUL SYLLABLE PHIEUPH-WAE-NIEUN -0xBD92 0xD429 # HANGUL SYLLABLE PHIEUPH-WAE-NIEUNCIEUC -0xBD93 0xD42A # HANGUL SYLLABLE PHIEUPH-WAE-NIEUNHIEUH -0xBD94 0xD42B # HANGUL SYLLABLE PHIEUPH-WAE-TIKEUT -0xBD95 0xD42C # HANGUL SYLLABLE PHIEUPH-WAE-RIEUL -0xBD96 0xD42D # HANGUL SYLLABLE PHIEUPH-WAE-RIEULKIYEOK -0xBD97 0xD42E # HANGUL SYLLABLE PHIEUPH-WAE-RIEULMIEUM -0xBD98 0xD42F # HANGUL SYLLABLE PHIEUPH-WAE-RIEULPIEUP -0xBD99 0xD430 # HANGUL SYLLABLE PHIEUPH-WAE-RIEULSIOS -0xBD9A 0xD431 # HANGUL SYLLABLE PHIEUPH-WAE-RIEULTHIEUTH -0xBD9B 0xD432 # HANGUL SYLLABLE PHIEUPH-WAE-RIEULPHIEUPH -0xBD9C 0xD433 # HANGUL SYLLABLE PHIEUPH-WAE-RIEULHIEUH -0xBD9D 0xD434 # HANGUL SYLLABLE PHIEUPH-WAE-MIEUM -0xBD9E 0xD435 # HANGUL SYLLABLE PHIEUPH-WAE-PIEUP -0xBD9F 0xD436 # HANGUL SYLLABLE PHIEUPH-WAE-PIEUPSIOS -0xBDA0 0xD437 # HANGUL SYLLABLE PHIEUPH-WAE-SIOS -0xBDA1 0xC22F # HANGUL SYLLABLE SIOS-U-CHIEUCH -0xBDA2 0xC231 # HANGUL SYLLABLE SIOS-U-THIEUTH -0xBDA3 0xC232 # HANGUL SYLLABLE SIOS-U-PHIEUPH -0xBDA4 0xC234 # HANGUL SYLLABLE SIOS-WEO -0xBDA5 0xC248 # HANGUL SYLLABLE SIOS-WEO-SSANGSIOS -0xBDA6 0xC250 # HANGUL SYLLABLE SIOS-WE -0xBDA7 0xC251 # HANGUL SYLLABLE SIOS-WE-KIYEOK -0xBDA8 0xC254 # HANGUL SYLLABLE SIOS-WE-NIEUN -0xBDA9 0xC258 # HANGUL SYLLABLE SIOS-WE-RIEUL -0xBDAA 0xC260 # HANGUL SYLLABLE SIOS-WE-MIEUM -0xBDAB 0xC265 # HANGUL SYLLABLE SIOS-WE-IEUNG -0xBDAC 0xC26C # HANGUL SYLLABLE SIOS-WI -0xBDAD 0xC26D # HANGUL SYLLABLE SIOS-WI-KIYEOK -0xBDAE 0xC270 # HANGUL SYLLABLE SIOS-WI-NIEUN -0xBDAF 0xC274 # HANGUL SYLLABLE SIOS-WI-RIEUL -0xBDB0 0xC27C # HANGUL SYLLABLE SIOS-WI-MIEUM -0xBDB1 0xC27D # HANGUL SYLLABLE SIOS-WI-PIEUP -0xBDB2 0xC27F # HANGUL SYLLABLE SIOS-WI-SIOS -0xBDB3 0xC281 # HANGUL SYLLABLE SIOS-WI-IEUNG -0xBDB4 0xC288 # HANGUL SYLLABLE SIOS-YU -0xBDB5 0xC289 # HANGUL SYLLABLE SIOS-YU-KIYEOK -0xBDB6 0xC290 # HANGUL SYLLABLE SIOS-YU-RIEUL -0xBDB7 0xC298 # HANGUL SYLLABLE SIOS-YU-MIEUM -0xBDB8 0xC29B # HANGUL SYLLABLE SIOS-YU-SIOS -0xBDB9 0xC29D # HANGUL SYLLABLE SIOS-YU-IEUNG -0xBDBA 0xC2A4 # HANGUL SYLLABLE SIOS-EU -0xBDBB 0xC2A5 # HANGUL SYLLABLE SIOS-EU-KIYEOK -0xBDBC 0xC2A8 # HANGUL SYLLABLE SIOS-EU-NIEUN -0xBDBD 0xC2AC # HANGUL SYLLABLE SIOS-EU-RIEUL -0xBDBE 0xC2AD # HANGUL SYLLABLE SIOS-EU-RIEULKIYEOK -0xBDBF 0xC2B4 # HANGUL SYLLABLE SIOS-EU-MIEUM -0xBDC0 0xC2B5 # HANGUL SYLLABLE SIOS-EU-PIEUP -0xBDC1 0xC2B7 # HANGUL SYLLABLE SIOS-EU-SIOS -0xBDC2 0xC2B9 # HANGUL SYLLABLE SIOS-EU-IEUNG -0xBDC3 0xC2DC # HANGUL SYLLABLE SIOS-I -0xBDC4 0xC2DD # HANGUL SYLLABLE SIOS-I-KIYEOK -0xBDC5 0xC2E0 # HANGUL SYLLABLE SIOS-I-NIEUN -0xBDC6 0xC2E3 # HANGUL SYLLABLE SIOS-I-TIKEUT -0xBDC7 0xC2E4 # HANGUL SYLLABLE SIOS-I-RIEUL -0xBDC8 0xC2EB # HANGUL SYLLABLE SIOS-I-RIEULHIEUH -0xBDC9 0xC2EC # HANGUL SYLLABLE SIOS-I-MIEUM -0xBDCA 0xC2ED # HANGUL SYLLABLE SIOS-I-PIEUP -0xBDCB 0xC2EF # HANGUL SYLLABLE SIOS-I-SIOS -0xBDCC 0xC2F1 # HANGUL SYLLABLE SIOS-I-IEUNG -0xBDCD 0xC2F6 # HANGUL SYLLABLE SIOS-I-PHIEUPH -0xBDCE 0xC2F8 # HANGUL SYLLABLE SSANGSIOS-A -0xBDCF 0xC2F9 # HANGUL SYLLABLE SSANGSIOS-A-KIYEOK -0xBDD0 0xC2FB # HANGUL SYLLABLE SSANGSIOS-A-KIYEOKSIOS -0xBDD1 0xC2FC # HANGUL SYLLABLE SSANGSIOS-A-NIEUN -0xBDD2 0xC300 # HANGUL SYLLABLE SSANGSIOS-A-RIEUL -0xBDD3 0xC308 # HANGUL SYLLABLE SSANGSIOS-A-MIEUM -0xBDD4 0xC309 # HANGUL SYLLABLE SSANGSIOS-A-PIEUP -0xBDD5 0xC30C # HANGUL SYLLABLE SSANGSIOS-A-SSANGSIOS -0xBDD6 0xC30D # HANGUL SYLLABLE SSANGSIOS-A-IEUNG -0xBDD7 0xC313 # HANGUL SYLLABLE SSANGSIOS-A-HIEUH -0xBDD8 0xC314 # HANGUL SYLLABLE SSANGSIOS-AE -0xBDD9 0xC315 # HANGUL SYLLABLE SSANGSIOS-AE-KIYEOK -0xBDDA 0xC318 # HANGUL SYLLABLE SSANGSIOS-AE-NIEUN -0xBDDB 0xC31C # HANGUL SYLLABLE SSANGSIOS-AE-RIEUL -0xBDDC 0xC324 # HANGUL SYLLABLE SSANGSIOS-AE-MIEUM -0xBDDD 0xC325 # HANGUL SYLLABLE SSANGSIOS-AE-PIEUP -0xBDDE 0xC328 # HANGUL SYLLABLE SSANGSIOS-AE-SSANGSIOS -0xBDDF 0xC329 # HANGUL SYLLABLE SSANGSIOS-AE-IEUNG -0xBDE0 0xC345 # HANGUL SYLLABLE SSANGSIOS-YA-IEUNG -0xBDE1 0xC368 # HANGUL SYLLABLE SSANGSIOS-EO -0xBDE2 0xC369 # HANGUL SYLLABLE SSANGSIOS-EO-KIYEOK -0xBDE3 0xC36C # HANGUL SYLLABLE SSANGSIOS-EO-NIEUN -0xBDE4 0xC370 # HANGUL SYLLABLE SSANGSIOS-EO-RIEUL -0xBDE5 0xC372 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULMIEUM -0xBDE6 0xC378 # HANGUL SYLLABLE SSANGSIOS-EO-MIEUM -0xBDE7 0xC379 # HANGUL SYLLABLE SSANGSIOS-EO-PIEUP -0xBDE8 0xC37C # HANGUL SYLLABLE SSANGSIOS-EO-SSANGSIOS -0xBDE9 0xC37D # HANGUL SYLLABLE SSANGSIOS-EO-IEUNG -0xBDEA 0xC384 # HANGUL SYLLABLE SSANGSIOS-E -0xBDEB 0xC388 # HANGUL SYLLABLE SSANGSIOS-E-NIEUN -0xBDEC 0xC38C # HANGUL SYLLABLE SSANGSIOS-E-RIEUL -0xBDED 0xC3C0 # HANGUL SYLLABLE SSANGSIOS-YE-NIEUN -0xBDEE 0xC3D8 # HANGUL SYLLABLE SSANGSIOS-O -0xBDEF 0xC3D9 # HANGUL SYLLABLE SSANGSIOS-O-KIYEOK -0xBDF0 0xC3DC # HANGUL SYLLABLE SSANGSIOS-O-NIEUN -0xBDF1 0xC3DF # HANGUL SYLLABLE SSANGSIOS-O-TIKEUT -0xBDF2 0xC3E0 # HANGUL SYLLABLE SSANGSIOS-O-RIEUL -0xBDF3 0xC3E2 # HANGUL SYLLABLE SSANGSIOS-O-RIEULMIEUM -0xBDF4 0xC3E8 # HANGUL SYLLABLE SSANGSIOS-O-MIEUM -0xBDF5 0xC3E9 # HANGUL SYLLABLE SSANGSIOS-O-PIEUP -0xBDF6 0xC3ED # HANGUL SYLLABLE SSANGSIOS-O-IEUNG -0xBDF7 0xC3F4 # HANGUL SYLLABLE SSANGSIOS-WA -0xBDF8 0xC3F5 # HANGUL SYLLABLE SSANGSIOS-WA-KIYEOK -0xBDF9 0xC3F8 # HANGUL SYLLABLE SSANGSIOS-WA-NIEUN -0xBDFA 0xC408 # HANGUL SYLLABLE SSANGSIOS-WA-SSANGSIOS -0xBDFB 0xC410 # HANGUL SYLLABLE SSANGSIOS-WAE -0xBDFC 0xC424 # HANGUL SYLLABLE SSANGSIOS-WAE-SSANGSIOS -0xBDFD 0xC42C # HANGUL SYLLABLE SSANGSIOS-OE -0xBDFE 0xC430 # HANGUL SYLLABLE SSANGSIOS-OE-NIEUN -0xBE41 0xD438 # HANGUL SYLLABLE PHIEUPH-WAE-SSANGSIOS -0xBE42 0xD439 # HANGUL SYLLABLE PHIEUPH-WAE-IEUNG -0xBE43 0xD43A # HANGUL SYLLABLE PHIEUPH-WAE-CIEUC -0xBE44 0xD43B # HANGUL SYLLABLE PHIEUPH-WAE-CHIEUCH -0xBE45 0xD43C # HANGUL SYLLABLE PHIEUPH-WAE-KHIEUKH -0xBE46 0xD43D # HANGUL SYLLABLE PHIEUPH-WAE-THIEUTH -0xBE47 0xD43E # HANGUL SYLLABLE PHIEUPH-WAE-PHIEUPH -0xBE48 0xD43F # HANGUL SYLLABLE PHIEUPH-WAE-HIEUH -0xBE49 0xD441 # HANGUL SYLLABLE PHIEUPH-OE-KIYEOK -0xBE4A 0xD442 # HANGUL SYLLABLE PHIEUPH-OE-SSANGKIYEOK -0xBE4B 0xD443 # HANGUL SYLLABLE PHIEUPH-OE-KIYEOKSIOS -0xBE4C 0xD445 # HANGUL SYLLABLE PHIEUPH-OE-NIEUNCIEUC -0xBE4D 0xD446 # HANGUL SYLLABLE PHIEUPH-OE-NIEUNHIEUH -0xBE4E 0xD447 # HANGUL SYLLABLE PHIEUPH-OE-TIKEUT -0xBE4F 0xD448 # HANGUL SYLLABLE PHIEUPH-OE-RIEUL -0xBE50 0xD449 # HANGUL SYLLABLE PHIEUPH-OE-RIEULKIYEOK -0xBE51 0xD44A # HANGUL SYLLABLE PHIEUPH-OE-RIEULMIEUM -0xBE52 0xD44B # HANGUL SYLLABLE PHIEUPH-OE-RIEULPIEUP -0xBE53 0xD44C # HANGUL SYLLABLE PHIEUPH-OE-RIEULSIOS -0xBE54 0xD44D # HANGUL SYLLABLE PHIEUPH-OE-RIEULTHIEUTH -0xBE55 0xD44E # HANGUL SYLLABLE PHIEUPH-OE-RIEULPHIEUPH -0xBE56 0xD44F # HANGUL SYLLABLE PHIEUPH-OE-RIEULHIEUH -0xBE57 0xD450 # HANGUL SYLLABLE PHIEUPH-OE-MIEUM -0xBE58 0xD451 # HANGUL SYLLABLE PHIEUPH-OE-PIEUP -0xBE59 0xD452 # HANGUL SYLLABLE PHIEUPH-OE-PIEUPSIOS -0xBE5A 0xD453 # HANGUL SYLLABLE PHIEUPH-OE-SIOS -0xBE61 0xD454 # HANGUL SYLLABLE PHIEUPH-OE-SSANGSIOS -0xBE62 0xD455 # HANGUL SYLLABLE PHIEUPH-OE-IEUNG -0xBE63 0xD456 # HANGUL SYLLABLE PHIEUPH-OE-CIEUC -0xBE64 0xD457 # HANGUL SYLLABLE PHIEUPH-OE-CHIEUCH -0xBE65 0xD458 # HANGUL SYLLABLE PHIEUPH-OE-KHIEUKH -0xBE66 0xD459 # HANGUL SYLLABLE PHIEUPH-OE-THIEUTH -0xBE67 0xD45A # HANGUL SYLLABLE PHIEUPH-OE-PHIEUPH -0xBE68 0xD45B # HANGUL SYLLABLE PHIEUPH-OE-HIEUH -0xBE69 0xD45D # HANGUL SYLLABLE PHIEUPH-YO-KIYEOK -0xBE6A 0xD45E # HANGUL SYLLABLE PHIEUPH-YO-SSANGKIYEOK -0xBE6B 0xD45F # HANGUL SYLLABLE PHIEUPH-YO-KIYEOKSIOS -0xBE6C 0xD461 # HANGUL SYLLABLE PHIEUPH-YO-NIEUNCIEUC -0xBE6D 0xD462 # HANGUL SYLLABLE PHIEUPH-YO-NIEUNHIEUH -0xBE6E 0xD463 # HANGUL SYLLABLE PHIEUPH-YO-TIKEUT -0xBE6F 0xD465 # HANGUL SYLLABLE PHIEUPH-YO-RIEULKIYEOK -0xBE70 0xD466 # HANGUL SYLLABLE PHIEUPH-YO-RIEULMIEUM -0xBE71 0xD467 # HANGUL SYLLABLE PHIEUPH-YO-RIEULPIEUP -0xBE72 0xD468 # HANGUL SYLLABLE PHIEUPH-YO-RIEULSIOS -0xBE73 0xD469 # HANGUL SYLLABLE PHIEUPH-YO-RIEULTHIEUTH -0xBE74 0xD46A # HANGUL SYLLABLE PHIEUPH-YO-RIEULPHIEUPH -0xBE75 0xD46B # HANGUL SYLLABLE PHIEUPH-YO-RIEULHIEUH -0xBE76 0xD46C # HANGUL SYLLABLE PHIEUPH-YO-MIEUM -0xBE77 0xD46E # HANGUL SYLLABLE PHIEUPH-YO-PIEUPSIOS -0xBE78 0xD470 # HANGUL SYLLABLE PHIEUPH-YO-SSANGSIOS -0xBE79 0xD471 # HANGUL SYLLABLE PHIEUPH-YO-IEUNG -0xBE7A 0xD472 # HANGUL SYLLABLE PHIEUPH-YO-CIEUC -0xBE81 0xD473 # HANGUL SYLLABLE PHIEUPH-YO-CHIEUCH -0xBE82 0xD474 # HANGUL SYLLABLE PHIEUPH-YO-KHIEUKH -0xBE83 0xD475 # HANGUL SYLLABLE PHIEUPH-YO-THIEUTH -0xBE84 0xD476 # HANGUL SYLLABLE PHIEUPH-YO-PHIEUPH -0xBE85 0xD477 # HANGUL SYLLABLE PHIEUPH-YO-HIEUH -0xBE86 0xD47A # HANGUL SYLLABLE PHIEUPH-U-SSANGKIYEOK -0xBE87 0xD47B # HANGUL SYLLABLE PHIEUPH-U-KIYEOKSIOS -0xBE88 0xD47D # HANGUL SYLLABLE PHIEUPH-U-NIEUNCIEUC -0xBE89 0xD47E # HANGUL SYLLABLE PHIEUPH-U-NIEUNHIEUH -0xBE8A 0xD481 # HANGUL SYLLABLE PHIEUPH-U-RIEULKIYEOK -0xBE8B 0xD483 # HANGUL SYLLABLE PHIEUPH-U-RIEULPIEUP -0xBE8C 0xD484 # HANGUL SYLLABLE PHIEUPH-U-RIEULSIOS -0xBE8D 0xD485 # HANGUL SYLLABLE PHIEUPH-U-RIEULTHIEUTH -0xBE8E 0xD486 # HANGUL SYLLABLE PHIEUPH-U-RIEULPHIEUPH -0xBE8F 0xD487 # HANGUL SYLLABLE PHIEUPH-U-RIEULHIEUH -0xBE90 0xD48A # HANGUL SYLLABLE PHIEUPH-U-PIEUPSIOS -0xBE91 0xD48C # HANGUL SYLLABLE PHIEUPH-U-SSANGSIOS -0xBE92 0xD48E # HANGUL SYLLABLE PHIEUPH-U-CIEUC -0xBE93 0xD48F # HANGUL SYLLABLE PHIEUPH-U-CHIEUCH -0xBE94 0xD490 # HANGUL SYLLABLE PHIEUPH-U-KHIEUKH -0xBE95 0xD491 # HANGUL SYLLABLE PHIEUPH-U-THIEUTH -0xBE96 0xD492 # HANGUL SYLLABLE PHIEUPH-U-PHIEUPH -0xBE97 0xD493 # HANGUL SYLLABLE PHIEUPH-U-HIEUH -0xBE98 0xD495 # HANGUL SYLLABLE PHIEUPH-WEO-KIYEOK -0xBE99 0xD496 # HANGUL SYLLABLE PHIEUPH-WEO-SSANGKIYEOK -0xBE9A 0xD497 # HANGUL SYLLABLE PHIEUPH-WEO-KIYEOKSIOS -0xBE9B 0xD498 # HANGUL SYLLABLE PHIEUPH-WEO-NIEUN -0xBE9C 0xD499 # HANGUL SYLLABLE PHIEUPH-WEO-NIEUNCIEUC -0xBE9D 0xD49A # HANGUL SYLLABLE PHIEUPH-WEO-NIEUNHIEUH -0xBE9E 0xD49B # HANGUL SYLLABLE PHIEUPH-WEO-TIKEUT -0xBE9F 0xD49C # HANGUL SYLLABLE PHIEUPH-WEO-RIEUL -0xBEA0 0xD49D # HANGUL SYLLABLE PHIEUPH-WEO-RIEULKIYEOK -0xBEA1 0xC434 # HANGUL SYLLABLE SSANGSIOS-OE-RIEUL -0xBEA2 0xC43C # HANGUL SYLLABLE SSANGSIOS-OE-MIEUM -0xBEA3 0xC43D # HANGUL SYLLABLE SSANGSIOS-OE-PIEUP -0xBEA4 0xC448 # HANGUL SYLLABLE SSANGSIOS-YO -0xBEA5 0xC464 # HANGUL SYLLABLE SSANGSIOS-U -0xBEA6 0xC465 # HANGUL SYLLABLE SSANGSIOS-U-KIYEOK -0xBEA7 0xC468 # HANGUL SYLLABLE SSANGSIOS-U-NIEUN -0xBEA8 0xC46C # HANGUL SYLLABLE SSANGSIOS-U-RIEUL -0xBEA9 0xC474 # HANGUL SYLLABLE SSANGSIOS-U-MIEUM -0xBEAA 0xC475 # HANGUL SYLLABLE SSANGSIOS-U-PIEUP -0xBEAB 0xC479 # HANGUL SYLLABLE SSANGSIOS-U-IEUNG -0xBEAC 0xC480 # HANGUL SYLLABLE SSANGSIOS-WEO -0xBEAD 0xC494 # HANGUL SYLLABLE SSANGSIOS-WEO-SSANGSIOS -0xBEAE 0xC49C # HANGUL SYLLABLE SSANGSIOS-WE -0xBEAF 0xC4B8 # HANGUL SYLLABLE SSANGSIOS-WI -0xBEB0 0xC4BC # HANGUL SYLLABLE SSANGSIOS-WI-NIEUN -0xBEB1 0xC4E9 # HANGUL SYLLABLE SSANGSIOS-YU-IEUNG -0xBEB2 0xC4F0 # HANGUL SYLLABLE SSANGSIOS-EU -0xBEB3 0xC4F1 # HANGUL SYLLABLE SSANGSIOS-EU-KIYEOK -0xBEB4 0xC4F4 # HANGUL SYLLABLE SSANGSIOS-EU-NIEUN -0xBEB5 0xC4F8 # HANGUL SYLLABLE SSANGSIOS-EU-RIEUL -0xBEB6 0xC4FA # HANGUL SYLLABLE SSANGSIOS-EU-RIEULMIEUM -0xBEB7 0xC4FF # HANGUL SYLLABLE SSANGSIOS-EU-RIEULHIEUH -0xBEB8 0xC500 # HANGUL SYLLABLE SSANGSIOS-EU-MIEUM -0xBEB9 0xC501 # HANGUL SYLLABLE SSANGSIOS-EU-PIEUP -0xBEBA 0xC50C # HANGUL SYLLABLE SSANGSIOS-YI -0xBEBB 0xC510 # HANGUL SYLLABLE SSANGSIOS-YI-NIEUN -0xBEBC 0xC514 # HANGUL SYLLABLE SSANGSIOS-YI-RIEUL -0xBEBD 0xC51C # HANGUL SYLLABLE SSANGSIOS-YI-MIEUM -0xBEBE 0xC528 # HANGUL SYLLABLE SSANGSIOS-I -0xBEBF 0xC529 # HANGUL SYLLABLE SSANGSIOS-I-KIYEOK -0xBEC0 0xC52C # HANGUL SYLLABLE SSANGSIOS-I-NIEUN -0xBEC1 0xC530 # HANGUL SYLLABLE SSANGSIOS-I-RIEUL -0xBEC2 0xC538 # HANGUL SYLLABLE SSANGSIOS-I-MIEUM -0xBEC3 0xC539 # HANGUL SYLLABLE SSANGSIOS-I-PIEUP -0xBEC4 0xC53B # HANGUL SYLLABLE SSANGSIOS-I-SIOS -0xBEC5 0xC53D # HANGUL SYLLABLE SSANGSIOS-I-IEUNG -0xBEC6 0xC544 # HANGUL SYLLABLE IEUNG-A -0xBEC7 0xC545 # HANGUL SYLLABLE IEUNG-A-KIYEOK -0xBEC8 0xC548 # HANGUL SYLLABLE IEUNG-A-NIEUN -0xBEC9 0xC549 # HANGUL SYLLABLE IEUNG-A-NIEUNCIEUC -0xBECA 0xC54A # HANGUL SYLLABLE IEUNG-A-NIEUNHIEUH -0xBECB 0xC54C # HANGUL SYLLABLE IEUNG-A-RIEUL -0xBECC 0xC54D # HANGUL SYLLABLE IEUNG-A-RIEULKIYEOK -0xBECD 0xC54E # HANGUL SYLLABLE IEUNG-A-RIEULMIEUM -0xBECE 0xC553 # HANGUL SYLLABLE IEUNG-A-RIEULHIEUH -0xBECF 0xC554 # HANGUL SYLLABLE IEUNG-A-MIEUM -0xBED0 0xC555 # HANGUL SYLLABLE IEUNG-A-PIEUP -0xBED1 0xC557 # HANGUL SYLLABLE IEUNG-A-SIOS -0xBED2 0xC558 # HANGUL SYLLABLE IEUNG-A-SSANGSIOS -0xBED3 0xC559 # HANGUL SYLLABLE IEUNG-A-IEUNG -0xBED4 0xC55D # HANGUL SYLLABLE IEUNG-A-THIEUTH -0xBED5 0xC55E # HANGUL SYLLABLE IEUNG-A-PHIEUPH -0xBED6 0xC560 # HANGUL SYLLABLE IEUNG-AE -0xBED7 0xC561 # HANGUL SYLLABLE IEUNG-AE-KIYEOK -0xBED8 0xC564 # HANGUL SYLLABLE IEUNG-AE-NIEUN -0xBED9 0xC568 # HANGUL SYLLABLE IEUNG-AE-RIEUL -0xBEDA 0xC570 # HANGUL SYLLABLE IEUNG-AE-MIEUM -0xBEDB 0xC571 # HANGUL SYLLABLE IEUNG-AE-PIEUP -0xBEDC 0xC573 # HANGUL SYLLABLE IEUNG-AE-SIOS -0xBEDD 0xC574 # HANGUL SYLLABLE IEUNG-AE-SSANGSIOS -0xBEDE 0xC575 # HANGUL SYLLABLE IEUNG-AE-IEUNG -0xBEDF 0xC57C # HANGUL SYLLABLE IEUNG-YA -0xBEE0 0xC57D # HANGUL SYLLABLE IEUNG-YA-KIYEOK -0xBEE1 0xC580 # HANGUL SYLLABLE IEUNG-YA-NIEUN -0xBEE2 0xC584 # HANGUL SYLLABLE IEUNG-YA-RIEUL -0xBEE3 0xC587 # HANGUL SYLLABLE IEUNG-YA-RIEULPIEUP -0xBEE4 0xC58C # HANGUL SYLLABLE IEUNG-YA-MIEUM -0xBEE5 0xC58D # HANGUL SYLLABLE IEUNG-YA-PIEUP -0xBEE6 0xC58F # HANGUL SYLLABLE IEUNG-YA-SIOS -0xBEE7 0xC591 # HANGUL SYLLABLE IEUNG-YA-IEUNG -0xBEE8 0xC595 # HANGUL SYLLABLE IEUNG-YA-THIEUTH -0xBEE9 0xC597 # HANGUL SYLLABLE IEUNG-YA-HIEUH -0xBEEA 0xC598 # HANGUL SYLLABLE IEUNG-YAE -0xBEEB 0xC59C # HANGUL SYLLABLE IEUNG-YAE-NIEUN -0xBEEC 0xC5A0 # HANGUL SYLLABLE IEUNG-YAE-RIEUL -0xBEED 0xC5A9 # HANGUL SYLLABLE IEUNG-YAE-PIEUP -0xBEEE 0xC5B4 # HANGUL SYLLABLE IEUNG-EO -0xBEEF 0xC5B5 # HANGUL SYLLABLE IEUNG-EO-KIYEOK -0xBEF0 0xC5B8 # HANGUL SYLLABLE IEUNG-EO-NIEUN -0xBEF1 0xC5B9 # HANGUL SYLLABLE IEUNG-EO-NIEUNCIEUC -0xBEF2 0xC5BB # HANGUL SYLLABLE IEUNG-EO-TIKEUT -0xBEF3 0xC5BC # HANGUL SYLLABLE IEUNG-EO-RIEUL -0xBEF4 0xC5BD # HANGUL SYLLABLE IEUNG-EO-RIEULKIYEOK -0xBEF5 0xC5BE # HANGUL SYLLABLE IEUNG-EO-RIEULMIEUM -0xBEF6 0xC5C4 # HANGUL SYLLABLE IEUNG-EO-MIEUM -0xBEF7 0xC5C5 # HANGUL SYLLABLE IEUNG-EO-PIEUP -0xBEF8 0xC5C6 # HANGUL SYLLABLE IEUNG-EO-PIEUPSIOS -0xBEF9 0xC5C7 # HANGUL SYLLABLE IEUNG-EO-SIOS -0xBEFA 0xC5C8 # HANGUL SYLLABLE IEUNG-EO-SSANGSIOS -0xBEFB 0xC5C9 # HANGUL SYLLABLE IEUNG-EO-IEUNG -0xBEFC 0xC5CA # HANGUL SYLLABLE IEUNG-EO-CIEUC -0xBEFD 0xC5CC # HANGUL SYLLABLE IEUNG-EO-KHIEUKH -0xBEFE 0xC5CE # HANGUL SYLLABLE IEUNG-EO-PHIEUPH -0xBF41 0xD49E # HANGUL SYLLABLE PHIEUPH-WEO-RIEULMIEUM -0xBF42 0xD49F # HANGUL SYLLABLE PHIEUPH-WEO-RIEULPIEUP -0xBF43 0xD4A0 # HANGUL SYLLABLE PHIEUPH-WEO-RIEULSIOS -0xBF44 0xD4A1 # HANGUL SYLLABLE PHIEUPH-WEO-RIEULTHIEUTH -0xBF45 0xD4A2 # HANGUL SYLLABLE PHIEUPH-WEO-RIEULPHIEUPH -0xBF46 0xD4A3 # HANGUL SYLLABLE PHIEUPH-WEO-RIEULHIEUH -0xBF47 0xD4A4 # HANGUL SYLLABLE PHIEUPH-WEO-MIEUM -0xBF48 0xD4A5 # HANGUL SYLLABLE PHIEUPH-WEO-PIEUP -0xBF49 0xD4A6 # HANGUL SYLLABLE PHIEUPH-WEO-PIEUPSIOS -0xBF4A 0xD4A7 # HANGUL SYLLABLE PHIEUPH-WEO-SIOS -0xBF4B 0xD4A8 # HANGUL SYLLABLE PHIEUPH-WEO-SSANGSIOS -0xBF4C 0xD4AA # HANGUL SYLLABLE PHIEUPH-WEO-CIEUC -0xBF4D 0xD4AB # HANGUL SYLLABLE PHIEUPH-WEO-CHIEUCH -0xBF4E 0xD4AC # HANGUL SYLLABLE PHIEUPH-WEO-KHIEUKH -0xBF4F 0xD4AD # HANGUL SYLLABLE PHIEUPH-WEO-THIEUTH -0xBF50 0xD4AE # HANGUL SYLLABLE PHIEUPH-WEO-PHIEUPH -0xBF51 0xD4AF # HANGUL SYLLABLE PHIEUPH-WEO-HIEUH -0xBF52 0xD4B0 # HANGUL SYLLABLE PHIEUPH-WE -0xBF53 0xD4B1 # HANGUL SYLLABLE PHIEUPH-WE-KIYEOK -0xBF54 0xD4B2 # HANGUL SYLLABLE PHIEUPH-WE-SSANGKIYEOK -0xBF55 0xD4B3 # HANGUL SYLLABLE PHIEUPH-WE-KIYEOKSIOS -0xBF56 0xD4B4 # HANGUL SYLLABLE PHIEUPH-WE-NIEUN -0xBF57 0xD4B5 # HANGUL SYLLABLE PHIEUPH-WE-NIEUNCIEUC -0xBF58 0xD4B6 # HANGUL SYLLABLE PHIEUPH-WE-NIEUNHIEUH -0xBF59 0xD4B7 # HANGUL SYLLABLE PHIEUPH-WE-TIKEUT -0xBF5A 0xD4B8 # HANGUL SYLLABLE PHIEUPH-WE-RIEUL -0xBF61 0xD4B9 # HANGUL SYLLABLE PHIEUPH-WE-RIEULKIYEOK -0xBF62 0xD4BA # HANGUL SYLLABLE PHIEUPH-WE-RIEULMIEUM -0xBF63 0xD4BB # HANGUL SYLLABLE PHIEUPH-WE-RIEULPIEUP -0xBF64 0xD4BC # HANGUL SYLLABLE PHIEUPH-WE-RIEULSIOS -0xBF65 0xD4BD # HANGUL SYLLABLE PHIEUPH-WE-RIEULTHIEUTH -0xBF66 0xD4BE # HANGUL SYLLABLE PHIEUPH-WE-RIEULPHIEUPH -0xBF67 0xD4BF # HANGUL SYLLABLE PHIEUPH-WE-RIEULHIEUH -0xBF68 0xD4C0 # HANGUL SYLLABLE PHIEUPH-WE-MIEUM -0xBF69 0xD4C1 # HANGUL SYLLABLE PHIEUPH-WE-PIEUP -0xBF6A 0xD4C2 # HANGUL SYLLABLE PHIEUPH-WE-PIEUPSIOS -0xBF6B 0xD4C3 # HANGUL SYLLABLE PHIEUPH-WE-SIOS -0xBF6C 0xD4C4 # HANGUL SYLLABLE PHIEUPH-WE-SSANGSIOS -0xBF6D 0xD4C5 # HANGUL SYLLABLE PHIEUPH-WE-IEUNG -0xBF6E 0xD4C6 # HANGUL SYLLABLE PHIEUPH-WE-CIEUC -0xBF6F 0xD4C7 # HANGUL SYLLABLE PHIEUPH-WE-CHIEUCH -0xBF70 0xD4C8 # HANGUL SYLLABLE PHIEUPH-WE-KHIEUKH -0xBF71 0xD4C9 # HANGUL SYLLABLE PHIEUPH-WE-THIEUTH -0xBF72 0xD4CA # HANGUL SYLLABLE PHIEUPH-WE-PHIEUPH -0xBF73 0xD4CB # HANGUL SYLLABLE PHIEUPH-WE-HIEUH -0xBF74 0xD4CD # HANGUL SYLLABLE PHIEUPH-WI-KIYEOK -0xBF75 0xD4CE # HANGUL SYLLABLE PHIEUPH-WI-SSANGKIYEOK -0xBF76 0xD4CF # HANGUL SYLLABLE PHIEUPH-WI-KIYEOKSIOS -0xBF77 0xD4D1 # HANGUL SYLLABLE PHIEUPH-WI-NIEUNCIEUC -0xBF78 0xD4D2 # HANGUL SYLLABLE PHIEUPH-WI-NIEUNHIEUH -0xBF79 0xD4D3 # HANGUL SYLLABLE PHIEUPH-WI-TIKEUT -0xBF7A 0xD4D5 # HANGUL SYLLABLE PHIEUPH-WI-RIEULKIYEOK -0xBF81 0xD4D6 # HANGUL SYLLABLE PHIEUPH-WI-RIEULMIEUM -0xBF82 0xD4D7 # HANGUL SYLLABLE PHIEUPH-WI-RIEULPIEUP -0xBF83 0xD4D8 # HANGUL SYLLABLE PHIEUPH-WI-RIEULSIOS -0xBF84 0xD4D9 # HANGUL SYLLABLE PHIEUPH-WI-RIEULTHIEUTH -0xBF85 0xD4DA # HANGUL SYLLABLE PHIEUPH-WI-RIEULPHIEUPH -0xBF86 0xD4DB # HANGUL SYLLABLE PHIEUPH-WI-RIEULHIEUH -0xBF87 0xD4DD # HANGUL SYLLABLE PHIEUPH-WI-PIEUP -0xBF88 0xD4DE # HANGUL SYLLABLE PHIEUPH-WI-PIEUPSIOS -0xBF89 0xD4E0 # HANGUL SYLLABLE PHIEUPH-WI-SSANGSIOS -0xBF8A 0xD4E1 # HANGUL SYLLABLE PHIEUPH-WI-IEUNG -0xBF8B 0xD4E2 # HANGUL SYLLABLE PHIEUPH-WI-CIEUC -0xBF8C 0xD4E3 # HANGUL SYLLABLE PHIEUPH-WI-CHIEUCH -0xBF8D 0xD4E4 # HANGUL SYLLABLE PHIEUPH-WI-KHIEUKH -0xBF8E 0xD4E5 # HANGUL SYLLABLE PHIEUPH-WI-THIEUTH -0xBF8F 0xD4E6 # HANGUL SYLLABLE PHIEUPH-WI-PHIEUPH -0xBF90 0xD4E7 # HANGUL SYLLABLE PHIEUPH-WI-HIEUH -0xBF91 0xD4E9 # HANGUL SYLLABLE PHIEUPH-YU-KIYEOK -0xBF92 0xD4EA # HANGUL SYLLABLE PHIEUPH-YU-SSANGKIYEOK -0xBF93 0xD4EB # HANGUL SYLLABLE PHIEUPH-YU-KIYEOKSIOS -0xBF94 0xD4ED # HANGUL SYLLABLE PHIEUPH-YU-NIEUNCIEUC -0xBF95 0xD4EE # HANGUL SYLLABLE PHIEUPH-YU-NIEUNHIEUH -0xBF96 0xD4EF # HANGUL SYLLABLE PHIEUPH-YU-TIKEUT -0xBF97 0xD4F1 # HANGUL SYLLABLE PHIEUPH-YU-RIEULKIYEOK -0xBF98 0xD4F2 # HANGUL SYLLABLE PHIEUPH-YU-RIEULMIEUM -0xBF99 0xD4F3 # HANGUL SYLLABLE PHIEUPH-YU-RIEULPIEUP -0xBF9A 0xD4F4 # HANGUL SYLLABLE PHIEUPH-YU-RIEULSIOS -0xBF9B 0xD4F5 # HANGUL SYLLABLE PHIEUPH-YU-RIEULTHIEUTH -0xBF9C 0xD4F6 # HANGUL SYLLABLE PHIEUPH-YU-RIEULPHIEUPH -0xBF9D 0xD4F7 # HANGUL SYLLABLE PHIEUPH-YU-RIEULHIEUH -0xBF9E 0xD4F9 # HANGUL SYLLABLE PHIEUPH-YU-PIEUP -0xBF9F 0xD4FA # HANGUL SYLLABLE PHIEUPH-YU-PIEUPSIOS -0xBFA0 0xD4FC # HANGUL SYLLABLE PHIEUPH-YU-SSANGSIOS -0xBFA1 0xC5D0 # HANGUL SYLLABLE IEUNG-E -0xBFA2 0xC5D1 # HANGUL SYLLABLE IEUNG-E-KIYEOK -0xBFA3 0xC5D4 # HANGUL SYLLABLE IEUNG-E-NIEUN -0xBFA4 0xC5D8 # HANGUL SYLLABLE IEUNG-E-RIEUL -0xBFA5 0xC5E0 # HANGUL SYLLABLE IEUNG-E-MIEUM -0xBFA6 0xC5E1 # HANGUL SYLLABLE IEUNG-E-PIEUP -0xBFA7 0xC5E3 # HANGUL SYLLABLE IEUNG-E-SIOS -0xBFA8 0xC5E5 # HANGUL SYLLABLE IEUNG-E-IEUNG -0xBFA9 0xC5EC # HANGUL SYLLABLE IEUNG-YEO -0xBFAA 0xC5ED # HANGUL SYLLABLE IEUNG-YEO-KIYEOK -0xBFAB 0xC5EE # HANGUL SYLLABLE IEUNG-YEO-SSANGKIYEOK -0xBFAC 0xC5F0 # HANGUL SYLLABLE IEUNG-YEO-NIEUN -0xBFAD 0xC5F4 # HANGUL SYLLABLE IEUNG-YEO-RIEUL -0xBFAE 0xC5F6 # HANGUL SYLLABLE IEUNG-YEO-RIEULMIEUM -0xBFAF 0xC5F7 # HANGUL SYLLABLE IEUNG-YEO-RIEULPIEUP -0xBFB0 0xC5FC # HANGUL SYLLABLE IEUNG-YEO-MIEUM -0xBFB1 0xC5FD # HANGUL SYLLABLE IEUNG-YEO-PIEUP -0xBFB2 0xC5FE # HANGUL SYLLABLE IEUNG-YEO-PIEUPSIOS -0xBFB3 0xC5FF # HANGUL SYLLABLE IEUNG-YEO-SIOS -0xBFB4 0xC600 # HANGUL SYLLABLE IEUNG-YEO-SSANGSIOS -0xBFB5 0xC601 # HANGUL SYLLABLE IEUNG-YEO-IEUNG -0xBFB6 0xC605 # HANGUL SYLLABLE IEUNG-YEO-THIEUTH -0xBFB7 0xC606 # HANGUL SYLLABLE IEUNG-YEO-PHIEUPH -0xBFB8 0xC607 # HANGUL SYLLABLE IEUNG-YEO-HIEUH -0xBFB9 0xC608 # HANGUL SYLLABLE IEUNG-YE -0xBFBA 0xC60C # HANGUL SYLLABLE IEUNG-YE-NIEUN -0xBFBB 0xC610 # HANGUL SYLLABLE IEUNG-YE-RIEUL -0xBFBC 0xC618 # HANGUL SYLLABLE IEUNG-YE-MIEUM -0xBFBD 0xC619 # HANGUL SYLLABLE IEUNG-YE-PIEUP -0xBFBE 0xC61B # HANGUL SYLLABLE IEUNG-YE-SIOS -0xBFBF 0xC61C # HANGUL SYLLABLE IEUNG-YE-SSANGSIOS -0xBFC0 0xC624 # HANGUL SYLLABLE IEUNG-O -0xBFC1 0xC625 # HANGUL SYLLABLE IEUNG-O-KIYEOK -0xBFC2 0xC628 # HANGUL SYLLABLE IEUNG-O-NIEUN -0xBFC3 0xC62C # HANGUL SYLLABLE IEUNG-O-RIEUL -0xBFC4 0xC62D # HANGUL SYLLABLE IEUNG-O-RIEULKIYEOK -0xBFC5 0xC62E # HANGUL SYLLABLE IEUNG-O-RIEULMIEUM -0xBFC6 0xC630 # HANGUL SYLLABLE IEUNG-O-RIEULSIOS -0xBFC7 0xC633 # HANGUL SYLLABLE IEUNG-O-RIEULHIEUH -0xBFC8 0xC634 # HANGUL SYLLABLE IEUNG-O-MIEUM -0xBFC9 0xC635 # HANGUL SYLLABLE IEUNG-O-PIEUP -0xBFCA 0xC637 # HANGUL SYLLABLE IEUNG-O-SIOS -0xBFCB 0xC639 # HANGUL SYLLABLE IEUNG-O-IEUNG -0xBFCC 0xC63B # HANGUL SYLLABLE IEUNG-O-CHIEUCH -0xBFCD 0xC640 # HANGUL SYLLABLE IEUNG-WA -0xBFCE 0xC641 # HANGUL SYLLABLE IEUNG-WA-KIYEOK -0xBFCF 0xC644 # HANGUL SYLLABLE IEUNG-WA-NIEUN -0xBFD0 0xC648 # HANGUL SYLLABLE IEUNG-WA-RIEUL -0xBFD1 0xC650 # HANGUL SYLLABLE IEUNG-WA-MIEUM -0xBFD2 0xC651 # HANGUL SYLLABLE IEUNG-WA-PIEUP -0xBFD3 0xC653 # HANGUL SYLLABLE IEUNG-WA-SIOS -0xBFD4 0xC654 # HANGUL SYLLABLE IEUNG-WA-SSANGSIOS -0xBFD5 0xC655 # HANGUL SYLLABLE IEUNG-WA-IEUNG -0xBFD6 0xC65C # HANGUL SYLLABLE IEUNG-WAE -0xBFD7 0xC65D # HANGUL SYLLABLE IEUNG-WAE-KIYEOK -0xBFD8 0xC660 # HANGUL SYLLABLE IEUNG-WAE-NIEUN -0xBFD9 0xC66C # HANGUL SYLLABLE IEUNG-WAE-MIEUM -0xBFDA 0xC66F # HANGUL SYLLABLE IEUNG-WAE-SIOS -0xBFDB 0xC671 # HANGUL SYLLABLE IEUNG-WAE-IEUNG -0xBFDC 0xC678 # HANGUL SYLLABLE IEUNG-OE -0xBFDD 0xC679 # HANGUL SYLLABLE IEUNG-OE-KIYEOK -0xBFDE 0xC67C # HANGUL SYLLABLE IEUNG-OE-NIEUN -0xBFDF 0xC680 # HANGUL SYLLABLE IEUNG-OE-RIEUL -0xBFE0 0xC688 # HANGUL SYLLABLE IEUNG-OE-MIEUM -0xBFE1 0xC689 # HANGUL SYLLABLE IEUNG-OE-PIEUP -0xBFE2 0xC68B # HANGUL SYLLABLE IEUNG-OE-SIOS -0xBFE3 0xC68D # HANGUL SYLLABLE IEUNG-OE-IEUNG -0xBFE4 0xC694 # HANGUL SYLLABLE IEUNG-YO -0xBFE5 0xC695 # HANGUL SYLLABLE IEUNG-YO-KIYEOK -0xBFE6 0xC698 # HANGUL SYLLABLE IEUNG-YO-NIEUN -0xBFE7 0xC69C # HANGUL SYLLABLE IEUNG-YO-RIEUL -0xBFE8 0xC6A4 # HANGUL SYLLABLE IEUNG-YO-MIEUM -0xBFE9 0xC6A5 # HANGUL SYLLABLE IEUNG-YO-PIEUP -0xBFEA 0xC6A7 # HANGUL SYLLABLE IEUNG-YO-SIOS -0xBFEB 0xC6A9 # HANGUL SYLLABLE IEUNG-YO-IEUNG -0xBFEC 0xC6B0 # HANGUL SYLLABLE IEUNG-U -0xBFED 0xC6B1 # HANGUL SYLLABLE IEUNG-U-KIYEOK -0xBFEE 0xC6B4 # HANGUL SYLLABLE IEUNG-U-NIEUN -0xBFEF 0xC6B8 # HANGUL SYLLABLE IEUNG-U-RIEUL -0xBFF0 0xC6B9 # HANGUL SYLLABLE IEUNG-U-RIEULKIYEOK -0xBFF1 0xC6BA # HANGUL SYLLABLE IEUNG-U-RIEULMIEUM -0xBFF2 0xC6C0 # HANGUL SYLLABLE IEUNG-U-MIEUM -0xBFF3 0xC6C1 # HANGUL SYLLABLE IEUNG-U-PIEUP -0xBFF4 0xC6C3 # HANGUL SYLLABLE IEUNG-U-SIOS -0xBFF5 0xC6C5 # HANGUL SYLLABLE IEUNG-U-IEUNG -0xBFF6 0xC6CC # HANGUL SYLLABLE IEUNG-WEO -0xBFF7 0xC6CD # HANGUL SYLLABLE IEUNG-WEO-KIYEOK -0xBFF8 0xC6D0 # HANGUL SYLLABLE IEUNG-WEO-NIEUN -0xBFF9 0xC6D4 # HANGUL SYLLABLE IEUNG-WEO-RIEUL -0xBFFA 0xC6DC # HANGUL SYLLABLE IEUNG-WEO-MIEUM -0xBFFB 0xC6DD # HANGUL SYLLABLE IEUNG-WEO-PIEUP -0xBFFC 0xC6E0 # HANGUL SYLLABLE IEUNG-WEO-SSANGSIOS -0xBFFD 0xC6E1 # HANGUL SYLLABLE IEUNG-WEO-IEUNG -0xBFFE 0xC6E8 # HANGUL SYLLABLE IEUNG-WE -0xC041 0xD4FE # HANGUL SYLLABLE PHIEUPH-YU-CIEUC -0xC042 0xD4FF # HANGUL SYLLABLE PHIEUPH-YU-CHIEUCH -0xC043 0xD500 # HANGUL SYLLABLE PHIEUPH-YU-KHIEUKH -0xC044 0xD501 # HANGUL SYLLABLE PHIEUPH-YU-THIEUTH -0xC045 0xD502 # HANGUL SYLLABLE PHIEUPH-YU-PHIEUPH -0xC046 0xD503 # HANGUL SYLLABLE PHIEUPH-YU-HIEUH -0xC047 0xD505 # HANGUL SYLLABLE PHIEUPH-EU-KIYEOK -0xC048 0xD506 # HANGUL SYLLABLE PHIEUPH-EU-SSANGKIYEOK -0xC049 0xD507 # HANGUL SYLLABLE PHIEUPH-EU-KIYEOKSIOS -0xC04A 0xD509 # HANGUL SYLLABLE PHIEUPH-EU-NIEUNCIEUC -0xC04B 0xD50A # HANGUL SYLLABLE PHIEUPH-EU-NIEUNHIEUH -0xC04C 0xD50B # HANGUL SYLLABLE PHIEUPH-EU-TIKEUT -0xC04D 0xD50D # HANGUL SYLLABLE PHIEUPH-EU-RIEULKIYEOK -0xC04E 0xD50E # HANGUL SYLLABLE PHIEUPH-EU-RIEULMIEUM -0xC04F 0xD50F # HANGUL SYLLABLE PHIEUPH-EU-RIEULPIEUP -0xC050 0xD510 # HANGUL SYLLABLE PHIEUPH-EU-RIEULSIOS -0xC051 0xD511 # HANGUL SYLLABLE PHIEUPH-EU-RIEULTHIEUTH -0xC052 0xD512 # HANGUL SYLLABLE PHIEUPH-EU-RIEULPHIEUPH -0xC053 0xD513 # HANGUL SYLLABLE PHIEUPH-EU-RIEULHIEUH -0xC054 0xD516 # HANGUL SYLLABLE PHIEUPH-EU-PIEUPSIOS -0xC055 0xD518 # HANGUL SYLLABLE PHIEUPH-EU-SSANGSIOS -0xC056 0xD519 # HANGUL SYLLABLE PHIEUPH-EU-IEUNG -0xC057 0xD51A # HANGUL SYLLABLE PHIEUPH-EU-CIEUC -0xC058 0xD51B # HANGUL SYLLABLE PHIEUPH-EU-CHIEUCH -0xC059 0xD51C # HANGUL SYLLABLE PHIEUPH-EU-KHIEUKH -0xC05A 0xD51D # HANGUL SYLLABLE PHIEUPH-EU-THIEUTH -0xC061 0xD51E # HANGUL SYLLABLE PHIEUPH-EU-PHIEUPH -0xC062 0xD51F # HANGUL SYLLABLE PHIEUPH-EU-HIEUH -0xC063 0xD520 # HANGUL SYLLABLE PHIEUPH-YI -0xC064 0xD521 # HANGUL SYLLABLE PHIEUPH-YI-KIYEOK -0xC065 0xD522 # HANGUL SYLLABLE PHIEUPH-YI-SSANGKIYEOK -0xC066 0xD523 # HANGUL SYLLABLE PHIEUPH-YI-KIYEOKSIOS -0xC067 0xD524 # HANGUL SYLLABLE PHIEUPH-YI-NIEUN -0xC068 0xD525 # HANGUL SYLLABLE PHIEUPH-YI-NIEUNCIEUC -0xC069 0xD526 # HANGUL SYLLABLE PHIEUPH-YI-NIEUNHIEUH -0xC06A 0xD527 # HANGUL SYLLABLE PHIEUPH-YI-TIKEUT -0xC06B 0xD528 # HANGUL SYLLABLE PHIEUPH-YI-RIEUL -0xC06C 0xD529 # HANGUL SYLLABLE PHIEUPH-YI-RIEULKIYEOK -0xC06D 0xD52A # HANGUL SYLLABLE PHIEUPH-YI-RIEULMIEUM -0xC06E 0xD52B # HANGUL SYLLABLE PHIEUPH-YI-RIEULPIEUP -0xC06F 0xD52C # HANGUL SYLLABLE PHIEUPH-YI-RIEULSIOS -0xC070 0xD52D # HANGUL SYLLABLE PHIEUPH-YI-RIEULTHIEUTH -0xC071 0xD52E # HANGUL SYLLABLE PHIEUPH-YI-RIEULPHIEUPH -0xC072 0xD52F # HANGUL SYLLABLE PHIEUPH-YI-RIEULHIEUH -0xC073 0xD530 # HANGUL SYLLABLE PHIEUPH-YI-MIEUM -0xC074 0xD531 # HANGUL SYLLABLE PHIEUPH-YI-PIEUP -0xC075 0xD532 # HANGUL SYLLABLE PHIEUPH-YI-PIEUPSIOS -0xC076 0xD533 # HANGUL SYLLABLE PHIEUPH-YI-SIOS -0xC077 0xD534 # HANGUL SYLLABLE PHIEUPH-YI-SSANGSIOS -0xC078 0xD535 # HANGUL SYLLABLE PHIEUPH-YI-IEUNG -0xC079 0xD536 # HANGUL SYLLABLE PHIEUPH-YI-CIEUC -0xC07A 0xD537 # HANGUL SYLLABLE PHIEUPH-YI-CHIEUCH -0xC081 0xD538 # HANGUL SYLLABLE PHIEUPH-YI-KHIEUKH -0xC082 0xD539 # HANGUL SYLLABLE PHIEUPH-YI-THIEUTH -0xC083 0xD53A # HANGUL SYLLABLE PHIEUPH-YI-PHIEUPH -0xC084 0xD53B # HANGUL SYLLABLE PHIEUPH-YI-HIEUH -0xC085 0xD53E # HANGUL SYLLABLE PHIEUPH-I-SSANGKIYEOK -0xC086 0xD53F # HANGUL SYLLABLE PHIEUPH-I-KIYEOKSIOS -0xC087 0xD541 # HANGUL SYLLABLE PHIEUPH-I-NIEUNCIEUC -0xC088 0xD542 # HANGUL SYLLABLE PHIEUPH-I-NIEUNHIEUH -0xC089 0xD543 # HANGUL SYLLABLE PHIEUPH-I-TIKEUT -0xC08A 0xD545 # HANGUL SYLLABLE PHIEUPH-I-RIEULKIYEOK -0xC08B 0xD546 # HANGUL SYLLABLE PHIEUPH-I-RIEULMIEUM -0xC08C 0xD547 # HANGUL SYLLABLE PHIEUPH-I-RIEULPIEUP -0xC08D 0xD548 # HANGUL SYLLABLE PHIEUPH-I-RIEULSIOS -0xC08E 0xD549 # HANGUL SYLLABLE PHIEUPH-I-RIEULTHIEUTH -0xC08F 0xD54A # HANGUL SYLLABLE PHIEUPH-I-RIEULPHIEUPH -0xC090 0xD54B # HANGUL SYLLABLE PHIEUPH-I-RIEULHIEUH -0xC091 0xD54E # HANGUL SYLLABLE PHIEUPH-I-PIEUPSIOS -0xC092 0xD550 # HANGUL SYLLABLE PHIEUPH-I-SSANGSIOS -0xC093 0xD552 # HANGUL SYLLABLE PHIEUPH-I-CIEUC -0xC094 0xD553 # HANGUL SYLLABLE PHIEUPH-I-CHIEUCH -0xC095 0xD554 # HANGUL SYLLABLE PHIEUPH-I-KHIEUKH -0xC096 0xD555 # HANGUL SYLLABLE PHIEUPH-I-THIEUTH -0xC097 0xD556 # HANGUL SYLLABLE PHIEUPH-I-PHIEUPH -0xC098 0xD557 # HANGUL SYLLABLE PHIEUPH-I-HIEUH -0xC099 0xD55A # HANGUL SYLLABLE HIEUH-A-SSANGKIYEOK -0xC09A 0xD55B # HANGUL SYLLABLE HIEUH-A-KIYEOKSIOS -0xC09B 0xD55D # HANGUL SYLLABLE HIEUH-A-NIEUNCIEUC -0xC09C 0xD55E # HANGUL SYLLABLE HIEUH-A-NIEUNHIEUH -0xC09D 0xD55F # HANGUL SYLLABLE HIEUH-A-TIKEUT -0xC09E 0xD561 # HANGUL SYLLABLE HIEUH-A-RIEULKIYEOK -0xC09F 0xD562 # HANGUL SYLLABLE HIEUH-A-RIEULMIEUM -0xC0A0 0xD563 # HANGUL SYLLABLE HIEUH-A-RIEULPIEUP -0xC0A1 0xC6E9 # HANGUL SYLLABLE IEUNG-WE-KIYEOK -0xC0A2 0xC6EC # HANGUL SYLLABLE IEUNG-WE-NIEUN -0xC0A3 0xC6F0 # HANGUL SYLLABLE IEUNG-WE-RIEUL -0xC0A4 0xC6F8 # HANGUL SYLLABLE IEUNG-WE-MIEUM -0xC0A5 0xC6F9 # HANGUL SYLLABLE IEUNG-WE-PIEUP -0xC0A6 0xC6FD # HANGUL SYLLABLE IEUNG-WE-IEUNG -0xC0A7 0xC704 # HANGUL SYLLABLE IEUNG-WI -0xC0A8 0xC705 # HANGUL SYLLABLE IEUNG-WI-KIYEOK -0xC0A9 0xC708 # HANGUL SYLLABLE IEUNG-WI-NIEUN -0xC0AA 0xC70C # HANGUL SYLLABLE IEUNG-WI-RIEUL -0xC0AB 0xC714 # HANGUL SYLLABLE IEUNG-WI-MIEUM -0xC0AC 0xC715 # HANGUL SYLLABLE IEUNG-WI-PIEUP -0xC0AD 0xC717 # HANGUL SYLLABLE IEUNG-WI-SIOS -0xC0AE 0xC719 # HANGUL SYLLABLE IEUNG-WI-IEUNG -0xC0AF 0xC720 # HANGUL SYLLABLE IEUNG-YU -0xC0B0 0xC721 # HANGUL SYLLABLE IEUNG-YU-KIYEOK -0xC0B1 0xC724 # HANGUL SYLLABLE IEUNG-YU-NIEUN -0xC0B2 0xC728 # HANGUL SYLLABLE IEUNG-YU-RIEUL -0xC0B3 0xC730 # HANGUL SYLLABLE IEUNG-YU-MIEUM -0xC0B4 0xC731 # HANGUL SYLLABLE IEUNG-YU-PIEUP -0xC0B5 0xC733 # HANGUL SYLLABLE IEUNG-YU-SIOS -0xC0B6 0xC735 # HANGUL SYLLABLE IEUNG-YU-IEUNG -0xC0B7 0xC737 # HANGUL SYLLABLE IEUNG-YU-CHIEUCH -0xC0B8 0xC73C # HANGUL SYLLABLE IEUNG-EU -0xC0B9 0xC73D # HANGUL SYLLABLE IEUNG-EU-KIYEOK -0xC0BA 0xC740 # HANGUL SYLLABLE IEUNG-EU-NIEUN -0xC0BB 0xC744 # HANGUL SYLLABLE IEUNG-EU-RIEUL -0xC0BC 0xC74A # HANGUL SYLLABLE IEUNG-EU-RIEULPHIEUPH -0xC0BD 0xC74C # HANGUL SYLLABLE IEUNG-EU-MIEUM -0xC0BE 0xC74D # HANGUL SYLLABLE IEUNG-EU-PIEUP -0xC0BF 0xC74F # HANGUL SYLLABLE IEUNG-EU-SIOS -0xC0C0 0xC751 # HANGUL SYLLABLE IEUNG-EU-IEUNG -0xC0C1 0xC752 # HANGUL SYLLABLE IEUNG-EU-CIEUC -0xC0C2 0xC753 # HANGUL SYLLABLE IEUNG-EU-CHIEUCH -0xC0C3 0xC754 # HANGUL SYLLABLE IEUNG-EU-KHIEUKH -0xC0C4 0xC755 # HANGUL SYLLABLE IEUNG-EU-THIEUTH -0xC0C5 0xC756 # HANGUL SYLLABLE IEUNG-EU-PHIEUPH -0xC0C6 0xC757 # HANGUL SYLLABLE IEUNG-EU-HIEUH -0xC0C7 0xC758 # HANGUL SYLLABLE IEUNG-YI -0xC0C8 0xC75C # HANGUL SYLLABLE IEUNG-YI-NIEUN -0xC0C9 0xC760 # HANGUL SYLLABLE IEUNG-YI-RIEUL -0xC0CA 0xC768 # HANGUL SYLLABLE IEUNG-YI-MIEUM -0xC0CB 0xC76B # HANGUL SYLLABLE IEUNG-YI-SIOS -0xC0CC 0xC774 # HANGUL SYLLABLE IEUNG-I -0xC0CD 0xC775 # HANGUL SYLLABLE IEUNG-I-KIYEOK -0xC0CE 0xC778 # HANGUL SYLLABLE IEUNG-I-NIEUN -0xC0CF 0xC77C # HANGUL SYLLABLE IEUNG-I-RIEUL -0xC0D0 0xC77D # HANGUL SYLLABLE IEUNG-I-RIEULKIYEOK -0xC0D1 0xC77E # HANGUL SYLLABLE IEUNG-I-RIEULMIEUM -0xC0D2 0xC783 # HANGUL SYLLABLE IEUNG-I-RIEULHIEUH -0xC0D3 0xC784 # HANGUL SYLLABLE IEUNG-I-MIEUM -0xC0D4 0xC785 # HANGUL SYLLABLE IEUNG-I-PIEUP -0xC0D5 0xC787 # HANGUL SYLLABLE IEUNG-I-SIOS -0xC0D6 0xC788 # HANGUL SYLLABLE IEUNG-I-SSANGSIOS -0xC0D7 0xC789 # HANGUL SYLLABLE IEUNG-I-IEUNG -0xC0D8 0xC78A # HANGUL SYLLABLE IEUNG-I-CIEUC -0xC0D9 0xC78E # HANGUL SYLLABLE IEUNG-I-PHIEUPH -0xC0DA 0xC790 # HANGUL SYLLABLE CIEUC-A -0xC0DB 0xC791 # HANGUL SYLLABLE CIEUC-A-KIYEOK -0xC0DC 0xC794 # HANGUL SYLLABLE CIEUC-A-NIEUN -0xC0DD 0xC796 # HANGUL SYLLABLE CIEUC-A-NIEUNHIEUH -0xC0DE 0xC797 # HANGUL SYLLABLE CIEUC-A-TIKEUT -0xC0DF 0xC798 # HANGUL SYLLABLE CIEUC-A-RIEUL -0xC0E0 0xC79A # HANGUL SYLLABLE CIEUC-A-RIEULMIEUM -0xC0E1 0xC7A0 # HANGUL SYLLABLE CIEUC-A-MIEUM -0xC0E2 0xC7A1 # HANGUL SYLLABLE CIEUC-A-PIEUP -0xC0E3 0xC7A3 # HANGUL SYLLABLE CIEUC-A-SIOS -0xC0E4 0xC7A4 # HANGUL SYLLABLE CIEUC-A-SSANGSIOS -0xC0E5 0xC7A5 # HANGUL SYLLABLE CIEUC-A-IEUNG -0xC0E6 0xC7A6 # HANGUL SYLLABLE CIEUC-A-CIEUC -0xC0E7 0xC7AC # HANGUL SYLLABLE CIEUC-AE -0xC0E8 0xC7AD # HANGUL SYLLABLE CIEUC-AE-KIYEOK -0xC0E9 0xC7B0 # HANGUL SYLLABLE CIEUC-AE-NIEUN -0xC0EA 0xC7B4 # HANGUL SYLLABLE CIEUC-AE-RIEUL -0xC0EB 0xC7BC # HANGUL SYLLABLE CIEUC-AE-MIEUM -0xC0EC 0xC7BD # HANGUL SYLLABLE CIEUC-AE-PIEUP -0xC0ED 0xC7BF # HANGUL SYLLABLE CIEUC-AE-SIOS -0xC0EE 0xC7C0 # HANGUL SYLLABLE CIEUC-AE-SSANGSIOS -0xC0EF 0xC7C1 # HANGUL SYLLABLE CIEUC-AE-IEUNG -0xC0F0 0xC7C8 # HANGUL SYLLABLE CIEUC-YA -0xC0F1 0xC7C9 # HANGUL SYLLABLE CIEUC-YA-KIYEOK -0xC0F2 0xC7CC # HANGUL SYLLABLE CIEUC-YA-NIEUN -0xC0F3 0xC7CE # HANGUL SYLLABLE CIEUC-YA-NIEUNHIEUH -0xC0F4 0xC7D0 # HANGUL SYLLABLE CIEUC-YA-RIEUL -0xC0F5 0xC7D8 # HANGUL SYLLABLE CIEUC-YA-MIEUM -0xC0F6 0xC7DD # HANGUL SYLLABLE CIEUC-YA-IEUNG -0xC0F7 0xC7E4 # HANGUL SYLLABLE CIEUC-YAE -0xC0F8 0xC7E8 # HANGUL SYLLABLE CIEUC-YAE-NIEUN -0xC0F9 0xC7EC # HANGUL SYLLABLE CIEUC-YAE-RIEUL -0xC0FA 0xC800 # HANGUL SYLLABLE CIEUC-EO -0xC0FB 0xC801 # HANGUL SYLLABLE CIEUC-EO-KIYEOK -0xC0FC 0xC804 # HANGUL SYLLABLE CIEUC-EO-NIEUN -0xC0FD 0xC808 # HANGUL SYLLABLE CIEUC-EO-RIEUL -0xC0FE 0xC80A # HANGUL SYLLABLE CIEUC-EO-RIEULMIEUM -0xC141 0xD564 # HANGUL SYLLABLE HIEUH-A-RIEULSIOS -0xC142 0xD566 # HANGUL SYLLABLE HIEUH-A-RIEULPHIEUPH -0xC143 0xD567 # HANGUL SYLLABLE HIEUH-A-RIEULHIEUH -0xC144 0xD56A # HANGUL SYLLABLE HIEUH-A-PIEUPSIOS -0xC145 0xD56C # HANGUL SYLLABLE HIEUH-A-SSANGSIOS -0xC146 0xD56E # HANGUL SYLLABLE HIEUH-A-CIEUC -0xC147 0xD56F # HANGUL SYLLABLE HIEUH-A-CHIEUCH -0xC148 0xD570 # HANGUL SYLLABLE HIEUH-A-KHIEUKH -0xC149 0xD571 # HANGUL SYLLABLE HIEUH-A-THIEUTH -0xC14A 0xD572 # HANGUL SYLLABLE HIEUH-A-PHIEUPH -0xC14B 0xD573 # HANGUL SYLLABLE HIEUH-A-HIEUH -0xC14C 0xD576 # HANGUL SYLLABLE HIEUH-AE-SSANGKIYEOK -0xC14D 0xD577 # HANGUL SYLLABLE HIEUH-AE-KIYEOKSIOS -0xC14E 0xD579 # HANGUL SYLLABLE HIEUH-AE-NIEUNCIEUC -0xC14F 0xD57A # HANGUL SYLLABLE HIEUH-AE-NIEUNHIEUH -0xC150 0xD57B # HANGUL SYLLABLE HIEUH-AE-TIKEUT -0xC151 0xD57D # HANGUL SYLLABLE HIEUH-AE-RIEULKIYEOK -0xC152 0xD57E # HANGUL SYLLABLE HIEUH-AE-RIEULMIEUM -0xC153 0xD57F # HANGUL SYLLABLE HIEUH-AE-RIEULPIEUP -0xC154 0xD580 # HANGUL SYLLABLE HIEUH-AE-RIEULSIOS -0xC155 0xD581 # HANGUL SYLLABLE HIEUH-AE-RIEULTHIEUTH -0xC156 0xD582 # HANGUL SYLLABLE HIEUH-AE-RIEULPHIEUPH -0xC157 0xD583 # HANGUL SYLLABLE HIEUH-AE-RIEULHIEUH -0xC158 0xD586 # HANGUL SYLLABLE HIEUH-AE-PIEUPSIOS -0xC159 0xD58A # HANGUL SYLLABLE HIEUH-AE-CIEUC -0xC15A 0xD58B # HANGUL SYLLABLE HIEUH-AE-CHIEUCH -0xC161 0xD58C # HANGUL SYLLABLE HIEUH-AE-KHIEUKH -0xC162 0xD58D # HANGUL SYLLABLE HIEUH-AE-THIEUTH -0xC163 0xD58E # HANGUL SYLLABLE HIEUH-AE-PHIEUPH -0xC164 0xD58F # HANGUL SYLLABLE HIEUH-AE-HIEUH -0xC165 0xD591 # HANGUL SYLLABLE HIEUH-YA-KIYEOK -0xC166 0xD592 # HANGUL SYLLABLE HIEUH-YA-SSANGKIYEOK -0xC167 0xD593 # HANGUL SYLLABLE HIEUH-YA-KIYEOKSIOS -0xC168 0xD594 # HANGUL SYLLABLE HIEUH-YA-NIEUN -0xC169 0xD595 # HANGUL SYLLABLE HIEUH-YA-NIEUNCIEUC -0xC16A 0xD596 # HANGUL SYLLABLE HIEUH-YA-NIEUNHIEUH -0xC16B 0xD597 # HANGUL SYLLABLE HIEUH-YA-TIKEUT -0xC16C 0xD598 # HANGUL SYLLABLE HIEUH-YA-RIEUL -0xC16D 0xD599 # HANGUL SYLLABLE HIEUH-YA-RIEULKIYEOK -0xC16E 0xD59A # HANGUL SYLLABLE HIEUH-YA-RIEULMIEUM -0xC16F 0xD59B # HANGUL SYLLABLE HIEUH-YA-RIEULPIEUP -0xC170 0xD59C # HANGUL SYLLABLE HIEUH-YA-RIEULSIOS -0xC171 0xD59D # HANGUL SYLLABLE HIEUH-YA-RIEULTHIEUTH -0xC172 0xD59E # HANGUL SYLLABLE HIEUH-YA-RIEULPHIEUPH -0xC173 0xD59F # HANGUL SYLLABLE HIEUH-YA-RIEULHIEUH -0xC174 0xD5A0 # HANGUL SYLLABLE HIEUH-YA-MIEUM -0xC175 0xD5A1 # HANGUL SYLLABLE HIEUH-YA-PIEUP -0xC176 0xD5A2 # HANGUL SYLLABLE HIEUH-YA-PIEUPSIOS -0xC177 0xD5A3 # HANGUL SYLLABLE HIEUH-YA-SIOS -0xC178 0xD5A4 # HANGUL SYLLABLE HIEUH-YA-SSANGSIOS -0xC179 0xD5A6 # HANGUL SYLLABLE HIEUH-YA-CIEUC -0xC17A 0xD5A7 # HANGUL SYLLABLE HIEUH-YA-CHIEUCH -0xC181 0xD5A8 # HANGUL SYLLABLE HIEUH-YA-KHIEUKH -0xC182 0xD5A9 # HANGUL SYLLABLE HIEUH-YA-THIEUTH -0xC183 0xD5AA # HANGUL SYLLABLE HIEUH-YA-PHIEUPH -0xC184 0xD5AB # HANGUL SYLLABLE HIEUH-YA-HIEUH -0xC185 0xD5AC # HANGUL SYLLABLE HIEUH-YAE -0xC186 0xD5AD # HANGUL SYLLABLE HIEUH-YAE-KIYEOK -0xC187 0xD5AE # HANGUL SYLLABLE HIEUH-YAE-SSANGKIYEOK -0xC188 0xD5AF # HANGUL SYLLABLE HIEUH-YAE-KIYEOKSIOS -0xC189 0xD5B0 # HANGUL SYLLABLE HIEUH-YAE-NIEUN -0xC18A 0xD5B1 # HANGUL SYLLABLE HIEUH-YAE-NIEUNCIEUC -0xC18B 0xD5B2 # HANGUL SYLLABLE HIEUH-YAE-NIEUNHIEUH -0xC18C 0xD5B3 # HANGUL SYLLABLE HIEUH-YAE-TIKEUT -0xC18D 0xD5B4 # HANGUL SYLLABLE HIEUH-YAE-RIEUL -0xC18E 0xD5B5 # HANGUL SYLLABLE HIEUH-YAE-RIEULKIYEOK -0xC18F 0xD5B6 # HANGUL SYLLABLE HIEUH-YAE-RIEULMIEUM -0xC190 0xD5B7 # HANGUL SYLLABLE HIEUH-YAE-RIEULPIEUP -0xC191 0xD5B8 # HANGUL SYLLABLE HIEUH-YAE-RIEULSIOS -0xC192 0xD5B9 # HANGUL SYLLABLE HIEUH-YAE-RIEULTHIEUTH -0xC193 0xD5BA # HANGUL SYLLABLE HIEUH-YAE-RIEULPHIEUPH -0xC194 0xD5BB # HANGUL SYLLABLE HIEUH-YAE-RIEULHIEUH -0xC195 0xD5BC # HANGUL SYLLABLE HIEUH-YAE-MIEUM -0xC196 0xD5BD # HANGUL SYLLABLE HIEUH-YAE-PIEUP -0xC197 0xD5BE # HANGUL SYLLABLE HIEUH-YAE-PIEUPSIOS -0xC198 0xD5BF # HANGUL SYLLABLE HIEUH-YAE-SIOS -0xC199 0xD5C0 # HANGUL SYLLABLE HIEUH-YAE-SSANGSIOS -0xC19A 0xD5C1 # HANGUL SYLLABLE HIEUH-YAE-IEUNG -0xC19B 0xD5C2 # HANGUL SYLLABLE HIEUH-YAE-CIEUC -0xC19C 0xD5C3 # HANGUL SYLLABLE HIEUH-YAE-CHIEUCH -0xC19D 0xD5C4 # HANGUL SYLLABLE HIEUH-YAE-KHIEUKH -0xC19E 0xD5C5 # HANGUL SYLLABLE HIEUH-YAE-THIEUTH -0xC19F 0xD5C6 # HANGUL SYLLABLE HIEUH-YAE-PHIEUPH -0xC1A0 0xD5C7 # HANGUL SYLLABLE HIEUH-YAE-HIEUH -0xC1A1 0xC810 # HANGUL SYLLABLE CIEUC-EO-MIEUM -0xC1A2 0xC811 # HANGUL SYLLABLE CIEUC-EO-PIEUP -0xC1A3 0xC813 # HANGUL SYLLABLE CIEUC-EO-SIOS -0xC1A4 0xC815 # HANGUL SYLLABLE CIEUC-EO-IEUNG -0xC1A5 0xC816 # HANGUL SYLLABLE CIEUC-EO-CIEUC -0xC1A6 0xC81C # HANGUL SYLLABLE CIEUC-E -0xC1A7 0xC81D # HANGUL SYLLABLE CIEUC-E-KIYEOK -0xC1A8 0xC820 # HANGUL SYLLABLE CIEUC-E-NIEUN -0xC1A9 0xC824 # HANGUL SYLLABLE CIEUC-E-RIEUL -0xC1AA 0xC82C # HANGUL SYLLABLE CIEUC-E-MIEUM -0xC1AB 0xC82D # HANGUL SYLLABLE CIEUC-E-PIEUP -0xC1AC 0xC82F # HANGUL SYLLABLE CIEUC-E-SIOS -0xC1AD 0xC831 # HANGUL SYLLABLE CIEUC-E-IEUNG -0xC1AE 0xC838 # HANGUL SYLLABLE CIEUC-YEO -0xC1AF 0xC83C # HANGUL SYLLABLE CIEUC-YEO-NIEUN -0xC1B0 0xC840 # HANGUL SYLLABLE CIEUC-YEO-RIEUL -0xC1B1 0xC848 # HANGUL SYLLABLE CIEUC-YEO-MIEUM -0xC1B2 0xC849 # HANGUL SYLLABLE CIEUC-YEO-PIEUP -0xC1B3 0xC84C # HANGUL SYLLABLE CIEUC-YEO-SSANGSIOS -0xC1B4 0xC84D # HANGUL SYLLABLE CIEUC-YEO-IEUNG -0xC1B5 0xC854 # HANGUL SYLLABLE CIEUC-YE -0xC1B6 0xC870 # HANGUL SYLLABLE CIEUC-O -0xC1B7 0xC871 # HANGUL SYLLABLE CIEUC-O-KIYEOK -0xC1B8 0xC874 # HANGUL SYLLABLE CIEUC-O-NIEUN -0xC1B9 0xC878 # HANGUL SYLLABLE CIEUC-O-RIEUL -0xC1BA 0xC87A # HANGUL SYLLABLE CIEUC-O-RIEULMIEUM -0xC1BB 0xC880 # HANGUL SYLLABLE CIEUC-O-MIEUM -0xC1BC 0xC881 # HANGUL SYLLABLE CIEUC-O-PIEUP -0xC1BD 0xC883 # HANGUL SYLLABLE CIEUC-O-SIOS -0xC1BE 0xC885 # HANGUL SYLLABLE CIEUC-O-IEUNG -0xC1BF 0xC886 # HANGUL SYLLABLE CIEUC-O-CIEUC -0xC1C0 0xC887 # HANGUL SYLLABLE CIEUC-O-CHIEUCH -0xC1C1 0xC88B # HANGUL SYLLABLE CIEUC-O-HIEUH -0xC1C2 0xC88C # HANGUL SYLLABLE CIEUC-WA -0xC1C3 0xC88D # HANGUL SYLLABLE CIEUC-WA-KIYEOK -0xC1C4 0xC894 # HANGUL SYLLABLE CIEUC-WA-RIEUL -0xC1C5 0xC89D # HANGUL SYLLABLE CIEUC-WA-PIEUP -0xC1C6 0xC89F # HANGUL SYLLABLE CIEUC-WA-SIOS -0xC1C7 0xC8A1 # HANGUL SYLLABLE CIEUC-WA-IEUNG -0xC1C8 0xC8A8 # HANGUL SYLLABLE CIEUC-WAE -0xC1C9 0xC8BC # HANGUL SYLLABLE CIEUC-WAE-SSANGSIOS -0xC1CA 0xC8BD # HANGUL SYLLABLE CIEUC-WAE-IEUNG -0xC1CB 0xC8C4 # HANGUL SYLLABLE CIEUC-OE -0xC1CC 0xC8C8 # HANGUL SYLLABLE CIEUC-OE-NIEUN -0xC1CD 0xC8CC # HANGUL SYLLABLE CIEUC-OE-RIEUL -0xC1CE 0xC8D4 # HANGUL SYLLABLE CIEUC-OE-MIEUM -0xC1CF 0xC8D5 # HANGUL SYLLABLE CIEUC-OE-PIEUP -0xC1D0 0xC8D7 # HANGUL SYLLABLE CIEUC-OE-SIOS -0xC1D1 0xC8D9 # HANGUL SYLLABLE CIEUC-OE-IEUNG -0xC1D2 0xC8E0 # HANGUL SYLLABLE CIEUC-YO -0xC1D3 0xC8E1 # HANGUL SYLLABLE CIEUC-YO-KIYEOK -0xC1D4 0xC8E4 # HANGUL SYLLABLE CIEUC-YO-NIEUN -0xC1D5 0xC8F5 # HANGUL SYLLABLE CIEUC-YO-IEUNG -0xC1D6 0xC8FC # HANGUL SYLLABLE CIEUC-U -0xC1D7 0xC8FD # HANGUL SYLLABLE CIEUC-U-KIYEOK -0xC1D8 0xC900 # HANGUL SYLLABLE CIEUC-U-NIEUN -0xC1D9 0xC904 # HANGUL SYLLABLE CIEUC-U-RIEUL -0xC1DA 0xC905 # HANGUL SYLLABLE CIEUC-U-RIEULKIYEOK -0xC1DB 0xC906 # HANGUL SYLLABLE CIEUC-U-RIEULMIEUM -0xC1DC 0xC90C # HANGUL SYLLABLE CIEUC-U-MIEUM -0xC1DD 0xC90D # HANGUL SYLLABLE CIEUC-U-PIEUP -0xC1DE 0xC90F # HANGUL SYLLABLE CIEUC-U-SIOS -0xC1DF 0xC911 # HANGUL SYLLABLE CIEUC-U-IEUNG -0xC1E0 0xC918 # HANGUL SYLLABLE CIEUC-WEO -0xC1E1 0xC92C # HANGUL SYLLABLE CIEUC-WEO-SSANGSIOS -0xC1E2 0xC934 # HANGUL SYLLABLE CIEUC-WE -0xC1E3 0xC950 # HANGUL SYLLABLE CIEUC-WI -0xC1E4 0xC951 # HANGUL SYLLABLE CIEUC-WI-KIYEOK -0xC1E5 0xC954 # HANGUL SYLLABLE CIEUC-WI-NIEUN -0xC1E6 0xC958 # HANGUL SYLLABLE CIEUC-WI-RIEUL -0xC1E7 0xC960 # HANGUL SYLLABLE CIEUC-WI-MIEUM -0xC1E8 0xC961 # HANGUL SYLLABLE CIEUC-WI-PIEUP -0xC1E9 0xC963 # HANGUL SYLLABLE CIEUC-WI-SIOS -0xC1EA 0xC96C # HANGUL SYLLABLE CIEUC-YU -0xC1EB 0xC970 # HANGUL SYLLABLE CIEUC-YU-NIEUN -0xC1EC 0xC974 # HANGUL SYLLABLE CIEUC-YU-RIEUL -0xC1ED 0xC97C # HANGUL SYLLABLE CIEUC-YU-MIEUM -0xC1EE 0xC988 # HANGUL SYLLABLE CIEUC-EU -0xC1EF 0xC989 # HANGUL SYLLABLE CIEUC-EU-KIYEOK -0xC1F0 0xC98C # HANGUL SYLLABLE CIEUC-EU-NIEUN -0xC1F1 0xC990 # HANGUL SYLLABLE CIEUC-EU-RIEUL -0xC1F2 0xC998 # HANGUL SYLLABLE CIEUC-EU-MIEUM -0xC1F3 0xC999 # HANGUL SYLLABLE CIEUC-EU-PIEUP -0xC1F4 0xC99B # HANGUL SYLLABLE CIEUC-EU-SIOS -0xC1F5 0xC99D # HANGUL SYLLABLE CIEUC-EU-IEUNG -0xC1F6 0xC9C0 # HANGUL SYLLABLE CIEUC-I -0xC1F7 0xC9C1 # HANGUL SYLLABLE CIEUC-I-KIYEOK -0xC1F8 0xC9C4 # HANGUL SYLLABLE CIEUC-I-NIEUN -0xC1F9 0xC9C7 # HANGUL SYLLABLE CIEUC-I-TIKEUT -0xC1FA 0xC9C8 # HANGUL SYLLABLE CIEUC-I-RIEUL -0xC1FB 0xC9CA # HANGUL SYLLABLE CIEUC-I-RIEULMIEUM -0xC1FC 0xC9D0 # HANGUL SYLLABLE CIEUC-I-MIEUM -0xC1FD 0xC9D1 # HANGUL SYLLABLE CIEUC-I-PIEUP -0xC1FE 0xC9D3 # HANGUL SYLLABLE CIEUC-I-SIOS -0xC241 0xD5CA # HANGUL SYLLABLE HIEUH-EO-SSANGKIYEOK -0xC242 0xD5CB # HANGUL SYLLABLE HIEUH-EO-KIYEOKSIOS -0xC243 0xD5CD # HANGUL SYLLABLE HIEUH-EO-NIEUNCIEUC -0xC244 0xD5CE # HANGUL SYLLABLE HIEUH-EO-NIEUNHIEUH -0xC245 0xD5CF # HANGUL SYLLABLE HIEUH-EO-TIKEUT -0xC246 0xD5D1 # HANGUL SYLLABLE HIEUH-EO-RIEULKIYEOK -0xC247 0xD5D3 # HANGUL SYLLABLE HIEUH-EO-RIEULPIEUP -0xC248 0xD5D4 # HANGUL SYLLABLE HIEUH-EO-RIEULSIOS -0xC249 0xD5D5 # HANGUL SYLLABLE HIEUH-EO-RIEULTHIEUTH -0xC24A 0xD5D6 # HANGUL SYLLABLE HIEUH-EO-RIEULPHIEUPH -0xC24B 0xD5D7 # HANGUL SYLLABLE HIEUH-EO-RIEULHIEUH -0xC24C 0xD5DA # HANGUL SYLLABLE HIEUH-EO-PIEUPSIOS -0xC24D 0xD5DC # HANGUL SYLLABLE HIEUH-EO-SSANGSIOS -0xC24E 0xD5DE # HANGUL SYLLABLE HIEUH-EO-CIEUC -0xC24F 0xD5DF # HANGUL SYLLABLE HIEUH-EO-CHIEUCH -0xC250 0xD5E0 # HANGUL SYLLABLE HIEUH-EO-KHIEUKH -0xC251 0xD5E1 # HANGUL SYLLABLE HIEUH-EO-THIEUTH -0xC252 0xD5E2 # HANGUL SYLLABLE HIEUH-EO-PHIEUPH -0xC253 0xD5E3 # HANGUL SYLLABLE HIEUH-EO-HIEUH -0xC254 0xD5E6 # HANGUL SYLLABLE HIEUH-E-SSANGKIYEOK -0xC255 0xD5E7 # HANGUL SYLLABLE HIEUH-E-KIYEOKSIOS -0xC256 0xD5E9 # HANGUL SYLLABLE HIEUH-E-NIEUNCIEUC -0xC257 0xD5EA # HANGUL SYLLABLE HIEUH-E-NIEUNHIEUH -0xC258 0xD5EB # HANGUL SYLLABLE HIEUH-E-TIKEUT -0xC259 0xD5ED # HANGUL SYLLABLE HIEUH-E-RIEULKIYEOK -0xC25A 0xD5EE # HANGUL SYLLABLE HIEUH-E-RIEULMIEUM -0xC261 0xD5EF # HANGUL SYLLABLE HIEUH-E-RIEULPIEUP -0xC262 0xD5F0 # HANGUL SYLLABLE HIEUH-E-RIEULSIOS -0xC263 0xD5F1 # HANGUL SYLLABLE HIEUH-E-RIEULTHIEUTH -0xC264 0xD5F2 # HANGUL SYLLABLE HIEUH-E-RIEULPHIEUPH -0xC265 0xD5F3 # HANGUL SYLLABLE HIEUH-E-RIEULHIEUH -0xC266 0xD5F6 # HANGUL SYLLABLE HIEUH-E-PIEUPSIOS -0xC267 0xD5F8 # HANGUL SYLLABLE HIEUH-E-SSANGSIOS -0xC268 0xD5FA # HANGUL SYLLABLE HIEUH-E-CIEUC -0xC269 0xD5FB # HANGUL SYLLABLE HIEUH-E-CHIEUCH -0xC26A 0xD5FC # HANGUL SYLLABLE HIEUH-E-KHIEUKH -0xC26B 0xD5FD # HANGUL SYLLABLE HIEUH-E-THIEUTH -0xC26C 0xD5FE # HANGUL SYLLABLE HIEUH-E-PHIEUPH -0xC26D 0xD5FF # HANGUL SYLLABLE HIEUH-E-HIEUH -0xC26E 0xD602 # HANGUL SYLLABLE HIEUH-YEO-SSANGKIYEOK -0xC26F 0xD603 # HANGUL SYLLABLE HIEUH-YEO-KIYEOKSIOS -0xC270 0xD605 # HANGUL SYLLABLE HIEUH-YEO-NIEUNCIEUC -0xC271 0xD606 # HANGUL SYLLABLE HIEUH-YEO-NIEUNHIEUH -0xC272 0xD607 # HANGUL SYLLABLE HIEUH-YEO-TIKEUT -0xC273 0xD609 # HANGUL SYLLABLE HIEUH-YEO-RIEULKIYEOK -0xC274 0xD60A # HANGUL SYLLABLE HIEUH-YEO-RIEULMIEUM -0xC275 0xD60B # HANGUL SYLLABLE HIEUH-YEO-RIEULPIEUP -0xC276 0xD60C # HANGUL SYLLABLE HIEUH-YEO-RIEULSIOS -0xC277 0xD60D # HANGUL SYLLABLE HIEUH-YEO-RIEULTHIEUTH -0xC278 0xD60E # HANGUL SYLLABLE HIEUH-YEO-RIEULPHIEUPH -0xC279 0xD60F # HANGUL SYLLABLE HIEUH-YEO-RIEULHIEUH -0xC27A 0xD612 # HANGUL SYLLABLE HIEUH-YEO-PIEUPSIOS -0xC281 0xD616 # HANGUL SYLLABLE HIEUH-YEO-CIEUC -0xC282 0xD617 # HANGUL SYLLABLE HIEUH-YEO-CHIEUCH -0xC283 0xD618 # HANGUL SYLLABLE HIEUH-YEO-KHIEUKH -0xC284 0xD619 # HANGUL SYLLABLE HIEUH-YEO-THIEUTH -0xC285 0xD61A # HANGUL SYLLABLE HIEUH-YEO-PHIEUPH -0xC286 0xD61B # HANGUL SYLLABLE HIEUH-YEO-HIEUH -0xC287 0xD61D # HANGUL SYLLABLE HIEUH-YE-KIYEOK -0xC288 0xD61E # HANGUL SYLLABLE HIEUH-YE-SSANGKIYEOK -0xC289 0xD61F # HANGUL SYLLABLE HIEUH-YE-KIYEOKSIOS -0xC28A 0xD621 # HANGUL SYLLABLE HIEUH-YE-NIEUNCIEUC -0xC28B 0xD622 # HANGUL SYLLABLE HIEUH-YE-NIEUNHIEUH -0xC28C 0xD623 # HANGUL SYLLABLE HIEUH-YE-TIKEUT -0xC28D 0xD625 # HANGUL SYLLABLE HIEUH-YE-RIEULKIYEOK -0xC28E 0xD626 # HANGUL SYLLABLE HIEUH-YE-RIEULMIEUM -0xC28F 0xD627 # HANGUL SYLLABLE HIEUH-YE-RIEULPIEUP -0xC290 0xD628 # HANGUL SYLLABLE HIEUH-YE-RIEULSIOS -0xC291 0xD629 # HANGUL SYLLABLE HIEUH-YE-RIEULTHIEUTH -0xC292 0xD62A # HANGUL SYLLABLE HIEUH-YE-RIEULPHIEUPH -0xC293 0xD62B # HANGUL SYLLABLE HIEUH-YE-RIEULHIEUH -0xC294 0xD62C # HANGUL SYLLABLE HIEUH-YE-MIEUM -0xC295 0xD62E # HANGUL SYLLABLE HIEUH-YE-PIEUPSIOS -0xC296 0xD62F # HANGUL SYLLABLE HIEUH-YE-SIOS -0xC297 0xD630 # HANGUL SYLLABLE HIEUH-YE-SSANGSIOS -0xC298 0xD631 # HANGUL SYLLABLE HIEUH-YE-IEUNG -0xC299 0xD632 # HANGUL SYLLABLE HIEUH-YE-CIEUC -0xC29A 0xD633 # HANGUL SYLLABLE HIEUH-YE-CHIEUCH -0xC29B 0xD634 # HANGUL SYLLABLE HIEUH-YE-KHIEUKH -0xC29C 0xD635 # HANGUL SYLLABLE HIEUH-YE-THIEUTH -0xC29D 0xD636 # HANGUL SYLLABLE HIEUH-YE-PHIEUPH -0xC29E 0xD637 # HANGUL SYLLABLE HIEUH-YE-HIEUH -0xC29F 0xD63A # HANGUL SYLLABLE HIEUH-O-SSANGKIYEOK -0xC2A0 0xD63B # HANGUL SYLLABLE HIEUH-O-KIYEOKSIOS -0xC2A1 0xC9D5 # HANGUL SYLLABLE CIEUC-I-IEUNG -0xC2A2 0xC9D6 # HANGUL SYLLABLE CIEUC-I-CIEUC -0xC2A3 0xC9D9 # HANGUL SYLLABLE CIEUC-I-THIEUTH -0xC2A4 0xC9DA # HANGUL SYLLABLE CIEUC-I-PHIEUPH -0xC2A5 0xC9DC # HANGUL SYLLABLE SSANGCIEUC-A -0xC2A6 0xC9DD # HANGUL SYLLABLE SSANGCIEUC-A-KIYEOK -0xC2A7 0xC9E0 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUN -0xC2A8 0xC9E2 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUNHIEUH -0xC2A9 0xC9E4 # HANGUL SYLLABLE SSANGCIEUC-A-RIEUL -0xC2AA 0xC9E7 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULPIEUP -0xC2AB 0xC9EC # HANGUL SYLLABLE SSANGCIEUC-A-MIEUM -0xC2AC 0xC9ED # HANGUL SYLLABLE SSANGCIEUC-A-PIEUP -0xC2AD 0xC9EF # HANGUL SYLLABLE SSANGCIEUC-A-SIOS -0xC2AE 0xC9F0 # HANGUL SYLLABLE SSANGCIEUC-A-SSANGSIOS -0xC2AF 0xC9F1 # HANGUL SYLLABLE SSANGCIEUC-A-IEUNG -0xC2B0 0xC9F8 # HANGUL SYLLABLE SSANGCIEUC-AE -0xC2B1 0xC9F9 # HANGUL SYLLABLE SSANGCIEUC-AE-KIYEOK -0xC2B2 0xC9FC # HANGUL SYLLABLE SSANGCIEUC-AE-NIEUN -0xC2B3 0xCA00 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEUL -0xC2B4 0xCA08 # HANGUL SYLLABLE SSANGCIEUC-AE-MIEUM -0xC2B5 0xCA09 # HANGUL SYLLABLE SSANGCIEUC-AE-PIEUP -0xC2B6 0xCA0B # HANGUL SYLLABLE SSANGCIEUC-AE-SIOS -0xC2B7 0xCA0C # HANGUL SYLLABLE SSANGCIEUC-AE-SSANGSIOS -0xC2B8 0xCA0D # HANGUL SYLLABLE SSANGCIEUC-AE-IEUNG -0xC2B9 0xCA14 # HANGUL SYLLABLE SSANGCIEUC-YA -0xC2BA 0xCA18 # HANGUL SYLLABLE SSANGCIEUC-YA-NIEUN -0xC2BB 0xCA29 # HANGUL SYLLABLE SSANGCIEUC-YA-IEUNG -0xC2BC 0xCA4C # HANGUL SYLLABLE SSANGCIEUC-EO -0xC2BD 0xCA4D # HANGUL SYLLABLE SSANGCIEUC-EO-KIYEOK -0xC2BE 0xCA50 # HANGUL SYLLABLE SSANGCIEUC-EO-NIEUN -0xC2BF 0xCA54 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEUL -0xC2C0 0xCA5C # HANGUL SYLLABLE SSANGCIEUC-EO-MIEUM -0xC2C1 0xCA5D # HANGUL SYLLABLE SSANGCIEUC-EO-PIEUP -0xC2C2 0xCA5F # HANGUL SYLLABLE SSANGCIEUC-EO-SIOS -0xC2C3 0xCA60 # HANGUL SYLLABLE SSANGCIEUC-EO-SSANGSIOS -0xC2C4 0xCA61 # HANGUL SYLLABLE SSANGCIEUC-EO-IEUNG -0xC2C5 0xCA68 # HANGUL SYLLABLE SSANGCIEUC-E -0xC2C6 0xCA7D # HANGUL SYLLABLE SSANGCIEUC-E-IEUNG -0xC2C7 0xCA84 # HANGUL SYLLABLE SSANGCIEUC-YEO -0xC2C8 0xCA98 # HANGUL SYLLABLE SSANGCIEUC-YEO-SSANGSIOS -0xC2C9 0xCABC # HANGUL SYLLABLE SSANGCIEUC-O -0xC2CA 0xCABD # HANGUL SYLLABLE SSANGCIEUC-O-KIYEOK -0xC2CB 0xCAC0 # HANGUL SYLLABLE SSANGCIEUC-O-NIEUN -0xC2CC 0xCAC4 # HANGUL SYLLABLE SSANGCIEUC-O-RIEUL -0xC2CD 0xCACC # HANGUL SYLLABLE SSANGCIEUC-O-MIEUM -0xC2CE 0xCACD # HANGUL SYLLABLE SSANGCIEUC-O-PIEUP -0xC2CF 0xCACF # HANGUL SYLLABLE SSANGCIEUC-O-SIOS -0xC2D0 0xCAD1 # HANGUL SYLLABLE SSANGCIEUC-O-IEUNG -0xC2D1 0xCAD3 # HANGUL SYLLABLE SSANGCIEUC-O-CHIEUCH -0xC2D2 0xCAD8 # HANGUL SYLLABLE SSANGCIEUC-WA -0xC2D3 0xCAD9 # HANGUL SYLLABLE SSANGCIEUC-WA-KIYEOK -0xC2D4 0xCAE0 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEUL -0xC2D5 0xCAEC # HANGUL SYLLABLE SSANGCIEUC-WA-SSANGSIOS -0xC2D6 0xCAF4 # HANGUL SYLLABLE SSANGCIEUC-WAE -0xC2D7 0xCB08 # HANGUL SYLLABLE SSANGCIEUC-WAE-SSANGSIOS -0xC2D8 0xCB10 # HANGUL SYLLABLE SSANGCIEUC-OE -0xC2D9 0xCB14 # HANGUL SYLLABLE SSANGCIEUC-OE-NIEUN -0xC2DA 0xCB18 # HANGUL SYLLABLE SSANGCIEUC-OE-RIEUL -0xC2DB 0xCB20 # HANGUL SYLLABLE SSANGCIEUC-OE-MIEUM -0xC2DC 0xCB21 # HANGUL SYLLABLE SSANGCIEUC-OE-PIEUP -0xC2DD 0xCB41 # HANGUL SYLLABLE SSANGCIEUC-YO-IEUNG -0xC2DE 0xCB48 # HANGUL SYLLABLE SSANGCIEUC-U -0xC2DF 0xCB49 # HANGUL SYLLABLE SSANGCIEUC-U-KIYEOK -0xC2E0 0xCB4C # HANGUL SYLLABLE SSANGCIEUC-U-NIEUN -0xC2E1 0xCB50 # HANGUL SYLLABLE SSANGCIEUC-U-RIEUL -0xC2E2 0xCB58 # HANGUL SYLLABLE SSANGCIEUC-U-MIEUM -0xC2E3 0xCB59 # HANGUL SYLLABLE SSANGCIEUC-U-PIEUP -0xC2E4 0xCB5D # HANGUL SYLLABLE SSANGCIEUC-U-IEUNG -0xC2E5 0xCB64 # HANGUL SYLLABLE SSANGCIEUC-WEO -0xC2E6 0xCB78 # HANGUL SYLLABLE SSANGCIEUC-WEO-SSANGSIOS -0xC2E7 0xCB79 # HANGUL SYLLABLE SSANGCIEUC-WEO-IEUNG -0xC2E8 0xCB9C # HANGUL SYLLABLE SSANGCIEUC-WI -0xC2E9 0xCBB8 # HANGUL SYLLABLE SSANGCIEUC-YU -0xC2EA 0xCBD4 # HANGUL SYLLABLE SSANGCIEUC-EU -0xC2EB 0xCBE4 # HANGUL SYLLABLE SSANGCIEUC-EU-MIEUM -0xC2EC 0xCBE7 # HANGUL SYLLABLE SSANGCIEUC-EU-SIOS -0xC2ED 0xCBE9 # HANGUL SYLLABLE SSANGCIEUC-EU-IEUNG -0xC2EE 0xCC0C # HANGUL SYLLABLE SSANGCIEUC-I -0xC2EF 0xCC0D # HANGUL SYLLABLE SSANGCIEUC-I-KIYEOK -0xC2F0 0xCC10 # HANGUL SYLLABLE SSANGCIEUC-I-NIEUN -0xC2F1 0xCC14 # HANGUL SYLLABLE SSANGCIEUC-I-RIEUL -0xC2F2 0xCC1C # HANGUL SYLLABLE SSANGCIEUC-I-MIEUM -0xC2F3 0xCC1D # HANGUL SYLLABLE SSANGCIEUC-I-PIEUP -0xC2F4 0xCC21 # HANGUL SYLLABLE SSANGCIEUC-I-IEUNG -0xC2F5 0xCC22 # HANGUL SYLLABLE SSANGCIEUC-I-CIEUC -0xC2F6 0xCC27 # HANGUL SYLLABLE SSANGCIEUC-I-HIEUH -0xC2F7 0xCC28 # HANGUL SYLLABLE CHIEUCH-A -0xC2F8 0xCC29 # HANGUL SYLLABLE CHIEUCH-A-KIYEOK -0xC2F9 0xCC2C # HANGUL SYLLABLE CHIEUCH-A-NIEUN -0xC2FA 0xCC2E # HANGUL SYLLABLE CHIEUCH-A-NIEUNHIEUH -0xC2FB 0xCC30 # HANGUL SYLLABLE CHIEUCH-A-RIEUL -0xC2FC 0xCC38 # HANGUL SYLLABLE CHIEUCH-A-MIEUM -0xC2FD 0xCC39 # HANGUL SYLLABLE CHIEUCH-A-PIEUP -0xC2FE 0xCC3B # HANGUL SYLLABLE CHIEUCH-A-SIOS -0xC341 0xD63D # HANGUL SYLLABLE HIEUH-O-NIEUNCIEUC -0xC342 0xD63E # HANGUL SYLLABLE HIEUH-O-NIEUNHIEUH -0xC343 0xD63F # HANGUL SYLLABLE HIEUH-O-TIKEUT -0xC344 0xD641 # HANGUL SYLLABLE HIEUH-O-RIEULKIYEOK -0xC345 0xD642 # HANGUL SYLLABLE HIEUH-O-RIEULMIEUM -0xC346 0xD643 # HANGUL SYLLABLE HIEUH-O-RIEULPIEUP -0xC347 0xD644 # HANGUL SYLLABLE HIEUH-O-RIEULSIOS -0xC348 0xD646 # HANGUL SYLLABLE HIEUH-O-RIEULPHIEUPH -0xC349 0xD647 # HANGUL SYLLABLE HIEUH-O-RIEULHIEUH -0xC34A 0xD64A # HANGUL SYLLABLE HIEUH-O-PIEUPSIOS -0xC34B 0xD64C # HANGUL SYLLABLE HIEUH-O-SSANGSIOS -0xC34C 0xD64E # HANGUL SYLLABLE HIEUH-O-CIEUC -0xC34D 0xD64F # HANGUL SYLLABLE HIEUH-O-CHIEUCH -0xC34E 0xD650 # HANGUL SYLLABLE HIEUH-O-KHIEUKH -0xC34F 0xD652 # HANGUL SYLLABLE HIEUH-O-PHIEUPH -0xC350 0xD653 # HANGUL SYLLABLE HIEUH-O-HIEUH -0xC351 0xD656 # HANGUL SYLLABLE HIEUH-WA-SSANGKIYEOK -0xC352 0xD657 # HANGUL SYLLABLE HIEUH-WA-KIYEOKSIOS -0xC353 0xD659 # HANGUL SYLLABLE HIEUH-WA-NIEUNCIEUC -0xC354 0xD65A # HANGUL SYLLABLE HIEUH-WA-NIEUNHIEUH -0xC355 0xD65B # HANGUL SYLLABLE HIEUH-WA-TIKEUT -0xC356 0xD65D # HANGUL SYLLABLE HIEUH-WA-RIEULKIYEOK -0xC357 0xD65E # HANGUL SYLLABLE HIEUH-WA-RIEULMIEUM -0xC358 0xD65F # HANGUL SYLLABLE HIEUH-WA-RIEULPIEUP -0xC359 0xD660 # HANGUL SYLLABLE HIEUH-WA-RIEULSIOS -0xC35A 0xD661 # HANGUL SYLLABLE HIEUH-WA-RIEULTHIEUTH -0xC361 0xD662 # HANGUL SYLLABLE HIEUH-WA-RIEULPHIEUPH -0xC362 0xD663 # HANGUL SYLLABLE HIEUH-WA-RIEULHIEUH -0xC363 0xD664 # HANGUL SYLLABLE HIEUH-WA-MIEUM -0xC364 0xD665 # HANGUL SYLLABLE HIEUH-WA-PIEUP -0xC365 0xD666 # HANGUL SYLLABLE HIEUH-WA-PIEUPSIOS -0xC366 0xD668 # HANGUL SYLLABLE HIEUH-WA-SSANGSIOS -0xC367 0xD66A # HANGUL SYLLABLE HIEUH-WA-CIEUC -0xC368 0xD66B # HANGUL SYLLABLE HIEUH-WA-CHIEUCH -0xC369 0xD66C # HANGUL SYLLABLE HIEUH-WA-KHIEUKH -0xC36A 0xD66D # HANGUL SYLLABLE HIEUH-WA-THIEUTH -0xC36B 0xD66E # HANGUL SYLLABLE HIEUH-WA-PHIEUPH -0xC36C 0xD66F # HANGUL SYLLABLE HIEUH-WA-HIEUH -0xC36D 0xD672 # HANGUL SYLLABLE HIEUH-WAE-SSANGKIYEOK -0xC36E 0xD673 # HANGUL SYLLABLE HIEUH-WAE-KIYEOKSIOS -0xC36F 0xD675 # HANGUL SYLLABLE HIEUH-WAE-NIEUNCIEUC -0xC370 0xD676 # HANGUL SYLLABLE HIEUH-WAE-NIEUNHIEUH -0xC371 0xD677 # HANGUL SYLLABLE HIEUH-WAE-TIKEUT -0xC372 0xD678 # HANGUL SYLLABLE HIEUH-WAE-RIEUL -0xC373 0xD679 # HANGUL SYLLABLE HIEUH-WAE-RIEULKIYEOK -0xC374 0xD67A # HANGUL SYLLABLE HIEUH-WAE-RIEULMIEUM -0xC375 0xD67B # HANGUL SYLLABLE HIEUH-WAE-RIEULPIEUP -0xC376 0xD67C # HANGUL SYLLABLE HIEUH-WAE-RIEULSIOS -0xC377 0xD67D # HANGUL SYLLABLE HIEUH-WAE-RIEULTHIEUTH -0xC378 0xD67E # HANGUL SYLLABLE HIEUH-WAE-RIEULPHIEUPH -0xC379 0xD67F # HANGUL SYLLABLE HIEUH-WAE-RIEULHIEUH -0xC37A 0xD680 # HANGUL SYLLABLE HIEUH-WAE-MIEUM -0xC381 0xD681 # HANGUL SYLLABLE HIEUH-WAE-PIEUP -0xC382 0xD682 # HANGUL SYLLABLE HIEUH-WAE-PIEUPSIOS -0xC383 0xD684 # HANGUL SYLLABLE HIEUH-WAE-SSANGSIOS -0xC384 0xD686 # HANGUL SYLLABLE HIEUH-WAE-CIEUC -0xC385 0xD687 # HANGUL SYLLABLE HIEUH-WAE-CHIEUCH -0xC386 0xD688 # HANGUL SYLLABLE HIEUH-WAE-KHIEUKH -0xC387 0xD689 # HANGUL SYLLABLE HIEUH-WAE-THIEUTH -0xC388 0xD68A # HANGUL SYLLABLE HIEUH-WAE-PHIEUPH -0xC389 0xD68B # HANGUL SYLLABLE HIEUH-WAE-HIEUH -0xC38A 0xD68E # HANGUL SYLLABLE HIEUH-OE-SSANGKIYEOK -0xC38B 0xD68F # HANGUL SYLLABLE HIEUH-OE-KIYEOKSIOS -0xC38C 0xD691 # HANGUL SYLLABLE HIEUH-OE-NIEUNCIEUC -0xC38D 0xD692 # HANGUL SYLLABLE HIEUH-OE-NIEUNHIEUH -0xC38E 0xD693 # HANGUL SYLLABLE HIEUH-OE-TIKEUT -0xC38F 0xD695 # HANGUL SYLLABLE HIEUH-OE-RIEULKIYEOK -0xC390 0xD696 # HANGUL SYLLABLE HIEUH-OE-RIEULMIEUM -0xC391 0xD697 # HANGUL SYLLABLE HIEUH-OE-RIEULPIEUP -0xC392 0xD698 # HANGUL SYLLABLE HIEUH-OE-RIEULSIOS -0xC393 0xD699 # HANGUL SYLLABLE HIEUH-OE-RIEULTHIEUTH -0xC394 0xD69A # HANGUL SYLLABLE HIEUH-OE-RIEULPHIEUPH -0xC395 0xD69B # HANGUL SYLLABLE HIEUH-OE-RIEULHIEUH -0xC396 0xD69C # HANGUL SYLLABLE HIEUH-OE-MIEUM -0xC397 0xD69E # HANGUL SYLLABLE HIEUH-OE-PIEUPSIOS -0xC398 0xD6A0 # HANGUL SYLLABLE HIEUH-OE-SSANGSIOS -0xC399 0xD6A2 # HANGUL SYLLABLE HIEUH-OE-CIEUC -0xC39A 0xD6A3 # HANGUL SYLLABLE HIEUH-OE-CHIEUCH -0xC39B 0xD6A4 # HANGUL SYLLABLE HIEUH-OE-KHIEUKH -0xC39C 0xD6A5 # HANGUL SYLLABLE HIEUH-OE-THIEUTH -0xC39D 0xD6A6 # HANGUL SYLLABLE HIEUH-OE-PHIEUPH -0xC39E 0xD6A7 # HANGUL SYLLABLE HIEUH-OE-HIEUH -0xC39F 0xD6A9 # HANGUL SYLLABLE HIEUH-YO-KIYEOK -0xC3A0 0xD6AA # HANGUL SYLLABLE HIEUH-YO-SSANGKIYEOK -0xC3A1 0xCC3C # HANGUL SYLLABLE CHIEUCH-A-SSANGSIOS -0xC3A2 0xCC3D # HANGUL SYLLABLE CHIEUCH-A-IEUNG -0xC3A3 0xCC3E # HANGUL SYLLABLE CHIEUCH-A-CIEUC -0xC3A4 0xCC44 # HANGUL SYLLABLE CHIEUCH-AE -0xC3A5 0xCC45 # HANGUL SYLLABLE CHIEUCH-AE-KIYEOK -0xC3A6 0xCC48 # HANGUL SYLLABLE CHIEUCH-AE-NIEUN -0xC3A7 0xCC4C # HANGUL SYLLABLE CHIEUCH-AE-RIEUL -0xC3A8 0xCC54 # HANGUL SYLLABLE CHIEUCH-AE-MIEUM -0xC3A9 0xCC55 # HANGUL SYLLABLE CHIEUCH-AE-PIEUP -0xC3AA 0xCC57 # HANGUL SYLLABLE CHIEUCH-AE-SIOS -0xC3AB 0xCC58 # HANGUL SYLLABLE CHIEUCH-AE-SSANGSIOS -0xC3AC 0xCC59 # HANGUL SYLLABLE CHIEUCH-AE-IEUNG -0xC3AD 0xCC60 # HANGUL SYLLABLE CHIEUCH-YA -0xC3AE 0xCC64 # HANGUL SYLLABLE CHIEUCH-YA-NIEUN -0xC3AF 0xCC66 # HANGUL SYLLABLE CHIEUCH-YA-NIEUNHIEUH -0xC3B0 0xCC68 # HANGUL SYLLABLE CHIEUCH-YA-RIEUL -0xC3B1 0xCC70 # HANGUL SYLLABLE CHIEUCH-YA-MIEUM -0xC3B2 0xCC75 # HANGUL SYLLABLE CHIEUCH-YA-IEUNG -0xC3B3 0xCC98 # HANGUL SYLLABLE CHIEUCH-EO -0xC3B4 0xCC99 # HANGUL SYLLABLE CHIEUCH-EO-KIYEOK -0xC3B5 0xCC9C # HANGUL SYLLABLE CHIEUCH-EO-NIEUN -0xC3B6 0xCCA0 # HANGUL SYLLABLE CHIEUCH-EO-RIEUL -0xC3B7 0xCCA8 # HANGUL SYLLABLE CHIEUCH-EO-MIEUM -0xC3B8 0xCCA9 # HANGUL SYLLABLE CHIEUCH-EO-PIEUP -0xC3B9 0xCCAB # HANGUL SYLLABLE CHIEUCH-EO-SIOS -0xC3BA 0xCCAC # HANGUL SYLLABLE CHIEUCH-EO-SSANGSIOS -0xC3BB 0xCCAD # HANGUL SYLLABLE CHIEUCH-EO-IEUNG -0xC3BC 0xCCB4 # HANGUL SYLLABLE CHIEUCH-E -0xC3BD 0xCCB5 # HANGUL SYLLABLE CHIEUCH-E-KIYEOK -0xC3BE 0xCCB8 # HANGUL SYLLABLE CHIEUCH-E-NIEUN -0xC3BF 0xCCBC # HANGUL SYLLABLE CHIEUCH-E-RIEUL -0xC3C0 0xCCC4 # HANGUL SYLLABLE CHIEUCH-E-MIEUM -0xC3C1 0xCCC5 # HANGUL SYLLABLE CHIEUCH-E-PIEUP -0xC3C2 0xCCC7 # HANGUL SYLLABLE CHIEUCH-E-SIOS -0xC3C3 0xCCC9 # HANGUL SYLLABLE CHIEUCH-E-IEUNG -0xC3C4 0xCCD0 # HANGUL SYLLABLE CHIEUCH-YEO -0xC3C5 0xCCD4 # HANGUL SYLLABLE CHIEUCH-YEO-NIEUN -0xC3C6 0xCCE4 # HANGUL SYLLABLE CHIEUCH-YEO-SSANGSIOS -0xC3C7 0xCCEC # HANGUL SYLLABLE CHIEUCH-YE -0xC3C8 0xCCF0 # HANGUL SYLLABLE CHIEUCH-YE-NIEUN -0xC3C9 0xCD01 # HANGUL SYLLABLE CHIEUCH-YE-IEUNG -0xC3CA 0xCD08 # HANGUL SYLLABLE CHIEUCH-O -0xC3CB 0xCD09 # HANGUL SYLLABLE CHIEUCH-O-KIYEOK -0xC3CC 0xCD0C # HANGUL SYLLABLE CHIEUCH-O-NIEUN -0xC3CD 0xCD10 # HANGUL SYLLABLE CHIEUCH-O-RIEUL -0xC3CE 0xCD18 # HANGUL SYLLABLE CHIEUCH-O-MIEUM -0xC3CF 0xCD19 # HANGUL SYLLABLE CHIEUCH-O-PIEUP -0xC3D0 0xCD1B # HANGUL SYLLABLE CHIEUCH-O-SIOS -0xC3D1 0xCD1D # HANGUL SYLLABLE CHIEUCH-O-IEUNG -0xC3D2 0xCD24 # HANGUL SYLLABLE CHIEUCH-WA -0xC3D3 0xCD28 # HANGUL SYLLABLE CHIEUCH-WA-NIEUN -0xC3D4 0xCD2C # HANGUL SYLLABLE CHIEUCH-WA-RIEUL -0xC3D5 0xCD39 # HANGUL SYLLABLE CHIEUCH-WA-IEUNG -0xC3D6 0xCD5C # HANGUL SYLLABLE CHIEUCH-OE -0xC3D7 0xCD60 # HANGUL SYLLABLE CHIEUCH-OE-NIEUN -0xC3D8 0xCD64 # HANGUL SYLLABLE CHIEUCH-OE-RIEUL -0xC3D9 0xCD6C # HANGUL SYLLABLE CHIEUCH-OE-MIEUM -0xC3DA 0xCD6D # HANGUL SYLLABLE CHIEUCH-OE-PIEUP -0xC3DB 0xCD6F # HANGUL SYLLABLE CHIEUCH-OE-SIOS -0xC3DC 0xCD71 # HANGUL SYLLABLE CHIEUCH-OE-IEUNG -0xC3DD 0xCD78 # HANGUL SYLLABLE CHIEUCH-YO -0xC3DE 0xCD88 # HANGUL SYLLABLE CHIEUCH-YO-MIEUM -0xC3DF 0xCD94 # HANGUL SYLLABLE CHIEUCH-U -0xC3E0 0xCD95 # HANGUL SYLLABLE CHIEUCH-U-KIYEOK -0xC3E1 0xCD98 # HANGUL SYLLABLE CHIEUCH-U-NIEUN -0xC3E2 0xCD9C # HANGUL SYLLABLE CHIEUCH-U-RIEUL -0xC3E3 0xCDA4 # HANGUL SYLLABLE CHIEUCH-U-MIEUM -0xC3E4 0xCDA5 # HANGUL SYLLABLE CHIEUCH-U-PIEUP -0xC3E5 0xCDA7 # HANGUL SYLLABLE CHIEUCH-U-SIOS -0xC3E6 0xCDA9 # HANGUL SYLLABLE CHIEUCH-U-IEUNG -0xC3E7 0xCDB0 # HANGUL SYLLABLE CHIEUCH-WEO -0xC3E8 0xCDC4 # HANGUL SYLLABLE CHIEUCH-WEO-SSANGSIOS -0xC3E9 0xCDCC # HANGUL SYLLABLE CHIEUCH-WE -0xC3EA 0xCDD0 # HANGUL SYLLABLE CHIEUCH-WE-NIEUN -0xC3EB 0xCDE8 # HANGUL SYLLABLE CHIEUCH-WI -0xC3EC 0xCDEC # HANGUL SYLLABLE CHIEUCH-WI-NIEUN -0xC3ED 0xCDF0 # HANGUL SYLLABLE CHIEUCH-WI-RIEUL -0xC3EE 0xCDF8 # HANGUL SYLLABLE CHIEUCH-WI-MIEUM -0xC3EF 0xCDF9 # HANGUL SYLLABLE CHIEUCH-WI-PIEUP -0xC3F0 0xCDFB # HANGUL SYLLABLE CHIEUCH-WI-SIOS -0xC3F1 0xCDFD # HANGUL SYLLABLE CHIEUCH-WI-IEUNG -0xC3F2 0xCE04 # HANGUL SYLLABLE CHIEUCH-YU -0xC3F3 0xCE08 # HANGUL SYLLABLE CHIEUCH-YU-NIEUN -0xC3F4 0xCE0C # HANGUL SYLLABLE CHIEUCH-YU-RIEUL -0xC3F5 0xCE14 # HANGUL SYLLABLE CHIEUCH-YU-MIEUM -0xC3F6 0xCE19 # HANGUL SYLLABLE CHIEUCH-YU-IEUNG -0xC3F7 0xCE20 # HANGUL SYLLABLE CHIEUCH-EU -0xC3F8 0xCE21 # HANGUL SYLLABLE CHIEUCH-EU-KIYEOK -0xC3F9 0xCE24 # HANGUL SYLLABLE CHIEUCH-EU-NIEUN -0xC3FA 0xCE28 # HANGUL SYLLABLE CHIEUCH-EU-RIEUL -0xC3FB 0xCE30 # HANGUL SYLLABLE CHIEUCH-EU-MIEUM -0xC3FC 0xCE31 # HANGUL SYLLABLE CHIEUCH-EU-PIEUP -0xC3FD 0xCE33 # HANGUL SYLLABLE CHIEUCH-EU-SIOS -0xC3FE 0xCE35 # HANGUL SYLLABLE CHIEUCH-EU-IEUNG -0xC441 0xD6AB # HANGUL SYLLABLE HIEUH-YO-KIYEOKSIOS -0xC442 0xD6AD # HANGUL SYLLABLE HIEUH-YO-NIEUNCIEUC -0xC443 0xD6AE # HANGUL SYLLABLE HIEUH-YO-NIEUNHIEUH -0xC444 0xD6AF # HANGUL SYLLABLE HIEUH-YO-TIKEUT -0xC445 0xD6B1 # HANGUL SYLLABLE HIEUH-YO-RIEULKIYEOK -0xC446 0xD6B2 # HANGUL SYLLABLE HIEUH-YO-RIEULMIEUM -0xC447 0xD6B3 # HANGUL SYLLABLE HIEUH-YO-RIEULPIEUP -0xC448 0xD6B4 # HANGUL SYLLABLE HIEUH-YO-RIEULSIOS -0xC449 0xD6B5 # HANGUL SYLLABLE HIEUH-YO-RIEULTHIEUTH -0xC44A 0xD6B6 # HANGUL SYLLABLE HIEUH-YO-RIEULPHIEUPH -0xC44B 0xD6B7 # HANGUL SYLLABLE HIEUH-YO-RIEULHIEUH -0xC44C 0xD6B8 # HANGUL SYLLABLE HIEUH-YO-MIEUM -0xC44D 0xD6BA # HANGUL SYLLABLE HIEUH-YO-PIEUPSIOS -0xC44E 0xD6BC # HANGUL SYLLABLE HIEUH-YO-SSANGSIOS -0xC44F 0xD6BD # HANGUL SYLLABLE HIEUH-YO-IEUNG -0xC450 0xD6BE # HANGUL SYLLABLE HIEUH-YO-CIEUC -0xC451 0xD6BF # HANGUL SYLLABLE HIEUH-YO-CHIEUCH -0xC452 0xD6C0 # HANGUL SYLLABLE HIEUH-YO-KHIEUKH -0xC453 0xD6C1 # HANGUL SYLLABLE HIEUH-YO-THIEUTH -0xC454 0xD6C2 # HANGUL SYLLABLE HIEUH-YO-PHIEUPH -0xC455 0xD6C3 # HANGUL SYLLABLE HIEUH-YO-HIEUH -0xC456 0xD6C6 # HANGUL SYLLABLE HIEUH-U-SSANGKIYEOK -0xC457 0xD6C7 # HANGUL SYLLABLE HIEUH-U-KIYEOKSIOS -0xC458 0xD6C9 # HANGUL SYLLABLE HIEUH-U-NIEUNCIEUC -0xC459 0xD6CA # HANGUL SYLLABLE HIEUH-U-NIEUNHIEUH -0xC45A 0xD6CB # HANGUL SYLLABLE HIEUH-U-TIKEUT -0xC461 0xD6CD # HANGUL SYLLABLE HIEUH-U-RIEULKIYEOK -0xC462 0xD6CE # HANGUL SYLLABLE HIEUH-U-RIEULMIEUM -0xC463 0xD6CF # HANGUL SYLLABLE HIEUH-U-RIEULPIEUP -0xC464 0xD6D0 # HANGUL SYLLABLE HIEUH-U-RIEULSIOS -0xC465 0xD6D2 # HANGUL SYLLABLE HIEUH-U-RIEULPHIEUPH -0xC466 0xD6D3 # HANGUL SYLLABLE HIEUH-U-RIEULHIEUH -0xC467 0xD6D5 # HANGUL SYLLABLE HIEUH-U-PIEUP -0xC468 0xD6D6 # HANGUL SYLLABLE HIEUH-U-PIEUPSIOS -0xC469 0xD6D8 # HANGUL SYLLABLE HIEUH-U-SSANGSIOS -0xC46A 0xD6DA # HANGUL SYLLABLE HIEUH-U-CIEUC -0xC46B 0xD6DB # HANGUL SYLLABLE HIEUH-U-CHIEUCH -0xC46C 0xD6DC # HANGUL SYLLABLE HIEUH-U-KHIEUKH -0xC46D 0xD6DD # HANGUL SYLLABLE HIEUH-U-THIEUTH -0xC46E 0xD6DE # HANGUL SYLLABLE HIEUH-U-PHIEUPH -0xC46F 0xD6DF # HANGUL SYLLABLE HIEUH-U-HIEUH -0xC470 0xD6E1 # HANGUL SYLLABLE HIEUH-WEO-KIYEOK -0xC471 0xD6E2 # HANGUL SYLLABLE HIEUH-WEO-SSANGKIYEOK -0xC472 0xD6E3 # HANGUL SYLLABLE HIEUH-WEO-KIYEOKSIOS -0xC473 0xD6E5 # HANGUL SYLLABLE HIEUH-WEO-NIEUNCIEUC -0xC474 0xD6E6 # HANGUL SYLLABLE HIEUH-WEO-NIEUNHIEUH -0xC475 0xD6E7 # HANGUL SYLLABLE HIEUH-WEO-TIKEUT -0xC476 0xD6E9 # HANGUL SYLLABLE HIEUH-WEO-RIEULKIYEOK -0xC477 0xD6EA # HANGUL SYLLABLE HIEUH-WEO-RIEULMIEUM -0xC478 0xD6EB # HANGUL SYLLABLE HIEUH-WEO-RIEULPIEUP -0xC479 0xD6EC # HANGUL SYLLABLE HIEUH-WEO-RIEULSIOS -0xC47A 0xD6ED # HANGUL SYLLABLE HIEUH-WEO-RIEULTHIEUTH -0xC481 0xD6EE # HANGUL SYLLABLE HIEUH-WEO-RIEULPHIEUPH -0xC482 0xD6EF # HANGUL SYLLABLE HIEUH-WEO-RIEULHIEUH -0xC483 0xD6F1 # HANGUL SYLLABLE HIEUH-WEO-PIEUP -0xC484 0xD6F2 # HANGUL SYLLABLE HIEUH-WEO-PIEUPSIOS -0xC485 0xD6F3 # HANGUL SYLLABLE HIEUH-WEO-SIOS -0xC486 0xD6F4 # HANGUL SYLLABLE HIEUH-WEO-SSANGSIOS -0xC487 0xD6F6 # HANGUL SYLLABLE HIEUH-WEO-CIEUC -0xC488 0xD6F7 # HANGUL SYLLABLE HIEUH-WEO-CHIEUCH -0xC489 0xD6F8 # HANGUL SYLLABLE HIEUH-WEO-KHIEUKH -0xC48A 0xD6F9 # HANGUL SYLLABLE HIEUH-WEO-THIEUTH -0xC48B 0xD6FA # HANGUL SYLLABLE HIEUH-WEO-PHIEUPH -0xC48C 0xD6FB # HANGUL SYLLABLE HIEUH-WEO-HIEUH -0xC48D 0xD6FE # HANGUL SYLLABLE HIEUH-WE-SSANGKIYEOK -0xC48E 0xD6FF # HANGUL SYLLABLE HIEUH-WE-KIYEOKSIOS -0xC48F 0xD701 # HANGUL SYLLABLE HIEUH-WE-NIEUNCIEUC -0xC490 0xD702 # HANGUL SYLLABLE HIEUH-WE-NIEUNHIEUH -0xC491 0xD703 # HANGUL SYLLABLE HIEUH-WE-TIKEUT -0xC492 0xD705 # HANGUL SYLLABLE HIEUH-WE-RIEULKIYEOK -0xC493 0xD706 # HANGUL SYLLABLE HIEUH-WE-RIEULMIEUM -0xC494 0xD707 # HANGUL SYLLABLE HIEUH-WE-RIEULPIEUP -0xC495 0xD708 # HANGUL SYLLABLE HIEUH-WE-RIEULSIOS -0xC496 0xD709 # HANGUL SYLLABLE HIEUH-WE-RIEULTHIEUTH -0xC497 0xD70A # HANGUL SYLLABLE HIEUH-WE-RIEULPHIEUPH -0xC498 0xD70B # HANGUL SYLLABLE HIEUH-WE-RIEULHIEUH -0xC499 0xD70C # HANGUL SYLLABLE HIEUH-WE-MIEUM -0xC49A 0xD70D # HANGUL SYLLABLE HIEUH-WE-PIEUP -0xC49B 0xD70E # HANGUL SYLLABLE HIEUH-WE-PIEUPSIOS -0xC49C 0xD70F # HANGUL SYLLABLE HIEUH-WE-SIOS -0xC49D 0xD710 # HANGUL SYLLABLE HIEUH-WE-SSANGSIOS -0xC49E 0xD712 # HANGUL SYLLABLE HIEUH-WE-CIEUC -0xC49F 0xD713 # HANGUL SYLLABLE HIEUH-WE-CHIEUCH -0xC4A0 0xD714 # HANGUL SYLLABLE HIEUH-WE-KHIEUKH -0xC4A1 0xCE58 # HANGUL SYLLABLE CHIEUCH-I -0xC4A2 0xCE59 # HANGUL SYLLABLE CHIEUCH-I-KIYEOK -0xC4A3 0xCE5C # HANGUL SYLLABLE CHIEUCH-I-NIEUN -0xC4A4 0xCE5F # HANGUL SYLLABLE CHIEUCH-I-TIKEUT -0xC4A5 0xCE60 # HANGUL SYLLABLE CHIEUCH-I-RIEUL -0xC4A6 0xCE61 # HANGUL SYLLABLE CHIEUCH-I-RIEULKIYEOK -0xC4A7 0xCE68 # HANGUL SYLLABLE CHIEUCH-I-MIEUM -0xC4A8 0xCE69 # HANGUL SYLLABLE CHIEUCH-I-PIEUP -0xC4A9 0xCE6B # HANGUL SYLLABLE CHIEUCH-I-SIOS -0xC4AA 0xCE6D # HANGUL SYLLABLE CHIEUCH-I-IEUNG -0xC4AB 0xCE74 # HANGUL SYLLABLE KHIEUKH-A -0xC4AC 0xCE75 # HANGUL SYLLABLE KHIEUKH-A-KIYEOK -0xC4AD 0xCE78 # HANGUL SYLLABLE KHIEUKH-A-NIEUN -0xC4AE 0xCE7C # HANGUL SYLLABLE KHIEUKH-A-RIEUL -0xC4AF 0xCE84 # HANGUL SYLLABLE KHIEUKH-A-MIEUM -0xC4B0 0xCE85 # HANGUL SYLLABLE KHIEUKH-A-PIEUP -0xC4B1 0xCE87 # HANGUL SYLLABLE KHIEUKH-A-SIOS -0xC4B2 0xCE89 # HANGUL SYLLABLE KHIEUKH-A-IEUNG -0xC4B3 0xCE90 # HANGUL SYLLABLE KHIEUKH-AE -0xC4B4 0xCE91 # HANGUL SYLLABLE KHIEUKH-AE-KIYEOK -0xC4B5 0xCE94 # HANGUL SYLLABLE KHIEUKH-AE-NIEUN -0xC4B6 0xCE98 # HANGUL SYLLABLE KHIEUKH-AE-RIEUL -0xC4B7 0xCEA0 # HANGUL SYLLABLE KHIEUKH-AE-MIEUM -0xC4B8 0xCEA1 # HANGUL SYLLABLE KHIEUKH-AE-PIEUP -0xC4B9 0xCEA3 # HANGUL SYLLABLE KHIEUKH-AE-SIOS -0xC4BA 0xCEA4 # HANGUL SYLLABLE KHIEUKH-AE-SSANGSIOS -0xC4BB 0xCEA5 # HANGUL SYLLABLE KHIEUKH-AE-IEUNG -0xC4BC 0xCEAC # HANGUL SYLLABLE KHIEUKH-YA -0xC4BD 0xCEAD # HANGUL SYLLABLE KHIEUKH-YA-KIYEOK -0xC4BE 0xCEC1 # HANGUL SYLLABLE KHIEUKH-YA-IEUNG -0xC4BF 0xCEE4 # HANGUL SYLLABLE KHIEUKH-EO -0xC4C0 0xCEE5 # HANGUL SYLLABLE KHIEUKH-EO-KIYEOK -0xC4C1 0xCEE8 # HANGUL SYLLABLE KHIEUKH-EO-NIEUN -0xC4C2 0xCEEB # HANGUL SYLLABLE KHIEUKH-EO-TIKEUT -0xC4C3 0xCEEC # HANGUL SYLLABLE KHIEUKH-EO-RIEUL -0xC4C4 0xCEF4 # HANGUL SYLLABLE KHIEUKH-EO-MIEUM -0xC4C5 0xCEF5 # HANGUL SYLLABLE KHIEUKH-EO-PIEUP -0xC4C6 0xCEF7 # HANGUL SYLLABLE KHIEUKH-EO-SIOS -0xC4C7 0xCEF8 # HANGUL SYLLABLE KHIEUKH-EO-SSANGSIOS -0xC4C8 0xCEF9 # HANGUL SYLLABLE KHIEUKH-EO-IEUNG -0xC4C9 0xCF00 # HANGUL SYLLABLE KHIEUKH-E -0xC4CA 0xCF01 # HANGUL SYLLABLE KHIEUKH-E-KIYEOK -0xC4CB 0xCF04 # HANGUL SYLLABLE KHIEUKH-E-NIEUN -0xC4CC 0xCF08 # HANGUL SYLLABLE KHIEUKH-E-RIEUL -0xC4CD 0xCF10 # HANGUL SYLLABLE KHIEUKH-E-MIEUM -0xC4CE 0xCF11 # HANGUL SYLLABLE KHIEUKH-E-PIEUP -0xC4CF 0xCF13 # HANGUL SYLLABLE KHIEUKH-E-SIOS -0xC4D0 0xCF15 # HANGUL SYLLABLE KHIEUKH-E-IEUNG -0xC4D1 0xCF1C # HANGUL SYLLABLE KHIEUKH-YEO -0xC4D2 0xCF20 # HANGUL SYLLABLE KHIEUKH-YEO-NIEUN -0xC4D3 0xCF24 # HANGUL SYLLABLE KHIEUKH-YEO-RIEUL -0xC4D4 0xCF2C # HANGUL SYLLABLE KHIEUKH-YEO-MIEUM -0xC4D5 0xCF2D # HANGUL SYLLABLE KHIEUKH-YEO-PIEUP -0xC4D6 0xCF2F # HANGUL SYLLABLE KHIEUKH-YEO-SIOS -0xC4D7 0xCF30 # HANGUL SYLLABLE KHIEUKH-YEO-SSANGSIOS -0xC4D8 0xCF31 # HANGUL SYLLABLE KHIEUKH-YEO-IEUNG -0xC4D9 0xCF38 # HANGUL SYLLABLE KHIEUKH-YE -0xC4DA 0xCF54 # HANGUL SYLLABLE KHIEUKH-O -0xC4DB 0xCF55 # HANGUL SYLLABLE KHIEUKH-O-KIYEOK -0xC4DC 0xCF58 # HANGUL SYLLABLE KHIEUKH-O-NIEUN -0xC4DD 0xCF5C # HANGUL SYLLABLE KHIEUKH-O-RIEUL -0xC4DE 0xCF64 # HANGUL SYLLABLE KHIEUKH-O-MIEUM -0xC4DF 0xCF65 # HANGUL SYLLABLE KHIEUKH-O-PIEUP -0xC4E0 0xCF67 # HANGUL SYLLABLE KHIEUKH-O-SIOS -0xC4E1 0xCF69 # HANGUL SYLLABLE KHIEUKH-O-IEUNG -0xC4E2 0xCF70 # HANGUL SYLLABLE KHIEUKH-WA -0xC4E3 0xCF71 # HANGUL SYLLABLE KHIEUKH-WA-KIYEOK -0xC4E4 0xCF74 # HANGUL SYLLABLE KHIEUKH-WA-NIEUN -0xC4E5 0xCF78 # HANGUL SYLLABLE KHIEUKH-WA-RIEUL -0xC4E6 0xCF80 # HANGUL SYLLABLE KHIEUKH-WA-MIEUM -0xC4E7 0xCF85 # HANGUL SYLLABLE KHIEUKH-WA-IEUNG -0xC4E8 0xCF8C # HANGUL SYLLABLE KHIEUKH-WAE -0xC4E9 0xCFA1 # HANGUL SYLLABLE KHIEUKH-WAE-IEUNG -0xC4EA 0xCFA8 # HANGUL SYLLABLE KHIEUKH-OE -0xC4EB 0xCFB0 # HANGUL SYLLABLE KHIEUKH-OE-RIEUL -0xC4EC 0xCFC4 # HANGUL SYLLABLE KHIEUKH-YO -0xC4ED 0xCFE0 # HANGUL SYLLABLE KHIEUKH-U -0xC4EE 0xCFE1 # HANGUL SYLLABLE KHIEUKH-U-KIYEOK -0xC4EF 0xCFE4 # HANGUL SYLLABLE KHIEUKH-U-NIEUN -0xC4F0 0xCFE8 # HANGUL SYLLABLE KHIEUKH-U-RIEUL -0xC4F1 0xCFF0 # HANGUL SYLLABLE KHIEUKH-U-MIEUM -0xC4F2 0xCFF1 # HANGUL SYLLABLE KHIEUKH-U-PIEUP -0xC4F3 0xCFF3 # HANGUL SYLLABLE KHIEUKH-U-SIOS -0xC4F4 0xCFF5 # HANGUL SYLLABLE KHIEUKH-U-IEUNG -0xC4F5 0xCFFC # HANGUL SYLLABLE KHIEUKH-WEO -0xC4F6 0xD000 # HANGUL SYLLABLE KHIEUKH-WEO-NIEUN -0xC4F7 0xD004 # HANGUL SYLLABLE KHIEUKH-WEO-RIEUL -0xC4F8 0xD011 # HANGUL SYLLABLE KHIEUKH-WEO-IEUNG -0xC4F9 0xD018 # HANGUL SYLLABLE KHIEUKH-WE -0xC4FA 0xD02D # HANGUL SYLLABLE KHIEUKH-WE-IEUNG -0xC4FB 0xD034 # HANGUL SYLLABLE KHIEUKH-WI -0xC4FC 0xD035 # HANGUL SYLLABLE KHIEUKH-WI-KIYEOK -0xC4FD 0xD038 # HANGUL SYLLABLE KHIEUKH-WI-NIEUN -0xC4FE 0xD03C # HANGUL SYLLABLE KHIEUKH-WI-RIEUL -0xC541 0xD715 # HANGUL SYLLABLE HIEUH-WE-THIEUTH -0xC542 0xD716 # HANGUL SYLLABLE HIEUH-WE-PHIEUPH -0xC543 0xD717 # HANGUL SYLLABLE HIEUH-WE-HIEUH -0xC544 0xD71A # HANGUL SYLLABLE HIEUH-WI-SSANGKIYEOK -0xC545 0xD71B # HANGUL SYLLABLE HIEUH-WI-KIYEOKSIOS -0xC546 0xD71D # HANGUL SYLLABLE HIEUH-WI-NIEUNCIEUC -0xC547 0xD71E # HANGUL SYLLABLE HIEUH-WI-NIEUNHIEUH -0xC548 0xD71F # HANGUL SYLLABLE HIEUH-WI-TIKEUT -0xC549 0xD721 # HANGUL SYLLABLE HIEUH-WI-RIEULKIYEOK -0xC54A 0xD722 # HANGUL SYLLABLE HIEUH-WI-RIEULMIEUM -0xC54B 0xD723 # HANGUL SYLLABLE HIEUH-WI-RIEULPIEUP -0xC54C 0xD724 # HANGUL SYLLABLE HIEUH-WI-RIEULSIOS -0xC54D 0xD725 # HANGUL SYLLABLE HIEUH-WI-RIEULTHIEUTH -0xC54E 0xD726 # HANGUL SYLLABLE HIEUH-WI-RIEULPHIEUPH -0xC54F 0xD727 # HANGUL SYLLABLE HIEUH-WI-RIEULHIEUH -0xC550 0xD72A # HANGUL SYLLABLE HIEUH-WI-PIEUPSIOS -0xC551 0xD72C # HANGUL SYLLABLE HIEUH-WI-SSANGSIOS -0xC552 0xD72E # HANGUL SYLLABLE HIEUH-WI-CIEUC -0xC553 0xD72F # HANGUL SYLLABLE HIEUH-WI-CHIEUCH -0xC554 0xD730 # HANGUL SYLLABLE HIEUH-WI-KHIEUKH -0xC555 0xD731 # HANGUL SYLLABLE HIEUH-WI-THIEUTH -0xC556 0xD732 # HANGUL SYLLABLE HIEUH-WI-PHIEUPH -0xC557 0xD733 # HANGUL SYLLABLE HIEUH-WI-HIEUH -0xC558 0xD736 # HANGUL SYLLABLE HIEUH-YU-SSANGKIYEOK -0xC559 0xD737 # HANGUL SYLLABLE HIEUH-YU-KIYEOKSIOS -0xC55A 0xD739 # HANGUL SYLLABLE HIEUH-YU-NIEUNCIEUC -0xC561 0xD73A # HANGUL SYLLABLE HIEUH-YU-NIEUNHIEUH -0xC562 0xD73B # HANGUL SYLLABLE HIEUH-YU-TIKEUT -0xC563 0xD73D # HANGUL SYLLABLE HIEUH-YU-RIEULKIYEOK -0xC564 0xD73E # HANGUL SYLLABLE HIEUH-YU-RIEULMIEUM -0xC565 0xD73F # HANGUL SYLLABLE HIEUH-YU-RIEULPIEUP -0xC566 0xD740 # HANGUL SYLLABLE HIEUH-YU-RIEULSIOS -0xC567 0xD741 # HANGUL SYLLABLE HIEUH-YU-RIEULTHIEUTH -0xC568 0xD742 # HANGUL SYLLABLE HIEUH-YU-RIEULPHIEUPH -0xC569 0xD743 # HANGUL SYLLABLE HIEUH-YU-RIEULHIEUH -0xC56A 0xD745 # HANGUL SYLLABLE HIEUH-YU-PIEUP -0xC56B 0xD746 # HANGUL SYLLABLE HIEUH-YU-PIEUPSIOS -0xC56C 0xD748 # HANGUL SYLLABLE HIEUH-YU-SSANGSIOS -0xC56D 0xD74A # HANGUL SYLLABLE HIEUH-YU-CIEUC -0xC56E 0xD74B # HANGUL SYLLABLE HIEUH-YU-CHIEUCH -0xC56F 0xD74C # HANGUL SYLLABLE HIEUH-YU-KHIEUKH -0xC570 0xD74D # HANGUL SYLLABLE HIEUH-YU-THIEUTH -0xC571 0xD74E # HANGUL SYLLABLE HIEUH-YU-PHIEUPH -0xC572 0xD74F # HANGUL SYLLABLE HIEUH-YU-HIEUH -0xC573 0xD752 # HANGUL SYLLABLE HIEUH-EU-SSANGKIYEOK -0xC574 0xD753 # HANGUL SYLLABLE HIEUH-EU-KIYEOKSIOS -0xC575 0xD755 # HANGUL SYLLABLE HIEUH-EU-NIEUNCIEUC -0xC576 0xD75A # HANGUL SYLLABLE HIEUH-EU-RIEULMIEUM -0xC577 0xD75B # HANGUL SYLLABLE HIEUH-EU-RIEULPIEUP -0xC578 0xD75C # HANGUL SYLLABLE HIEUH-EU-RIEULSIOS -0xC579 0xD75D # HANGUL SYLLABLE HIEUH-EU-RIEULTHIEUTH -0xC57A 0xD75E # HANGUL SYLLABLE HIEUH-EU-RIEULPHIEUPH -0xC581 0xD75F # HANGUL SYLLABLE HIEUH-EU-RIEULHIEUH -0xC582 0xD762 # HANGUL SYLLABLE HIEUH-EU-PIEUPSIOS -0xC583 0xD764 # HANGUL SYLLABLE HIEUH-EU-SSANGSIOS -0xC584 0xD766 # HANGUL SYLLABLE HIEUH-EU-CIEUC -0xC585 0xD767 # HANGUL SYLLABLE HIEUH-EU-CHIEUCH -0xC586 0xD768 # HANGUL SYLLABLE HIEUH-EU-KHIEUKH -0xC587 0xD76A # HANGUL SYLLABLE HIEUH-EU-PHIEUPH -0xC588 0xD76B # HANGUL SYLLABLE HIEUH-EU-HIEUH -0xC589 0xD76D # HANGUL SYLLABLE HIEUH-YI-KIYEOK -0xC58A 0xD76E # HANGUL SYLLABLE HIEUH-YI-SSANGKIYEOK -0xC58B 0xD76F # HANGUL SYLLABLE HIEUH-YI-KIYEOKSIOS -0xC58C 0xD771 # HANGUL SYLLABLE HIEUH-YI-NIEUNCIEUC -0xC58D 0xD772 # HANGUL SYLLABLE HIEUH-YI-NIEUNHIEUH -0xC58E 0xD773 # HANGUL SYLLABLE HIEUH-YI-TIKEUT -0xC58F 0xD775 # HANGUL SYLLABLE HIEUH-YI-RIEULKIYEOK -0xC590 0xD776 # HANGUL SYLLABLE HIEUH-YI-RIEULMIEUM -0xC591 0xD777 # HANGUL SYLLABLE HIEUH-YI-RIEULPIEUP -0xC592 0xD778 # HANGUL SYLLABLE HIEUH-YI-RIEULSIOS -0xC593 0xD779 # HANGUL SYLLABLE HIEUH-YI-RIEULTHIEUTH -0xC594 0xD77A # HANGUL SYLLABLE HIEUH-YI-RIEULPHIEUPH -0xC595 0xD77B # HANGUL SYLLABLE HIEUH-YI-RIEULHIEUH -0xC596 0xD77E # HANGUL SYLLABLE HIEUH-YI-PIEUPSIOS -0xC597 0xD77F # HANGUL SYLLABLE HIEUH-YI-SIOS -0xC598 0xD780 # HANGUL SYLLABLE HIEUH-YI-SSANGSIOS -0xC599 0xD782 # HANGUL SYLLABLE HIEUH-YI-CIEUC -0xC59A 0xD783 # HANGUL SYLLABLE HIEUH-YI-CHIEUCH -0xC59B 0xD784 # HANGUL SYLLABLE HIEUH-YI-KHIEUKH -0xC59C 0xD785 # HANGUL SYLLABLE HIEUH-YI-THIEUTH -0xC59D 0xD786 # HANGUL SYLLABLE HIEUH-YI-PHIEUPH -0xC59E 0xD787 # HANGUL SYLLABLE HIEUH-YI-HIEUH -0xC59F 0xD78A # HANGUL SYLLABLE HIEUH-I-SSANGKIYEOK -0xC5A0 0xD78B # HANGUL SYLLABLE HIEUH-I-KIYEOKSIOS -0xC5A1 0xD044 # HANGUL SYLLABLE KHIEUKH-WI-MIEUM -0xC5A2 0xD045 # HANGUL SYLLABLE KHIEUKH-WI-PIEUP -0xC5A3 0xD047 # HANGUL SYLLABLE KHIEUKH-WI-SIOS -0xC5A4 0xD049 # HANGUL SYLLABLE KHIEUKH-WI-IEUNG -0xC5A5 0xD050 # HANGUL SYLLABLE KHIEUKH-YU -0xC5A6 0xD054 # HANGUL SYLLABLE KHIEUKH-YU-NIEUN -0xC5A7 0xD058 # HANGUL SYLLABLE KHIEUKH-YU-RIEUL -0xC5A8 0xD060 # HANGUL SYLLABLE KHIEUKH-YU-MIEUM -0xC5A9 0xD06C # HANGUL SYLLABLE KHIEUKH-EU -0xC5AA 0xD06D # HANGUL SYLLABLE KHIEUKH-EU-KIYEOK -0xC5AB 0xD070 # HANGUL SYLLABLE KHIEUKH-EU-NIEUN -0xC5AC 0xD074 # HANGUL SYLLABLE KHIEUKH-EU-RIEUL -0xC5AD 0xD07C # HANGUL SYLLABLE KHIEUKH-EU-MIEUM -0xC5AE 0xD07D # HANGUL SYLLABLE KHIEUKH-EU-PIEUP -0xC5AF 0xD081 # HANGUL SYLLABLE KHIEUKH-EU-IEUNG -0xC5B0 0xD0A4 # HANGUL SYLLABLE KHIEUKH-I -0xC5B1 0xD0A5 # HANGUL SYLLABLE KHIEUKH-I-KIYEOK -0xC5B2 0xD0A8 # HANGUL SYLLABLE KHIEUKH-I-NIEUN -0xC5B3 0xD0AC # HANGUL SYLLABLE KHIEUKH-I-RIEUL -0xC5B4 0xD0B4 # HANGUL SYLLABLE KHIEUKH-I-MIEUM -0xC5B5 0xD0B5 # HANGUL SYLLABLE KHIEUKH-I-PIEUP -0xC5B6 0xD0B7 # HANGUL SYLLABLE KHIEUKH-I-SIOS -0xC5B7 0xD0B9 # HANGUL SYLLABLE KHIEUKH-I-IEUNG -0xC5B8 0xD0C0 # HANGUL SYLLABLE THIEUTH-A -0xC5B9 0xD0C1 # HANGUL SYLLABLE THIEUTH-A-KIYEOK -0xC5BA 0xD0C4 # HANGUL SYLLABLE THIEUTH-A-NIEUN -0xC5BB 0xD0C8 # HANGUL SYLLABLE THIEUTH-A-RIEUL -0xC5BC 0xD0C9 # HANGUL SYLLABLE THIEUTH-A-RIEULKIYEOK -0xC5BD 0xD0D0 # HANGUL SYLLABLE THIEUTH-A-MIEUM -0xC5BE 0xD0D1 # HANGUL SYLLABLE THIEUTH-A-PIEUP -0xC5BF 0xD0D3 # HANGUL SYLLABLE THIEUTH-A-SIOS -0xC5C0 0xD0D4 # HANGUL SYLLABLE THIEUTH-A-SSANGSIOS -0xC5C1 0xD0D5 # HANGUL SYLLABLE THIEUTH-A-IEUNG -0xC5C2 0xD0DC # HANGUL SYLLABLE THIEUTH-AE -0xC5C3 0xD0DD # HANGUL SYLLABLE THIEUTH-AE-KIYEOK -0xC5C4 0xD0E0 # HANGUL SYLLABLE THIEUTH-AE-NIEUN -0xC5C5 0xD0E4 # HANGUL SYLLABLE THIEUTH-AE-RIEUL -0xC5C6 0xD0EC # HANGUL SYLLABLE THIEUTH-AE-MIEUM -0xC5C7 0xD0ED # HANGUL SYLLABLE THIEUTH-AE-PIEUP -0xC5C8 0xD0EF # HANGUL SYLLABLE THIEUTH-AE-SIOS -0xC5C9 0xD0F0 # HANGUL SYLLABLE THIEUTH-AE-SSANGSIOS -0xC5CA 0xD0F1 # HANGUL SYLLABLE THIEUTH-AE-IEUNG -0xC5CB 0xD0F8 # HANGUL SYLLABLE THIEUTH-YA -0xC5CC 0xD10D # HANGUL SYLLABLE THIEUTH-YA-IEUNG -0xC5CD 0xD130 # HANGUL SYLLABLE THIEUTH-EO -0xC5CE 0xD131 # HANGUL SYLLABLE THIEUTH-EO-KIYEOK -0xC5CF 0xD134 # HANGUL SYLLABLE THIEUTH-EO-NIEUN -0xC5D0 0xD138 # HANGUL SYLLABLE THIEUTH-EO-RIEUL -0xC5D1 0xD13A # HANGUL SYLLABLE THIEUTH-EO-RIEULMIEUM -0xC5D2 0xD140 # HANGUL SYLLABLE THIEUTH-EO-MIEUM -0xC5D3 0xD141 # HANGUL SYLLABLE THIEUTH-EO-PIEUP -0xC5D4 0xD143 # HANGUL SYLLABLE THIEUTH-EO-SIOS -0xC5D5 0xD144 # HANGUL SYLLABLE THIEUTH-EO-SSANGSIOS -0xC5D6 0xD145 # HANGUL SYLLABLE THIEUTH-EO-IEUNG -0xC5D7 0xD14C # HANGUL SYLLABLE THIEUTH-E -0xC5D8 0xD14D # HANGUL SYLLABLE THIEUTH-E-KIYEOK -0xC5D9 0xD150 # HANGUL SYLLABLE THIEUTH-E-NIEUN -0xC5DA 0xD154 # HANGUL SYLLABLE THIEUTH-E-RIEUL -0xC5DB 0xD15C # HANGUL SYLLABLE THIEUTH-E-MIEUM -0xC5DC 0xD15D # HANGUL SYLLABLE THIEUTH-E-PIEUP -0xC5DD 0xD15F # HANGUL SYLLABLE THIEUTH-E-SIOS -0xC5DE 0xD161 # HANGUL SYLLABLE THIEUTH-E-IEUNG -0xC5DF 0xD168 # HANGUL SYLLABLE THIEUTH-YEO -0xC5E0 0xD16C # HANGUL SYLLABLE THIEUTH-YEO-NIEUN -0xC5E1 0xD17C # HANGUL SYLLABLE THIEUTH-YEO-SSANGSIOS -0xC5E2 0xD184 # HANGUL SYLLABLE THIEUTH-YE -0xC5E3 0xD188 # HANGUL SYLLABLE THIEUTH-YE-NIEUN -0xC5E4 0xD1A0 # HANGUL SYLLABLE THIEUTH-O -0xC5E5 0xD1A1 # HANGUL SYLLABLE THIEUTH-O-KIYEOK -0xC5E6 0xD1A4 # HANGUL SYLLABLE THIEUTH-O-NIEUN -0xC5E7 0xD1A8 # HANGUL SYLLABLE THIEUTH-O-RIEUL -0xC5E8 0xD1B0 # HANGUL SYLLABLE THIEUTH-O-MIEUM -0xC5E9 0xD1B1 # HANGUL SYLLABLE THIEUTH-O-PIEUP -0xC5EA 0xD1B3 # HANGUL SYLLABLE THIEUTH-O-SIOS -0xC5EB 0xD1B5 # HANGUL SYLLABLE THIEUTH-O-IEUNG -0xC5EC 0xD1BA # HANGUL SYLLABLE THIEUTH-O-PHIEUPH -0xC5ED 0xD1BC # HANGUL SYLLABLE THIEUTH-WA -0xC5EE 0xD1C0 # HANGUL SYLLABLE THIEUTH-WA-NIEUN -0xC5EF 0xD1D8 # HANGUL SYLLABLE THIEUTH-WAE -0xC5F0 0xD1F4 # HANGUL SYLLABLE THIEUTH-OE -0xC5F1 0xD1F8 # HANGUL SYLLABLE THIEUTH-OE-NIEUN -0xC5F2 0xD207 # HANGUL SYLLABLE THIEUTH-OE-SIOS -0xC5F3 0xD209 # HANGUL SYLLABLE THIEUTH-OE-IEUNG -0xC5F4 0xD210 # HANGUL SYLLABLE THIEUTH-YO -0xC5F5 0xD22C # HANGUL SYLLABLE THIEUTH-U -0xC5F6 0xD22D # HANGUL SYLLABLE THIEUTH-U-KIYEOK -0xC5F7 0xD230 # HANGUL SYLLABLE THIEUTH-U-NIEUN -0xC5F8 0xD234 # HANGUL SYLLABLE THIEUTH-U-RIEUL -0xC5F9 0xD23C # HANGUL SYLLABLE THIEUTH-U-MIEUM -0xC5FA 0xD23D # HANGUL SYLLABLE THIEUTH-U-PIEUP -0xC5FB 0xD23F # HANGUL SYLLABLE THIEUTH-U-SIOS -0xC5FC 0xD241 # HANGUL SYLLABLE THIEUTH-U-IEUNG -0xC5FD 0xD248 # HANGUL SYLLABLE THIEUTH-WEO -0xC5FE 0xD25C # HANGUL SYLLABLE THIEUTH-WEO-SSANGSIOS -0xC641 0xD78D # HANGUL SYLLABLE HIEUH-I-NIEUNCIEUC -0xC642 0xD78E # HANGUL SYLLABLE HIEUH-I-NIEUNHIEUH -0xC643 0xD78F # HANGUL SYLLABLE HIEUH-I-TIKEUT -0xC644 0xD791 # HANGUL SYLLABLE HIEUH-I-RIEULKIYEOK -0xC645 0xD792 # HANGUL SYLLABLE HIEUH-I-RIEULMIEUM -0xC646 0xD793 # HANGUL SYLLABLE HIEUH-I-RIEULPIEUP -0xC647 0xD794 # HANGUL SYLLABLE HIEUH-I-RIEULSIOS -0xC648 0xD795 # HANGUL SYLLABLE HIEUH-I-RIEULTHIEUTH -0xC649 0xD796 # HANGUL SYLLABLE HIEUH-I-RIEULPHIEUPH -0xC64A 0xD797 # HANGUL SYLLABLE HIEUH-I-RIEULHIEUH -0xC64B 0xD79A # HANGUL SYLLABLE HIEUH-I-PIEUPSIOS -0xC64C 0xD79C # HANGUL SYLLABLE HIEUH-I-SSANGSIOS -0xC64D 0xD79E # HANGUL SYLLABLE HIEUH-I-CIEUC -0xC64E 0xD79F # HANGUL SYLLABLE HIEUH-I-CHIEUCH -0xC64F 0xD7A0 # HANGUL SYLLABLE HIEUH-I-KHIEUKH -0xC650 0xD7A1 # HANGUL SYLLABLE HIEUH-I-THIEUTH -0xC651 0xD7A2 # HANGUL SYLLABLE HIEUH-I-PHIEUPH -0xC652 0xD7A3 # HANGUL SYLLABLE HIEUH-I-HIEUH -0xC6A1 0xD264 # HANGUL SYLLABLE THIEUTH-WE -0xC6A2 0xD280 # HANGUL SYLLABLE THIEUTH-WI -0xC6A3 0xD281 # HANGUL SYLLABLE THIEUTH-WI-KIYEOK -0xC6A4 0xD284 # HANGUL SYLLABLE THIEUTH-WI-NIEUN -0xC6A5 0xD288 # HANGUL SYLLABLE THIEUTH-WI-RIEUL -0xC6A6 0xD290 # HANGUL SYLLABLE THIEUTH-WI-MIEUM -0xC6A7 0xD291 # HANGUL SYLLABLE THIEUTH-WI-PIEUP -0xC6A8 0xD295 # HANGUL SYLLABLE THIEUTH-WI-IEUNG -0xC6A9 0xD29C # HANGUL SYLLABLE THIEUTH-YU -0xC6AA 0xD2A0 # HANGUL SYLLABLE THIEUTH-YU-NIEUN -0xC6AB 0xD2A4 # HANGUL SYLLABLE THIEUTH-YU-RIEUL -0xC6AC 0xD2AC # HANGUL SYLLABLE THIEUTH-YU-MIEUM -0xC6AD 0xD2B1 # HANGUL SYLLABLE THIEUTH-YU-IEUNG -0xC6AE 0xD2B8 # HANGUL SYLLABLE THIEUTH-EU -0xC6AF 0xD2B9 # HANGUL SYLLABLE THIEUTH-EU-KIYEOK -0xC6B0 0xD2BC # HANGUL SYLLABLE THIEUTH-EU-NIEUN -0xC6B1 0xD2BF # HANGUL SYLLABLE THIEUTH-EU-TIKEUT -0xC6B2 0xD2C0 # HANGUL SYLLABLE THIEUTH-EU-RIEUL -0xC6B3 0xD2C2 # HANGUL SYLLABLE THIEUTH-EU-RIEULMIEUM -0xC6B4 0xD2C8 # HANGUL SYLLABLE THIEUTH-EU-MIEUM -0xC6B5 0xD2C9 # HANGUL SYLLABLE THIEUTH-EU-PIEUP -0xC6B6 0xD2CB # HANGUL SYLLABLE THIEUTH-EU-SIOS -0xC6B7 0xD2D4 # HANGUL SYLLABLE THIEUTH-YI -0xC6B8 0xD2D8 # HANGUL SYLLABLE THIEUTH-YI-NIEUN -0xC6B9 0xD2DC # HANGUL SYLLABLE THIEUTH-YI-RIEUL -0xC6BA 0xD2E4 # HANGUL SYLLABLE THIEUTH-YI-MIEUM -0xC6BB 0xD2E5 # HANGUL SYLLABLE THIEUTH-YI-PIEUP -0xC6BC 0xD2F0 # HANGUL SYLLABLE THIEUTH-I -0xC6BD 0xD2F1 # HANGUL SYLLABLE THIEUTH-I-KIYEOK -0xC6BE 0xD2F4 # HANGUL SYLLABLE THIEUTH-I-NIEUN -0xC6BF 0xD2F8 # HANGUL SYLLABLE THIEUTH-I-RIEUL -0xC6C0 0xD300 # HANGUL SYLLABLE THIEUTH-I-MIEUM -0xC6C1 0xD301 # HANGUL SYLLABLE THIEUTH-I-PIEUP -0xC6C2 0xD303 # HANGUL SYLLABLE THIEUTH-I-SIOS -0xC6C3 0xD305 # HANGUL SYLLABLE THIEUTH-I-IEUNG -0xC6C4 0xD30C # HANGUL SYLLABLE PHIEUPH-A -0xC6C5 0xD30D # HANGUL SYLLABLE PHIEUPH-A-KIYEOK -0xC6C6 0xD30E # HANGUL SYLLABLE PHIEUPH-A-SSANGKIYEOK -0xC6C7 0xD310 # HANGUL SYLLABLE PHIEUPH-A-NIEUN -0xC6C8 0xD314 # HANGUL SYLLABLE PHIEUPH-A-RIEUL -0xC6C9 0xD316 # HANGUL SYLLABLE PHIEUPH-A-RIEULMIEUM -0xC6CA 0xD31C # HANGUL SYLLABLE PHIEUPH-A-MIEUM -0xC6CB 0xD31D # HANGUL SYLLABLE PHIEUPH-A-PIEUP -0xC6CC 0xD31F # HANGUL SYLLABLE PHIEUPH-A-SIOS -0xC6CD 0xD320 # HANGUL SYLLABLE PHIEUPH-A-SSANGSIOS -0xC6CE 0xD321 # HANGUL SYLLABLE PHIEUPH-A-IEUNG -0xC6CF 0xD325 # HANGUL SYLLABLE PHIEUPH-A-THIEUTH -0xC6D0 0xD328 # HANGUL SYLLABLE PHIEUPH-AE -0xC6D1 0xD329 # HANGUL SYLLABLE PHIEUPH-AE-KIYEOK -0xC6D2 0xD32C # HANGUL SYLLABLE PHIEUPH-AE-NIEUN -0xC6D3 0xD330 # HANGUL SYLLABLE PHIEUPH-AE-RIEUL -0xC6D4 0xD338 # HANGUL SYLLABLE PHIEUPH-AE-MIEUM -0xC6D5 0xD339 # HANGUL SYLLABLE PHIEUPH-AE-PIEUP -0xC6D6 0xD33B # HANGUL SYLLABLE PHIEUPH-AE-SIOS -0xC6D7 0xD33C # HANGUL SYLLABLE PHIEUPH-AE-SSANGSIOS -0xC6D8 0xD33D # HANGUL SYLLABLE PHIEUPH-AE-IEUNG -0xC6D9 0xD344 # HANGUL SYLLABLE PHIEUPH-YA -0xC6DA 0xD345 # HANGUL SYLLABLE PHIEUPH-YA-KIYEOK -0xC6DB 0xD37C # HANGUL SYLLABLE PHIEUPH-EO -0xC6DC 0xD37D # HANGUL SYLLABLE PHIEUPH-EO-KIYEOK -0xC6DD 0xD380 # HANGUL SYLLABLE PHIEUPH-EO-NIEUN -0xC6DE 0xD384 # HANGUL SYLLABLE PHIEUPH-EO-RIEUL -0xC6DF 0xD38C # HANGUL SYLLABLE PHIEUPH-EO-MIEUM -0xC6E0 0xD38D # HANGUL SYLLABLE PHIEUPH-EO-PIEUP -0xC6E1 0xD38F # HANGUL SYLLABLE PHIEUPH-EO-SIOS -0xC6E2 0xD390 # HANGUL SYLLABLE PHIEUPH-EO-SSANGSIOS -0xC6E3 0xD391 # HANGUL SYLLABLE PHIEUPH-EO-IEUNG -0xC6E4 0xD398 # HANGUL SYLLABLE PHIEUPH-E -0xC6E5 0xD399 # HANGUL SYLLABLE PHIEUPH-E-KIYEOK -0xC6E6 0xD39C # HANGUL SYLLABLE PHIEUPH-E-NIEUN -0xC6E7 0xD3A0 # HANGUL SYLLABLE PHIEUPH-E-RIEUL -0xC6E8 0xD3A8 # HANGUL SYLLABLE PHIEUPH-E-MIEUM -0xC6E9 0xD3A9 # HANGUL SYLLABLE PHIEUPH-E-PIEUP -0xC6EA 0xD3AB # HANGUL SYLLABLE PHIEUPH-E-SIOS -0xC6EB 0xD3AD # HANGUL SYLLABLE PHIEUPH-E-IEUNG -0xC6EC 0xD3B4 # HANGUL SYLLABLE PHIEUPH-YEO -0xC6ED 0xD3B8 # HANGUL SYLLABLE PHIEUPH-YEO-NIEUN -0xC6EE 0xD3BC # HANGUL SYLLABLE PHIEUPH-YEO-RIEUL -0xC6EF 0xD3C4 # HANGUL SYLLABLE PHIEUPH-YEO-MIEUM -0xC6F0 0xD3C5 # HANGUL SYLLABLE PHIEUPH-YEO-PIEUP -0xC6F1 0xD3C8 # HANGUL SYLLABLE PHIEUPH-YEO-SSANGSIOS -0xC6F2 0xD3C9 # HANGUL SYLLABLE PHIEUPH-YEO-IEUNG -0xC6F3 0xD3D0 # HANGUL SYLLABLE PHIEUPH-YE -0xC6F4 0xD3D8 # HANGUL SYLLABLE PHIEUPH-YE-RIEUL -0xC6F5 0xD3E1 # HANGUL SYLLABLE PHIEUPH-YE-PIEUP -0xC6F6 0xD3E3 # HANGUL SYLLABLE PHIEUPH-YE-SIOS -0xC6F7 0xD3EC # HANGUL SYLLABLE PHIEUPH-O -0xC6F8 0xD3ED # HANGUL SYLLABLE PHIEUPH-O-KIYEOK -0xC6F9 0xD3F0 # HANGUL SYLLABLE PHIEUPH-O-NIEUN -0xC6FA 0xD3F4 # HANGUL SYLLABLE PHIEUPH-O-RIEUL -0xC6FB 0xD3FC # HANGUL SYLLABLE PHIEUPH-O-MIEUM -0xC6FC 0xD3FD # HANGUL SYLLABLE PHIEUPH-O-PIEUP -0xC6FD 0xD3FF # HANGUL SYLLABLE PHIEUPH-O-SIOS -0xC6FE 0xD401 # HANGUL SYLLABLE PHIEUPH-O-IEUNG -0xC7A1 0xD408 # HANGUL SYLLABLE PHIEUPH-WA -0xC7A2 0xD41D # HANGUL SYLLABLE PHIEUPH-WA-IEUNG -0xC7A3 0xD440 # HANGUL SYLLABLE PHIEUPH-OE -0xC7A4 0xD444 # HANGUL SYLLABLE PHIEUPH-OE-NIEUN -0xC7A5 0xD45C # HANGUL SYLLABLE PHIEUPH-YO -0xC7A6 0xD460 # HANGUL SYLLABLE PHIEUPH-YO-NIEUN -0xC7A7 0xD464 # HANGUL SYLLABLE PHIEUPH-YO-RIEUL -0xC7A8 0xD46D # HANGUL SYLLABLE PHIEUPH-YO-PIEUP -0xC7A9 0xD46F # HANGUL SYLLABLE PHIEUPH-YO-SIOS -0xC7AA 0xD478 # HANGUL SYLLABLE PHIEUPH-U -0xC7AB 0xD479 # HANGUL SYLLABLE PHIEUPH-U-KIYEOK -0xC7AC 0xD47C # HANGUL SYLLABLE PHIEUPH-U-NIEUN -0xC7AD 0xD47F # HANGUL SYLLABLE PHIEUPH-U-TIKEUT -0xC7AE 0xD480 # HANGUL SYLLABLE PHIEUPH-U-RIEUL -0xC7AF 0xD482 # HANGUL SYLLABLE PHIEUPH-U-RIEULMIEUM -0xC7B0 0xD488 # HANGUL SYLLABLE PHIEUPH-U-MIEUM -0xC7B1 0xD489 # HANGUL SYLLABLE PHIEUPH-U-PIEUP -0xC7B2 0xD48B # HANGUL SYLLABLE PHIEUPH-U-SIOS -0xC7B3 0xD48D # HANGUL SYLLABLE PHIEUPH-U-IEUNG -0xC7B4 0xD494 # HANGUL SYLLABLE PHIEUPH-WEO -0xC7B5 0xD4A9 # HANGUL SYLLABLE PHIEUPH-WEO-IEUNG -0xC7B6 0xD4CC # HANGUL SYLLABLE PHIEUPH-WI -0xC7B7 0xD4D0 # HANGUL SYLLABLE PHIEUPH-WI-NIEUN -0xC7B8 0xD4D4 # HANGUL SYLLABLE PHIEUPH-WI-RIEUL -0xC7B9 0xD4DC # HANGUL SYLLABLE PHIEUPH-WI-MIEUM -0xC7BA 0xD4DF # HANGUL SYLLABLE PHIEUPH-WI-SIOS -0xC7BB 0xD4E8 # HANGUL SYLLABLE PHIEUPH-YU -0xC7BC 0xD4EC # HANGUL SYLLABLE PHIEUPH-YU-NIEUN -0xC7BD 0xD4F0 # HANGUL SYLLABLE PHIEUPH-YU-RIEUL -0xC7BE 0xD4F8 # HANGUL SYLLABLE PHIEUPH-YU-MIEUM -0xC7BF 0xD4FB # HANGUL SYLLABLE PHIEUPH-YU-SIOS -0xC7C0 0xD4FD # HANGUL SYLLABLE PHIEUPH-YU-IEUNG -0xC7C1 0xD504 # HANGUL SYLLABLE PHIEUPH-EU -0xC7C2 0xD508 # HANGUL SYLLABLE PHIEUPH-EU-NIEUN -0xC7C3 0xD50C # HANGUL SYLLABLE PHIEUPH-EU-RIEUL -0xC7C4 0xD514 # HANGUL SYLLABLE PHIEUPH-EU-MIEUM -0xC7C5 0xD515 # HANGUL SYLLABLE PHIEUPH-EU-PIEUP -0xC7C6 0xD517 # HANGUL SYLLABLE PHIEUPH-EU-SIOS -0xC7C7 0xD53C # HANGUL SYLLABLE PHIEUPH-I -0xC7C8 0xD53D # HANGUL SYLLABLE PHIEUPH-I-KIYEOK -0xC7C9 0xD540 # HANGUL SYLLABLE PHIEUPH-I-NIEUN -0xC7CA 0xD544 # HANGUL SYLLABLE PHIEUPH-I-RIEUL -0xC7CB 0xD54C # HANGUL SYLLABLE PHIEUPH-I-MIEUM -0xC7CC 0xD54D # HANGUL SYLLABLE PHIEUPH-I-PIEUP -0xC7CD 0xD54F # HANGUL SYLLABLE PHIEUPH-I-SIOS -0xC7CE 0xD551 # HANGUL SYLLABLE PHIEUPH-I-IEUNG -0xC7CF 0xD558 # HANGUL SYLLABLE HIEUH-A -0xC7D0 0xD559 # HANGUL SYLLABLE HIEUH-A-KIYEOK -0xC7D1 0xD55C # HANGUL SYLLABLE HIEUH-A-NIEUN -0xC7D2 0xD560 # HANGUL SYLLABLE HIEUH-A-RIEUL -0xC7D3 0xD565 # HANGUL SYLLABLE HIEUH-A-RIEULTHIEUTH -0xC7D4 0xD568 # HANGUL SYLLABLE HIEUH-A-MIEUM -0xC7D5 0xD569 # HANGUL SYLLABLE HIEUH-A-PIEUP -0xC7D6 0xD56B # HANGUL SYLLABLE HIEUH-A-SIOS -0xC7D7 0xD56D # HANGUL SYLLABLE HIEUH-A-IEUNG -0xC7D8 0xD574 # HANGUL SYLLABLE HIEUH-AE -0xC7D9 0xD575 # HANGUL SYLLABLE HIEUH-AE-KIYEOK -0xC7DA 0xD578 # HANGUL SYLLABLE HIEUH-AE-NIEUN -0xC7DB 0xD57C # HANGUL SYLLABLE HIEUH-AE-RIEUL -0xC7DC 0xD584 # HANGUL SYLLABLE HIEUH-AE-MIEUM -0xC7DD 0xD585 # HANGUL SYLLABLE HIEUH-AE-PIEUP -0xC7DE 0xD587 # HANGUL SYLLABLE HIEUH-AE-SIOS -0xC7DF 0xD588 # HANGUL SYLLABLE HIEUH-AE-SSANGSIOS -0xC7E0 0xD589 # HANGUL SYLLABLE HIEUH-AE-IEUNG -0xC7E1 0xD590 # HANGUL SYLLABLE HIEUH-YA -0xC7E2 0xD5A5 # HANGUL SYLLABLE HIEUH-YA-IEUNG -0xC7E3 0xD5C8 # HANGUL SYLLABLE HIEUH-EO -0xC7E4 0xD5C9 # HANGUL SYLLABLE HIEUH-EO-KIYEOK -0xC7E5 0xD5CC # HANGUL SYLLABLE HIEUH-EO-NIEUN -0xC7E6 0xD5D0 # HANGUL SYLLABLE HIEUH-EO-RIEUL -0xC7E7 0xD5D2 # HANGUL SYLLABLE HIEUH-EO-RIEULMIEUM -0xC7E8 0xD5D8 # HANGUL SYLLABLE HIEUH-EO-MIEUM -0xC7E9 0xD5D9 # HANGUL SYLLABLE HIEUH-EO-PIEUP -0xC7EA 0xD5DB # HANGUL SYLLABLE HIEUH-EO-SIOS -0xC7EB 0xD5DD # HANGUL SYLLABLE HIEUH-EO-IEUNG -0xC7EC 0xD5E4 # HANGUL SYLLABLE HIEUH-E -0xC7ED 0xD5E5 # HANGUL SYLLABLE HIEUH-E-KIYEOK -0xC7EE 0xD5E8 # HANGUL SYLLABLE HIEUH-E-NIEUN -0xC7EF 0xD5EC # HANGUL SYLLABLE HIEUH-E-RIEUL -0xC7F0 0xD5F4 # HANGUL SYLLABLE HIEUH-E-MIEUM -0xC7F1 0xD5F5 # HANGUL SYLLABLE HIEUH-E-PIEUP -0xC7F2 0xD5F7 # HANGUL SYLLABLE HIEUH-E-SIOS -0xC7F3 0xD5F9 # HANGUL SYLLABLE HIEUH-E-IEUNG -0xC7F4 0xD600 # HANGUL SYLLABLE HIEUH-YEO -0xC7F5 0xD601 # HANGUL SYLLABLE HIEUH-YEO-KIYEOK -0xC7F6 0xD604 # HANGUL SYLLABLE HIEUH-YEO-NIEUN -0xC7F7 0xD608 # HANGUL SYLLABLE HIEUH-YEO-RIEUL -0xC7F8 0xD610 # HANGUL SYLLABLE HIEUH-YEO-MIEUM -0xC7F9 0xD611 # HANGUL SYLLABLE HIEUH-YEO-PIEUP -0xC7FA 0xD613 # HANGUL SYLLABLE HIEUH-YEO-SIOS -0xC7FB 0xD614 # HANGUL SYLLABLE HIEUH-YEO-SSANGSIOS -0xC7FC 0xD615 # HANGUL SYLLABLE HIEUH-YEO-IEUNG -0xC7FD 0xD61C # HANGUL SYLLABLE HIEUH-YE -0xC7FE 0xD620 # HANGUL SYLLABLE HIEUH-YE-NIEUN -0xC8A1 0xD624 # HANGUL SYLLABLE HIEUH-YE-RIEUL -0xC8A2 0xD62D # HANGUL SYLLABLE HIEUH-YE-PIEUP -0xC8A3 0xD638 # HANGUL SYLLABLE HIEUH-O -0xC8A4 0xD639 # HANGUL SYLLABLE HIEUH-O-KIYEOK -0xC8A5 0xD63C # HANGUL SYLLABLE HIEUH-O-NIEUN -0xC8A6 0xD640 # HANGUL SYLLABLE HIEUH-O-RIEUL -0xC8A7 0xD645 # HANGUL SYLLABLE HIEUH-O-RIEULTHIEUTH -0xC8A8 0xD648 # HANGUL SYLLABLE HIEUH-O-MIEUM -0xC8A9 0xD649 # HANGUL SYLLABLE HIEUH-O-PIEUP -0xC8AA 0xD64B # HANGUL SYLLABLE HIEUH-O-SIOS -0xC8AB 0xD64D # HANGUL SYLLABLE HIEUH-O-IEUNG -0xC8AC 0xD651 # HANGUL SYLLABLE HIEUH-O-THIEUTH -0xC8AD 0xD654 # HANGUL SYLLABLE HIEUH-WA -0xC8AE 0xD655 # HANGUL SYLLABLE HIEUH-WA-KIYEOK -0xC8AF 0xD658 # HANGUL SYLLABLE HIEUH-WA-NIEUN -0xC8B0 0xD65C # HANGUL SYLLABLE HIEUH-WA-RIEUL -0xC8B1 0xD667 # HANGUL SYLLABLE HIEUH-WA-SIOS -0xC8B2 0xD669 # HANGUL SYLLABLE HIEUH-WA-IEUNG -0xC8B3 0xD670 # HANGUL SYLLABLE HIEUH-WAE -0xC8B4 0xD671 # HANGUL SYLLABLE HIEUH-WAE-KIYEOK -0xC8B5 0xD674 # HANGUL SYLLABLE HIEUH-WAE-NIEUN -0xC8B6 0xD683 # HANGUL SYLLABLE HIEUH-WAE-SIOS -0xC8B7 0xD685 # HANGUL SYLLABLE HIEUH-WAE-IEUNG -0xC8B8 0xD68C # HANGUL SYLLABLE HIEUH-OE -0xC8B9 0xD68D # HANGUL SYLLABLE HIEUH-OE-KIYEOK -0xC8BA 0xD690 # HANGUL SYLLABLE HIEUH-OE-NIEUN -0xC8BB 0xD694 # HANGUL SYLLABLE HIEUH-OE-RIEUL -0xC8BC 0xD69D # HANGUL SYLLABLE HIEUH-OE-PIEUP -0xC8BD 0xD69F # HANGUL SYLLABLE HIEUH-OE-SIOS -0xC8BE 0xD6A1 # HANGUL SYLLABLE HIEUH-OE-IEUNG -0xC8BF 0xD6A8 # HANGUL SYLLABLE HIEUH-YO -0xC8C0 0xD6AC # HANGUL SYLLABLE HIEUH-YO-NIEUN -0xC8C1 0xD6B0 # HANGUL SYLLABLE HIEUH-YO-RIEUL -0xC8C2 0xD6B9 # HANGUL SYLLABLE HIEUH-YO-PIEUP -0xC8C3 0xD6BB # HANGUL SYLLABLE HIEUH-YO-SIOS -0xC8C4 0xD6C4 # HANGUL SYLLABLE HIEUH-U -0xC8C5 0xD6C5 # HANGUL SYLLABLE HIEUH-U-KIYEOK -0xC8C6 0xD6C8 # HANGUL SYLLABLE HIEUH-U-NIEUN -0xC8C7 0xD6CC # HANGUL SYLLABLE HIEUH-U-RIEUL -0xC8C8 0xD6D1 # HANGUL SYLLABLE HIEUH-U-RIEULTHIEUTH -0xC8C9 0xD6D4 # HANGUL SYLLABLE HIEUH-U-MIEUM -0xC8CA 0xD6D7 # HANGUL SYLLABLE HIEUH-U-SIOS -0xC8CB 0xD6D9 # HANGUL SYLLABLE HIEUH-U-IEUNG -0xC8CC 0xD6E0 # HANGUL SYLLABLE HIEUH-WEO -0xC8CD 0xD6E4 # HANGUL SYLLABLE HIEUH-WEO-NIEUN -0xC8CE 0xD6E8 # HANGUL SYLLABLE HIEUH-WEO-RIEUL -0xC8CF 0xD6F0 # HANGUL SYLLABLE HIEUH-WEO-MIEUM -0xC8D0 0xD6F5 # HANGUL SYLLABLE HIEUH-WEO-IEUNG -0xC8D1 0xD6FC # HANGUL SYLLABLE HIEUH-WE -0xC8D2 0xD6FD # HANGUL SYLLABLE HIEUH-WE-KIYEOK -0xC8D3 0xD700 # HANGUL SYLLABLE HIEUH-WE-NIEUN -0xC8D4 0xD704 # HANGUL SYLLABLE HIEUH-WE-RIEUL -0xC8D5 0xD711 # HANGUL SYLLABLE HIEUH-WE-IEUNG -0xC8D6 0xD718 # HANGUL SYLLABLE HIEUH-WI -0xC8D7 0xD719 # HANGUL SYLLABLE HIEUH-WI-KIYEOK -0xC8D8 0xD71C # HANGUL SYLLABLE HIEUH-WI-NIEUN -0xC8D9 0xD720 # HANGUL SYLLABLE HIEUH-WI-RIEUL -0xC8DA 0xD728 # HANGUL SYLLABLE HIEUH-WI-MIEUM -0xC8DB 0xD729 # HANGUL SYLLABLE HIEUH-WI-PIEUP -0xC8DC 0xD72B # HANGUL SYLLABLE HIEUH-WI-SIOS -0xC8DD 0xD72D # HANGUL SYLLABLE HIEUH-WI-IEUNG -0xC8DE 0xD734 # HANGUL SYLLABLE HIEUH-YU -0xC8DF 0xD735 # HANGUL SYLLABLE HIEUH-YU-KIYEOK -0xC8E0 0xD738 # HANGUL SYLLABLE HIEUH-YU-NIEUN -0xC8E1 0xD73C # HANGUL SYLLABLE HIEUH-YU-RIEUL -0xC8E2 0xD744 # HANGUL SYLLABLE HIEUH-YU-MIEUM -0xC8E3 0xD747 # HANGUL SYLLABLE HIEUH-YU-SIOS -0xC8E4 0xD749 # HANGUL SYLLABLE HIEUH-YU-IEUNG -0xC8E5 0xD750 # HANGUL SYLLABLE HIEUH-EU -0xC8E6 0xD751 # HANGUL SYLLABLE HIEUH-EU-KIYEOK -0xC8E7 0xD754 # HANGUL SYLLABLE HIEUH-EU-NIEUN -0xC8E8 0xD756 # HANGUL SYLLABLE HIEUH-EU-NIEUNHIEUH -0xC8E9 0xD757 # HANGUL SYLLABLE HIEUH-EU-TIKEUT -0xC8EA 0xD758 # HANGUL SYLLABLE HIEUH-EU-RIEUL -0xC8EB 0xD759 # HANGUL SYLLABLE HIEUH-EU-RIEULKIYEOK -0xC8EC 0xD760 # HANGUL SYLLABLE HIEUH-EU-MIEUM -0xC8ED 0xD761 # HANGUL SYLLABLE HIEUH-EU-PIEUP -0xC8EE 0xD763 # HANGUL SYLLABLE HIEUH-EU-SIOS -0xC8EF 0xD765 # HANGUL SYLLABLE HIEUH-EU-IEUNG -0xC8F0 0xD769 # HANGUL SYLLABLE HIEUH-EU-THIEUTH -0xC8F1 0xD76C # HANGUL SYLLABLE HIEUH-YI -0xC8F2 0xD770 # HANGUL SYLLABLE HIEUH-YI-NIEUN -0xC8F3 0xD774 # HANGUL SYLLABLE HIEUH-YI-RIEUL -0xC8F4 0xD77C # HANGUL SYLLABLE HIEUH-YI-MIEUM -0xC8F5 0xD77D # HANGUL SYLLABLE HIEUH-YI-PIEUP -0xC8F6 0xD781 # HANGUL SYLLABLE HIEUH-YI-IEUNG -0xC8F7 0xD788 # HANGUL SYLLABLE HIEUH-I -0xC8F8 0xD789 # HANGUL SYLLABLE HIEUH-I-KIYEOK -0xC8F9 0xD78C # HANGUL SYLLABLE HIEUH-I-NIEUN -0xC8FA 0xD790 # HANGUL SYLLABLE HIEUH-I-RIEUL -0xC8FB 0xD798 # HANGUL SYLLABLE HIEUH-I-MIEUM -0xC8FC 0xD799 # HANGUL SYLLABLE HIEUH-I-PIEUP -0xC8FD 0xD79B # HANGUL SYLLABLE HIEUH-I-SIOS -0xC8FE 0xD79D # HANGUL SYLLABLE HIEUH-I-IEUNG -0xCAA1 0x4F3D # <CJK> -0xCAA2 0x4F73 # <CJK> -0xCAA3 0x5047 # <CJK> -0xCAA4 0x50F9 # <CJK> -0xCAA5 0x52A0 # <CJK> -0xCAA6 0x53EF # <CJK> -0xCAA7 0x5475 # <CJK> -0xCAA8 0x54E5 # <CJK> -0xCAA9 0x5609 # <CJK> -0xCAAA 0x5AC1 # <CJK> -0xCAAB 0x5BB6 # <CJK> -0xCAAC 0x6687 # <CJK> -0xCAAD 0x67B6 # <CJK> -0xCAAE 0x67B7 # <CJK> -0xCAAF 0x67EF # <CJK> -0xCAB0 0x6B4C # <CJK> -0xCAB1 0x73C2 # <CJK> -0xCAB2 0x75C2 # <CJK> -0xCAB3 0x7A3C # <CJK> -0xCAB4 0x82DB # <CJK> -0xCAB5 0x8304 # <CJK> -0xCAB6 0x8857 # <CJK> -0xCAB7 0x8888 # <CJK> -0xCAB8 0x8A36 # <CJK> -0xCAB9 0x8CC8 # <CJK> -0xCABA 0x8DCF # <CJK> -0xCABB 0x8EFB # <CJK> -0xCABC 0x8FE6 # <CJK> -0xCABD 0x99D5 # <CJK> -0xCABE 0x523B # <CJK> -0xCABF 0x5374 # <CJK> -0xCAC0 0x5404 # <CJK> -0xCAC1 0x606A # <CJK> -0xCAC2 0x6164 # <CJK> -0xCAC3 0x6BBC # <CJK> -0xCAC4 0x73CF # <CJK> -0xCAC5 0x811A # <CJK> -0xCAC6 0x89BA # <CJK> -0xCAC7 0x89D2 # <CJK> -0xCAC8 0x95A3 # <CJK> -0xCAC9 0x4F83 # <CJK> -0xCACA 0x520A # <CJK> -0xCACB 0x58BE # <CJK> -0xCACC 0x5978 # <CJK> -0xCACD 0x59E6 # <CJK> -0xCACE 0x5E72 # <CJK> -0xCACF 0x5E79 # <CJK> -0xCAD0 0x61C7 # <CJK> -0xCAD1 0x63C0 # <CJK> -0xCAD2 0x6746 # <CJK> -0xCAD3 0x67EC # <CJK> -0xCAD4 0x687F # <CJK> -0xCAD5 0x6F97 # <CJK> -0xCAD6 0x764E # <CJK> -0xCAD7 0x770B # <CJK> -0xCAD8 0x78F5 # <CJK> -0xCAD9 0x7A08 # <CJK> -0xCADA 0x7AFF # <CJK> -0xCADB 0x7C21 # <CJK> -0xCADC 0x809D # <CJK> -0xCADD 0x826E # <CJK> -0xCADE 0x8271 # <CJK> -0xCADF 0x8AEB # <CJK> -0xCAE0 0x9593 # <CJK> -0xCAE1 0x4E6B # <CJK> -0xCAE2 0x559D # <CJK> -0xCAE3 0x66F7 # <CJK> -0xCAE4 0x6E34 # <CJK> -0xCAE5 0x78A3 # <CJK> -0xCAE6 0x7AED # <CJK> -0xCAE7 0x845B # <CJK> -0xCAE8 0x8910 # <CJK> -0xCAE9 0x874E # <CJK> -0xCAEA 0x97A8 # <CJK> -0xCAEB 0x52D8 # <CJK> -0xCAEC 0x574E # <CJK> -0xCAED 0x582A # <CJK> -0xCAEE 0x5D4C # <CJK> -0xCAEF 0x611F # <CJK> -0xCAF0 0x61BE # <CJK> -0xCAF1 0x6221 # <CJK> -0xCAF2 0x6562 # <CJK> -0xCAF3 0x67D1 # <CJK> -0xCAF4 0x6A44 # <CJK> -0xCAF5 0x6E1B # <CJK> -0xCAF6 0x7518 # <CJK> -0xCAF7 0x75B3 # <CJK> -0xCAF8 0x76E3 # <CJK> -0xCAF9 0x77B0 # <CJK> -0xCAFA 0x7D3A # <CJK> -0xCAFB 0x90AF # <CJK> -0xCAFC 0x9451 # <CJK> -0xCAFD 0x9452 # <CJK> -0xCAFE 0x9F95 # <CJK> -0xCBA1 0x5323 # <CJK> -0xCBA2 0x5CAC # <CJK> -0xCBA3 0x7532 # <CJK> -0xCBA4 0x80DB # <CJK> -0xCBA5 0x9240 # <CJK> -0xCBA6 0x9598 # <CJK> -0xCBA7 0x525B # <CJK> -0xCBA8 0x5808 # <CJK> -0xCBA9 0x59DC # <CJK> -0xCBAA 0x5CA1 # <CJK> -0xCBAB 0x5D17 # <CJK> -0xCBAC 0x5EB7 # <CJK> -0xCBAD 0x5F3A # <CJK> -0xCBAE 0x5F4A # <CJK> -0xCBAF 0x6177 # <CJK> -0xCBB0 0x6C5F # <CJK> -0xCBB1 0x757A # <CJK> -0xCBB2 0x7586 # <CJK> -0xCBB3 0x7CE0 # <CJK> -0xCBB4 0x7D73 # <CJK> -0xCBB5 0x7DB1 # <CJK> -0xCBB6 0x7F8C # <CJK> -0xCBB7 0x8154 # <CJK> -0xCBB8 0x8221 # <CJK> -0xCBB9 0x8591 # <CJK> -0xCBBA 0x8941 # <CJK> -0xCBBB 0x8B1B # <CJK> -0xCBBC 0x92FC # <CJK> -0xCBBD 0x964D # <CJK> -0xCBBE 0x9C47 # <CJK> -0xCBBF 0x4ECB # <CJK> -0xCBC0 0x4EF7 # <CJK> -0xCBC1 0x500B # <CJK> -0xCBC2 0x51F1 # <CJK> -0xCBC3 0x584F # <CJK> -0xCBC4 0x6137 # <CJK> -0xCBC5 0x613E # <CJK> -0xCBC6 0x6168 # <CJK> -0xCBC7 0x6539 # <CJK> -0xCBC8 0x69EA # <CJK> -0xCBC9 0x6F11 # <CJK> -0xCBCA 0x75A5 # <CJK> -0xCBCB 0x7686 # <CJK> -0xCBCC 0x76D6 # <CJK> -0xCBCD 0x7B87 # <CJK> -0xCBCE 0x82A5 # <CJK> -0xCBCF 0x84CB # <CJK> -0xCBD0 0xF900 # <CJK> -0xCBD1 0x93A7 # <CJK> -0xCBD2 0x958B # <CJK> -0xCBD3 0x5580 # <CJK> -0xCBD4 0x5BA2 # <CJK> -0xCBD5 0x5751 # <CJK> -0xCBD6 0xF901 # <CJK> -0xCBD7 0x7CB3 # <CJK> -0xCBD8 0x7FB9 # <CJK> -0xCBD9 0x91B5 # <CJK> -0xCBDA 0x5028 # <CJK> -0xCBDB 0x53BB # <CJK> -0xCBDC 0x5C45 # <CJK> -0xCBDD 0x5DE8 # <CJK> -0xCBDE 0x62D2 # <CJK> -0xCBDF 0x636E # <CJK> -0xCBE0 0x64DA # <CJK> -0xCBE1 0x64E7 # <CJK> -0xCBE2 0x6E20 # <CJK> -0xCBE3 0x70AC # <CJK> -0xCBE4 0x795B # <CJK> -0xCBE5 0x8DDD # <CJK> -0xCBE6 0x8E1E # <CJK> -0xCBE7 0xF902 # <CJK> -0xCBE8 0x907D # <CJK> -0xCBE9 0x9245 # <CJK> -0xCBEA 0x92F8 # <CJK> -0xCBEB 0x4E7E # <CJK> -0xCBEC 0x4EF6 # <CJK> -0xCBED 0x5065 # <CJK> -0xCBEE 0x5DFE # <CJK> -0xCBEF 0x5EFA # <CJK> -0xCBF0 0x6106 # <CJK> -0xCBF1 0x6957 # <CJK> -0xCBF2 0x8171 # <CJK> -0xCBF3 0x8654 # <CJK> -0xCBF4 0x8E47 # <CJK> -0xCBF5 0x9375 # <CJK> -0xCBF6 0x9A2B # <CJK> -0xCBF7 0x4E5E # <CJK> -0xCBF8 0x5091 # <CJK> -0xCBF9 0x6770 # <CJK> -0xCBFA 0x6840 # <CJK> -0xCBFB 0x5109 # <CJK> -0xCBFC 0x528D # <CJK> -0xCBFD 0x5292 # <CJK> -0xCBFE 0x6AA2 # <CJK> -0xCCA1 0x77BC # <CJK> -0xCCA2 0x9210 # <CJK> -0xCCA3 0x9ED4 # <CJK> -0xCCA4 0x52AB # <CJK> -0xCCA5 0x602F # <CJK> -0xCCA6 0x8FF2 # <CJK> -0xCCA7 0x5048 # <CJK> -0xCCA8 0x61A9 # <CJK> -0xCCA9 0x63ED # <CJK> -0xCCAA 0x64CA # <CJK> -0xCCAB 0x683C # <CJK> -0xCCAC 0x6A84 # <CJK> -0xCCAD 0x6FC0 # <CJK> -0xCCAE 0x8188 # <CJK> -0xCCAF 0x89A1 # <CJK> -0xCCB0 0x9694 # <CJK> -0xCCB1 0x5805 # <CJK> -0xCCB2 0x727D # <CJK> -0xCCB3 0x72AC # <CJK> -0xCCB4 0x7504 # <CJK> -0xCCB5 0x7D79 # <CJK> -0xCCB6 0x7E6D # <CJK> -0xCCB7 0x80A9 # <CJK> -0xCCB8 0x898B # <CJK> -0xCCB9 0x8B74 # <CJK> -0xCCBA 0x9063 # <CJK> -0xCCBB 0x9D51 # <CJK> -0xCCBC 0x6289 # <CJK> -0xCCBD 0x6C7A # <CJK> -0xCCBE 0x6F54 # <CJK> -0xCCBF 0x7D50 # <CJK> -0xCCC0 0x7F3A # <CJK> -0xCCC1 0x8A23 # <CJK> -0xCCC2 0x517C # <CJK> -0xCCC3 0x614A # <CJK> -0xCCC4 0x7B9D # <CJK> -0xCCC5 0x8B19 # <CJK> -0xCCC6 0x9257 # <CJK> -0xCCC7 0x938C # <CJK> -0xCCC8 0x4EAC # <CJK> -0xCCC9 0x4FD3 # <CJK> -0xCCCA 0x501E # <CJK> -0xCCCB 0x50BE # <CJK> -0xCCCC 0x5106 # <CJK> -0xCCCD 0x52C1 # <CJK> -0xCCCE 0x52CD # <CJK> -0xCCCF 0x537F # <CJK> -0xCCD0 0x5770 # <CJK> -0xCCD1 0x5883 # <CJK> -0xCCD2 0x5E9A # <CJK> -0xCCD3 0x5F91 # <CJK> -0xCCD4 0x6176 # <CJK> -0xCCD5 0x61AC # <CJK> -0xCCD6 0x64CE # <CJK> -0xCCD7 0x656C # <CJK> -0xCCD8 0x666F # <CJK> -0xCCD9 0x66BB # <CJK> -0xCCDA 0x66F4 # <CJK> -0xCCDB 0x6897 # <CJK> -0xCCDC 0x6D87 # <CJK> -0xCCDD 0x7085 # <CJK> -0xCCDE 0x70F1 # <CJK> -0xCCDF 0x749F # <CJK> -0xCCE0 0x74A5 # <CJK> -0xCCE1 0x74CA # <CJK> -0xCCE2 0x75D9 # <CJK> -0xCCE3 0x786C # <CJK> -0xCCE4 0x78EC # <CJK> -0xCCE5 0x7ADF # <CJK> -0xCCE6 0x7AF6 # <CJK> -0xCCE7 0x7D45 # <CJK> -0xCCE8 0x7D93 # <CJK> -0xCCE9 0x8015 # <CJK> -0xCCEA 0x803F # <CJK> -0xCCEB 0x811B # <CJK> -0xCCEC 0x8396 # <CJK> -0xCCED 0x8B66 # <CJK> -0xCCEE 0x8F15 # <CJK> -0xCCEF 0x9015 # <CJK> -0xCCF0 0x93E1 # <CJK> -0xCCF1 0x9803 # <CJK> -0xCCF2 0x9838 # <CJK> -0xCCF3 0x9A5A # <CJK> -0xCCF4 0x9BE8 # <CJK> -0xCCF5 0x4FC2 # <CJK> -0xCCF6 0x5553 # <CJK> -0xCCF7 0x583A # <CJK> -0xCCF8 0x5951 # <CJK> -0xCCF9 0x5B63 # <CJK> -0xCCFA 0x5C46 # <CJK> -0xCCFB 0x60B8 # <CJK> -0xCCFC 0x6212 # <CJK> -0xCCFD 0x6842 # <CJK> -0xCCFE 0x68B0 # <CJK> -0xCDA1 0x68E8 # <CJK> -0xCDA2 0x6EAA # <CJK> -0xCDA3 0x754C # <CJK> -0xCDA4 0x7678 # <CJK> -0xCDA5 0x78CE # <CJK> -0xCDA6 0x7A3D # <CJK> -0xCDA7 0x7CFB # <CJK> -0xCDA8 0x7E6B # <CJK> -0xCDA9 0x7E7C # <CJK> -0xCDAA 0x8A08 # <CJK> -0xCDAB 0x8AA1 # <CJK> -0xCDAC 0x8C3F # <CJK> -0xCDAD 0x968E # <CJK> -0xCDAE 0x9DC4 # <CJK> -0xCDAF 0x53E4 # <CJK> -0xCDB0 0x53E9 # <CJK> -0xCDB1 0x544A # <CJK> -0xCDB2 0x5471 # <CJK> -0xCDB3 0x56FA # <CJK> -0xCDB4 0x59D1 # <CJK> -0xCDB5 0x5B64 # <CJK> -0xCDB6 0x5C3B # <CJK> -0xCDB7 0x5EAB # <CJK> -0xCDB8 0x62F7 # <CJK> -0xCDB9 0x6537 # <CJK> -0xCDBA 0x6545 # <CJK> -0xCDBB 0x6572 # <CJK> -0xCDBC 0x66A0 # <CJK> -0xCDBD 0x67AF # <CJK> -0xCDBE 0x69C1 # <CJK> -0xCDBF 0x6CBD # <CJK> -0xCDC0 0x75FC # <CJK> -0xCDC1 0x7690 # <CJK> -0xCDC2 0x777E # <CJK> -0xCDC3 0x7A3F # <CJK> -0xCDC4 0x7F94 # <CJK> -0xCDC5 0x8003 # <CJK> -0xCDC6 0x80A1 # <CJK> -0xCDC7 0x818F # <CJK> -0xCDC8 0x82E6 # <CJK> -0xCDC9 0x82FD # <CJK> -0xCDCA 0x83F0 # <CJK> -0xCDCB 0x85C1 # <CJK> -0xCDCC 0x8831 # <CJK> -0xCDCD 0x88B4 # <CJK> -0xCDCE 0x8AA5 # <CJK> -0xCDCF 0xF903 # <CJK> -0xCDD0 0x8F9C # <CJK> -0xCDD1 0x932E # <CJK> -0xCDD2 0x96C7 # <CJK> -0xCDD3 0x9867 # <CJK> -0xCDD4 0x9AD8 # <CJK> -0xCDD5 0x9F13 # <CJK> -0xCDD6 0x54ED # <CJK> -0xCDD7 0x659B # <CJK> -0xCDD8 0x66F2 # <CJK> -0xCDD9 0x688F # <CJK> -0xCDDA 0x7A40 # <CJK> -0xCDDB 0x8C37 # <CJK> -0xCDDC 0x9D60 # <CJK> -0xCDDD 0x56F0 # <CJK> -0xCDDE 0x5764 # <CJK> -0xCDDF 0x5D11 # <CJK> -0xCDE0 0x6606 # <CJK> -0xCDE1 0x68B1 # <CJK> -0xCDE2 0x68CD # <CJK> -0xCDE3 0x6EFE # <CJK> -0xCDE4 0x7428 # <CJK> -0xCDE5 0x889E # <CJK> -0xCDE6 0x9BE4 # <CJK> -0xCDE7 0x6C68 # <CJK> -0xCDE8 0xF904 # <CJK> -0xCDE9 0x9AA8 # <CJK> -0xCDEA 0x4F9B # <CJK> -0xCDEB 0x516C # <CJK> -0xCDEC 0x5171 # <CJK> -0xCDED 0x529F # <CJK> -0xCDEE 0x5B54 # <CJK> -0xCDEF 0x5DE5 # <CJK> -0xCDF0 0x6050 # <CJK> -0xCDF1 0x606D # <CJK> -0xCDF2 0x62F1 # <CJK> -0xCDF3 0x63A7 # <CJK> -0xCDF4 0x653B # <CJK> -0xCDF5 0x73D9 # <CJK> -0xCDF6 0x7A7A # <CJK> -0xCDF7 0x86A3 # <CJK> -0xCDF8 0x8CA2 # <CJK> -0xCDF9 0x978F # <CJK> -0xCDFA 0x4E32 # <CJK> -0xCDFB 0x5BE1 # <CJK> -0xCDFC 0x6208 # <CJK> -0xCDFD 0x679C # <CJK> -0xCDFE 0x74DC # <CJK> -0xCEA1 0x79D1 # <CJK> -0xCEA2 0x83D3 # <CJK> -0xCEA3 0x8A87 # <CJK> -0xCEA4 0x8AB2 # <CJK> -0xCEA5 0x8DE8 # <CJK> -0xCEA6 0x904E # <CJK> -0xCEA7 0x934B # <CJK> -0xCEA8 0x9846 # <CJK> -0xCEA9 0x5ED3 # <CJK> -0xCEAA 0x69E8 # <CJK> -0xCEAB 0x85FF # <CJK> -0xCEAC 0x90ED # <CJK> -0xCEAD 0xF905 # <CJK> -0xCEAE 0x51A0 # <CJK> -0xCEAF 0x5B98 # <CJK> -0xCEB0 0x5BEC # <CJK> -0xCEB1 0x6163 # <CJK> -0xCEB2 0x68FA # <CJK> -0xCEB3 0x6B3E # <CJK> -0xCEB4 0x704C # <CJK> -0xCEB5 0x742F # <CJK> -0xCEB6 0x74D8 # <CJK> -0xCEB7 0x7BA1 # <CJK> -0xCEB8 0x7F50 # <CJK> -0xCEB9 0x83C5 # <CJK> -0xCEBA 0x89C0 # <CJK> -0xCEBB 0x8CAB # <CJK> -0xCEBC 0x95DC # <CJK> -0xCEBD 0x9928 # <CJK> -0xCEBE 0x522E # <CJK> -0xCEBF 0x605D # <CJK> -0xCEC0 0x62EC # <CJK> -0xCEC1 0x9002 # <CJK> -0xCEC2 0x4F8A # <CJK> -0xCEC3 0x5149 # <CJK> -0xCEC4 0x5321 # <CJK> -0xCEC5 0x58D9 # <CJK> -0xCEC6 0x5EE3 # <CJK> -0xCEC7 0x66E0 # <CJK> -0xCEC8 0x6D38 # <CJK> -0xCEC9 0x709A # <CJK> -0xCECA 0x72C2 # <CJK> -0xCECB 0x73D6 # <CJK> -0xCECC 0x7B50 # <CJK> -0xCECD 0x80F1 # <CJK> -0xCECE 0x945B # <CJK> -0xCECF 0x5366 # <CJK> -0xCED0 0x639B # <CJK> -0xCED1 0x7F6B # <CJK> -0xCED2 0x4E56 # <CJK> -0xCED3 0x5080 # <CJK> -0xCED4 0x584A # <CJK> -0xCED5 0x58DE # <CJK> -0xCED6 0x602A # <CJK> -0xCED7 0x6127 # <CJK> -0xCED8 0x62D0 # <CJK> -0xCED9 0x69D0 # <CJK> -0xCEDA 0x9B41 # <CJK> -0xCEDB 0x5B8F # <CJK> -0xCEDC 0x7D18 # <CJK> -0xCEDD 0x80B1 # <CJK> -0xCEDE 0x8F5F # <CJK> -0xCEDF 0x4EA4 # <CJK> -0xCEE0 0x50D1 # <CJK> -0xCEE1 0x54AC # <CJK> -0xCEE2 0x55AC # <CJK> -0xCEE3 0x5B0C # <CJK> -0xCEE4 0x5DA0 # <CJK> -0xCEE5 0x5DE7 # <CJK> -0xCEE6 0x652A # <CJK> -0xCEE7 0x654E # <CJK> -0xCEE8 0x6821 # <CJK> -0xCEE9 0x6A4B # <CJK> -0xCEEA 0x72E1 # <CJK> -0xCEEB 0x768E # <CJK> -0xCEEC 0x77EF # <CJK> -0xCEED 0x7D5E # <CJK> -0xCEEE 0x7FF9 # <CJK> -0xCEEF 0x81A0 # <CJK> -0xCEF0 0x854E # <CJK> -0xCEF1 0x86DF # <CJK> -0xCEF2 0x8F03 # <CJK> -0xCEF3 0x8F4E # <CJK> -0xCEF4 0x90CA # <CJK> -0xCEF5 0x9903 # <CJK> -0xCEF6 0x9A55 # <CJK> -0xCEF7 0x9BAB # <CJK> -0xCEF8 0x4E18 # <CJK> -0xCEF9 0x4E45 # <CJK> -0xCEFA 0x4E5D # <CJK> -0xCEFB 0x4EC7 # <CJK> -0xCEFC 0x4FF1 # <CJK> -0xCEFD 0x5177 # <CJK> -0xCEFE 0x52FE # <CJK> -0xCFA1 0x5340 # <CJK> -0xCFA2 0x53E3 # <CJK> -0xCFA3 0x53E5 # <CJK> -0xCFA4 0x548E # <CJK> -0xCFA5 0x5614 # <CJK> -0xCFA6 0x5775 # <CJK> -0xCFA7 0x57A2 # <CJK> -0xCFA8 0x5BC7 # <CJK> -0xCFA9 0x5D87 # <CJK> -0xCFAA 0x5ED0 # <CJK> -0xCFAB 0x61FC # <CJK> -0xCFAC 0x62D8 # <CJK> -0xCFAD 0x6551 # <CJK> -0xCFAE 0x67B8 # <CJK> -0xCFAF 0x67E9 # <CJK> -0xCFB0 0x69CB # <CJK> -0xCFB1 0x6B50 # <CJK> -0xCFB2 0x6BC6 # <CJK> -0xCFB3 0x6BEC # <CJK> -0xCFB4 0x6C42 # <CJK> -0xCFB5 0x6E9D # <CJK> -0xCFB6 0x7078 # <CJK> -0xCFB7 0x72D7 # <CJK> -0xCFB8 0x7396 # <CJK> -0xCFB9 0x7403 # <CJK> -0xCFBA 0x77BF # <CJK> -0xCFBB 0x77E9 # <CJK> -0xCFBC 0x7A76 # <CJK> -0xCFBD 0x7D7F # <CJK> -0xCFBE 0x8009 # <CJK> -0xCFBF 0x81FC # <CJK> -0xCFC0 0x8205 # <CJK> -0xCFC1 0x820A # <CJK> -0xCFC2 0x82DF # <CJK> -0xCFC3 0x8862 # <CJK> -0xCFC4 0x8B33 # <CJK> -0xCFC5 0x8CFC # <CJK> -0xCFC6 0x8EC0 # <CJK> -0xCFC7 0x9011 # <CJK> -0xCFC8 0x90B1 # <CJK> -0xCFC9 0x9264 # <CJK> -0xCFCA 0x92B6 # <CJK> -0xCFCB 0x99D2 # <CJK> -0xCFCC 0x9A45 # <CJK> -0xCFCD 0x9CE9 # <CJK> -0xCFCE 0x9DD7 # <CJK> -0xCFCF 0x9F9C # <CJK> -0xCFD0 0x570B # <CJK> -0xCFD1 0x5C40 # <CJK> -0xCFD2 0x83CA # <CJK> -0xCFD3 0x97A0 # <CJK> -0xCFD4 0x97AB # <CJK> -0xCFD5 0x9EB4 # <CJK> -0xCFD6 0x541B # <CJK> -0xCFD7 0x7A98 # <CJK> -0xCFD8 0x7FA4 # <CJK> -0xCFD9 0x88D9 # <CJK> -0xCFDA 0x8ECD # <CJK> -0xCFDB 0x90E1 # <CJK> -0xCFDC 0x5800 # <CJK> -0xCFDD 0x5C48 # <CJK> -0xCFDE 0x6398 # <CJK> -0xCFDF 0x7A9F # <CJK> -0xCFE0 0x5BAE # <CJK> -0xCFE1 0x5F13 # <CJK> -0xCFE2 0x7A79 # <CJK> -0xCFE3 0x7AAE # <CJK> -0xCFE4 0x828E # <CJK> -0xCFE5 0x8EAC # <CJK> -0xCFE6 0x5026 # <CJK> -0xCFE7 0x5238 # <CJK> -0xCFE8 0x52F8 # <CJK> -0xCFE9 0x5377 # <CJK> -0xCFEA 0x5708 # <CJK> -0xCFEB 0x62F3 # <CJK> -0xCFEC 0x6372 # <CJK> -0xCFED 0x6B0A # <CJK> -0xCFEE 0x6DC3 # <CJK> -0xCFEF 0x7737 # <CJK> -0xCFF0 0x53A5 # <CJK> -0xCFF1 0x7357 # <CJK> -0xCFF2 0x8568 # <CJK> -0xCFF3 0x8E76 # <CJK> -0xCFF4 0x95D5 # <CJK> -0xCFF5 0x673A # <CJK> -0xCFF6 0x6AC3 # <CJK> -0xCFF7 0x6F70 # <CJK> -0xCFF8 0x8A6D # <CJK> -0xCFF9 0x8ECC # <CJK> -0xCFFA 0x994B # <CJK> -0xCFFB 0xF906 # <CJK> -0xCFFC 0x6677 # <CJK> -0xCFFD 0x6B78 # <CJK> -0xCFFE 0x8CB4 # <CJK> -0xD0A1 0x9B3C # <CJK> -0xD0A2 0xF907 # <CJK> -0xD0A3 0x53EB # <CJK> -0xD0A4 0x572D # <CJK> -0xD0A5 0x594E # <CJK> -0xD0A6 0x63C6 # <CJK> -0xD0A7 0x69FB # <CJK> -0xD0A8 0x73EA # <CJK> -0xD0A9 0x7845 # <CJK> -0xD0AA 0x7ABA # <CJK> -0xD0AB 0x7AC5 # <CJK> -0xD0AC 0x7CFE # <CJK> -0xD0AD 0x8475 # <CJK> -0xD0AE 0x898F # <CJK> -0xD0AF 0x8D73 # <CJK> -0xD0B0 0x9035 # <CJK> -0xD0B1 0x95A8 # <CJK> -0xD0B2 0x52FB # <CJK> -0xD0B3 0x5747 # <CJK> -0xD0B4 0x7547 # <CJK> -0xD0B5 0x7B60 # <CJK> -0xD0B6 0x83CC # <CJK> -0xD0B7 0x921E # <CJK> -0xD0B8 0xF908 # <CJK> -0xD0B9 0x6A58 # <CJK> -0xD0BA 0x514B # <CJK> -0xD0BB 0x524B # <CJK> -0xD0BC 0x5287 # <CJK> -0xD0BD 0x621F # <CJK> -0xD0BE 0x68D8 # <CJK> -0xD0BF 0x6975 # <CJK> -0xD0C0 0x9699 # <CJK> -0xD0C1 0x50C5 # <CJK> -0xD0C2 0x52A4 # <CJK> -0xD0C3 0x52E4 # <CJK> -0xD0C4 0x61C3 # <CJK> -0xD0C5 0x65A4 # <CJK> -0xD0C6 0x6839 # <CJK> -0xD0C7 0x69FF # <CJK> -0xD0C8 0x747E # <CJK> -0xD0C9 0x7B4B # <CJK> -0xD0CA 0x82B9 # <CJK> -0xD0CB 0x83EB # <CJK> -0xD0CC 0x89B2 # <CJK> -0xD0CD 0x8B39 # <CJK> -0xD0CE 0x8FD1 # <CJK> -0xD0CF 0x9949 # <CJK> -0xD0D0 0xF909 # <CJK> -0xD0D1 0x4ECA # <CJK> -0xD0D2 0x5997 # <CJK> -0xD0D3 0x64D2 # <CJK> -0xD0D4 0x6611 # <CJK> -0xD0D5 0x6A8E # <CJK> -0xD0D6 0x7434 # <CJK> -0xD0D7 0x7981 # <CJK> -0xD0D8 0x79BD # <CJK> -0xD0D9 0x82A9 # <CJK> -0xD0DA 0x887E # <CJK> -0xD0DB 0x887F # <CJK> -0xD0DC 0x895F # <CJK> -0xD0DD 0xF90A # <CJK> -0xD0DE 0x9326 # <CJK> -0xD0DF 0x4F0B # <CJK> -0xD0E0 0x53CA # <CJK> -0xD0E1 0x6025 # <CJK> -0xD0E2 0x6271 # <CJK> -0xD0E3 0x6C72 # <CJK> -0xD0E4 0x7D1A # <CJK> -0xD0E5 0x7D66 # <CJK> -0xD0E6 0x4E98 # <CJK> -0xD0E7 0x5162 # <CJK> -0xD0E8 0x77DC # <CJK> -0xD0E9 0x80AF # <CJK> -0xD0EA 0x4F01 # <CJK> -0xD0EB 0x4F0E # <CJK> -0xD0EC 0x5176 # <CJK> -0xD0ED 0x5180 # <CJK> -0xD0EE 0x55DC # <CJK> -0xD0EF 0x5668 # <CJK> -0xD0F0 0x573B # <CJK> -0xD0F1 0x57FA # <CJK> -0xD0F2 0x57FC # <CJK> -0xD0F3 0x5914 # <CJK> -0xD0F4 0x5947 # <CJK> -0xD0F5 0x5993 # <CJK> -0xD0F6 0x5BC4 # <CJK> -0xD0F7 0x5C90 # <CJK> -0xD0F8 0x5D0E # <CJK> -0xD0F9 0x5DF1 # <CJK> -0xD0FA 0x5E7E # <CJK> -0xD0FB 0x5FCC # <CJK> -0xD0FC 0x6280 # <CJK> -0xD0FD 0x65D7 # <CJK> -0xD0FE 0x65E3 # <CJK> -0xD1A1 0x671E # <CJK> -0xD1A2 0x671F # <CJK> -0xD1A3 0x675E # <CJK> -0xD1A4 0x68CB # <CJK> -0xD1A5 0x68C4 # <CJK> -0xD1A6 0x6A5F # <CJK> -0xD1A7 0x6B3A # <CJK> -0xD1A8 0x6C23 # <CJK> -0xD1A9 0x6C7D # <CJK> -0xD1AA 0x6C82 # <CJK> -0xD1AB 0x6DC7 # <CJK> -0xD1AC 0x7398 # <CJK> -0xD1AD 0x7426 # <CJK> -0xD1AE 0x742A # <CJK> -0xD1AF 0x7482 # <CJK> -0xD1B0 0x74A3 # <CJK> -0xD1B1 0x7578 # <CJK> -0xD1B2 0x757F # <CJK> -0xD1B3 0x7881 # <CJK> -0xD1B4 0x78EF # <CJK> -0xD1B5 0x7941 # <CJK> -0xD1B6 0x7947 # <CJK> -0xD1B7 0x7948 # <CJK> -0xD1B8 0x797A # <CJK> -0xD1B9 0x7B95 # <CJK> -0xD1BA 0x7D00 # <CJK> -0xD1BB 0x7DBA # <CJK> -0xD1BC 0x7F88 # <CJK> -0xD1BD 0x8006 # <CJK> -0xD1BE 0x802D # <CJK> -0xD1BF 0x808C # <CJK> -0xD1C0 0x8A18 # <CJK> -0xD1C1 0x8B4F # <CJK> -0xD1C2 0x8C48 # <CJK> -0xD1C3 0x8D77 # <CJK> -0xD1C4 0x9321 # <CJK> -0xD1C5 0x9324 # <CJK> -0xD1C6 0x98E2 # <CJK> -0xD1C7 0x9951 # <CJK> -0xD1C8 0x9A0E # <CJK> -0xD1C9 0x9A0F # <CJK> -0xD1CA 0x9A65 # <CJK> -0xD1CB 0x9E92 # <CJK> -0xD1CC 0x7DCA # <CJK> -0xD1CD 0x4F76 # <CJK> -0xD1CE 0x5409 # <CJK> -0xD1CF 0x62EE # <CJK> -0xD1D0 0x6854 # <CJK> -0xD1D1 0x91D1 # <CJK> -0xD1D2 0x55AB # <CJK> -0xD1D3 0x513A # <CJK> -0xD1D4 0xF90B # <CJK> -0xD1D5 0xF90C # <CJK> -0xD1D6 0x5A1C # <CJK> -0xD1D7 0x61E6 # <CJK> -0xD1D8 0xF90D # <CJK> -0xD1D9 0x62CF # <CJK> -0xD1DA 0x62FF # <CJK> -0xD1DB 0xF90E # <CJK> -0xD1DC 0xF90F # <CJK> -0xD1DD 0xF910 # <CJK> -0xD1DE 0xF911 # <CJK> -0xD1DF 0xF912 # <CJK> -0xD1E0 0xF913 # <CJK> -0xD1E1 0x90A3 # <CJK> -0xD1E2 0xF914 # <CJK> -0xD1E3 0xF915 # <CJK> -0xD1E4 0xF916 # <CJK> -0xD1E5 0xF917 # <CJK> -0xD1E6 0xF918 # <CJK> -0xD1E7 0x8AFE # <CJK> -0xD1E8 0xF919 # <CJK> -0xD1E9 0xF91A # <CJK> -0xD1EA 0xF91B # <CJK> -0xD1EB 0xF91C # <CJK> -0xD1EC 0x6696 # <CJK> -0xD1ED 0xF91D # <CJK> -0xD1EE 0x7156 # <CJK> -0xD1EF 0xF91E # <CJK> -0xD1F0 0xF91F # <CJK> -0xD1F1 0x96E3 # <CJK> -0xD1F2 0xF920 # <CJK> -0xD1F3 0x634F # <CJK> -0xD1F4 0x637A # <CJK> -0xD1F5 0x5357 # <CJK> -0xD1F6 0xF921 # <CJK> -0xD1F7 0x678F # <CJK> -0xD1F8 0x6960 # <CJK> -0xD1F9 0x6E73 # <CJK> -0xD1FA 0xF922 # <CJK> -0xD1FB 0x7537 # <CJK> -0xD1FC 0xF923 # <CJK> -0xD1FD 0xF924 # <CJK> -0xD1FE 0xF925 # <CJK> -0xD2A1 0x7D0D # <CJK> -0xD2A2 0xF926 # <CJK> -0xD2A3 0xF927 # <CJK> -0xD2A4 0x8872 # <CJK> -0xD2A5 0x56CA # <CJK> -0xD2A6 0x5A18 # <CJK> -0xD2A7 0xF928 # <CJK> -0xD2A8 0xF929 # <CJK> -0xD2A9 0xF92A # <CJK> -0xD2AA 0xF92B # <CJK> -0xD2AB 0xF92C # <CJK> -0xD2AC 0x4E43 # <CJK> -0xD2AD 0xF92D # <CJK> -0xD2AE 0x5167 # <CJK> -0xD2AF 0x5948 # <CJK> -0xD2B0 0x67F0 # <CJK> -0xD2B1 0x8010 # <CJK> -0xD2B2 0xF92E # <CJK> -0xD2B3 0x5973 # <CJK> -0xD2B4 0x5E74 # <CJK> -0xD2B5 0x649A # <CJK> -0xD2B6 0x79CA # <CJK> -0xD2B7 0x5FF5 # <CJK> -0xD2B8 0x606C # <CJK> -0xD2B9 0x62C8 # <CJK> -0xD2BA 0x637B # <CJK> -0xD2BB 0x5BE7 # <CJK> -0xD2BC 0x5BD7 # <CJK> -0xD2BD 0x52AA # <CJK> -0xD2BE 0xF92F # <CJK> -0xD2BF 0x5974 # <CJK> -0xD2C0 0x5F29 # <CJK> -0xD2C1 0x6012 # <CJK> -0xD2C2 0xF930 # <CJK> -0xD2C3 0xF931 # <CJK> -0xD2C4 0xF932 # <CJK> -0xD2C5 0x7459 # <CJK> -0xD2C6 0xF933 # <CJK> -0xD2C7 0xF934 # <CJK> -0xD2C8 0xF935 # <CJK> -0xD2C9 0xF936 # <CJK> -0xD2CA 0xF937 # <CJK> -0xD2CB 0xF938 # <CJK> -0xD2CC 0x99D1 # <CJK> -0xD2CD 0xF939 # <CJK> -0xD2CE 0xF93A # <CJK> -0xD2CF 0xF93B # <CJK> -0xD2D0 0xF93C # <CJK> -0xD2D1 0xF93D # <CJK> -0xD2D2 0xF93E # <CJK> -0xD2D3 0xF93F # <CJK> -0xD2D4 0xF940 # <CJK> -0xD2D5 0xF941 # <CJK> -0xD2D6 0xF942 # <CJK> -0xD2D7 0xF943 # <CJK> -0xD2D8 0x6FC3 # <CJK> -0xD2D9 0xF944 # <CJK> -0xD2DA 0xF945 # <CJK> -0xD2DB 0x81BF # <CJK> -0xD2DC 0x8FB2 # <CJK> -0xD2DD 0x60F1 # <CJK> -0xD2DE 0xF946 # <CJK> -0xD2DF 0xF947 # <CJK> -0xD2E0 0x8166 # <CJK> -0xD2E1 0xF948 # <CJK> -0xD2E2 0xF949 # <CJK> -0xD2E3 0x5C3F # <CJK> -0xD2E4 0xF94A # <CJK> -0xD2E5 0xF94B # <CJK> -0xD2E6 0xF94C # <CJK> -0xD2E7 0xF94D # <CJK> -0xD2E8 0xF94E # <CJK> -0xD2E9 0xF94F # <CJK> -0xD2EA 0xF950 # <CJK> -0xD2EB 0xF951 # <CJK> -0xD2EC 0x5AE9 # <CJK> -0xD2ED 0x8A25 # <CJK> -0xD2EE 0x677B # <CJK> -0xD2EF 0x7D10 # <CJK> -0xD2F0 0xF952 # <CJK> -0xD2F1 0xF953 # <CJK> -0xD2F2 0xF954 # <CJK> -0xD2F3 0xF955 # <CJK> -0xD2F4 0xF956 # <CJK> -0xD2F5 0xF957 # <CJK> -0xD2F6 0x80FD # <CJK> -0xD2F7 0xF958 # <CJK> -0xD2F8 0xF959 # <CJK> -0xD2F9 0x5C3C # <CJK> -0xD2FA 0x6CE5 # <CJK> -0xD2FB 0x533F # <CJK> -0xD2FC 0x6EBA # <CJK> -0xD2FD 0x591A # <CJK> -0xD2FE 0x8336 # <CJK> -0xD3A1 0x4E39 # <CJK> -0xD3A2 0x4EB6 # <CJK> -0xD3A3 0x4F46 # <CJK> -0xD3A4 0x55AE # <CJK> -0xD3A5 0x5718 # <CJK> -0xD3A6 0x58C7 # <CJK> -0xD3A7 0x5F56 # <CJK> -0xD3A8 0x65B7 # <CJK> -0xD3A9 0x65E6 # <CJK> -0xD3AA 0x6A80 # <CJK> -0xD3AB 0x6BB5 # <CJK> -0xD3AC 0x6E4D # <CJK> -0xD3AD 0x77ED # <CJK> -0xD3AE 0x7AEF # <CJK> -0xD3AF 0x7C1E # <CJK> -0xD3B0 0x7DDE # <CJK> -0xD3B1 0x86CB # <CJK> -0xD3B2 0x8892 # <CJK> -0xD3B3 0x9132 # <CJK> -0xD3B4 0x935B # <CJK> -0xD3B5 0x64BB # <CJK> -0xD3B6 0x6FBE # <CJK> -0xD3B7 0x737A # <CJK> -0xD3B8 0x75B8 # <CJK> -0xD3B9 0x9054 # <CJK> -0xD3BA 0x5556 # <CJK> -0xD3BB 0x574D # <CJK> -0xD3BC 0x61BA # <CJK> -0xD3BD 0x64D4 # <CJK> -0xD3BE 0x66C7 # <CJK> -0xD3BF 0x6DE1 # <CJK> -0xD3C0 0x6E5B # <CJK> -0xD3C1 0x6F6D # <CJK> -0xD3C2 0x6FB9 # <CJK> -0xD3C3 0x75F0 # <CJK> -0xD3C4 0x8043 # <CJK> -0xD3C5 0x81BD # <CJK> -0xD3C6 0x8541 # <CJK> -0xD3C7 0x8983 # <CJK> -0xD3C8 0x8AC7 # <CJK> -0xD3C9 0x8B5A # <CJK> -0xD3CA 0x931F # <CJK> -0xD3CB 0x6C93 # <CJK> -0xD3CC 0x7553 # <CJK> -0xD3CD 0x7B54 # <CJK> -0xD3CE 0x8E0F # <CJK> -0xD3CF 0x905D # <CJK> -0xD3D0 0x5510 # <CJK> -0xD3D1 0x5802 # <CJK> -0xD3D2 0x5858 # <CJK> -0xD3D3 0x5E62 # <CJK> -0xD3D4 0x6207 # <CJK> -0xD3D5 0x649E # <CJK> -0xD3D6 0x68E0 # <CJK> -0xD3D7 0x7576 # <CJK> -0xD3D8 0x7CD6 # <CJK> -0xD3D9 0x87B3 # <CJK> -0xD3DA 0x9EE8 # <CJK> -0xD3DB 0x4EE3 # <CJK> -0xD3DC 0x5788 # <CJK> -0xD3DD 0x576E # <CJK> -0xD3DE 0x5927 # <CJK> -0xD3DF 0x5C0D # <CJK> -0xD3E0 0x5CB1 # <CJK> -0xD3E1 0x5E36 # <CJK> -0xD3E2 0x5F85 # <CJK> -0xD3E3 0x6234 # <CJK> -0xD3E4 0x64E1 # <CJK> -0xD3E5 0x73B3 # <CJK> -0xD3E6 0x81FA # <CJK> -0xD3E7 0x888B # <CJK> -0xD3E8 0x8CB8 # <CJK> -0xD3E9 0x968A # <CJK> -0xD3EA 0x9EDB # <CJK> -0xD3EB 0x5B85 # <CJK> -0xD3EC 0x5FB7 # <CJK> -0xD3ED 0x60B3 # <CJK> -0xD3EE 0x5012 # <CJK> -0xD3EF 0x5200 # <CJK> -0xD3F0 0x5230 # <CJK> -0xD3F1 0x5716 # <CJK> -0xD3F2 0x5835 # <CJK> -0xD3F3 0x5857 # <CJK> -0xD3F4 0x5C0E # <CJK> -0xD3F5 0x5C60 # <CJK> -0xD3F6 0x5CF6 # <CJK> -0xD3F7 0x5D8B # <CJK> -0xD3F8 0x5EA6 # <CJK> -0xD3F9 0x5F92 # <CJK> -0xD3FA 0x60BC # <CJK> -0xD3FB 0x6311 # <CJK> -0xD3FC 0x6389 # <CJK> -0xD3FD 0x6417 # <CJK> -0xD3FE 0x6843 # <CJK> -0xD4A1 0x68F9 # <CJK> -0xD4A2 0x6AC2 # <CJK> -0xD4A3 0x6DD8 # <CJK> -0xD4A4 0x6E21 # <CJK> -0xD4A5 0x6ED4 # <CJK> -0xD4A6 0x6FE4 # <CJK> -0xD4A7 0x71FE # <CJK> -0xD4A8 0x76DC # <CJK> -0xD4A9 0x7779 # <CJK> -0xD4AA 0x79B1 # <CJK> -0xD4AB 0x7A3B # <CJK> -0xD4AC 0x8404 # <CJK> -0xD4AD 0x89A9 # <CJK> -0xD4AE 0x8CED # <CJK> -0xD4AF 0x8DF3 # <CJK> -0xD4B0 0x8E48 # <CJK> -0xD4B1 0x9003 # <CJK> -0xD4B2 0x9014 # <CJK> -0xD4B3 0x9053 # <CJK> -0xD4B4 0x90FD # <CJK> -0xD4B5 0x934D # <CJK> -0xD4B6 0x9676 # <CJK> -0xD4B7 0x97DC # <CJK> -0xD4B8 0x6BD2 # <CJK> -0xD4B9 0x7006 # <CJK> -0xD4BA 0x7258 # <CJK> -0xD4BB 0x72A2 # <CJK> -0xD4BC 0x7368 # <CJK> -0xD4BD 0x7763 # <CJK> -0xD4BE 0x79BF # <CJK> -0xD4BF 0x7BE4 # <CJK> -0xD4C0 0x7E9B # <CJK> -0xD4C1 0x8B80 # <CJK> -0xD4C2 0x58A9 # <CJK> -0xD4C3 0x60C7 # <CJK> -0xD4C4 0x6566 # <CJK> -0xD4C5 0x65FD # <CJK> -0xD4C6 0x66BE # <CJK> -0xD4C7 0x6C8C # <CJK> -0xD4C8 0x711E # <CJK> -0xD4C9 0x71C9 # <CJK> -0xD4CA 0x8C5A # <CJK> -0xD4CB 0x9813 # <CJK> -0xD4CC 0x4E6D # <CJK> -0xD4CD 0x7A81 # <CJK> -0xD4CE 0x4EDD # <CJK> -0xD4CF 0x51AC # <CJK> -0xD4D0 0x51CD # <CJK> -0xD4D1 0x52D5 # <CJK> -0xD4D2 0x540C # <CJK> -0xD4D3 0x61A7 # <CJK> -0xD4D4 0x6771 # <CJK> -0xD4D5 0x6850 # <CJK> -0xD4D6 0x68DF # <CJK> -0xD4D7 0x6D1E # <CJK> -0xD4D8 0x6F7C # <CJK> -0xD4D9 0x75BC # <CJK> -0xD4DA 0x77B3 # <CJK> -0xD4DB 0x7AE5 # <CJK> -0xD4DC 0x80F4 # <CJK> -0xD4DD 0x8463 # <CJK> -0xD4DE 0x9285 # <CJK> -0xD4DF 0x515C # <CJK> -0xD4E0 0x6597 # <CJK> -0xD4E1 0x675C # <CJK> -0xD4E2 0x6793 # <CJK> -0xD4E3 0x75D8 # <CJK> -0xD4E4 0x7AC7 # <CJK> -0xD4E5 0x8373 # <CJK> -0xD4E6 0xF95A # <CJK> -0xD4E7 0x8C46 # <CJK> -0xD4E8 0x9017 # <CJK> -0xD4E9 0x982D # <CJK> -0xD4EA 0x5C6F # <CJK> -0xD4EB 0x81C0 # <CJK> -0xD4EC 0x829A # <CJK> -0xD4ED 0x9041 # <CJK> -0xD4EE 0x906F # <CJK> -0xD4EF 0x920D # <CJK> -0xD4F0 0x5F97 # <CJK> -0xD4F1 0x5D9D # <CJK> -0xD4F2 0x6A59 # <CJK> -0xD4F3 0x71C8 # <CJK> -0xD4F4 0x767B # <CJK> -0xD4F5 0x7B49 # <CJK> -0xD4F6 0x85E4 # <CJK> -0xD4F7 0x8B04 # <CJK> -0xD4F8 0x9127 # <CJK> -0xD4F9 0x9A30 # <CJK> -0xD4FA 0x5587 # <CJK> -0xD4FB 0x61F6 # <CJK> -0xD4FC 0xF95B # <CJK> -0xD4FD 0x7669 # <CJK> -0xD4FE 0x7F85 # <CJK> -0xD5A1 0x863F # <CJK> -0xD5A2 0x87BA # <CJK> -0xD5A3 0x88F8 # <CJK> -0xD5A4 0x908F # <CJK> -0xD5A5 0xF95C # <CJK> -0xD5A6 0x6D1B # <CJK> -0xD5A7 0x70D9 # <CJK> -0xD5A8 0x73DE # <CJK> -0xD5A9 0x7D61 # <CJK> -0xD5AA 0x843D # <CJK> -0xD5AB 0xF95D # <CJK> -0xD5AC 0x916A # <CJK> -0xD5AD 0x99F1 # <CJK> -0xD5AE 0xF95E # <CJK> -0xD5AF 0x4E82 # <CJK> -0xD5B0 0x5375 # <CJK> -0xD5B1 0x6B04 # <CJK> -0xD5B2 0x6B12 # <CJK> -0xD5B3 0x703E # <CJK> -0xD5B4 0x721B # <CJK> -0xD5B5 0x862D # <CJK> -0xD5B6 0x9E1E # <CJK> -0xD5B7 0x524C # <CJK> -0xD5B8 0x8FA3 # <CJK> -0xD5B9 0x5D50 # <CJK> -0xD5BA 0x64E5 # <CJK> -0xD5BB 0x652C # <CJK> -0xD5BC 0x6B16 # <CJK> -0xD5BD 0x6FEB # <CJK> -0xD5BE 0x7C43 # <CJK> -0xD5BF 0x7E9C # <CJK> -0xD5C0 0x85CD # <CJK> -0xD5C1 0x8964 # <CJK> -0xD5C2 0x89BD # <CJK> -0xD5C3 0x62C9 # <CJK> -0xD5C4 0x81D8 # <CJK> -0xD5C5 0x881F # <CJK> -0xD5C6 0x5ECA # <CJK> -0xD5C7 0x6717 # <CJK> -0xD5C8 0x6D6A # <CJK> -0xD5C9 0x72FC # <CJK> -0xD5CA 0x7405 # <CJK> -0xD5CB 0x746F # <CJK> -0xD5CC 0x8782 # <CJK> -0xD5CD 0x90DE # <CJK> -0xD5CE 0x4F86 # <CJK> -0xD5CF 0x5D0D # <CJK> -0xD5D0 0x5FA0 # <CJK> -0xD5D1 0x840A # <CJK> -0xD5D2 0x51B7 # <CJK> -0xD5D3 0x63A0 # <CJK> -0xD5D4 0x7565 # <CJK> -0xD5D5 0x4EAE # <CJK> -0xD5D6 0x5006 # <CJK> -0xD5D7 0x5169 # <CJK> -0xD5D8 0x51C9 # <CJK> -0xD5D9 0x6881 # <CJK> -0xD5DA 0x6A11 # <CJK> -0xD5DB 0x7CAE # <CJK> -0xD5DC 0x7CB1 # <CJK> -0xD5DD 0x7CE7 # <CJK> -0xD5DE 0x826F # <CJK> -0xD5DF 0x8AD2 # <CJK> -0xD5E0 0x8F1B # <CJK> -0xD5E1 0x91CF # <CJK> -0xD5E2 0x4FB6 # <CJK> -0xD5E3 0x5137 # <CJK> -0xD5E4 0x52F5 # <CJK> -0xD5E5 0x5442 # <CJK> -0xD5E6 0x5EEC # <CJK> -0xD5E7 0x616E # <CJK> -0xD5E8 0x623E # <CJK> -0xD5E9 0x65C5 # <CJK> -0xD5EA 0x6ADA # <CJK> -0xD5EB 0x6FFE # <CJK> -0xD5EC 0x792A # <CJK> -0xD5ED 0x85DC # <CJK> -0xD5EE 0x8823 # <CJK> -0xD5EF 0x95AD # <CJK> -0xD5F0 0x9A62 # <CJK> -0xD5F1 0x9A6A # <CJK> -0xD5F2 0x9E97 # <CJK> -0xD5F3 0x9ECE # <CJK> -0xD5F4 0x529B # <CJK> -0xD5F5 0x66C6 # <CJK> -0xD5F6 0x6B77 # <CJK> -0xD5F7 0x701D # <CJK> -0xD5F8 0x792B # <CJK> -0xD5F9 0x8F62 # <CJK> -0xD5FA 0x9742 # <CJK> -0xD5FB 0x6190 # <CJK> -0xD5FC 0x6200 # <CJK> -0xD5FD 0x6523 # <CJK> -0xD5FE 0x6F23 # <CJK> -0xD6A1 0x7149 # <CJK> -0xD6A2 0x7489 # <CJK> -0xD6A3 0x7DF4 # <CJK> -0xD6A4 0x806F # <CJK> -0xD6A5 0x84EE # <CJK> -0xD6A6 0x8F26 # <CJK> -0xD6A7 0x9023 # <CJK> -0xD6A8 0x934A # <CJK> -0xD6A9 0x51BD # <CJK> -0xD6AA 0x5217 # <CJK> -0xD6AB 0x52A3 # <CJK> -0xD6AC 0x6D0C # <CJK> -0xD6AD 0x70C8 # <CJK> -0xD6AE 0x88C2 # <CJK> -0xD6AF 0x5EC9 # <CJK> -0xD6B0 0x6582 # <CJK> -0xD6B1 0x6BAE # <CJK> -0xD6B2 0x6FC2 # <CJK> -0xD6B3 0x7C3E # <CJK> -0xD6B4 0x7375 # <CJK> -0xD6B5 0x4EE4 # <CJK> -0xD6B6 0x4F36 # <CJK> -0xD6B7 0x56F9 # <CJK> -0xD6B8 0xF95F # <CJK> -0xD6B9 0x5CBA # <CJK> -0xD6BA 0x5DBA # <CJK> -0xD6BB 0x601C # <CJK> -0xD6BC 0x73B2 # <CJK> -0xD6BD 0x7B2D # <CJK> -0xD6BE 0x7F9A # <CJK> -0xD6BF 0x7FCE # <CJK> -0xD6C0 0x8046 # <CJK> -0xD6C1 0x901E # <CJK> -0xD6C2 0x9234 # <CJK> -0xD6C3 0x96F6 # <CJK> -0xD6C4 0x9748 # <CJK> -0xD6C5 0x9818 # <CJK> -0xD6C6 0x9F61 # <CJK> -0xD6C7 0x4F8B # <CJK> -0xD6C8 0x6FA7 # <CJK> -0xD6C9 0x79AE # <CJK> -0xD6CA 0x91B4 # <CJK> -0xD6CB 0x96B7 # <CJK> -0xD6CC 0x52DE # <CJK> -0xD6CD 0xF960 # <CJK> -0xD6CE 0x6488 # <CJK> -0xD6CF 0x64C4 # <CJK> -0xD6D0 0x6AD3 # <CJK> -0xD6D1 0x6F5E # <CJK> -0xD6D2 0x7018 # <CJK> -0xD6D3 0x7210 # <CJK> -0xD6D4 0x76E7 # <CJK> -0xD6D5 0x8001 # <CJK> -0xD6D6 0x8606 # <CJK> -0xD6D7 0x865C # <CJK> -0xD6D8 0x8DEF # <CJK> -0xD6D9 0x8F05 # <CJK> -0xD6DA 0x9732 # <CJK> -0xD6DB 0x9B6F # <CJK> -0xD6DC 0x9DFA # <CJK> -0xD6DD 0x9E75 # <CJK> -0xD6DE 0x788C # <CJK> -0xD6DF 0x797F # <CJK> -0xD6E0 0x7DA0 # <CJK> -0xD6E1 0x83C9 # <CJK> -0xD6E2 0x9304 # <CJK> -0xD6E3 0x9E7F # <CJK> -0xD6E4 0x9E93 # <CJK> -0xD6E5 0x8AD6 # <CJK> -0xD6E6 0x58DF # <CJK> -0xD6E7 0x5F04 # <CJK> -0xD6E8 0x6727 # <CJK> -0xD6E9 0x7027 # <CJK> -0xD6EA 0x74CF # <CJK> -0xD6EB 0x7C60 # <CJK> -0xD6EC 0x807E # <CJK> -0xD6ED 0x5121 # <CJK> -0xD6EE 0x7028 # <CJK> -0xD6EF 0x7262 # <CJK> -0xD6F0 0x78CA # <CJK> -0xD6F1 0x8CC2 # <CJK> -0xD6F2 0x8CDA # <CJK> -0xD6F3 0x8CF4 # <CJK> -0xD6F4 0x96F7 # <CJK> -0xD6F5 0x4E86 # <CJK> -0xD6F6 0x50DA # <CJK> -0xD6F7 0x5BEE # <CJK> -0xD6F8 0x5ED6 # <CJK> -0xD6F9 0x6599 # <CJK> -0xD6FA 0x71CE # <CJK> -0xD6FB 0x7642 # <CJK> -0xD6FC 0x77AD # <CJK> -0xD6FD 0x804A # <CJK> -0xD6FE 0x84FC # <CJK> -0xD7A1 0x907C # <CJK> -0xD7A2 0x9B27 # <CJK> -0xD7A3 0x9F8D # <CJK> -0xD7A4 0x58D8 # <CJK> -0xD7A5 0x5A41 # <CJK> -0xD7A6 0x5C62 # <CJK> -0xD7A7 0x6A13 # <CJK> -0xD7A8 0x6DDA # <CJK> -0xD7A9 0x6F0F # <CJK> -0xD7AA 0x763B # <CJK> -0xD7AB 0x7D2F # <CJK> -0xD7AC 0x7E37 # <CJK> -0xD7AD 0x851E # <CJK> -0xD7AE 0x8938 # <CJK> -0xD7AF 0x93E4 # <CJK> -0xD7B0 0x964B # <CJK> -0xD7B1 0x5289 # <CJK> -0xD7B2 0x65D2 # <CJK> -0xD7B3 0x67F3 # <CJK> -0xD7B4 0x69B4 # <CJK> -0xD7B5 0x6D41 # <CJK> -0xD7B6 0x6E9C # <CJK> -0xD7B7 0x700F # <CJK> -0xD7B8 0x7409 # <CJK> -0xD7B9 0x7460 # <CJK> -0xD7BA 0x7559 # <CJK> -0xD7BB 0x7624 # <CJK> -0xD7BC 0x786B # <CJK> -0xD7BD 0x8B2C # <CJK> -0xD7BE 0x985E # <CJK> -0xD7BF 0x516D # <CJK> -0xD7C0 0x622E # <CJK> -0xD7C1 0x9678 # <CJK> -0xD7C2 0x4F96 # <CJK> -0xD7C3 0x502B # <CJK> -0xD7C4 0x5D19 # <CJK> -0xD7C5 0x6DEA # <CJK> -0xD7C6 0x7DB8 # <CJK> -0xD7C7 0x8F2A # <CJK> -0xD7C8 0x5F8B # <CJK> -0xD7C9 0x6144 # <CJK> -0xD7CA 0x6817 # <CJK> -0xD7CB 0xF961 # <CJK> -0xD7CC 0x9686 # <CJK> -0xD7CD 0x52D2 # <CJK> -0xD7CE 0x808B # <CJK> -0xD7CF 0x51DC # <CJK> -0xD7D0 0x51CC # <CJK> -0xD7D1 0x695E # <CJK> -0xD7D2 0x7A1C # <CJK> -0xD7D3 0x7DBE # <CJK> -0xD7D4 0x83F1 # <CJK> -0xD7D5 0x9675 # <CJK> -0xD7D6 0x4FDA # <CJK> -0xD7D7 0x5229 # <CJK> -0xD7D8 0x5398 # <CJK> -0xD7D9 0x540F # <CJK> -0xD7DA 0x550E # <CJK> -0xD7DB 0x5C65 # <CJK> -0xD7DC 0x60A7 # <CJK> -0xD7DD 0x674E # <CJK> -0xD7DE 0x68A8 # <CJK> -0xD7DF 0x6D6C # <CJK> -0xD7E0 0x7281 # <CJK> -0xD7E1 0x72F8 # <CJK> -0xD7E2 0x7406 # <CJK> -0xD7E3 0x7483 # <CJK> -0xD7E4 0xF962 # <CJK> -0xD7E5 0x75E2 # <CJK> -0xD7E6 0x7C6C # <CJK> -0xD7E7 0x7F79 # <CJK> -0xD7E8 0x7FB8 # <CJK> -0xD7E9 0x8389 # <CJK> -0xD7EA 0x88CF # <CJK> -0xD7EB 0x88E1 # <CJK> -0xD7EC 0x91CC # <CJK> -0xD7ED 0x91D0 # <CJK> -0xD7EE 0x96E2 # <CJK> -0xD7EF 0x9BC9 # <CJK> -0xD7F0 0x541D # <CJK> -0xD7F1 0x6F7E # <CJK> -0xD7F2 0x71D0 # <CJK> -0xD7F3 0x7498 # <CJK> -0xD7F4 0x85FA # <CJK> -0xD7F5 0x8EAA # <CJK> -0xD7F6 0x96A3 # <CJK> -0xD7F7 0x9C57 # <CJK> -0xD7F8 0x9E9F # <CJK> -0xD7F9 0x6797 # <CJK> -0xD7FA 0x6DCB # <CJK> -0xD7FB 0x7433 # <CJK> -0xD7FC 0x81E8 # <CJK> -0xD7FD 0x9716 # <CJK> -0xD7FE 0x782C # <CJK> -0xD8A1 0x7ACB # <CJK> -0xD8A2 0x7B20 # <CJK> -0xD8A3 0x7C92 # <CJK> -0xD8A4 0x6469 # <CJK> -0xD8A5 0x746A # <CJK> -0xD8A6 0x75F2 # <CJK> -0xD8A7 0x78BC # <CJK> -0xD8A8 0x78E8 # <CJK> -0xD8A9 0x99AC # <CJK> -0xD8AA 0x9B54 # <CJK> -0xD8AB 0x9EBB # <CJK> -0xD8AC 0x5BDE # <CJK> -0xD8AD 0x5E55 # <CJK> -0xD8AE 0x6F20 # <CJK> -0xD8AF 0x819C # <CJK> -0xD8B0 0x83AB # <CJK> -0xD8B1 0x9088 # <CJK> -0xD8B2 0x4E07 # <CJK> -0xD8B3 0x534D # <CJK> -0xD8B4 0x5A29 # <CJK> -0xD8B5 0x5DD2 # <CJK> -0xD8B6 0x5F4E # <CJK> -0xD8B7 0x6162 # <CJK> -0xD8B8 0x633D # <CJK> -0xD8B9 0x6669 # <CJK> -0xD8BA 0x66FC # <CJK> -0xD8BB 0x6EFF # <CJK> -0xD8BC 0x6F2B # <CJK> -0xD8BD 0x7063 # <CJK> -0xD8BE 0x779E # <CJK> -0xD8BF 0x842C # <CJK> -0xD8C0 0x8513 # <CJK> -0xD8C1 0x883B # <CJK> -0xD8C2 0x8F13 # <CJK> -0xD8C3 0x9945 # <CJK> -0xD8C4 0x9C3B # <CJK> -0xD8C5 0x551C # <CJK> -0xD8C6 0x62B9 # <CJK> -0xD8C7 0x672B # <CJK> -0xD8C8 0x6CAB # <CJK> -0xD8C9 0x8309 # <CJK> -0xD8CA 0x896A # <CJK> -0xD8CB 0x977A # <CJK> -0xD8CC 0x4EA1 # <CJK> -0xD8CD 0x5984 # <CJK> -0xD8CE 0x5FD8 # <CJK> -0xD8CF 0x5FD9 # <CJK> -0xD8D0 0x671B # <CJK> -0xD8D1 0x7DB2 # <CJK> -0xD8D2 0x7F54 # <CJK> -0xD8D3 0x8292 # <CJK> -0xD8D4 0x832B # <CJK> -0xD8D5 0x83BD # <CJK> -0xD8D6 0x8F1E # <CJK> -0xD8D7 0x9099 # <CJK> -0xD8D8 0x57CB # <CJK> -0xD8D9 0x59B9 # <CJK> -0xD8DA 0x5A92 # <CJK> -0xD8DB 0x5BD0 # <CJK> -0xD8DC 0x6627 # <CJK> -0xD8DD 0x679A # <CJK> -0xD8DE 0x6885 # <CJK> -0xD8DF 0x6BCF # <CJK> -0xD8E0 0x7164 # <CJK> -0xD8E1 0x7F75 # <CJK> -0xD8E2 0x8CB7 # <CJK> -0xD8E3 0x8CE3 # <CJK> -0xD8E4 0x9081 # <CJK> -0xD8E5 0x9B45 # <CJK> -0xD8E6 0x8108 # <CJK> -0xD8E7 0x8C8A # <CJK> -0xD8E8 0x964C # <CJK> -0xD8E9 0x9A40 # <CJK> -0xD8EA 0x9EA5 # <CJK> -0xD8EB 0x5B5F # <CJK> -0xD8EC 0x6C13 # <CJK> -0xD8ED 0x731B # <CJK> -0xD8EE 0x76F2 # <CJK> -0xD8EF 0x76DF # <CJK> -0xD8F0 0x840C # <CJK> -0xD8F1 0x51AA # <CJK> -0xD8F2 0x8993 # <CJK> -0xD8F3 0x514D # <CJK> -0xD8F4 0x5195 # <CJK> -0xD8F5 0x52C9 # <CJK> -0xD8F6 0x68C9 # <CJK> -0xD8F7 0x6C94 # <CJK> -0xD8F8 0x7704 # <CJK> -0xD8F9 0x7720 # <CJK> -0xD8FA 0x7DBF # <CJK> -0xD8FB 0x7DEC # <CJK> -0xD8FC 0x9762 # <CJK> -0xD8FD 0x9EB5 # <CJK> -0xD8FE 0x6EC5 # <CJK> -0xD9A1 0x8511 # <CJK> -0xD9A2 0x51A5 # <CJK> -0xD9A3 0x540D # <CJK> -0xD9A4 0x547D # <CJK> -0xD9A5 0x660E # <CJK> -0xD9A6 0x669D # <CJK> -0xD9A7 0x6927 # <CJK> -0xD9A8 0x6E9F # <CJK> -0xD9A9 0x76BF # <CJK> -0xD9AA 0x7791 # <CJK> -0xD9AB 0x8317 # <CJK> -0xD9AC 0x84C2 # <CJK> -0xD9AD 0x879F # <CJK> -0xD9AE 0x9169 # <CJK> -0xD9AF 0x9298 # <CJK> -0xD9B0 0x9CF4 # <CJK> -0xD9B1 0x8882 # <CJK> -0xD9B2 0x4FAE # <CJK> -0xD9B3 0x5192 # <CJK> -0xD9B4 0x52DF # <CJK> -0xD9B5 0x59C6 # <CJK> -0xD9B6 0x5E3D # <CJK> -0xD9B7 0x6155 # <CJK> -0xD9B8 0x6478 # <CJK> -0xD9B9 0x6479 # <CJK> -0xD9BA 0x66AE # <CJK> -0xD9BB 0x67D0 # <CJK> -0xD9BC 0x6A21 # <CJK> -0xD9BD 0x6BCD # <CJK> -0xD9BE 0x6BDB # <CJK> -0xD9BF 0x725F # <CJK> -0xD9C0 0x7261 # <CJK> -0xD9C1 0x7441 # <CJK> -0xD9C2 0x7738 # <CJK> -0xD9C3 0x77DB # <CJK> -0xD9C4 0x8017 # <CJK> -0xD9C5 0x82BC # <CJK> -0xD9C6 0x8305 # <CJK> -0xD9C7 0x8B00 # <CJK> -0xD9C8 0x8B28 # <CJK> -0xD9C9 0x8C8C # <CJK> -0xD9CA 0x6728 # <CJK> -0xD9CB 0x6C90 # <CJK> -0xD9CC 0x7267 # <CJK> -0xD9CD 0x76EE # <CJK> -0xD9CE 0x7766 # <CJK> -0xD9CF 0x7A46 # <CJK> -0xD9D0 0x9DA9 # <CJK> -0xD9D1 0x6B7F # <CJK> -0xD9D2 0x6C92 # <CJK> -0xD9D3 0x5922 # <CJK> -0xD9D4 0x6726 # <CJK> -0xD9D5 0x8499 # <CJK> -0xD9D6 0x536F # <CJK> -0xD9D7 0x5893 # <CJK> -0xD9D8 0x5999 # <CJK> -0xD9D9 0x5EDF # <CJK> -0xD9DA 0x63CF # <CJK> -0xD9DB 0x6634 # <CJK> -0xD9DC 0x6773 # <CJK> -0xD9DD 0x6E3A # <CJK> -0xD9DE 0x732B # <CJK> -0xD9DF 0x7AD7 # <CJK> -0xD9E0 0x82D7 # <CJK> -0xD9E1 0x9328 # <CJK> -0xD9E2 0x52D9 # <CJK> -0xD9E3 0x5DEB # <CJK> -0xD9E4 0x61AE # <CJK> -0xD9E5 0x61CB # <CJK> -0xD9E6 0x620A # <CJK> -0xD9E7 0x62C7 # <CJK> -0xD9E8 0x64AB # <CJK> -0xD9E9 0x65E0 # <CJK> -0xD9EA 0x6959 # <CJK> -0xD9EB 0x6B66 # <CJK> -0xD9EC 0x6BCB # <CJK> -0xD9ED 0x7121 # <CJK> -0xD9EE 0x73F7 # <CJK> -0xD9EF 0x755D # <CJK> -0xD9F0 0x7E46 # <CJK> -0xD9F1 0x821E # <CJK> -0xD9F2 0x8302 # <CJK> -0xD9F3 0x856A # <CJK> -0xD9F4 0x8AA3 # <CJK> -0xD9F5 0x8CBF # <CJK> -0xD9F6 0x9727 # <CJK> -0xD9F7 0x9D61 # <CJK> -0xD9F8 0x58A8 # <CJK> -0xD9F9 0x9ED8 # <CJK> -0xD9FA 0x5011 # <CJK> -0xD9FB 0x520E # <CJK> -0xD9FC 0x543B # <CJK> -0xD9FD 0x554F # <CJK> -0xD9FE 0x6587 # <CJK> -0xDAA1 0x6C76 # <CJK> -0xDAA2 0x7D0A # <CJK> -0xDAA3 0x7D0B # <CJK> -0xDAA4 0x805E # <CJK> -0xDAA5 0x868A # <CJK> -0xDAA6 0x9580 # <CJK> -0xDAA7 0x96EF # <CJK> -0xDAA8 0x52FF # <CJK> -0xDAA9 0x6C95 # <CJK> -0xDAAA 0x7269 # <CJK> -0xDAAB 0x5473 # <CJK> -0xDAAC 0x5A9A # <CJK> -0xDAAD 0x5C3E # <CJK> -0xDAAE 0x5D4B # <CJK> -0xDAAF 0x5F4C # <CJK> -0xDAB0 0x5FAE # <CJK> -0xDAB1 0x672A # <CJK> -0xDAB2 0x68B6 # <CJK> -0xDAB3 0x6963 # <CJK> -0xDAB4 0x6E3C # <CJK> -0xDAB5 0x6E44 # <CJK> -0xDAB6 0x7709 # <CJK> -0xDAB7 0x7C73 # <CJK> -0xDAB8 0x7F8E # <CJK> -0xDAB9 0x8587 # <CJK> -0xDABA 0x8B0E # <CJK> -0xDABB 0x8FF7 # <CJK> -0xDABC 0x9761 # <CJK> -0xDABD 0x9EF4 # <CJK> -0xDABE 0x5CB7 # <CJK> -0xDABF 0x60B6 # <CJK> -0xDAC0 0x610D # <CJK> -0xDAC1 0x61AB # <CJK> -0xDAC2 0x654F # <CJK> -0xDAC3 0x65FB # <CJK> -0xDAC4 0x65FC # <CJK> -0xDAC5 0x6C11 # <CJK> -0xDAC6 0x6CEF # <CJK> -0xDAC7 0x739F # <CJK> -0xDAC8 0x73C9 # <CJK> -0xDAC9 0x7DE1 # <CJK> -0xDACA 0x9594 # <CJK> -0xDACB 0x5BC6 # <CJK> -0xDACC 0x871C # <CJK> -0xDACD 0x8B10 # <CJK> -0xDACE 0x525D # <CJK> -0xDACF 0x535A # <CJK> -0xDAD0 0x62CD # <CJK> -0xDAD1 0x640F # <CJK> -0xDAD2 0x64B2 # <CJK> -0xDAD3 0x6734 # <CJK> -0xDAD4 0x6A38 # <CJK> -0xDAD5 0x6CCA # <CJK> -0xDAD6 0x73C0 # <CJK> -0xDAD7 0x749E # <CJK> -0xDAD8 0x7B94 # <CJK> -0xDAD9 0x7C95 # <CJK> -0xDADA 0x7E1B # <CJK> -0xDADB 0x818A # <CJK> -0xDADC 0x8236 # <CJK> -0xDADD 0x8584 # <CJK> -0xDADE 0x8FEB # <CJK> -0xDADF 0x96F9 # <CJK> -0xDAE0 0x99C1 # <CJK> -0xDAE1 0x4F34 # <CJK> -0xDAE2 0x534A # <CJK> -0xDAE3 0x53CD # <CJK> -0xDAE4 0x53DB # <CJK> -0xDAE5 0x62CC # <CJK> -0xDAE6 0x642C # <CJK> -0xDAE7 0x6500 # <CJK> -0xDAE8 0x6591 # <CJK> -0xDAE9 0x69C3 # <CJK> -0xDAEA 0x6CEE # <CJK> -0xDAEB 0x6F58 # <CJK> -0xDAEC 0x73ED # <CJK> -0xDAED 0x7554 # <CJK> -0xDAEE 0x7622 # <CJK> -0xDAEF 0x76E4 # <CJK> -0xDAF0 0x76FC # <CJK> -0xDAF1 0x78D0 # <CJK> -0xDAF2 0x78FB # <CJK> -0xDAF3 0x792C # <CJK> -0xDAF4 0x7D46 # <CJK> -0xDAF5 0x822C # <CJK> -0xDAF6 0x87E0 # <CJK> -0xDAF7 0x8FD4 # <CJK> -0xDAF8 0x9812 # <CJK> -0xDAF9 0x98EF # <CJK> -0xDAFA 0x52C3 # <CJK> -0xDAFB 0x62D4 # <CJK> -0xDAFC 0x64A5 # <CJK> -0xDAFD 0x6E24 # <CJK> -0xDAFE 0x6F51 # <CJK> -0xDBA1 0x767C # <CJK> -0xDBA2 0x8DCB # <CJK> -0xDBA3 0x91B1 # <CJK> -0xDBA4 0x9262 # <CJK> -0xDBA5 0x9AEE # <CJK> -0xDBA6 0x9B43 # <CJK> -0xDBA7 0x5023 # <CJK> -0xDBA8 0x508D # <CJK> -0xDBA9 0x574A # <CJK> -0xDBAA 0x59A8 # <CJK> -0xDBAB 0x5C28 # <CJK> -0xDBAC 0x5E47 # <CJK> -0xDBAD 0x5F77 # <CJK> -0xDBAE 0x623F # <CJK> -0xDBAF 0x653E # <CJK> -0xDBB0 0x65B9 # <CJK> -0xDBB1 0x65C1 # <CJK> -0xDBB2 0x6609 # <CJK> -0xDBB3 0x678B # <CJK> -0xDBB4 0x699C # <CJK> -0xDBB5 0x6EC2 # <CJK> -0xDBB6 0x78C5 # <CJK> -0xDBB7 0x7D21 # <CJK> -0xDBB8 0x80AA # <CJK> -0xDBB9 0x8180 # <CJK> -0xDBBA 0x822B # <CJK> -0xDBBB 0x82B3 # <CJK> -0xDBBC 0x84A1 # <CJK> -0xDBBD 0x868C # <CJK> -0xDBBE 0x8A2A # <CJK> -0xDBBF 0x8B17 # <CJK> -0xDBC0 0x90A6 # <CJK> -0xDBC1 0x9632 # <CJK> -0xDBC2 0x9F90 # <CJK> -0xDBC3 0x500D # <CJK> -0xDBC4 0x4FF3 # <CJK> -0xDBC5 0xF963 # <CJK> -0xDBC6 0x57F9 # <CJK> -0xDBC7 0x5F98 # <CJK> -0xDBC8 0x62DC # <CJK> -0xDBC9 0x6392 # <CJK> -0xDBCA 0x676F # <CJK> -0xDBCB 0x6E43 # <CJK> -0xDBCC 0x7119 # <CJK> -0xDBCD 0x76C3 # <CJK> -0xDBCE 0x80CC # <CJK> -0xDBCF 0x80DA # <CJK> -0xDBD0 0x88F4 # <CJK> -0xDBD1 0x88F5 # <CJK> -0xDBD2 0x8919 # <CJK> -0xDBD3 0x8CE0 # <CJK> -0xDBD4 0x8F29 # <CJK> -0xDBD5 0x914D # <CJK> -0xDBD6 0x966A # <CJK> -0xDBD7 0x4F2F # <CJK> -0xDBD8 0x4F70 # <CJK> -0xDBD9 0x5E1B # <CJK> -0xDBDA 0x67CF # <CJK> -0xDBDB 0x6822 # <CJK> -0xDBDC 0x767D # <CJK> -0xDBDD 0x767E # <CJK> -0xDBDE 0x9B44 # <CJK> -0xDBDF 0x5E61 # <CJK> -0xDBE0 0x6A0A # <CJK> -0xDBE1 0x7169 # <CJK> -0xDBE2 0x71D4 # <CJK> -0xDBE3 0x756A # <CJK> -0xDBE4 0xF964 # <CJK> -0xDBE5 0x7E41 # <CJK> -0xDBE6 0x8543 # <CJK> -0xDBE7 0x85E9 # <CJK> -0xDBE8 0x98DC # <CJK> -0xDBE9 0x4F10 # <CJK> -0xDBEA 0x7B4F # <CJK> -0xDBEB 0x7F70 # <CJK> -0xDBEC 0x95A5 # <CJK> -0xDBED 0x51E1 # <CJK> -0xDBEE 0x5E06 # <CJK> -0xDBEF 0x68B5 # <CJK> -0xDBF0 0x6C3E # <CJK> -0xDBF1 0x6C4E # <CJK> -0xDBF2 0x6CDB # <CJK> -0xDBF3 0x72AF # <CJK> -0xDBF4 0x7BC4 # <CJK> -0xDBF5 0x8303 # <CJK> -0xDBF6 0x6CD5 # <CJK> -0xDBF7 0x743A # <CJK> -0xDBF8 0x50FB # <CJK> -0xDBF9 0x5288 # <CJK> -0xDBFA 0x58C1 # <CJK> -0xDBFB 0x64D8 # <CJK> -0xDBFC 0x6A97 # <CJK> -0xDBFD 0x74A7 # <CJK> -0xDBFE 0x7656 # <CJK> -0xDCA1 0x78A7 # <CJK> -0xDCA2 0x8617 # <CJK> -0xDCA3 0x95E2 # <CJK> -0xDCA4 0x9739 # <CJK> -0xDCA5 0xF965 # <CJK> -0xDCA6 0x535E # <CJK> -0xDCA7 0x5F01 # <CJK> -0xDCA8 0x8B8A # <CJK> -0xDCA9 0x8FA8 # <CJK> -0xDCAA 0x8FAF # <CJK> -0xDCAB 0x908A # <CJK> -0xDCAC 0x5225 # <CJK> -0xDCAD 0x77A5 # <CJK> -0xDCAE 0x9C49 # <CJK> -0xDCAF 0x9F08 # <CJK> -0xDCB0 0x4E19 # <CJK> -0xDCB1 0x5002 # <CJK> -0xDCB2 0x5175 # <CJK> -0xDCB3 0x5C5B # <CJK> -0xDCB4 0x5E77 # <CJK> -0xDCB5 0x661E # <CJK> -0xDCB6 0x663A # <CJK> -0xDCB7 0x67C4 # <CJK> -0xDCB8 0x68C5 # <CJK> -0xDCB9 0x70B3 # <CJK> -0xDCBA 0x7501 # <CJK> -0xDCBB 0x75C5 # <CJK> -0xDCBC 0x79C9 # <CJK> -0xDCBD 0x7ADD # <CJK> -0xDCBE 0x8F27 # <CJK> -0xDCBF 0x9920 # <CJK> -0xDCC0 0x9A08 # <CJK> -0xDCC1 0x4FDD # <CJK> -0xDCC2 0x5821 # <CJK> -0xDCC3 0x5831 # <CJK> -0xDCC4 0x5BF6 # <CJK> -0xDCC5 0x666E # <CJK> -0xDCC6 0x6B65 # <CJK> -0xDCC7 0x6D11 # <CJK> -0xDCC8 0x6E7A # <CJK> -0xDCC9 0x6F7D # <CJK> -0xDCCA 0x73E4 # <CJK> -0xDCCB 0x752B # <CJK> -0xDCCC 0x83E9 # <CJK> -0xDCCD 0x88DC # <CJK> -0xDCCE 0x8913 # <CJK> -0xDCCF 0x8B5C # <CJK> -0xDCD0 0x8F14 # <CJK> -0xDCD1 0x4F0F # <CJK> -0xDCD2 0x50D5 # <CJK> -0xDCD3 0x5310 # <CJK> -0xDCD4 0x535C # <CJK> -0xDCD5 0x5B93 # <CJK> -0xDCD6 0x5FA9 # <CJK> -0xDCD7 0x670D # <CJK> -0xDCD8 0x798F # <CJK> -0xDCD9 0x8179 # <CJK> -0xDCDA 0x832F # <CJK> -0xDCDB 0x8514 # <CJK> -0xDCDC 0x8907 # <CJK> -0xDCDD 0x8986 # <CJK> -0xDCDE 0x8F39 # <CJK> -0xDCDF 0x8F3B # <CJK> -0xDCE0 0x99A5 # <CJK> -0xDCE1 0x9C12 # <CJK> -0xDCE2 0x672C # <CJK> -0xDCE3 0x4E76 # <CJK> -0xDCE4 0x4FF8 # <CJK> -0xDCE5 0x5949 # <CJK> -0xDCE6 0x5C01 # <CJK> -0xDCE7 0x5CEF # <CJK> -0xDCE8 0x5CF0 # <CJK> -0xDCE9 0x6367 # <CJK> -0xDCEA 0x68D2 # <CJK> -0xDCEB 0x70FD # <CJK> -0xDCEC 0x71A2 # <CJK> -0xDCED 0x742B # <CJK> -0xDCEE 0x7E2B # <CJK> -0xDCEF 0x84EC # <CJK> -0xDCF0 0x8702 # <CJK> -0xDCF1 0x9022 # <CJK> -0xDCF2 0x92D2 # <CJK> -0xDCF3 0x9CF3 # <CJK> -0xDCF4 0x4E0D # <CJK> -0xDCF5 0x4ED8 # <CJK> -0xDCF6 0x4FEF # <CJK> -0xDCF7 0x5085 # <CJK> -0xDCF8 0x5256 # <CJK> -0xDCF9 0x526F # <CJK> -0xDCFA 0x5426 # <CJK> -0xDCFB 0x5490 # <CJK> -0xDCFC 0x57E0 # <CJK> -0xDCFD 0x592B # <CJK> -0xDCFE 0x5A66 # <CJK> -0xDDA1 0x5B5A # <CJK> -0xDDA2 0x5B75 # <CJK> -0xDDA3 0x5BCC # <CJK> -0xDDA4 0x5E9C # <CJK> -0xDDA5 0xF966 # <CJK> -0xDDA6 0x6276 # <CJK> -0xDDA7 0x6577 # <CJK> -0xDDA8 0x65A7 # <CJK> -0xDDA9 0x6D6E # <CJK> -0xDDAA 0x6EA5 # <CJK> -0xDDAB 0x7236 # <CJK> -0xDDAC 0x7B26 # <CJK> -0xDDAD 0x7C3F # <CJK> -0xDDAE 0x7F36 # <CJK> -0xDDAF 0x8150 # <CJK> -0xDDB0 0x8151 # <CJK> -0xDDB1 0x819A # <CJK> -0xDDB2 0x8240 # <CJK> -0xDDB3 0x8299 # <CJK> -0xDDB4 0x83A9 # <CJK> -0xDDB5 0x8A03 # <CJK> -0xDDB6 0x8CA0 # <CJK> -0xDDB7 0x8CE6 # <CJK> -0xDDB8 0x8CFB # <CJK> -0xDDB9 0x8D74 # <CJK> -0xDDBA 0x8DBA # <CJK> -0xDDBB 0x90E8 # <CJK> -0xDDBC 0x91DC # <CJK> -0xDDBD 0x961C # <CJK> -0xDDBE 0x9644 # <CJK> -0xDDBF 0x99D9 # <CJK> -0xDDC0 0x9CE7 # <CJK> -0xDDC1 0x5317 # <CJK> -0xDDC2 0x5206 # <CJK> -0xDDC3 0x5429 # <CJK> -0xDDC4 0x5674 # <CJK> -0xDDC5 0x58B3 # <CJK> -0xDDC6 0x5954 # <CJK> -0xDDC7 0x596E # <CJK> -0xDDC8 0x5FFF # <CJK> -0xDDC9 0x61A4 # <CJK> -0xDDCA 0x626E # <CJK> -0xDDCB 0x6610 # <CJK> -0xDDCC 0x6C7E # <CJK> -0xDDCD 0x711A # <CJK> -0xDDCE 0x76C6 # <CJK> -0xDDCF 0x7C89 # <CJK> -0xDDD0 0x7CDE # <CJK> -0xDDD1 0x7D1B # <CJK> -0xDDD2 0x82AC # <CJK> -0xDDD3 0x8CC1 # <CJK> -0xDDD4 0x96F0 # <CJK> -0xDDD5 0xF967 # <CJK> -0xDDD6 0x4F5B # <CJK> -0xDDD7 0x5F17 # <CJK> -0xDDD8 0x5F7F # <CJK> -0xDDD9 0x62C2 # <CJK> -0xDDDA 0x5D29 # <CJK> -0xDDDB 0x670B # <CJK> -0xDDDC 0x68DA # <CJK> -0xDDDD 0x787C # <CJK> -0xDDDE 0x7E43 # <CJK> -0xDDDF 0x9D6C # <CJK> -0xDDE0 0x4E15 # <CJK> -0xDDE1 0x5099 # <CJK> -0xDDE2 0x5315 # <CJK> -0xDDE3 0x532A # <CJK> -0xDDE4 0x5351 # <CJK> -0xDDE5 0x5983 # <CJK> -0xDDE6 0x5A62 # <CJK> -0xDDE7 0x5E87 # <CJK> -0xDDE8 0x60B2 # <CJK> -0xDDE9 0x618A # <CJK> -0xDDEA 0x6249 # <CJK> -0xDDEB 0x6279 # <CJK> -0xDDEC 0x6590 # <CJK> -0xDDED 0x6787 # <CJK> -0xDDEE 0x69A7 # <CJK> -0xDDEF 0x6BD4 # <CJK> -0xDDF0 0x6BD6 # <CJK> -0xDDF1 0x6BD7 # <CJK> -0xDDF2 0x6BD8 # <CJK> -0xDDF3 0x6CB8 # <CJK> -0xDDF4 0xF968 # <CJK> -0xDDF5 0x7435 # <CJK> -0xDDF6 0x75FA # <CJK> -0xDDF7 0x7812 # <CJK> -0xDDF8 0x7891 # <CJK> -0xDDF9 0x79D5 # <CJK> -0xDDFA 0x79D8 # <CJK> -0xDDFB 0x7C83 # <CJK> -0xDDFC 0x7DCB # <CJK> -0xDDFD 0x7FE1 # <CJK> -0xDDFE 0x80A5 # <CJK> -0xDEA1 0x813E # <CJK> -0xDEA2 0x81C2 # <CJK> -0xDEA3 0x83F2 # <CJK> -0xDEA4 0x871A # <CJK> -0xDEA5 0x88E8 # <CJK> -0xDEA6 0x8AB9 # <CJK> -0xDEA7 0x8B6C # <CJK> -0xDEA8 0x8CBB # <CJK> -0xDEA9 0x9119 # <CJK> -0xDEAA 0x975E # <CJK> -0xDEAB 0x98DB # <CJK> -0xDEAC 0x9F3B # <CJK> -0xDEAD 0x56AC # <CJK> -0xDEAE 0x5B2A # <CJK> -0xDEAF 0x5F6C # <CJK> -0xDEB0 0x658C # <CJK> -0xDEB1 0x6AB3 # <CJK> -0xDEB2 0x6BAF # <CJK> -0xDEB3 0x6D5C # <CJK> -0xDEB4 0x6FF1 # <CJK> -0xDEB5 0x7015 # <CJK> -0xDEB6 0x725D # <CJK> -0xDEB7 0x73AD # <CJK> -0xDEB8 0x8CA7 # <CJK> -0xDEB9 0x8CD3 # <CJK> -0xDEBA 0x983B # <CJK> -0xDEBB 0x6191 # <CJK> -0xDEBC 0x6C37 # <CJK> -0xDEBD 0x8058 # <CJK> -0xDEBE 0x9A01 # <CJK> -0xDEBF 0x4E4D # <CJK> -0xDEC0 0x4E8B # <CJK> -0xDEC1 0x4E9B # <CJK> -0xDEC2 0x4ED5 # <CJK> -0xDEC3 0x4F3A # <CJK> -0xDEC4 0x4F3C # <CJK> -0xDEC5 0x4F7F # <CJK> -0xDEC6 0x4FDF # <CJK> -0xDEC7 0x50FF # <CJK> -0xDEC8 0x53F2 # <CJK> -0xDEC9 0x53F8 # <CJK> -0xDECA 0x5506 # <CJK> -0xDECB 0x55E3 # <CJK> -0xDECC 0x56DB # <CJK> -0xDECD 0x58EB # <CJK> -0xDECE 0x5962 # <CJK> -0xDECF 0x5A11 # <CJK> -0xDED0 0x5BEB # <CJK> -0xDED1 0x5BFA # <CJK> -0xDED2 0x5C04 # <CJK> -0xDED3 0x5DF3 # <CJK> -0xDED4 0x5E2B # <CJK> -0xDED5 0x5F99 # <CJK> -0xDED6 0x601D # <CJK> -0xDED7 0x6368 # <CJK> -0xDED8 0x659C # <CJK> -0xDED9 0x65AF # <CJK> -0xDEDA 0x67F6 # <CJK> -0xDEDB 0x67FB # <CJK> -0xDEDC 0x68AD # <CJK> -0xDEDD 0x6B7B # <CJK> -0xDEDE 0x6C99 # <CJK> -0xDEDF 0x6CD7 # <CJK> -0xDEE0 0x6E23 # <CJK> -0xDEE1 0x7009 # <CJK> -0xDEE2 0x7345 # <CJK> -0xDEE3 0x7802 # <CJK> -0xDEE4 0x793E # <CJK> -0xDEE5 0x7940 # <CJK> -0xDEE6 0x7960 # <CJK> -0xDEE7 0x79C1 # <CJK> -0xDEE8 0x7BE9 # <CJK> -0xDEE9 0x7D17 # <CJK> -0xDEEA 0x7D72 # <CJK> -0xDEEB 0x8086 # <CJK> -0xDEEC 0x820D # <CJK> -0xDEED 0x838E # <CJK> -0xDEEE 0x84D1 # <CJK> -0xDEEF 0x86C7 # <CJK> -0xDEF0 0x88DF # <CJK> -0xDEF1 0x8A50 # <CJK> -0xDEF2 0x8A5E # <CJK> -0xDEF3 0x8B1D # <CJK> -0xDEF4 0x8CDC # <CJK> -0xDEF5 0x8D66 # <CJK> -0xDEF6 0x8FAD # <CJK> -0xDEF7 0x90AA # <CJK> -0xDEF8 0x98FC # <CJK> -0xDEF9 0x99DF # <CJK> -0xDEFA 0x9E9D # <CJK> -0xDEFB 0x524A # <CJK> -0xDEFC 0xF969 # <CJK> -0xDEFD 0x6714 # <CJK> -0xDEFE 0xF96A # <CJK> -0xDFA1 0x5098 # <CJK> -0xDFA2 0x522A # <CJK> -0xDFA3 0x5C71 # <CJK> -0xDFA4 0x6563 # <CJK> -0xDFA5 0x6C55 # <CJK> -0xDFA6 0x73CA # <CJK> -0xDFA7 0x7523 # <CJK> -0xDFA8 0x759D # <CJK> -0xDFA9 0x7B97 # <CJK> -0xDFAA 0x849C # <CJK> -0xDFAB 0x9178 # <CJK> -0xDFAC 0x9730 # <CJK> -0xDFAD 0x4E77 # <CJK> -0xDFAE 0x6492 # <CJK> -0xDFAF 0x6BBA # <CJK> -0xDFB0 0x715E # <CJK> -0xDFB1 0x85A9 # <CJK> -0xDFB2 0x4E09 # <CJK> -0xDFB3 0xF96B # <CJK> -0xDFB4 0x6749 # <CJK> -0xDFB5 0x68EE # <CJK> -0xDFB6 0x6E17 # <CJK> -0xDFB7 0x829F # <CJK> -0xDFB8 0x8518 # <CJK> -0xDFB9 0x886B # <CJK> -0xDFBA 0x63F7 # <CJK> -0xDFBB 0x6F81 # <CJK> -0xDFBC 0x9212 # <CJK> -0xDFBD 0x98AF # <CJK> -0xDFBE 0x4E0A # <CJK> -0xDFBF 0x50B7 # <CJK> -0xDFC0 0x50CF # <CJK> -0xDFC1 0x511F # <CJK> -0xDFC2 0x5546 # <CJK> -0xDFC3 0x55AA # <CJK> -0xDFC4 0x5617 # <CJK> -0xDFC5 0x5B40 # <CJK> -0xDFC6 0x5C19 # <CJK> -0xDFC7 0x5CE0 # <CJK> -0xDFC8 0x5E38 # <CJK> -0xDFC9 0x5E8A # <CJK> -0xDFCA 0x5EA0 # <CJK> -0xDFCB 0x5EC2 # <CJK> -0xDFCC 0x60F3 # <CJK> -0xDFCD 0x6851 # <CJK> -0xDFCE 0x6A61 # <CJK> -0xDFCF 0x6E58 # <CJK> -0xDFD0 0x723D # <CJK> -0xDFD1 0x7240 # <CJK> -0xDFD2 0x72C0 # <CJK> -0xDFD3 0x76F8 # <CJK> -0xDFD4 0x7965 # <CJK> -0xDFD5 0x7BB1 # <CJK> -0xDFD6 0x7FD4 # <CJK> -0xDFD7 0x88F3 # <CJK> -0xDFD8 0x89F4 # <CJK> -0xDFD9 0x8A73 # <CJK> -0xDFDA 0x8C61 # <CJK> -0xDFDB 0x8CDE # <CJK> -0xDFDC 0x971C # <CJK> -0xDFDD 0x585E # <CJK> -0xDFDE 0x74BD # <CJK> -0xDFDF 0x8CFD # <CJK> -0xDFE0 0x55C7 # <CJK> -0xDFE1 0xF96C # <CJK> -0xDFE2 0x7A61 # <CJK> -0xDFE3 0x7D22 # <CJK> -0xDFE4 0x8272 # <CJK> -0xDFE5 0x7272 # <CJK> -0xDFE6 0x751F # <CJK> -0xDFE7 0x7525 # <CJK> -0xDFE8 0xF96D # <CJK> -0xDFE9 0x7B19 # <CJK> -0xDFEA 0x5885 # <CJK> -0xDFEB 0x58FB # <CJK> -0xDFEC 0x5DBC # <CJK> -0xDFED 0x5E8F # <CJK> -0xDFEE 0x5EB6 # <CJK> -0xDFEF 0x5F90 # <CJK> -0xDFF0 0x6055 # <CJK> -0xDFF1 0x6292 # <CJK> -0xDFF2 0x637F # <CJK> -0xDFF3 0x654D # <CJK> -0xDFF4 0x6691 # <CJK> -0xDFF5 0x66D9 # <CJK> -0xDFF6 0x66F8 # <CJK> -0xDFF7 0x6816 # <CJK> -0xDFF8 0x68F2 # <CJK> -0xDFF9 0x7280 # <CJK> -0xDFFA 0x745E # <CJK> -0xDFFB 0x7B6E # <CJK> -0xDFFC 0x7D6E # <CJK> -0xDFFD 0x7DD6 # <CJK> -0xDFFE 0x7F72 # <CJK> -0xE0A1 0x80E5 # <CJK> -0xE0A2 0x8212 # <CJK> -0xE0A3 0x85AF # <CJK> -0xE0A4 0x897F # <CJK> -0xE0A5 0x8A93 # <CJK> -0xE0A6 0x901D # <CJK> -0xE0A7 0x92E4 # <CJK> -0xE0A8 0x9ECD # <CJK> -0xE0A9 0x9F20 # <CJK> -0xE0AA 0x5915 # <CJK> -0xE0AB 0x596D # <CJK> -0xE0AC 0x5E2D # <CJK> -0xE0AD 0x60DC # <CJK> -0xE0AE 0x6614 # <CJK> -0xE0AF 0x6673 # <CJK> -0xE0B0 0x6790 # <CJK> -0xE0B1 0x6C50 # <CJK> -0xE0B2 0x6DC5 # <CJK> -0xE0B3 0x6F5F # <CJK> -0xE0B4 0x77F3 # <CJK> -0xE0B5 0x78A9 # <CJK> -0xE0B6 0x84C6 # <CJK> -0xE0B7 0x91CB # <CJK> -0xE0B8 0x932B # <CJK> -0xE0B9 0x4ED9 # <CJK> -0xE0BA 0x50CA # <CJK> -0xE0BB 0x5148 # <CJK> -0xE0BC 0x5584 # <CJK> -0xE0BD 0x5B0B # <CJK> -0xE0BE 0x5BA3 # <CJK> -0xE0BF 0x6247 # <CJK> -0xE0C0 0x657E # <CJK> -0xE0C1 0x65CB # <CJK> -0xE0C2 0x6E32 # <CJK> -0xE0C3 0x717D # <CJK> -0xE0C4 0x7401 # <CJK> -0xE0C5 0x7444 # <CJK> -0xE0C6 0x7487 # <CJK> -0xE0C7 0x74BF # <CJK> -0xE0C8 0x766C # <CJK> -0xE0C9 0x79AA # <CJK> -0xE0CA 0x7DDA # <CJK> -0xE0CB 0x7E55 # <CJK> -0xE0CC 0x7FA8 # <CJK> -0xE0CD 0x817A # <CJK> -0xE0CE 0x81B3 # <CJK> -0xE0CF 0x8239 # <CJK> -0xE0D0 0x861A # <CJK> -0xE0D1 0x87EC # <CJK> -0xE0D2 0x8A75 # <CJK> -0xE0D3 0x8DE3 # <CJK> -0xE0D4 0x9078 # <CJK> -0xE0D5 0x9291 # <CJK> -0xE0D6 0x9425 # <CJK> -0xE0D7 0x994D # <CJK> -0xE0D8 0x9BAE # <CJK> -0xE0D9 0x5368 # <CJK> -0xE0DA 0x5C51 # <CJK> -0xE0DB 0x6954 # <CJK> -0xE0DC 0x6CC4 # <CJK> -0xE0DD 0x6D29 # <CJK> -0xE0DE 0x6E2B # <CJK> -0xE0DF 0x820C # <CJK> -0xE0E0 0x859B # <CJK> -0xE0E1 0x893B # <CJK> -0xE0E2 0x8A2D # <CJK> -0xE0E3 0x8AAA # <CJK> -0xE0E4 0x96EA # <CJK> -0xE0E5 0x9F67 # <CJK> -0xE0E6 0x5261 # <CJK> -0xE0E7 0x66B9 # <CJK> -0xE0E8 0x6BB2 # <CJK> -0xE0E9 0x7E96 # <CJK> -0xE0EA 0x87FE # <CJK> -0xE0EB 0x8D0D # <CJK> -0xE0EC 0x9583 # <CJK> -0xE0ED 0x965D # <CJK> -0xE0EE 0x651D # <CJK> -0xE0EF 0x6D89 # <CJK> -0xE0F0 0x71EE # <CJK> -0xE0F1 0xF96E # <CJK> -0xE0F2 0x57CE # <CJK> -0xE0F3 0x59D3 # <CJK> -0xE0F4 0x5BAC # <CJK> -0xE0F5 0x6027 # <CJK> -0xE0F6 0x60FA # <CJK> -0xE0F7 0x6210 # <CJK> -0xE0F8 0x661F # <CJK> -0xE0F9 0x665F # <CJK> -0xE0FA 0x7329 # <CJK> -0xE0FB 0x73F9 # <CJK> -0xE0FC 0x76DB # <CJK> -0xE0FD 0x7701 # <CJK> -0xE0FE 0x7B6C # <CJK> -0xE1A1 0x8056 # <CJK> -0xE1A2 0x8072 # <CJK> -0xE1A3 0x8165 # <CJK> -0xE1A4 0x8AA0 # <CJK> -0xE1A5 0x9192 # <CJK> -0xE1A6 0x4E16 # <CJK> -0xE1A7 0x52E2 # <CJK> -0xE1A8 0x6B72 # <CJK> -0xE1A9 0x6D17 # <CJK> -0xE1AA 0x7A05 # <CJK> -0xE1AB 0x7B39 # <CJK> -0xE1AC 0x7D30 # <CJK> -0xE1AD 0xF96F # <CJK> -0xE1AE 0x8CB0 # <CJK> -0xE1AF 0x53EC # <CJK> -0xE1B0 0x562F # <CJK> -0xE1B1 0x5851 # <CJK> -0xE1B2 0x5BB5 # <CJK> -0xE1B3 0x5C0F # <CJK> -0xE1B4 0x5C11 # <CJK> -0xE1B5 0x5DE2 # <CJK> -0xE1B6 0x6240 # <CJK> -0xE1B7 0x6383 # <CJK> -0xE1B8 0x6414 # <CJK> -0xE1B9 0x662D # <CJK> -0xE1BA 0x68B3 # <CJK> -0xE1BB 0x6CBC # <CJK> -0xE1BC 0x6D88 # <CJK> -0xE1BD 0x6EAF # <CJK> -0xE1BE 0x701F # <CJK> -0xE1BF 0x70A4 # <CJK> -0xE1C0 0x71D2 # <CJK> -0xE1C1 0x7526 # <CJK> -0xE1C2 0x758F # <CJK> -0xE1C3 0x758E # <CJK> -0xE1C4 0x7619 # <CJK> -0xE1C5 0x7B11 # <CJK> -0xE1C6 0x7BE0 # <CJK> -0xE1C7 0x7C2B # <CJK> -0xE1C8 0x7D20 # <CJK> -0xE1C9 0x7D39 # <CJK> -0xE1CA 0x852C # <CJK> -0xE1CB 0x856D # <CJK> -0xE1CC 0x8607 # <CJK> -0xE1CD 0x8A34 # <CJK> -0xE1CE 0x900D # <CJK> -0xE1CF 0x9061 # <CJK> -0xE1D0 0x90B5 # <CJK> -0xE1D1 0x92B7 # <CJK> -0xE1D2 0x97F6 # <CJK> -0xE1D3 0x9A37 # <CJK> -0xE1D4 0x4FD7 # <CJK> -0xE1D5 0x5C6C # <CJK> -0xE1D6 0x675F # <CJK> -0xE1D7 0x6D91 # <CJK> -0xE1D8 0x7C9F # <CJK> -0xE1D9 0x7E8C # <CJK> -0xE1DA 0x8B16 # <CJK> -0xE1DB 0x8D16 # <CJK> -0xE1DC 0x901F # <CJK> -0xE1DD 0x5B6B # <CJK> -0xE1DE 0x5DFD # <CJK> -0xE1DF 0x640D # <CJK> -0xE1E0 0x84C0 # <CJK> -0xE1E1 0x905C # <CJK> -0xE1E2 0x98E1 # <CJK> -0xE1E3 0x7387 # <CJK> -0xE1E4 0x5B8B # <CJK> -0xE1E5 0x609A # <CJK> -0xE1E6 0x677E # <CJK> -0xE1E7 0x6DDE # <CJK> -0xE1E8 0x8A1F # <CJK> -0xE1E9 0x8AA6 # <CJK> -0xE1EA 0x9001 # <CJK> -0xE1EB 0x980C # <CJK> -0xE1EC 0x5237 # <CJK> -0xE1ED 0xF970 # <CJK> -0xE1EE 0x7051 # <CJK> -0xE1EF 0x788E # <CJK> -0xE1F0 0x9396 # <CJK> -0xE1F1 0x8870 # <CJK> -0xE1F2 0x91D7 # <CJK> -0xE1F3 0x4FEE # <CJK> -0xE1F4 0x53D7 # <CJK> -0xE1F5 0x55FD # <CJK> -0xE1F6 0x56DA # <CJK> -0xE1F7 0x5782 # <CJK> -0xE1F8 0x58FD # <CJK> -0xE1F9 0x5AC2 # <CJK> -0xE1FA 0x5B88 # <CJK> -0xE1FB 0x5CAB # <CJK> -0xE1FC 0x5CC0 # <CJK> -0xE1FD 0x5E25 # <CJK> -0xE1FE 0x6101 # <CJK> -0xE2A1 0x620D # <CJK> -0xE2A2 0x624B # <CJK> -0xE2A3 0x6388 # <CJK> -0xE2A4 0x641C # <CJK> -0xE2A5 0x6536 # <CJK> -0xE2A6 0x6578 # <CJK> -0xE2A7 0x6A39 # <CJK> -0xE2A8 0x6B8A # <CJK> -0xE2A9 0x6C34 # <CJK> -0xE2AA 0x6D19 # <CJK> -0xE2AB 0x6F31 # <CJK> -0xE2AC 0x71E7 # <CJK> -0xE2AD 0x72E9 # <CJK> -0xE2AE 0x7378 # <CJK> -0xE2AF 0x7407 # <CJK> -0xE2B0 0x74B2 # <CJK> -0xE2B1 0x7626 # <CJK> -0xE2B2 0x7761 # <CJK> -0xE2B3 0x79C0 # <CJK> -0xE2B4 0x7A57 # <CJK> -0xE2B5 0x7AEA # <CJK> -0xE2B6 0x7CB9 # <CJK> -0xE2B7 0x7D8F # <CJK> -0xE2B8 0x7DAC # <CJK> -0xE2B9 0x7E61 # <CJK> -0xE2BA 0x7F9E # <CJK> -0xE2BB 0x8129 # <CJK> -0xE2BC 0x8331 # <CJK> -0xE2BD 0x8490 # <CJK> -0xE2BE 0x84DA # <CJK> -0xE2BF 0x85EA # <CJK> -0xE2C0 0x8896 # <CJK> -0xE2C1 0x8AB0 # <CJK> -0xE2C2 0x8B90 # <CJK> -0xE2C3 0x8F38 # <CJK> -0xE2C4 0x9042 # <CJK> -0xE2C5 0x9083 # <CJK> -0xE2C6 0x916C # <CJK> -0xE2C7 0x9296 # <CJK> -0xE2C8 0x92B9 # <CJK> -0xE2C9 0x968B # <CJK> -0xE2CA 0x96A7 # <CJK> -0xE2CB 0x96A8 # <CJK> -0xE2CC 0x96D6 # <CJK> -0xE2CD 0x9700 # <CJK> -0xE2CE 0x9808 # <CJK> -0xE2CF 0x9996 # <CJK> -0xE2D0 0x9AD3 # <CJK> -0xE2D1 0x9B1A # <CJK> -0xE2D2 0x53D4 # <CJK> -0xE2D3 0x587E # <CJK> -0xE2D4 0x5919 # <CJK> -0xE2D5 0x5B70 # <CJK> -0xE2D6 0x5BBF # <CJK> -0xE2D7 0x6DD1 # <CJK> -0xE2D8 0x6F5A # <CJK> -0xE2D9 0x719F # <CJK> -0xE2DA 0x7421 # <CJK> -0xE2DB 0x74B9 # <CJK> -0xE2DC 0x8085 # <CJK> -0xE2DD 0x83FD # <CJK> -0xE2DE 0x5DE1 # <CJK> -0xE2DF 0x5F87 # <CJK> -0xE2E0 0x5FAA # <CJK> -0xE2E1 0x6042 # <CJK> -0xE2E2 0x65EC # <CJK> -0xE2E3 0x6812 # <CJK> -0xE2E4 0x696F # <CJK> -0xE2E5 0x6A53 # <CJK> -0xE2E6 0x6B89 # <CJK> -0xE2E7 0x6D35 # <CJK> -0xE2E8 0x6DF3 # <CJK> -0xE2E9 0x73E3 # <CJK> -0xE2EA 0x76FE # <CJK> -0xE2EB 0x77AC # <CJK> -0xE2EC 0x7B4D # <CJK> -0xE2ED 0x7D14 # <CJK> -0xE2EE 0x8123 # <CJK> -0xE2EF 0x821C # <CJK> -0xE2F0 0x8340 # <CJK> -0xE2F1 0x84F4 # <CJK> -0xE2F2 0x8563 # <CJK> -0xE2F3 0x8A62 # <CJK> -0xE2F4 0x8AC4 # <CJK> -0xE2F5 0x9187 # <CJK> -0xE2F6 0x931E # <CJK> -0xE2F7 0x9806 # <CJK> -0xE2F8 0x99B4 # <CJK> -0xE2F9 0x620C # <CJK> -0xE2FA 0x8853 # <CJK> -0xE2FB 0x8FF0 # <CJK> -0xE2FC 0x9265 # <CJK> -0xE2FD 0x5D07 # <CJK> -0xE2FE 0x5D27 # <CJK> -0xE3A1 0x5D69 # <CJK> -0xE3A2 0x745F # <CJK> -0xE3A3 0x819D # <CJK> -0xE3A4 0x8768 # <CJK> -0xE3A5 0x6FD5 # <CJK> -0xE3A6 0x62FE # <CJK> -0xE3A7 0x7FD2 # <CJK> -0xE3A8 0x8936 # <CJK> -0xE3A9 0x8972 # <CJK> -0xE3AA 0x4E1E # <CJK> -0xE3AB 0x4E58 # <CJK> -0xE3AC 0x50E7 # <CJK> -0xE3AD 0x52DD # <CJK> -0xE3AE 0x5347 # <CJK> -0xE3AF 0x627F # <CJK> -0xE3B0 0x6607 # <CJK> -0xE3B1 0x7E69 # <CJK> -0xE3B2 0x8805 # <CJK> -0xE3B3 0x965E # <CJK> -0xE3B4 0x4F8D # <CJK> -0xE3B5 0x5319 # <CJK> -0xE3B6 0x5636 # <CJK> -0xE3B7 0x59CB # <CJK> -0xE3B8 0x5AA4 # <CJK> -0xE3B9 0x5C38 # <CJK> -0xE3BA 0x5C4E # <CJK> -0xE3BB 0x5C4D # <CJK> -0xE3BC 0x5E02 # <CJK> -0xE3BD 0x5F11 # <CJK> -0xE3BE 0x6043 # <CJK> -0xE3BF 0x65BD # <CJK> -0xE3C0 0x662F # <CJK> -0xE3C1 0x6642 # <CJK> -0xE3C2 0x67BE # <CJK> -0xE3C3 0x67F4 # <CJK> -0xE3C4 0x731C # <CJK> -0xE3C5 0x77E2 # <CJK> -0xE3C6 0x793A # <CJK> -0xE3C7 0x7FC5 # <CJK> -0xE3C8 0x8494 # <CJK> -0xE3C9 0x84CD # <CJK> -0xE3CA 0x8996 # <CJK> -0xE3CB 0x8A66 # <CJK> -0xE3CC 0x8A69 # <CJK> -0xE3CD 0x8AE1 # <CJK> -0xE3CE 0x8C55 # <CJK> -0xE3CF 0x8C7A # <CJK> -0xE3D0 0x57F4 # <CJK> -0xE3D1 0x5BD4 # <CJK> -0xE3D2 0x5F0F # <CJK> -0xE3D3 0x606F # <CJK> -0xE3D4 0x62ED # <CJK> -0xE3D5 0x690D # <CJK> -0xE3D6 0x6B96 # <CJK> -0xE3D7 0x6E5C # <CJK> -0xE3D8 0x7184 # <CJK> -0xE3D9 0x7BD2 # <CJK> -0xE3DA 0x8755 # <CJK> -0xE3DB 0x8B58 # <CJK> -0xE3DC 0x8EFE # <CJK> -0xE3DD 0x98DF # <CJK> -0xE3DE 0x98FE # <CJK> -0xE3DF 0x4F38 # <CJK> -0xE3E0 0x4F81 # <CJK> -0xE3E1 0x4FE1 # <CJK> -0xE3E2 0x547B # <CJK> -0xE3E3 0x5A20 # <CJK> -0xE3E4 0x5BB8 # <CJK> -0xE3E5 0x613C # <CJK> -0xE3E6 0x65B0 # <CJK> -0xE3E7 0x6668 # <CJK> -0xE3E8 0x71FC # <CJK> -0xE3E9 0x7533 # <CJK> -0xE3EA 0x795E # <CJK> -0xE3EB 0x7D33 # <CJK> -0xE3EC 0x814E # <CJK> -0xE3ED 0x81E3 # <CJK> -0xE3EE 0x8398 # <CJK> -0xE3EF 0x85AA # <CJK> -0xE3F0 0x85CE # <CJK> -0xE3F1 0x8703 # <CJK> -0xE3F2 0x8A0A # <CJK> -0xE3F3 0x8EAB # <CJK> -0xE3F4 0x8F9B # <CJK> -0xE3F5 0xF971 # <CJK> -0xE3F6 0x8FC5 # <CJK> -0xE3F7 0x5931 # <CJK> -0xE3F8 0x5BA4 # <CJK> -0xE3F9 0x5BE6 # <CJK> -0xE3FA 0x6089 # <CJK> -0xE3FB 0x5BE9 # <CJK> -0xE3FC 0x5C0B # <CJK> -0xE3FD 0x5FC3 # <CJK> -0xE3FE 0x6C81 # <CJK> -0xE4A1 0xF972 # <CJK> -0xE4A2 0x6DF1 # <CJK> -0xE4A3 0x700B # <CJK> -0xE4A4 0x751A # <CJK> -0xE4A5 0x82AF # <CJK> -0xE4A6 0x8AF6 # <CJK> -0xE4A7 0x4EC0 # <CJK> -0xE4A8 0x5341 # <CJK> -0xE4A9 0xF973 # <CJK> -0xE4AA 0x96D9 # <CJK> -0xE4AB 0x6C0F # <CJK> -0xE4AC 0x4E9E # <CJK> -0xE4AD 0x4FC4 # <CJK> -0xE4AE 0x5152 # <CJK> -0xE4AF 0x555E # <CJK> -0xE4B0 0x5A25 # <CJK> -0xE4B1 0x5CE8 # <CJK> -0xE4B2 0x6211 # <CJK> -0xE4B3 0x7259 # <CJK> -0xE4B4 0x82BD # <CJK> -0xE4B5 0x83AA # <CJK> -0xE4B6 0x86FE # <CJK> -0xE4B7 0x8859 # <CJK> -0xE4B8 0x8A1D # <CJK> -0xE4B9 0x963F # <CJK> -0xE4BA 0x96C5 # <CJK> -0xE4BB 0x9913 # <CJK> -0xE4BC 0x9D09 # <CJK> -0xE4BD 0x9D5D # <CJK> -0xE4BE 0x580A # <CJK> -0xE4BF 0x5CB3 # <CJK> -0xE4C0 0x5DBD # <CJK> -0xE4C1 0x5E44 # <CJK> -0xE4C2 0x60E1 # <CJK> -0xE4C3 0x6115 # <CJK> -0xE4C4 0x63E1 # <CJK> -0xE4C5 0x6A02 # <CJK> -0xE4C6 0x6E25 # <CJK> -0xE4C7 0x9102 # <CJK> -0xE4C8 0x9354 # <CJK> -0xE4C9 0x984E # <CJK> -0xE4CA 0x9C10 # <CJK> -0xE4CB 0x9F77 # <CJK> -0xE4CC 0x5B89 # <CJK> -0xE4CD 0x5CB8 # <CJK> -0xE4CE 0x6309 # <CJK> -0xE4CF 0x664F # <CJK> -0xE4D0 0x6848 # <CJK> -0xE4D1 0x773C # <CJK> -0xE4D2 0x96C1 # <CJK> -0xE4D3 0x978D # <CJK> -0xE4D4 0x9854 # <CJK> -0xE4D5 0x9B9F # <CJK> -0xE4D6 0x65A1 # <CJK> -0xE4D7 0x8B01 # <CJK> -0xE4D8 0x8ECB # <CJK> -0xE4D9 0x95BC # <CJK> -0xE4DA 0x5535 # <CJK> -0xE4DB 0x5CA9 # <CJK> -0xE4DC 0x5DD6 # <CJK> -0xE4DD 0x5EB5 # <CJK> -0xE4DE 0x6697 # <CJK> -0xE4DF 0x764C # <CJK> -0xE4E0 0x83F4 # <CJK> -0xE4E1 0x95C7 # <CJK> -0xE4E2 0x58D3 # <CJK> -0xE4E3 0x62BC # <CJK> -0xE4E4 0x72CE # <CJK> -0xE4E5 0x9D28 # <CJK> -0xE4E6 0x4EF0 # <CJK> -0xE4E7 0x592E # <CJK> -0xE4E8 0x600F # <CJK> -0xE4E9 0x663B # <CJK> -0xE4EA 0x6B83 # <CJK> -0xE4EB 0x79E7 # <CJK> -0xE4EC 0x9D26 # <CJK> -0xE4ED 0x5393 # <CJK> -0xE4EE 0x54C0 # <CJK> -0xE4EF 0x57C3 # <CJK> -0xE4F0 0x5D16 # <CJK> -0xE4F1 0x611B # <CJK> -0xE4F2 0x66D6 # <CJK> -0xE4F3 0x6DAF # <CJK> -0xE4F4 0x788D # <CJK> -0xE4F5 0x827E # <CJK> -0xE4F6 0x9698 # <CJK> -0xE4F7 0x9744 # <CJK> -0xE4F8 0x5384 # <CJK> -0xE4F9 0x627C # <CJK> -0xE4FA 0x6396 # <CJK> -0xE4FB 0x6DB2 # <CJK> -0xE4FC 0x7E0A # <CJK> -0xE4FD 0x814B # <CJK> -0xE4FE 0x984D # <CJK> -0xE5A1 0x6AFB # <CJK> -0xE5A2 0x7F4C # <CJK> -0xE5A3 0x9DAF # <CJK> -0xE5A4 0x9E1A # <CJK> -0xE5A5 0x4E5F # <CJK> -0xE5A6 0x503B # <CJK> -0xE5A7 0x51B6 # <CJK> -0xE5A8 0x591C # <CJK> -0xE5A9 0x60F9 # <CJK> -0xE5AA 0x63F6 # <CJK> -0xE5AB 0x6930 # <CJK> -0xE5AC 0x723A # <CJK> -0xE5AD 0x8036 # <CJK> -0xE5AE 0xF974 # <CJK> -0xE5AF 0x91CE # <CJK> -0xE5B0 0x5F31 # <CJK> -0xE5B1 0xF975 # <CJK> -0xE5B2 0xF976 # <CJK> -0xE5B3 0x7D04 # <CJK> -0xE5B4 0x82E5 # <CJK> -0xE5B5 0x846F # <CJK> -0xE5B6 0x84BB # <CJK> -0xE5B7 0x85E5 # <CJK> -0xE5B8 0x8E8D # <CJK> -0xE5B9 0xF977 # <CJK> -0xE5BA 0x4F6F # <CJK> -0xE5BB 0xF978 # <CJK> -0xE5BC 0xF979 # <CJK> -0xE5BD 0x58E4 # <CJK> -0xE5BE 0x5B43 # <CJK> -0xE5BF 0x6059 # <CJK> -0xE5C0 0x63DA # <CJK> -0xE5C1 0x6518 # <CJK> -0xE5C2 0x656D # <CJK> -0xE5C3 0x6698 # <CJK> -0xE5C4 0xF97A # <CJK> -0xE5C5 0x694A # <CJK> -0xE5C6 0x6A23 # <CJK> -0xE5C7 0x6D0B # <CJK> -0xE5C8 0x7001 # <CJK> -0xE5C9 0x716C # <CJK> -0xE5CA 0x75D2 # <CJK> -0xE5CB 0x760D # <CJK> -0xE5CC 0x79B3 # <CJK> -0xE5CD 0x7A70 # <CJK> -0xE5CE 0xF97B # <CJK> -0xE5CF 0x7F8A # <CJK> -0xE5D0 0xF97C # <CJK> -0xE5D1 0x8944 # <CJK> -0xE5D2 0xF97D # <CJK> -0xE5D3 0x8B93 # <CJK> -0xE5D4 0x91C0 # <CJK> -0xE5D5 0x967D # <CJK> -0xE5D6 0xF97E # <CJK> -0xE5D7 0x990A # <CJK> -0xE5D8 0x5704 # <CJK> -0xE5D9 0x5FA1 # <CJK> -0xE5DA 0x65BC # <CJK> -0xE5DB 0x6F01 # <CJK> -0xE5DC 0x7600 # <CJK> -0xE5DD 0x79A6 # <CJK> -0xE5DE 0x8A9E # <CJK> -0xE5DF 0x99AD # <CJK> -0xE5E0 0x9B5A # <CJK> -0xE5E1 0x9F6C # <CJK> -0xE5E2 0x5104 # <CJK> -0xE5E3 0x61B6 # <CJK> -0xE5E4 0x6291 # <CJK> -0xE5E5 0x6A8D # <CJK> -0xE5E6 0x81C6 # <CJK> -0xE5E7 0x5043 # <CJK> -0xE5E8 0x5830 # <CJK> -0xE5E9 0x5F66 # <CJK> -0xE5EA 0x7109 # <CJK> -0xE5EB 0x8A00 # <CJK> -0xE5EC 0x8AFA # <CJK> -0xE5ED 0x5B7C # <CJK> -0xE5EE 0x8616 # <CJK> -0xE5EF 0x4FFA # <CJK> -0xE5F0 0x513C # <CJK> -0xE5F1 0x56B4 # <CJK> -0xE5F2 0x5944 # <CJK> -0xE5F3 0x63A9 # <CJK> -0xE5F4 0x6DF9 # <CJK> -0xE5F5 0x5DAA # <CJK> -0xE5F6 0x696D # <CJK> -0xE5F7 0x5186 # <CJK> -0xE5F8 0x4E88 # <CJK> -0xE5F9 0x4F59 # <CJK> -0xE5FA 0xF97F # <CJK> -0xE5FB 0xF980 # <CJK> -0xE5FC 0xF981 # <CJK> -0xE5FD 0x5982 # <CJK> -0xE5FE 0xF982 # <CJK> -0xE6A1 0xF983 # <CJK> -0xE6A2 0x6B5F # <CJK> -0xE6A3 0x6C5D # <CJK> -0xE6A4 0xF984 # <CJK> -0xE6A5 0x74B5 # <CJK> -0xE6A6 0x7916 # <CJK> -0xE6A7 0xF985 # <CJK> -0xE6A8 0x8207 # <CJK> -0xE6A9 0x8245 # <CJK> -0xE6AA 0x8339 # <CJK> -0xE6AB 0x8F3F # <CJK> -0xE6AC 0x8F5D # <CJK> -0xE6AD 0xF986 # <CJK> -0xE6AE 0x9918 # <CJK> -0xE6AF 0xF987 # <CJK> -0xE6B0 0xF988 # <CJK> -0xE6B1 0xF989 # <CJK> -0xE6B2 0x4EA6 # <CJK> -0xE6B3 0xF98A # <CJK> -0xE6B4 0x57DF # <CJK> -0xE6B5 0x5F79 # <CJK> -0xE6B6 0x6613 # <CJK> -0xE6B7 0xF98B # <CJK> -0xE6B8 0xF98C # <CJK> -0xE6B9 0x75AB # <CJK> -0xE6BA 0x7E79 # <CJK> -0xE6BB 0x8B6F # <CJK> -0xE6BC 0xF98D # <CJK> -0xE6BD 0x9006 # <CJK> -0xE6BE 0x9A5B # <CJK> -0xE6BF 0x56A5 # <CJK> -0xE6C0 0x5827 # <CJK> -0xE6C1 0x59F8 # <CJK> -0xE6C2 0x5A1F # <CJK> -0xE6C3 0x5BB4 # <CJK> -0xE6C4 0xF98E # <CJK> -0xE6C5 0x5EF6 # <CJK> -0xE6C6 0xF98F # <CJK> -0xE6C7 0xF990 # <CJK> -0xE6C8 0x6350 # <CJK> -0xE6C9 0x633B # <CJK> -0xE6CA 0xF991 # <CJK> -0xE6CB 0x693D # <CJK> -0xE6CC 0x6C87 # <CJK> -0xE6CD 0x6CBF # <CJK> -0xE6CE 0x6D8E # <CJK> -0xE6CF 0x6D93 # <CJK> -0xE6D0 0x6DF5 # <CJK> -0xE6D1 0x6F14 # <CJK> -0xE6D2 0xF992 # <CJK> -0xE6D3 0x70DF # <CJK> -0xE6D4 0x7136 # <CJK> -0xE6D5 0x7159 # <CJK> -0xE6D6 0xF993 # <CJK> -0xE6D7 0x71C3 # <CJK> -0xE6D8 0x71D5 # <CJK> -0xE6D9 0xF994 # <CJK> -0xE6DA 0x784F # <CJK> -0xE6DB 0x786F # <CJK> -0xE6DC 0xF995 # <CJK> -0xE6DD 0x7B75 # <CJK> -0xE6DE 0x7DE3 # <CJK> -0xE6DF 0xF996 # <CJK> -0xE6E0 0x7E2F # <CJK> -0xE6E1 0xF997 # <CJK> -0xE6E2 0x884D # <CJK> -0xE6E3 0x8EDF # <CJK> -0xE6E4 0xF998 # <CJK> -0xE6E5 0xF999 # <CJK> -0xE6E6 0xF99A # <CJK> -0xE6E7 0x925B # <CJK> -0xE6E8 0xF99B # <CJK> -0xE6E9 0x9CF6 # <CJK> -0xE6EA 0xF99C # <CJK> -0xE6EB 0xF99D # <CJK> -0xE6EC 0xF99E # <CJK> -0xE6ED 0x6085 # <CJK> -0xE6EE 0x6D85 # <CJK> -0xE6EF 0xF99F # <CJK> -0xE6F0 0x71B1 # <CJK> -0xE6F1 0xF9A0 # <CJK> -0xE6F2 0xF9A1 # <CJK> -0xE6F3 0x95B1 # <CJK> -0xE6F4 0x53AD # <CJK> -0xE6F5 0xF9A2 # <CJK> -0xE6F6 0xF9A3 # <CJK> -0xE6F7 0xF9A4 # <CJK> -0xE6F8 0x67D3 # <CJK> -0xE6F9 0xF9A5 # <CJK> -0xE6FA 0x708E # <CJK> -0xE6FB 0x7130 # <CJK> -0xE6FC 0x7430 # <CJK> -0xE6FD 0x8276 # <CJK> -0xE6FE 0x82D2 # <CJK> -0xE7A1 0xF9A6 # <CJK> -0xE7A2 0x95BB # <CJK> -0xE7A3 0x9AE5 # <CJK> -0xE7A4 0x9E7D # <CJK> -0xE7A5 0x66C4 # <CJK> -0xE7A6 0xF9A7 # <CJK> -0xE7A7 0x71C1 # <CJK> -0xE7A8 0x8449 # <CJK> -0xE7A9 0xF9A8 # <CJK> -0xE7AA 0xF9A9 # <CJK> -0xE7AB 0x584B # <CJK> -0xE7AC 0xF9AA # <CJK> -0xE7AD 0xF9AB # <CJK> -0xE7AE 0x5DB8 # <CJK> -0xE7AF 0x5F71 # <CJK> -0xE7B0 0xF9AC # <CJK> -0xE7B1 0x6620 # <CJK> -0xE7B2 0x668E # <CJK> -0xE7B3 0x6979 # <CJK> -0xE7B4 0x69AE # <CJK> -0xE7B5 0x6C38 # <CJK> -0xE7B6 0x6CF3 # <CJK> -0xE7B7 0x6E36 # <CJK> -0xE7B8 0x6F41 # <CJK> -0xE7B9 0x6FDA # <CJK> -0xE7BA 0x701B # <CJK> -0xE7BB 0x702F # <CJK> -0xE7BC 0x7150 # <CJK> -0xE7BD 0x71DF # <CJK> -0xE7BE 0x7370 # <CJK> -0xE7BF 0xF9AD # <CJK> -0xE7C0 0x745B # <CJK> -0xE7C1 0xF9AE # <CJK> -0xE7C2 0x74D4 # <CJK> -0xE7C3 0x76C8 # <CJK> -0xE7C4 0x7A4E # <CJK> -0xE7C5 0x7E93 # <CJK> -0xE7C6 0xF9AF # <CJK> -0xE7C7 0xF9B0 # <CJK> -0xE7C8 0x82F1 # <CJK> -0xE7C9 0x8A60 # <CJK> -0xE7CA 0x8FCE # <CJK> -0xE7CB 0xF9B1 # <CJK> -0xE7CC 0x9348 # <CJK> -0xE7CD 0xF9B2 # <CJK> -0xE7CE 0x9719 # <CJK> -0xE7CF 0xF9B3 # <CJK> -0xE7D0 0xF9B4 # <CJK> -0xE7D1 0x4E42 # <CJK> -0xE7D2 0x502A # <CJK> -0xE7D3 0xF9B5 # <CJK> -0xE7D4 0x5208 # <CJK> -0xE7D5 0x53E1 # <CJK> -0xE7D6 0x66F3 # <CJK> -0xE7D7 0x6C6D # <CJK> -0xE7D8 0x6FCA # <CJK> -0xE7D9 0x730A # <CJK> -0xE7DA 0x777F # <CJK> -0xE7DB 0x7A62 # <CJK> -0xE7DC 0x82AE # <CJK> -0xE7DD 0x85DD # <CJK> -0xE7DE 0x8602 # <CJK> -0xE7DF 0xF9B6 # <CJK> -0xE7E0 0x88D4 # <CJK> -0xE7E1 0x8A63 # <CJK> -0xE7E2 0x8B7D # <CJK> -0xE7E3 0x8C6B # <CJK> -0xE7E4 0xF9B7 # <CJK> -0xE7E5 0x92B3 # <CJK> -0xE7E6 0xF9B8 # <CJK> -0xE7E7 0x9713 # <CJK> -0xE7E8 0x9810 # <CJK> -0xE7E9 0x4E94 # <CJK> -0xE7EA 0x4F0D # <CJK> -0xE7EB 0x4FC9 # <CJK> -0xE7EC 0x50B2 # <CJK> -0xE7ED 0x5348 # <CJK> -0xE7EE 0x543E # <CJK> -0xE7EF 0x5433 # <CJK> -0xE7F0 0x55DA # <CJK> -0xE7F1 0x5862 # <CJK> -0xE7F2 0x58BA # <CJK> -0xE7F3 0x5967 # <CJK> -0xE7F4 0x5A1B # <CJK> -0xE7F5 0x5BE4 # <CJK> -0xE7F6 0x609F # <CJK> -0xE7F7 0xF9B9 # <CJK> -0xE7F8 0x61CA # <CJK> -0xE7F9 0x6556 # <CJK> -0xE7FA 0x65FF # <CJK> -0xE7FB 0x6664 # <CJK> -0xE7FC 0x68A7 # <CJK> -0xE7FD 0x6C5A # <CJK> -0xE7FE 0x6FB3 # <CJK> -0xE8A1 0x70CF # <CJK> -0xE8A2 0x71AC # <CJK> -0xE8A3 0x7352 # <CJK> -0xE8A4 0x7B7D # <CJK> -0xE8A5 0x8708 # <CJK> -0xE8A6 0x8AA4 # <CJK> -0xE8A7 0x9C32 # <CJK> -0xE8A8 0x9F07 # <CJK> -0xE8A9 0x5C4B # <CJK> -0xE8AA 0x6C83 # <CJK> -0xE8AB 0x7344 # <CJK> -0xE8AC 0x7389 # <CJK> -0xE8AD 0x923A # <CJK> -0xE8AE 0x6EAB # <CJK> -0xE8AF 0x7465 # <CJK> -0xE8B0 0x761F # <CJK> -0xE8B1 0x7A69 # <CJK> -0xE8B2 0x7E15 # <CJK> -0xE8B3 0x860A # <CJK> -0xE8B4 0x5140 # <CJK> -0xE8B5 0x58C5 # <CJK> -0xE8B6 0x64C1 # <CJK> -0xE8B7 0x74EE # <CJK> -0xE8B8 0x7515 # <CJK> -0xE8B9 0x7670 # <CJK> -0xE8BA 0x7FC1 # <CJK> -0xE8BB 0x9095 # <CJK> -0xE8BC 0x96CD # <CJK> -0xE8BD 0x9954 # <CJK> -0xE8BE 0x6E26 # <CJK> -0xE8BF 0x74E6 # <CJK> -0xE8C0 0x7AA9 # <CJK> -0xE8C1 0x7AAA # <CJK> -0xE8C2 0x81E5 # <CJK> -0xE8C3 0x86D9 # <CJK> -0xE8C4 0x8778 # <CJK> -0xE8C5 0x8A1B # <CJK> -0xE8C6 0x5A49 # <CJK> -0xE8C7 0x5B8C # <CJK> -0xE8C8 0x5B9B # <CJK> -0xE8C9 0x68A1 # <CJK> -0xE8CA 0x6900 # <CJK> -0xE8CB 0x6D63 # <CJK> -0xE8CC 0x73A9 # <CJK> -0xE8CD 0x7413 # <CJK> -0xE8CE 0x742C # <CJK> -0xE8CF 0x7897 # <CJK> -0xE8D0 0x7DE9 # <CJK> -0xE8D1 0x7FEB # <CJK> -0xE8D2 0x8118 # <CJK> -0xE8D3 0x8155 # <CJK> -0xE8D4 0x839E # <CJK> -0xE8D5 0x8C4C # <CJK> -0xE8D6 0x962E # <CJK> -0xE8D7 0x9811 # <CJK> -0xE8D8 0x66F0 # <CJK> -0xE8D9 0x5F80 # <CJK> -0xE8DA 0x65FA # <CJK> -0xE8DB 0x6789 # <CJK> -0xE8DC 0x6C6A # <CJK> -0xE8DD 0x738B # <CJK> -0xE8DE 0x502D # <CJK> -0xE8DF 0x5A03 # <CJK> -0xE8E0 0x6B6A # <CJK> -0xE8E1 0x77EE # <CJK> -0xE8E2 0x5916 # <CJK> -0xE8E3 0x5D6C # <CJK> -0xE8E4 0x5DCD # <CJK> -0xE8E5 0x7325 # <CJK> -0xE8E6 0x754F # <CJK> -0xE8E7 0xF9BA # <CJK> -0xE8E8 0xF9BB # <CJK> -0xE8E9 0x50E5 # <CJK> -0xE8EA 0x51F9 # <CJK> -0xE8EB 0x582F # <CJK> -0xE8EC 0x592D # <CJK> -0xE8ED 0x5996 # <CJK> -0xE8EE 0x59DA # <CJK> -0xE8EF 0x5BE5 # <CJK> -0xE8F0 0xF9BC # <CJK> -0xE8F1 0xF9BD # <CJK> -0xE8F2 0x5DA2 # <CJK> -0xE8F3 0x62D7 # <CJK> -0xE8F4 0x6416 # <CJK> -0xE8F5 0x6493 # <CJK> -0xE8F6 0x64FE # <CJK> -0xE8F7 0xF9BE # <CJK> -0xE8F8 0x66DC # <CJK> -0xE8F9 0xF9BF # <CJK> -0xE8FA 0x6A48 # <CJK> -0xE8FB 0xF9C0 # <CJK> -0xE8FC 0x71FF # <CJK> -0xE8FD 0x7464 # <CJK> -0xE8FE 0xF9C1 # <CJK> -0xE9A1 0x7A88 # <CJK> -0xE9A2 0x7AAF # <CJK> -0xE9A3 0x7E47 # <CJK> -0xE9A4 0x7E5E # <CJK> -0xE9A5 0x8000 # <CJK> -0xE9A6 0x8170 # <CJK> -0xE9A7 0xF9C2 # <CJK> -0xE9A8 0x87EF # <CJK> -0xE9A9 0x8981 # <CJK> -0xE9AA 0x8B20 # <CJK> -0xE9AB 0x9059 # <CJK> -0xE9AC 0xF9C3 # <CJK> -0xE9AD 0x9080 # <CJK> -0xE9AE 0x9952 # <CJK> -0xE9AF 0x617E # <CJK> -0xE9B0 0x6B32 # <CJK> -0xE9B1 0x6D74 # <CJK> -0xE9B2 0x7E1F # <CJK> -0xE9B3 0x8925 # <CJK> -0xE9B4 0x8FB1 # <CJK> -0xE9B5 0x4FD1 # <CJK> -0xE9B6 0x50AD # <CJK> -0xE9B7 0x5197 # <CJK> -0xE9B8 0x52C7 # <CJK> -0xE9B9 0x57C7 # <CJK> -0xE9BA 0x5889 # <CJK> -0xE9BB 0x5BB9 # <CJK> -0xE9BC 0x5EB8 # <CJK> -0xE9BD 0x6142 # <CJK> -0xE9BE 0x6995 # <CJK> -0xE9BF 0x6D8C # <CJK> -0xE9C0 0x6E67 # <CJK> -0xE9C1 0x6EB6 # <CJK> -0xE9C2 0x7194 # <CJK> -0xE9C3 0x7462 # <CJK> -0xE9C4 0x7528 # <CJK> -0xE9C5 0x752C # <CJK> -0xE9C6 0x8073 # <CJK> -0xE9C7 0x8338 # <CJK> -0xE9C8 0x84C9 # <CJK> -0xE9C9 0x8E0A # <CJK> -0xE9CA 0x9394 # <CJK> -0xE9CB 0x93DE # <CJK> -0xE9CC 0xF9C4 # <CJK> -0xE9CD 0x4E8E # <CJK> -0xE9CE 0x4F51 # <CJK> -0xE9CF 0x5076 # <CJK> -0xE9D0 0x512A # <CJK> -0xE9D1 0x53C8 # <CJK> -0xE9D2 0x53CB # <CJK> -0xE9D3 0x53F3 # <CJK> -0xE9D4 0x5B87 # <CJK> -0xE9D5 0x5BD3 # <CJK> -0xE9D6 0x5C24 # <CJK> -0xE9D7 0x611A # <CJK> -0xE9D8 0x6182 # <CJK> -0xE9D9 0x65F4 # <CJK> -0xE9DA 0x725B # <CJK> -0xE9DB 0x7397 # <CJK> -0xE9DC 0x7440 # <CJK> -0xE9DD 0x76C2 # <CJK> -0xE9DE 0x7950 # <CJK> -0xE9DF 0x7991 # <CJK> -0xE9E0 0x79B9 # <CJK> -0xE9E1 0x7D06 # <CJK> -0xE9E2 0x7FBD # <CJK> -0xE9E3 0x828B # <CJK> -0xE9E4 0x85D5 # <CJK> -0xE9E5 0x865E # <CJK> -0xE9E6 0x8FC2 # <CJK> -0xE9E7 0x9047 # <CJK> -0xE9E8 0x90F5 # <CJK> -0xE9E9 0x91EA # <CJK> -0xE9EA 0x9685 # <CJK> -0xE9EB 0x96E8 # <CJK> -0xE9EC 0x96E9 # <CJK> -0xE9ED 0x52D6 # <CJK> -0xE9EE 0x5F67 # <CJK> -0xE9EF 0x65ED # <CJK> -0xE9F0 0x6631 # <CJK> -0xE9F1 0x682F # <CJK> -0xE9F2 0x715C # <CJK> -0xE9F3 0x7A36 # <CJK> -0xE9F4 0x90C1 # <CJK> -0xE9F5 0x980A # <CJK> -0xE9F6 0x4E91 # <CJK> -0xE9F7 0xF9C5 # <CJK> -0xE9F8 0x6A52 # <CJK> -0xE9F9 0x6B9E # <CJK> -0xE9FA 0x6F90 # <CJK> -0xE9FB 0x7189 # <CJK> -0xE9FC 0x8018 # <CJK> -0xE9FD 0x82B8 # <CJK> -0xE9FE 0x8553 # <CJK> -0xEAA1 0x904B # <CJK> -0xEAA2 0x9695 # <CJK> -0xEAA3 0x96F2 # <CJK> -0xEAA4 0x97FB # <CJK> -0xEAA5 0x851A # <CJK> -0xEAA6 0x9B31 # <CJK> -0xEAA7 0x4E90 # <CJK> -0xEAA8 0x718A # <CJK> -0xEAA9 0x96C4 # <CJK> -0xEAAA 0x5143 # <CJK> -0xEAAB 0x539F # <CJK> -0xEAAC 0x54E1 # <CJK> -0xEAAD 0x5713 # <CJK> -0xEAAE 0x5712 # <CJK> -0xEAAF 0x57A3 # <CJK> -0xEAB0 0x5A9B # <CJK> -0xEAB1 0x5AC4 # <CJK> -0xEAB2 0x5BC3 # <CJK> -0xEAB3 0x6028 # <CJK> -0xEAB4 0x613F # <CJK> -0xEAB5 0x63F4 # <CJK> -0xEAB6 0x6C85 # <CJK> -0xEAB7 0x6D39 # <CJK> -0xEAB8 0x6E72 # <CJK> -0xEAB9 0x6E90 # <CJK> -0xEABA 0x7230 # <CJK> -0xEABB 0x733F # <CJK> -0xEABC 0x7457 # <CJK> -0xEABD 0x82D1 # <CJK> -0xEABE 0x8881 # <CJK> -0xEABF 0x8F45 # <CJK> -0xEAC0 0x9060 # <CJK> -0xEAC1 0xF9C6 # <CJK> -0xEAC2 0x9662 # <CJK> -0xEAC3 0x9858 # <CJK> -0xEAC4 0x9D1B # <CJK> -0xEAC5 0x6708 # <CJK> -0xEAC6 0x8D8A # <CJK> -0xEAC7 0x925E # <CJK> -0xEAC8 0x4F4D # <CJK> -0xEAC9 0x5049 # <CJK> -0xEACA 0x50DE # <CJK> -0xEACB 0x5371 # <CJK> -0xEACC 0x570D # <CJK> -0xEACD 0x59D4 # <CJK> -0xEACE 0x5A01 # <CJK> -0xEACF 0x5C09 # <CJK> -0xEAD0 0x6170 # <CJK> -0xEAD1 0x6690 # <CJK> -0xEAD2 0x6E2D # <CJK> -0xEAD3 0x7232 # <CJK> -0xEAD4 0x744B # <CJK> -0xEAD5 0x7DEF # <CJK> -0xEAD6 0x80C3 # <CJK> -0xEAD7 0x840E # <CJK> -0xEAD8 0x8466 # <CJK> -0xEAD9 0x853F # <CJK> -0xEADA 0x875F # <CJK> -0xEADB 0x885B # <CJK> -0xEADC 0x8918 # <CJK> -0xEADD 0x8B02 # <CJK> -0xEADE 0x9055 # <CJK> -0xEADF 0x97CB # <CJK> -0xEAE0 0x9B4F # <CJK> -0xEAE1 0x4E73 # <CJK> -0xEAE2 0x4F91 # <CJK> -0xEAE3 0x5112 # <CJK> -0xEAE4 0x516A # <CJK> -0xEAE5 0xF9C7 # <CJK> -0xEAE6 0x552F # <CJK> -0xEAE7 0x55A9 # <CJK> -0xEAE8 0x5B7A # <CJK> -0xEAE9 0x5BA5 # <CJK> -0xEAEA 0x5E7C # <CJK> -0xEAEB 0x5E7D # <CJK> -0xEAEC 0x5EBE # <CJK> -0xEAED 0x60A0 # <CJK> -0xEAEE 0x60DF # <CJK> -0xEAEF 0x6108 # <CJK> -0xEAF0 0x6109 # <CJK> -0xEAF1 0x63C4 # <CJK> -0xEAF2 0x6538 # <CJK> -0xEAF3 0x6709 # <CJK> -0xEAF4 0xF9C8 # <CJK> -0xEAF5 0x67D4 # <CJK> -0xEAF6 0x67DA # <CJK> -0xEAF7 0xF9C9 # <CJK> -0xEAF8 0x6961 # <CJK> -0xEAF9 0x6962 # <CJK> -0xEAFA 0x6CB9 # <CJK> -0xEAFB 0x6D27 # <CJK> -0xEAFC 0xF9CA # <CJK> -0xEAFD 0x6E38 # <CJK> -0xEAFE 0xF9CB # <CJK> -0xEBA1 0x6FE1 # <CJK> -0xEBA2 0x7336 # <CJK> -0xEBA3 0x7337 # <CJK> -0xEBA4 0xF9CC # <CJK> -0xEBA5 0x745C # <CJK> -0xEBA6 0x7531 # <CJK> -0xEBA7 0xF9CD # <CJK> -0xEBA8 0x7652 # <CJK> -0xEBA9 0xF9CE # <CJK> -0xEBAA 0xF9CF # <CJK> -0xEBAB 0x7DAD # <CJK> -0xEBAC 0x81FE # <CJK> -0xEBAD 0x8438 # <CJK> -0xEBAE 0x88D5 # <CJK> -0xEBAF 0x8A98 # <CJK> -0xEBB0 0x8ADB # <CJK> -0xEBB1 0x8AED # <CJK> -0xEBB2 0x8E30 # <CJK> -0xEBB3 0x8E42 # <CJK> -0xEBB4 0x904A # <CJK> -0xEBB5 0x903E # <CJK> -0xEBB6 0x907A # <CJK> -0xEBB7 0x9149 # <CJK> -0xEBB8 0x91C9 # <CJK> -0xEBB9 0x936E # <CJK> -0xEBBA 0xF9D0 # <CJK> -0xEBBB 0xF9D1 # <CJK> -0xEBBC 0x5809 # <CJK> -0xEBBD 0xF9D2 # <CJK> -0xEBBE 0x6BD3 # <CJK> -0xEBBF 0x8089 # <CJK> -0xEBC0 0x80B2 # <CJK> -0xEBC1 0xF9D3 # <CJK> -0xEBC2 0xF9D4 # <CJK> -0xEBC3 0x5141 # <CJK> -0xEBC4 0x596B # <CJK> -0xEBC5 0x5C39 # <CJK> -0xEBC6 0xF9D5 # <CJK> -0xEBC7 0xF9D6 # <CJK> -0xEBC8 0x6F64 # <CJK> -0xEBC9 0x73A7 # <CJK> -0xEBCA 0x80E4 # <CJK> -0xEBCB 0x8D07 # <CJK> -0xEBCC 0xF9D7 # <CJK> -0xEBCD 0x9217 # <CJK> -0xEBCE 0x958F # <CJK> -0xEBCF 0xF9D8 # <CJK> -0xEBD0 0xF9D9 # <CJK> -0xEBD1 0xF9DA # <CJK> -0xEBD2 0xF9DB # <CJK> -0xEBD3 0x807F # <CJK> -0xEBD4 0x620E # <CJK> -0xEBD5 0x701C # <CJK> -0xEBD6 0x7D68 # <CJK> -0xEBD7 0x878D # <CJK> -0xEBD8 0xF9DC # <CJK> -0xEBD9 0x57A0 # <CJK> -0xEBDA 0x6069 # <CJK> -0xEBDB 0x6147 # <CJK> -0xEBDC 0x6BB7 # <CJK> -0xEBDD 0x8ABE # <CJK> -0xEBDE 0x9280 # <CJK> -0xEBDF 0x96B1 # <CJK> -0xEBE0 0x4E59 # <CJK> -0xEBE1 0x541F # <CJK> -0xEBE2 0x6DEB # <CJK> -0xEBE3 0x852D # <CJK> -0xEBE4 0x9670 # <CJK> -0xEBE5 0x97F3 # <CJK> -0xEBE6 0x98EE # <CJK> -0xEBE7 0x63D6 # <CJK> -0xEBE8 0x6CE3 # <CJK> -0xEBE9 0x9091 # <CJK> -0xEBEA 0x51DD # <CJK> -0xEBEB 0x61C9 # <CJK> -0xEBEC 0x81BA # <CJK> -0xEBED 0x9DF9 # <CJK> -0xEBEE 0x4F9D # <CJK> -0xEBEF 0x501A # <CJK> -0xEBF0 0x5100 # <CJK> -0xEBF1 0x5B9C # <CJK> -0xEBF2 0x610F # <CJK> -0xEBF3 0x61FF # <CJK> -0xEBF4 0x64EC # <CJK> -0xEBF5 0x6905 # <CJK> -0xEBF6 0x6BC5 # <CJK> -0xEBF7 0x7591 # <CJK> -0xEBF8 0x77E3 # <CJK> -0xEBF9 0x7FA9 # <CJK> -0xEBFA 0x8264 # <CJK> -0xEBFB 0x858F # <CJK> -0xEBFC 0x87FB # <CJK> -0xEBFD 0x8863 # <CJK> -0xEBFE 0x8ABC # <CJK> -0xECA1 0x8B70 # <CJK> -0xECA2 0x91AB # <CJK> -0xECA3 0x4E8C # <CJK> -0xECA4 0x4EE5 # <CJK> -0xECA5 0x4F0A # <CJK> -0xECA6 0xF9DD # <CJK> -0xECA7 0xF9DE # <CJK> -0xECA8 0x5937 # <CJK> -0xECA9 0x59E8 # <CJK> -0xECAA 0xF9DF # <CJK> -0xECAB 0x5DF2 # <CJK> -0xECAC 0x5F1B # <CJK> -0xECAD 0x5F5B # <CJK> -0xECAE 0x6021 # <CJK> -0xECAF 0xF9E0 # <CJK> -0xECB0 0xF9E1 # <CJK> -0xECB1 0xF9E2 # <CJK> -0xECB2 0xF9E3 # <CJK> -0xECB3 0x723E # <CJK> -0xECB4 0x73E5 # <CJK> -0xECB5 0xF9E4 # <CJK> -0xECB6 0x7570 # <CJK> -0xECB7 0x75CD # <CJK> -0xECB8 0xF9E5 # <CJK> -0xECB9 0x79FB # <CJK> -0xECBA 0xF9E6 # <CJK> -0xECBB 0x800C # <CJK> -0xECBC 0x8033 # <CJK> -0xECBD 0x8084 # <CJK> -0xECBE 0x82E1 # <CJK> -0xECBF 0x8351 # <CJK> -0xECC0 0xF9E7 # <CJK> -0xECC1 0xF9E8 # <CJK> -0xECC2 0x8CBD # <CJK> -0xECC3 0x8CB3 # <CJK> -0xECC4 0x9087 # <CJK> -0xECC5 0xF9E9 # <CJK> -0xECC6 0xF9EA # <CJK> -0xECC7 0x98F4 # <CJK> -0xECC8 0x990C # <CJK> -0xECC9 0xF9EB # <CJK> -0xECCA 0xF9EC # <CJK> -0xECCB 0x7037 # <CJK> -0xECCC 0x76CA # <CJK> -0xECCD 0x7FCA # <CJK> -0xECCE 0x7FCC # <CJK> -0xECCF 0x7FFC # <CJK> -0xECD0 0x8B1A # <CJK> -0xECD1 0x4EBA # <CJK> -0xECD2 0x4EC1 # <CJK> -0xECD3 0x5203 # <CJK> -0xECD4 0x5370 # <CJK> -0xECD5 0xF9ED # <CJK> -0xECD6 0x54BD # <CJK> -0xECD7 0x56E0 # <CJK> -0xECD8 0x59FB # <CJK> -0xECD9 0x5BC5 # <CJK> -0xECDA 0x5F15 # <CJK> -0xECDB 0x5FCD # <CJK> -0xECDC 0x6E6E # <CJK> -0xECDD 0xF9EE # <CJK> -0xECDE 0xF9EF # <CJK> -0xECDF 0x7D6A # <CJK> -0xECE0 0x8335 # <CJK> -0xECE1 0xF9F0 # <CJK> -0xECE2 0x8693 # <CJK> -0xECE3 0x8A8D # <CJK> -0xECE4 0xF9F1 # <CJK> -0xECE5 0x976D # <CJK> -0xECE6 0x9777 # <CJK> -0xECE7 0xF9F2 # <CJK> -0xECE8 0xF9F3 # <CJK> -0xECE9 0x4E00 # <CJK> -0xECEA 0x4F5A # <CJK> -0xECEB 0x4F7E # <CJK> -0xECEC 0x58F9 # <CJK> -0xECED 0x65E5 # <CJK> -0xECEE 0x6EA2 # <CJK> -0xECEF 0x9038 # <CJK> -0xECF0 0x93B0 # <CJK> -0xECF1 0x99B9 # <CJK> -0xECF2 0x4EFB # <CJK> -0xECF3 0x58EC # <CJK> -0xECF4 0x598A # <CJK> -0xECF5 0x59D9 # <CJK> -0xECF6 0x6041 # <CJK> -0xECF7 0xF9F4 # <CJK> -0xECF8 0xF9F5 # <CJK> -0xECF9 0x7A14 # <CJK> -0xECFA 0xF9F6 # <CJK> -0xECFB 0x834F # <CJK> -0xECFC 0x8CC3 # <CJK> -0xECFD 0x5165 # <CJK> -0xECFE 0x5344 # <CJK> -0xEDA1 0xF9F7 # <CJK> -0xEDA2 0xF9F8 # <CJK> -0xEDA3 0xF9F9 # <CJK> -0xEDA4 0x4ECD # <CJK> -0xEDA5 0x5269 # <CJK> -0xEDA6 0x5B55 # <CJK> -0xEDA7 0x82BF # <CJK> -0xEDA8 0x4ED4 # <CJK> -0xEDA9 0x523A # <CJK> -0xEDAA 0x54A8 # <CJK> -0xEDAB 0x59C9 # <CJK> -0xEDAC 0x59FF # <CJK> -0xEDAD 0x5B50 # <CJK> -0xEDAE 0x5B57 # <CJK> -0xEDAF 0x5B5C # <CJK> -0xEDB0 0x6063 # <CJK> -0xEDB1 0x6148 # <CJK> -0xEDB2 0x6ECB # <CJK> -0xEDB3 0x7099 # <CJK> -0xEDB4 0x716E # <CJK> -0xEDB5 0x7386 # <CJK> -0xEDB6 0x74F7 # <CJK> -0xEDB7 0x75B5 # <CJK> -0xEDB8 0x78C1 # <CJK> -0xEDB9 0x7D2B # <CJK> -0xEDBA 0x8005 # <CJK> -0xEDBB 0x81EA # <CJK> -0xEDBC 0x8328 # <CJK> -0xEDBD 0x8517 # <CJK> -0xEDBE 0x85C9 # <CJK> -0xEDBF 0x8AEE # <CJK> -0xEDC0 0x8CC7 # <CJK> -0xEDC1 0x96CC # <CJK> -0xEDC2 0x4F5C # <CJK> -0xEDC3 0x52FA # <CJK> -0xEDC4 0x56BC # <CJK> -0xEDC5 0x65AB # <CJK> -0xEDC6 0x6628 # <CJK> -0xEDC7 0x707C # <CJK> -0xEDC8 0x70B8 # <CJK> -0xEDC9 0x7235 # <CJK> -0xEDCA 0x7DBD # <CJK> -0xEDCB 0x828D # <CJK> -0xEDCC 0x914C # <CJK> -0xEDCD 0x96C0 # <CJK> -0xEDCE 0x9D72 # <CJK> -0xEDCF 0x5B71 # <CJK> -0xEDD0 0x68E7 # <CJK> -0xEDD1 0x6B98 # <CJK> -0xEDD2 0x6F7A # <CJK> -0xEDD3 0x76DE # <CJK> -0xEDD4 0x5C91 # <CJK> -0xEDD5 0x66AB # <CJK> -0xEDD6 0x6F5B # <CJK> -0xEDD7 0x7BB4 # <CJK> -0xEDD8 0x7C2A # <CJK> -0xEDD9 0x8836 # <CJK> -0xEDDA 0x96DC # <CJK> -0xEDDB 0x4E08 # <CJK> -0xEDDC 0x4ED7 # <CJK> -0xEDDD 0x5320 # <CJK> -0xEDDE 0x5834 # <CJK> -0xEDDF 0x58BB # <CJK> -0xEDE0 0x58EF # <CJK> -0xEDE1 0x596C # <CJK> -0xEDE2 0x5C07 # <CJK> -0xEDE3 0x5E33 # <CJK> -0xEDE4 0x5E84 # <CJK> -0xEDE5 0x5F35 # <CJK> -0xEDE6 0x638C # <CJK> -0xEDE7 0x66B2 # <CJK> -0xEDE8 0x6756 # <CJK> -0xEDE9 0x6A1F # <CJK> -0xEDEA 0x6AA3 # <CJK> -0xEDEB 0x6B0C # <CJK> -0xEDEC 0x6F3F # <CJK> -0xEDED 0x7246 # <CJK> -0xEDEE 0xF9FA # <CJK> -0xEDEF 0x7350 # <CJK> -0xEDF0 0x748B # <CJK> -0xEDF1 0x7AE0 # <CJK> -0xEDF2 0x7CA7 # <CJK> -0xEDF3 0x8178 # <CJK> -0xEDF4 0x81DF # <CJK> -0xEDF5 0x81E7 # <CJK> -0xEDF6 0x838A # <CJK> -0xEDF7 0x846C # <CJK> -0xEDF8 0x8523 # <CJK> -0xEDF9 0x8594 # <CJK> -0xEDFA 0x85CF # <CJK> -0xEDFB 0x88DD # <CJK> -0xEDFC 0x8D13 # <CJK> -0xEDFD 0x91AC # <CJK> -0xEDFE 0x9577 # <CJK> -0xEEA1 0x969C # <CJK> -0xEEA2 0x518D # <CJK> -0xEEA3 0x54C9 # <CJK> -0xEEA4 0x5728 # <CJK> -0xEEA5 0x5BB0 # <CJK> -0xEEA6 0x624D # <CJK> -0xEEA7 0x6750 # <CJK> -0xEEA8 0x683D # <CJK> -0xEEA9 0x6893 # <CJK> -0xEEAA 0x6E3D # <CJK> -0xEEAB 0x6ED3 # <CJK> -0xEEAC 0x707D # <CJK> -0xEEAD 0x7E21 # <CJK> -0xEEAE 0x88C1 # <CJK> -0xEEAF 0x8CA1 # <CJK> -0xEEB0 0x8F09 # <CJK> -0xEEB1 0x9F4B # <CJK> -0xEEB2 0x9F4E # <CJK> -0xEEB3 0x722D # <CJK> -0xEEB4 0x7B8F # <CJK> -0xEEB5 0x8ACD # <CJK> -0xEEB6 0x931A # <CJK> -0xEEB7 0x4F47 # <CJK> -0xEEB8 0x4F4E # <CJK> -0xEEB9 0x5132 # <CJK> -0xEEBA 0x5480 # <CJK> -0xEEBB 0x59D0 # <CJK> -0xEEBC 0x5E95 # <CJK> -0xEEBD 0x62B5 # <CJK> -0xEEBE 0x6775 # <CJK> -0xEEBF 0x696E # <CJK> -0xEEC0 0x6A17 # <CJK> -0xEEC1 0x6CAE # <CJK> -0xEEC2 0x6E1A # <CJK> -0xEEC3 0x72D9 # <CJK> -0xEEC4 0x732A # <CJK> -0xEEC5 0x75BD # <CJK> -0xEEC6 0x7BB8 # <CJK> -0xEEC7 0x7D35 # <CJK> -0xEEC8 0x82E7 # <CJK> -0xEEC9 0x83F9 # <CJK> -0xEECA 0x8457 # <CJK> -0xEECB 0x85F7 # <CJK> -0xEECC 0x8A5B # <CJK> -0xEECD 0x8CAF # <CJK> -0xEECE 0x8E87 # <CJK> -0xEECF 0x9019 # <CJK> -0xEED0 0x90B8 # <CJK> -0xEED1 0x96CE # <CJK> -0xEED2 0x9F5F # <CJK> -0xEED3 0x52E3 # <CJK> -0xEED4 0x540A # <CJK> -0xEED5 0x5AE1 # <CJK> -0xEED6 0x5BC2 # <CJK> -0xEED7 0x6458 # <CJK> -0xEED8 0x6575 # <CJK> -0xEED9 0x6EF4 # <CJK> -0xEEDA 0x72C4 # <CJK> -0xEEDB 0xF9FB # <CJK> -0xEEDC 0x7684 # <CJK> -0xEEDD 0x7A4D # <CJK> -0xEEDE 0x7B1B # <CJK> -0xEEDF 0x7C4D # <CJK> -0xEEE0 0x7E3E # <CJK> -0xEEE1 0x7FDF # <CJK> -0xEEE2 0x837B # <CJK> -0xEEE3 0x8B2B # <CJK> -0xEEE4 0x8CCA # <CJK> -0xEEE5 0x8D64 # <CJK> -0xEEE6 0x8DE1 # <CJK> -0xEEE7 0x8E5F # <CJK> -0xEEE8 0x8FEA # <CJK> -0xEEE9 0x8FF9 # <CJK> -0xEEEA 0x9069 # <CJK> -0xEEEB 0x93D1 # <CJK> -0xEEEC 0x4F43 # <CJK> -0xEEED 0x4F7A # <CJK> -0xEEEE 0x50B3 # <CJK> -0xEEEF 0x5168 # <CJK> -0xEEF0 0x5178 # <CJK> -0xEEF1 0x524D # <CJK> -0xEEF2 0x526A # <CJK> -0xEEF3 0x5861 # <CJK> -0xEEF4 0x587C # <CJK> -0xEEF5 0x5960 # <CJK> -0xEEF6 0x5C08 # <CJK> -0xEEF7 0x5C55 # <CJK> -0xEEF8 0x5EDB # <CJK> -0xEEF9 0x609B # <CJK> -0xEEFA 0x6230 # <CJK> -0xEEFB 0x6813 # <CJK> -0xEEFC 0x6BBF # <CJK> -0xEEFD 0x6C08 # <CJK> -0xEEFE 0x6FB1 # <CJK> -0xEFA1 0x714E # <CJK> -0xEFA2 0x7420 # <CJK> -0xEFA3 0x7530 # <CJK> -0xEFA4 0x7538 # <CJK> -0xEFA5 0x7551 # <CJK> -0xEFA6 0x7672 # <CJK> -0xEFA7 0x7B4C # <CJK> -0xEFA8 0x7B8B # <CJK> -0xEFA9 0x7BAD # <CJK> -0xEFAA 0x7BC6 # <CJK> -0xEFAB 0x7E8F # <CJK> -0xEFAC 0x8A6E # <CJK> -0xEFAD 0x8F3E # <CJK> -0xEFAE 0x8F49 # <CJK> -0xEFAF 0x923F # <CJK> -0xEFB0 0x9293 # <CJK> -0xEFB1 0x9322 # <CJK> -0xEFB2 0x942B # <CJK> -0xEFB3 0x96FB # <CJK> -0xEFB4 0x985A # <CJK> -0xEFB5 0x986B # <CJK> -0xEFB6 0x991E # <CJK> -0xEFB7 0x5207 # <CJK> -0xEFB8 0x622A # <CJK> -0xEFB9 0x6298 # <CJK> -0xEFBA 0x6D59 # <CJK> -0xEFBB 0x7664 # <CJK> -0xEFBC 0x7ACA # <CJK> -0xEFBD 0x7BC0 # <CJK> -0xEFBE 0x7D76 # <CJK> -0xEFBF 0x5360 # <CJK> -0xEFC0 0x5CBE # <CJK> -0xEFC1 0x5E97 # <CJK> -0xEFC2 0x6F38 # <CJK> -0xEFC3 0x70B9 # <CJK> -0xEFC4 0x7C98 # <CJK> -0xEFC5 0x9711 # <CJK> -0xEFC6 0x9B8E # <CJK> -0xEFC7 0x9EDE # <CJK> -0xEFC8 0x63A5 # <CJK> -0xEFC9 0x647A # <CJK> -0xEFCA 0x8776 # <CJK> -0xEFCB 0x4E01 # <CJK> -0xEFCC 0x4E95 # <CJK> -0xEFCD 0x4EAD # <CJK> -0xEFCE 0x505C # <CJK> -0xEFCF 0x5075 # <CJK> -0xEFD0 0x5448 # <CJK> -0xEFD1 0x59C3 # <CJK> -0xEFD2 0x5B9A # <CJK> -0xEFD3 0x5E40 # <CJK> -0xEFD4 0x5EAD # <CJK> -0xEFD5 0x5EF7 # <CJK> -0xEFD6 0x5F81 # <CJK> -0xEFD7 0x60C5 # <CJK> -0xEFD8 0x633A # <CJK> -0xEFD9 0x653F # <CJK> -0xEFDA 0x6574 # <CJK> -0xEFDB 0x65CC # <CJK> -0xEFDC 0x6676 # <CJK> -0xEFDD 0x6678 # <CJK> -0xEFDE 0x67FE # <CJK> -0xEFDF 0x6968 # <CJK> -0xEFE0 0x6A89 # <CJK> -0xEFE1 0x6B63 # <CJK> -0xEFE2 0x6C40 # <CJK> -0xEFE3 0x6DC0 # <CJK> -0xEFE4 0x6DE8 # <CJK> -0xEFE5 0x6E1F # <CJK> -0xEFE6 0x6E5E # <CJK> -0xEFE7 0x701E # <CJK> -0xEFE8 0x70A1 # <CJK> -0xEFE9 0x738E # <CJK> -0xEFEA 0x73FD # <CJK> -0xEFEB 0x753A # <CJK> -0xEFEC 0x775B # <CJK> -0xEFED 0x7887 # <CJK> -0xEFEE 0x798E # <CJK> -0xEFEF 0x7A0B # <CJK> -0xEFF0 0x7A7D # <CJK> -0xEFF1 0x7CBE # <CJK> -0xEFF2 0x7D8E # <CJK> -0xEFF3 0x8247 # <CJK> -0xEFF4 0x8A02 # <CJK> -0xEFF5 0x8AEA # <CJK> -0xEFF6 0x8C9E # <CJK> -0xEFF7 0x912D # <CJK> -0xEFF8 0x914A # <CJK> -0xEFF9 0x91D8 # <CJK> -0xEFFA 0x9266 # <CJK> -0xEFFB 0x92CC # <CJK> -0xEFFC 0x9320 # <CJK> -0xEFFD 0x9706 # <CJK> -0xEFFE 0x9756 # <CJK> -0xF0A1 0x975C # <CJK> -0xF0A2 0x9802 # <CJK> -0xF0A3 0x9F0E # <CJK> -0xF0A4 0x5236 # <CJK> -0xF0A5 0x5291 # <CJK> -0xF0A6 0x557C # <CJK> -0xF0A7 0x5824 # <CJK> -0xF0A8 0x5E1D # <CJK> -0xF0A9 0x5F1F # <CJK> -0xF0AA 0x608C # <CJK> -0xF0AB 0x63D0 # <CJK> -0xF0AC 0x68AF # <CJK> -0xF0AD 0x6FDF # <CJK> -0xF0AE 0x796D # <CJK> -0xF0AF 0x7B2C # <CJK> -0xF0B0 0x81CD # <CJK> -0xF0B1 0x85BA # <CJK> -0xF0B2 0x88FD # <CJK> -0xF0B3 0x8AF8 # <CJK> -0xF0B4 0x8E44 # <CJK> -0xF0B5 0x918D # <CJK> -0xF0B6 0x9664 # <CJK> -0xF0B7 0x969B # <CJK> -0xF0B8 0x973D # <CJK> -0xF0B9 0x984C # <CJK> -0xF0BA 0x9F4A # <CJK> -0xF0BB 0x4FCE # <CJK> -0xF0BC 0x5146 # <CJK> -0xF0BD 0x51CB # <CJK> -0xF0BE 0x52A9 # <CJK> -0xF0BF 0x5632 # <CJK> -0xF0C0 0x5F14 # <CJK> -0xF0C1 0x5F6B # <CJK> -0xF0C2 0x63AA # <CJK> -0xF0C3 0x64CD # <CJK> -0xF0C4 0x65E9 # <CJK> -0xF0C5 0x6641 # <CJK> -0xF0C6 0x66FA # <CJK> -0xF0C7 0x66F9 # <CJK> -0xF0C8 0x671D # <CJK> -0xF0C9 0x689D # <CJK> -0xF0CA 0x68D7 # <CJK> -0xF0CB 0x69FD # <CJK> -0xF0CC 0x6F15 # <CJK> -0xF0CD 0x6F6E # <CJK> -0xF0CE 0x7167 # <CJK> -0xF0CF 0x71E5 # <CJK> -0xF0D0 0x722A # <CJK> -0xF0D1 0x74AA # <CJK> -0xF0D2 0x773A # <CJK> -0xF0D3 0x7956 # <CJK> -0xF0D4 0x795A # <CJK> -0xF0D5 0x79DF # <CJK> -0xF0D6 0x7A20 # <CJK> -0xF0D7 0x7A95 # <CJK> -0xF0D8 0x7C97 # <CJK> -0xF0D9 0x7CDF # <CJK> -0xF0DA 0x7D44 # <CJK> -0xF0DB 0x7E70 # <CJK> -0xF0DC 0x8087 # <CJK> -0xF0DD 0x85FB # <CJK> -0xF0DE 0x86A4 # <CJK> -0xF0DF 0x8A54 # <CJK> -0xF0E0 0x8ABF # <CJK> -0xF0E1 0x8D99 # <CJK> -0xF0E2 0x8E81 # <CJK> -0xF0E3 0x9020 # <CJK> -0xF0E4 0x906D # <CJK> -0xF0E5 0x91E3 # <CJK> -0xF0E6 0x963B # <CJK> -0xF0E7 0x96D5 # <CJK> -0xF0E8 0x9CE5 # <CJK> -0xF0E9 0x65CF # <CJK> -0xF0EA 0x7C07 # <CJK> -0xF0EB 0x8DB3 # <CJK> -0xF0EC 0x93C3 # <CJK> -0xF0ED 0x5B58 # <CJK> -0xF0EE 0x5C0A # <CJK> -0xF0EF 0x5352 # <CJK> -0xF0F0 0x62D9 # <CJK> -0xF0F1 0x731D # <CJK> -0xF0F2 0x5027 # <CJK> -0xF0F3 0x5B97 # <CJK> -0xF0F4 0x5F9E # <CJK> -0xF0F5 0x60B0 # <CJK> -0xF0F6 0x616B # <CJK> -0xF0F7 0x68D5 # <CJK> -0xF0F8 0x6DD9 # <CJK> -0xF0F9 0x742E # <CJK> -0xF0FA 0x7A2E # <CJK> -0xF0FB 0x7D42 # <CJK> -0xF0FC 0x7D9C # <CJK> -0xF0FD 0x7E31 # <CJK> -0xF0FE 0x816B # <CJK> -0xF1A1 0x8E2A # <CJK> -0xF1A2 0x8E35 # <CJK> -0xF1A3 0x937E # <CJK> -0xF1A4 0x9418 # <CJK> -0xF1A5 0x4F50 # <CJK> -0xF1A6 0x5750 # <CJK> -0xF1A7 0x5DE6 # <CJK> -0xF1A8 0x5EA7 # <CJK> -0xF1A9 0x632B # <CJK> -0xF1AA 0x7F6A # <CJK> -0xF1AB 0x4E3B # <CJK> -0xF1AC 0x4F4F # <CJK> -0xF1AD 0x4F8F # <CJK> -0xF1AE 0x505A # <CJK> -0xF1AF 0x59DD # <CJK> -0xF1B0 0x80C4 # <CJK> -0xF1B1 0x546A # <CJK> -0xF1B2 0x5468 # <CJK> -0xF1B3 0x55FE # <CJK> -0xF1B4 0x594F # <CJK> -0xF1B5 0x5B99 # <CJK> -0xF1B6 0x5DDE # <CJK> -0xF1B7 0x5EDA # <CJK> -0xF1B8 0x665D # <CJK> -0xF1B9 0x6731 # <CJK> -0xF1BA 0x67F1 # <CJK> -0xF1BB 0x682A # <CJK> -0xF1BC 0x6CE8 # <CJK> -0xF1BD 0x6D32 # <CJK> -0xF1BE 0x6E4A # <CJK> -0xF1BF 0x6F8D # <CJK> -0xF1C0 0x70B7 # <CJK> -0xF1C1 0x73E0 # <CJK> -0xF1C2 0x7587 # <CJK> -0xF1C3 0x7C4C # <CJK> -0xF1C4 0x7D02 # <CJK> -0xF1C5 0x7D2C # <CJK> -0xF1C6 0x7DA2 # <CJK> -0xF1C7 0x821F # <CJK> -0xF1C8 0x86DB # <CJK> -0xF1C9 0x8A3B # <CJK> -0xF1CA 0x8A85 # <CJK> -0xF1CB 0x8D70 # <CJK> -0xF1CC 0x8E8A # <CJK> -0xF1CD 0x8F33 # <CJK> -0xF1CE 0x9031 # <CJK> -0xF1CF 0x914E # <CJK> -0xF1D0 0x9152 # <CJK> -0xF1D1 0x9444 # <CJK> -0xF1D2 0x99D0 # <CJK> -0xF1D3 0x7AF9 # <CJK> -0xF1D4 0x7CA5 # <CJK> -0xF1D5 0x4FCA # <CJK> -0xF1D6 0x5101 # <CJK> -0xF1D7 0x51C6 # <CJK> -0xF1D8 0x57C8 # <CJK> -0xF1D9 0x5BEF # <CJK> -0xF1DA 0x5CFB # <CJK> -0xF1DB 0x6659 # <CJK> -0xF1DC 0x6A3D # <CJK> -0xF1DD 0x6D5A # <CJK> -0xF1DE 0x6E96 # <CJK> -0xF1DF 0x6FEC # <CJK> -0xF1E0 0x710C # <CJK> -0xF1E1 0x756F # <CJK> -0xF1E2 0x7AE3 # <CJK> -0xF1E3 0x8822 # <CJK> -0xF1E4 0x9021 # <CJK> -0xF1E5 0x9075 # <CJK> -0xF1E6 0x96CB # <CJK> -0xF1E7 0x99FF # <CJK> -0xF1E8 0x8301 # <CJK> -0xF1E9 0x4E2D # <CJK> -0xF1EA 0x4EF2 # <CJK> -0xF1EB 0x8846 # <CJK> -0xF1EC 0x91CD # <CJK> -0xF1ED 0x537D # <CJK> -0xF1EE 0x6ADB # <CJK> -0xF1EF 0x696B # <CJK> -0xF1F0 0x6C41 # <CJK> -0xF1F1 0x847A # <CJK> -0xF1F2 0x589E # <CJK> -0xF1F3 0x618E # <CJK> -0xF1F4 0x66FE # <CJK> -0xF1F5 0x62EF # <CJK> -0xF1F6 0x70DD # <CJK> -0xF1F7 0x7511 # <CJK> -0xF1F8 0x75C7 # <CJK> -0xF1F9 0x7E52 # <CJK> -0xF1FA 0x84B8 # <CJK> -0xF1FB 0x8B49 # <CJK> -0xF1FC 0x8D08 # <CJK> -0xF1FD 0x4E4B # <CJK> -0xF1FE 0x53EA # <CJK> -0xF2A1 0x54AB # <CJK> -0xF2A2 0x5730 # <CJK> -0xF2A3 0x5740 # <CJK> -0xF2A4 0x5FD7 # <CJK> -0xF2A5 0x6301 # <CJK> -0xF2A6 0x6307 # <CJK> -0xF2A7 0x646F # <CJK> -0xF2A8 0x652F # <CJK> -0xF2A9 0x65E8 # <CJK> -0xF2AA 0x667A # <CJK> -0xF2AB 0x679D # <CJK> -0xF2AC 0x67B3 # <CJK> -0xF2AD 0x6B62 # <CJK> -0xF2AE 0x6C60 # <CJK> -0xF2AF 0x6C9A # <CJK> -0xF2B0 0x6F2C # <CJK> -0xF2B1 0x77E5 # <CJK> -0xF2B2 0x7825 # <CJK> -0xF2B3 0x7949 # <CJK> -0xF2B4 0x7957 # <CJK> -0xF2B5 0x7D19 # <CJK> -0xF2B6 0x80A2 # <CJK> -0xF2B7 0x8102 # <CJK> -0xF2B8 0x81F3 # <CJK> -0xF2B9 0x829D # <CJK> -0xF2BA 0x82B7 # <CJK> -0xF2BB 0x8718 # <CJK> -0xF2BC 0x8A8C # <CJK> -0xF2BD 0xF9FC # <CJK> -0xF2BE 0x8D04 # <CJK> -0xF2BF 0x8DBE # <CJK> -0xF2C0 0x9072 # <CJK> -0xF2C1 0x76F4 # <CJK> -0xF2C2 0x7A19 # <CJK> -0xF2C3 0x7A37 # <CJK> -0xF2C4 0x7E54 # <CJK> -0xF2C5 0x8077 # <CJK> -0xF2C6 0x5507 # <CJK> -0xF2C7 0x55D4 # <CJK> -0xF2C8 0x5875 # <CJK> -0xF2C9 0x632F # <CJK> -0xF2CA 0x6422 # <CJK> -0xF2CB 0x6649 # <CJK> -0xF2CC 0x664B # <CJK> -0xF2CD 0x686D # <CJK> -0xF2CE 0x699B # <CJK> -0xF2CF 0x6B84 # <CJK> -0xF2D0 0x6D25 # <CJK> -0xF2D1 0x6EB1 # <CJK> -0xF2D2 0x73CD # <CJK> -0xF2D3 0x7468 # <CJK> -0xF2D4 0x74A1 # <CJK> -0xF2D5 0x755B # <CJK> -0xF2D6 0x75B9 # <CJK> -0xF2D7 0x76E1 # <CJK> -0xF2D8 0x771E # <CJK> -0xF2D9 0x778B # <CJK> -0xF2DA 0x79E6 # <CJK> -0xF2DB 0x7E09 # <CJK> -0xF2DC 0x7E1D # <CJK> -0xF2DD 0x81FB # <CJK> -0xF2DE 0x852F # <CJK> -0xF2DF 0x8897 # <CJK> -0xF2E0 0x8A3A # <CJK> -0xF2E1 0x8CD1 # <CJK> -0xF2E2 0x8EEB # <CJK> -0xF2E3 0x8FB0 # <CJK> -0xF2E4 0x9032 # <CJK> -0xF2E5 0x93AD # <CJK> -0xF2E6 0x9663 # <CJK> -0xF2E7 0x9673 # <CJK> -0xF2E8 0x9707 # <CJK> -0xF2E9 0x4F84 # <CJK> -0xF2EA 0x53F1 # <CJK> -0xF2EB 0x59EA # <CJK> -0xF2EC 0x5AC9 # <CJK> -0xF2ED 0x5E19 # <CJK> -0xF2EE 0x684E # <CJK> -0xF2EF 0x74C6 # <CJK> -0xF2F0 0x75BE # <CJK> -0xF2F1 0x79E9 # <CJK> -0xF2F2 0x7A92 # <CJK> -0xF2F3 0x81A3 # <CJK> -0xF2F4 0x86ED # <CJK> -0xF2F5 0x8CEA # <CJK> -0xF2F6 0x8DCC # <CJK> -0xF2F7 0x8FED # <CJK> -0xF2F8 0x659F # <CJK> -0xF2F9 0x6715 # <CJK> -0xF2FA 0xF9FD # <CJK> -0xF2FB 0x57F7 # <CJK> -0xF2FC 0x6F57 # <CJK> -0xF2FD 0x7DDD # <CJK> -0xF2FE 0x8F2F # <CJK> -0xF3A1 0x93F6 # <CJK> -0xF3A2 0x96C6 # <CJK> -0xF3A3 0x5FB5 # <CJK> -0xF3A4 0x61F2 # <CJK> -0xF3A5 0x6F84 # <CJK> -0xF3A6 0x4E14 # <CJK> -0xF3A7 0x4F98 # <CJK> -0xF3A8 0x501F # <CJK> -0xF3A9 0x53C9 # <CJK> -0xF3AA 0x55DF # <CJK> -0xF3AB 0x5D6F # <CJK> -0xF3AC 0x5DEE # <CJK> -0xF3AD 0x6B21 # <CJK> -0xF3AE 0x6B64 # <CJK> -0xF3AF 0x78CB # <CJK> -0xF3B0 0x7B9A # <CJK> -0xF3B1 0xF9FE # <CJK> -0xF3B2 0x8E49 # <CJK> -0xF3B3 0x8ECA # <CJK> -0xF3B4 0x906E # <CJK> -0xF3B5 0x6349 # <CJK> -0xF3B6 0x643E # <CJK> -0xF3B7 0x7740 # <CJK> -0xF3B8 0x7A84 # <CJK> -0xF3B9 0x932F # <CJK> -0xF3BA 0x947F # <CJK> -0xF3BB 0x9F6A # <CJK> -0xF3BC 0x64B0 # <CJK> -0xF3BD 0x6FAF # <CJK> -0xF3BE 0x71E6 # <CJK> -0xF3BF 0x74A8 # <CJK> -0xF3C0 0x74DA # <CJK> -0xF3C1 0x7AC4 # <CJK> -0xF3C2 0x7C12 # <CJK> -0xF3C3 0x7E82 # <CJK> -0xF3C4 0x7CB2 # <CJK> -0xF3C5 0x7E98 # <CJK> -0xF3C6 0x8B9A # <CJK> -0xF3C7 0x8D0A # <CJK> -0xF3C8 0x947D # <CJK> -0xF3C9 0x9910 # <CJK> -0xF3CA 0x994C # <CJK> -0xF3CB 0x5239 # <CJK> -0xF3CC 0x5BDF # <CJK> -0xF3CD 0x64E6 # <CJK> -0xF3CE 0x672D # <CJK> -0xF3CF 0x7D2E # <CJK> -0xF3D0 0x50ED # <CJK> -0xF3D1 0x53C3 # <CJK> -0xF3D2 0x5879 # <CJK> -0xF3D3 0x6158 # <CJK> -0xF3D4 0x6159 # <CJK> -0xF3D5 0x61FA # <CJK> -0xF3D6 0x65AC # <CJK> -0xF3D7 0x7AD9 # <CJK> -0xF3D8 0x8B92 # <CJK> -0xF3D9 0x8B96 # <CJK> -0xF3DA 0x5009 # <CJK> -0xF3DB 0x5021 # <CJK> -0xF3DC 0x5275 # <CJK> -0xF3DD 0x5531 # <CJK> -0xF3DE 0x5A3C # <CJK> -0xF3DF 0x5EE0 # <CJK> -0xF3E0 0x5F70 # <CJK> -0xF3E1 0x6134 # <CJK> -0xF3E2 0x655E # <CJK> -0xF3E3 0x660C # <CJK> -0xF3E4 0x6636 # <CJK> -0xF3E5 0x66A2 # <CJK> -0xF3E6 0x69CD # <CJK> -0xF3E7 0x6EC4 # <CJK> -0xF3E8 0x6F32 # <CJK> -0xF3E9 0x7316 # <CJK> -0xF3EA 0x7621 # <CJK> -0xF3EB 0x7A93 # <CJK> -0xF3EC 0x8139 # <CJK> -0xF3ED 0x8259 # <CJK> -0xF3EE 0x83D6 # <CJK> -0xF3EF 0x84BC # <CJK> -0xF3F0 0x50B5 # <CJK> -0xF3F1 0x57F0 # <CJK> -0xF3F2 0x5BC0 # <CJK> -0xF3F3 0x5BE8 # <CJK> -0xF3F4 0x5F69 # <CJK> -0xF3F5 0x63A1 # <CJK> -0xF3F6 0x7826 # <CJK> -0xF3F7 0x7DB5 # <CJK> -0xF3F8 0x83DC # <CJK> -0xF3F9 0x8521 # <CJK> -0xF3FA 0x91C7 # <CJK> -0xF3FB 0x91F5 # <CJK> -0xF3FC 0x518A # <CJK> -0xF3FD 0x67F5 # <CJK> -0xF3FE 0x7B56 # <CJK> -0xF4A1 0x8CAC # <CJK> -0xF4A2 0x51C4 # <CJK> -0xF4A3 0x59BB # <CJK> -0xF4A4 0x60BD # <CJK> -0xF4A5 0x8655 # <CJK> -0xF4A6 0x501C # <CJK> -0xF4A7 0xF9FF # <CJK> -0xF4A8 0x5254 # <CJK> -0xF4A9 0x5C3A # <CJK> -0xF4AA 0x617D # <CJK> -0xF4AB 0x621A # <CJK> -0xF4AC 0x62D3 # <CJK> -0xF4AD 0x64F2 # <CJK> -0xF4AE 0x65A5 # <CJK> -0xF4AF 0x6ECC # <CJK> -0xF4B0 0x7620 # <CJK> -0xF4B1 0x810A # <CJK> -0xF4B2 0x8E60 # <CJK> -0xF4B3 0x965F # <CJK> -0xF4B4 0x96BB # <CJK> -0xF4B5 0x4EDF # <CJK> -0xF4B6 0x5343 # <CJK> -0xF4B7 0x5598 # <CJK> -0xF4B8 0x5929 # <CJK> -0xF4B9 0x5DDD # <CJK> -0xF4BA 0x64C5 # <CJK> -0xF4BB 0x6CC9 # <CJK> -0xF4BC 0x6DFA # <CJK> -0xF4BD 0x7394 # <CJK> -0xF4BE 0x7A7F # <CJK> -0xF4BF 0x821B # <CJK> -0xF4C0 0x85A6 # <CJK> -0xF4C1 0x8CE4 # <CJK> -0xF4C2 0x8E10 # <CJK> -0xF4C3 0x9077 # <CJK> -0xF4C4 0x91E7 # <CJK> -0xF4C5 0x95E1 # <CJK> -0xF4C6 0x9621 # <CJK> -0xF4C7 0x97C6 # <CJK> -0xF4C8 0x51F8 # <CJK> -0xF4C9 0x54F2 # <CJK> -0xF4CA 0x5586 # <CJK> -0xF4CB 0x5FB9 # <CJK> -0xF4CC 0x64A4 # <CJK> -0xF4CD 0x6F88 # <CJK> -0xF4CE 0x7DB4 # <CJK> -0xF4CF 0x8F1F # <CJK> -0xF4D0 0x8F4D # <CJK> -0xF4D1 0x9435 # <CJK> -0xF4D2 0x50C9 # <CJK> -0xF4D3 0x5C16 # <CJK> -0xF4D4 0x6CBE # <CJK> -0xF4D5 0x6DFB # <CJK> -0xF4D6 0x751B # <CJK> -0xF4D7 0x77BB # <CJK> -0xF4D8 0x7C3D # <CJK> -0xF4D9 0x7C64 # <CJK> -0xF4DA 0x8A79 # <CJK> -0xF4DB 0x8AC2 # <CJK> -0xF4DC 0x581E # <CJK> -0xF4DD 0x59BE # <CJK> -0xF4DE 0x5E16 # <CJK> -0xF4DF 0x6377 # <CJK> -0xF4E0 0x7252 # <CJK> -0xF4E1 0x758A # <CJK> -0xF4E2 0x776B # <CJK> -0xF4E3 0x8ADC # <CJK> -0xF4E4 0x8CBC # <CJK> -0xF4E5 0x8F12 # <CJK> -0xF4E6 0x5EF3 # <CJK> -0xF4E7 0x6674 # <CJK> -0xF4E8 0x6DF8 # <CJK> -0xF4E9 0x807D # <CJK> -0xF4EA 0x83C1 # <CJK> -0xF4EB 0x8ACB # <CJK> -0xF4EC 0x9751 # <CJK> -0xF4ED 0x9BD6 # <CJK> -0xF4EE 0xFA00 # <CJK> -0xF4EF 0x5243 # <CJK> -0xF4F0 0x66FF # <CJK> -0xF4F1 0x6D95 # <CJK> -0xF4F2 0x6EEF # <CJK> -0xF4F3 0x7DE0 # <CJK> -0xF4F4 0x8AE6 # <CJK> -0xF4F5 0x902E # <CJK> -0xF4F6 0x905E # <CJK> -0xF4F7 0x9AD4 # <CJK> -0xF4F8 0x521D # <CJK> -0xF4F9 0x527F # <CJK> -0xF4FA 0x54E8 # <CJK> -0xF4FB 0x6194 # <CJK> -0xF4FC 0x6284 # <CJK> -0xF4FD 0x62DB # <CJK> -0xF4FE 0x68A2 # <CJK> -0xF5A1 0x6912 # <CJK> -0xF5A2 0x695A # <CJK> -0xF5A3 0x6A35 # <CJK> -0xF5A4 0x7092 # <CJK> -0xF5A5 0x7126 # <CJK> -0xF5A6 0x785D # <CJK> -0xF5A7 0x7901 # <CJK> -0xF5A8 0x790E # <CJK> -0xF5A9 0x79D2 # <CJK> -0xF5AA 0x7A0D # <CJK> -0xF5AB 0x8096 # <CJK> -0xF5AC 0x8278 # <CJK> -0xF5AD 0x82D5 # <CJK> -0xF5AE 0x8349 # <CJK> -0xF5AF 0x8549 # <CJK> -0xF5B0 0x8C82 # <CJK> -0xF5B1 0x8D85 # <CJK> -0xF5B2 0x9162 # <CJK> -0xF5B3 0x918B # <CJK> -0xF5B4 0x91AE # <CJK> -0xF5B5 0x4FC3 # <CJK> -0xF5B6 0x56D1 # <CJK> -0xF5B7 0x71ED # <CJK> -0xF5B8 0x77D7 # <CJK> -0xF5B9 0x8700 # <CJK> -0xF5BA 0x89F8 # <CJK> -0xF5BB 0x5BF8 # <CJK> -0xF5BC 0x5FD6 # <CJK> -0xF5BD 0x6751 # <CJK> -0xF5BE 0x90A8 # <CJK> -0xF5BF 0x53E2 # <CJK> -0xF5C0 0x585A # <CJK> -0xF5C1 0x5BF5 # <CJK> -0xF5C2 0x60A4 # <CJK> -0xF5C3 0x6181 # <CJK> -0xF5C4 0x6460 # <CJK> -0xF5C5 0x7E3D # <CJK> -0xF5C6 0x8070 # <CJK> -0xF5C7 0x8525 # <CJK> -0xF5C8 0x9283 # <CJK> -0xF5C9 0x64AE # <CJK> -0xF5CA 0x50AC # <CJK> -0xF5CB 0x5D14 # <CJK> -0xF5CC 0x6700 # <CJK> -0xF5CD 0x589C # <CJK> -0xF5CE 0x62BD # <CJK> -0xF5CF 0x63A8 # <CJK> -0xF5D0 0x690E # <CJK> -0xF5D1 0x6978 # <CJK> -0xF5D2 0x6A1E # <CJK> -0xF5D3 0x6E6B # <CJK> -0xF5D4 0x76BA # <CJK> -0xF5D5 0x79CB # <CJK> -0xF5D6 0x82BB # <CJK> -0xF5D7 0x8429 # <CJK> -0xF5D8 0x8ACF # <CJK> -0xF5D9 0x8DA8 # <CJK> -0xF5DA 0x8FFD # <CJK> -0xF5DB 0x9112 # <CJK> -0xF5DC 0x914B # <CJK> -0xF5DD 0x919C # <CJK> -0xF5DE 0x9310 # <CJK> -0xF5DF 0x9318 # <CJK> -0xF5E0 0x939A # <CJK> -0xF5E1 0x96DB # <CJK> -0xF5E2 0x9A36 # <CJK> -0xF5E3 0x9C0D # <CJK> -0xF5E4 0x4E11 # <CJK> -0xF5E5 0x755C # <CJK> -0xF5E6 0x795D # <CJK> -0xF5E7 0x7AFA # <CJK> -0xF5E8 0x7B51 # <CJK> -0xF5E9 0x7BC9 # <CJK> -0xF5EA 0x7E2E # <CJK> -0xF5EB 0x84C4 # <CJK> -0xF5EC 0x8E59 # <CJK> -0xF5ED 0x8E74 # <CJK> -0xF5EE 0x8EF8 # <CJK> -0xF5EF 0x9010 # <CJK> -0xF5F0 0x6625 # <CJK> -0xF5F1 0x693F # <CJK> -0xF5F2 0x7443 # <CJK> -0xF5F3 0x51FA # <CJK> -0xF5F4 0x672E # <CJK> -0xF5F5 0x9EDC # <CJK> -0xF5F6 0x5145 # <CJK> -0xF5F7 0x5FE0 # <CJK> -0xF5F8 0x6C96 # <CJK> -0xF5F9 0x87F2 # <CJK> -0xF5FA 0x885D # <CJK> -0xF5FB 0x8877 # <CJK> -0xF5FC 0x60B4 # <CJK> -0xF5FD 0x81B5 # <CJK> -0xF5FE 0x8403 # <CJK> -0xF6A1 0x8D05 # <CJK> -0xF6A2 0x53D6 # <CJK> -0xF6A3 0x5439 # <CJK> -0xF6A4 0x5634 # <CJK> -0xF6A5 0x5A36 # <CJK> -0xF6A6 0x5C31 # <CJK> -0xF6A7 0x708A # <CJK> -0xF6A8 0x7FE0 # <CJK> -0xF6A9 0x805A # <CJK> -0xF6AA 0x8106 # <CJK> -0xF6AB 0x81ED # <CJK> -0xF6AC 0x8DA3 # <CJK> -0xF6AD 0x9189 # <CJK> -0xF6AE 0x9A5F # <CJK> -0xF6AF 0x9DF2 # <CJK> -0xF6B0 0x5074 # <CJK> -0xF6B1 0x4EC4 # <CJK> -0xF6B2 0x53A0 # <CJK> -0xF6B3 0x60FB # <CJK> -0xF6B4 0x6E2C # <CJK> -0xF6B5 0x5C64 # <CJK> -0xF6B6 0x4F88 # <CJK> -0xF6B7 0x5024 # <CJK> -0xF6B8 0x55E4 # <CJK> -0xF6B9 0x5CD9 # <CJK> -0xF6BA 0x5E5F # <CJK> -0xF6BB 0x6065 # <CJK> -0xF6BC 0x6894 # <CJK> -0xF6BD 0x6CBB # <CJK> -0xF6BE 0x6DC4 # <CJK> -0xF6BF 0x71BE # <CJK> -0xF6C0 0x75D4 # <CJK> -0xF6C1 0x75F4 # <CJK> -0xF6C2 0x7661 # <CJK> -0xF6C3 0x7A1A # <CJK> -0xF6C4 0x7A49 # <CJK> -0xF6C5 0x7DC7 # <CJK> -0xF6C6 0x7DFB # <CJK> -0xF6C7 0x7F6E # <CJK> -0xF6C8 0x81F4 # <CJK> -0xF6C9 0x86A9 # <CJK> -0xF6CA 0x8F1C # <CJK> -0xF6CB 0x96C9 # <CJK> -0xF6CC 0x99B3 # <CJK> -0xF6CD 0x9F52 # <CJK> -0xF6CE 0x5247 # <CJK> -0xF6CF 0x52C5 # <CJK> -0xF6D0 0x98ED # <CJK> -0xF6D1 0x89AA # <CJK> -0xF6D2 0x4E03 # <CJK> -0xF6D3 0x67D2 # <CJK> -0xF6D4 0x6F06 # <CJK> -0xF6D5 0x4FB5 # <CJK> -0xF6D6 0x5BE2 # <CJK> -0xF6D7 0x6795 # <CJK> -0xF6D8 0x6C88 # <CJK> -0xF6D9 0x6D78 # <CJK> -0xF6DA 0x741B # <CJK> -0xF6DB 0x7827 # <CJK> -0xF6DC 0x91DD # <CJK> -0xF6DD 0x937C # <CJK> -0xF6DE 0x87C4 # <CJK> -0xF6DF 0x79E4 # <CJK> -0xF6E0 0x7A31 # <CJK> -0xF6E1 0x5FEB # <CJK> -0xF6E2 0x4ED6 # <CJK> -0xF6E3 0x54A4 # <CJK> -0xF6E4 0x553E # <CJK> -0xF6E5 0x58AE # <CJK> -0xF6E6 0x59A5 # <CJK> -0xF6E7 0x60F0 # <CJK> -0xF6E8 0x6253 # <CJK> -0xF6E9 0x62D6 # <CJK> -0xF6EA 0x6736 # <CJK> -0xF6EB 0x6955 # <CJK> -0xF6EC 0x8235 # <CJK> -0xF6ED 0x9640 # <CJK> -0xF6EE 0x99B1 # <CJK> -0xF6EF 0x99DD # <CJK> -0xF6F0 0x502C # <CJK> -0xF6F1 0x5353 # <CJK> -0xF6F2 0x5544 # <CJK> -0xF6F3 0x577C # <CJK> -0xF6F4 0xFA01 # <CJK> -0xF6F5 0x6258 # <CJK> -0xF6F6 0xFA02 # <CJK> -0xF6F7 0x64E2 # <CJK> -0xF6F8 0x666B # <CJK> -0xF6F9 0x67DD # <CJK> -0xF6FA 0x6FC1 # <CJK> -0xF6FB 0x6FEF # <CJK> -0xF6FC 0x7422 # <CJK> -0xF6FD 0x7438 # <CJK> -0xF6FE 0x8A17 # <CJK> -0xF7A1 0x9438 # <CJK> -0xF7A2 0x5451 # <CJK> -0xF7A3 0x5606 # <CJK> -0xF7A4 0x5766 # <CJK> -0xF7A5 0x5F48 # <CJK> -0xF7A6 0x619A # <CJK> -0xF7A7 0x6B4E # <CJK> -0xF7A8 0x7058 # <CJK> -0xF7A9 0x70AD # <CJK> -0xF7AA 0x7DBB # <CJK> -0xF7AB 0x8A95 # <CJK> -0xF7AC 0x596A # <CJK> -0xF7AD 0x812B # <CJK> -0xF7AE 0x63A2 # <CJK> -0xF7AF 0x7708 # <CJK> -0xF7B0 0x803D # <CJK> -0xF7B1 0x8CAA # <CJK> -0xF7B2 0x5854 # <CJK> -0xF7B3 0x642D # <CJK> -0xF7B4 0x69BB # <CJK> -0xF7B5 0x5B95 # <CJK> -0xF7B6 0x5E11 # <CJK> -0xF7B7 0x6E6F # <CJK> -0xF7B8 0xFA03 # <CJK> -0xF7B9 0x8569 # <CJK> -0xF7BA 0x514C # <CJK> -0xF7BB 0x53F0 # <CJK> -0xF7BC 0x592A # <CJK> -0xF7BD 0x6020 # <CJK> -0xF7BE 0x614B # <CJK> -0xF7BF 0x6B86 # <CJK> -0xF7C0 0x6C70 # <CJK> -0xF7C1 0x6CF0 # <CJK> -0xF7C2 0x7B1E # <CJK> -0xF7C3 0x80CE # <CJK> -0xF7C4 0x82D4 # <CJK> -0xF7C5 0x8DC6 # <CJK> -0xF7C6 0x90B0 # <CJK> -0xF7C7 0x98B1 # <CJK> -0xF7C8 0xFA04 # <CJK> -0xF7C9 0x64C7 # <CJK> -0xF7CA 0x6FA4 # <CJK> -0xF7CB 0x6491 # <CJK> -0xF7CC 0x6504 # <CJK> -0xF7CD 0x514E # <CJK> -0xF7CE 0x5410 # <CJK> -0xF7CF 0x571F # <CJK> -0xF7D0 0x8A0E # <CJK> -0xF7D1 0x615F # <CJK> -0xF7D2 0x6876 # <CJK> -0xF7D3 0xFA05 # <CJK> -0xF7D4 0x75DB # <CJK> -0xF7D5 0x7B52 # <CJK> -0xF7D6 0x7D71 # <CJK> -0xF7D7 0x901A # <CJK> -0xF7D8 0x5806 # <CJK> -0xF7D9 0x69CC # <CJK> -0xF7DA 0x817F # <CJK> -0xF7DB 0x892A # <CJK> -0xF7DC 0x9000 # <CJK> -0xF7DD 0x9839 # <CJK> -0xF7DE 0x5078 # <CJK> -0xF7DF 0x5957 # <CJK> -0xF7E0 0x59AC # <CJK> -0xF7E1 0x6295 # <CJK> -0xF7E2 0x900F # <CJK> -0xF7E3 0x9B2A # <CJK> -0xF7E4 0x615D # <CJK> -0xF7E5 0x7279 # <CJK> -0xF7E6 0x95D6 # <CJK> -0xF7E7 0x5761 # <CJK> -0xF7E8 0x5A46 # <CJK> -0xF7E9 0x5DF4 # <CJK> -0xF7EA 0x628A # <CJK> -0xF7EB 0x64AD # <CJK> -0xF7EC 0x64FA # <CJK> -0xF7ED 0x6777 # <CJK> -0xF7EE 0x6CE2 # <CJK> -0xF7EF 0x6D3E # <CJK> -0xF7F0 0x722C # <CJK> -0xF7F1 0x7436 # <CJK> -0xF7F2 0x7834 # <CJK> -0xF7F3 0x7F77 # <CJK> -0xF7F4 0x82AD # <CJK> -0xF7F5 0x8DDB # <CJK> -0xF7F6 0x9817 # <CJK> -0xF7F7 0x5224 # <CJK> -0xF7F8 0x5742 # <CJK> -0xF7F9 0x677F # <CJK> -0xF7FA 0x7248 # <CJK> -0xF7FB 0x74E3 # <CJK> -0xF7FC 0x8CA9 # <CJK> -0xF7FD 0x8FA6 # <CJK> -0xF7FE 0x9211 # <CJK> -0xF8A1 0x962A # <CJK> -0xF8A2 0x516B # <CJK> -0xF8A3 0x53ED # <CJK> -0xF8A4 0x634C # <CJK> -0xF8A5 0x4F69 # <CJK> -0xF8A6 0x5504 # <CJK> -0xF8A7 0x6096 # <CJK> -0xF8A8 0x6557 # <CJK> -0xF8A9 0x6C9B # <CJK> -0xF8AA 0x6D7F # <CJK> -0xF8AB 0x724C # <CJK> -0xF8AC 0x72FD # <CJK> -0xF8AD 0x7A17 # <CJK> -0xF8AE 0x8987 # <CJK> -0xF8AF 0x8C9D # <CJK> -0xF8B0 0x5F6D # <CJK> -0xF8B1 0x6F8E # <CJK> -0xF8B2 0x70F9 # <CJK> -0xF8B3 0x81A8 # <CJK> -0xF8B4 0x610E # <CJK> -0xF8B5 0x4FBF # <CJK> -0xF8B6 0x504F # <CJK> -0xF8B7 0x6241 # <CJK> -0xF8B8 0x7247 # <CJK> -0xF8B9 0x7BC7 # <CJK> -0xF8BA 0x7DE8 # <CJK> -0xF8BB 0x7FE9 # <CJK> -0xF8BC 0x904D # <CJK> -0xF8BD 0x97AD # <CJK> -0xF8BE 0x9A19 # <CJK> -0xF8BF 0x8CB6 # <CJK> -0xF8C0 0x576A # <CJK> -0xF8C1 0x5E73 # <CJK> -0xF8C2 0x67B0 # <CJK> -0xF8C3 0x840D # <CJK> -0xF8C4 0x8A55 # <CJK> -0xF8C5 0x5420 # <CJK> -0xF8C6 0x5B16 # <CJK> -0xF8C7 0x5E63 # <CJK> -0xF8C8 0x5EE2 # <CJK> -0xF8C9 0x5F0A # <CJK> -0xF8CA 0x6583 # <CJK> -0xF8CB 0x80BA # <CJK> -0xF8CC 0x853D # <CJK> -0xF8CD 0x9589 # <CJK> -0xF8CE 0x965B # <CJK> -0xF8CF 0x4F48 # <CJK> -0xF8D0 0x5305 # <CJK> -0xF8D1 0x530D # <CJK> -0xF8D2 0x530F # <CJK> -0xF8D3 0x5486 # <CJK> -0xF8D4 0x54FA # <CJK> -0xF8D5 0x5703 # <CJK> -0xF8D6 0x5E03 # <CJK> -0xF8D7 0x6016 # <CJK> -0xF8D8 0x629B # <CJK> -0xF8D9 0x62B1 # <CJK> -0xF8DA 0x6355 # <CJK> -0xF8DB 0xFA06 # <CJK> -0xF8DC 0x6CE1 # <CJK> -0xF8DD 0x6D66 # <CJK> -0xF8DE 0x75B1 # <CJK> -0xF8DF 0x7832 # <CJK> -0xF8E0 0x80DE # <CJK> -0xF8E1 0x812F # <CJK> -0xF8E2 0x82DE # <CJK> -0xF8E3 0x8461 # <CJK> -0xF8E4 0x84B2 # <CJK> -0xF8E5 0x888D # <CJK> -0xF8E6 0x8912 # <CJK> -0xF8E7 0x900B # <CJK> -0xF8E8 0x92EA # <CJK> -0xF8E9 0x98FD # <CJK> -0xF8EA 0x9B91 # <CJK> -0xF8EB 0x5E45 # <CJK> -0xF8EC 0x66B4 # <CJK> -0xF8ED 0x66DD # <CJK> -0xF8EE 0x7011 # <CJK> -0xF8EF 0x7206 # <CJK> -0xF8F0 0xFA07 # <CJK> -0xF8F1 0x4FF5 # <CJK> -0xF8F2 0x527D # <CJK> -0xF8F3 0x5F6A # <CJK> -0xF8F4 0x6153 # <CJK> -0xF8F5 0x6753 # <CJK> -0xF8F6 0x6A19 # <CJK> -0xF8F7 0x6F02 # <CJK> -0xF8F8 0x74E2 # <CJK> -0xF8F9 0x7968 # <CJK> -0xF8FA 0x8868 # <CJK> -0xF8FB 0x8C79 # <CJK> -0xF8FC 0x98C7 # <CJK> -0xF8FD 0x98C4 # <CJK> -0xF8FE 0x9A43 # <CJK> -0xF9A1 0x54C1 # <CJK> -0xF9A2 0x7A1F # <CJK> -0xF9A3 0x6953 # <CJK> -0xF9A4 0x8AF7 # <CJK> -0xF9A5 0x8C4A # <CJK> -0xF9A6 0x98A8 # <CJK> -0xF9A7 0x99AE # <CJK> -0xF9A8 0x5F7C # <CJK> -0xF9A9 0x62AB # <CJK> -0xF9AA 0x75B2 # <CJK> -0xF9AB 0x76AE # <CJK> -0xF9AC 0x88AB # <CJK> -0xF9AD 0x907F # <CJK> -0xF9AE 0x9642 # <CJK> -0xF9AF 0x5339 # <CJK> -0xF9B0 0x5F3C # <CJK> -0xF9B1 0x5FC5 # <CJK> -0xF9B2 0x6CCC # <CJK> -0xF9B3 0x73CC # <CJK> -0xF9B4 0x7562 # <CJK> -0xF9B5 0x758B # <CJK> -0xF9B6 0x7B46 # <CJK> -0xF9B7 0x82FE # <CJK> -0xF9B8 0x999D # <CJK> -0xF9B9 0x4E4F # <CJK> -0xF9BA 0x903C # <CJK> -0xF9BB 0x4E0B # <CJK> -0xF9BC 0x4F55 # <CJK> -0xF9BD 0x53A6 # <CJK> -0xF9BE 0x590F # <CJK> -0xF9BF 0x5EC8 # <CJK> -0xF9C0 0x6630 # <CJK> -0xF9C1 0x6CB3 # <CJK> -0xF9C2 0x7455 # <CJK> -0xF9C3 0x8377 # <CJK> -0xF9C4 0x8766 # <CJK> -0xF9C5 0x8CC0 # <CJK> -0xF9C6 0x9050 # <CJK> -0xF9C7 0x971E # <CJK> -0xF9C8 0x9C15 # <CJK> -0xF9C9 0x58D1 # <CJK> -0xF9CA 0x5B78 # <CJK> -0xF9CB 0x8650 # <CJK> -0xF9CC 0x8B14 # <CJK> -0xF9CD 0x9DB4 # <CJK> -0xF9CE 0x5BD2 # <CJK> -0xF9CF 0x6068 # <CJK> -0xF9D0 0x608D # <CJK> -0xF9D1 0x65F1 # <CJK> -0xF9D2 0x6C57 # <CJK> -0xF9D3 0x6F22 # <CJK> -0xF9D4 0x6FA3 # <CJK> -0xF9D5 0x701A # <CJK> -0xF9D6 0x7F55 # <CJK> -0xF9D7 0x7FF0 # <CJK> -0xF9D8 0x9591 # <CJK> -0xF9D9 0x9592 # <CJK> -0xF9DA 0x9650 # <CJK> -0xF9DB 0x97D3 # <CJK> -0xF9DC 0x5272 # <CJK> -0xF9DD 0x8F44 # <CJK> -0xF9DE 0x51FD # <CJK> -0xF9DF 0x542B # <CJK> -0xF9E0 0x54B8 # <CJK> -0xF9E1 0x5563 # <CJK> -0xF9E2 0x558A # <CJK> -0xF9E3 0x6ABB # <CJK> -0xF9E4 0x6DB5 # <CJK> -0xF9E5 0x7DD8 # <CJK> -0xF9E6 0x8266 # <CJK> -0xF9E7 0x929C # <CJK> -0xF9E8 0x9677 # <CJK> -0xF9E9 0x9E79 # <CJK> -0xF9EA 0x5408 # <CJK> -0xF9EB 0x54C8 # <CJK> -0xF9EC 0x76D2 # <CJK> -0xF9ED 0x86E4 # <CJK> -0xF9EE 0x95A4 # <CJK> -0xF9EF 0x95D4 # <CJK> -0xF9F0 0x965C # <CJK> -0xF9F1 0x4EA2 # <CJK> -0xF9F2 0x4F09 # <CJK> -0xF9F3 0x59EE # <CJK> -0xF9F4 0x5AE6 # <CJK> -0xF9F5 0x5DF7 # <CJK> -0xF9F6 0x6052 # <CJK> -0xF9F7 0x6297 # <CJK> -0xF9F8 0x676D # <CJK> -0xF9F9 0x6841 # <CJK> -0xF9FA 0x6C86 # <CJK> -0xF9FB 0x6E2F # <CJK> -0xF9FC 0x7F38 # <CJK> -0xF9FD 0x809B # <CJK> -0xF9FE 0x822A # <CJK> -0xFAA1 0xFA08 # <CJK> -0xFAA2 0xFA09 # <CJK> -0xFAA3 0x9805 # <CJK> -0xFAA4 0x4EA5 # <CJK> -0xFAA5 0x5055 # <CJK> -0xFAA6 0x54B3 # <CJK> -0xFAA7 0x5793 # <CJK> -0xFAA8 0x595A # <CJK> -0xFAA9 0x5B69 # <CJK> -0xFAAA 0x5BB3 # <CJK> -0xFAAB 0x61C8 # <CJK> -0xFAAC 0x6977 # <CJK> -0xFAAD 0x6D77 # <CJK> -0xFAAE 0x7023 # <CJK> -0xFAAF 0x87F9 # <CJK> -0xFAB0 0x89E3 # <CJK> -0xFAB1 0x8A72 # <CJK> -0xFAB2 0x8AE7 # <CJK> -0xFAB3 0x9082 # <CJK> -0xFAB4 0x99ED # <CJK> -0xFAB5 0x9AB8 # <CJK> -0xFAB6 0x52BE # <CJK> -0xFAB7 0x6838 # <CJK> -0xFAB8 0x5016 # <CJK> -0xFAB9 0x5E78 # <CJK> -0xFABA 0x674F # <CJK> -0xFABB 0x8347 # <CJK> -0xFABC 0x884C # <CJK> -0xFABD 0x4EAB # <CJK> -0xFABE 0x5411 # <CJK> -0xFABF 0x56AE # <CJK> -0xFAC0 0x73E6 # <CJK> -0xFAC1 0x9115 # <CJK> -0xFAC2 0x97FF # <CJK> -0xFAC3 0x9909 # <CJK> -0xFAC4 0x9957 # <CJK> -0xFAC5 0x9999 # <CJK> -0xFAC6 0x5653 # <CJK> -0xFAC7 0x589F # <CJK> -0xFAC8 0x865B # <CJK> -0xFAC9 0x8A31 # <CJK> -0xFACA 0x61B2 # <CJK> -0xFACB 0x6AF6 # <CJK> -0xFACC 0x737B # <CJK> -0xFACD 0x8ED2 # <CJK> -0xFACE 0x6B47 # <CJK> -0xFACF 0x96AA # <CJK> -0xFAD0 0x9A57 # <CJK> -0xFAD1 0x5955 # <CJK> -0xFAD2 0x7200 # <CJK> -0xFAD3 0x8D6B # <CJK> -0xFAD4 0x9769 # <CJK> -0xFAD5 0x4FD4 # <CJK> -0xFAD6 0x5CF4 # <CJK> -0xFAD7 0x5F26 # <CJK> -0xFAD8 0x61F8 # <CJK> -0xFAD9 0x665B # <CJK> -0xFADA 0x6CEB # <CJK> -0xFADB 0x70AB # <CJK> -0xFADC 0x7384 # <CJK> -0xFADD 0x73B9 # <CJK> -0xFADE 0x73FE # <CJK> -0xFADF 0x7729 # <CJK> -0xFAE0 0x774D # <CJK> -0xFAE1 0x7D43 # <CJK> -0xFAE2 0x7D62 # <CJK> -0xFAE3 0x7E23 # <CJK> -0xFAE4 0x8237 # <CJK> -0xFAE5 0x8852 # <CJK> -0xFAE6 0xFA0A # <CJK> -0xFAE7 0x8CE2 # <CJK> -0xFAE8 0x9249 # <CJK> -0xFAE9 0x986F # <CJK> -0xFAEA 0x5B51 # <CJK> -0xFAEB 0x7A74 # <CJK> -0xFAEC 0x8840 # <CJK> -0xFAED 0x9801 # <CJK> -0xFAEE 0x5ACC # <CJK> -0xFAEF 0x4FE0 # <CJK> -0xFAF0 0x5354 # <CJK> -0xFAF1 0x593E # <CJK> -0xFAF2 0x5CFD # <CJK> -0xFAF3 0x633E # <CJK> -0xFAF4 0x6D79 # <CJK> -0xFAF5 0x72F9 # <CJK> -0xFAF6 0x8105 # <CJK> -0xFAF7 0x8107 # <CJK> -0xFAF8 0x83A2 # <CJK> -0xFAF9 0x92CF # <CJK> -0xFAFA 0x9830 # <CJK> -0xFAFB 0x4EA8 # <CJK> -0xFAFC 0x5144 # <CJK> -0xFAFD 0x5211 # <CJK> -0xFAFE 0x578B # <CJK> -0xFBA1 0x5F62 # <CJK> -0xFBA2 0x6CC2 # <CJK> -0xFBA3 0x6ECE # <CJK> -0xFBA4 0x7005 # <CJK> -0xFBA5 0x7050 # <CJK> -0xFBA6 0x70AF # <CJK> -0xFBA7 0x7192 # <CJK> -0xFBA8 0x73E9 # <CJK> -0xFBA9 0x7469 # <CJK> -0xFBAA 0x834A # <CJK> -0xFBAB 0x87A2 # <CJK> -0xFBAC 0x8861 # <CJK> -0xFBAD 0x9008 # <CJK> -0xFBAE 0x90A2 # <CJK> -0xFBAF 0x93A3 # <CJK> -0xFBB0 0x99A8 # <CJK> -0xFBB1 0x516E # <CJK> -0xFBB2 0x5F57 # <CJK> -0xFBB3 0x60E0 # <CJK> -0xFBB4 0x6167 # <CJK> -0xFBB5 0x66B3 # <CJK> -0xFBB6 0x8559 # <CJK> -0xFBB7 0x8E4A # <CJK> -0xFBB8 0x91AF # <CJK> -0xFBB9 0x978B # <CJK> -0xFBBA 0x4E4E # <CJK> -0xFBBB 0x4E92 # <CJK> -0xFBBC 0x547C # <CJK> -0xFBBD 0x58D5 # <CJK> -0xFBBE 0x58FA # <CJK> -0xFBBF 0x597D # <CJK> -0xFBC0 0x5CB5 # <CJK> -0xFBC1 0x5F27 # <CJK> -0xFBC2 0x6236 # <CJK> -0xFBC3 0x6248 # <CJK> -0xFBC4 0x660A # <CJK> -0xFBC5 0x6667 # <CJK> -0xFBC6 0x6BEB # <CJK> -0xFBC7 0x6D69 # <CJK> -0xFBC8 0x6DCF # <CJK> -0xFBC9 0x6E56 # <CJK> -0xFBCA 0x6EF8 # <CJK> -0xFBCB 0x6F94 # <CJK> -0xFBCC 0x6FE0 # <CJK> -0xFBCD 0x6FE9 # <CJK> -0xFBCE 0x705D # <CJK> -0xFBCF 0x72D0 # <CJK> -0xFBD0 0x7425 # <CJK> -0xFBD1 0x745A # <CJK> -0xFBD2 0x74E0 # <CJK> -0xFBD3 0x7693 # <CJK> -0xFBD4 0x795C # <CJK> -0xFBD5 0x7CCA # <CJK> -0xFBD6 0x7E1E # <CJK> -0xFBD7 0x80E1 # <CJK> -0xFBD8 0x82A6 # <CJK> -0xFBD9 0x846B # <CJK> -0xFBDA 0x84BF # <CJK> -0xFBDB 0x864E # <CJK> -0xFBDC 0x865F # <CJK> -0xFBDD 0x8774 # <CJK> -0xFBDE 0x8B77 # <CJK> -0xFBDF 0x8C6A # <CJK> -0xFBE0 0x93AC # <CJK> -0xFBE1 0x9800 # <CJK> -0xFBE2 0x9865 # <CJK> -0xFBE3 0x60D1 # <CJK> -0xFBE4 0x6216 # <CJK> -0xFBE5 0x9177 # <CJK> -0xFBE6 0x5A5A # <CJK> -0xFBE7 0x660F # <CJK> -0xFBE8 0x6DF7 # <CJK> -0xFBE9 0x6E3E # <CJK> -0xFBEA 0x743F # <CJK> -0xFBEB 0x9B42 # <CJK> -0xFBEC 0x5FFD # <CJK> -0xFBED 0x60DA # <CJK> -0xFBEE 0x7B0F # <CJK> -0xFBEF 0x54C4 # <CJK> -0xFBF0 0x5F18 # <CJK> -0xFBF1 0x6C5E # <CJK> -0xFBF2 0x6CD3 # <CJK> -0xFBF3 0x6D2A # <CJK> -0xFBF4 0x70D8 # <CJK> -0xFBF5 0x7D05 # <CJK> -0xFBF6 0x8679 # <CJK> -0xFBF7 0x8A0C # <CJK> -0xFBF8 0x9D3B # <CJK> -0xFBF9 0x5316 # <CJK> -0xFBFA 0x548C # <CJK> -0xFBFB 0x5B05 # <CJK> -0xFBFC 0x6A3A # <CJK> -0xFBFD 0x706B # <CJK> -0xFBFE 0x7575 # <CJK> -0xFCA1 0x798D # <CJK> -0xFCA2 0x79BE # <CJK> -0xFCA3 0x82B1 # <CJK> -0xFCA4 0x83EF # <CJK> -0xFCA5 0x8A71 # <CJK> -0xFCA6 0x8B41 # <CJK> -0xFCA7 0x8CA8 # <CJK> -0xFCA8 0x9774 # <CJK> -0xFCA9 0xFA0B # <CJK> -0xFCAA 0x64F4 # <CJK> -0xFCAB 0x652B # <CJK> -0xFCAC 0x78BA # <CJK> -0xFCAD 0x78BB # <CJK> -0xFCAE 0x7A6B # <CJK> -0xFCAF 0x4E38 # <CJK> -0xFCB0 0x559A # <CJK> -0xFCB1 0x5950 # <CJK> -0xFCB2 0x5BA6 # <CJK> -0xFCB3 0x5E7B # <CJK> -0xFCB4 0x60A3 # <CJK> -0xFCB5 0x63DB # <CJK> -0xFCB6 0x6B61 # <CJK> -0xFCB7 0x6665 # <CJK> -0xFCB8 0x6853 # <CJK> -0xFCB9 0x6E19 # <CJK> -0xFCBA 0x7165 # <CJK> -0xFCBB 0x74B0 # <CJK> -0xFCBC 0x7D08 # <CJK> -0xFCBD 0x9084 # <CJK> -0xFCBE 0x9A69 # <CJK> -0xFCBF 0x9C25 # <CJK> -0xFCC0 0x6D3B # <CJK> -0xFCC1 0x6ED1 # <CJK> -0xFCC2 0x733E # <CJK> -0xFCC3 0x8C41 # <CJK> -0xFCC4 0x95CA # <CJK> -0xFCC5 0x51F0 # <CJK> -0xFCC6 0x5E4C # <CJK> -0xFCC7 0x5FA8 # <CJK> -0xFCC8 0x604D # <CJK> -0xFCC9 0x60F6 # <CJK> -0xFCCA 0x6130 # <CJK> -0xFCCB 0x614C # <CJK> -0xFCCC 0x6643 # <CJK> -0xFCCD 0x6644 # <CJK> -0xFCCE 0x69A5 # <CJK> -0xFCCF 0x6CC1 # <CJK> -0xFCD0 0x6E5F # <CJK> -0xFCD1 0x6EC9 # <CJK> -0xFCD2 0x6F62 # <CJK> -0xFCD3 0x714C # <CJK> -0xFCD4 0x749C # <CJK> -0xFCD5 0x7687 # <CJK> -0xFCD6 0x7BC1 # <CJK> -0xFCD7 0x7C27 # <CJK> -0xFCD8 0x8352 # <CJK> -0xFCD9 0x8757 # <CJK> -0xFCDA 0x9051 # <CJK> -0xFCDB 0x968D # <CJK> -0xFCDC 0x9EC3 # <CJK> -0xFCDD 0x532F # <CJK> -0xFCDE 0x56DE # <CJK> -0xFCDF 0x5EFB # <CJK> -0xFCE0 0x5F8A # <CJK> -0xFCE1 0x6062 # <CJK> -0xFCE2 0x6094 # <CJK> -0xFCE3 0x61F7 # <CJK> -0xFCE4 0x6666 # <CJK> -0xFCE5 0x6703 # <CJK> -0xFCE6 0x6A9C # <CJK> -0xFCE7 0x6DEE # <CJK> -0xFCE8 0x6FAE # <CJK> -0xFCE9 0x7070 # <CJK> -0xFCEA 0x736A # <CJK> -0xFCEB 0x7E6A # <CJK> -0xFCEC 0x81BE # <CJK> -0xFCED 0x8334 # <CJK> -0xFCEE 0x86D4 # <CJK> -0xFCEF 0x8AA8 # <CJK> -0xFCF0 0x8CC4 # <CJK> -0xFCF1 0x5283 # <CJK> -0xFCF2 0x7372 # <CJK> -0xFCF3 0x5B96 # <CJK> -0xFCF4 0x6A6B # <CJK> -0xFCF5 0x9404 # <CJK> -0xFCF6 0x54EE # <CJK> -0xFCF7 0x5686 # <CJK> -0xFCF8 0x5B5D # <CJK> -0xFCF9 0x6548 # <CJK> -0xFCFA 0x6585 # <CJK> -0xFCFB 0x66C9 # <CJK> -0xFCFC 0x689F # <CJK> -0xFCFD 0x6D8D # <CJK> -0xFCFE 0x6DC6 # <CJK> -0xFDA1 0x723B # <CJK> -0xFDA2 0x80B4 # <CJK> -0xFDA3 0x9175 # <CJK> -0xFDA4 0x9A4D # <CJK> -0xFDA5 0x4FAF # <CJK> -0xFDA6 0x5019 # <CJK> -0xFDA7 0x539A # <CJK> -0xFDA8 0x540E # <CJK> -0xFDA9 0x543C # <CJK> -0xFDAA 0x5589 # <CJK> -0xFDAB 0x55C5 # <CJK> -0xFDAC 0x5E3F # <CJK> -0xFDAD 0x5F8C # <CJK> -0xFDAE 0x673D # <CJK> -0xFDAF 0x7166 # <CJK> -0xFDB0 0x73DD # <CJK> -0xFDB1 0x9005 # <CJK> -0xFDB2 0x52DB # <CJK> -0xFDB3 0x52F3 # <CJK> -0xFDB4 0x5864 # <CJK> -0xFDB5 0x58CE # <CJK> -0xFDB6 0x7104 # <CJK> -0xFDB7 0x718F # <CJK> -0xFDB8 0x71FB # <CJK> -0xFDB9 0x85B0 # <CJK> -0xFDBA 0x8A13 # <CJK> -0xFDBB 0x6688 # <CJK> -0xFDBC 0x85A8 # <CJK> -0xFDBD 0x55A7 # <CJK> -0xFDBE 0x6684 # <CJK> -0xFDBF 0x714A # <CJK> -0xFDC0 0x8431 # <CJK> -0xFDC1 0x5349 # <CJK> -0xFDC2 0x5599 # <CJK> -0xFDC3 0x6BC1 # <CJK> -0xFDC4 0x5F59 # <CJK> -0xFDC5 0x5FBD # <CJK> -0xFDC6 0x63EE # <CJK> -0xFDC7 0x6689 # <CJK> -0xFDC8 0x7147 # <CJK> -0xFDC9 0x8AF1 # <CJK> -0xFDCA 0x8F1D # <CJK> -0xFDCB 0x9EBE # <CJK> -0xFDCC 0x4F11 # <CJK> -0xFDCD 0x643A # <CJK> -0xFDCE 0x70CB # <CJK> -0xFDCF 0x7566 # <CJK> -0xFDD0 0x8667 # <CJK> -0xFDD1 0x6064 # <CJK> -0xFDD2 0x8B4E # <CJK> -0xFDD3 0x9DF8 # <CJK> -0xFDD4 0x5147 # <CJK> -0xFDD5 0x51F6 # <CJK> -0xFDD6 0x5308 # <CJK> -0xFDD7 0x6D36 # <CJK> -0xFDD8 0x80F8 # <CJK> -0xFDD9 0x9ED1 # <CJK> -0xFDDA 0x6615 # <CJK> -0xFDDB 0x6B23 # <CJK> -0xFDDC 0x7098 # <CJK> -0xFDDD 0x75D5 # <CJK> -0xFDDE 0x5403 # <CJK> -0xFDDF 0x5C79 # <CJK> -0xFDE0 0x7D07 # <CJK> -0xFDE1 0x8A16 # <CJK> -0xFDE2 0x6B20 # <CJK> -0xFDE3 0x6B3D # <CJK> -0xFDE4 0x6B46 # <CJK> -0xFDE5 0x5438 # <CJK> -0xFDE6 0x6070 # <CJK> -0xFDE7 0x6D3D # <CJK> -0xFDE8 0x7FD5 # <CJK> -0xFDE9 0x8208 # <CJK> -0xFDEA 0x50D6 # <CJK> -0xFDEB 0x51DE # <CJK> -0xFDEC 0x559C # <CJK> -0xFDED 0x566B # <CJK> -0xFDEE 0x56CD # <CJK> -0xFDEF 0x59EC # <CJK> -0xFDF0 0x5B09 # <CJK> -0xFDF1 0x5E0C # <CJK> -0xFDF2 0x6199 # <CJK> -0xFDF3 0x6198 # <CJK> -0xFDF4 0x6231 # <CJK> -0xFDF5 0x665E # <CJK> -0xFDF6 0x66E6 # <CJK> -0xFDF7 0x7199 # <CJK> -0xFDF8 0x71B9 # <CJK> -0xFDF9 0x71BA # <CJK> -0xFDFA 0x72A7 # <CJK> -0xFDFB 0x79A7 # <CJK> -0xFDFC 0x7A00 # <CJK> -0xFDFD 0x7FB2 # <CJK> -0xFDFE 0x8A70 # <CJK> - -
\ No newline at end of file diff --git a/program/lib/utf8.class.php b/program/lib/utf8.class.php deleted file mode 100644 index 0446159c7..000000000 --- a/program/lib/utf8.class.php +++ /dev/null @@ -1,171 +0,0 @@ -<?php -/* -utf8 1.0 -Copyright: Left ---------------------------------------------------------------------------------- -Version: 1.0 -Date: 23 November 2004 ---------------------------------------------------------------------------------- -Author: Alexander Minkovsky (a_minkovsky@hotmail.com) ---------------------------------------------------------------------------------- -License: Choose the more appropriated for You - I don't care. ---------------------------------------------------------------------------------- -Description: - Class provides functionality to convert single byte strings, such as CP1251 - ti UTF-8 multibyte format and vice versa. - Class loads a concrete charset map, for example CP1251. - (Refer to ftp://ftp.unicode.org/Public/MAPPINGS/ for map files) - Directory containing MAP files is predefined as constant. - Each charset is also predefined as constant pointing to the MAP file. ---------------------------------------------------------------------------------- -Example usage: - Pass the desired charset in the class constructor: - $utfConverter = new utf8(CP1251); //defaults to CP1250. - or load the charset MAP using loadCharset method like this: - $utfConverter->loadCharset(CP1252); - Then call - $res = $utfConverter->strToUtf8($str); - or - $res = $utfConverter->utf8ToStr($utf); - to get the needed encoding. ---------------------------------------------------------------------------------- -Note: - Rewrite or Override the onError method if needed. It's the error handler used from everywhere and takes 2 parameters: - err_code and err_text. By default it just prints out a message about the error. -*/ - -// Charset maps -// Adapted to fit Roundcube -define("UTF8_MAP_DIR", "program/lib/encoding"); - -//Error constants -define("ERR_OPEN_MAP_FILE", "ERR_OPEN_MAP_FILE"); - -//Class definition -Class utf8 { - - var $charset = "ISO-8859-1"; - var $ascMap = array(); - var $utfMap = array(); - var $aliases = array( - 'KOI8-R' => 'KOI8R' - ); - var $error = null; - - function __construct($charset="ISO-8859-1") { - $this->loadCharset($charset); - } - - //Load charset - function loadCharset($charset) { - - $charset = preg_replace(array('/^WINDOWS-*125([0-8])$/', '/^CP-/'), array('CP125\\1', 'CP'), $charset); - if (isset($this->aliases[$charset])) - $charset = $this->aliases[$charset]; - - $this->charset = $charset; - - if (empty($this->ascMap[$charset])) - { - $file = UTF8_MAP_DIR.'/'.$charset.'.map'; - - if (!is_file($file)) { - $this->onError(ERR_OPEN_MAP_FILE, "Failed to open map file for $charset"); - return; - } - - $lines = file_get_contents($file); - $lines = preg_replace("/#.*$/m","",$lines); - $lines = preg_replace("/\n\n/","",$lines); - $lines = explode("\n",$lines); - - foreach($lines as $line){ - $parts = explode('0x',$line); - if(count($parts)==3){ - $asc=hexdec(substr($parts[1],0,2)); - $utf=hexdec(substr($parts[2],0,4)); - $this->ascMap[$charset][$asc]=$utf; - } - } - - $this->utfMap = array_flip($this->ascMap[$charset]); - } - } - - //Error handler - function onError($err_code,$err_text){ - $this->error = $err_text; - return null; - } - - //Translate string ($str) to UTF-8 from given charset - function strToUtf8($str){ - if (empty($this->ascMap[$this->charset])) - return null; - - $chars = unpack('C*', $str); - $cnt = count($chars); - for($i=1; $i<=$cnt; $i++) - $this->_charToUtf8($chars[$i]); - - return implode("",$chars); - } - - //Translate UTF-8 string to single byte string in the given charset - function utf8ToStr($utf){ - if (empty($this->ascMap[$this->charset])) - return null; - - $chars = unpack('C*', $utf); - $cnt = count($chars); - $res = ""; //No simple way to do it in place... concatenate char by char - - for ($i=1; $i<=$cnt; $i++) - $res .= $this->_utf8ToChar($chars, $i); - - return $res; - } - - //Char to UTF-8 sequence - function _charToUtf8(&$char){ - $c = (int)$this->ascMap[$this->charset][$char]; - if ($c < 0x80){ - $char = chr($c); - } - else if($c<0x800) // 2 bytes - $char = (chr(0xC0 | $c>>6) . chr(0x80 | $c & 0x3F)); - else if($c<0x10000) // 3 bytes - $char = (chr(0xE0 | $c>>12) . chr(0x80 | $c>>6 & 0x3F) . chr(0x80 | $c & 0x3F)); - else if($c<0x200000) // 4 bytes - $char = (chr(0xF0 | $c>>18) . chr(0x80 | $c>>12 & 0x3F) . chr(0x80 | $c>>6 & 0x3F) . chr(0x80 | $c & 0x3F)); - } - - //UTF-8 sequence to single byte character - function _utf8ToChar(&$chars, &$idx){ - if(($chars[$idx] >= 240) && ($chars[$idx] <= 255)){ // 4 bytes - $utf = (intval($chars[$idx]-240) << 18) + - (intval($chars[++$idx]-128) << 12) + - (intval($chars[++$idx]-128) << 6) + - (intval($chars[++$idx]-128) << 0); - } - else if (($chars[$idx] >= 224) && ($chars[$idx] <= 239)){ // 3 bytes - $utf = (intval($chars[$idx]-224) << 12) + - (intval($chars[++$idx]-128) << 6) + - (intval($chars[++$idx]-128) << 0); - } - else if (($chars[$idx] >= 192) && ($chars[$idx] <= 223)){ // 2 bytes - $utf = (intval($chars[$idx]-192) << 6) + - (intval($chars[++$idx]-128) << 0); - } - else{ // 1 byte - $utf = $chars[$idx]; - } - if(array_key_exists($utf,$this->utfMap)) - return chr($this->utfMap[$utf]); - else - return "?"; - } - -} - -?> |