+ {% block content %} + {{ content|raw }} + {% endblock content %} + | +
diff --git a/.gitignore b/.gitignore
index 5101aeaf..82bff889 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,7 @@
!/pages
!/images
!/themes
+!/Dockerfile
+!/docker-compose.yml
+!/dev/plugins
/themes/learn4
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 00000000..c6b0b266
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,82 @@
+FROM php:7.4-apache
+LABEL maintainer="Andy Miller
Cet e-mail de test est basé sur la configuration suivante :
%1$s" + EMAIL_FOOTER: "GetGrav.org" + +hr: + PLUGIN_EMAIL: + EMAIL_NOT_CONFIGURED: "Email nije konfiguriran" + PLEASE_CONFIGURE_A_TO_ADDRESS: "Konfigurirajte 'za' ('to') adresu u postavkama Email dodatka ili u obrascu" + PLEASE_CONFIGURE_A_FROM_ADDRESS: "Konfigurirajte 'od' ('from') adresu u postavkama Email dodatka ili u obrascu" + +it: + PLUGIN_EMAIL: + PLEASE_CONFIGURE_A_TO_ADDRESS: "Per favore, configura l'indirizzo di destinazione ('to') nella configurazione del Plugin Email, oppure direttamente nella form." + PLEASE_CONFIGURE_A_FROM_ADDRESS: "Per favore, configura l'indirizzo di provenienza ('from') nella configurazione del Plugin Email, oppure direttamente nella form" + +ro: + PLUGIN_EMAIL: + EMAIL_NOT_CONFIGURED: "Adresa de email nu este configurată" + PLEASE_CONFIGURE_A_TO_ADDRESS: "Vă rugam setaÈ›i o adresă 'către' în setările modulului Email sau în formular" + PLEASE_CONFIGURE_A_FROM_ADDRESS: "Vă rugam setaÈ›i o adresă 'de la' în setările modulului Email sau în formular" + +ru: + PLUGIN_EMAIL: + MAIL_ENGINE: "ÐŸÐ¾Ñ‡Ñ‚Ð¾Ð²Ð°Ñ ÑиÑтема" + MAIL_ENGINE_DISABLED: "Отключена" + CONTENT_TYPE: "Тип контента" + CONTENT_TYPE_PLAIN_TEXT: "ПроÑтой текÑÑ‚" + CHARSET: "Кодировка" + CHARSET_PLACEHOLDER: "По умолчанию UTF-8" + EMAIL_DEFAULTS: "Email наÑтройки по умолчанию" + EMAIL_FORM: "Почта отправителÑ" + EMAIL_FORM_PLACEHOLDER: "Email Ð°Ð´Ñ€ÐµÑ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÐµÐ»Ñ Ð¿Ð¾ умолчанию" + EMAIL_FROM_NAME: "Ð˜Ð¼Ñ Ð¿Ð¾Ñ‡Ñ‚Ñ‹ отправителÑ" + EMAIL_FROM_NAME_PLACEHOLDER: "Email Ð¸Ð¼Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÐµÐ»Ñ Ð¿Ð¾ умолчанию" + EMAIL_TO: "Почта получателÑ" + EMAIL_TO_PLACEHOLDER: "Email Ð°Ð´Ñ€ÐµÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾ умолчанию" + EMAIL_TO_NAME: "Ð˜Ð¼Ñ Ð¿Ð¾Ñ‡Ñ‚Ñ‹ получателÑ" + EMAIL_TO_NAME_PLACEHOLDER: "Email Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾ умолчанию" + EMAIL_CC: "Почта CC" + EMAIL_CC_PLACEHOLDER: "Email CC Ð°Ð´Ñ€ÐµÑ Ð¿Ð¾ умолчанию" + EMAIL_CC_NAME: "Ð˜Ð¼Ñ Ð¿Ð¾Ñ‡Ñ‚Ñ‹ CC" + EMAIL_CC_NAME_PLACEHOLDER: "Email CC Ð¸Ð¼Ñ Ð¿Ð¾ умолчанию" + EMAIL_BCC: "Почта BCC" + EMAIL_BCC_PLACEHOLDER: "Email BCC Ð°Ð´Ñ€ÐµÑ Ð¿Ð¾ умолчанию" + EMAIL_REPLY_TO: "Почта Ð´Ð»Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ð¾Ð²" + EMAIL_REPLY_TO_PLACEHOLDER: "Email Ð´Ð»Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ð¾Ð² Ð°Ð´Ñ€ÐµÑ Ð¿Ð¾ умолчанию" + EMAIL_REPLY_TO_NAME: "Ð˜Ð¼Ñ Ð¿Ð¾Ñ‡Ñ‚Ñ‹ Ð´Ð»Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ð¾Ð²" + EMAIL_REPLY_TO_NAME_PLACEHOLDER: "Email Ð´Ð»Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ð¾Ð² Ð¸Ð¼Ñ Ð¿Ð¾ умолчанию" + EMAIL_BODY: "Тело ÑообщениÑ" + EMAIL_BODY_PLACEHOLDER: "По умолчанию иÑпользуетÑÑ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° вÑех полей формы" + SMTP_CONFIGURATION: "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ SMTP" + SMTP_SERVER: "SMTP Ñервер" + SMTP_SERVER_PLACEHOLDER: "e.g. smtp.google.com" + SMTP_PORT: "SMTP порт" + SMTP_PORT_PLACEHOLDER: "По умолчанию 25 (plaintext) / 587 (encrypted)" + SMTP_ENCRYPTION: "SMTP шифрование" + SMTP_ENCRYPTION_NONE: "Ðет" + SMTP_LOGIN_NAME: "SMTP логин" + SMTP_PASSWORD: "SMTP пароль" + SENDMAIL_CONFIGURATION: "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Sendmail" + PATH_TO_SENDMAIL: "Путь к sendmail" + QUEUE_TITLE: "Очередь Email" + QUEUE_DESC: "Когда вы включаете очередь email, ÑÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð° не отправлÑетÑÑ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾, а отправлÑетÑÑ Ð² очередь, затем планировщик Grav обрабатывает очередь и на оÑнове наÑтроенной чаÑтоты фактичеÑки отправлÑет Ñлектронную почту. Ðто гарантирует, что Grav не ждет Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº Ñлектронной почте." + QUEUE_ENABLED: "Включено" + QUEUE_FLUSH_FREQUENCY: "ЧаÑтота обраблтки" + QUEUE_FLUSH_FREQUENCY_HELP: "ИÑпользовать формат 'cron'" + QUEUE_FLUSH_MSG_LIMIT: "КоличеÑтво Ñообщений на задачу" + QUEUE_FLUSH_MSG_LIMIT_APPEND: "Сообщений" + QUEUE_FLUSH_TIME_LIMIT: "Ограничение времени обработки" + QUEUE_FLUSH_TIME_LIMIT_APPEND: "Секунд" + ADVANCED: "РаÑширенные" + DEBUG: "Отладка" + EMAIL_NOT_CONFIGURED: "ÐÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð° не наÑтроена" + PLEASE_CONFIGURE_A_TO_ADDRESS: "ПожалуйÑта наÑтройте Ð°Ð´Ñ€ÐµÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð°Ñ‚ÐµÐ»Ñ ('to') в наÑтройках плагина Email Plugin, или на форме" + PLEASE_CONFIGURE_A_FROM_ADDRESS: "ПожалуйÑта наÑтройте Ð°Ð´Ñ€ÐµÑ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÐµÐ»Ñ ('from') в наÑтройках плагина Email Plugin, или на форме" + TEST_EMAIL_BODY: "
Ðто теÑтовое пиÑьмо отправлено на оÑнове Ñледующей конфигурации:
%1$s" + EMAIL_FOOTER: "GetGrav.org" + +uk: + PLUGIN_EMAIL: + EMAIL_NOT_CONFIGURED: "Електронна пошта не налаштована" + PLEASE_CONFIGURE_A_TO_ADDRESS: "Будь лаÑка налаштуйте адреÑу одержувача ('to') в налаштуваннÑÑ… плагіна Email Plugin, або на формі" + PLEASE_CONFIGURE_A_FROM_ADDRESS: "Будь лаÑка налаштуйте адреÑу відправника ('from') в налаштуваннÑÑ… плагіна Email Plugin, або на формі" + TEST_EMAIL_BODY: "
Це теÑтовий лиÑÑ‚ відправлено на оÑнові такої конфігурації:
%1$s" + EMAIL_FOOTER: "GetGrav.org" diff --git a/dev/plugins/email/templates/email/base.html.twig b/dev/plugins/email/templates/email/base.html.twig new file mode 100644 index 00000000..0dd827fc --- /dev/null +++ b/dev/plugins/email/templates/email/base.html.twig @@ -0,0 +1,214 @@ + + + + + +
+ |
+
+
+
|
+ + |
+ |
+
+
+
|
+ + |
Here is the message itself', 'text/html') + + // Optionally add any attachments + ->attach(Swift_Attachment::fromPath('my-document.pdf')) + ; + +Message Basics +-------------- + +A message is a container for anything you want to send to somebody else. There +are several basic aspects of a message that you should know. + +An e-mail message is made up of several relatively simple entities that are +combined in different ways to achieve different results. All of these entities +have the same fundamental outline but serve a different purpose. The Message +itself can be defined as a MIME entity, an Attachment is a MIME entity, all +MIME parts are MIME entities -- and so on! + +The basic units of each MIME entity -- be it the Message itself, or an +Attachment -- are its Headers and its body: + +.. code-block:: text + + Header-Name: A header value + Other-Header: Another value + + The body content itself + +The Headers of a MIME entity, and its body must conform to some strict +standards defined by various RFC documents. Swift Mailer ensures that these +specifications are followed by using various types of object, including +Encoders and different Header types to generate the entity. + +The Structure of a Message +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Of all of the MIME entities, a message -- ``Swift_Message`` is the largest and +most complex. It has many properties that can be updated and it can contain +other MIME entities -- attachments for example -- nested inside it. + +A Message has a lot of different Headers which are there to present information +about the message to the recipients' mail client. Most of these headers will be +familiar to the majority of users, but we'll list the basic ones. Although it's +possible to work directly with the Headers of a Message (or other MIME entity), +the standard Headers have accessor methods provided to abstract away the +complex details for you. For example, although the Date on a message is written +with a strict format, you only need to pass a DateTimeInterface instance to +``setDate()``. + ++-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ +| Header | Description | Accessors | ++===============================+====================================================================================================================================+=============================================+ +| ``Message-ID`` | Identifies this message with a unique ID, usually containing the domain name and time generated | ``getId()`` / ``setId()`` | ++-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ +| ``Return-Path`` | Specifies where bounces should go (Swift Mailer reads this for other uses) | ``getReturnPath()`` / ``setReturnPath()`` | ++-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ +| ``From`` | Specifies the address of the person who the message is from. This can be multiple addresses if multiple people wrote the message. | ``getFrom()`` / ``setFrom()`` | ++-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ +| ``Sender`` | Specifies the address of the person who physically sent the message (higher precedence than ``From:``) | ``getSender()`` / ``setSender()`` | ++-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ +| ``To`` | Specifies the addresses of the intended recipients | ``getTo()`` / ``setTo()`` | ++-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ +| ``Cc`` | Specifies the addresses of recipients who will be copied in on the message | ``getCc()`` / ``setCc()`` | ++-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ +| ``Bcc`` | Specifies the addresses of recipients who the message will be blind-copied to. Other recipients will not be aware of these copies. | ``getBcc()`` / ``setBcc()`` | ++-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ +| ``Reply-To`` | Specifies the address where replies are sent to | ``getReplyTo()`` / ``setReplyTo()`` | ++-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ +| ``Subject`` | Specifies the subject line that is displayed in the recipients' mail client | ``getSubject()`` / ``setSubject()`` | ++-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ +| ``Date`` | Specifies the date at which the message was sent | ``getDate()`` / ``setDate()`` | ++-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ +| ``Content-Type`` | Specifies the format of the message (usually ``text/plain`` or ``text/html``) | ``getContentType()`` / ``setContentType()`` | ++-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ +| ``Content-Transfer-Encoding`` | Specifies the encoding scheme in the message | ``getEncoder()`` / ``setEncoder()`` | ++-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ + +Working with a Message Object +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Although there are a lot of available methods on a message object, you only +need to make use of a small subset of them. Usually you'll use +``setSubject()``, ``setTo()`` and ``setFrom()`` before setting the body of your +message with ``setBody()``:: + + $message = new Swift_Message(); + $message->setSubject('My subject'); + +All MIME entities (including a message) have a ``toString()`` method that you +can call if you want to take a look at what is going to be sent. For example, +if you ``echo $message->toString();`` you would see something like this: + +.. code-block:: text + + Message-ID: <1230173678.4952f5eeb1432@swift.generated> + Date: Thu, 25 Dec 2008 13:54:38 +1100 + Subject: Example subject + From: Chris Corbyn
+ * setNameAddresses(array(
+ * 'chris@swiftmailer.org' => 'Chris Corbyn',
+ * 'mark@swiftmailer.org' //No associated personal name
+ * ));
+ * ?>
+ *
+ *
+ * @see __construct()
+ * @see setAddresses()
+ * @see setValue()
+ *
+ * @param string|string[] $mailboxes
+ *
+ * @throws Swift_RfcComplianceException
+ */
+ public function setNameAddresses($mailboxes)
+ {
+ $this->mailboxes = $this->normalizeMailboxes((array) $mailboxes);
+ $this->setCachedValue(null); //Clear any cached value
+ }
+
+ /**
+ * Get the full mailbox list of this Header as an array of valid RFC 2822 strings.
+ *
+ * Example:
+ *
+ * 'Chris Corbyn',
+ * 'mark@swiftmailer.org' => 'Mark Corbyn')
+ * );
+ * print_r($header->getNameAddressStrings());
+ * // array (
+ * // 0 => Chris Corbyn ,
+ * // 1 => Mark Corbyn
+ * // )
+ * ?>
+ *
+ *
+ * @see getNameAddresses()
+ * @see toString()
+ *
+ * @throws Swift_RfcComplianceException
+ *
+ * @return string[]
+ */
+ public function getNameAddressStrings()
+ {
+ return $this->createNameAddressStrings($this->getNameAddresses());
+ }
+
+ /**
+ * Get all mailboxes in this Header as key=>value pairs.
+ *
+ * The key is the address and the value is the name (or null if none set).
+ * Example:
+ *
+ * 'Chris Corbyn',
+ * 'mark@swiftmailer.org' => 'Mark Corbyn')
+ * );
+ * print_r($header->getNameAddresses());
+ * // array (
+ * // chris@swiftmailer.org => Chris Corbyn,
+ * // mark@swiftmailer.org => Mark Corbyn
+ * // )
+ * ?>
+ *
+ *
+ * @see getAddresses()
+ * @see getNameAddressStrings()
+ *
+ * @return string[]
+ */
+ public function getNameAddresses()
+ {
+ return $this->mailboxes;
+ }
+
+ /**
+ * Makes this Header represent a list of plain email addresses with no names.
+ *
+ * Example:
+ *
+ * setAddresses(
+ * array('one@domain.tld', 'two@domain.tld', 'three@domain.tld')
+ * );
+ * ?>
+ *
+ *
+ * @see setNameAddresses()
+ * @see setValue()
+ *
+ * @param string[] $addresses
+ *
+ * @throws Swift_RfcComplianceException
+ */
+ public function setAddresses($addresses)
+ {
+ $this->setNameAddresses(array_values((array) $addresses));
+ }
+
+ /**
+ * Get all email addresses in this Header.
+ *
+ * @see getNameAddresses()
+ *
+ * @return string[]
+ */
+ public function getAddresses()
+ {
+ return array_keys($this->mailboxes);
+ }
+
+ /**
+ * Remove one or more addresses from this Header.
+ *
+ * @param string|string[] $addresses
+ */
+ public function removeAddresses($addresses)
+ {
+ $this->setCachedValue(null);
+ foreach ((array) $addresses as $address) {
+ unset($this->mailboxes[$address]);
+ }
+ }
+
+ /**
+ * Get the string value of the body in this Header.
+ *
+ * This is not necessarily RFC 2822 compliant since folding white space will
+ * not be added at this stage (see {@link toString()} for that).
+ *
+ * @see toString()
+ *
+ * @throws Swift_RfcComplianceException
+ *
+ * @return string
+ */
+ public function getFieldBody()
+ {
+ // Compute the string value of the header only if needed
+ if (null === $this->getCachedValue()) {
+ $this->setCachedValue($this->createMailboxListString($this->mailboxes));
+ }
+
+ return $this->getCachedValue();
+ }
+
+ /**
+ * Normalizes a user-input list of mailboxes into consistent key=>value pairs.
+ *
+ * @param string[] $mailboxes
+ *
+ * @return string[]
+ */
+ protected function normalizeMailboxes(array $mailboxes)
+ {
+ $actualMailboxes = [];
+
+ foreach ($mailboxes as $key => $value) {
+ if (\is_string($key)) {
+ //key is email addr
+ $address = $key;
+ $name = $value;
+ } else {
+ $address = $value;
+ $name = null;
+ }
+ $this->assertValidAddress($address);
+ $actualMailboxes[$address] = $name;
+ }
+
+ return $actualMailboxes;
+ }
+
+ /**
+ * Produces a compliant, formatted display-name based on the string given.
+ *
+ * @param string $displayName as displayed
+ * @param bool $shorten the first line to make remove for header name
+ *
+ * @return string
+ */
+ protected function createDisplayNameString($displayName, $shorten = false)
+ {
+ return $this->createPhrase($this, $displayName, $this->getCharset(), $this->getEncoder(), $shorten);
+ }
+
+ /**
+ * Creates a string form of all the mailboxes in the passed array.
+ *
+ * @param string[] $mailboxes
+ *
+ * @throws Swift_RfcComplianceException
+ *
+ * @return string
+ */
+ protected function createMailboxListString(array $mailboxes)
+ {
+ return implode(', ', $this->createNameAddressStrings($mailboxes));
+ }
+
+ /**
+ * Redefine the encoding requirements for mailboxes.
+ *
+ * All "specials" must be encoded as the full header value will not be quoted
+ *
+ * @see RFC 2822 3.2.1
+ *
+ * @param string $token
+ *
+ * @return bool
+ */
+ protected function tokenNeedsEncoding($token)
+ {
+ return preg_match('/[()<>\[\]:;@\,."]/', $token) || parent::tokenNeedsEncoding($token);
+ }
+
+ /**
+ * Return an array of strings conforming the the name-addr spec of RFC 2822.
+ *
+ * @param string[] $mailboxes
+ *
+ * @return string[]
+ */
+ private function createNameAddressStrings(array $mailboxes)
+ {
+ $strings = [];
+
+ foreach ($mailboxes as $email => $name) {
+ $mailboxStr = $this->addressEncoder->encodeString($email);
+ if (null !== $name) {
+ $nameStr = $this->createDisplayNameString($name, empty($strings));
+ $mailboxStr = $nameStr.' <'.$mailboxStr.'>';
+ }
+ $strings[] = $mailboxStr;
+ }
+
+ return $strings;
+ }
+
+ /**
+ * Throws an Exception if the address passed does not comply with RFC 2822.
+ *
+ * @param string $address
+ *
+ * @throws Swift_RfcComplianceException if invalid
+ */
+ private function assertValidAddress($address)
+ {
+ if (!$this->emailValidator->isValid($address, new RFCValidation())) {
+ throw new Swift_RfcComplianceException('Address in mailbox given ['.$address.'] does not comply with RFC 2822, 3.6.2.');
+ }
+ }
+}
diff --git a/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php
new file mode 100644
index 00000000..fafb5bae
--- /dev/null
+++ b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php
@@ -0,0 +1,135 @@
+
+ *
+ * @deprecated since SwiftMailer 6.1.0; use Swift_Signers_DKIMSigner instead.
+ */
+class Swift_Mime_Headers_OpenDKIMHeader implements Swift_Mime_Header
+{
+ /**
+ * The value of this Header.
+ *
+ * @var string
+ */
+ private $value;
+
+ /**
+ * The name of this Header.
+ *
+ * @var string
+ */
+ private $fieldName;
+
+ /**
+ * @param string $name
+ */
+ public function __construct($name)
+ {
+ $this->fieldName = $name;
+ }
+
+ /**
+ * Get the type of Header that this instance represents.
+ *
+ * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX
+ * @see TYPE_DATE, TYPE_ID, TYPE_PATH
+ *
+ * @return int
+ */
+ public function getFieldType()
+ {
+ return self::TYPE_TEXT;
+ }
+
+ /**
+ * Set the model for the field body.
+ *
+ * This method takes a string for the field value.
+ *
+ * @param string $model
+ */
+ public function setFieldBodyModel($model)
+ {
+ $this->setValue($model);
+ }
+
+ /**
+ * Get the model for the field body.
+ *
+ * This method returns a string.
+ *
+ * @return string
+ */
+ public function getFieldBodyModel()
+ {
+ return $this->getValue();
+ }
+
+ /**
+ * Get the (unencoded) value of this header.
+ *
+ * @return string
+ */
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+ /**
+ * Set the (unencoded) value of this header.
+ *
+ * @param string $value
+ */
+ public function setValue($value)
+ {
+ $this->value = $value;
+ }
+
+ /**
+ * Get the value of this header prepared for rendering.
+ *
+ * @return string
+ */
+ public function getFieldBody()
+ {
+ return $this->value;
+ }
+
+ /**
+ * Get this Header rendered as a RFC 2822 compliant string.
+ *
+ * @return string
+ */
+ public function toString()
+ {
+ return $this->fieldName.': '.$this->value."\r\n";
+ }
+
+ /**
+ * Set the Header FieldName.
+ *
+ * @see Swift_Mime_Header::getFieldName()
+ */
+ public function getFieldName()
+ {
+ return $this->fieldName;
+ }
+
+ /**
+ * Ignored.
+ */
+ public function setCharset($charset)
+ {
+ }
+}
diff --git a/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php
new file mode 100644
index 00000000..47c15e6c
--- /dev/null
+++ b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php
@@ -0,0 +1,255 @@
+paramEncoder = $paramEncoder;
+ }
+
+ /**
+ * Get the type of Header that this instance represents.
+ *
+ * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX
+ * @see TYPE_DATE, TYPE_ID, TYPE_PATH
+ *
+ * @return int
+ */
+ public function getFieldType()
+ {
+ return self::TYPE_PARAMETERIZED;
+ }
+
+ /**
+ * Set the character set used in this Header.
+ *
+ * @param string $charset
+ */
+ public function setCharset($charset)
+ {
+ parent::setCharset($charset);
+ if (isset($this->paramEncoder)) {
+ $this->paramEncoder->charsetChanged($charset);
+ }
+ }
+
+ /**
+ * Set the value of $parameter.
+ *
+ * @param string $parameter
+ * @param string $value
+ */
+ public function setParameter($parameter, $value)
+ {
+ $this->setParameters(array_merge($this->getParameters(), [$parameter => $value]));
+ }
+
+ /**
+ * Get the value of $parameter.
+ *
+ * @param string $parameter
+ *
+ * @return string
+ */
+ public function getParameter($parameter)
+ {
+ $params = $this->getParameters();
+
+ return $params[$parameter] ?? null;
+ }
+
+ /**
+ * Set an associative array of parameter names mapped to values.
+ *
+ * @param string[] $parameters
+ */
+ public function setParameters(array $parameters)
+ {
+ $this->clearCachedValueIf($this->params != $parameters);
+ $this->params = $parameters;
+ }
+
+ /**
+ * Returns an associative array of parameter names mapped to values.
+ *
+ * @return string[]
+ */
+ public function getParameters()
+ {
+ return $this->params;
+ }
+
+ /**
+ * Get the value of this header prepared for rendering.
+ *
+ * @return string
+ */
+ public function getFieldBody() //TODO: Check caching here
+ {
+ $body = parent::getFieldBody();
+ foreach ($this->params as $name => $value) {
+ if (null !== $value) {
+ // Add the parameter
+ $body .= '; '.$this->createParameter($name, $value);
+ }
+ }
+
+ return $body;
+ }
+
+ /**
+ * Generate a list of all tokens in the final header.
+ *
+ * This doesn't need to be overridden in theory, but it is for implementation
+ * reasons to prevent potential breakage of attributes.
+ *
+ * @param string $string The string to tokenize
+ *
+ * @return array An array of tokens as strings
+ */
+ protected function toTokens($string = null)
+ {
+ $tokens = parent::toTokens(parent::getFieldBody());
+
+ // Try creating any parameters
+ foreach ($this->params as $name => $value) {
+ if (null !== $value) {
+ // Add the semi-colon separator
+ $tokens[\count($tokens) - 1] .= ';';
+ $tokens = array_merge($tokens, $this->generateTokenLines(
+ ' '.$this->createParameter($name, $value)
+ ));
+ }
+ }
+
+ return $tokens;
+ }
+
+ /**
+ * Render a RFC 2047 compliant header parameter from the $name and $value.
+ *
+ * @param string $name
+ * @param string $value
+ *
+ * @return string
+ */
+ private function createParameter($name, $value)
+ {
+ $origValue = $value;
+
+ $encoded = false;
+ // Allow room for parameter name, indices, "=" and DQUOTEs
+ $maxValueLength = $this->getMaxLineLength() - \strlen($name.'=*N"";') - 1;
+ $firstLineOffset = 0;
+
+ // If it's not already a valid parameter value...
+ if (!preg_match('/^'.self::TOKEN_REGEX.'$/D', $value)) {
+ // TODO: text, or something else??
+ // ... and it's not ascii
+ if (!preg_match('/^[\x00-\x08\x0B\x0C\x0E-\x7F]*$/D', $value)) {
+ $encoded = true;
+ // Allow space for the indices, charset and language
+ $maxValueLength = $this->getMaxLineLength() - \strlen($name.'*N*="";') - 1;
+ $firstLineOffset = \strlen(
+ $this->getCharset()."'".$this->getLanguage()."'"
+ );
+ }
+ }
+
+ // Encode if we need to
+ if ($encoded || \strlen($value) > $maxValueLength) {
+ if (isset($this->paramEncoder)) {
+ $value = $this->paramEncoder->encodeString(
+ $origValue, $firstLineOffset, $maxValueLength, $this->getCharset()
+ );
+ } else {
+ // We have to go against RFC 2183/2231 in some areas for interoperability
+ $value = $this->getTokenAsEncodedWord($origValue);
+ $encoded = false;
+ }
+ }
+
+ $valueLines = isset($this->paramEncoder) ? explode("\r\n", $value) : [$value];
+
+ // Need to add indices
+ if (\count($valueLines) > 1) {
+ $paramLines = [];
+ foreach ($valueLines as $i => $line) {
+ $paramLines[] = $name.'*'.$i.
+ $this->getEndOfParameterValue($line, true, 0 == $i);
+ }
+
+ return implode(";\r\n ", $paramLines);
+ } else {
+ return $name.$this->getEndOfParameterValue(
+ $valueLines[0], $encoded, true
+ );
+ }
+ }
+
+ /**
+ * Returns the parameter value from the "=" and beyond.
+ *
+ * @param string $value to append
+ * @param bool $encoded
+ * @param bool $firstLine
+ *
+ * @return string
+ */
+ private function getEndOfParameterValue($value, $encoded = false, $firstLine = false)
+ {
+ if (!preg_match('/^'.self::TOKEN_REGEX.'$/D', $value)) {
+ $value = '"'.$value.'"';
+ }
+ $prepend = '=';
+ if ($encoded) {
+ $prepend = '*=';
+ if ($firstLine) {
+ $prepend = '*='.$this->getCharset()."'".$this->getLanguage().
+ "'";
+ }
+ }
+
+ return $prepend.$value;
+ }
+}
diff --git a/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php
new file mode 100644
index 00000000..81b421ee
--- /dev/null
+++ b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php
@@ -0,0 +1,153 @@
+setFieldName($name);
+ $this->emailValidator = $emailValidator;
+ $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder();
+ }
+
+ /**
+ * Get the type of Header that this instance represents.
+ *
+ * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX
+ * @see TYPE_DATE, TYPE_ID, TYPE_PATH
+ *
+ * @return int
+ */
+ public function getFieldType()
+ {
+ return self::TYPE_PATH;
+ }
+
+ /**
+ * Set the model for the field body.
+ * This method takes a string for an address.
+ *
+ * @param string $model
+ *
+ * @throws Swift_RfcComplianceException
+ */
+ public function setFieldBodyModel($model)
+ {
+ $this->setAddress($model);
+ }
+
+ /**
+ * Get the model for the field body.
+ * This method returns a string email address.
+ *
+ * @return mixed
+ */
+ public function getFieldBodyModel()
+ {
+ return $this->getAddress();
+ }
+
+ /**
+ * Set the Address which should appear in this Header.
+ *
+ * @param string $address
+ *
+ * @throws Swift_RfcComplianceException
+ */
+ public function setAddress($address)
+ {
+ if (null === $address) {
+ $this->address = null;
+ } elseif ('' == $address) {
+ $this->address = '';
+ } else {
+ $this->assertValidAddress($address);
+ $this->address = $address;
+ }
+ $this->setCachedValue(null);
+ }
+
+ /**
+ * Get the address which is used in this Header (if any).
+ *
+ * Null is returned if no address is set.
+ *
+ * @return string
+ */
+ public function getAddress()
+ {
+ return $this->address;
+ }
+
+ /**
+ * Get the string value of the body in this Header.
+ *
+ * This is not necessarily RFC 2822 compliant since folding white space will
+ * not be added at this stage (see {@link toString()} for that).
+ *
+ * @see toString()
+ *
+ * @return string
+ */
+ public function getFieldBody()
+ {
+ if (!$this->getCachedValue()) {
+ if (isset($this->address)) {
+ $address = $this->addressEncoder->encodeString($this->address);
+ $this->setCachedValue('<'.$address.'>');
+ }
+ }
+
+ return $this->getCachedValue();
+ }
+
+ /**
+ * Throws an Exception if the address passed does not comply with RFC 2822.
+ *
+ * @param string $address
+ *
+ * @throws Swift_RfcComplianceException If address is invalid
+ */
+ private function assertValidAddress($address)
+ {
+ if (!$this->emailValidator->isValid($address, new RFCValidation())) {
+ throw new Swift_RfcComplianceException('Address set in PathHeader does not comply with addr-spec of RFC 2822.');
+ }
+ }
+}
diff --git a/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php
new file mode 100644
index 00000000..64f160de
--- /dev/null
+++ b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php
@@ -0,0 +1,109 @@
+setFieldName($name);
+ $this->setEncoder($encoder);
+ }
+
+ /**
+ * Get the type of Header that this instance represents.
+ *
+ * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX
+ * @see TYPE_DATE, TYPE_ID, TYPE_PATH
+ *
+ * @return int
+ */
+ public function getFieldType()
+ {
+ return self::TYPE_TEXT;
+ }
+
+ /**
+ * Set the model for the field body.
+ *
+ * This method takes a string for the field value.
+ *
+ * @param string $model
+ */
+ public function setFieldBodyModel($model)
+ {
+ $this->setValue($model);
+ }
+
+ /**
+ * Get the model for the field body.
+ *
+ * This method returns a string.
+ *
+ * @return string
+ */
+ public function getFieldBodyModel()
+ {
+ return $this->getValue();
+ }
+
+ /**
+ * Get the (unencoded) value of this header.
+ *
+ * @return string
+ */
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+ /**
+ * Set the (unencoded) value of this header.
+ *
+ * @param string $value
+ */
+ public function setValue($value)
+ {
+ $this->clearCachedValueIf($this->value != $value);
+ $this->value = $value;
+ }
+
+ /**
+ * Get the value of this header prepared for rendering.
+ *
+ * @return string
+ */
+ public function getFieldBody()
+ {
+ if (!$this->getCachedValue()) {
+ $this->setCachedValue(
+ $this->encodeWords($this, $this->value)
+ );
+ }
+
+ return $this->getCachedValue();
+ }
+}
diff --git a/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/IdGenerator.php b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/IdGenerator.php
new file mode 100644
index 00000000..3ce35f27
--- /dev/null
+++ b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/IdGenerator.php
@@ -0,0 +1,54 @@
+idRight = $idRight;
+ }
+
+ /**
+ * Returns the right-hand side of the "@" used in all generated IDs.
+ *
+ * @return string
+ */
+ public function getIdRight()
+ {
+ return $this->idRight;
+ }
+
+ /**
+ * Sets the right-hand side of the "@" to use in all generated IDs.
+ *
+ * @param string $idRight
+ */
+ public function setIdRight($idRight)
+ {
+ $this->idRight = $idRight;
+ }
+
+ /**
+ * @return string
+ */
+ public function generateId()
+ {
+ // 32 hex values for the left part
+ return bin2hex(random_bytes(16)).'@'.$this->idRight;
+ }
+}
diff --git a/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/MimePart.php b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/MimePart.php
new file mode 100644
index 00000000..d0b2e658
--- /dev/null
+++ b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/MimePart.php
@@ -0,0 +1,199 @@
+setContentType('text/plain');
+ if (null !== $charset) {
+ $this->setCharset($charset);
+ }
+ }
+
+ /**
+ * Set the body of this entity, either as a string, or as an instance of
+ * {@link Swift_OutputByteStream}.
+ *
+ * @param mixed $body
+ * @param string $contentType optional
+ * @param string $charset optional
+ *
+ * @return $this
+ */
+ public function setBody($body, $contentType = null, $charset = null)
+ {
+ if (isset($charset)) {
+ $this->setCharset($charset);
+ }
+ $body = $this->convertString($body);
+
+ parent::setBody($body, $contentType);
+
+ return $this;
+ }
+
+ /**
+ * Get the character set of this entity.
+ *
+ * @return string
+ */
+ public function getCharset()
+ {
+ return $this->getHeaderParameter('Content-Type', 'charset');
+ }
+
+ /**
+ * Set the character set of this entity.
+ *
+ * @param string $charset
+ *
+ * @return $this
+ */
+ public function setCharset($charset)
+ {
+ $this->setHeaderParameter('Content-Type', 'charset', $charset);
+ if ($charset !== $this->userCharset) {
+ $this->clearCache();
+ }
+ $this->userCharset = $charset;
+ parent::charsetChanged($charset);
+
+ return $this;
+ }
+
+ /**
+ * Get the format of this entity (i.e. flowed or fixed).
+ *
+ * @return string
+ */
+ public function getFormat()
+ {
+ return $this->getHeaderParameter('Content-Type', 'format');
+ }
+
+ /**
+ * Set the format of this entity (flowed or fixed).
+ *
+ * @param string $format
+ *
+ * @return $this
+ */
+ public function setFormat($format)
+ {
+ $this->setHeaderParameter('Content-Type', 'format', $format);
+ $this->userFormat = $format;
+
+ return $this;
+ }
+
+ /**
+ * Test if delsp is being used for this entity.
+ *
+ * @return bool
+ */
+ public function getDelSp()
+ {
+ return 'yes' === $this->getHeaderParameter('Content-Type', 'delsp');
+ }
+
+ /**
+ * Turn delsp on or off for this entity.
+ *
+ * @param bool $delsp
+ *
+ * @return $this
+ */
+ public function setDelSp($delsp = true)
+ {
+ $this->setHeaderParameter('Content-Type', 'delsp', $delsp ? 'yes' : null);
+ $this->userDelSp = $delsp;
+
+ return $this;
+ }
+
+ /**
+ * Get the nesting level of this entity.
+ *
+ * @see LEVEL_TOP, LEVEL_ALTERNATIVE, LEVEL_MIXED, LEVEL_RELATED
+ *
+ * @return int
+ */
+ public function getNestingLevel()
+ {
+ return $this->nestingLevel;
+ }
+
+ /**
+ * Receive notification that the charset has changed on this document, or a
+ * parent document.
+ *
+ * @param string $charset
+ */
+ public function charsetChanged($charset)
+ {
+ $this->setCharset($charset);
+ }
+
+ /** Fix the content-type and encoding of this entity */
+ protected function fixHeaders()
+ {
+ parent::fixHeaders();
+ if (\count($this->getChildren())) {
+ $this->setHeaderParameter('Content-Type', 'charset', null);
+ $this->setHeaderParameter('Content-Type', 'format', null);
+ $this->setHeaderParameter('Content-Type', 'delsp', null);
+ } else {
+ $this->setCharset($this->userCharset);
+ $this->setFormat($this->userFormat);
+ $this->setDelSp($this->userDelSp);
+ }
+ }
+
+ /** Set the nesting level of this entity */
+ protected function setNestingLevel($level)
+ {
+ $this->nestingLevel = $level;
+ }
+
+ /** Encode charset when charset is not utf-8 */
+ protected function convertString($string)
+ {
+ $charset = strtolower($this->getCharset() ?? '');
+ if (!\in_array($charset, ['utf-8', 'iso-8859-1', 'iso-8859-15', ''])) {
+ return mb_convert_encoding($string, $charset, 'utf-8');
+ }
+
+ return $string;
+ }
+}
diff --git a/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php
new file mode 100644
index 00000000..ab3ce6b1
--- /dev/null
+++ b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php
@@ -0,0 +1,195 @@
+encoder = $encoder;
+ $this->paramEncoder = $paramEncoder;
+ $this->emailValidator = $emailValidator;
+ $this->charset = $charset;
+ $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder();
+ }
+
+ /**
+ * Create a new Mailbox Header with a list of $addresses.
+ *
+ * @param string $name
+ * @param array|string|null $addresses
+ *
+ * @return Swift_Mime_Header
+ */
+ public function createMailboxHeader($name, $addresses = null)
+ {
+ $header = new Swift_Mime_Headers_MailboxHeader($name, $this->encoder, $this->emailValidator, $this->addressEncoder);
+ if (isset($addresses)) {
+ $header->setFieldBodyModel($addresses);
+ }
+ $this->setHeaderCharset($header);
+
+ return $header;
+ }
+
+ /**
+ * Create a new Date header using $dateTime.
+ *
+ * @param string $name
+ *
+ * @return Swift_Mime_Header
+ */
+ public function createDateHeader($name, DateTimeInterface $dateTime = null)
+ {
+ $header = new Swift_Mime_Headers_DateHeader($name);
+ if (isset($dateTime)) {
+ $header->setFieldBodyModel($dateTime);
+ }
+ $this->setHeaderCharset($header);
+
+ return $header;
+ }
+
+ /**
+ * Create a new basic text header with $name and $value.
+ *
+ * @param string $name
+ * @param string $value
+ *
+ * @return Swift_Mime_Header
+ */
+ public function createTextHeader($name, $value = null)
+ {
+ $header = new Swift_Mime_Headers_UnstructuredHeader($name, $this->encoder);
+ if (isset($value)) {
+ $header->setFieldBodyModel($value);
+ }
+ $this->setHeaderCharset($header);
+
+ return $header;
+ }
+
+ /**
+ * Create a new ParameterizedHeader with $name, $value and $params.
+ *
+ * @param string $name
+ * @param string $value
+ * @param array $params
+ *
+ * @return Swift_Mime_Headers_ParameterizedHeader
+ */
+ public function createParameterizedHeader($name, $value = null, $params = [])
+ {
+ $header = new Swift_Mime_Headers_ParameterizedHeader($name, $this->encoder, ('content-disposition' == strtolower($name ?? '')) ? $this->paramEncoder : null);
+ if (isset($value)) {
+ $header->setFieldBodyModel($value);
+ }
+ foreach ($params as $k => $v) {
+ $header->setParameter($k, $v);
+ }
+ $this->setHeaderCharset($header);
+
+ return $header;
+ }
+
+ /**
+ * Create a new ID header for Message-ID or Content-ID.
+ *
+ * @param string $name
+ * @param string|array $ids
+ *
+ * @return Swift_Mime_Header
+ */
+ public function createIdHeader($name, $ids = null)
+ {
+ $header = new Swift_Mime_Headers_IdentificationHeader($name, $this->emailValidator);
+ if (isset($ids)) {
+ $header->setFieldBodyModel($ids);
+ }
+ $this->setHeaderCharset($header);
+
+ return $header;
+ }
+
+ /**
+ * Create a new Path header with an address (path) in it.
+ *
+ * @param string $name
+ * @param string $path
+ *
+ * @return Swift_Mime_Header
+ */
+ public function createPathHeader($name, $path = null)
+ {
+ $header = new Swift_Mime_Headers_PathHeader($name, $this->emailValidator);
+ if (isset($path)) {
+ $header->setFieldBodyModel($path);
+ }
+ $this->setHeaderCharset($header);
+
+ return $header;
+ }
+
+ /**
+ * Notify this observer that the entity's charset has changed.
+ *
+ * @param string $charset
+ */
+ public function charsetChanged($charset)
+ {
+ $this->charset = $charset;
+ $this->encoder->charsetChanged($charset);
+ $this->paramEncoder->charsetChanged($charset);
+ }
+
+ /**
+ * Make a deep copy of object.
+ */
+ public function __clone()
+ {
+ $this->encoder = clone $this->encoder;
+ $this->paramEncoder = clone $this->paramEncoder;
+ $this->addressEncoder = clone $this->addressEncoder;
+ }
+
+ /** Apply the charset to the Header */
+ private function setHeaderCharset(Swift_Mime_Header $header)
+ {
+ if (isset($this->charset)) {
+ $header->setCharset($this->charset);
+ }
+ }
+}
diff --git a/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php
new file mode 100644
index 00000000..5195bcf4
--- /dev/null
+++ b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php
@@ -0,0 +1,399 @@
+factory = $factory;
+ if (isset($charset)) {
+ $this->setCharset($charset);
+ }
+ }
+
+ public function newInstance()
+ {
+ return new self($this->factory);
+ }
+
+ /**
+ * Set the charset used by these headers.
+ *
+ * @param string $charset
+ */
+ public function setCharset($charset)
+ {
+ $this->charset = $charset;
+ $this->factory->charsetChanged($charset);
+ $this->notifyHeadersOfCharset($charset);
+ }
+
+ /**
+ * Add a new Mailbox Header with a list of $addresses.
+ *
+ * @param string $name
+ * @param array|string $addresses
+ */
+ public function addMailboxHeader($name, $addresses = null)
+ {
+ $this->storeHeader($name, $this->factory->createMailboxHeader($name, $addresses));
+ }
+
+ /**
+ * Add a new Date header using $dateTime.
+ *
+ * @param string $name
+ */
+ public function addDateHeader($name, DateTimeInterface $dateTime = null)
+ {
+ $this->storeHeader($name, $this->factory->createDateHeader($name, $dateTime));
+ }
+
+ /**
+ * Add a new basic text header with $name and $value.
+ *
+ * @param string $name
+ * @param string $value
+ */
+ public function addTextHeader($name, $value = null)
+ {
+ $this->storeHeader($name, $this->factory->createTextHeader($name, $value));
+ }
+
+ /**
+ * Add a new ParameterizedHeader with $name, $value and $params.
+ *
+ * @param string $name
+ * @param string $value
+ * @param array $params
+ */
+ public function addParameterizedHeader($name, $value = null, $params = [])
+ {
+ $this->storeHeader($name, $this->factory->createParameterizedHeader($name, $value, $params));
+ }
+
+ /**
+ * Add a new ID header for Message-ID or Content-ID.
+ *
+ * @param string $name
+ * @param string|array $ids
+ */
+ public function addIdHeader($name, $ids = null)
+ {
+ $this->storeHeader($name, $this->factory->createIdHeader($name, $ids));
+ }
+
+ /**
+ * Add a new Path header with an address (path) in it.
+ *
+ * @param string $name
+ * @param string $path
+ */
+ public function addPathHeader($name, $path = null)
+ {
+ $this->storeHeader($name, $this->factory->createPathHeader($name, $path));
+ }
+
+ /**
+ * Returns true if at least one header with the given $name exists.
+ *
+ * If multiple headers match, the actual one may be specified by $index.
+ *
+ * @param string $name
+ * @param int $index
+ *
+ * @return bool
+ */
+ public function has($name, $index = 0)
+ {
+ $lowerName = strtolower($name ?? '');
+
+ if (!\array_key_exists($lowerName, $this->headers)) {
+ return false;
+ }
+
+ if (\func_num_args() < 2) {
+ // index was not specified, so we only need to check that there is at least one header value set
+ return (bool) \count($this->headers[$lowerName]);
+ }
+
+ return \array_key_exists($index, $this->headers[$lowerName]);
+ }
+
+ /**
+ * Set a header in the HeaderSet.
+ *
+ * The header may be a previously fetched header via {@link get()} or it may
+ * be one that has been created separately.
+ *
+ * If $index is specified, the header will be inserted into the set at this
+ * offset.
+ *
+ * @param int $index
+ */
+ public function set(Swift_Mime_Header $header, $index = 0)
+ {
+ $this->storeHeader($header->getFieldName(), $header, $index);
+ }
+
+ /**
+ * Get the header with the given $name.
+ *
+ * If multiple headers match, the actual one may be specified by $index.
+ * Returns NULL if none present.
+ *
+ * @param string $name
+ * @param int $index
+ *
+ * @return Swift_Mime_Header|null
+ */
+ public function get($name, $index = 0)
+ {
+ $name = strtolower($name ?? '');
+
+ if (\func_num_args() < 2) {
+ if ($this->has($name)) {
+ $values = array_values($this->headers[$name]);
+
+ return array_shift($values);
+ }
+ } else {
+ if ($this->has($name, $index)) {
+ return $this->headers[$name][$index];
+ }
+ }
+ }
+
+ /**
+ * Get all headers with the given $name.
+ *
+ * @param string $name
+ *
+ * @return array
+ */
+ public function getAll($name = null)
+ {
+ if (!isset($name)) {
+ $headers = [];
+ foreach ($this->headers as $collection) {
+ $headers = array_merge($headers, $collection);
+ }
+
+ return $headers;
+ }
+
+ $lowerName = strtolower($name ?? '');
+ if (!\array_key_exists($lowerName, $this->headers)) {
+ return [];
+ }
+
+ return $this->headers[$lowerName];
+ }
+
+ /**
+ * Return the name of all Headers.
+ *
+ * @return array
+ */
+ public function listAll()
+ {
+ $headers = $this->headers;
+ if ($this->canSort()) {
+ uksort($headers, [$this, 'sortHeaders']);
+ }
+
+ return array_keys($headers);
+ }
+
+ /**
+ * Remove the header with the given $name if it's set.
+ *
+ * If multiple headers match, the actual one may be specified by $index.
+ *
+ * @param string $name
+ * @param int $index
+ */
+ public function remove($name, $index = 0)
+ {
+ $lowerName = strtolower($name ?? '');
+ unset($this->headers[$lowerName][$index]);
+ }
+
+ /**
+ * Remove all headers with the given $name.
+ *
+ * @param string $name
+ */
+ public function removeAll($name)
+ {
+ $lowerName = strtolower($name ?? '');
+ unset($this->headers[$lowerName]);
+ }
+
+ /**
+ * Define a list of Header names as an array in the correct order.
+ *
+ * These Headers will be output in the given order where present.
+ */
+ public function defineOrdering(array $sequence)
+ {
+ $this->order = array_flip(array_map('strtolower', $sequence));
+ }
+
+ /**
+ * Set a list of header names which must always be displayed when set.
+ *
+ * Usually headers without a field value won't be output unless set here.
+ */
+ public function setAlwaysDisplayed(array $names)
+ {
+ $this->required = array_flip(array_map('strtolower', $names));
+ }
+
+ /**
+ * Notify this observer that the entity's charset has changed.
+ *
+ * @param string $charset
+ */
+ public function charsetChanged($charset)
+ {
+ $this->setCharset($charset);
+ }
+
+ /**
+ * Returns a string with a representation of all headers.
+ *
+ * @return string
+ */
+ public function toString()
+ {
+ $string = '';
+ $headers = $this->headers;
+ if ($this->canSort()) {
+ uksort($headers, [$this, 'sortHeaders']);
+ }
+ foreach ($headers as $collection) {
+ foreach ($collection as $header) {
+ if ($this->isDisplayed($header) || '' != $header->getFieldBody()) {
+ $string .= $header->toString();
+ }
+ }
+ }
+
+ return $string;
+ }
+
+ /**
+ * Returns a string representation of this object.
+ *
+ * @return string
+ *
+ * @see toString()
+ */
+ public function __toString()
+ {
+ return $this->toString();
+ }
+
+ /** Save a Header to the internal collection */
+ private function storeHeader($name, Swift_Mime_Header $header, $offset = null)
+ {
+ if (!isset($this->headers[strtolower($name ?? '')])) {
+ $this->headers[strtolower($name ?? '')] = [];
+ }
+ if (!isset($offset)) {
+ $this->headers[strtolower($name ?? '')][] = $header;
+ } else {
+ $this->headers[strtolower($name ?? '')][$offset] = $header;
+ }
+ }
+
+ /** Test if the headers can be sorted */
+ private function canSort()
+ {
+ return \count($this->order) > 0;
+ }
+
+ /** uksort() algorithm for Header ordering */
+ private function sortHeaders($a, $b)
+ {
+ $lowerA = strtolower($a ?? '');
+ $lowerB = strtolower($b ?? '');
+ $aPos = \array_key_exists($lowerA, $this->order) ? $this->order[$lowerA] : -1;
+ $bPos = \array_key_exists($lowerB, $this->order) ? $this->order[$lowerB] : -1;
+
+ if (-1 === $aPos && -1 === $bPos) {
+ // just be sure to be determinist here
+ return $a > $b ? -1 : 1;
+ }
+
+ if (-1 == $aPos) {
+ return 1;
+ } elseif (-1 == $bPos) {
+ return -1;
+ }
+
+ return $aPos < $bPos ? -1 : 1;
+ }
+
+ /** Test if the given Header is always displayed */
+ private function isDisplayed(Swift_Mime_Header $header)
+ {
+ return \array_key_exists(strtolower($header->getFieldName() ?? ''), $this->required);
+ }
+
+ /** Notify all Headers of the new charset */
+ private function notifyHeadersOfCharset($charset)
+ {
+ foreach ($this->headers as $headerGroup) {
+ foreach ($headerGroup as $header) {
+ $header->setCharset($charset);
+ }
+ }
+ }
+
+ /**
+ * Make a deep copy of object.
+ */
+ public function __clone()
+ {
+ $this->factory = clone $this->factory;
+ foreach ($this->headers as $groupKey => $headerGroup) {
+ foreach ($headerGroup as $key => $header) {
+ $this->headers[$groupKey][$key] = clone $header;
+ }
+ }
+ }
+}
diff --git a/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php
new file mode 100644
index 00000000..62da1650
--- /dev/null
+++ b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php
@@ -0,0 +1,642 @@
+getHeaders()->defineOrdering([
+ 'Return-Path',
+ 'Received',
+ 'DKIM-Signature',
+ 'DomainKey-Signature',
+ 'Sender',
+ 'Message-ID',
+ 'Date',
+ 'Subject',
+ 'From',
+ 'Reply-To',
+ 'To',
+ 'Cc',
+ 'Bcc',
+ 'MIME-Version',
+ 'Content-Type',
+ 'Content-Transfer-Encoding',
+ ]);
+ $this->getHeaders()->setAlwaysDisplayed(['Date', 'Message-ID', 'From']);
+ $this->getHeaders()->addTextHeader('MIME-Version', '1.0');
+ $this->setDate(new DateTimeImmutable());
+ $this->setId($this->getId());
+ $this->getHeaders()->addMailboxHeader('From');
+ }
+
+ /**
+ * Always returns {@link LEVEL_TOP} for a message instance.
+ *
+ * @return int
+ */
+ public function getNestingLevel()
+ {
+ return self::LEVEL_TOP;
+ }
+
+ /**
+ * Set the subject of this message.
+ *
+ * @param string $subject
+ *
+ * @return $this
+ */
+ public function setSubject($subject)
+ {
+ if (!$this->setHeaderFieldModel('Subject', $subject)) {
+ $this->getHeaders()->addTextHeader('Subject', $subject);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the subject of this message.
+ *
+ * @return string
+ */
+ public function getSubject()
+ {
+ return $this->getHeaderFieldModel('Subject');
+ }
+
+ /**
+ * Set the date at which this message was created.
+ *
+ * @return $this
+ */
+ public function setDate(DateTimeInterface $dateTime)
+ {
+ if (!$this->setHeaderFieldModel('Date', $dateTime)) {
+ $this->getHeaders()->addDateHeader('Date', $dateTime);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the date at which this message was created.
+ *
+ * @return DateTimeInterface
+ */
+ public function getDate()
+ {
+ return $this->getHeaderFieldModel('Date');
+ }
+
+ /**
+ * Set the return-path (the bounce address) of this message.
+ *
+ * @param string $address
+ *
+ * @return $this
+ */
+ public function setReturnPath($address)
+ {
+ if (!$this->setHeaderFieldModel('Return-Path', $address)) {
+ $this->getHeaders()->addPathHeader('Return-Path', $address);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the return-path (bounce address) of this message.
+ *
+ * @return string
+ */
+ public function getReturnPath()
+ {
+ return $this->getHeaderFieldModel('Return-Path');
+ }
+
+ /**
+ * Set the sender of this message.
+ *
+ * This does not override the From field, but it has a higher significance.
+ *
+ * @param string $address
+ * @param string $name optional
+ *
+ * @return $this
+ */
+ public function setSender($address, $name = null)
+ {
+ if (!\is_array($address) && isset($name)) {
+ $address = [$address => $name];
+ }
+
+ if (!$this->setHeaderFieldModel('Sender', (array) $address)) {
+ $this->getHeaders()->addMailboxHeader('Sender', (array) $address);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the sender of this message.
+ *
+ * @return string
+ */
+ public function getSender()
+ {
+ return $this->getHeaderFieldModel('Sender');
+ }
+
+ /**
+ * Add a From: address to this message.
+ *
+ * If $name is passed this name will be associated with the address.
+ *
+ * @param string $address
+ * @param string $name optional
+ *
+ * @return $this
+ */
+ public function addFrom($address, $name = null)
+ {
+ $current = $this->getFrom();
+ $current[$address] = $name;
+
+ return $this->setFrom($current);
+ }
+
+ /**
+ * Set the from address of this message.
+ *
+ * You may pass an array of addresses if this message is from multiple people.
+ *
+ * If $name is passed and the first parameter is a string, this name will be
+ * associated with the address.
+ *
+ * @param string|array $addresses
+ * @param string $name optional
+ *
+ * @return $this
+ */
+ public function setFrom($addresses, $name = null)
+ {
+ if (!\is_array($addresses) && isset($name)) {
+ $addresses = [$addresses => $name];
+ }
+
+ if (!$this->setHeaderFieldModel('From', (array) $addresses)) {
+ $this->getHeaders()->addMailboxHeader('From', (array) $addresses);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the from address of this message.
+ *
+ * @return mixed
+ */
+ public function getFrom()
+ {
+ return $this->getHeaderFieldModel('From');
+ }
+
+ /**
+ * Add a Reply-To: address to this message.
+ *
+ * If $name is passed this name will be associated with the address.
+ *
+ * @param string $address
+ * @param string $name optional
+ *
+ * @return $this
+ */
+ public function addReplyTo($address, $name = null)
+ {
+ $current = $this->getReplyTo();
+ $current[$address] = $name;
+
+ return $this->setReplyTo($current);
+ }
+
+ /**
+ * Set the reply-to address of this message.
+ *
+ * You may pass an array of addresses if replies will go to multiple people.
+ *
+ * If $name is passed and the first parameter is a string, this name will be
+ * associated with the address.
+ *
+ * @param mixed $addresses
+ * @param string $name optional
+ *
+ * @return $this
+ */
+ public function setReplyTo($addresses, $name = null)
+ {
+ if (!\is_array($addresses) && isset($name)) {
+ $addresses = [$addresses => $name];
+ }
+
+ if (!$this->setHeaderFieldModel('Reply-To', (array) $addresses)) {
+ $this->getHeaders()->addMailboxHeader('Reply-To', (array) $addresses);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the reply-to address of this message.
+ *
+ * @return string
+ */
+ public function getReplyTo()
+ {
+ return $this->getHeaderFieldModel('Reply-To');
+ }
+
+ /**
+ * Add a To: address to this message.
+ *
+ * If $name is passed this name will be associated with the address.
+ *
+ * @param string $address
+ * @param string $name optional
+ *
+ * @return $this
+ */
+ public function addTo($address, $name = null)
+ {
+ $current = $this->getTo();
+ $current[$address] = $name;
+
+ return $this->setTo($current);
+ }
+
+ /**
+ * Set the to addresses of this message.
+ *
+ * If multiple recipients will receive the message an array should be used.
+ * Example: array('receiver@domain.org', 'other@domain.org' => 'A name')
+ *
+ * If $name is passed and the first parameter is a string, this name will be
+ * associated with the address.
+ *
+ * @param mixed $addresses
+ * @param string $name optional
+ *
+ * @return $this
+ */
+ public function setTo($addresses, $name = null)
+ {
+ if (!\is_array($addresses) && isset($name)) {
+ $addresses = [$addresses => $name];
+ }
+
+ if (!$this->setHeaderFieldModel('To', (array) $addresses)) {
+ $this->getHeaders()->addMailboxHeader('To', (array) $addresses);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the To addresses of this message.
+ *
+ * @return array
+ */
+ public function getTo()
+ {
+ return $this->getHeaderFieldModel('To');
+ }
+
+ /**
+ * Add a Cc: address to this message.
+ *
+ * If $name is passed this name will be associated with the address.
+ *
+ * @param string $address
+ * @param string $name optional
+ *
+ * @return $this
+ */
+ public function addCc($address, $name = null)
+ {
+ $current = $this->getCc();
+ $current[$address] = $name;
+
+ return $this->setCc($current);
+ }
+
+ /**
+ * Set the Cc addresses of this message.
+ *
+ * If $name is passed and the first parameter is a string, this name will be
+ * associated with the address.
+ *
+ * @param mixed $addresses
+ * @param string $name optional
+ *
+ * @return $this
+ */
+ public function setCc($addresses, $name = null)
+ {
+ if (!\is_array($addresses) && isset($name)) {
+ $addresses = [$addresses => $name];
+ }
+
+ if (!$this->setHeaderFieldModel('Cc', (array) $addresses)) {
+ $this->getHeaders()->addMailboxHeader('Cc', (array) $addresses);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the Cc address of this message.
+ *
+ * @return array
+ */
+ public function getCc()
+ {
+ return $this->getHeaderFieldModel('Cc');
+ }
+
+ /**
+ * Add a Bcc: address to this message.
+ *
+ * If $name is passed this name will be associated with the address.
+ *
+ * @param string $address
+ * @param string $name optional
+ *
+ * @return $this
+ */
+ public function addBcc($address, $name = null)
+ {
+ $current = $this->getBcc();
+ $current[$address] = $name;
+
+ return $this->setBcc($current);
+ }
+
+ /**
+ * Set the Bcc addresses of this message.
+ *
+ * If $name is passed and the first parameter is a string, this name will be
+ * associated with the address.
+ *
+ * @param mixed $addresses
+ * @param string $name optional
+ *
+ * @return $this
+ */
+ public function setBcc($addresses, $name = null)
+ {
+ if (!\is_array($addresses) && isset($name)) {
+ $addresses = [$addresses => $name];
+ }
+
+ if (!$this->setHeaderFieldModel('Bcc', (array) $addresses)) {
+ $this->getHeaders()->addMailboxHeader('Bcc', (array) $addresses);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the Bcc addresses of this message.
+ *
+ * @return array
+ */
+ public function getBcc()
+ {
+ return $this->getHeaderFieldModel('Bcc');
+ }
+
+ /**
+ * Set the priority of this message.
+ *
+ * The value is an integer where 1 is the highest priority and 5 is the lowest.
+ *
+ * @param int $priority
+ *
+ * @return $this
+ */
+ public function setPriority($priority)
+ {
+ $priorityMap = [
+ self::PRIORITY_HIGHEST => 'Highest',
+ self::PRIORITY_HIGH => 'High',
+ self::PRIORITY_NORMAL => 'Normal',
+ self::PRIORITY_LOW => 'Low',
+ self::PRIORITY_LOWEST => 'Lowest',
+ ];
+ $pMapKeys = array_keys($priorityMap);
+ if ($priority > max($pMapKeys)) {
+ $priority = max($pMapKeys);
+ } elseif ($priority < min($pMapKeys)) {
+ $priority = min($pMapKeys);
+ }
+ if (!$this->setHeaderFieldModel('X-Priority',
+ sprintf('%d (%s)', $priority, $priorityMap[$priority]))) {
+ $this->getHeaders()->addTextHeader('X-Priority',
+ sprintf('%d (%s)', $priority, $priorityMap[$priority]));
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the priority of this message.
+ *
+ * The returned value is an integer where 1 is the highest priority and 5
+ * is the lowest.
+ *
+ * @return int
+ */
+ public function getPriority()
+ {
+ list($priority) = sscanf($this->getHeaderFieldModel('X-Priority'),
+ '%[1-5]'
+ );
+
+ return $priority ?? 3;
+ }
+
+ /**
+ * Ask for a delivery receipt from the recipient to be sent to $addresses.
+ *
+ * @param array $addresses
+ *
+ * @return $this
+ */
+ public function setReadReceiptTo($addresses)
+ {
+ if (!$this->setHeaderFieldModel('Disposition-Notification-To', $addresses)) {
+ $this->getHeaders()
+ ->addMailboxHeader('Disposition-Notification-To', $addresses);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the addresses to which a read-receipt will be sent.
+ *
+ * @return string
+ */
+ public function getReadReceiptTo()
+ {
+ return $this->getHeaderFieldModel('Disposition-Notification-To');
+ }
+
+ /**
+ * Attach a {@link Swift_Mime_SimpleMimeEntity} such as an Attachment or MimePart.
+ *
+ * @return $this
+ */
+ public function attach(Swift_Mime_SimpleMimeEntity $entity)
+ {
+ $this->setChildren(array_merge($this->getChildren(), [$entity]));
+
+ return $this;
+ }
+
+ /**
+ * Remove an already attached entity.
+ *
+ * @return $this
+ */
+ public function detach(Swift_Mime_SimpleMimeEntity $entity)
+ {
+ $newChildren = [];
+ foreach ($this->getChildren() as $child) {
+ if ($entity !== $child) {
+ $newChildren[] = $child;
+ }
+ }
+ $this->setChildren($newChildren);
+
+ return $this;
+ }
+
+ /**
+ * Attach a {@link Swift_Mime_SimpleMimeEntity} and return it's CID source.
+ *
+ * This method should be used when embedding images or other data in a message.
+ *
+ * @return string
+ */
+ public function embed(Swift_Mime_SimpleMimeEntity $entity)
+ {
+ $this->attach($entity);
+
+ return 'cid:'.$entity->getId();
+ }
+
+ /**
+ * Get this message as a complete string.
+ *
+ * @return string
+ */
+ public function toString()
+ {
+ if (\count($children = $this->getChildren()) > 0 && '' != $this->getBody()) {
+ $this->setChildren(array_merge([$this->becomeMimePart()], $children));
+ $string = parent::toString();
+ $this->setChildren($children);
+ } else {
+ $string = parent::toString();
+ }
+
+ return $string;
+ }
+
+ /**
+ * Returns a string representation of this object.
+ *
+ * @see toString()
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->toString();
+ }
+
+ /**
+ * Write this message to a {@link Swift_InputByteStream}.
+ */
+ public function toByteStream(Swift_InputByteStream $is)
+ {
+ if (\count($children = $this->getChildren()) > 0 && '' != $this->getBody()) {
+ $this->setChildren(array_merge([$this->becomeMimePart()], $children));
+ parent::toByteStream($is);
+ $this->setChildren($children);
+ } else {
+ parent::toByteStream($is);
+ }
+ }
+
+ /** @see Swift_Mime_SimpleMimeEntity::getIdField() */
+ protected function getIdField()
+ {
+ return 'Message-ID';
+ }
+
+ /** Turn the body of this message into a child of itself if needed */
+ protected function becomeMimePart()
+ {
+ $part = new parent($this->getHeaders()->newInstance(), $this->getEncoder(),
+ $this->getCache(), $this->getIdGenerator(), $this->userCharset
+ );
+ $part->setContentType($this->userContentType);
+ $part->setBody($this->getBody());
+ $part->setFormat($this->userFormat);
+ $part->setDelSp($this->userDelSp);
+ $part->setNestingLevel($this->getTopNestingLevel());
+
+ return $part;
+ }
+
+ /** Get the highest nesting level nested inside this message */
+ private function getTopNestingLevel()
+ {
+ $highestLevel = $this->getNestingLevel();
+ foreach ($this->getChildren() as $child) {
+ $childLevel = $child->getNestingLevel();
+ if ($highestLevel < $childLevel) {
+ $highestLevel = $childLevel;
+ }
+ }
+
+ return $highestLevel;
+ }
+}
diff --git a/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php
new file mode 100644
index 00000000..03eaf472
--- /dev/null
+++ b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php
@@ -0,0 +1,826 @@
+ [self::LEVEL_TOP, self::LEVEL_MIXED],
+ 'multipart/alternative' => [self::LEVEL_MIXED, self::LEVEL_ALTERNATIVE],
+ 'multipart/related' => [self::LEVEL_ALTERNATIVE, self::LEVEL_RELATED],
+ ];
+
+ /** A set of filter rules to define what level an entity should be nested at */
+ private $compoundLevelFilters = [];
+
+ /** The nesting level of this entity */
+ private $nestingLevel = self::LEVEL_ALTERNATIVE;
+
+ /** A KeyCache instance used during encoding and streaming */
+ private $cache;
+
+ /** Direct descendants of this entity */
+ private $immediateChildren = [];
+
+ /** All descendants of this entity */
+ private $children = [];
+
+ /** The maximum line length of the body of this entity */
+ private $maxLineLength = 78;
+
+ /** The order in which alternative mime types should appear */
+ private $alternativePartOrder = [
+ 'text/plain' => 1,
+ 'text/html' => 2,
+ 'multipart/related' => 3,
+ ];
+
+ /** The CID of this entity */
+ private $id;
+
+ /** The key used for accessing the cache */
+ private $cacheKey;
+
+ protected $userContentType;
+
+ /**
+ * Create a new SimpleMimeEntity with $headers, $encoder and $cache.
+ */
+ public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator)
+ {
+ $this->cacheKey = bin2hex(random_bytes(16)); // set 32 hex values
+ $this->cache = $cache;
+ $this->headers = $headers;
+ $this->idGenerator = $idGenerator;
+ $this->setEncoder($encoder);
+ $this->headers->defineOrdering(['Content-Type', 'Content-Transfer-Encoding']);
+
+ // This array specifies that, when the entire MIME document contains
+ // $compoundLevel, then for each child within $level, if its Content-Type
+ // is $contentType then it should be treated as if it's level is
+ // $neededLevel instead. I tried to write that unambiguously! :-\
+ // Data Structure:
+ // array (
+ // $compoundLevel => array(
+ // $level => array(
+ // $contentType => $neededLevel
+ // )
+ // )
+ // )
+
+ $this->compoundLevelFilters = [
+ (self::LEVEL_ALTERNATIVE + self::LEVEL_RELATED) => [
+ self::LEVEL_ALTERNATIVE => [
+ 'text/plain' => self::LEVEL_ALTERNATIVE,
+ 'text/html' => self::LEVEL_RELATED,
+ ],
+ ],
+ ];
+
+ $this->id = $this->idGenerator->generateId();
+ }
+
+ /**
+ * Generate a new Content-ID or Message-ID for this MIME entity.
+ *
+ * @return string
+ */
+ public function generateId()
+ {
+ $this->setId($this->idGenerator->generateId());
+
+ return $this->id;
+ }
+
+ /**
+ * Get the {@link Swift_Mime_SimpleHeaderSet} for this entity.
+ *
+ * @return Swift_Mime_SimpleHeaderSet
+ */
+ public function getHeaders()
+ {
+ return $this->headers;
+ }
+
+ /**
+ * Get the nesting level of this entity.
+ *
+ * @see LEVEL_TOP, LEVEL_MIXED, LEVEL_RELATED, LEVEL_ALTERNATIVE
+ *
+ * @return int
+ */
+ public function getNestingLevel()
+ {
+ return $this->nestingLevel;
+ }
+
+ /**
+ * Get the Content-type of this entity.
+ *
+ * @return string
+ */
+ public function getContentType()
+ {
+ return $this->getHeaderFieldModel('Content-Type');
+ }
+
+ /**
+ * Get the Body Content-type of this entity.
+ *
+ * @return string
+ */
+ public function getBodyContentType()
+ {
+ return $this->userContentType;
+ }
+
+ /**
+ * Set the Content-type of this entity.
+ *
+ * @param string $type
+ *
+ * @return $this
+ */
+ public function setContentType($type)
+ {
+ $this->setContentTypeInHeaders($type);
+ // Keep track of the value so that if the content-type changes automatically
+ // due to added child entities, it can be restored if they are later removed
+ $this->userContentType = $type;
+
+ return $this;
+ }
+
+ /**
+ * Get the CID of this entity.
+ *
+ * The CID will only be present in headers if a Content-ID header is present.
+ *
+ * @return string
+ */
+ public function getId()
+ {
+ $tmp = (array) $this->getHeaderFieldModel($this->getIdField());
+
+ return $this->headers->has($this->getIdField()) ? current($tmp) : $this->id;
+ }
+
+ /**
+ * Set the CID of this entity.
+ *
+ * @param string $id
+ *
+ * @return $this
+ */
+ public function setId($id)
+ {
+ if (!$this->setHeaderFieldModel($this->getIdField(), $id)) {
+ $this->headers->addIdHeader($this->getIdField(), $id);
+ }
+ $this->id = $id;
+
+ return $this;
+ }
+
+ /**
+ * Get the description of this entity.
+ *
+ * This value comes from the Content-Description header if set.
+ *
+ * @return string
+ */
+ public function getDescription()
+ {
+ return $this->getHeaderFieldModel('Content-Description');
+ }
+
+ /**
+ * Set the description of this entity.
+ *
+ * This method sets a value in the Content-ID header.
+ *
+ * @param string $description
+ *
+ * @return $this
+ */
+ public function setDescription($description)
+ {
+ if (!$this->setHeaderFieldModel('Content-Description', $description)) {
+ $this->headers->addTextHeader('Content-Description', $description);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the maximum line length of the body of this entity.
+ *
+ * @return int
+ */
+ public function getMaxLineLength()
+ {
+ return $this->maxLineLength;
+ }
+
+ /**
+ * Set the maximum line length of lines in this body.
+ *
+ * Though not enforced by the library, lines should not exceed 1000 chars.
+ *
+ * @param int $length
+ *
+ * @return $this
+ */
+ public function setMaxLineLength($length)
+ {
+ $this->maxLineLength = $length;
+
+ return $this;
+ }
+
+ /**
+ * Get all children added to this entity.
+ *
+ * @return Swift_Mime_SimpleMimeEntity[]
+ */
+ public function getChildren()
+ {
+ return $this->children;
+ }
+
+ /**
+ * Set all children of this entity.
+ *
+ * @param Swift_Mime_SimpleMimeEntity[] $children
+ * @param int $compoundLevel For internal use only
+ *
+ * @return $this
+ */
+ public function setChildren(array $children, $compoundLevel = null)
+ {
+ // TODO: Try to refactor this logic
+ $compoundLevel = $compoundLevel ?? $this->getCompoundLevel($children);
+ $immediateChildren = [];
+ $grandchildren = [];
+ $newContentType = $this->userContentType;
+
+ foreach ($children as $child) {
+ $level = $this->getNeededChildLevel($child, $compoundLevel);
+ if (empty($immediateChildren)) {
+ //first iteration
+ $immediateChildren = [$child];
+ } else {
+ $nextLevel = $this->getNeededChildLevel($immediateChildren[0], $compoundLevel);
+ if ($nextLevel == $level) {
+ $immediateChildren[] = $child;
+ } elseif ($level < $nextLevel) {
+ // Re-assign immediateChildren to grandchildren
+ $grandchildren = array_merge($grandchildren, $immediateChildren);
+ // Set new children
+ $immediateChildren = [$child];
+ } else {
+ $grandchildren[] = $child;
+ }
+ }
+ }
+
+ if ($immediateChildren) {
+ $lowestLevel = $this->getNeededChildLevel($immediateChildren[0], $compoundLevel);
+
+ // Determine which composite media type is needed to accommodate the
+ // immediate children
+ foreach ($this->compositeRanges as $mediaType => $range) {
+ if ($lowestLevel > $range[0] && $lowestLevel <= $range[1]) {
+ $newContentType = $mediaType;
+
+ break;
+ }
+ }
+
+ // Put any grandchildren in a subpart
+ if (!empty($grandchildren)) {
+ $subentity = $this->createChild();
+ $subentity->setNestingLevel($lowestLevel);
+ $subentity->setChildren($grandchildren, $compoundLevel);
+ array_unshift($immediateChildren, $subentity);
+ }
+ }
+
+ $this->immediateChildren = $immediateChildren;
+ $this->children = $children;
+ $this->setContentTypeInHeaders($newContentType);
+ $this->fixHeaders();
+ $this->sortChildren();
+
+ return $this;
+ }
+
+ /**
+ * Get the body of this entity as a string.
+ *
+ * @return string
+ */
+ public function getBody()
+ {
+ return $this->body instanceof Swift_OutputByteStream ? $this->readStream($this->body) : $this->body;
+ }
+
+ /**
+ * Set the body of this entity, either as a string, or as an instance of
+ * {@link Swift_OutputByteStream}.
+ *
+ * @param mixed $body
+ * @param string $contentType optional
+ *
+ * @return $this
+ */
+ public function setBody($body, $contentType = null)
+ {
+ if ($body !== $this->body) {
+ $this->clearCache();
+ }
+
+ $this->body = $body;
+ if (null !== $contentType) {
+ $this->setContentType($contentType);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the encoder used for the body of this entity.
+ *
+ * @return Swift_Mime_ContentEncoder
+ */
+ public function getEncoder()
+ {
+ return $this->encoder;
+ }
+
+ /**
+ * Set the encoder used for the body of this entity.
+ *
+ * @return $this
+ */
+ public function setEncoder(Swift_Mime_ContentEncoder $encoder)
+ {
+ if ($encoder !== $this->encoder) {
+ $this->clearCache();
+ }
+
+ $this->encoder = $encoder;
+ $this->setEncoding($encoder->getName());
+ $this->notifyEncoderChanged($encoder);
+
+ return $this;
+ }
+
+ /**
+ * Get the boundary used to separate children in this entity.
+ *
+ * @return string
+ */
+ public function getBoundary()
+ {
+ if (!isset($this->boundary)) {
+ $this->boundary = '_=_swift_'.time().'_'.bin2hex(random_bytes(16)).'_=_';
+ }
+
+ return $this->boundary;
+ }
+
+ /**
+ * Set the boundary used to separate children in this entity.
+ *
+ * @param string $boundary
+ *
+ * @throws Swift_RfcComplianceException
+ *
+ * @return $this
+ */
+ public function setBoundary($boundary)
+ {
+ $this->assertValidBoundary($boundary);
+ $this->boundary = $boundary;
+
+ return $this;
+ }
+
+ /**
+ * Receive notification that the charset of this entity, or a parent entity
+ * has changed.
+ *
+ * @param string $charset
+ */
+ public function charsetChanged($charset)
+ {
+ $this->notifyCharsetChanged($charset);
+ }
+
+ /**
+ * Receive notification that the encoder of this entity or a parent entity
+ * has changed.
+ */
+ public function encoderChanged(Swift_Mime_ContentEncoder $encoder)
+ {
+ $this->notifyEncoderChanged($encoder);
+ }
+
+ /**
+ * Get this entire entity as a string.
+ *
+ * @return string
+ */
+ public function toString()
+ {
+ $string = $this->headers->toString();
+ $string .= $this->bodyToString();
+
+ return $string;
+ }
+
+ /**
+ * Get this entire entity as a string.
+ *
+ * @return string
+ */
+ protected function bodyToString()
+ {
+ $string = '';
+
+ if (isset($this->body) && empty($this->immediateChildren)) {
+ if ($this->cache->hasKey($this->cacheKey, 'body')) {
+ $body = $this->cache->getString($this->cacheKey, 'body');
+ } else {
+ $body = "\r\n".$this->encoder->encodeString($this->getBody(), 0, $this->getMaxLineLength());
+ $this->cache->setString($this->cacheKey, 'body', $body, Swift_KeyCache::MODE_WRITE);
+ }
+ $string .= $body;
+ }
+
+ if (!empty($this->immediateChildren)) {
+ foreach ($this->immediateChildren as $child) {
+ $string .= "\r\n\r\n--".$this->getBoundary()."\r\n";
+ $string .= $child->toString();
+ }
+ $string .= "\r\n\r\n--".$this->getBoundary()."--\r\n";
+ }
+
+ return $string;
+ }
+
+ /**
+ * Returns a string representation of this object.
+ *
+ * @see toString()
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->toString();
+ }
+
+ /**
+ * Write this entire entity to a {@see Swift_InputByteStream}.
+ */
+ public function toByteStream(Swift_InputByteStream $is)
+ {
+ $is->write($this->headers->toString());
+ $is->commit();
+
+ $this->bodyToByteStream($is);
+ }
+
+ /**
+ * Write this entire entity to a {@link Swift_InputByteStream}.
+ */
+ protected function bodyToByteStream(Swift_InputByteStream $is)
+ {
+ if (empty($this->immediateChildren)) {
+ if (isset($this->body)) {
+ if ($this->cache->hasKey($this->cacheKey, 'body')) {
+ $this->cache->exportToByteStream($this->cacheKey, 'body', $is);
+ } else {
+ $cacheIs = $this->cache->getInputByteStream($this->cacheKey, 'body');
+ if ($cacheIs) {
+ $is->bind($cacheIs);
+ }
+
+ $is->write("\r\n");
+
+ if ($this->body instanceof Swift_OutputByteStream) {
+ $this->body->setReadPointer(0);
+
+ $this->encoder->encodeByteStream($this->body, $is, 0, $this->getMaxLineLength());
+ } else {
+ $is->write($this->encoder->encodeString($this->getBody(), 0, $this->getMaxLineLength()));
+ }
+
+ if ($cacheIs) {
+ $is->unbind($cacheIs);
+ }
+ }
+ }
+ }
+
+ if (!empty($this->immediateChildren)) {
+ foreach ($this->immediateChildren as $child) {
+ $is->write("\r\n\r\n--".$this->getBoundary()."\r\n");
+ $child->toByteStream($is);
+ }
+ $is->write("\r\n\r\n--".$this->getBoundary()."--\r\n");
+ }
+ }
+
+ /**
+ * Get the name of the header that provides the ID of this entity.
+ */
+ protected function getIdField()
+ {
+ return 'Content-ID';
+ }
+
+ /**
+ * Get the model data (usually an array or a string) for $field.
+ */
+ protected function getHeaderFieldModel($field)
+ {
+ if ($this->headers->has($field)) {
+ return $this->headers->get($field)->getFieldBodyModel();
+ }
+ }
+
+ /**
+ * Set the model data for $field.
+ */
+ protected function setHeaderFieldModel($field, $model)
+ {
+ if ($this->headers->has($field)) {
+ $this->headers->get($field)->setFieldBodyModel($model);
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Get the parameter value of $parameter on $field header.
+ */
+ protected function getHeaderParameter($field, $parameter)
+ {
+ if ($this->headers->has($field)) {
+ return $this->headers->get($field)->getParameter($parameter);
+ }
+ }
+
+ /**
+ * Set the parameter value of $parameter on $field header.
+ */
+ protected function setHeaderParameter($field, $parameter, $value)
+ {
+ if ($this->headers->has($field)) {
+ $this->headers->get($field)->setParameter($parameter, $value);
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Re-evaluate what content type and encoding should be used on this entity.
+ */
+ protected function fixHeaders()
+ {
+ if (\count($this->immediateChildren)) {
+ $this->setHeaderParameter('Content-Type', 'boundary',
+ $this->getBoundary()
+ );
+ $this->headers->remove('Content-Transfer-Encoding');
+ } else {
+ $this->setHeaderParameter('Content-Type', 'boundary', null);
+ $this->setEncoding($this->encoder->getName());
+ }
+ }
+
+ /**
+ * Get the KeyCache used in this entity.
+ *
+ * @return Swift_KeyCache
+ */
+ protected function getCache()
+ {
+ return $this->cache;
+ }
+
+ /**
+ * Get the ID generator.
+ *
+ * @return Swift_IdGenerator
+ */
+ protected function getIdGenerator()
+ {
+ return $this->idGenerator;
+ }
+
+ /**
+ * Empty the KeyCache for this entity.
+ */
+ protected function clearCache()
+ {
+ $this->cache->clearKey($this->cacheKey, 'body');
+ }
+
+ private function readStream(Swift_OutputByteStream $os)
+ {
+ $string = '';
+ while (false !== $bytes = $os->read(8192)) {
+ $string .= $bytes;
+ }
+
+ $os->setReadPointer(0);
+
+ return $string;
+ }
+
+ private function setEncoding($encoding)
+ {
+ if (!$this->setHeaderFieldModel('Content-Transfer-Encoding', $encoding)) {
+ $this->headers->addTextHeader('Content-Transfer-Encoding', $encoding);
+ }
+ }
+
+ private function assertValidBoundary($boundary)
+ {
+ if (!preg_match('/^[a-z0-9\'\(\)\+_\-,\.\/:=\?\ ]{0,69}[a-z0-9\'\(\)\+_\-,\.\/:=\?]$/Di', $boundary)) {
+ throw new Swift_RfcComplianceException('Mime boundary set is not RFC 2046 compliant.');
+ }
+ }
+
+ private function setContentTypeInHeaders($type)
+ {
+ if (!$this->setHeaderFieldModel('Content-Type', $type)) {
+ $this->headers->addParameterizedHeader('Content-Type', $type);
+ }
+ }
+
+ private function setNestingLevel($level)
+ {
+ $this->nestingLevel = $level;
+ }
+
+ private function getCompoundLevel($children)
+ {
+ $level = 0;
+ foreach ($children as $child) {
+ $level |= $child->getNestingLevel();
+ }
+
+ return $level;
+ }
+
+ private function getNeededChildLevel($child, $compoundLevel)
+ {
+ $filter = [];
+ foreach ($this->compoundLevelFilters as $bitmask => $rules) {
+ if (($compoundLevel & $bitmask) === $bitmask) {
+ $filter = $rules + $filter;
+ }
+ }
+
+ $realLevel = $child->getNestingLevel();
+ $lowercaseType = strtolower($child->getContentType() ?? '');
+
+ if (isset($filter[$realLevel]) && isset($filter[$realLevel][$lowercaseType])) {
+ return $filter[$realLevel][$lowercaseType];
+ }
+
+ return $realLevel;
+ }
+
+ private function createChild()
+ {
+ return new self($this->headers->newInstance(), $this->encoder, $this->cache, $this->idGenerator);
+ }
+
+ private function notifyEncoderChanged(Swift_Mime_ContentEncoder $encoder)
+ {
+ foreach ($this->immediateChildren as $child) {
+ $child->encoderChanged($encoder);
+ }
+ }
+
+ private function notifyCharsetChanged($charset)
+ {
+ $this->encoder->charsetChanged($charset);
+ $this->headers->charsetChanged($charset);
+ foreach ($this->immediateChildren as $child) {
+ $child->charsetChanged($charset);
+ }
+ }
+
+ private function sortChildren()
+ {
+ $shouldSort = false;
+ foreach ($this->immediateChildren as $child) {
+ // NOTE: This include alternative parts moved into a related part
+ if (self::LEVEL_ALTERNATIVE == $child->getNestingLevel()) {
+ $shouldSort = true;
+ break;
+ }
+ }
+
+ // Sort in order of preference, if there is one
+ if ($shouldSort) {
+ // Group the messages by order of preference
+ $sorted = [];
+ foreach ($this->immediateChildren as $child) {
+ $type = $child->getContentType();
+ $level = \array_key_exists($type, $this->alternativePartOrder) ? $this->alternativePartOrder[$type] : max($this->alternativePartOrder) + 1;
+
+ if (empty($sorted[$level])) {
+ $sorted[$level] = [];
+ }
+
+ $sorted[$level][] = $child;
+ }
+
+ ksort($sorted);
+
+ $this->immediateChildren = array_reduce($sorted, 'array_merge', []);
+ }
+ }
+
+ /**
+ * Empties it's own contents from the cache.
+ */
+ public function __destruct()
+ {
+ if ($this->cache instanceof Swift_KeyCache) {
+ $this->cache->clearAll($this->cacheKey);
+ }
+ }
+
+ /**
+ * Make a deep copy of object.
+ */
+ public function __clone()
+ {
+ $this->headers = clone $this->headers;
+ $this->encoder = clone $this->encoder;
+ $this->cacheKey = bin2hex(random_bytes(16)); // set 32 hex values
+ $children = [];
+ foreach ($this->children as $pos => $child) {
+ $children[$pos] = clone $child;
+ }
+ $this->setChildren($children);
+ }
+
+ public function __wakeup()
+ {
+ $this->cacheKey = bin2hex(random_bytes(16)); // set 32 hex values
+ $this->cache = new Swift_KeyCache_ArrayKeyCache(new Swift_KeyCache_SimpleKeyCacheInputStream());
+ }
+}
diff --git a/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MimePart.php b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MimePart.php
new file mode 100644
index 00000000..ea97619a
--- /dev/null
+++ b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MimePart.php
@@ -0,0 +1,45 @@
+createDependenciesFor('mime.part')
+ );
+
+ if (!isset($charset)) {
+ $charset = Swift_DependencyContainer::getInstance()
+ ->lookup('properties.charset');
+ }
+ $this->setBody($body);
+ $this->setCharset($charset);
+ if ($contentType) {
+ $this->setContentType($contentType);
+ }
+ }
+}
diff --git a/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/NullTransport.php b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/NullTransport.php
new file mode 100644
index 00000000..e44b7af9
--- /dev/null
+++ b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/NullTransport.php
@@ -0,0 +1,26 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Pretends messages have been sent, but just ignores them.
+ *
+ * @author Fabien Potencier
+ */
+class Swift_NullTransport extends Swift_Transport_NullTransport
+{
+ public function __construct()
+ {
+ \call_user_func_array(
+ [$this, 'Swift_Transport_NullTransport::__construct'],
+ Swift_DependencyContainer::getInstance()
+ ->createDependenciesFor('transport.null')
+ );
+ }
+}
diff --git a/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/OutputByteStream.php b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/OutputByteStream.php
new file mode 100644
index 00000000..1f26f9be
--- /dev/null
+++ b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/OutputByteStream.php
@@ -0,0 +1,46 @@
+setThreshold($threshold);
+ $this->setSleepTime($sleep);
+ $this->sleeper = $sleeper;
+ }
+
+ /**
+ * Set the number of emails to send before restarting.
+ *
+ * @param int $threshold
+ */
+ public function setThreshold($threshold)
+ {
+ $this->threshold = $threshold;
+ }
+
+ /**
+ * Get the number of emails to send before restarting.
+ *
+ * @return int
+ */
+ public function getThreshold()
+ {
+ return $this->threshold;
+ }
+
+ /**
+ * Set the number of seconds to sleep for during a restart.
+ *
+ * @param int $sleep time
+ */
+ public function setSleepTime($sleep)
+ {
+ $this->sleep = $sleep;
+ }
+
+ /**
+ * Get the number of seconds to sleep for during a restart.
+ *
+ * @return int
+ */
+ public function getSleepTime()
+ {
+ return $this->sleep;
+ }
+
+ /**
+ * Invoked immediately before the Message is sent.
+ */
+ public function beforeSendPerformed(Swift_Events_SendEvent $evt)
+ {
+ }
+
+ /**
+ * Invoked immediately after the Message is sent.
+ */
+ public function sendPerformed(Swift_Events_SendEvent $evt)
+ {
+ ++$this->counter;
+ if ($this->counter >= $this->threshold) {
+ $transport = $evt->getTransport();
+ $transport->stop();
+ if ($this->sleep) {
+ $this->sleep($this->sleep);
+ }
+ $transport->start();
+ $this->counter = 0;
+ }
+ }
+
+ /**
+ * Sleep for $seconds.
+ *
+ * @param int $seconds
+ */
+ public function sleep($seconds)
+ {
+ if (isset($this->sleeper)) {
+ $this->sleeper->sleep($seconds);
+ } else {
+ sleep($seconds);
+ }
+ }
+}
diff --git a/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php
new file mode 100644
index 00000000..36451f44
--- /dev/null
+++ b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php
@@ -0,0 +1,154 @@
+getMessage();
+ $message->toByteStream($this);
+ }
+
+ /**
+ * Invoked immediately following a command being sent.
+ */
+ public function commandSent(Swift_Events_CommandEvent $evt)
+ {
+ $command = $evt->getCommand();
+ $this->out += \strlen($command);
+ }
+
+ /**
+ * Invoked immediately following a response coming back.
+ */
+ public function responseReceived(Swift_Events_ResponseEvent $evt)
+ {
+ $response = $evt->getResponse();
+ $this->in += \strlen($response);
+ }
+
+ /**
+ * Called when a message is sent so that the outgoing counter can be increased.
+ *
+ * @param string $bytes
+ */
+ public function write($bytes)
+ {
+ $this->out += \strlen($bytes);
+ foreach ($this->mirrors as $stream) {
+ $stream->write($bytes);
+ }
+ }
+
+ /**
+ * Not used.
+ */
+ public function commit()
+ {
+ }
+
+ /**
+ * Attach $is to this stream.
+ *
+ * The stream acts as an observer, receiving all data that is written.
+ * All {@link write()} and {@link flushBuffers()} operations will be mirrored.
+ */
+ public function bind(Swift_InputByteStream $is)
+ {
+ $this->mirrors[] = $is;
+ }
+
+ /**
+ * Remove an already bound stream.
+ *
+ * If $is is not bound, no errors will be raised.
+ * If the stream currently has any buffered data it will be written to $is
+ * before unbinding occurs.
+ */
+ public function unbind(Swift_InputByteStream $is)
+ {
+ foreach ($this->mirrors as $k => $stream) {
+ if ($is === $stream) {
+ unset($this->mirrors[$k]);
+ }
+ }
+ }
+
+ /**
+ * Not used.
+ */
+ public function flushBuffers()
+ {
+ foreach ($this->mirrors as $stream) {
+ $stream->flushBuffers();
+ }
+ }
+
+ /**
+ * Get the total number of bytes sent to the server.
+ *
+ * @return int
+ */
+ public function getBytesOut()
+ {
+ return $this->out;
+ }
+
+ /**
+ * Get the total number of bytes received from the server.
+ *
+ * @return int
+ */
+ public function getBytesIn()
+ {
+ return $this->in;
+ }
+
+ /**
+ * Reset the internal counters to zero.
+ */
+ public function reset()
+ {
+ $this->out = 0;
+ $this->in = 0;
+ }
+}
diff --git a/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php
new file mode 100644
index 00000000..9f9f08b5
--- /dev/null
+++ b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php
@@ -0,0 +1,31 @@
+
+ * $replacements = array(
+ * "address1@domain.tld" => array("{a}" => "b", "{c}" => "d"),
+ * "address2@domain.tld" => array("{a}" => "x", "{c}" => "y")
+ * )
+ *
+ *
+ * When using an instance of {@link Swift_Plugins_Decorator_Replacements},
+ * the object should return just the array of replacements for the address
+ * given to {@link Swift_Plugins_Decorator_Replacements::getReplacementsFor()}.
+ *
+ * @param mixed $replacements Array or Swift_Plugins_Decorator_Replacements
+ */
+ public function __construct($replacements)
+ {
+ $this->setReplacements($replacements);
+ }
+
+ /**
+ * Sets replacements.
+ *
+ * @param mixed $replacements Array or Swift_Plugins_Decorator_Replacements
+ *
+ * @see __construct()
+ */
+ public function setReplacements($replacements)
+ {
+ if (!($replacements instanceof Swift_Plugins_Decorator_Replacements)) {
+ $this->replacements = (array) $replacements;
+ } else {
+ $this->replacements = $replacements;
+ }
+ }
+
+ /**
+ * Invoked immediately before the Message is sent.
+ */
+ public function beforeSendPerformed(Swift_Events_SendEvent $evt)
+ {
+ $message = $evt->getMessage();
+ $this->restoreMessage($message);
+ $to = array_keys($message->getTo());
+ $address = array_shift($to);
+ if ($replacements = $this->getReplacementsFor($address)) {
+ $body = $message->getBody();
+ $search = array_keys($replacements);
+ $replace = array_values($replacements);
+ $bodyReplaced = str_replace(
+ $search, $replace, $body
+ );
+ if ($body != $bodyReplaced) {
+ $this->originalBody = $body;
+ $message->setBody($bodyReplaced);
+ }
+
+ foreach ($message->getHeaders()->getAll() as $header) {
+ $body = $header->getFieldBodyModel();
+ $count = 0;
+ if (\is_array($body)) {
+ $bodyReplaced = [];
+ foreach ($body as $key => $value) {
+ $count1 = 0;
+ $count2 = 0;
+ $key = \is_string($key) ? str_replace($search, $replace, $key, $count1) : $key;
+ $value = \is_string($value) ? str_replace($search, $replace, $value, $count2) : $value;
+ $bodyReplaced[$key] = $value;
+
+ if (!$count && ($count1 || $count2)) {
+ $count = 1;
+ }
+ }
+ } elseif (\is_string($body)) {
+ $bodyReplaced = str_replace($search, $replace, $body, $count);
+ }
+
+ if ($count) {
+ $this->originalHeaders[$header->getFieldName()] = $body;
+ $header->setFieldBodyModel($bodyReplaced);
+ }
+ }
+
+ $children = (array) $message->getChildren();
+ foreach ($children as $child) {
+ list($type) = sscanf($child->getContentType(), '%[^/]/%s');
+ if ('text' == $type) {
+ $body = $child->getBody();
+ $bodyReplaced = str_replace(
+ $search, $replace, $body
+ );
+ if ($body != $bodyReplaced) {
+ $child->setBody($bodyReplaced);
+ $this->originalChildBodies[$child->getId()] = $body;
+ }
+ }
+ }
+ $this->lastMessage = $message;
+ }
+ }
+
+ /**
+ * Find a map of replacements for the address.
+ *
+ * If this plugin was provided with a delegate instance of
+ * {@link Swift_Plugins_Decorator_Replacements} then the call will be
+ * delegated to it. Otherwise, it will attempt to find the replacements
+ * from the array provided in the constructor.
+ *
+ * If no replacements can be found, an empty value (NULL) is returned.
+ *
+ * @param string $address
+ *
+ * @return array
+ */
+ public function getReplacementsFor($address)
+ {
+ if ($this->replacements instanceof Swift_Plugins_Decorator_Replacements) {
+ return $this->replacements->getReplacementsFor($address);
+ }
+
+ return $this->replacements[$address] ?? null;
+ }
+
+ /**
+ * Invoked immediately after the Message is sent.
+ */
+ public function sendPerformed(Swift_Events_SendEvent $evt)
+ {
+ $this->restoreMessage($evt->getMessage());
+ }
+
+ /** Restore a changed message back to its original state */
+ private function restoreMessage(Swift_Mime_SimpleMessage $message)
+ {
+ if ($this->lastMessage === $message) {
+ if (isset($this->originalBody)) {
+ $message->setBody($this->originalBody);
+ $this->originalBody = null;
+ }
+ if (!empty($this->originalHeaders)) {
+ foreach ($message->getHeaders()->getAll() as $header) {
+ if (\array_key_exists($header->getFieldName(), $this->originalHeaders)) {
+ $header->setFieldBodyModel($this->originalHeaders[$header->getFieldName()]);
+ }
+ }
+ $this->originalHeaders = [];
+ }
+ if (!empty($this->originalChildBodies)) {
+ $children = (array) $message->getChildren();
+ foreach ($children as $child) {
+ $id = $child->getId();
+ if (\array_key_exists($id, $this->originalChildBodies)) {
+ $child->setBody($this->originalChildBodies[$id]);
+ }
+ }
+ $this->originalChildBodies = [];
+ }
+ $this->lastMessage = null;
+ }
+ }
+}
diff --git a/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php
new file mode 100644
index 00000000..3f4dbbfa
--- /dev/null
+++ b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php
@@ -0,0 +1,65 @@
+sender = $sender;
+ }
+
+ /**
+ * Invoked immediately before the Message is sent.
+ */
+ public function beforeSendPerformed(Swift_Events_SendEvent $evt)
+ {
+ $message = $evt->getMessage();
+ $headers = $message->getHeaders();
+
+ // save current recipients
+ $headers->addPathHeader('X-Swift-Return-Path', $message->getReturnPath());
+
+ // replace them with the one to send to
+ $message->setReturnPath($this->sender);
+ }
+
+ /**
+ * Invoked immediately after the Message is sent.
+ */
+ public function sendPerformed(Swift_Events_SendEvent $evt)
+ {
+ $message = $evt->getMessage();
+
+ // restore original headers
+ $headers = $message->getHeaders();
+
+ if ($headers->has('X-Swift-Return-Path')) {
+ $message->setReturnPath($headers->get('X-Swift-Return-Path')->getAddress());
+ $headers->removeAll('X-Swift-Return-Path');
+ }
+ }
+}
diff --git a/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Logger.php b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Logger.php
new file mode 100644
index 00000000..d9bce893
--- /dev/null
+++ b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Logger.php
@@ -0,0 +1,36 @@
+logger = $logger;
+ }
+
+ /**
+ * Add a log entry.
+ *
+ * @param string $entry
+ */
+ public function add($entry)
+ {
+ $this->logger->add($entry);
+ }
+
+ /**
+ * Clear the log contents.
+ */
+ public function clear()
+ {
+ $this->logger->clear();
+ }
+
+ /**
+ * Get this log as a string.
+ *
+ * @return string
+ */
+ public function dump()
+ {
+ return $this->logger->dump();
+ }
+
+ /**
+ * Invoked immediately following a command being sent.
+ */
+ public function commandSent(Swift_Events_CommandEvent $evt)
+ {
+ $command = $evt->getCommand();
+ $this->logger->add(sprintf('>> %s', $command));
+ }
+
+ /**
+ * Invoked immediately following a response coming back.
+ */
+ public function responseReceived(Swift_Events_ResponseEvent $evt)
+ {
+ $response = $evt->getResponse();
+ $this->logger->add(sprintf('<< %s', $response));
+ }
+
+ /**
+ * Invoked just before a Transport is started.
+ */
+ public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt)
+ {
+ $transportName = \get_class($evt->getSource());
+ $this->logger->add(sprintf('++ Starting %s', $transportName));
+ }
+
+ /**
+ * Invoked immediately after the Transport is started.
+ */
+ public function transportStarted(Swift_Events_TransportChangeEvent $evt)
+ {
+ $transportName = \get_class($evt->getSource());
+ $this->logger->add(sprintf('++ %s started', $transportName));
+ }
+
+ /**
+ * Invoked just before a Transport is stopped.
+ */
+ public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt)
+ {
+ $transportName = \get_class($evt->getSource());
+ $this->logger->add(sprintf('++ Stopping %s', $transportName));
+ }
+
+ /**
+ * Invoked immediately after the Transport is stopped.
+ */
+ public function transportStopped(Swift_Events_TransportChangeEvent $evt)
+ {
+ $transportName = \get_class($evt->getSource());
+ $this->logger->add(sprintf('++ %s stopped', $transportName));
+ }
+
+ /**
+ * Invoked as a TransportException is thrown in the Transport system.
+ */
+ public function exceptionThrown(Swift_Events_TransportExceptionEvent $evt)
+ {
+ $e = $evt->getException();
+ $message = $e->getMessage();
+ $code = $e->getCode();
+ $this->logger->add(sprintf('!! %s (code: %s)', $message, $code));
+ $message .= PHP_EOL;
+ $message .= 'Log data:'.PHP_EOL;
+ $message .= $this->logger->dump();
+ $evt->cancelBubble();
+ throw new Swift_TransportException($message, $code, $e->getPrevious());
+ }
+}
diff --git a/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php
new file mode 100644
index 00000000..6f595ada
--- /dev/null
+++ b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php
@@ -0,0 +1,72 @@
+size = $size;
+ }
+
+ /**
+ * Add a log entry.
+ *
+ * @param string $entry
+ */
+ public function add($entry)
+ {
+ $this->log[] = $entry;
+ while (\count($this->log) > $this->size) {
+ array_shift($this->log);
+ }
+ }
+
+ /**
+ * Clear the log contents.
+ */
+ public function clear()
+ {
+ $this->log = [];
+ }
+
+ /**
+ * Get this log as a string.
+ *
+ * @return string
+ */
+ public function dump()
+ {
+ return implode(PHP_EOL, $this->log);
+ }
+}
diff --git a/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php
new file mode 100644
index 00000000..40a53d2b
--- /dev/null
+++ b/dev/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php
@@ -0,0 +1,58 @@
+isHtml = $isHtml;
+ }
+
+ /**
+ * Add a log entry.
+ *
+ * @param string $entry
+ */
+ public function add($entry)
+ {
+ if ($this->isHtml) {
+ printf('%s%s%s', htmlspecialchars($entry, ENT_QUOTES), '
+ *
+ * @internal
+ */
+final class Iconv
+{
+ public const ERROR_ILLEGAL_CHARACTER = 'iconv(): Detected an illegal character in input string';
+ public const ERROR_WRONG_CHARSET = 'iconv(): Wrong charset, conversion from `%s\' to `%s\' is not allowed';
+
+ public static $inputEncoding = 'utf-8';
+ public static $outputEncoding = 'utf-8';
+ public static $internalEncoding = 'utf-8';
+
+ private static $alias = [
+ 'utf8' => 'utf-8',
+ 'ascii' => 'us-ascii',
+ 'tis-620' => 'iso-8859-11',
+ 'cp1250' => 'windows-1250',
+ 'cp1251' => 'windows-1251',
+ 'cp1252' => 'windows-1252',
+ 'cp1253' => 'windows-1253',
+ 'cp1254' => 'windows-1254',
+ 'cp1255' => 'windows-1255',
+ 'cp1256' => 'windows-1256',
+ 'cp1257' => 'windows-1257',
+ 'cp1258' => 'windows-1258',
+ 'shift-jis' => 'cp932',
+ 'shift_jis' => 'cp932',
+ 'latin1' => 'iso-8859-1',
+ 'latin2' => 'iso-8859-2',
+ 'latin3' => 'iso-8859-3',
+ 'latin4' => 'iso-8859-4',
+ 'latin5' => 'iso-8859-9',
+ 'latin6' => 'iso-8859-10',
+ 'latin7' => 'iso-8859-13',
+ 'latin8' => 'iso-8859-14',
+ 'latin9' => 'iso-8859-15',
+ 'latin10' => 'iso-8859-16',
+ 'iso8859-1' => 'iso-8859-1',
+ 'iso8859-2' => 'iso-8859-2',
+ 'iso8859-3' => 'iso-8859-3',
+ 'iso8859-4' => 'iso-8859-4',
+ 'iso8859-5' => 'iso-8859-5',
+ 'iso8859-6' => 'iso-8859-6',
+ 'iso8859-7' => 'iso-8859-7',
+ 'iso8859-8' => 'iso-8859-8',
+ 'iso8859-9' => 'iso-8859-9',
+ 'iso8859-10' => 'iso-8859-10',
+ 'iso8859-11' => 'iso-8859-11',
+ 'iso8859-12' => 'iso-8859-12',
+ 'iso8859-13' => 'iso-8859-13',
+ 'iso8859-14' => 'iso-8859-14',
+ 'iso8859-15' => 'iso-8859-15',
+ 'iso8859-16' => 'iso-8859-16',
+ 'iso_8859-1' => 'iso-8859-1',
+ 'iso_8859-2' => 'iso-8859-2',
+ 'iso_8859-3' => 'iso-8859-3',
+ 'iso_8859-4' => 'iso-8859-4',
+ 'iso_8859-5' => 'iso-8859-5',
+ 'iso_8859-6' => 'iso-8859-6',
+ 'iso_8859-7' => 'iso-8859-7',
+ 'iso_8859-8' => 'iso-8859-8',
+ 'iso_8859-9' => 'iso-8859-9',
+ 'iso_8859-10' => 'iso-8859-10',
+ 'iso_8859-11' => 'iso-8859-11',
+ 'iso_8859-12' => 'iso-8859-12',
+ 'iso_8859-13' => 'iso-8859-13',
+ 'iso_8859-14' => 'iso-8859-14',
+ 'iso_8859-15' => 'iso-8859-15',
+ 'iso_8859-16' => 'iso-8859-16',
+ 'iso88591' => 'iso-8859-1',
+ 'iso88592' => 'iso-8859-2',
+ 'iso88593' => 'iso-8859-3',
+ 'iso88594' => 'iso-8859-4',
+ 'iso88595' => 'iso-8859-5',
+ 'iso88596' => 'iso-8859-6',
+ 'iso88597' => 'iso-8859-7',
+ 'iso88598' => 'iso-8859-8',
+ 'iso88599' => 'iso-8859-9',
+ 'iso885910' => 'iso-8859-10',
+ 'iso885911' => 'iso-8859-11',
+ 'iso885912' => 'iso-8859-12',
+ 'iso885913' => 'iso-8859-13',
+ 'iso885914' => 'iso-8859-14',
+ 'iso885915' => 'iso-8859-15',
+ 'iso885916' => 'iso-8859-16',
+ ];
+ private static $translitMap = [];
+ private static $convertMap = [];
+ private static $errorHandler;
+ private static $lastError;
+
+ private static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4];
+ private static $isValidUtf8;
+
+ public static function iconv($inCharset, $outCharset, $str)
+ {
+ $str = (string) $str;
+ if ('' === $str) {
+ return '';
+ }
+
+ // Prepare for //IGNORE and //TRANSLIT
+
+ $translit = $ignore = '';
+
+ $outCharset = strtolower($outCharset);
+ $inCharset = strtolower($inCharset);
+
+ if ('' === $outCharset) {
+ $outCharset = 'iso-8859-1';
+ }
+ if ('' === $inCharset) {
+ $inCharset = 'iso-8859-1';
+ }
+
+ do {
+ $loop = false;
+
+ if ('//translit' === substr($outCharset, -10)) {
+ $loop = $translit = true;
+ $outCharset = substr($outCharset, 0, -10);
+ }
+
+ if ('//ignore' === substr($outCharset, -8)) {
+ $loop = $ignore = true;
+ $outCharset = substr($outCharset, 0, -8);
+ }
+ } while ($loop);
+
+ do {
+ $loop = false;
+
+ if ('//translit' === substr($inCharset, -10)) {
+ $loop = true;
+ $inCharset = substr($inCharset, 0, -10);
+ }
+
+ if ('//ignore' === substr($inCharset, -8)) {
+ $loop = true;
+ $inCharset = substr($inCharset, 0, -8);
+ }
+ } while ($loop);
+
+ if (isset(self::$alias[$inCharset])) {
+ $inCharset = self::$alias[$inCharset];
+ }
+ if (isset(self::$alias[$outCharset])) {
+ $outCharset = self::$alias[$outCharset];
+ }
+
+ // Load charset maps
+
+ if (('utf-8' !== $inCharset && !self::loadMap('from.', $inCharset, $inMap))
+ || ('utf-8' !== $outCharset && !self::loadMap('to.', $outCharset, $outMap))) {
+ trigger_error(sprintf(self::ERROR_WRONG_CHARSET, $inCharset, $outCharset));
+
+ return false;
+ }
+
+ if ('utf-8' !== $inCharset) {
+ // Convert input to UTF-8
+ $result = '';
+ if (self::mapToUtf8($result, $inMap, $str, $ignore)) {
+ $str = $result;
+ } else {
+ $str = false;
+ }
+ self::$isValidUtf8 = true;
+ } else {
+ self::$isValidUtf8 = preg_match('//u', $str);
+
+ if (!self::$isValidUtf8 && !$ignore) {
+ trigger_error(self::ERROR_ILLEGAL_CHARACTER);
+
+ return false;
+ }
+
+ if ('utf-8' === $outCharset) {
+ // UTF-8 validation
+ $str = self::utf8ToUtf8($str, $ignore);
+ }
+ }
+
+ if ('utf-8' !== $outCharset && false !== $str) {
+ // Convert output to UTF-8
+ $result = '';
+ if (self::mapFromUtf8($result, $outMap, $str, $ignore, $translit)) {
+ return $result;
+ }
+
+ return false;
+ }
+
+ return $str;
+ }
+
+ public static function iconv_mime_decode_headers($str, $mode = 0, $charset = null)
+ {
+ if (null === $charset) {
+ $charset = self::$internalEncoding;
+ }
+
+ if (false !== strpos($str, "\r")) {
+ $str = strtr(str_replace("\r\n", "\n", $str), "\r", "\n");
+ }
+ $str = explode("\n\n", $str, 2);
+
+ $headers = [];
+
+ $str = preg_split('/\n(?![ \t])/', $str[0]);
+ foreach ($str as $str) {
+ $str = self::iconv_mime_decode($str, $mode, $charset);
+ if (false === $str) {
+ return false;
+ }
+ $str = explode(':', $str, 2);
+
+ if (2 === \count($str)) {
+ if (isset($headers[$str[0]])) {
+ if (!\is_array($headers[$str[0]])) {
+ $headers[$str[0]] = [$headers[$str[0]]];
+ }
+ $headers[$str[0]][] = ltrim($str[1]);
+ } else {
+ $headers[$str[0]] = ltrim($str[1]);
+ }
+ }
+ }
+
+ return $headers;
+ }
+
+ public static function iconv_mime_decode($str, $mode = 0, $charset = null)
+ {
+ if (null === $charset) {
+ $charset = self::$internalEncoding;
+ }
+ if (\ICONV_MIME_DECODE_CONTINUE_ON_ERROR & $mode) {
+ $charset .= '//IGNORE';
+ }
+
+ if (false !== strpos($str, "\r")) {
+ $str = strtr(str_replace("\r\n", "\n", $str), "\r", "\n");
+ }
+ $str = preg_split('/\n(?![ \t])/', rtrim($str), 2);
+ $str = preg_replace('/[ \t]*\n[ \t]+/', ' ', rtrim($str[0]));
+ $str = preg_split('/=\?([^?]+)\?([bqBQ])\?(.*?)\?=/', $str, -1, \PREG_SPLIT_DELIM_CAPTURE);
+
+ $result = self::iconv('utf-8', $charset, $str[0]);
+ if (false === $result) {
+ return false;
+ }
+
+ $i = 1;
+ $len = \count($str);
+
+ while ($i < $len) {
+ $c = strtolower($str[$i]);
+ if ((\ICONV_MIME_DECODE_CONTINUE_ON_ERROR & $mode)
+ && 'utf-8' !== $c
+ && !isset(self::$alias[$c])
+ && !self::loadMap('from.', $c, $d)) {
+ $d = false;
+ } elseif ('B' === strtoupper($str[$i + 1])) {
+ $d = base64_decode($str[$i + 2]);
+ } else {
+ $d = rawurldecode(strtr(str_replace('%', '%25', $str[$i + 2]), '=_', '% '));
+ }
+
+ if (false !== $d) {
+ if ('' !== $d) {
+ if ('' === $d = self::iconv($c, $charset, $d)) {
+ $str[$i + 3] = substr($str[$i + 3], 1);
+ } else {
+ $result .= $d;
+ }
+ }
+ $d = self::iconv('utf-8', $charset, $str[$i + 3]);
+ if ('' !== trim($d)) {
+ $result .= $d;
+ }
+ } elseif (\ICONV_MIME_DECODE_CONTINUE_ON_ERROR & $mode) {
+ $result .= "=?{$str[$i]}?{$str[$i + 1]}?{$str[$i + 2]}?={$str[$i + 3]}";
+ } else {
+ $result = false;
+ break;
+ }
+
+ $i += 4;
+ }
+
+ return $result;
+ }
+
+ public static function iconv_get_encoding($type = 'all')
+ {
+ switch ($type) {
+ case 'input_encoding': return self::$inputEncoding;
+ case 'output_encoding': return self::$outputEncoding;
+ case 'internal_encoding': return self::$internalEncoding;
+ }
+
+ return [
+ 'input_encoding' => self::$inputEncoding,
+ 'output_encoding' => self::$outputEncoding,
+ 'internal_encoding' => self::$internalEncoding,
+ ];
+ }
+
+ public static function iconv_set_encoding($type, $charset)
+ {
+ switch ($type) {
+ case 'input_encoding': self::$inputEncoding = $charset; break;
+ case 'output_encoding': self::$outputEncoding = $charset; break;
+ case 'internal_encoding': self::$internalEncoding = $charset; break;
+ default: return false;
+ }
+
+ return true;
+ }
+
+ public static function iconv_mime_encode($fieldName, $fieldValue, $pref = null)
+ {
+ if (!\is_array($pref)) {
+ $pref = [];
+ }
+
+ $pref += [
+ 'scheme' => 'B',
+ 'input-charset' => self::$internalEncoding,
+ 'output-charset' => self::$internalEncoding,
+ 'line-length' => 76,
+ 'line-break-chars' => "\r\n",
+ ];
+
+ if (preg_match('/[\x80-\xFF]/', $fieldName)) {
+ $fieldName = '';
+ }
+
+ $scheme = strtoupper(substr($pref['scheme'], 0, 1));
+ $in = strtolower($pref['input-charset']);
+ $out = strtolower($pref['output-charset']);
+
+ if ('utf-8' !== $in && false === $fieldValue = self::iconv($in, 'utf-8', $fieldValue)) {
+ return false;
+ }
+
+ preg_match_all('/./us', $fieldValue, $chars);
+
+ $chars = $chars[0] ?? [];
+
+ $lineBreak = (int) $pref['line-length'];
+ $lineStart = "=?{$pref['output-charset']}?{$scheme}?";
+ $lineLength = \strlen($fieldName) + 2 + \strlen($lineStart) + 2;
+ $lineOffset = \strlen($lineStart) + 3;
+ $lineData = '';
+
+ $fieldValue = [];
+
+ $Q = 'Q' === $scheme;
+
+ foreach ($chars as $c) {
+ if ('utf-8' !== $out && false === $c = self::iconv('utf-8', $out, $c)) {
+ return false;
+ }
+
+ $o = $Q
+ ? $c = preg_replace_callback(
+ '/[=_\?\x00-\x1F\x80-\xFF]/',
+ [__CLASS__, 'qpByteCallback'],
+ $c
+ )
+ : base64_encode($lineData.$c);
+
+ if (isset($o[$lineBreak - $lineLength])) {
+ if (!$Q) {
+ $lineData = base64_encode($lineData);
+ }
+ $fieldValue[] = $lineStart.$lineData.'?=';
+ $lineLength = $lineOffset;
+ $lineData = '';
+ }
+
+ $lineData .= $c;
+ $Q && $lineLength += \strlen($c);
+ }
+
+ if ('' !== $lineData) {
+ if (!$Q) {
+ $lineData = base64_encode($lineData);
+ }
+ $fieldValue[] = $lineStart.$lineData.'?=';
+ }
+
+ return $fieldName.': '.implode($pref['line-break-chars'].' ', $fieldValue);
+ }
+
+ public static function iconv_strlen($s, $encoding = null)
+ {
+ static $hasXml = null;
+ if (null === $hasXml) {
+ $hasXml = \extension_loaded('xml');
+ }
+
+ if ($hasXml) {
+ return self::strlen1($s, $encoding);
+ }
+
+ return self::strlen2($s, $encoding);
+ }
+
+ public static function strlen1($s, $encoding = null)
+ {
+ if (null === $encoding) {
+ $encoding = self::$internalEncoding;
+ }
+ if (0 !== stripos($encoding, 'utf-8') && false === $s = self::iconv($encoding, 'utf-8', $s)) {
+ return false;
+ }
+
+ return \strlen(utf8_decode($s));
+ }
+
+ public static function strlen2($s, $encoding = null)
+ {
+ if (null === $encoding) {
+ $encoding = self::$internalEncoding;
+ }
+ if (0 !== stripos($encoding, 'utf-8') && false === $s = self::iconv($encoding, 'utf-8', $s)) {
+ return false;
+ }
+
+ $ulenMask = self::$ulenMask;
+
+ $i = 0;
+ $j = 0;
+ $len = \strlen($s);
+
+ while ($i < $len) {
+ $u = $s[$i] & "\xF0";
+ $i += $ulenMask[$u] ?? 1;
+ ++$j;
+ }
+
+ return $j;
+ }
+
+ public static function iconv_strpos($haystack, $needle, $offset = 0, $encoding = null)
+ {
+ if (null === $encoding) {
+ $encoding = self::$internalEncoding;
+ }
+
+ if (0 !== stripos($encoding, 'utf-8')) {
+ if (false === $haystack = self::iconv($encoding, 'utf-8', $haystack)) {
+ return false;
+ }
+ if (false === $needle = self::iconv($encoding, 'utf-8', $needle)) {
+ return false;
+ }
+ }
+
+ if ($offset = (int) $offset) {
+ $haystack = self::iconv_substr($haystack, $offset, 2147483647, 'utf-8');
+ }
+ $pos = strpos($haystack, $needle);
+
+ return false === $pos ? false : ($offset + ($pos ? self::iconv_strlen(substr($haystack, 0, $pos), 'utf-8') : 0));
+ }
+
+ public static function iconv_strrpos($haystack, $needle, $encoding = null)
+ {
+ if (null === $encoding) {
+ $encoding = self::$internalEncoding;
+ }
+
+ if (0 !== stripos($encoding, 'utf-8')) {
+ if (false === $haystack = self::iconv($encoding, 'utf-8', $haystack)) {
+ return false;
+ }
+ if (false === $needle = self::iconv($encoding, 'utf-8', $needle)) {
+ return false;
+ }
+ }
+
+ $pos = isset($needle[0]) ? strrpos($haystack, $needle) : false;
+
+ return false === $pos ? false : self::iconv_strlen($pos ? substr($haystack, 0, $pos) : $haystack, 'utf-8');
+ }
+
+ public static function iconv_substr($s, $start, $length = 2147483647, $encoding = null)
+ {
+ if (null === $encoding) {
+ $encoding = self::$internalEncoding;
+ }
+ if (0 !== stripos($encoding, 'utf-8')) {
+ $encoding = null;
+ } elseif (false === $s = self::iconv($encoding, 'utf-8', $s)) {
+ return false;
+ }
+
+ $s = (string) $s;
+ $slen = self::iconv_strlen($s, 'utf-8');
+ $start = (int) $start;
+
+ if (0 > $start) {
+ $start += $slen;
+ }
+ if (0 > $start) {
+ if (\PHP_VERSION_ID < 80000) {
+ return false;
+ }
+
+ $start = 0;
+ }
+ if ($start >= $slen) {
+ return \PHP_VERSION_ID >= 80000 ? '' : false;
+ }
+
+ $rx = $slen - $start;
+
+ if (0 > $length) {
+ $length += $rx;
+ }
+ if (0 === $length) {
+ return '';
+ }
+ if (0 > $length) {
+ return \PHP_VERSION_ID >= 80000 ? '' : false;
+ }
+
+ if ($length > $rx) {
+ $length = $rx;
+ }
+
+ $rx = '/^'.($start ? self::pregOffset($start) : '').'('.self::pregOffset($length).')/u';
+
+ $s = preg_match($rx, $s, $s) ? $s[1] : '';
+
+ if (null === $encoding) {
+ return $s;
+ }
+
+ return self::iconv('utf-8', $encoding, $s);
+ }
+
+ private static function loadMap($type, $charset, &$map)
+ {
+ if (!isset(self::$convertMap[$type.$charset])) {
+ if (false === $map = self::getData($type.$charset)) {
+ if ('to.' === $type && self::loadMap('from.', $charset, $map)) {
+ $map = array_flip($map);
+ } else {
+ return false;
+ }
+ }
+
+ self::$convertMap[$type.$charset] = $map;
+ } else {
+ $map = self::$convertMap[$type.$charset];
+ }
+
+ return true;
+ }
+
+ private static function utf8ToUtf8($str, $ignore)
+ {
+ $ulenMask = self::$ulenMask;
+ $valid = self::$isValidUtf8;
+
+ $u = $str;
+ $i = $j = 0;
+ $len = \strlen($str);
+
+ while ($i < $len) {
+ if ($str[$i] < "\x80") {
+ $u[$j++] = $str[$i++];
+ } else {
+ $ulen = $str[$i] & "\xF0";
+ $ulen = $ulenMask[$ulen] ?? 1;
+ $uchr = substr($str, $i, $ulen);
+
+ if (1 === $ulen || !($valid || preg_match('/^.$/us', $uchr))) {
+ if ($ignore) {
+ ++$i;
+ continue;
+ }
+
+ trigger_error(self::ERROR_ILLEGAL_CHARACTER);
+
+ return false;
+ }
+
+ $i += $ulen;
+
+ $u[$j++] = $uchr[0];
+
+ isset($uchr[1]) && 0 !== ($u[$j++] = $uchr[1])
+ && isset($uchr[2]) && 0 !== ($u[$j++] = $uchr[2])
+ && isset($uchr[3]) && 0 !== ($u[$j++] = $uchr[3]);
+ }
+ }
+
+ return substr($u, 0, $j);
+ }
+
+ private static function mapToUtf8(&$result, array $map, $str, $ignore)
+ {
+ $len = \strlen($str);
+ for ($i = 0; $i < $len; ++$i) {
+ if (isset($str[$i + 1], $map[$str[$i].$str[$i + 1]])) {
+ $result .= $map[$str[$i].$str[++$i]];
+ } elseif (isset($map[$str[$i]])) {
+ $result .= $map[$str[$i]];
+ } elseif (!$ignore) {
+ trigger_error(self::ERROR_ILLEGAL_CHARACTER);
+
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ private static function mapFromUtf8(&$result, array $map, $str, $ignore, $translit)
+ {
+ $ulenMask = self::$ulenMask;
+ $valid = self::$isValidUtf8;
+
+ if ($translit && !self::$translitMap) {
+ self::$translitMap = self::getData('translit');
+ }
+
+ $i = 0;
+ $len = \strlen($str);
+
+ while ($i < $len) {
+ if ($str[$i] < "\x80") {
+ $uchr = $str[$i++];
+ } else {
+ $ulen = $str[$i] & "\xF0";
+ $ulen = $ulenMask[$ulen] ?? 1;
+ $uchr = substr($str, $i, $ulen);
+
+ if ($ignore && (1 === $ulen || !($valid || preg_match('/^.$/us', $uchr)))) {
+ ++$i;
+ continue;
+ }
+
+ $i += $ulen;
+ }
+
+ if (isset($map[$uchr])) {
+ $result .= $map[$uchr];
+ } elseif ($translit) {
+ if (isset(self::$translitMap[$uchr])) {
+ $uchr = self::$translitMap[$uchr];
+ } elseif ($uchr >= "\xC3\x80") {
+ $uchr = \Normalizer::normalize($uchr, \Normalizer::NFD);
+
+ if ($uchr[0] < "\x80") {
+ $uchr = $uchr[0];
+ } elseif ($ignore) {
+ continue;
+ } else {
+ return false;
+ }
+ } elseif ($ignore) {
+ continue;
+ } else {
+ return false;
+ }
+
+ $str = $uchr.substr($str, $i);
+ $len = \strlen($str);
+ $i = 0;
+ } elseif (!$ignore) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ private static function qpByteCallback(array $m)
+ {
+ return '='.strtoupper(dechex(\ord($m[0])));
+ }
+
+ private static function pregOffset($offset)
+ {
+ $rx = [];
+ $offset = (int) $offset;
+
+ while ($offset > 65535) {
+ $rx[] = '.{65535}';
+ $offset -= 65535;
+ }
+
+ return implode('', $rx).'.{'.$offset.'}';
+ }
+
+ private static function getData($file)
+ {
+ if (file_exists($file = __DIR__.'/Resources/charset/'.$file.'.php')) {
+ return require $file;
+ }
+
+ return false;
+ }
+}
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/LICENSE b/dev/plugins/email/vendor/symfony/polyfill-iconv/LICENSE
new file mode 100644
index 00000000..4cd8bdd3
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-iconv/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2015-2019 Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/README.md b/dev/plugins/email/vendor/symfony/polyfill-iconv/README.md
new file mode 100644
index 00000000..b0c8984c
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-iconv/README.md
@@ -0,0 +1,14 @@
+Symfony Polyfill / Iconv
+========================
+
+This component provides a native PHP implementation of the
+[php.net/iconv](https://php.net/iconv) functions
+(short of [`ob_iconv_handler`](https://php.net/ob-iconv-handler)).
+
+More information can be found in the
+[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md).
+
+License
+=======
+
+This library is released under the [MIT license](LICENSE).
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.big5.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.big5.php
new file mode 100644
index 00000000..b1198549
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.big5.php
@@ -0,0 +1,13719 @@
+ ' ',
+ '¡A' => ',',
+ '¡B' => 'ã€',
+ '¡C' => '。',
+ '¡D' => '.',
+ '¡E' => '•',
+ '¡F' => 'ï¼›',
+ '¡G' => ':',
+ '¡H' => '?',
+ '¡I' => 'ï¼',
+ '¡J' => '︰',
+ '¡K' => '…',
+ '¡L' => '‥',
+ '¡M' => 'ï¹',
+ '¡N' => '、',
+ '¡O' => 'ï¹’',
+ '¡P' => '·',
+ '¡Q' => 'ï¹”',
+ '¡R' => '﹕',
+ '¡S' => 'ï¹–',
+ '¡T' => 'ï¹—',
+ '¡U' => '|',
+ '¡V' => '–',
+ '¡W' => '︱',
+ '¡X' => '—',
+ '¡Y' => '︳',
+ '¡Z' => '�',
+ '¡[' => '︴',
+ '¡\\' => 'ï¹',
+ '¡]' => '(',
+ '¡^' => ')',
+ '¡_' => '︵',
+ '¡`' => '︶',
+ '¡a' => 'ï½›',
+ '¡b' => 'ï½',
+ '¡c' => '︷',
+ '¡d' => '︸',
+ '¡e' => '〔',
+ '¡f' => '〕',
+ '¡g' => '︹',
+ '¡h' => '︺',
+ '¡i' => 'ã€',
+ '¡j' => '】',
+ '¡k' => '︻',
+ '¡l' => '︼',
+ '¡m' => '《',
+ '¡n' => '》',
+ '¡o' => '︽',
+ '¡p' => '︾',
+ '¡q' => '〈',
+ '¡r' => '〉',
+ '¡s' => '︿',
+ '¡t' => 'ï¹€',
+ '¡u' => '「',
+ '¡v' => 'ã€',
+ '¡w' => 'ï¹',
+ '¡x' => '﹂',
+ '¡y' => '『',
+ '¡z' => 'ã€',
+ '¡{' => '﹃',
+ '¡|' => '﹄',
+ '¡}' => 'ï¹™',
+ '¡~' => '﹚',
+ '¡¡' => 'ï¹›',
+ '¡¢' => '﹜',
+ '¡£' => 'ï¹',
+ '¡¤' => '﹞',
+ '¡¥' => '‘',
+ '¡¦' => '’',
+ '¡§' => '“',
+ '¡¨' => 'â€',
+ '¡©' => 'ã€',
+ '¡ª' => '〞',
+ '¡«' => '‵',
+ '¡¬' => '′',
+ '¡' => '#',
+ '¡®' => '&',
+ '¡¯' => '*',
+ '¡°' => '※',
+ '¡±' => '§',
+ '¡²' => '〃',
+ '¡³' => 'â—‹',
+ '¡´' => 'â—',
+ '¡µ' => 'â–³',
+ '¡¶' => 'â–²',
+ '¡·' => 'â—Ž',
+ '¡¸' => '☆',
+ '¡¹' => '★',
+ '¡º' => 'â—‡',
+ '¡»' => 'â—†',
+ '¡¼' => 'â–¡',
+ '¡½' => 'â– ',
+ '¡¾' => 'â–½',
+ '¡¿' => 'â–¼',
+ '¡À' => '㊣',
+ '¡Á' => 'â„…',
+ '¡Â' => '‾',
+ '¡Ã' => '�',
+ '¡Ä' => '_',
+ '¡Å' => '�',
+ '¡Æ' => '﹉',
+ '¡Ç' => '﹊',
+ '¡È' => 'ï¹',
+ '¡É' => '﹎',
+ '¡Ê' => '﹋',
+ '¡Ë' => '﹌',
+ '¡Ì' => '﹟',
+ '¡Í' => 'ï¹ ',
+ '¡Î' => '﹡',
+ '¡Ï' => '+',
+ '¡Ð' => 'ï¼',
+ '¡Ñ' => '×',
+ '¡Ò' => '÷',
+ '¡Ó' => '±',
+ '¡Ô' => '√',
+ '¡Õ' => '<',
+ '¡Ö' => '>',
+ '¡×' => 'ï¼',
+ '¡Ø' => '≦',
+ '¡Ù' => '≧',
+ '¡Ú' => '≠',
+ '¡Û' => '∞',
+ '¡Ü' => '≒',
+ '¡Ý' => '≡',
+ '¡Þ' => 'ï¹¢',
+ '¡ß' => 'ï¹£',
+ '¡à' => '﹤',
+ '¡á' => 'ï¹¥',
+ '¡â' => '﹦',
+ '¡ã' => '∼',
+ '¡ä' => '∩',
+ '¡å' => '∪',
+ '¡æ' => '⊥',
+ '¡ç' => '∠',
+ '¡è' => '∟',
+ '¡é' => '⊿',
+ '¡ê' => 'ã’',
+ '¡ë' => 'ã‘',
+ '¡ì' => '∫',
+ '¡í' => '∮',
+ '¡î' => '∵',
+ '¡ï' => '∴',
+ '¡ð' => '♀',
+ '¡ñ' => '♂',
+ '¡ò' => 'â™',
+ '¡ó' => '☉',
+ '¡ô' => '↑',
+ '¡õ' => '↓',
+ '¡ö' => 'â†',
+ '¡÷' => '→',
+ '¡ø' => '↖',
+ '¡ù' => '↗',
+ '¡ú' => '↙',
+ '¡û' => '↘',
+ '¡ü' => '∥',
+ '¡ý' => '∣',
+ '¡þ' => '�',
+ '¢@' => '�',
+ '¢A' => 'ï¼',
+ '¢B' => 'ï¼¼',
+ '¢C' => '$',
+ '¢D' => 'Â¥',
+ '¢E' => '〒',
+ '¢F' => '¢',
+ '¢G' => '£',
+ '¢H' => 'ï¼…',
+ '¢I' => 'ï¼ ',
+ '¢J' => '℃',
+ '¢K' => '℉',
+ '¢L' => '﹩',
+ '¢M' => '﹪',
+ '¢N' => '﹫',
+ '¢O' => 'ã•',
+ '¢P' => '㎜',
+ '¢Q' => 'ãŽ',
+ '¢R' => '㎞',
+ '¢S' => 'ãŽ',
+ '¢T' => '㎡',
+ '¢U' => '㎎',
+ '¢V' => 'ãŽ',
+ '¢W' => 'ã„',
+ '¢X' => '°',
+ '¢Y' => 'å…™',
+ '¢Z' => 'å…›',
+ '¢[' => 'å…ž',
+ '¢\\' => 'å…',
+ '¢]' => 'å…¡',
+ '¢^' => 'å…£',
+ '¢_' => 'å—§',
+ '¢`' => 'ç“©',
+ '¢a' => '糎',
+ '¢b' => 'â–',
+ '¢c' => 'â–‚',
+ '¢d' => 'â–ƒ',
+ '¢e' => 'â–„',
+ '¢f' => 'â–…',
+ '¢g' => 'â–†',
+ '¢h' => 'â–‡',
+ '¢i' => 'â–ˆ',
+ '¢j' => 'â–',
+ '¢k' => 'â–Ž',
+ '¢l' => 'â–',
+ '¢m' => 'â–Œ',
+ '¢n' => 'â–‹',
+ '¢o' => 'â–Š',
+ '¢p' => 'â–‰',
+ '¢q' => '┼',
+ '¢r' => 'â”´',
+ '¢s' => '┬',
+ '¢t' => '┤',
+ '¢u' => '├',
+ '¢v' => 'â–”',
+ '¢w' => '─',
+ '¢x' => '│',
+ '¢y' => 'â–•',
+ '¢z' => '┌',
+ '¢{' => 'â”',
+ '¢|' => 'â””',
+ '¢}' => '┘',
+ '¢~' => 'â•',
+ '¢¡' => 'â•®',
+ '¢¢' => 'â•°',
+ '¢£' => '╯',
+ '¢¤' => 'â•',
+ '¢¥' => 'â•ž',
+ '¢¦' => '╪',
+ '¢§' => 'â•¡',
+ '¢¨' => 'â—¢',
+ '¢©' => 'â—£',
+ '¢ª' => 'â—¥',
+ '¢«' => 'â—¤',
+ '¢¬' => '╱',
+ '¢' => '╲',
+ '¢®' => '╳',
+ '¢¯' => 'ï¼',
+ '¢°' => '1',
+ '¢±' => 'ï¼’',
+ '¢²' => '3',
+ '¢³' => 'ï¼”',
+ '¢´' => '5',
+ '¢µ' => 'ï¼–',
+ '¢¶' => 'ï¼—',
+ '¢·' => '8',
+ '¢¸' => 'ï¼™',
+ '¢¹' => 'â… ',
+ '¢º' => 'â…¡',
+ '¢»' => 'â…¢',
+ '¢¼' => 'â…£',
+ '¢½' => 'â…¤',
+ '¢¾' => 'â…¥',
+ '¢¿' => 'â…¦',
+ '¢À' => 'â…§',
+ '¢Á' => 'â…¨',
+ '¢Â' => 'â…©',
+ '¢Ã' => '〡',
+ '¢Ä' => '〢',
+ '¢Å' => '〣',
+ '¢Æ' => '〤',
+ '¢Ç' => '〥',
+ '¢È' => '〦',
+ '¢É' => '〧',
+ '¢Ê' => '〨',
+ '¢Ë' => '〩',
+ '¢Ì' => '�',
+ '¢Í' => 'å„',
+ '¢Î' => '�',
+ '¢Ï' => 'A',
+ '¢Ð' => 'ï¼¢',
+ '¢Ñ' => 'ï¼£',
+ '¢Ò' => 'D',
+ '¢Ó' => 'ï¼¥',
+ '¢Ô' => 'F',
+ '¢Õ' => 'G',
+ '¢Ö' => 'H',
+ '¢×' => 'I',
+ '¢Ø' => 'J',
+ '¢Ù' => 'K',
+ '¢Ú' => 'L',
+ '¢Û' => 'ï¼',
+ '¢Ü' => 'ï¼®',
+ '¢Ý' => 'O',
+ '¢Þ' => 'ï¼°',
+ '¢ß' => 'ï¼±',
+ '¢à' => 'ï¼²',
+ '¢á' => 'ï¼³',
+ '¢â' => 'ï¼´',
+ '¢ã' => 'ï¼µ',
+ '¢ä' => 'V',
+ '¢å' => 'ï¼·',
+ '¢æ' => 'X',
+ '¢ç' => 'ï¼¹',
+ '¢è' => 'Z',
+ '¢é' => 'ï½',
+ '¢ê' => 'b',
+ '¢ë' => 'c',
+ '¢ì' => 'd',
+ '¢í' => 'ï½…',
+ '¢î' => 'f',
+ '¢ï' => 'g',
+ '¢ð' => 'h',
+ '¢ñ' => 'i',
+ '¢ò' => 'j',
+ '¢ó' => 'k',
+ '¢ô' => 'l',
+ '¢õ' => 'ï½',
+ '¢ö' => 'n',
+ '¢÷' => 'ï½',
+ '¢ø' => 'ï½',
+ '¢ù' => 'q',
+ '¢ú' => 'ï½’',
+ '¢û' => 's',
+ '¢ü' => 'ï½”',
+ '¢ý' => 'u',
+ '¢þ' => 'ï½–',
+ '£@' => 'ï½—',
+ '£A' => 'x',
+ '£B' => 'ï½™',
+ '£C' => 'z',
+ '£D' => 'Α',
+ '£E' => 'Î’',
+ '£F' => 'Γ',
+ '£G' => 'Δ',
+ '£H' => 'Ε',
+ '£I' => 'Ζ',
+ '£J' => 'Η',
+ '£K' => 'Θ',
+ '£L' => 'Ι',
+ '£M' => 'Κ',
+ '£N' => 'Λ',
+ '£O' => 'Îœ',
+ '£P' => 'Î',
+ '£Q' => 'Ξ',
+ '£R' => 'Ο',
+ '£S' => 'Î ',
+ '£T' => 'Ρ',
+ '£U' => 'Σ',
+ '£V' => 'Τ',
+ '£W' => 'Î¥',
+ '£X' => 'Φ',
+ '£Y' => 'Χ',
+ '£Z' => 'Ψ',
+ '£[' => 'Ω',
+ '£\\' => 'α',
+ '£]' => 'β',
+ '£^' => 'γ',
+ '£_' => 'δ',
+ '£`' => 'ε',
+ '£a' => 'ζ',
+ '£b' => 'η',
+ '£c' => 'θ',
+ '£d' => 'ι',
+ '£e' => 'κ',
+ '£f' => 'λ',
+ '£g' => 'μ',
+ '£h' => 'ν',
+ '£i' => 'ξ',
+ '£j' => 'ο',
+ '£k' => 'Ï€',
+ '£l' => 'Ï',
+ '£m' => 'σ',
+ '£n' => 'Ï„',
+ '£o' => 'Ï…',
+ '£p' => 'φ',
+ '£q' => 'χ',
+ '£r' => 'ψ',
+ '£s' => 'ω',
+ '£t' => 'ã„…',
+ '£u' => 'ㄆ',
+ '£v' => 'ㄇ',
+ '£w' => 'ㄈ',
+ '£x' => 'ㄉ',
+ '£y' => 'ã„Š',
+ '£z' => 'ã„‹',
+ '£{' => 'ã„Œ',
+ '£|' => 'ã„',
+ '£}' => 'ã„Ž',
+ '£~' => 'ã„',
+ '£¡' => 'ã„',
+ '£¢' => 'ã„‘',
+ '££' => 'ã„’',
+ '£¤' => 'ã„“',
+ '£¥' => 'ã„”',
+ '£¦' => 'ã„•',
+ '£§' => 'ã„–',
+ '£¨' => 'ã„—',
+ '£©' => 'ㄘ',
+ '£ª' => 'ã„™',
+ '£«' => 'ã„š',
+ '£¬' => 'ã„›',
+ '£' => 'ã„œ',
+ '£®' => 'ã„',
+ '£¯' => 'ã„ž',
+ '£°' => 'ã„Ÿ',
+ '£±' => 'ã„ ',
+ '£²' => 'ã„¡',
+ '£³' => 'ã„¢',
+ '£´' => 'ã„£',
+ '£µ' => 'ㄤ',
+ '£¶' => 'ã„¥',
+ '£·' => 'ㄦ',
+ '£¸' => 'ㄧ',
+ '£¹' => 'ㄨ',
+ '£º' => 'ã„©',
+ '£»' => 'Ë™',
+ '£¼' => 'ˉ',
+ '£½' => 'ËŠ',
+ '£¾' => 'ˇ',
+ '£¿' => 'Ë‹',
+ '¤@' => '一',
+ '¤A' => 'ä¹™',
+ '¤B' => 'ä¸',
+ '¤C' => '七',
+ '¤D' => '乃',
+ '¤E' => 'ä¹',
+ '¤F' => '了',
+ '¤G' => '二',
+ '¤H' => '人',
+ '¤I' => 'å„¿',
+ '¤J' => 'å…¥',
+ '¤K' => 'å…«',
+ '¤L' => 'å‡ ',
+ '¤M' => '刀',
+ '¤N' => 'åˆ',
+ '¤O' => '力',
+ '¤P' => '匕',
+ '¤Q' => 'å',
+ '¤R' => 'åœ',
+ '¤S' => 'åˆ',
+ '¤T' => '三',
+ '¤U' => '下',
+ '¤V' => '丈',
+ '¤W' => '上',
+ '¤X' => '丫',
+ '¤Y' => '丸',
+ '¤Z' => '凡',
+ '¤[' => 'ä¹…',
+ '¤\\' => '么',
+ '¤]' => '也',
+ '¤^' => '乞',
+ '¤_' => '于',
+ '¤`' => '亡',
+ '¤a' => 'å…€',
+ '¤b' => '刃',
+ '¤c' => '勺',
+ '¤d' => 'åƒ',
+ '¤e' => 'å‰',
+ '¤f' => 'å£',
+ '¤g' => '土',
+ '¤h' => '士',
+ '¤i' => '夕',
+ '¤j' => '大',
+ '¤k' => '女',
+ '¤l' => 'å',
+ '¤m' => 'å‘',
+ '¤n' => 'å“',
+ '¤o' => '寸',
+ '¤p' => 'å°',
+ '¤q' => 'å°¢',
+ '¤r' => 'å°¸',
+ '¤s' => 'å±±',
+ '¤t' => 'å·',
+ '¤u' => 'å·¥',
+ '¤v' => 'å·±',
+ '¤w' => 'å·²',
+ '¤x' => 'å·³',
+ '¤y' => 'å·¾',
+ '¤z' => 'å¹²',
+ '¤{' => '廾',
+ '¤|' => '弋',
+ '¤}' => '弓',
+ '¤~' => 'æ‰',
+ '¤¡' => '丑',
+ '¤¢' => 'ä¸',
+ '¤£' => 'ä¸',
+ '¤¤' => 'ä¸',
+ '¤¥' => '丰',
+ '¤¦' => '丹',
+ '¤§' => '之',
+ '¤¨' => 'å°¹',
+ '¤©' => '予',
+ '¤ª' => '云',
+ '¤«' => '井',
+ '¤¬' => '互',
+ '¤' => '五',
+ '¤®' => '亢',
+ '¤¯' => 'ä»',
+ '¤°' => '什',
+ '¤±' => '仃',
+ '¤²' => '仆',
+ '¤³' => '仇',
+ '¤´' => 'ä»',
+ '¤µ' => '今',
+ '¤¶' => '介',
+ '¤·' => '仄',
+ '¤¸' => 'å…ƒ',
+ '¤¹' => 'å…',
+ '¤º' => 'å…§',
+ '¤»' => 'å…',
+ '¤¼' => 'å…®',
+ '¤½' => 'å…¬',
+ '¤¾' => '冗',
+ '¤¿' => '凶',
+ '¤À' => '分',
+ '¤Á' => '切',
+ '¤Â' => '刈',
+ '¤Ã' => 'å‹»',
+ '¤Ä' => '勾',
+ '¤Å' => 'å‹¿',
+ '¤Æ' => '化',
+ '¤Ç' => '匹',
+ '¤È' => 'åˆ',
+ '¤É' => 'å‡',
+ '¤Ê' => 'å…',
+ '¤Ë' => 'åž',
+ '¤Ì' => '厄',
+ '¤Í' => 'å‹',
+ '¤Î' => 'åŠ',
+ '¤Ï' => 'å',
+ '¤Ð' => '壬',
+ '¤Ñ' => '天',
+ '¤Ò' => '夫',
+ '¤Ó' => '太',
+ '¤Ô' => 'å¤',
+ '¤Õ' => 'å”',
+ '¤Ö' => 'å°‘',
+ '¤×' => 'å°¤',
+ '¤Ø' => 'å°º',
+ '¤Ù' => '屯',
+ '¤Ú' => 'å·´',
+ '¤Û' => 'å¹»',
+ '¤Ü' => '廿',
+ '¤Ý' => 'å¼”',
+ '¤Þ' => '引',
+ '¤ß' => '心',
+ '¤à' => '戈',
+ '¤á' => '戶',
+ '¤â' => '手',
+ '¤ã' => '扎',
+ '¤ä' => '支',
+ '¤å' => 'æ–‡',
+ '¤æ' => 'æ–—',
+ '¤ç' => 'æ–¤',
+ '¤è' => 'æ–¹',
+ '¤é' => 'æ—¥',
+ '¤ê' => 'æ›°',
+ '¤ë' => '月',
+ '¤ì' => '木',
+ '¤í' => 'æ¬ ',
+ '¤î' => 'æ¢',
+ '¤ï' => 'æ¹',
+ '¤ð' => '毋',
+ '¤ñ' => '比',
+ '¤ò' => '毛',
+ '¤ó' => 'æ°',
+ '¤ô' => 'æ°´',
+ '¤õ' => 'ç«',
+ '¤ö' => '爪',
+ '¤÷' => '父',
+ '¤ø' => '爻',
+ '¤ù' => '片',
+ '¤ú' => '牙',
+ '¤û' => '牛',
+ '¤ü' => '犬',
+ '¤ý' => '王',
+ '¤þ' => '丙',
+ '¥@' => '世',
+ '¥A' => '丕',
+ '¥B' => '且',
+ '¥C' => '丘',
+ '¥D' => '主',
+ '¥E' => 'ä¹',
+ '¥F' => 'ä¹',
+ '¥G' => '乎',
+ '¥H' => '以',
+ '¥I' => '付',
+ '¥J' => 'ä»”',
+ '¥K' => '仕',
+ '¥L' => 'ä»–',
+ '¥M' => 'ä»—',
+ '¥N' => '代',
+ '¥O' => '令',
+ '¥P' => 'ä»™',
+ '¥Q' => '仞',
+ '¥R' => 'å……',
+ '¥S' => 'å…„',
+ '¥T' => '冉',
+ '¥U' => '冊',
+ '¥V' => '冬',
+ '¥W' => '凹',
+ '¥X' => '出',
+ '¥Y' => '凸',
+ '¥Z' => '刊',
+ '¥[' => 'åŠ ',
+ '¥\\' => '功',
+ '¥]' => '包',
+ '¥^' => '匆',
+ '¥_' => '北',
+ '¥`' => 'åŒ',
+ '¥a' => '仟',
+ '¥b' => 'åŠ',
+ '¥c' => 'å‰',
+ '¥d' => 'å¡',
+ '¥e' => 'å ',
+ '¥f' => 'å¯',
+ '¥g' => 'å®',
+ '¥h' => '去',
+ '¥i' => 'å¯',
+ '¥j' => 'å¤',
+ '¥k' => 'å³',
+ '¥l' => 'å¬',
+ '¥m' => 'å®',
+ '¥n' => 'å©',
+ '¥o' => 'å¨',
+ '¥p' => 'å¼',
+ '¥q' => 'å¸',
+ '¥r' => 'åµ',
+ '¥s' => 'å«',
+ '¥t' => 'å¦',
+ '¥u' => 'åª',
+ '¥v' => 'å²',
+ '¥w' => 'å±',
+ '¥x' => 'å°',
+ '¥y' => 'å¥',
+ '¥z' => 'å',
+ '¥{' => 'å»',
+ '¥|' => 'å››',
+ '¥}' => '囚',
+ '¥~' => '外',
+ '¥¡' => '央',
+ '¥¢' => '失',
+ '¥£' => '奴',
+ '¥¤' => '奶',
+ '¥¥' => 'å•',
+ '¥¦' => '它',
+ '¥§' => 'å°¼',
+ '¥¨' => 'å·¨',
+ '¥©' => 'å·§',
+ '¥ª' => 'å·¦',
+ '¥«' => '市',
+ '¥¬' => '布',
+ '¥' => 'å¹³',
+ '¥®' => 'å¹¼',
+ '¥¯' => 'å¼',
+ '¥°' => '弘',
+ '¥±' => 'å¼—',
+ '¥²' => 'å¿…',
+ '¥³' => '戊',
+ '¥´' => '打',
+ '¥µ' => '扔',
+ '¥¶' => '扒',
+ '¥·' => '扑',
+ '¥¸' => 'æ–¥',
+ '¥¹' => 'æ—¦',
+ '¥º' => '朮',
+ '¥»' => '本',
+ '¥¼' => '未',
+ '¥½' => '末',
+ '¥¾' => 'æœ',
+ '¥¿' => 'æ£',
+ '¥À' => 'æ¯',
+ '¥Á' => 'æ°‘',
+ '¥Â' => 'æ°',
+ '¥Ã' => 'æ°¸',
+ '¥Ä' => 'æ±',
+ '¥Å' => 'æ±€',
+ '¥Æ' => 'æ°¾',
+ '¥Ç' => '犯',
+ '¥È' => '玄',
+ '¥É' => '玉',
+ '¥Ê' => 'ç“œ',
+ '¥Ë' => '瓦',
+ '¥Ì' => '甘',
+ '¥Í' => '生',
+ '¥Î' => '用',
+ '¥Ï' => '甩',
+ '¥Ð' => 'ç”°',
+ '¥Ñ' => 'ç”±',
+ '¥Ò' => '甲',
+ '¥Ó' => '申',
+ '¥Ô' => 'ç–‹',
+ '¥Õ' => '白',
+ '¥Ö' => 'çš®',
+ '¥×' => 'çš¿',
+ '¥Ø' => 'ç›®',
+ '¥Ù' => '矛',
+ '¥Ú' => '矢',
+ '¥Û' => '石',
+ '¥Ü' => '示',
+ '¥Ý' => '禾',
+ '¥Þ' => 'ç©´',
+ '¥ß' => 'ç«‹',
+ '¥à' => '丞',
+ '¥á' => '丟',
+ '¥â' => 'ä¹’',
+ '¥ã' => '乓',
+ '¥ä' => '乩',
+ '¥å' => '亙',
+ '¥æ' => '交',
+ '¥ç' => '亦',
+ '¥è' => '亥',
+ '¥é' => '仿',
+ '¥ê' => '伉',
+ '¥ë' => 'ä¼™',
+ '¥ì' => '伊',
+ '¥í' => '伕',
+ '¥î' => 'ä¼',
+ '¥ï' => 'ä¼',
+ '¥ð' => '休',
+ '¥ñ' => 'ä¼',
+ '¥ò' => '仲',
+ '¥ó' => '件',
+ '¥ô' => 'ä»»',
+ '¥õ' => 'ä»°',
+ '¥ö' => '仳',
+ '¥÷' => '份',
+ '¥ø' => 'ä¼',
+ '¥ù' => '伋',
+ '¥ú' => 'å…‰',
+ '¥û' => 'å…‡',
+ '¥ü' => 'å…†',
+ '¥ý' => 'å…ˆ',
+ '¥þ' => 'å…¨',
+ '¦@' => 'å…±',
+ '¦A' => 'å†',
+ '¦B' => '冰',
+ '¦C' => '列',
+ '¦D' => '刑',
+ '¦E' => '划',
+ '¦F' => '刎',
+ '¦G' => '刖',
+ '¦H' => '劣',
+ '¦I' => '匈',
+ '¦J' => '匡',
+ '¦K' => 'åŒ ',
+ '¦L' => 'å°',
+ '¦M' => 'å±',
+ '¦N' => 'å‰',
+ '¦O' => 'å',
+ '¦P' => 'åŒ',
+ '¦Q' => 'åŠ',
+ '¦R' => 'å',
+ '¦S' => 'å',
+ '¦T' => 'å‹',
+ '¦U' => 'å„',
+ '¦V' => 'å‘',
+ '¦W' => 'å',
+ '¦X' => 'åˆ',
+ '¦Y' => 'åƒ',
+ '¦Z' => 'åŽ',
+ '¦[' => 'å†',
+ '¦\\' => 'å’',
+ '¦]' => 'å› ',
+ '¦^' => '回',
+ '¦_' => 'å›',
+ '¦`' => '圳',
+ '¦a' => '地',
+ '¦b' => '在',
+ '¦c' => 'åœ',
+ '¦d' => '圬',
+ '¦e' => '圯',
+ '¦f' => '圩',
+ '¦g' => '夙',
+ '¦h' => '多',
+ '¦i' => '夷',
+ '¦j' => '夸',
+ '¦k' => '妄',
+ '¦l' => '奸',
+ '¦m' => '妃',
+ '¦n' => '好',
+ '¦o' => '她',
+ '¦p' => '如',
+ '¦q' => 'å¦',
+ '¦r' => 'å—',
+ '¦s' => 'å˜',
+ '¦t' => '宇',
+ '¦u' => '守',
+ '¦v' => 'å®…',
+ '¦w' => '安',
+ '¦x' => '寺',
+ '¦y' => 'å°–',
+ '¦z' => 'å±¹',
+ '¦{' => 'å·ž',
+ '¦|' => '帆',
+ '¦}' => '并',
+ '¦~' => 'å¹´',
+ '¦¡' => 'å¼',
+ '¦¢' => 'å¼›',
+ '¦£' => 'å¿™',
+ '¦¤' => 'å¿–',
+ '¦¥' => '戎',
+ '¦¦' => '戌',
+ '¦§' => 'æˆ',
+ '¦¨' => 'æˆ',
+ '¦©' => '扣',
+ '¦ª' => '扛',
+ '¦«' => '托',
+ '¦¬' => '收',
+ '¦' => 'æ—©',
+ '¦®' => 'æ—¨',
+ '¦¯' => 'æ—¬',
+ '¦°' => 'æ—',
+ '¦±' => '曲',
+ '¦²' => '曳',
+ '¦³' => '有',
+ '¦´' => '朽',
+ '¦µ' => '朴',
+ '¦¶' => '朱',
+ '¦·' => '朵',
+ '¦¸' => '次',
+ '¦¹' => 'æ¤',
+ '¦º' => 'æ»',
+ '¦»' => 'æ°–',
+ '¦¼' => 'æ±',
+ '¦½' => 'æ±—',
+ '¦¾' => 'æ±™',
+ '¦¿' => '江',
+ '¦À' => 'æ± ',
+ '¦Á' => 'æ±',
+ '¦Â' => '汕',
+ '¦Ã' => '污',
+ '¦Ä' => 'æ±›',
+ '¦Å' => 'æ±',
+ '¦Æ' => '汎',
+ '¦Ç' => 'ç°',
+ '¦È' => '牟',
+ '¦É' => 'ç‰',
+ '¦Ê' => '百',
+ '¦Ë' => '竹',
+ '¦Ì' => 'ç±³',
+ '¦Í' => '糸',
+ '¦Î' => '缶',
+ '¦Ï' => '羊',
+ '¦Ð' => 'ç¾½',
+ '¦Ñ' => 'è€',
+ '¦Ò' => '考',
+ '¦Ó' => '而',
+ '¦Ô' => '耒',
+ '¦Õ' => '耳',
+ '¦Ö' => 'è¿',
+ '¦×' => '肉',
+ '¦Ø' => 'è‚‹',
+ '¦Ù' => 'è‚Œ',
+ '¦Ú' => '臣',
+ '¦Û' => '自',
+ '¦Ü' => '至',
+ '¦Ý' => '臼',
+ '¦Þ' => '舌',
+ '¦ß' => '舛',
+ '¦à' => '舟',
+ '¦á' => '艮',
+ '¦â' => '色',
+ '¦ã' => '艾',
+ '¦ä' => '虫',
+ '¦å' => 'è¡€',
+ '¦æ' => 'è¡Œ',
+ '¦ç' => 'è¡£',
+ '¦è' => '西',
+ '¦é' => '阡',
+ '¦ê' => '串',
+ '¦ë' => '亨',
+ '¦ì' => 'ä½',
+ '¦í' => 'ä½',
+ '¦î' => '佇',
+ '¦ï' => 'ä½—',
+ '¦ð' => '佞',
+ '¦ñ' => 'ä¼´',
+ '¦ò' => 'ä½›',
+ '¦ó' => '何',
+ '¦ô' => 'ä¼°',
+ '¦õ' => 'ä½',
+ '¦ö' => '佑',
+ '¦÷' => 'ä¼½',
+ '¦ø' => '伺',
+ '¦ù' => '伸',
+ '¦ú' => '佃',
+ '¦û' => 'ä½”',
+ '¦ü' => 'ä¼¼',
+ '¦ý' => '但',
+ '¦þ' => 'ä½£',
+ '§@' => '作',
+ '§A' => 'ä½ ',
+ '§B' => '伯',
+ '§C' => '低',
+ '§D' => '伶',
+ '§E' => 'ä½™',
+ '§F' => 'ä½',
+ '§G' => '佈',
+ '§H' => '佚',
+ '§I' => 'å…Œ',
+ '§J' => 'å…‹',
+ '§K' => 'å…',
+ '§L' => 'å…µ',
+ '§M' => '冶',
+ '§N' => '冷',
+ '§O' => '別',
+ '§P' => '判',
+ '§Q' => '利',
+ '§R' => '刪',
+ '§S' => '刨',
+ '§T' => '劫',
+ '§U' => '助',
+ '§V' => '努',
+ '§W' => '劬',
+ '§X' => '匣',
+ '§Y' => 'å³',
+ '§Z' => 'åµ',
+ '§[' => 'å',
+ '§\\' => 'å',
+ '§]' => 'åž',
+ '§^' => 'å¾',
+ '§_' => 'å¦',
+ '§`' => 'å‘Ž',
+ '§a' => 'å§',
+ '§b' => '呆',
+ '§c' => '呃',
+ '§d' => 'å³',
+ '§e' => '呈',
+ '§f' => 'å‘‚',
+ '§g' => 'å›',
+ '§h' => 'å©',
+ '§i' => 'å‘Š',
+ '§j' => 'å¹',
+ '§k' => 'å»',
+ '§l' => 'å¸',
+ '§m' => 'å®',
+ '§n' => 'åµ',
+ '§o' => 'å¶',
+ '§p' => 'å ',
+ '§q' => 'å¼',
+ '§r' => 'å‘€',
+ '§s' => 'å±',
+ '§t' => 'å«',
+ '§u' => 'åŸ',
+ '§v' => 'å¬',
+ '§w' => '囪',
+ '§x' => 'å›°',
+ '§y' => '囤',
+ '§z' => '囫',
+ '§{' => 'åŠ',
+ '§|' => 'å‘',
+ '§}' => 'å€',
+ '§~' => 'å',
+ '§¡' => 'å‡',
+ '§¢' => 'åŽ',
+ '§£' => '圾',
+ '§¤' => 'å',
+ '§¥' => 'å',
+ '§¦' => '圻',
+ '§§' => '壯',
+ '§¨' => '夾',
+ '§©' => 'å¦',
+ '§ª' => '妒',
+ '§«' => '妨',
+ '§¬' => '妞',
+ '§' => '妣',
+ '§®' => '妙',
+ '§¯' => '妖',
+ '§°' => 'å¦',
+ '§±' => '妤',
+ '§²' => '妓',
+ '§³' => '妊',
+ '§´' => '妥',
+ '§µ' => 'å',
+ '§¶' => 'åœ',
+ '§·' => 'åš',
+ '§¸' => 'å›',
+ '§¹' => '完',
+ '§º' => '宋',
+ '§»' => 'å®',
+ '§¼' => 'å°¬',
+ '§½' => 'å±€',
+ '§¾' => 'å±',
+ '§¿' => 'å°¿',
+ '§À' => 'å°¾',
+ '§Á' => 'å²',
+ '§Â' => '岑',
+ '§Ã' => 'å²”',
+ '§Ä' => '岌',
+ '§Å' => 'å·«',
+ '§Æ' => '希',
+ '§Ç' => 'åº',
+ '§È' => '庇',
+ '§É' => '床',
+ '§Ê' => 'å»·',
+ '§Ë' => '弄',
+ '§Ì' => '弟',
+ '§Í' => '彤',
+ '§Î' => 'å½¢',
+ '§Ï' => 'å½·',
+ '§Ð' => 'å½¹',
+ '§Ñ' => '忘',
+ '§Ò' => 'å¿Œ',
+ '§Ó' => 'å¿—',
+ '§Ô' => 'å¿',
+ '§Õ' => '忱',
+ '§Ö' => 'å¿«',
+ '§×' => '忸',
+ '§Ø' => '忪',
+ '§Ù' => '戒',
+ '§Ú' => '我',
+ '§Û' => '抄',
+ '§Ü' => '抗',
+ '§Ý' => '抖',
+ '§Þ' => '技',
+ '§ß' => '扶',
+ '§à' => '抉',
+ '§á' => 'æ‰',
+ '§â' => '把',
+ '§ã' => '扼',
+ '§ä' => '找',
+ '§å' => '批',
+ '§æ' => '扳',
+ '§ç' => '抒',
+ '§è' => '扯',
+ '§é' => '折',
+ '§ê' => '扮',
+ '§ë' => '投',
+ '§ì' => '抓',
+ '§í' => '抑',
+ '§î' => '抆',
+ '§ï' => '改',
+ '§ð' => 'æ”»',
+ '§ñ' => '攸',
+ '§ò' => 'æ—±',
+ '§ó' => 'æ›´',
+ '§ô' => 'æŸ',
+ '§õ' => 'æŽ',
+ '§ö' => 'æ',
+ '§÷' => 'æ',
+ '§ø' => 'æ‘',
+ '§ù' => 'æœ',
+ '§ú' => 'æ–',
+ '§û' => 'æž',
+ '§ü' => 'æ‰',
+ '§ý' => 'æ†',
+ '§þ' => 'æ ',
+ '¨@' => 'æ“',
+ '¨A' => 'æ—',
+ '¨B' => 'æ¥',
+ '¨C' => 'æ¯',
+ '¨D' => '求',
+ '¨E' => '汞',
+ '¨F' => 'æ²™',
+ '¨G' => 'æ²',
+ '¨H' => '沈',
+ '¨I' => '沉',
+ '¨J' => 'æ²…',
+ '¨K' => 'æ²›',
+ '¨L' => '汪',
+ '¨M' => '決',
+ '¨N' => 'æ²',
+ '¨O' => 'æ±°',
+ '¨P' => '沌',
+ '¨Q' => '汨',
+ '¨R' => 'æ²–',
+ '¨S' => 'æ²’',
+ '¨T' => 'æ±½',
+ '¨U' => '沃',
+ '¨V' => 'æ±²',
+ '¨W' => 'æ±¾',
+ '¨X' => 'æ±´',
+ '¨Y' => '沆',
+ '¨Z' => '汶',
+ '¨[' => 'æ²',
+ '¨\\' => 'æ²”',
+ '¨]' => '沘',
+ '¨^' => '沂',
+ '¨_' => 'ç¶',
+ '¨`' => 'ç¼',
+ '¨a' => 'ç½',
+ '¨b' => 'ç¸',
+ '¨c' => '牢',
+ '¨d' => '牡',
+ '¨e' => 'ç‰ ',
+ '¨f' => 'ç‹„',
+ '¨g' => 'ç‹‚',
+ '¨h' => '玖',
+ '¨i' => '甬',
+ '¨j' => '甫',
+ '¨k' => 'ç”·',
+ '¨l' => '甸',
+ '¨m' => 'çš‚',
+ '¨n' => '盯',
+ '¨o' => '矣',
+ '¨p' => 'ç§',
+ '¨q' => '秀',
+ '¨r' => '禿',
+ '¨s' => '究',
+ '¨t' => 'ç³»',
+ '¨u' => '罕',
+ '¨v' => 'è‚–',
+ '¨w' => 'è‚“',
+ '¨x' => 'è‚',
+ '¨y' => '肘',
+ '¨z' => 'è‚›',
+ '¨{' => 'è‚š',
+ '¨|' => '育',
+ '¨}' => '良',
+ '¨~' => '芒',
+ '¨¡' => '芋',
+ '¨¢' => 'èŠ',
+ '¨£' => '見',
+ '¨¤' => '角',
+ '¨¥' => '言',
+ '¨¦' => 'è°·',
+ '¨§' => '豆',
+ '¨¨' => '豕',
+ '¨©' => 'è²',
+ '¨ª' => '赤',
+ '¨«' => 'èµ°',
+ '¨¬' => '足',
+ '¨' => '身',
+ '¨®' => '車',
+ '¨¯' => 'è¾›',
+ '¨°' => 'è¾°',
+ '¨±' => 'è¿‚',
+ '¨²' => '迆',
+ '¨³' => 'è¿…',
+ '¨´' => 'è¿„',
+ '¨µ' => 'å·¡',
+ '¨¶' => 'é‚‘',
+ '¨·' => 'é‚¢',
+ '¨¸' => '邪',
+ '¨¹' => '邦',
+ '¨º' => 'é‚£',
+ '¨»' => 'é…‰',
+ '¨¼' => '釆',
+ '¨½' => '里',
+ '¨¾' => '防',
+ '¨¿' => '阮',
+ '¨À' => '阱',
+ '¨Á' => '阪',
+ '¨Â' => '阬',
+ '¨Ã' => '並',
+ '¨Ä' => 'ä¹–',
+ '¨Å' => 'ä¹³',
+ '¨Æ' => '事',
+ '¨Ç' => '些',
+ '¨È' => '亞',
+ '¨É' => '享',
+ '¨Ê' => '京',
+ '¨Ë' => '佯',
+ '¨Ì' => 'ä¾',
+ '¨Í' => 'ä¾',
+ '¨Î' => 'ä½³',
+ '¨Ï' => '使',
+ '¨Ð' => '佬',
+ '¨Ñ' => 'ä¾›',
+ '¨Ò' => '例',
+ '¨Ó' => '來',
+ '¨Ô' => '侃',
+ '¨Õ' => 'ä½°',
+ '¨Ö' => 'ä½µ',
+ '¨×' => '侈',
+ '¨Ø' => '佩',
+ '¨Ù' => 'ä½»',
+ '¨Ú' => 'ä¾–',
+ '¨Û' => 'ä½¾',
+ '¨Ü' => 'ä¾',
+ '¨Ý' => '侑',
+ '¨Þ' => '佺',
+ '¨ß' => 'å…”',
+ '¨à' => 'å…’',
+ '¨á' => 'å…•',
+ '¨â' => 'å…©',
+ '¨ã' => 'å…·',
+ '¨ä' => 'å…¶',
+ '¨å' => 'å…¸',
+ '¨æ' => '冽',
+ '¨ç' => '函',
+ '¨è' => '刻',
+ '¨é' => '券',
+ '¨ê' => '刷',
+ '¨ë' => '刺',
+ '¨ì' => '到',
+ '¨í' => '刮',
+ '¨î' => '制',
+ '¨ï' => 'å‰',
+ '¨ð' => '劾',
+ '¨ñ' => '劻',
+ '¨ò' => 'å’',
+ '¨ó' => 'å”',
+ '¨ô' => 'å“',
+ '¨õ' => 'å‘',
+ '¨ö' => 'å¦',
+ '¨÷' => 'å·',
+ '¨ø' => 'å¸',
+ '¨ù' => 'å¹',
+ '¨ú' => 'å–',
+ '¨û' => 'å”',
+ '¨ü' => 'å—',
+ '¨ý' => '味',
+ '¨þ' => '呵',
+ '©@' => 'å’–',
+ '©A' => '呸',
+ '©B' => 'å’•',
+ '©C' => 'å’€',
+ '©D' => 'å‘»',
+ '©E' => 'å‘·',
+ '©F' => 'å’„',
+ '©G' => 'å’’',
+ '©H' => 'å’†',
+ '©I' => '呼',
+ '©J' => 'å’',
+ '©K' => '呱',
+ '©L' => '呶',
+ '©M' => 'å’Œ',
+ '©N' => 'å’š',
+ '©O' => 'å‘¢',
+ '©P' => '周',
+ '©Q' => 'å’‹',
+ '©R' => '命',
+ '©S' => 'å’Ž',
+ '©T' => '固',
+ '©U' => '垃',
+ '©V' => 'å·',
+ '©W' => 'åª',
+ '©X' => 'å©',
+ '©Y' => 'å¡',
+ '©Z' => 'å¦',
+ '©[' => 'å¤',
+ '©\\' => 'å¼',
+ '©]' => '夜',
+ '©^' => '奉',
+ '©_' => '奇',
+ '©`' => '奈',
+ '©a' => '奄',
+ '©b' => '奔',
+ '©c' => '妾',
+ '©d' => '妻',
+ '©e' => '委',
+ '©f' => '妹',
+ '©g' => '妮',
+ '©h' => '姑',
+ '©i' => '姆',
+ '©j' => 'å§',
+ '©k' => 'å§',
+ '©l' => '始',
+ '©m' => '姓',
+ '©n' => '姊',
+ '©o' => '妯',
+ '©p' => '妳',
+ '©q' => '姒',
+ '©r' => '姅',
+ '©s' => 'åŸ',
+ '©t' => 'å¤',
+ '©u' => 'å£',
+ '©v' => 'å®—',
+ '©w' => '定',
+ '©x' => '官',
+ '©y' => '宜',
+ '©z' => 'å®™',
+ '©{' => 'å®›',
+ '©|' => 'å°š',
+ '©}' => '屈',
+ '©~' => 'å±…',
+ '©¡' => '屆',
+ '©¢' => 'å²·',
+ '©£' => '岡',
+ '©¤' => '岸',
+ '©¥' => '岩',
+ '©¦' => '岫',
+ '©§' => 'å²±',
+ '©¨' => 'å²³',
+ '©©' => '帘',
+ '©ª' => '帚',
+ '©«' => '帖',
+ '©¬' => '帕',
+ '©' => '帛',
+ '©®' => '帑',
+ '©¯' => '幸',
+ '©°' => '庚',
+ '©±' => '店',
+ '©²' => '府',
+ '©³' => '底',
+ '©´' => '庖',
+ '©µ' => '延',
+ '©¶' => '弦',
+ '©·' => '弧',
+ '©¸' => '弩',
+ '©¹' => 'å¾€',
+ '©º' => 'å¾',
+ '©»' => '彿',
+ '©¼' => 'å½¼',
+ '©½' => 'å¿',
+ '©¾' => 'å¿ ',
+ '©¿' => '忽',
+ '©À' => '念',
+ '©Á' => 'å¿¿',
+ '©Â' => 'æ€',
+ '©Ã' => '怔',
+ '©Ä' => '怯',
+ '©Å' => '怵',
+ '©Æ' => '怖',
+ '©Ç' => '怪',
+ '©È' => '怕',
+ '©É' => '怡',
+ '©Ê' => '性',
+ '©Ë' => '怩',
+ '©Ì' => '怫',
+ '©Í' => '怛',
+ '©Î' => '或',
+ '©Ï' => '戕',
+ '©Ð' => '房',
+ '©Ñ' => '戾',
+ '©Ò' => '所',
+ '©Ó' => '承',
+ '©Ô' => '拉',
+ '©Õ' => 'æ‹Œ',
+ '©Ö' => 'æ‹„',
+ '©×' => '抿',
+ '©Ø' => 'æ‹‚',
+ '©Ù' => '抹',
+ '©Ú' => 'æ‹’',
+ '©Û' => 'æ‹›',
+ '©Ü' => '披',
+ '©Ý' => 'æ‹“',
+ '©Þ' => 'æ‹”',
+ '©ß' => 'æ‹‹',
+ '©à' => '拈',
+ '©á' => '抨',
+ '©â' => '抽',
+ '©ã' => '押',
+ '©ä' => 'æ‹',
+ '©å' => 'æ‹™',
+ '©æ' => '拇',
+ '©ç' => 'æ‹',
+ '©è' => '抵',
+ '©é' => 'æ‹š',
+ '©ê' => '抱',
+ '©ë' => '拘',
+ '©ì' => 'æ‹–',
+ '©í' => 'æ‹—',
+ '©î' => '拆',
+ '©ï' => '抬',
+ '©ð' => 'æ‹Ž',
+ '©ñ' => '放',
+ '©ò' => 'æ–§',
+ '©ó' => 'æ–¼',
+ '©ô' => 'æ—º',
+ '©õ' => '昔',
+ '©ö' => '易',
+ '©÷' => '昌',
+ '©ø' => '昆',
+ '©ù' => '昂',
+ '©ú' => '明',
+ '©û' => '昀',
+ '©ü' => 'æ˜',
+ '©ý' => '昕',
+ '©þ' => '昊',
+ 'ª@' => '昇',
+ 'ªA' => 'æœ',
+ 'ªB' => '朋',
+ 'ªC' => 'æ',
+ 'ªD' => 'æž‹',
+ 'ªE' => 'æž•',
+ 'ªF' => 'æ±',
+ 'ªG' => 'æžœ',
+ 'ªH' => 'æ³',
+ 'ªI' => 'æ·',
+ 'ªJ' => '枇',
+ 'ªK' => 'æž',
+ 'ªL' => 'æž—',
+ 'ªM' => 'æ¯',
+ 'ªN' => 'æ°',
+ 'ªO' => 'æ¿',
+ 'ªP' => '枉',
+ 'ªQ' => 'æ¾',
+ 'ªR' => 'æž',
+ 'ªS' => 'æµ',
+ 'ªT' => 'æžš',
+ 'ªU' => 'æž“',
+ 'ªV' => 'æ¼',
+ 'ªW' => 'æª',
+ 'ªX' => 'æ²',
+ 'ªY' => '欣',
+ 'ªZ' => 'æ¦',
+ 'ª[' => 'æ§',
+ 'ª\\' => 'æ¿',
+ 'ª]' => 'æ°“',
+ 'ª^' => 'æ°›',
+ 'ª_' => 'æ³£',
+ 'ª`' => '注',
+ 'ªa' => 'æ³³',
+ 'ªb' => 'æ²±',
+ 'ªc' => '泌',
+ 'ªd' => 'æ³¥',
+ 'ªe' => 'æ²³',
+ 'ªf' => 'æ²½',
+ 'ªg' => 'æ²¾',
+ 'ªh' => 'æ²¼',
+ 'ªi' => 'æ³¢',
+ 'ªj' => '沫',
+ 'ªk' => '法',
+ 'ªl' => '泓',
+ 'ªm' => '沸',
+ 'ªn' => '泄',
+ 'ªo' => 'æ²¹',
+ 'ªp' => 'æ³',
+ 'ªq' => 'æ²®',
+ 'ªr' => 'æ³—',
+ 'ªs' => 'æ³…',
+ 'ªt' => 'æ³±',
+ 'ªu' => '沿',
+ 'ªv' => 'æ²»',
+ 'ªw' => '泡',
+ 'ªx' => 'æ³›',
+ 'ªy' => '泊',
+ 'ªz' => '沬',
+ 'ª{' => '泯',
+ 'ª|' => '泜',
+ 'ª}' => 'æ³–',
+ 'ª~' => 'æ³ ',
+ 'ª¡' => 'ç‚•',
+ 'ª¢' => 'ç‚Ž',
+ 'ª£' => 'ç‚’',
+ 'ª¤' => 'ç‚Š',
+ 'ª¥' => 'ç‚™',
+ 'ª¦' => '爬',
+ 'ª§' => 'çˆ',
+ 'ª¨' => '爸',
+ 'ª©' => '版',
+ 'ªª' => '牧',
+ 'ª«' => '物',
+ 'ª¬' => 'ç‹€',
+ 'ª' => 'ç‹Ž',
+ 'ª®' => 'ç‹™',
+ 'ª¯' => 'ç‹—',
+ 'ª°' => 'ç‹',
+ 'ª±' => '玩',
+ 'ª²' => '玨',
+ 'ª³' => '玟',
+ 'ª´' => '玫',
+ 'ªµ' => '玥',
+ 'ª¶' => '甽',
+ 'ª·' => 'ç–',
+ 'ª¸' => 'ç–™',
+ 'ª¹' => 'ç–š',
+ 'ªº' => 'çš„',
+ 'ª»' => '盂',
+ 'ª¼' => '盲',
+ 'ª½' => 'ç›´',
+ 'ª¾' => '知',
+ 'ª¿' => '矽',
+ 'ªÀ' => '社',
+ 'ªÁ' => '祀',
+ 'ªÂ' => 'ç¥',
+ 'ªÃ' => '秉',
+ 'ªÄ' => '秈',
+ 'ªÅ' => '空',
+ 'ªÆ' => '穹',
+ 'ªÇ' => '竺',
+ 'ªÈ' => 'ç³¾',
+ 'ªÉ' => 'ç½”',
+ 'ªÊ' => '羌',
+ 'ªË' => '羋',
+ 'ªÌ' => '者',
+ 'ªÍ' => '肺',
+ 'ªÎ' => 'è‚¥',
+ 'ªÏ' => 'è‚¢',
+ 'ªÐ' => '肱',
+ 'ªÑ' => 'è‚¡',
+ 'ªÒ' => 'è‚«',
+ 'ªÓ' => 'è‚©',
+ 'ªÔ' => 'è‚´',
+ 'ªÕ' => '肪',
+ 'ªÖ' => '肯',
+ 'ª×' => '臥',
+ 'ªØ' => '臾',
+ 'ªÙ' => 'èˆ',
+ 'ªÚ' => '芳',
+ 'ªÛ' => 'èŠ',
+ 'ªÜ' => '芙',
+ 'ªÝ' => 'èŠ',
+ 'ªÞ' => '芽',
+ 'ªß' => '芟',
+ 'ªà' => '芹',
+ 'ªá' => '花',
+ 'ªâ' => '芬',
+ 'ªã' => '芥',
+ 'ªä' => '芯',
+ 'ªå' => '芸',
+ 'ªæ' => '芣',
+ 'ªç' => '芰',
+ 'ªè' => '芾',
+ 'ªé' => '芷',
+ 'ªê' => '虎',
+ 'ªë' => 'è™±',
+ 'ªì' => 'åˆ',
+ 'ªí' => '表',
+ 'ªî' => '軋',
+ 'ªï' => 'è¿Ž',
+ 'ªð' => 'è¿”',
+ 'ªñ' => 'è¿‘',
+ 'ªò' => '邵',
+ 'ªó' => '邸',
+ 'ªô' => '邱',
+ 'ªõ' => '邶',
+ 'ªö' => '采',
+ 'ª÷' => '金',
+ 'ªø' => 'é•·',
+ 'ªù' => 'é–€',
+ 'ªú' => '阜',
+ 'ªû' => '陀',
+ 'ªü' => '阿',
+ 'ªý' => '阻',
+ 'ªþ' => '附',
+ '«@' => '陂',
+ '«A' => 'éš¹',
+ '«B' => '雨',
+ '«C' => 'é’',
+ '«D' => 'éž',
+ '«E' => '亟',
+ '«F' => 'äº',
+ '«G' => '亮',
+ '«H' => 'ä¿¡',
+ '«I' => 'ä¾µ',
+ '«J' => '侯',
+ '«K' => '便',
+ '«L' => 'ä¿ ',
+ '«M' => 'ä¿‘',
+ '«N' => 'ä¿',
+ '«O' => 'ä¿',
+ '«P' => '促',
+ '«Q' => '侶',
+ '«R' => '俘',
+ '«S' => 'ä¿Ÿ',
+ '«T' => 'ä¿Š',
+ '«U' => 'ä¿—',
+ '«V' => 'ä¾®',
+ '«W' => 'ä¿',
+ '«X' => 'ä¿„',
+ '«Y' => 'ä¿‚',
+ '«Z' => 'ä¿š',
+ '«[' => 'ä¿Ž',
+ '«\\' => 'ä¿ž',
+ '«]' => 'ä¾·',
+ '«^' => 'å…—',
+ '«_' => '冒',
+ '«`' => '冑',
+ '«a' => 'å† ',
+ '«b' => '剎',
+ '«c' => '剃',
+ '«d' => '削',
+ '«e' => 'å‰',
+ '«f' => '剌',
+ '«g' => '剋',
+ '«h' => '則',
+ '«i' => '勇',
+ '«j' => '勉',
+ '«k' => '勃',
+ '«l' => 'å‹',
+ '«m' => 'åŒ',
+ '«n' => 'å—',
+ '«o' => 'å»',
+ '«p' => '厚',
+ '«q' => 'å›',
+ '«r' => 'å’¬',
+ '«s' => 'å“€',
+ '«t' => 'å’¨',
+ '«u' => 'å“Ž',
+ '«v' => '哉',
+ '«w' => 'å’¸',
+ '«x' => 'å’¦',
+ '«y' => 'å’³',
+ '«z' => '哇',
+ '«{' => 'å“‚',
+ '«|' => 'å’½',
+ '«}' => 'å’ª',
+ '«~' => 'å“',
+ '«¡' => 'å“„',
+ '«¢' => '哈',
+ '«£' => 'å’¯',
+ '«¤' => 'å’«',
+ '«¥' => 'å’±',
+ '«¦' => 'å’»',
+ '«§' => 'å’©',
+ '«¨' => 'å’§',
+ '«©' => 'å’¿',
+ '«ª' => '囿',
+ '««' => 'åž‚',
+ '«¬' => 'åž‹',
+ '«' => 'åž ',
+ '«®' => '垣',
+ '«¯' => '垢',
+ '«°' => '城',
+ '«±' => 'åž®',
+ '«²' => 'åž“',
+ '«³' => '奕',
+ '«´' => '契',
+ '«µ' => 'å¥',
+ '«¶' => '奎',
+ '«·' => 'å¥',
+ '«¸' => '姜',
+ '«¹' => '姘',
+ '«º' => '姿',
+ '«»' => '姣',
+ '«¼' => '姨',
+ '«½' => '娃',
+ '«¾' => '姥',
+ '«¿' => '姪',
+ '«À' => '姚',
+ '«Á' => '姦',
+ '«Â' => 'å¨',
+ '«Ã' => '姻',
+ '«Ä' => 'å©',
+ '«Å' => '宣',
+ '«Æ' => '宦',
+ '«Ç' => '室',
+ '«È' => '客',
+ '«É' => '宥',
+ '«Ê' => 'å°',
+ '«Ë' => '屎',
+ '«Ì' => 'å±',
+ '«Í' => 'å±',
+ '«Î' => '屋',
+ '«Ï' => 'å³™',
+ '«Ð' => 'å³’',
+ '«Ñ' => 'å··',
+ '«Ò' => 'å¸',
+ '«Ó' => '帥',
+ '«Ô' => '帟',
+ '«Õ' => 'å¹½',
+ '«Ö' => 'åº ',
+ '«×' => '度',
+ '«Ø' => '建',
+ '«Ù' => '弈',
+ '«Ú' => 'å¼',
+ '«Û' => 'å½¥',
+ '«Ü' => '很',
+ '«Ý' => 'å¾…',
+ '«Þ' => '徊',
+ '«ß' => '律',
+ '«à' => '徇',
+ '«á' => '後',
+ '«â' => '徉',
+ '«ã' => '怒',
+ '«ä' => 'æ€',
+ '«å' => 'æ€ ',
+ '«æ' => '急',
+ '«ç' => '怎',
+ '«è' => '怨',
+ '«é' => 'æ',
+ '«ê' => 'æ°',
+ '«ë' => 'æ¨',
+ '«ì' => 'æ¢',
+ '«í' => 'æ†',
+ '«î' => 'æƒ',
+ '«ï' => 'æ¬',
+ '«ð' => 'æ«',
+ '«ñ' => 'æª',
+ '«ò' => 'æ¤',
+ '«ó' => 'æ‰',
+ '«ô' => 'æ‹œ',
+ '«õ' => '挖',
+ '«ö' => '按',
+ '«÷' => '拼',
+ '«ø' => 'æ‹',
+ '«ù' => 'æŒ',
+ '«ú' => 'æ‹®',
+ '«û' => '拽',
+ '«ü' => '指',
+ '«ý' => '拱',
+ '«þ' => 'æ‹·',
+ '¬@' => '拯',
+ '¬A' => '括',
+ '¬B' => '拾',
+ '¬C' => 'æ‹´',
+ '¬D' => '挑',
+ '¬E' => '挂',
+ '¬F' => '政',
+ '¬G' => 'æ•…',
+ '¬H' => 'æ–«',
+ '¬I' => 'æ–½',
+ '¬J' => 'æ—¢',
+ '¬K' => '春',
+ '¬L' => 'æ˜',
+ '¬M' => 'æ˜ ',
+ '¬N' => '昧',
+ '¬O' => '是',
+ '¬P' => '星',
+ '¬Q' => '昨',
+ '¬R' => '昱',
+ '¬S' => '昤',
+ '¬T' => 'æ›·',
+ '¬U' => '柿',
+ '¬V' => '染',
+ '¬W' => '柱',
+ '¬X' => '柔',
+ '¬Y' => 'æŸ',
+ '¬Z' => '柬',
+ '¬[' => '架',
+ '¬\\' => '枯',
+ '¬]' => '柵',
+ '¬^' => '柩',
+ '¬_' => '柯',
+ '¬`' => '柄',
+ '¬a' => '柑',
+ '¬b' => 'æž´',
+ '¬c' => '柚',
+ '¬d' => '查',
+ '¬e' => '枸',
+ '¬f' => 'æŸ',
+ '¬g' => '柞',
+ '¬h' => '柳',
+ '¬i' => 'æž°',
+ '¬j' => '柙',
+ '¬k' => '柢',
+ '¬l' => 'æŸ',
+ '¬m' => '柒',
+ '¬n' => 'æª',
+ '¬o' => '殃',
+ '¬p' => '殆',
+ '¬q' => '段',
+ '¬r' => '毒',
+ '¬s' => '毗',
+ '¬t' => 'æ°Ÿ',
+ '¬u' => '泉',
+ '¬v' => 'æ´‹',
+ '¬w' => 'æ´²',
+ '¬x' => 'æ´ª',
+ '¬y' => 'æµ',
+ '¬z' => 'æ´¥',
+ '¬{' => 'æ´Œ',
+ '¬|' => 'æ´±',
+ '¬}' => 'æ´ž',
+ '¬~' => 'æ´—',
+ '¬¡' => 'æ´»',
+ '¬¢' => 'æ´½',
+ '¬£' => 'æ´¾',
+ '¬¤' => 'æ´¶',
+ '¬¥' => 'æ´›',
+ '¬¦' => 'æ³µ',
+ '¬§' => 'æ´¹',
+ '¬¨' => 'æ´§',
+ '¬©' => 'æ´¸',
+ '¬ª' => 'æ´©',
+ '¬«' => 'æ´®',
+ '¬¬' => 'æ´µ',
+ '¬' => 'æ´Ž',
+ '¬®' => 'æ´«',
+ '¬¯' => 'ç‚«',
+ '¬°' => '為',
+ '¬±' => '炳',
+ '¬²' => '炬',
+ '¬³' => '炯',
+ '¬´' => 'ç‚',
+ '¬µ' => '炸',
+ '¬¶' => 'ç‚®',
+ '¬·' => '炤',
+ '¬¸' => '爰',
+ '¬¹' => '牲',
+ '¬º' => '牯',
+ '¬»' => '牴',
+ '¬¼' => 'ç‹©',
+ '¬½' => 'ç‹ ',
+ '¬¾' => 'ç‹¡',
+ '¬¿' => '玷',
+ '¬À' => 'çŠ',
+ '¬Á' => '玻',
+ '¬Â' => '玲',
+ '¬Ã' => 'ç',
+ '¬Ä' => 'ç€',
+ '¬Å' => '玳',
+ '¬Æ' => '甚',
+ '¬Ç' => 'ç”',
+ '¬È' => 'ç•',
+ '¬É' => 'ç•Œ',
+ '¬Ê' => 'ç•Ž',
+ '¬Ë' => 'ç•‹',
+ '¬Ì' => 'ç–«',
+ '¬Í' => 'ç–¤',
+ '¬Î' => 'ç–¥',
+ '¬Ï' => 'ç–¢',
+ '¬Ð' => 'ç–£',
+ '¬Ñ' => '癸',
+ '¬Ò' => '皆',
+ '¬Ó' => '皇',
+ '¬Ô' => '皈',
+ '¬Õ' => '盈',
+ '¬Ö' => '盆',
+ '¬×' => '盃',
+ '¬Ø' => 'ç›…',
+ '¬Ù' => 'çœ',
+ '¬Ú' => '盹',
+ '¬Û' => '相',
+ '¬Ü' => '眉',
+ '¬Ý' => '看',
+ '¬Þ' => '盾',
+ '¬ß' => '盼',
+ '¬à' => '眇',
+ '¬á' => '矜',
+ '¬â' => 'ç ‚',
+ '¬ã' => 'ç ”',
+ '¬ä' => 'ç Œ',
+ '¬å' => 'ç ',
+ '¬æ' => '祆',
+ '¬ç' => '祉',
+ '¬è' => '祈',
+ '¬é' => '祇',
+ '¬ê' => '禹',
+ '¬ë' => '禺',
+ '¬ì' => '科',
+ '¬í' => '秒',
+ '¬î' => '秋',
+ '¬ï' => 'ç©¿',
+ '¬ð' => 'çª',
+ '¬ñ' => 'ç«¿',
+ '¬ò' => '竽',
+ '¬ó' => 'ç±½',
+ '¬ô' => 'ç´‚',
+ '¬õ' => 'ç´…',
+ '¬ö' => 'ç´€',
+ '¬÷' => 'ç´‰',
+ '¬ø' => 'ç´‡',
+ '¬ù' => 'ç´„',
+ '¬ú' => 'ç´†',
+ '¬û' => '缸',
+ '¬ü' => '美',
+ '¬ý' => '羿',
+ '¬þ' => '耄',
+ '@' => 'è€',
+ 'A' => 'è€',
+ 'B' => '耑',
+ 'C' => '耶',
+ 'D' => '胖',
+ 'E' => '胥',
+ 'F' => '胚',
+ 'G' => '胃',
+ 'H' => '胄',
+ 'I' => '背',
+ 'J' => '胡',
+ 'K' => '胛',
+ 'L' => '胎',
+ 'M' => '胞',
+ 'N' => '胤',
+ 'O' => 'èƒ',
+ 'P' => '致',
+ 'Q' => '舢',
+ 'R' => '苧',
+ 'S' => '范',
+ 'T' => '茅',
+ 'U' => 'è‹£',
+ 'V' => 'è‹›',
+ 'W' => '苦',
+ 'X' => '茄',
+ 'Y' => 'è‹¥',
+ 'Z' => '茂',
+ '[' => '茉',
+ '\\' => 'è‹’',
+ ']' => 'è‹—',
+ '^' => '英',
+ '_' => 'èŒ',
+ '`' => '苜',
+ 'a' => 'è‹”',
+ 'b' => 'è‹‘',
+ 'c' => 'è‹ž',
+ 'd' => 'è‹“',
+ 'e' => 'è‹Ÿ',
+ 'f' => '苯',
+ 'g' => '茆',
+ 'h' => 'è™',
+ 'i' => '虹',
+ 'j' => 'è™»',
+ 'k' => '虺',
+ 'l' => 'è¡',
+ 'm' => 'è¡«',
+ 'n' => 'è¦',
+ 'o' => '觔',
+ 'p' => '計',
+ 'q' => '訂',
+ 'r' => '訃',
+ 's' => '貞',
+ 't' => 'è² ',
+ 'u' => 'èµ´',
+ 'v' => 'èµ³',
+ 'w' => '趴',
+ 'x' => 'è»',
+ 'y' => '軌',
+ 'z' => 'è¿°',
+ '{' => '迦',
+ '|' => 'è¿¢',
+ '}' => '迪',
+ '~' => 'è¿¥',
+ '¡' => 'è¿',
+ '¢' => 'è¿«',
+ '£' => '迤',
+ '¤' => '迨',
+ '¥' => '郊',
+ '¦' => '郎',
+ '§' => 'éƒ',
+ '¨' => '郃',
+ '©' => 'é…‹',
+ 'ª' => 'é…Š',
+ '«' => 'é‡',
+ '¬' => 'é–‚',
+ '' => 'é™',
+ '®' => '陋',
+ '¯' => '陌',
+ '°' => 'é™',
+ '±' => 'é¢',
+ '²' => 'é©',
+ '³' => '韋',
+ '´' => 'éŸ',
+ 'µ' => '音',
+ '¶' => 'é ',
+ '·' => '風',
+ '¸' => '飛',
+ '¹' => '食',
+ 'º' => '首',
+ '»' => '香',
+ '¼' => '乘',
+ '½' => '亳',
+ '¾' => '倌',
+ '¿' => 'å€',
+ 'À' => '倣',
+ 'Á' => '俯',
+ 'Â' => '倦',
+ 'Ã' => '倥',
+ 'Ä' => '俸',
+ 'Å' => '倩',
+ 'Æ' => '倖',
+ 'Ç' => '倆',
+ 'È' => '值',
+ 'É' => '借',
+ 'Ê' => '倚',
+ 'Ë' => '倒',
+ 'Ì' => '們',
+ 'Í' => '俺',
+ 'Î' => '倀',
+ 'Ï' => '倔',
+ 'Ð' => '倨',
+ 'Ñ' => '俱',
+ 'Ò' => '倡',
+ 'Ó' => '個',
+ 'Ô' => '候',
+ 'Õ' => '倘',
+ 'Ö' => '俳',
+ '×' => 'ä¿®',
+ 'Ø' => 'å€',
+ 'Ù' => '倪',
+ 'Ú' => '俾',
+ 'Û' => '倫',
+ 'Ü' => '倉',
+ 'Ý' => 'å…¼',
+ 'Þ' => '冤',
+ 'ß' => '冥',
+ 'à' => '冢',
+ 'á' => 'å‡',
+ 'â' => '凌',
+ 'ã' => '准',
+ 'ä' => '凋',
+ 'å' => '剖',
+ 'æ' => '剜',
+ 'ç' => '剔',
+ 'è' => '剛',
+ 'é' => 'å‰',
+ 'ê' => '匪',
+ 'ë' => 'å¿',
+ 'ì' => '原',
+ 'í' => 'åŽ',
+ 'î' => 'åŸ',
+ 'ï' => '哨',
+ 'ð' => 'å”',
+ 'ñ' => 'å”',
+ 'ò' => 'å”·',
+ 'ó' => '哼',
+ 'ô' => 'å“¥',
+ 'õ' => '哲',
+ 'ö' => '唆',
+ '÷' => '哺',
+ 'ø' => 'å””',
+ 'ù' => 'å“©',
+ 'ú' => 'å“',
+ 'û' => 'å“¡',
+ 'ü' => '唉',
+ 'ý' => 'å“®',
+ 'þ' => '哪',
+ '®@' => '哦',
+ '®A' => '唧',
+ '®B' => '唇',
+ '®C' => '哽',
+ '®D' => 'å”',
+ '®E' => '圃',
+ '®F' => '圄',
+ '®G' => '埂',
+ '®H' => '埔',
+ '®I' => '埋',
+ '®J' => '埃',
+ '®K' => 'å ‰',
+ '®L' => 'å¤',
+ '®M' => '套',
+ '®N' => '奘',
+ '®O' => '奚',
+ '®P' => '娑',
+ '®Q' => '娘',
+ '®R' => '娜',
+ '®S' => '娟',
+ '®T' => '娛',
+ '®U' => '娓',
+ '®V' => '姬',
+ '®W' => 'å¨ ',
+ '®X' => '娣',
+ '®Y' => '娩',
+ '®Z' => '娥',
+ '®[' => '娌',
+ '®\\' => '娉',
+ '®]' => 'å«',
+ '®^' => '屘',
+ '®_' => 'å®°',
+ '®`' => '害',
+ '®a' => '家',
+ '®b' => 'å®´',
+ '®c' => 'å®®',
+ '®d' => '宵',
+ '®e' => '容',
+ '®f' => '宸',
+ '®g' => 'å°„',
+ '®h' => '屑',
+ '®i' => '展',
+ '®j' => 'å±',
+ '®k' => 'å³',
+ '®l' => 'å³½',
+ '®m' => 'å³»',
+ '®n' => '峪',
+ '®o' => '峨',
+ '®p' => 'å³°',
+ '®q' => '島',
+ '®r' => 'å´',
+ '®s' => 'å³´',
+ '®t' => 'å·®',
+ '®u' => 'å¸',
+ '®v' => '師',
+ '®w' => '庫',
+ '®x' => 'åº',
+ '®y' => '座',
+ '®z' => 'å¼±',
+ '®{' => 'å¾’',
+ '®|' => '徑',
+ '®}' => 'å¾',
+ '®~' => 'æ™',
+ '®¡' => 'æ£',
+ '®¢' => 'æ¥',
+ '®£' => 'æ',
+ '®¤' => 'æ•',
+ '®¥' => 'æ',
+ '®¦' => 'æ©',
+ '®§' => 'æ¯',
+ '®¨' => 'æ‚„',
+ '®©' => 'æ‚Ÿ',
+ '®ª' => 'æ‚š',
+ '®«' => 'æ‚',
+ '®¬' => 'æ‚”',
+ '®' => 'æ‚Œ',
+ '®®' => 'æ‚…',
+ '®¯' => 'æ‚–',
+ '®°' => '扇',
+ '®±' => '拳',
+ '®²' => '挈',
+ '®³' => 'æ‹¿',
+ '®´' => 'æŽ',
+ '®µ' => '挾',
+ '®¶' => '振',
+ '®·' => 'æ•',
+ '®¸' => 'æ‚',
+ '®¹' => 'æ†',
+ '®º' => 'æ',
+ '®»' => 'æ‰',
+ '®¼' => '挺',
+ '®½' => 'æ',
+ '®¾' => '挽',
+ '®¿' => '挪',
+ '®À' => '挫',
+ '®Á' => '挨',
+ '®Â' => 'æ',
+ '®Ã' => 'æŒ',
+ '®Ä' => '效',
+ '®Å' => '敉',
+ '®Æ' => 'æ–™',
+ '®Ç' => 'æ—',
+ '®È' => 'æ—…',
+ '®É' => '時',
+ '®Ê' => '晉',
+ '®Ë' => 'æ™',
+ '®Ì' => '晃',
+ '®Í' => 'æ™’',
+ '®Î' => '晌',
+ '®Ï' => 'æ™…',
+ '®Ð' => 'æ™',
+ '®Ñ' => '書',
+ '®Ò' => '朔',
+ '®Ó' => '朕',
+ '®Ô' => '朗',
+ '®Õ' => 'æ ¡',
+ '®Ö' => 'æ ¸',
+ '®×' => '案',
+ '®Ø' => '框',
+ '®Ù' => 'æ¡“',
+ '®Ú' => 'æ ¹',
+ '®Û' => 'æ¡‚',
+ '®Ü' => 'æ¡”',
+ '®Ý' => 'æ ©',
+ '®Þ' => '梳',
+ '®ß' => 'æ —',
+ '®à' => 'æ¡Œ',
+ '®á' => 'æ¡‘',
+ '®â' => 'æ ½',
+ '®ã' => '柴',
+ '®ä' => 'æ¡',
+ '®å' => 'æ¡€',
+ '®æ' => 'æ ¼',
+ '®ç' => '桃',
+ '®è' => 'æ ª',
+ '®é' => 'æ¡…',
+ '®ê' => 'æ “',
+ '®ë' => 'æ ˜',
+ '®ì' => 'æ¡',
+ '®í' => '殊',
+ '®î' => '殉',
+ '®ï' => 'æ®·',
+ '®ð' => 'æ°£',
+ '®ñ' => 'æ°§',
+ '®ò' => 'æ°¨',
+ '®ó' => 'æ°¦',
+ '®ô' => 'æ°¤',
+ '®õ' => 'æ³°',
+ '®ö' => '浪',
+ '®÷' => '涕',
+ '®ø' => '消',
+ '®ù' => '涇',
+ '®ú' => '浦',
+ '®û' => '浸',
+ '®ü' => 'æµ·',
+ '®ý' => 'æµ™',
+ '®þ' => '涓',
+ '¯@' => '浬',
+ '¯A' => '涉',
+ '¯B' => 'æµ®',
+ '¯C' => '浚',
+ '¯D' => 'æµ´',
+ '¯E' => '浩',
+ '¯F' => '涌',
+ '¯G' => '涊',
+ '¯H' => 'æµ¹',
+ '¯I' => '涅',
+ '¯J' => 'æµ¥',
+ '¯K' => '涔',
+ '¯L' => '烊',
+ '¯M' => '烘',
+ '¯N' => '烤',
+ '¯O' => '烙',
+ '¯P' => '烈',
+ '¯Q' => 'çƒ',
+ '¯R' => '爹',
+ '¯S' => '特',
+ '¯T' => '狼',
+ '¯U' => '狹',
+ '¯V' => '狽',
+ '¯W' => '狸',
+ '¯X' => 'ç‹·',
+ '¯Y' => '玆',
+ '¯Z' => 'ç',
+ '¯[' => 'ç‰',
+ '¯\\' => 'ç®',
+ '¯]' => 'ç ',
+ '¯^' => 'çª',
+ '¯_' => 'çž',
+ '¯`' => 'ç•”',
+ '¯a' => 'ç•',
+ '¯b' => 'ç•œ',
+ '¯c' => 'ç•š',
+ '¯d' => 'ç•™',
+ '¯e' => 'ç–¾',
+ '¯f' => 'ç—…',
+ '¯g' => 'ç—‡',
+ '¯h' => 'ç–²',
+ '¯i' => 'ç–³',
+ '¯j' => 'ç–½',
+ '¯k' => 'ç–¼',
+ '¯l' => 'ç–¹',
+ '¯m' => 'ç—‚',
+ '¯n' => 'ç–¸',
+ '¯o' => 'çš‹',
+ '¯p' => 'çš°',
+ '¯q' => '益',
+ '¯r' => 'ç›',
+ '¯s' => '盎',
+ '¯t' => '眩',
+ '¯u' => '真',
+ '¯v' => 'çœ ',
+ '¯w' => '眨',
+ '¯x' => '矩',
+ '¯y' => 'ç °',
+ '¯z' => 'ç §',
+ '¯{' => 'ç ¸',
+ '¯|' => 'ç ',
+ '¯}' => 'ç ´',
+ '¯~' => 'ç ·',
+ '¯¡' => 'ç ¥',
+ '¯¢' => 'ç ',
+ '¯£' => 'ç ',
+ '¯¤' => 'ç Ÿ',
+ '¯¥' => 'ç ²',
+ '¯¦' => '祕',
+ '¯§' => 'ç¥',
+ '¯¨' => 'ç¥ ',
+ '¯©' => '祟',
+ '¯ª' => '祖',
+ '¯«' => '神',
+ '¯¬' => 'ç¥',
+ '¯' => '祗',
+ '¯®' => '祚',
+ '¯¯' => '秤',
+ '¯°' => '秣',
+ '¯±' => '秧',
+ '¯²' => '租',
+ '¯³' => '秦',
+ '¯´' => '秩',
+ '¯µ' => '秘',
+ '¯¶' => '窄',
+ '¯·' => '窈',
+ '¯¸' => 'ç«™',
+ '¯¹' => '笆',
+ '¯º' => '笑',
+ '¯»' => '粉',
+ '¯¼' => 'ç´¡',
+ '¯½' => 'ç´—',
+ '¯¾' => 'ç´‹',
+ '¯¿' => 'ç´Š',
+ '¯À' => 'ç´ ',
+ '¯Á' => 'ç´¢',
+ '¯Â' => 'ç´”',
+ '¯Ã' => 'ç´',
+ '¯Ä' => 'ç´•',
+ '¯Å' => 'ç´š',
+ '¯Æ' => 'ç´œ',
+ '¯Ç' => 'ç´',
+ '¯È' => 'ç´™',
+ '¯É' => 'ç´›',
+ '¯Ê' => '缺',
+ '¯Ë' => '罟',
+ '¯Ì' => 'ç¾”',
+ '¯Í' => 'ç¿…',
+ '¯Î' => 'ç¿',
+ '¯Ï' => '耆',
+ '¯Ð' => '耘',
+ '¯Ñ' => '耕',
+ '¯Ò' => '耙',
+ '¯Ó' => '耗',
+ '¯Ô' => '耽',
+ '¯Õ' => '耿',
+ '¯Ö' => '胱',
+ '¯×' => 'è„‚',
+ '¯Ø' => '胰',
+ '¯Ù' => 'è„…',
+ '¯Ú' => 'èƒ',
+ '¯Û' => '胴',
+ '¯Ü' => '脆',
+ '¯Ý' => '胸',
+ '¯Þ' => '胳',
+ '¯ß' => '脈',
+ '¯à' => '能',
+ '¯á' => 'è„Š',
+ '¯â' => '胼',
+ '¯ã' => '胯',
+ '¯ä' => 'è‡',
+ '¯å' => '臬',
+ '¯æ' => '舀',
+ '¯ç' => 'èˆ',
+ '¯è' => '航',
+ '¯é' => '舫',
+ '¯ê' => '舨',
+ '¯ë' => '般',
+ '¯ì' => '芻',
+ '¯í' => '茫',
+ '¯î' => 'è’',
+ '¯ï' => 'è”',
+ '¯ð' => 'èŠ',
+ '¯ñ' => '茸',
+ '¯ò' => 'è',
+ '¯ó' => 'è‰',
+ '¯ô' => '茵',
+ '¯õ' => '茴',
+ '¯ö' => 'è',
+ '¯÷' => '茲',
+ '¯ø' => '茹',
+ '¯ù' => '茶',
+ '¯ú' => '茗',
+ '¯û' => 'è€',
+ '¯ü' => '茱',
+ '¯ý' => '茨',
+ '¯þ' => 'èƒ',
+ '°@' => 'è™”',
+ '°A' => '蚊',
+ '°B' => '蚪',
+ '°C' => 'èš“',
+ '°D' => '蚤',
+ '°E' => 'èš©',
+ '°F' => '蚌',
+ '°G' => '蚣',
+ '°H' => 'èšœ',
+ '°I' => 'è¡°',
+ '°J' => 'è¡·',
+ '°K' => 'è¢',
+ '°L' => '袂',
+ '°M' => '衽',
+ '°N' => '衹',
+ '°O' => '記',
+ '°P' => 'è¨',
+ '°Q' => '討',
+ '°R' => '訌',
+ '°S' => '訕',
+ '°T' => '訊',
+ '°U' => '託',
+ '°V' => '訓',
+ '°W' => '訖',
+ '°X' => 'è¨',
+ '°Y' => '訑',
+ '°Z' => '豈',
+ '°[' => '豺',
+ '°\\' => 'è±¹',
+ '°]' => '財',
+ '°^' => 'è²¢',
+ '°_' => 'èµ·',
+ '°`' => '躬',
+ '°a' => 'è»’',
+ '°b' => 'è»”',
+ '°c' => 'è»',
+ '°d' => 'è¾±',
+ '°e' => 'é€',
+ '°f' => '逆',
+ '°g' => 'è¿·',
+ '°h' => '退',
+ '°i' => '迺',
+ '°j' => 'è¿´',
+ '°k' => '逃',
+ '°l' => '追',
+ '°m' => '逅',
+ '°n' => '迸',
+ '°o' => 'é‚•',
+ '°p' => '郡',
+ '°q' => 'éƒ',
+ '°r' => '郢',
+ '°s' => 'é…’',
+ '°t' => 'é…',
+ '°u' => 'é…Œ',
+ '°v' => '釘',
+ '°w' => 'é‡',
+ '°x' => '釗',
+ '°y' => '釜',
+ '°z' => '釙',
+ '°{' => 'é–ƒ',
+ '°|' => '院',
+ '°}' => '陣',
+ '°~' => '陡',
+ '°¡' => 'é™›',
+ '°¢' => 'é™',
+ '°£' => '除',
+ '°¤' => '陘',
+ '°¥' => '陞',
+ '°¦' => 'éš»',
+ '°§' => '飢',
+ '°¨' => '馬',
+ '°©' => '骨',
+ '°ª' => '高',
+ '°«' => '鬥',
+ '°¬' => '鬲',
+ '°' => '鬼',
+ '°®' => 'ä¹¾',
+ '°¯' => 'åº',
+ '°°' => 'å½',
+ '°±' => 'åœ',
+ '°²' => 'å‡',
+ '°³' => 'åƒ',
+ '°´' => 'åŒ',
+ '°µ' => 'åš',
+ '°¶' => 'å‰',
+ '°·' => 'å¥',
+ '°¸' => 'å¶',
+ '°¹' => 'åŽ',
+ '°º' => 'å•',
+ '°»' => 'åµ',
+ '°¼' => 'å´',
+ '°½' => 'å·',
+ '°¾' => 'å',
+ '°¿' => 'å€',
+ '°À' => 'å¯',
+ '°Á' => 'å',
+ '°Â' => 'å…œ',
+ '°Ã' => '冕',
+ '°Ä' => '凰',
+ '°Å' => '剪',
+ '°Æ' => '副',
+ '°Ç' => 'å‹’',
+ '°È' => 'å‹™',
+ '°É' => '勘',
+ '°Ê' => 'å‹•',
+ '°Ë' => 'åŒ',
+ '°Ì' => 'åŒ',
+ '°Í' => '匙',
+ '°Î' => '匿',
+ '°Ï' => 'å€',
+ '°Ð' => '匾',
+ '°Ñ' => 'åƒ',
+ '°Ò' => '曼',
+ '°Ó' => '商',
+ '°Ô' => '啪',
+ '°Õ' => '啦',
+ '°Ö' => 'å•„',
+ '°×' => 'å•ž',
+ '°Ø' => 'å•¡',
+ '°Ù' => '啃',
+ '°Ú' => 'å•Š',
+ '°Û' => 'å”±',
+ '°Ü' => 'å•–',
+ '°Ý' => 'å•',
+ '°Þ' => 'å••',
+ '°ß' => '唯',
+ '°à' => '啤',
+ '°á' => '唸',
+ '°â' => 'å”®',
+ '°ã' => 'å•œ',
+ '°ä' => '唬',
+ '°å' => 'å•£',
+ '°æ' => '唳',
+ '°ç' => 'å•',
+ '°è' => 'å•—',
+ '°é' => '圈',
+ '°ê' => '國',
+ '°ë' => '圉',
+ '°ì' => '域',
+ '°í' => 'å …',
+ '°î' => 'å Š',
+ '°ï' => 'å †',
+ '°ð' => 'åŸ ',
+ '°ñ' => '埤',
+ '°ò' => '基',
+ '°ó' => 'å ‚',
+ '°ô' => 'å µ',
+ '°õ' => '執',
+ '°ö' => '培',
+ '°÷' => 'å¤ ',
+ '°ø' => '奢',
+ '°ù' => '娶',
+ '°ú' => 'å©',
+ '°û' => '婉',
+ '°ü' => '婦',
+ '°ý' => '婪',
+ '°þ' => 'å©€',
+ '±@' => '娼',
+ '±A' => 'å©¢',
+ '±B' => 'å©š',
+ '±C' => '婆',
+ '±D' => 'å©Š',
+ '±E' => 'å°',
+ '±F' => '寇',
+ '±G' => '寅',
+ '±H' => '寄',
+ '±I' => '寂',
+ '±J' => '宿',
+ '±K' => '密',
+ '±L' => 'å°‰',
+ '±M' => 'å°ˆ',
+ '±N' => 'å°‡',
+ '±O' => 'å± ',
+ '±P' => '屜',
+ '±Q' => 'å±',
+ '±R' => 'å´‡',
+ '±S' => 'å´†',
+ '±T' => 'å´Ž',
+ '±U' => 'å´›',
+ '±V' => 'å´–',
+ '±W' => 'å´¢',
+ '±X' => 'å´‘',
+ '±Y' => 'å´©',
+ '±Z' => 'å´”',
+ '±[' => 'å´™',
+ '±\\' => 'å´¤',
+ '±]' => 'å´§',
+ '±^' => 'å´—',
+ '±_' => 'å·¢',
+ '±`' => '常',
+ '±a' => '帶',
+ '±b' => '帳',
+ '±c' => '帷',
+ '±d' => '康',
+ '±e' => '庸',
+ '±f' => '庶',
+ '±g' => '庵',
+ '±h' => '庾',
+ '±i' => 'å¼µ',
+ '±j' => 'å¼·',
+ '±k' => 'å½—',
+ '±l' => '彬',
+ '±m' => '彩',
+ '±n' => '彫',
+ '±o' => 'å¾—',
+ '±p' => 'å¾™',
+ '±q' => '從',
+ '±r' => '徘',
+ '±s' => '御',
+ '±t' => 'å¾ ',
+ '±u' => '徜',
+ '±v' => 'æ¿',
+ '±w' => 'æ‚£',
+ '±x' => '悉',
+ '±y' => 'æ‚ ',
+ '±z' => '您',
+ '±{' => '惋',
+ '±|' => 'æ‚´',
+ '±}' => '惦',
+ '±~' => '悽',
+ '±¡' => '情',
+ '±¢' => 'æ‚»',
+ '±£' => '悵',
+ '±¤' => '惜',
+ '±¥' => '悼',
+ '±¦' => '惘',
+ '±§' => '惕',
+ '±¨' => '惆',
+ '±©' => '惟',
+ '±ª' => '悸',
+ '±«' => '惚',
+ '±¬' => '惇',
+ '±' => '戚',
+ '±®' => '戛',
+ '±¯' => '扈',
+ '±°' => 'æŽ ',
+ '±±' => '控',
+ '±²' => 'æ²',
+ '±³' => '掖',
+ '±´' => '探',
+ '±µ' => '接',
+ '±¶' => 'æ·',
+ '±·' => 'æ§',
+ '±¸' => '掘',
+ '±¹' => '措',
+ '±º' => 'æ±',
+ '±»' => '掩',
+ '±¼' => '掉',
+ '±½' => '掃',
+ '±¾' => '掛',
+ '±¿' => 'æ«',
+ '±À' => '推',
+ '±Á' => '掄',
+ '±Â' => '授',
+ '±Ã' => '掙',
+ '±Ä' => '採',
+ '±Å' => '掬',
+ '±Æ' => '排',
+ '±Ç' => 'æŽ',
+ '±È' => '掀',
+ '±É' => 'æ»',
+ '±Ê' => 'æ©',
+ '±Ë' => 'æ¨',
+ '±Ì' => 'æº',
+ '±Í' => 'æ•',
+ '±Î' => 'æ•–',
+ '±Ï' => 'æ•‘',
+ '±Ð' => 'æ•™',
+ '±Ñ' => 'æ•—',
+ '±Ò' => 'å•Ÿ',
+ '±Ó' => 'æ•',
+ '±Ô' => '敘',
+ '±Õ' => 'æ••',
+ '±Ö' => 'æ•”',
+ '±×' => 'æ–œ',
+ '±Ø' => 'æ–›',
+ '±Ù' => 'æ–¬',
+ '±Ú' => 'æ—',
+ '±Û' => 'æ—‹',
+ '±Ü' => 'æ—Œ',
+ '±Ý' => 'æ—Ž',
+ '±Þ' => 'æ™',
+ '±ß' => '晚',
+ '±à' => '晤',
+ '±á' => '晨',
+ '±â' => '晦',
+ '±ã' => '晞',
+ '±ä' => '曹',
+ '±å' => 'å‹—',
+ '±æ' => '望',
+ '±ç' => 'æ¢',
+ '±è' => '梯',
+ '±é' => '梢',
+ '±ê' => '梓',
+ '±ë' => '梵',
+ '±ì' => 'æ¡¿',
+ '±í' => '桶',
+ '±î' => '梱',
+ '±ï' => '梧',
+ '±ð' => '梗',
+ '±ñ' => '械',
+ '±ò' => '梃',
+ '±ó' => '棄',
+ '±ô' => 'æ¢',
+ '±õ' => '梆',
+ '±ö' => '梅',
+ '±÷' => '梔',
+ '±ø' => 'æ¢',
+ '±ù' => '梨',
+ '±ú' => '梟',
+ '±û' => '梡',
+ '±ü' => '梂',
+ '±ý' => '欲',
+ '±þ' => '殺',
+ '²@' => '毫',
+ '²A' => '毬',
+ '²B' => 'æ°«',
+ '²C' => '涎',
+ '²D' => '涼',
+ '²E' => 'æ·³',
+ '²F' => 'æ·™',
+ '²G' => '液',
+ '²H' => 'æ·¡',
+ '²I' => 'æ·Œ',
+ '²J' => 'æ·¤',
+ '²K' => 'æ·»',
+ '²L' => 'æ·º',
+ '²M' => '清',
+ '²N' => 'æ·‡',
+ '²O' => 'æ·‹',
+ '²P' => '涯',
+ '²Q' => 'æ·‘',
+ '²R' => '涮',
+ '²S' => 'æ·ž',
+ '²T' => 'æ·¹',
+ '²U' => '涸',
+ '²V' => 'æ··',
+ '²W' => 'æ·µ',
+ '²X' => 'æ·…',
+ '²Y' => 'æ·’',
+ '²Z' => '渚',
+ '²[' => '涵',
+ '²\\' => 'æ·š',
+ '²]' => 'æ·«',
+ '²^' => 'æ·˜',
+ '²_' => 'æ·ª',
+ '²`' => 'æ·±',
+ '²a' => 'æ·®',
+ '²b' => 'æ·¨',
+ '²c' => 'æ·†',
+ '²d' => 'æ·„',
+ '²e' => '涪',
+ '²f' => 'æ·¬',
+ '²g' => '涿',
+ '²h' => 'æ·¦',
+ '²i' => '烹',
+ '²j' => '焉',
+ '²k' => 'ç„Š',
+ '²l' => '烽',
+ '²m' => '烯',
+ '²n' => '爽',
+ '²o' => '牽',
+ '²p' => 'çŠ',
+ '²q' => '猜',
+ '²r' => '猛',
+ '²s' => '猖',
+ '²t' => '猓',
+ '²u' => '猙',
+ '²v' => '率',
+ '²w' => 'ç…',
+ '²x' => 'çŠ',
+ '²y' => 'çƒ',
+ '²z' => 'ç†',
+ '²{' => 'ç¾',
+ '²|' => 'ç',
+ '²}' => 'ç“ ',
+ '²~' => '瓶',
+ '²¡' => 'ç“·',
+ '²¢' => '甜',
+ '²£' => '產',
+ '²¤' => 'ç•¥',
+ '²¥' => '畦',
+ '²¦' => 'ç•¢',
+ '²§' => 'ç•°',
+ '²¨' => 'ç–',
+ '²©' => 'ç—”',
+ '²ª' => 'ç—•',
+ '²«' => 'ç–µ',
+ '²¬' => 'ç—Š',
+ '²' => 'ç—',
+ '²®' => '皎',
+ '²¯' => 'ç›”',
+ '²°' => 'ç›’',
+ '²±' => 'ç››',
+ '²²' => '眷',
+ '²³' => '眾',
+ '²´' => '眼',
+ '²µ' => '眶',
+ '²¶' => '眸',
+ '²·' => '眺',
+ '²¸' => 'ç¡«',
+ '²¹' => '硃',
+ '²º' => 'ç¡Ž',
+ '²»' => '祥',
+ '²¼' => '票',
+ '²½' => 'ç¥',
+ '²¾' => '移',
+ '²¿' => '窒',
+ '²À' => '窕',
+ '²Á' => 'ç¬ ',
+ '²Â' => '笨',
+ '²Ã' => '笛',
+ '²Ä' => '第',
+ '²Å' => '符',
+ '²Æ' => '笙',
+ '²Ç' => '笞',
+ '²È' => '笮',
+ '²É' => 'ç²’',
+ '²Ê' => 'ç²—',
+ '²Ë' => '粕',
+ '²Ì' => '絆',
+ '²Í' => '絃',
+ '²Î' => 'çµ±',
+ '²Ï' => 'ç´®',
+ '²Ð' => 'ç´¹',
+ '²Ñ' => 'ç´¼',
+ '²Ò' => 'çµ€',
+ '²Ó' => 'ç´°',
+ '²Ô' => 'ç´³',
+ '²Õ' => '組',
+ '²Ö' => 'ç´¯',
+ '²×' => '終',
+ '²Ø' => 'ç´²',
+ '²Ù' => 'ç´±',
+ '²Ú' => 'ç¼½',
+ '²Û' => '羞',
+ '²Ü' => '羚',
+ '²Ý' => 'ç¿Œ',
+ '²Þ' => 'ç¿Ž',
+ '²ß' => 'ç¿’',
+ '²à' => '耜',
+ '²á' => 'èŠ',
+ '²â' => 'è†',
+ '²ã' => '脯',
+ '²ä' => 'è„–',
+ '²å' => 'è„£',
+ '²æ' => 'è„«',
+ '²ç' => 'è„©',
+ '²è' => 'è„°',
+ '²é' => '脤',
+ '²ê' => '舂',
+ '²ë' => '舵',
+ '²ì' => '舷',
+ '²í' => '舶',
+ '²î' => '船',
+ '²ï' => '莎',
+ '²ð' => '莞',
+ '²ñ' => '莘',
+ '²ò' => 'è¸',
+ '²ó' => '莢',
+ '²ô' => '莖',
+ '²õ' => '莽',
+ '²ö' => '莫',
+ '²÷' => '莒',
+ '²ø' => '莊',
+ '²ù' => '莓',
+ '²ú' => '莉',
+ '²û' => 'èŽ ',
+ '²ü' => 'è·',
+ '²ý' => 'è»',
+ '²þ' => 'è¼',
+ '³@' => '莆',
+ '³A' => '莧',
+ '³B' => '處',
+ '³C' => '彪',
+ '³D' => '蛇',
+ '³E' => '蛀',
+ '³F' => '蚶',
+ '³G' => '蛄',
+ '³H' => 'èšµ',
+ '³I' => '蛆',
+ '³J' => '蛋',
+ '³K' => 'èš±',
+ '³L' => '蚯',
+ '³M' => '蛉',
+ '³N' => 'è¡“',
+ '³O' => '袞',
+ '³P' => '袈',
+ '³Q' => '被',
+ '³R' => '袒',
+ '³S' => '袖',
+ '³T' => 'è¢',
+ '³U' => '袋',
+ '³V' => '覓',
+ '³W' => 'è¦',
+ '³X' => '訪',
+ '³Y' => 'è¨',
+ '³Z' => '訣',
+ '³[' => '訥',
+ '³\\' => '許',
+ '³]' => 'è¨',
+ '³^' => '訟',
+ '³_' => '訛',
+ '³`' => '訢',
+ '³a' => '豉',
+ '³b' => '豚',
+ '³c' => '販',
+ '³d' => '責',
+ '³e' => '貫',
+ '³f' => '貨',
+ '³g' => '貪',
+ '³h' => '貧',
+ '³i' => '赧',
+ '³j' => '赦',
+ '³k' => '趾',
+ '³l' => '趺',
+ '³m' => 'è»›',
+ '³n' => '軟',
+ '³o' => '這',
+ '³p' => 'é€',
+ '³q' => '通',
+ '³r' => '逗',
+ '³s' => '連',
+ '³t' => '速',
+ '³u' => 'é€',
+ '³v' => 'é€',
+ '³w' => '逕',
+ '³x' => '逞',
+ '³y' => 'é€ ',
+ '³z' => 'é€',
+ '³{' => '逢',
+ '³|' => '逖',
+ '³}' => '逛',
+ '³~' => '途',
+ '³¡' => '部',
+ '³¢' => 'éƒ',
+ '³£' => '都',
+ '³¤' => 'é…—',
+ '³¥' => '野',
+ '³¦' => '釵',
+ '³§' => '釦',
+ '³¨' => '釣',
+ '³©' => '釧',
+ '³ª' => 'é‡',
+ '³«' => '釩',
+ '³¬' => 'é–‰',
+ '³' => '陪',
+ '³®' => '陵',
+ '³¯' => '陳',
+ '³°' => '陸',
+ '³±' => 'é™°',
+ '³²' => 'é™´',
+ '³³' => '陶',
+ '³´' => 'é™·',
+ '³µ' => '陬',
+ '³¶' => '雀',
+ '³·' => '雪',
+ '³¸' => '雩',
+ '³¹' => 'ç« ',
+ '³º' => 'ç«Ÿ',
+ '³»' => 'é ‚',
+ '³¼' => 'é ƒ',
+ '³½' => 'éš',
+ '³¾' => 'é³¥',
+ '³¿' => 'é¹µ',
+ '³À' => '鹿',
+ '³Á' => '麥',
+ '³Â' => '麻',
+ '³Ã' => 'å‚¢',
+ '³Ä' => 'å‚',
+ '³Å' => 'å‚…',
+ '³Æ' => 'å‚™',
+ '³Ç' => 'å‚‘',
+ '³È' => 'å‚€',
+ '³É' => 'å‚–',
+ '³Ê' => '傘',
+ '³Ë' => 'å‚š',
+ '³Ì' => '最',
+ '³Í' => '凱',
+ '³Î' => '割',
+ '³Ï' => '剴',
+ '³Ð' => '創',
+ '³Ñ' => '剩',
+ '³Ò' => 'å‹ž',
+ '³Ó' => 'å‹',
+ '³Ô' => 'å‹›',
+ '³Õ' => 'åš',
+ '³Ö' => '厥',
+ '³×' => 'å•»',
+ '³Ø' => 'å–€',
+ '³Ù' => 'å–§',
+ '³Ú' => '啼',
+ '³Û' => 'å–Š',
+ '³Ü' => 'å–',
+ '³Ý' => 'å–˜',
+ '³Þ' => 'å–‚',
+ '³ß' => 'å–œ',
+ '³à' => 'å–ª',
+ '³á' => 'å–”',
+ '³â' => 'å–‡',
+ '³ã' => 'å–‹',
+ '³ä' => 'å–ƒ',
+ '³å' => 'å–³',
+ '³æ' => 'å–®',
+ '³ç' => 'å–Ÿ',
+ '³è' => '唾',
+ '³é' => 'å–²',
+ '³ê' => 'å–š',
+ '³ë' => 'å–»',
+ '³ì' => 'å–¬',
+ '³í' => 'å–±',
+ '³î' => '啾',
+ '³ï' => 'å–‰',
+ '³ð' => 'å–«',
+ '³ñ' => 'å–™',
+ '³ò' => 'åœ',
+ '³ó' => 'å ¯',
+ '³ô' => 'å ª',
+ '³õ' => 'å ´',
+ '³ö' => 'å ¤',
+ '³÷' => 'å °',
+ '³ø' => 'å ±',
+ '³ù' => 'å ¡',
+ '³ú' => 'å ',
+ '³û' => 'å ',
+ '³ü' => '壹',
+ '³ý' => '壺',
+ '³þ' => 'å¥ ',
+ '´@' => 'å©·',
+ '´A' => '媚',
+ '´B' => 'å©¿',
+ '´C' => '媒',
+ '´D' => '媛',
+ '´E' => '媧',
+ '´F' => 'å³',
+ '´G' => 'å±',
+ '´H' => '寒',
+ '´I' => '富',
+ '´J' => '寓',
+ '´K' => 'å¯',
+ '´L' => 'å°Š',
+ '´M' => 'å°‹',
+ '´N' => 'å°±',
+ '´O' => '嵌',
+ '´P' => 'åµ',
+ '´Q' => 'å´´',
+ '´R' => '嵇',
+ '´S' => 'å·½',
+ '´T' => 'å¹…',
+ '´U' => '帽',
+ '´V' => 'å¹€',
+ '´W' => '幃',
+ '´X' => 'å¹¾',
+ '´Y' => '廊',
+ '´Z' => 'å»',
+ '´[' => '廂',
+ '´\\' => '廄',
+ '´]' => 'å¼¼',
+ '´^' => 'å½',
+ '´_' => '復',
+ '´`' => '循',
+ '´a' => '徨',
+ '´b' => '惑',
+ '´c' => '惡',
+ '´d' => '悲',
+ '´e' => '悶',
+ '´f' => 'æƒ ',
+ '´g' => 'æ„œ',
+ '´h' => 'æ„£',
+ '´i' => '惺',
+ '´j' => 'æ„•',
+ '´k' => '惰',
+ '´l' => '惻',
+ '´m' => '惴',
+ '´n' => 'æ…¨',
+ '´o' => '惱',
+ '´p' => 'æ„Ž',
+ '´q' => '惶',
+ '´r' => '愉',
+ '´s' => 'æ„€',
+ '´t' => 'æ„’',
+ '´u' => '戟',
+ '´v' => '扉',
+ '´w' => '掣',
+ '´x' => '掌',
+ '´y' => 'æ',
+ '´z' => 'æ€',
+ '´{' => 'æ©',
+ '´|' => 'æ‰',
+ '´}' => 'æ†',
+ '´~' => 'æ',
+ '´¡' => 'æ’',
+ '´¢' => 'æ£',
+ '´£' => 'æ',
+ '´¤' => 'æ¡',
+ '´¥' => 'æ–',
+ '´¦' => 'æ',
+ '´§' => 'æ®',
+ '´¨' => 'æ¶',
+ '´©' => 'æ´',
+ '´ª' => 'æª',
+ '´«' => 'æ›',
+ '´¬' => 'æ‘’',
+ '´' => 'æš',
+ '´®' => 'æ¹',
+ '´¯' => 'æ•ž',
+ '´°' => '敦',
+ '´±' => 'æ•¢',
+ '´²' => 'æ•£',
+ '´³' => 'æ–‘',
+ '´´' => 'æ–',
+ '´µ' => 'æ–¯',
+ '´¶' => 'æ™®',
+ '´·' => 'æ™°',
+ '´¸' => 'æ™´',
+ '´¹' => '晶',
+ '´º' => '景',
+ '´»' => 'æš‘',
+ '´¼' => '智',
+ '´½' => '晾',
+ '´¾' => 'æ™·',
+ '´¿' => '曾',
+ '´À' => '替',
+ '´Á' => '期',
+ '´Â' => 'æœ',
+ '´Ã' => '棺',
+ '´Ä' => '棕',
+ '´Å' => 'æ£ ',
+ '´Æ' => '棘',
+ '´Ç' => '棗',
+ '´È' => '椅',
+ '´É' => '棟',
+ '´Ê' => '棵',
+ '´Ë' => '森',
+ '´Ì' => '棧',
+ '´Í' => '棹',
+ '´Î' => '棒',
+ '´Ï' => '棲',
+ '´Ð' => '棣',
+ '´Ñ' => '棋',
+ '´Ò' => 'æ£',
+ '´Ó' => 'æ¤',
+ '´Ô' => '椒',
+ '´Õ' => '椎',
+ '´Ö' => '棉',
+ '´×' => '棚',
+ '´Ø' => '楮',
+ '´Ù' => '棻',
+ '´Ú' => '款',
+ '´Û' => '欺',
+ '´Ü' => '欽',
+ '´Ý' => '殘',
+ '´Þ' => 'æ®–',
+ '´ß' => '殼',
+ '´à' => '毯',
+ '´á' => 'æ°®',
+ '´â' => 'æ°¯',
+ '´ã' => 'æ°¬',
+ '´ä' => '港',
+ '´å' => '游',
+ '´æ' => 'æ¹”',
+ '´ç' => '渡',
+ '´è' => '渲',
+ '´é' => '湧',
+ '´ê' => '湊',
+ '´ë' => 'æ¸ ',
+ '´ì' => '渥',
+ '´í' => '渣',
+ '´î' => '減',
+ '´ï' => 'æ¹›',
+ '´ð' => '湘',
+ '´ñ' => '渤',
+ '´ò' => 'æ¹–',
+ '´ó' => 'æ¹®',
+ '´ô' => 'æ¸',
+ '´õ' => '渦',
+ '´ö' => '湯',
+ '´÷' => '渴',
+ '´ø' => 'æ¹',
+ '´ù' => '渺',
+ '´ú' => '測',
+ '´û' => '湃',
+ '´ü' => 'æ¸',
+ '´ý' => '渾',
+ '´þ' => '滋',
+ 'µ@' => '溉',
+ 'µA' => '渙',
+ 'µB' => '湎',
+ 'µC' => 'æ¹£',
+ 'µD' => '湄',
+ 'µE' => 'æ¹²',
+ 'µF' => '湩',
+ 'µG' => '湟',
+ 'µH' => 'ç„™',
+ 'µI' => 'ç„š',
+ 'µJ' => '焦',
+ 'µK' => 'ç„°',
+ 'µL' => 'ç„¡',
+ 'µM' => '然',
+ 'µN' => 'ç…®',
+ 'µO' => 'ç„œ',
+ 'µP' => '牌',
+ 'µQ' => '犄',
+ 'µR' => '犀',
+ 'µS' => '猶',
+ 'µT' => '猥',
+ 'µU' => '猴',
+ 'µV' => '猩',
+ 'µW' => 'çº',
+ 'µX' => 'çª',
+ 'µY' => 'ç³',
+ 'µZ' => 'ç¢',
+ 'µ[' => 'ç¥',
+ 'µ\\' => 'çµ',
+ 'µ]' => 'ç¶',
+ 'µ^' => 'ç´',
+ 'µ_' => 'ç¯',
+ 'µ`' => 'ç›',
+ 'µa' => 'ç¦',
+ 'µb' => 'ç¨',
+ 'µc' => '甥',
+ 'µd' => '甦',
+ 'µe' => 'ç•«',
+ 'µf' => '番',
+ 'µg' => 'ç—¢',
+ 'µh' => 'ç—›',
+ 'µi' => 'ç—£',
+ 'µj' => 'ç—™',
+ 'µk' => 'ç—˜',
+ 'µl' => 'ç—ž',
+ 'µm' => 'ç— ',
+ 'µn' => 'ç™»',
+ 'µo' => '發',
+ 'µp' => 'çš–',
+ 'µq' => 'çš“',
+ 'µr' => 'çš´',
+ 'µs' => '盜',
+ 'µt' => 'ç',
+ 'µu' => 'çŸ',
+ 'µv' => 'ç¡',
+ 'µw' => '硬',
+ 'µx' => '硯',
+ 'µy' => 'ç¨',
+ 'µz' => '稈',
+ 'µ{' => '程',
+ 'µ|' => '稅',
+ 'µ}' => '稀',
+ 'µ~' => '窘',
+ 'µ¡' => '窗',
+ 'µ¢' => '窖',
+ 'µ£' => 'ç«¥',
+ 'µ¤' => 'ç«£',
+ 'µ¥' => 'ç‰',
+ 'µ¦' => 'ç–',
+ 'µ§' => 'ç†',
+ 'µ¨' => 'ç',
+ 'µ©' => 'ç’',
+ 'µª' => 'ç”',
+ 'µ«' => 'ç',
+ 'µ¬' => 'ç‹',
+ 'µ' => 'ç',
+ 'µ®' => 'ç‘',
+ 'µ¯' => '粟',
+ 'µ°' => 'ç²¥',
+ 'µ±' => '絞',
+ 'µ²' => 'çµ',
+ 'µ³' => '絨',
+ 'µ´' => '絕',
+ 'µµ' => 'ç´«',
+ 'µ¶' => 'çµ®',
+ 'µ·' => 'çµ²',
+ 'µ¸' => '絡',
+ 'µ¹' => '給',
+ 'µº' => 'çµ¢',
+ 'µ»' => 'çµ°',
+ 'µ¼' => 'çµ³',
+ 'µ½' => 'å–„',
+ 'µ¾' => 'ç¿”',
+ 'µ¿' => 'ç¿•',
+ 'µÀ' => '耋',
+ 'µÁ' => 'è’',
+ 'µÂ' => 'è‚…',
+ 'µÃ' => 'è…•',
+ 'µÄ' => 'è…”',
+ 'µÅ' => 'è…‹',
+ 'µÆ' => 'è…‘',
+ 'µÇ' => 'è…Ž',
+ 'µÈ' => '脹',
+ 'µÉ' => 'è…†',
+ 'µÊ' => '脾',
+ 'µË' => 'è…Œ',
+ 'µÌ' => 'è…“',
+ 'µÍ' => 'è…´',
+ 'µÎ' => '舒',
+ 'µÏ' => '舜',
+ 'µÐ' => 'è©',
+ 'µÑ' => 'èƒ',
+ 'µÒ' => 'è¸',
+ 'µÓ' => 'è',
+ 'µÔ' => 'è ',
+ 'µÕ' => 'è…',
+ 'µÖ' => 'è‹',
+ 'µ×' => 'è',
+ 'µØ' => 'è¯',
+ 'µÙ' => 'è±',
+ 'µÚ' => 'è´',
+ 'µÛ' => 'è‘—',
+ 'µÜ' => 'èŠ',
+ 'µÝ' => 'è°',
+ 'µÞ' => 'èŒ',
+ 'µß' => 'èŒ',
+ 'µà' => 'è½',
+ 'µá' => 'è²',
+ 'µâ' => 'èŠ',
+ 'µã' => 'è¸',
+ 'µä' => 'èŽ',
+ 'µå' => 'è„',
+ 'µæ' => 'èœ',
+ 'µç' => 'è‡',
+ 'µè' => 'è”',
+ 'µé' => 'èŸ',
+ 'µê' => 'è™›',
+ 'µë' => '蛟',
+ 'µì' => 'è›™',
+ 'µí' => 'è›',
+ 'µî' => 'è›”',
+ 'µï' => 'è››',
+ 'µð' => '蛤',
+ 'µñ' => 'è›',
+ 'µò' => '蛞',
+ 'µó' => 'è¡—',
+ 'µô' => 'è£',
+ 'µõ' => '裂',
+ 'µö' => '袱',
+ 'µ÷' => '覃',
+ 'µø' => '視',
+ 'µù' => '註',
+ 'µú' => 'è© ',
+ 'µû' => 'è©•',
+ 'µü' => 'è©ž',
+ 'µý' => '証',
+ 'µþ' => 'è©',
+ '¶@' => 'è©”',
+ '¶A' => 'è©›',
+ '¶B' => 'è©',
+ '¶C' => '詆',
+ '¶D' => '訴',
+ '¶E' => '診',
+ '¶F' => '訶',
+ '¶G' => 'è©–',
+ '¶H' => '象',
+ '¶I' => '貂',
+ '¶J' => '貯',
+ '¶K' => 'è²¼',
+ '¶L' => 'è²³',
+ '¶M' => 'è²½',
+ '¶N' => 'è³',
+ '¶O' => 'è²»',
+ '¶P' => 'è³€',
+ '¶Q' => 'è²´',
+ '¶R' => 'è²·',
+ '¶S' => '貶',
+ '¶T' => '貿',
+ '¶U' => '貸',
+ '¶V' => '越',
+ '¶W' => '超',
+ '¶X' => 'è¶',
+ '¶Y' => 'è·Ž',
+ '¶Z' => 'è·',
+ '¶[' => 'è·‹',
+ '¶\\' => 'è·š',
+ '¶]' => 'è·‘',
+ '¶^' => 'è·Œ',
+ '¶_' => 'è·›',
+ '¶`' => 'è·†',
+ '¶a' => 'è»»',
+ '¶b' => '軸',
+ '¶c' => '軼',
+ '¶d' => '辜',
+ '¶e' => '逮',
+ '¶f' => '逵',
+ '¶g' => '週',
+ '¶h' => '逸',
+ '¶i' => '進',
+ '¶j' => '逶',
+ '¶k' => 'é„‚',
+ '¶l' => '郵',
+ '¶m' => '鄉',
+ '¶n' => '郾',
+ '¶o' => 'é…£',
+ '¶p' => 'é…¥',
+ '¶q' => 'é‡',
+ '¶r' => '鈔',
+ '¶s' => '鈕',
+ '¶t' => '鈣',
+ '¶u' => '鈉',
+ '¶v' => '鈞',
+ '¶w' => 'éˆ',
+ '¶x' => 'éˆ',
+ '¶y' => '鈇',
+ '¶z' => '鈑',
+ '¶{' => 'é–”',
+ '¶|' => 'é–',
+ '¶}' => 'é–‹',
+ '¶~' => 'é–‘',
+ '¶¡' => 'é–“',
+ '¶¢' => 'é–’',
+ '¶£' => 'é–Ž',
+ '¶¤' => '隊',
+ '¶¥' => '階',
+ '¶¦' => 'éš‹',
+ '¶§' => '陽',
+ '¶¨' => 'éš…',
+ '¶©' => '隆',
+ '¶ª' => 'éš',
+ '¶«' => '陲',
+ '¶¬' => 'éš„',
+ '¶' => 'é›',
+ '¶®' => 'é›…',
+ '¶¯' => '雄',
+ '¶°' => '集',
+ '¶±' => '雇',
+ '¶²' => '雯',
+ '¶³' => '雲',
+ '¶´' => '韌',
+ '¶µ' => 'é …',
+ '¶¶' => 'é †',
+ '¶·' => 'é ˆ',
+ '¶¸' => '飧',
+ '¶¹' => '飪',
+ '¶º' => '飯',
+ '¶»' => '飩',
+ '¶¼' => '飲',
+ '¶½' => 'é£',
+ '¶¾' => '馮',
+ '¶¿' => 'é¦',
+ '¶À' => '黃',
+ '¶Á' => 'é»',
+ '¶Â' => '黑',
+ '¶Ã' => '亂',
+ '¶Ä' => 'å‚',
+ '¶Å' => '債',
+ '¶Æ' => '傲',
+ '¶Ç' => '傳',
+ '¶È' => '僅',
+ '¶É' => '傾',
+ '¶Ê' => '催',
+ '¶Ë' => 'å‚·',
+ '¶Ì' => 'å‚»',
+ '¶Í' => '傯',
+ '¶Î' => '僇',
+ '¶Ï' => '剿',
+ '¶Ð' => '剷',
+ '¶Ñ' => '剽',
+ '¶Ò' => 'å‹Ÿ',
+ '¶Ó' => '勦',
+ '¶Ô' => '勤',
+ '¶Õ' => 'å‹¢',
+ '¶Ö' => 'å‹£',
+ '¶×' => '匯',
+ '¶Ø' => 'å—Ÿ',
+ '¶Ù' => 'å—¨',
+ '¶Ú' => 'å—“',
+ '¶Û' => 'å—¦',
+ '¶Ü' => 'å—Ž',
+ '¶Ý' => 'å—œ',
+ '¶Þ' => 'å—‡',
+ '¶ß' => 'å—‘',
+ '¶à' => 'å—£',
+ '¶á' => 'å—¤',
+ '¶â' => 'å—¯',
+ '¶ã' => 'å—š',
+ '¶ä' => 'å—¡',
+ '¶å' => 'å—…',
+ '¶æ' => 'å—†',
+ '¶ç' => 'å—¥',
+ '¶è' => 'å—‰',
+ '¶é' => '園',
+ '¶ê' => '圓',
+ '¶ë' => 'å¡ž',
+ '¶ì' => 'å¡‘',
+ '¶í' => '塘',
+ '¶î' => 'å¡—',
+ '¶ï' => 'å¡š',
+ '¶ð' => 'å¡”',
+ '¶ñ' => 'å¡«',
+ '¶ò' => 'å¡Œ',
+ '¶ó' => 'å¡',
+ '¶ô' => 'å¡Š',
+ '¶õ' => 'å¡¢',
+ '¶ö' => 'å¡’',
+ '¶÷' => 'å¡‹',
+ '¶ø' => '奧',
+ '¶ù' => 'å«',
+ '¶ú' => '嫉',
+ '¶û' => 'å«Œ',
+ '¶ü' => '媾',
+ '¶ý' => '媽',
+ '¶þ' => '媼',
+ '·@' => '媳',
+ '·A' => 'å«‚',
+ '·B' => '媲',
+ '·C' => '嵩',
+ '·D' => '嵯',
+ '·E' => '幌',
+ '·F' => 'å¹¹',
+ '·G' => '廉',
+ '·H' => '廈',
+ '·I' => 'å¼’',
+ '·J' => 'å½™',
+ '·K' => '徬',
+ '·L' => 'å¾®',
+ '·M' => 'æ„š',
+ '·N' => 'æ„',
+ '·O' => 'æ…ˆ',
+ '·P' => 'æ„Ÿ',
+ '·Q' => '想',
+ '·R' => 'æ„›',
+ '·S' => '惹',
+ '·T' => 'æ„',
+ '·U' => '愈',
+ '·V' => 'æ…Ž',
+ '·W' => 'æ…Œ',
+ '·X' => 'æ…„',
+ '·Y' => 'æ…',
+ '·Z' => '愾',
+ '·[' => 'æ„´',
+ '·\\' => '愧',
+ '·]' => 'æ„',
+ '·^' => '愆',
+ '·_' => 'æ„·',
+ '·`' => '戡',
+ '·a' => '戢',
+ '·b' => 'æ“',
+ '·c' => 'æ¾',
+ '·d' => 'æž',
+ '·e' => 'æª',
+ '·f' => 'æ',
+ '·g' => 'æ½',
+ '·h' => 'æ¬',
+ '·i' => 'æ',
+ '·j' => 'æœ',
+ '·k' => 'æ”',
+ '·l' => 'æ',
+ '·m' => 'æ¶',
+ '·n' => 'æ–',
+ '·o' => 'æ—',
+ '·p' => 'æ†',
+ '·q' => '敬',
+ '·r' => 'æ–Ÿ',
+ '·s' => 'æ–°',
+ '·t' => 'æš—',
+ '·u' => '暉',
+ '·v' => '暇',
+ '·w' => '暈',
+ '·x' => 'æš–',
+ '·y' => 'æš„',
+ '·z' => '暘',
+ '·{' => 'æš',
+ '·|' => '會',
+ '·}' => '榔',
+ '·~' => 'æ¥',
+ '·¡' => '楚',
+ '·¢' => '楷',
+ '·£' => 'æ¥ ',
+ '·¤' => '楔',
+ '·¥' => '極',
+ '·¦' => '椰',
+ '·§' => '概',
+ '·¨' => '楊',
+ '·©' => '楨',
+ '·ª' => '楫',
+ '·«' => '楞',
+ '·¬' => '楓',
+ '·' => '楹',
+ '·®' => '榆',
+ '·¯' => 'æ¥',
+ '·°' => '楣',
+ '·±' => '楛',
+ '·²' => 'æ‡',
+ '·³' => 'æ²',
+ '·´' => '毀',
+ '·µ' => '殿',
+ '·¶' => '毓',
+ '··' => '毽',
+ '·¸' => '溢',
+ '·¹' => '溯',
+ '·º' => '滓',
+ '·»' => '溶',
+ '·¼' => '滂',
+ '·½' => 'æº',
+ '·¾' => 'æº',
+ '·¿' => '滇',
+ '·À' => 'æ»…',
+ '·Á' => '溥',
+ '·Â' => '溘',
+ '·Ã' => '溼',
+ '·Ä' => '溺',
+ '·Å' => '溫',
+ '·Æ' => '滑',
+ '·Ç' => '準',
+ '·È' => '溜',
+ '·É' => '滄',
+ '·Ê' => 'æ»”',
+ '·Ë' => '溪',
+ '·Ì' => '溧',
+ '·Í' => '溴',
+ '·Î' => 'ç…Ž',
+ '·Ï' => 'ç…™',
+ '·Ð' => 'ç…©',
+ '·Ñ' => 'ç…¤',
+ '·Ò' => 'ç…‰',
+ '·Ó' => 'ç…§',
+ '·Ô' => 'ç…œ',
+ '·Õ' => 'ç…¬',
+ '·Ö' => 'ç…¦',
+ '·×' => 'ç…Œ',
+ '·Ø' => 'ç…¥',
+ '·Ù' => 'ç…ž',
+ '·Ú' => 'ç…†',
+ '·Û' => 'ç…¨',
+ '·Ü' => 'ç…–',
+ '·Ý' => '爺',
+ '·Þ' => '牒',
+ '·ß' => '猷',
+ '·à' => 'ç…',
+ '·á' => '猿',
+ '·â' => '猾',
+ '·ã' => '瑯',
+ '·ä' => 'ç‘š',
+ '·å' => 'ç‘•',
+ '·æ' => 'ç‘Ÿ',
+ '·ç' => 'ç‘ž',
+ '·è' => 'ç‘',
+ '·é' => 'ç¿',
+ '·ê' => 'ç‘™',
+ '·ë' => 'ç‘›',
+ '·ì' => 'ç‘œ',
+ '·í' => '當',
+ '·î' => '畸',
+ '·ï' => '瘀',
+ '·ð' => 'ç—°',
+ '·ñ' => 'ç˜',
+ '·ò' => 'ç—²',
+ '·ó' => 'ç—±',
+ '·ô' => 'ç—º',
+ '·õ' => 'ç—¿',
+ '·ö' => 'ç—´',
+ '·÷' => 'ç—³',
+ '·ø' => '盞',
+ '·ù' => '盟',
+ '·ú' => 'ç›',
+ '·û' => 'ç«',
+ '·ü' => 'ç¦',
+ '·ý' => 'çž',
+ '·þ' => 'ç£',
+ '¸@' => 'ç¹',
+ '¸A' => 'çª',
+ '¸B' => 'ç¬',
+ '¸C' => 'çœ',
+ '¸D' => 'ç¥',
+ '¸E' => 'ç¨',
+ '¸F' => 'ç¢',
+ '¸G' => '矮',
+ '¸H' => '碎',
+ '¸I' => '碰',
+ '¸J' => '碗',
+ '¸K' => '碘',
+ '¸L' => '碌',
+ '¸M' => '碉',
+ '¸N' => '硼',
+ '¸O' => '碑',
+ '¸P' => '碓',
+ '¸Q' => 'ç¡¿',
+ '¸R' => '祺',
+ '¸S' => '祿',
+ '¸T' => 'ç¦',
+ '¸U' => 'è¬',
+ '¸V' => '禽',
+ '¸W' => '稜',
+ '¸X' => '稚',
+ '¸Y' => 'ç¨ ',
+ '¸Z' => '稔',
+ '¸[' => '稟',
+ '¸\\' => '稞',
+ '¸]' => '窟',
+ '¸^' => 'çª ',
+ '¸_' => 'ç·',
+ '¸`' => '節',
+ '¸a' => 'ç ',
+ '¸b' => 'ç®',
+ '¸c' => 'ç§',
+ '¸d' => 'ç²±',
+ '¸e' => 'ç²³',
+ '¸f' => 'ç²µ',
+ '¸g' => '經',
+ '¸h' => 'çµ¹',
+ '¸i' => '綑',
+ '¸j' => 'ç¶',
+ '¸k' => 'ç¶',
+ '¸l' => 'çµ›',
+ '¸m' => 'ç½®',
+ '¸n' => '罩',
+ '¸o' => '罪',
+ '¸p' => 'ç½²',
+ '¸q' => '義',
+ '¸r' => '羨',
+ '¸s' => '群',
+ '¸t' => 'è–',
+ '¸u' => 'è˜',
+ '¸v' => '肆',
+ '¸w' => 'è‚„',
+ '¸x' => 'è…±',
+ '¸y' => 'è…°',
+ '¸z' => 'è…¸',
+ '¸{' => 'è…¥',
+ '¸|' => 'è…®',
+ '¸}' => 'è…³',
+ '¸~' => 'è…«',
+ '¸¡' => 'è…¹',
+ '¸¢' => 'è…º',
+ '¸£' => 'è…¦',
+ '¸¤' => '舅',
+ '¸¥' => '艇',
+ '¸¦' => 'è’‚',
+ '¸§' => 'è‘·',
+ '¸¨' => 'è½',
+ '¸©' => 'è±',
+ '¸ª' => '葵',
+ '¸«' => '葦',
+ '¸¬' => 'è‘«',
+ '¸' => '葉',
+ '¸®' => '葬',
+ '¸¯' => 'è‘›',
+ '¸°' => 'è¼',
+ '¸±' => 'èµ',
+ '¸²' => 'è‘¡',
+ '¸³' => 'è‘£',
+ '¸´' => 'è‘©',
+ '¸µ' => 'è‘',
+ '¸¶' => '葆',
+ '¸·' => '虞',
+ '¸¸' => '虜',
+ '¸¹' => '號',
+ '¸º' => '蛹',
+ '¸»' => '蜓',
+ '¸¼' => '蜈',
+ '¸½' => '蜇',
+ '¸¾' => '蜀',
+ '¸¿' => '蛾',
+ '¸À' => 'è›»',
+ '¸Á' => '蜂',
+ '¸Â' => '蜃',
+ '¸Ã' => '蜆',
+ '¸Ä' => '蜊',
+ '¸Å' => 'è¡™',
+ '¸Æ' => '裟',
+ '¸Ç' => '裔',
+ '¸È' => '裙',
+ '¸É' => '補',
+ '¸Ê' => '裘',
+ '¸Ë' => 'è£',
+ '¸Ì' => '裡',
+ '¸Í' => '裊',
+ '¸Î' => '裕',
+ '¸Ï' => '裒',
+ '¸Ð' => '覜',
+ '¸Ñ' => '解',
+ '¸Ò' => 'è©«',
+ '¸Ó' => '該',
+ '¸Ô' => '詳',
+ '¸Õ' => '試',
+ '¸Ö' => 'è©©',
+ '¸×' => 'è©°',
+ '¸Ø' => '誇',
+ '¸Ù' => '詼',
+ '¸Ú' => 'è©£',
+ '¸Û' => 'èª ',
+ '¸Ü' => '話',
+ '¸Ý' => '誅',
+ '¸Þ' => 'è©',
+ '¸ß' => 'è©¢',
+ '¸à' => 'è©®',
+ '¸á' => '詬',
+ '¸â' => '詹',
+ '¸ã' => 'è©»',
+ '¸ä' => '訾',
+ '¸å' => '詨',
+ '¸æ' => 'è±¢',
+ '¸ç' => '貊',
+ '¸è' => '貉',
+ '¸é' => '賊',
+ '¸ê' => '資',
+ '¸ë' => '賈',
+ '¸ì' => '賄',
+ '¸í' => 'è²²',
+ '¸î' => '賃',
+ '¸ï' => '賂',
+ '¸ð' => 'è³…',
+ '¸ñ' => 'è·¡',
+ '¸ò' => 'è·Ÿ',
+ '¸ó' => 'è·¨',
+ '¸ô' => 'è·¯',
+ '¸õ' => 'è·³',
+ '¸ö' => 'è·º',
+ '¸÷' => 'è·ª',
+ '¸ø' => 'è·¤',
+ '¸ù' => 'è·¦',
+ '¸ú' => '躲',
+ '¸û' => '較',
+ '¸ü' => '載',
+ '¸ý' => '軾',
+ '¸þ' => '輊',
+ '¹@' => '辟',
+ '¹A' => 'è¾²',
+ '¹B' => 'é‹',
+ '¹C' => 'éŠ',
+ '¹D' => 'é“',
+ '¹E' => 'é‚',
+ '¹F' => 'é”',
+ '¹G' => '逼',
+ '¹H' => 'é•',
+ '¹I' => 'é',
+ '¹J' => 'é‡',
+ '¹K' => 'é',
+ '¹L' => 'éŽ',
+ '¹M' => 'é',
+ '¹N' => 'é‘',
+ '¹O' => '逾',
+ '¹P' => 'é',
+ '¹Q' => 'é„’',
+ '¹R' => 'é„—',
+ '¹S' => 'é…¬',
+ '¹T' => 'é…ª',
+ '¹U' => 'é…©',
+ '¹V' => '釉',
+ '¹W' => '鈷',
+ '¹X' => '鉗',
+ '¹Y' => '鈸',
+ '¹Z' => '鈽',
+ '¹[' => '鉀',
+ '¹\\' => '鈾',
+ '¹]' => '鉛',
+ '¹^' => '鉋',
+ '¹_' => '鉤',
+ '¹`' => '鉑',
+ '¹a' => '鈴',
+ '¹b' => '鉉',
+ '¹c' => 'é‰',
+ '¹d' => '鉅',
+ '¹e' => '鈹',
+ '¹f' => '鈿',
+ '¹g' => '鉚',
+ '¹h' => 'é–˜',
+ '¹i' => '隘',
+ '¹j' => 'éš”',
+ '¹k' => 'éš•',
+ '¹l' => 'é›',
+ '¹m' => '雋',
+ '¹n' => '雉',
+ '¹o' => '雊',
+ '¹p' => 'é›·',
+ '¹q' => 'é›»',
+ '¹r' => '雹',
+ '¹s' => '零',
+ '¹t' => 'é–',
+ '¹u' => 'é´',
+ '¹v' => 'é¶',
+ '¹w' => 'é ',
+ '¹x' => 'é ‘',
+ '¹y' => 'é “',
+ '¹z' => 'é Š',
+ '¹{' => 'é ’',
+ '¹|' => 'é Œ',
+ '¹}' => '飼',
+ '¹~' => '飴',
+ '¹¡' => '飽',
+ '¹¢' => '飾',
+ '¹£' => '馳',
+ '¹¤' => '馱',
+ '¹¥' => '馴',
+ '¹¦' => 'é«¡',
+ '¹§' => '鳩',
+ '¹¨' => '麂',
+ '¹©' => '鼎',
+ '¹ª' => '鼓',
+ '¹«' => 'é¼ ',
+ '¹¬' => '僧',
+ '¹' => '僮',
+ '¹®' => '僥',
+ '¹¯' => '僖',
+ '¹°' => 'åƒ',
+ '¹±' => '僚',
+ '¹²' => '僕',
+ '¹³' => 'åƒ',
+ '¹´' => '僑',
+ '¹µ' => '僱',
+ '¹¶' => '僎',
+ '¹·' => '僩',
+ '¹¸' => 'å…¢',
+ '¹¹' => '凳',
+ '¹º' => '劃',
+ '¹»' => '劂',
+ '¹¼' => '匱',
+ '¹½' => 'åŽ',
+ '¹¾' => 'å—¾',
+ '¹¿' => '嘀',
+ '¹À' => '嘛',
+ '¹Á' => '嘗',
+ '¹Â' => 'å—½',
+ '¹Ã' => '嘔',
+ '¹Ä' => '嘆',
+ '¹Å' => '嘉',
+ '¹Æ' => 'å˜',
+ '¹Ç' => '嘎',
+ '¹È' => 'å—·',
+ '¹É' => '嘖',
+ '¹Ê' => '嘟',
+ '¹Ë' => '嘈',
+ '¹Ì' => 'å˜',
+ '¹Í' => 'å—¶',
+ '¹Î' => '團',
+ '¹Ï' => '圖',
+ '¹Ð' => '塵',
+ '¹Ñ' => '塾',
+ '¹Ò' => '境',
+ '¹Ó' => '墓',
+ '¹Ô' => '墊',
+ '¹Õ' => '塹',
+ '¹Ö' => '墅',
+ '¹×' => '塽',
+ '¹Ø' => '壽',
+ '¹Ù' => '夥',
+ '¹Ú' => '夢',
+ '¹Û' => '夤',
+ '¹Ü' => '奪',
+ '¹Ý' => '奩',
+ '¹Þ' => 'å«¡',
+ '¹ß' => '嫦',
+ '¹à' => 'å«©',
+ '¹á' => 'å«—',
+ '¹â' => 'å«–',
+ '¹ã' => '嫘',
+ '¹ä' => 'å«£',
+ '¹å' => 'åµ',
+ '¹æ' => '寞',
+ '¹ç' => '寧',
+ '¹è' => '寡',
+ '¹é' => '寥',
+ '¹ê' => '實',
+ '¹ë' => '寨',
+ '¹ì' => '寢',
+ '¹í' => '寤',
+ '¹î' => '察',
+ '¹ï' => 'å°',
+ '¹ð' => 'å±¢',
+ '¹ñ' => '嶄',
+ '¹ò' => '嶇',
+ '¹ó' => 'å¹›',
+ '¹ô' => 'å¹£',
+ '¹õ' => '幕',
+ '¹ö' => 'å¹—',
+ '¹÷' => 'å¹”',
+ '¹ø' => '廓',
+ '¹ù' => 'å»–',
+ '¹ú' => '弊',
+ '¹û' => '彆',
+ '¹ü' => 'å½°',
+ '¹ý' => 'å¾¹',
+ '¹þ' => 'æ…‡',
+ 'º@' => 'æ„¿',
+ 'ºA' => 'æ…‹',
+ 'ºB' => 'æ…·',
+ 'ºC' => 'æ…¢',
+ 'ºD' => 'æ…£',
+ 'ºE' => 'æ…Ÿ',
+ 'ºF' => 'æ…š',
+ 'ºG' => 'æ…˜',
+ 'ºH' => 'æ…µ',
+ 'ºI' => '截',
+ 'ºJ' => 'æ’‡',
+ 'ºK' => '摘',
+ 'ºL' => 'æ‘”',
+ 'ºM' => 'æ’¤',
+ 'ºN' => '摸',
+ 'ºO' => 'æ‘Ÿ',
+ 'ºP' => '摺',
+ 'ºQ' => 'æ‘‘',
+ 'ºR' => '摧',
+ 'ºS' => 'æ´',
+ 'ºT' => 'æ‘',
+ 'ºU' => 'æ‘»',
+ 'ºV' => '敲',
+ 'ºW' => 'æ–¡',
+ 'ºX' => 'æ——',
+ 'ºY' => 'æ—–',
+ 'ºZ' => '暢',
+ 'º[' => '暨',
+ 'º\\' => 'æš',
+ 'º]' => '榜',
+ 'º^' => '榨',
+ 'º_' => '榕',
+ 'º`' => 'æ§',
+ 'ºa' => '榮',
+ 'ºb' => '槓',
+ 'ºc' => '構',
+ 'ºd' => '榛',
+ 'ºe' => '榷',
+ 'ºf' => '榻',
+ 'ºg' => '榫',
+ 'ºh' => '榴',
+ 'ºi' => 'æ§',
+ 'ºj' => 'æ§',
+ 'ºk' => 'æ¦',
+ 'ºl' => '槌',
+ 'ºm' => '榦',
+ 'ºn' => '槃',
+ 'ºo' => '榣',
+ 'ºp' => 'æ‰',
+ 'ºq' => 'æŒ',
+ 'ºr' => 'æ°³',
+ 'ºs' => 'æ¼³',
+ 'ºt' => 'æ¼”',
+ 'ºu' => '滾',
+ 'ºv' => '漓',
+ 'ºw' => 'æ»´',
+ 'ºx' => '漩',
+ 'ºy' => 'æ¼¾',
+ 'ºz' => 'æ¼ ',
+ 'º{' => '漬',
+ 'º|' => 'æ¼',
+ 'º}' => '漂',
+ 'º~' => 'æ¼¢',
+ 'º¡' => '滿',
+ 'º¢' => '滯',
+ 'º£' => '漆',
+ 'º¤' => 'æ¼±',
+ 'º¥' => '漸',
+ 'º¦' => 'æ¼²',
+ 'º§' => 'æ¼£',
+ 'º¨' => '漕',
+ 'º©' => '漫',
+ 'ºª' => '漯',
+ 'º«' => '澈',
+ 'º¬' => '漪',
+ 'º' => '滬',
+ 'º®' => 'æ¼',
+ 'º¯' => '滲',
+ 'º°' => '滌',
+ 'º±' => 'æ»·',
+ 'º²' => '熔',
+ 'º³' => '熙',
+ 'º´' => 'ç…½',
+ 'ºµ' => '熊',
+ 'º¶' => '熄',
+ 'º·' => '熒',
+ 'º¸' => '爾',
+ 'º¹' => '犒',
+ 'ºº' => '犖',
+ 'º»' => 'ç„',
+ 'º¼' => 'ç',
+ 'º½' => '瑤',
+ 'º¾' => 'ç‘£',
+ 'º¿' => '瑪',
+ 'ºÀ' => 'ç‘°',
+ 'ºÁ' => 'ç‘',
+ 'ºÂ' => '甄',
+ 'ºÃ' => 'ç–‘',
+ 'ºÄ' => '瘧',
+ 'ºÅ' => 'ç˜',
+ 'ºÆ' => '瘋',
+ 'ºÇ' => '瘉',
+ 'ºÈ' => '瘓',
+ 'ºÉ' => '盡',
+ 'ºÊ' => '監',
+ 'ºË' => 'çž„',
+ 'ºÌ' => 'ç½',
+ 'ºÍ' => 'ç¿',
+ 'ºÎ' => 'ç¡',
+ 'ºÏ' => 'ç£',
+ 'ºÐ' => '碟',
+ 'ºÑ' => '碧',
+ 'ºÒ' => '碳',
+ 'ºÓ' => '碩',
+ 'ºÔ' => '碣',
+ 'ºÕ' => '禎',
+ 'ºÖ' => 'ç¦',
+ 'º×' => 'ç¦',
+ 'ºØ' => '種',
+ 'ºÙ' => '稱',
+ 'ºÚ' => '窪',
+ 'ºÛ' => '窩',
+ 'ºÜ' => 'ç«',
+ 'ºÝ' => '端',
+ 'ºÞ' => '管',
+ 'ºß' => '箕',
+ 'ºà' => '箋',
+ 'ºá' => 'çµ',
+ 'ºâ' => 'ç®—',
+ 'ºã' => 'ç®',
+ 'ºä' => 'ç®”',
+ 'ºå' => 'ç®',
+ 'ºæ' => '箸',
+ 'ºç' => '箇',
+ 'ºè' => '箄',
+ 'ºé' => 'ç²¹',
+ 'ºê' => 'ç²½',
+ 'ºë' => 'ç²¾',
+ 'ºì' => '綻',
+ 'ºí' => '綰',
+ 'ºî' => '綜',
+ 'ºï' => '綽',
+ 'ºð' => '綾',
+ 'ºñ' => 'ç¶ ',
+ 'ºò' => 'ç·Š',
+ 'ºó' => '綴',
+ 'ºô' => '網',
+ 'ºõ' => '綱',
+ 'ºö' => '綺',
+ 'º÷' => '綢',
+ 'ºø' => '綿',
+ 'ºù' => '綵',
+ 'ºú' => '綸',
+ 'ºû' => 'ç¶',
+ 'ºü' => 'ç·’',
+ 'ºý' => 'ç·‡',
+ 'ºþ' => '綬',
+ '»@' => 'ç½°',
+ '»A' => 'ç¿ ',
+ '»B' => 'ç¿¡',
+ '»C' => 'ç¿Ÿ',
+ '»D' => 'èž',
+ '»E' => 'èš',
+ '»F' => '肇',
+ '»G' => 'è…',
+ '»H' => '膀',
+ '»I' => 'è†',
+ '»J' => '膈',
+ '»K' => '膊',
+ '»L' => 'è…¿',
+ '»M' => '膂',
+ '»N' => '臧',
+ '»O' => '臺',
+ '»P' => '與',
+ '»Q' => '舔',
+ '»R' => '舞',
+ '»S' => '艋',
+ '»T' => '蓉',
+ '»U' => 'è’¿',
+ '»V' => '蓆',
+ '»W' => 'è“„',
+ '»X' => 'è’™',
+ '»Y' => 'è’ž',
+ '»Z' => 'è’²',
+ '»[' => 'è’œ',
+ '»\\' => 'è“‹',
+ '»]' => 'è’¸',
+ '»^' => 'è“€',
+ '»_' => 'è““',
+ '»`' => 'è’',
+ '»a' => 'è’¼',
+ '»b' => 'è“‘',
+ '»c' => 'è“Š',
+ '»d' => '蜿',
+ '»e' => '蜜',
+ '»f' => '蜻',
+ '»g' => '蜢',
+ '»h' => '蜥',
+ '»i' => '蜴',
+ '»j' => '蜘',
+ '»k' => 'è•',
+ '»l' => '蜷',
+ '»m' => '蜩',
+ '»n' => '裳',
+ '»o' => '褂',
+ '»p' => '裴',
+ '»q' => '裹',
+ '»r' => '裸',
+ '»s' => '製',
+ '»t' => '裨',
+ '»u' => '褚',
+ '»v' => '裯',
+ '»w' => '誦',
+ '»x' => '誌',
+ '»y' => '語',
+ '»z' => '誣',
+ '»{' => 'èª',
+ '»|' => '誡',
+ '»}' => '誓',
+ '»~' => '誤',
+ '»¡' => '說',
+ '»¢' => '誥',
+ '»£' => '誨',
+ '»¤' => '誘',
+ '»¥' => '誑',
+ '»¦' => '誚',
+ '»§' => '誧',
+ '»¨' => '豪',
+ '»©' => 'è²',
+ '»ª' => '貌',
+ '»«' => '賓',
+ '»¬' => '賑',
+ '»' => 'è³’',
+ '»®' => '赫',
+ '»¯' => '趙',
+ '»°' => '趕',
+ '»±' => 'è·¼',
+ '»²' => 'è¼”',
+ '»³' => 'è¼’',
+ '»´' => '輕',
+ '»µ' => '輓',
+ '»¶' => 'è¾£',
+ '»·' => 'é ',
+ '»¸' => 'é˜',
+ '»¹' => 'éœ',
+ '»º' => 'é£',
+ '»»' => 'é™',
+ '»¼' => 'éž',
+ '»½' => 'é¢',
+ '»¾' => 'é',
+ '»¿' => 'é›',
+ '»À' => 'é„™',
+ '»Á' => '鄘',
+ '»Â' => 'é„ž',
+ '»Ã' => 'é…µ',
+ '»Ä' => 'é…¸',
+ '»Å' => 'é…·',
+ '»Æ' => 'é…´',
+ '»Ç' => '鉸',
+ '»È' => '銀',
+ '»É' => '銅',
+ '»Ê' => '銘',
+ '»Ë' => '銖',
+ '»Ì' => '鉻',
+ '»Í' => '銓',
+ '»Î' => '銜',
+ '»Ï' => '銨',
+ '»Ð' => '鉼',
+ '»Ñ' => '銑',
+ '»Ò' => 'é–¡',
+ '»Ó' => 'é–¨',
+ '»Ô' => 'é–©',
+ '»Õ' => 'é–£',
+ '»Ö' => 'é–¥',
+ '»×' => 'é–¤',
+ '»Ø' => 'éš™',
+ '»Ù' => 'éšœ',
+ '»Ú' => 'éš›',
+ '»Û' => '雌',
+ '»Ü' => 'é›’',
+ '»Ý' => '需',
+ '»Þ' => 'é¼',
+ '»ß' => 'éž…',
+ '»à' => '韶',
+ '»á' => 'é —',
+ '»â' => 'é ˜',
+ '»ã' => '颯',
+ '»ä' => '颱',
+ '»å' => '餃',
+ '»æ' => '餅',
+ '»ç' => '餌',
+ '»è' => '餉',
+ '»é' => 'é§',
+ '»ê' => '骯',
+ '»ë' => '骰',
+ '»ì' => '髦',
+ '»í' => 'é',
+ '»î' => 'é‚',
+ '»ï' => 'é³´',
+ '»ð' => '鳶',
+ '»ñ' => 'é³³',
+ '»ò' => '麼',
+ '»ó' => 'é¼»',
+ '»ô' => '齊',
+ '»õ' => 'å„„',
+ '»ö' => 'å„€',
+ '»÷' => '僻',
+ '»ø' => '僵',
+ '»ù' => '價',
+ '»ú' => 'å„‚',
+ '»û' => '儈',
+ '»ü' => '儉',
+ '»ý' => 'å„…',
+ '»þ' => '凜',
+ '¼@' => '劇',
+ '¼A' => '劈',
+ '¼B' => '劉',
+ '¼C' => 'åŠ',
+ '¼D' => '劊',
+ '¼E' => 'å‹°',
+ '¼F' => '厲',
+ '¼G' => '嘮',
+ '¼H' => '嘻',
+ '¼I' => '嘹',
+ '¼J' => '嘲',
+ '¼K' => '嘿',
+ '¼L' => '嘴',
+ '¼M' => '嘩',
+ '¼N' => '噓',
+ '¼O' => '噎',
+ '¼P' => 'å™—',
+ '¼Q' => 'å™´',
+ '¼R' => '嘶',
+ '¼S' => '嘯',
+ '¼T' => '嘰',
+ '¼U' => '墀',
+ '¼V' => '墟',
+ '¼W' => '增',
+ '¼X' => '墳',
+ '¼Y' => '墜',
+ '¼Z' => '墮',
+ '¼[' => '墩',
+ '¼\\' => '墦',
+ '¼]' => 'å¥',
+ '¼^' => '嬉',
+ '¼_' => 'å«»',
+ '¼`' => '嬋',
+ '¼a' => '嫵',
+ '¼b' => '嬌',
+ '¼c' => '嬈',
+ '¼d' => '寮',
+ '¼e' => '寬',
+ '¼f' => '審',
+ '¼g' => '寫',
+ '¼h' => '層',
+ '¼i' => 'å±¥',
+ '¼j' => 'å¶',
+ '¼k' => '嶔',
+ '¼l' => 'å¹¢',
+ '¼m' => '幟',
+ '¼n' => '幡',
+ '¼o' => '廢',
+ '¼p' => '廚',
+ '¼q' => '廟',
+ '¼r' => 'å»',
+ '¼s' => '廣',
+ '¼t' => 'å» ',
+ '¼u' => '彈',
+ '¼v' => 'å½±',
+ '¼w' => 'å¾·',
+ '¼x' => 'å¾µ',
+ '¼y' => 'æ…¶',
+ '¼z' => 'æ…§',
+ '¼{' => 'æ…®',
+ '¼|' => 'æ…',
+ '¼}' => 'æ…•',
+ '¼~' => '憂',
+ '¼¡' => 'æ…¼',
+ '¼¢' => 'æ…°',
+ '¼£' => 'æ…«',
+ '¼¤' => 'æ…¾',
+ '¼¥' => '憧',
+ '¼¦' => 'æ†',
+ '¼§' => '憫',
+ '¼¨' => '憎',
+ '¼©' => '憬',
+ '¼ª' => '憚',
+ '¼«' => '憤',
+ '¼¬' => '憔',
+ '¼' => '憮',
+ '¼®' => '戮',
+ '¼¯' => 'æ‘©',
+ '¼°' => '摯',
+ '¼±' => '摹',
+ '¼²' => 'æ’ž',
+ '¼³' => 'æ’²',
+ '¼´' => 'æ’ˆ',
+ '¼µ' => 'æ’',
+ '¼¶' => 'æ’°',
+ '¼·' => 'æ’¥',
+ '¼¸' => 'æ’“',
+ '¼¹' => 'æ’•',
+ '¼º' => 'æ’©',
+ '¼»' => 'æ’’',
+ '¼¼' => 'æ’®',
+ '¼½' => 'æ’',
+ '¼¾' => 'æ’«',
+ '¼¿' => 'æ’š',
+ '¼À' => 'æ’¬',
+ '¼Á' => 'æ’™',
+ '¼Â' => 'æ’¢',
+ '¼Ã' => 'æ’³',
+ '¼Ä' => '敵',
+ '¼Å' => 'æ•·',
+ '¼Æ' => '數',
+ '¼Ç' => 'æš®',
+ '¼È' => 'æš«',
+ '¼É' => 'æš´',
+ '¼Ê' => 'æš±',
+ '¼Ë' => '樣',
+ '¼Ì' => '樟',
+ '¼Í' => '槨',
+ '¼Î' => 'æ¨',
+ '¼Ï' => '樞',
+ '¼Ð' => '標',
+ '¼Ñ' => '槽',
+ '¼Ò' => '模',
+ '¼Ó' => '樓',
+ '¼Ô' => '樊',
+ '¼Õ' => '槳',
+ '¼Ö' => '樂',
+ '¼×' => '樅',
+ '¼Ø' => 'æ§',
+ '¼Ù' => '樑',
+ '¼Ú' => 'æ',
+ '¼Û' => 'æŽ',
+ '¼Ü' => '殤',
+ '¼Ý' => '毅',
+ '¼Þ' => '毆',
+ '¼ß' => '漿',
+ '¼à' => 'æ½¼',
+ '¼á' => '澄',
+ '¼â' => '潑',
+ '¼ã' => '潦',
+ '¼ä' => 'æ½”',
+ '¼å' => '澆',
+ '¼æ' => 'æ½',
+ '¼ç' => 'æ½›',
+ '¼è' => '潸',
+ '¼é' => 'æ½®',
+ '¼ê' => '澎',
+ '¼ë' => '潺',
+ '¼ì' => 'æ½°',
+ '¼í' => '潤',
+ '¼î' => 'æ¾—',
+ '¼ï' => '潘',
+ '¼ð' => '滕',
+ '¼ñ' => '潯',
+ '¼ò' => 'æ½ ',
+ '¼ó' => '潟',
+ '¼ô' => '熟',
+ '¼õ' => '熬',
+ '¼ö' => '熱',
+ '¼÷' => '熨',
+ '¼ø' => '牖',
+ '¼ù' => '犛',
+ '¼ú' => 'çŽ',
+ '¼û' => 'ç—',
+ '¼ü' => 'ç‘©',
+ '¼ý' => 'ç’‹',
+ '¼þ' => 'ç’ƒ',
+ '½@' => '瑾',
+ '½A' => 'ç’€',
+ '½B' => 'ç•¿',
+ '½C' => 'ç˜ ',
+ '½D' => '瘩',
+ '½E' => '瘟',
+ '½F' => '瘤',
+ '½G' => '瘦',
+ '½H' => '瘡',
+ '½I' => '瘢',
+ '½J' => 'çšš',
+ '½K' => '皺',
+ '½L' => '盤',
+ '½M' => '瞎',
+ '½N' => '瞇',
+ '½O' => '瞌',
+ '½P' => 'çž‘',
+ '½Q' => 'çž‹',
+ '½R' => '磋',
+ '½S' => '磅',
+ '½T' => '確',
+ '½U' => '磊',
+ '½V' => '碾',
+ '½W' => '磕',
+ '½X' => '碼',
+ '½Y' => 'ç£',
+ '½Z' => '稿',
+ '½[' => '稼',
+ '½\\' => 'ç©€',
+ '½]' => '稽',
+ '½^' => '稷',
+ '½_' => '稻',
+ '½`' => '窯',
+ '½a' => '窮',
+ '½b' => 'ç®',
+ '½c' => 'ç®±',
+ '½d' => '範',
+ '½e' => 'ç®´',
+ '½f' => '篆',
+ '½g' => '篇',
+ '½h' => 'ç¯',
+ '½i' => 'ç® ',
+ '½j' => '篌',
+ '½k' => '糊',
+ '½l' => 'ç· ',
+ '½m' => 'ç·´',
+ '½n' => 'ç·¯',
+ '½o' => 'ç·»',
+ '½p' => 'ç·˜',
+ '½q' => 'ç·¬',
+ '½r' => 'ç·',
+ '½s' => 'ç·¨',
+ '½t' => 'ç·£',
+ '½u' => 'ç·š',
+ '½v' => 'ç·ž',
+ '½w' => 'ç·©',
+ '½x' => '綞',
+ '½y' => 'ç·™',
+ '½z' => 'ç·²',
+ '½{' => 'ç·¹',
+ '½|' => 'ç½µ',
+ '½}' => 'ç½·',
+ '½~' => '羯',
+ '½¡' => 'ç¿©',
+ '½¢' => '耦',
+ '½£' => '膛',
+ '½¤' => '膜',
+ '½¥' => 'è†',
+ '½¦' => 'è† ',
+ '½§' => '膚',
+ '½¨' => '膘',
+ '½©' => 'è”—',
+ '½ª' => '蔽',
+ '½«' => '蔚',
+ '½¬' => 'è“®',
+ '½' => '蔬',
+ '½®' => 'è”',
+ '½¯' => '蔓',
+ '½°' => '蔑',
+ '½±' => '蔣',
+ '½²' => '蔡',
+ '½³' => 'è””',
+ '½´' => '蓬',
+ '½µ' => '蔥',
+ '½¶' => 'è“¿',
+ '½·' => '蔆',
+ '½¸' => 'èž‚',
+ '½¹' => 'è´',
+ '½º' => 'è¶',
+ '½»' => 'è ',
+ '½¼' => 'è¦',
+ '½½' => 'è¸',
+ '½¾' => 'è¨',
+ '½¿' => 'è™',
+ '½À' => 'è—',
+ '½Á' => 'èŒ',
+ '½Â' => 'è“',
+ '½Ã' => 'è¡›',
+ '½Ä' => 'è¡',
+ '½Å' => 'è¤',
+ '½Æ' => '複',
+ '½Ç' => '褒',
+ '½È' => '褓',
+ '½É' => '褕',
+ '½Ê' => '褊',
+ '½Ë' => '誼',
+ '½Ì' => 'è«’',
+ '½Í' => '談',
+ '½Î' => 'è«„',
+ '½Ï' => '誕',
+ '½Ð' => 'è«‹',
+ '½Ñ' => '諸',
+ '½Ò' => '課',
+ '½Ó' => '諉',
+ '½Ô' => 'è«‚',
+ '½Õ' => '調',
+ '½Ö' => '誰',
+ '½×' => 'è«–',
+ '½Ø' => 'è«',
+ '½Ù' => '誶',
+ '½Ú' => '誹',
+ '½Û' => 'è«›',
+ '½Ü' => '豌',
+ '½Ý' => '豎',
+ '½Þ' => '豬',
+ '½ß' => 'è³ ',
+ '½à' => '賞',
+ '½á' => '賦',
+ '½â' => '賤',
+ '½ã' => '賬',
+ '½ä' => 'è³',
+ '½å' => 'è³¢',
+ '½æ' => 'è³£',
+ '½ç' => '賜',
+ '½è' => '質',
+ '½é' => '賡',
+ '½ê' => 'èµ',
+ '½ë' => '趟',
+ '½ì' => '趣',
+ '½í' => '踫',
+ '½î' => 'è¸',
+ '½ï' => 'è¸',
+ '½ð' => '踢',
+ '½ñ' => 'è¸',
+ '½ò' => '踩',
+ '½ó' => '踟',
+ '½ô' => '踡',
+ '½õ' => '踞',
+ '½ö' => '躺',
+ '½÷' => 'è¼',
+ '½ø' => 'è¼›',
+ '½ù' => '輟',
+ '½ú' => '輩',
+ '½û' => '輦',
+ '½ü' => '輪',
+ '½ý' => '輜',
+ '½þ' => '輞',
+ '¾@' => 'è¼¥',
+ '¾A' => 'é©',
+ '¾B' => 'é®',
+ '¾C' => 'é¨',
+ '¾D' => 'é',
+ '¾E' => 'é·',
+ '¾F' => 'é„°',
+ '¾G' => 'é„',
+ '¾H' => '鄧',
+ '¾I' => '鄱',
+ '¾J' => '醇',
+ '¾K' => '醉',
+ '¾L' => '醋',
+ '¾M' => '醃',
+ '¾N' => 'é‹…',
+ '¾O' => '銻',
+ '¾P' => '銷',
+ '¾Q' => '鋪',
+ '¾R' => '銬',
+ '¾S' => '鋤',
+ '¾T' => 'é‹',
+ '¾U' => '銳',
+ '¾V' => '銼',
+ '¾W' => 'é‹’',
+ '¾X' => '鋇',
+ '¾Y' => 'é‹°',
+ '¾Z' => '銲',
+ '¾[' => 'é–',
+ '¾\\' => 'é–±',
+ '¾]' => '霄',
+ '¾^' => '霆',
+ '¾_' => '震',
+ '¾`' => '霉',
+ '¾a' => 'é ',
+ '¾b' => 'éž',
+ '¾c' => 'éž‹',
+ '¾d' => 'éž',
+ '¾e' => 'é ¡',
+ '¾f' => 'é «',
+ '¾g' => 'é œ',
+ '¾h' => '颳',
+ '¾i' => '養',
+ '¾j' => '餓',
+ '¾k' => '餒',
+ '¾l' => '餘',
+ '¾m' => 'é§',
+ '¾n' => 'é§',
+ '¾o' => '駟',
+ '¾p' => '駛',
+ '¾q' => '駑',
+ '¾r' => '駕',
+ '¾s' => '駒',
+ '¾t' => '駙',
+ '¾u' => '骷',
+ '¾v' => 'é«®',
+ '¾w' => '髯',
+ '¾x' => '鬧',
+ '¾y' => 'é…',
+ '¾z' => 'é„',
+ '¾{' => 'é·',
+ '¾|' => 'é¯',
+ '¾}' => 'é´†',
+ '¾~' => 'é´‰',
+ '¾¡' => 'é´ƒ',
+ '¾¢' => '麩',
+ '¾£' => '麾',
+ '¾¤' => '黎',
+ '¾¥' => '墨',
+ '¾¦' => 'é½’',
+ '¾§' => 'å„’',
+ '¾¨' => '儘',
+ '¾©' => 'å„”',
+ '¾ª' => 'å„',
+ '¾«' => 'å„•',
+ '¾¬' => '冀',
+ '¾' => '冪',
+ '¾®' => 'å‡',
+ '¾¯' => '劑',
+ '¾°' => '劓',
+ '¾±' => '勳',
+ '¾²' => 'å™™',
+ '¾³' => '噫',
+ '¾´' => '噹',
+ '¾µ' => '噩',
+ '¾¶' => '噤',
+ '¾·' => '噸',
+ '¾¸' => '噪',
+ '¾¹' => '器',
+ '¾º' => '噥',
+ '¾»' => 'å™±',
+ '¾¼' => '噯',
+ '¾½' => '噬',
+ '¾¾' => '噢',
+ '¾¿' => '噶',
+ '¾À' => 'å£',
+ '¾Á' => '墾',
+ '¾Â' => '壇',
+ '¾Ã' => '壅',
+ '¾Ä' => '奮',
+ '¾Å' => 'å¬',
+ '¾Æ' => '嬴',
+ '¾Ç' => 'å¸',
+ '¾È' => '寰',
+ '¾É' => 'å°Ž',
+ '¾Ê' => '彊',
+ '¾Ë' => '憲',
+ '¾Ì' => '憑',
+ '¾Í' => '憩',
+ '¾Î' => '憊',
+ '¾Ï' => 'æ‡',
+ '¾Ð' => '憶',
+ '¾Ñ' => '憾',
+ '¾Ò' => '懊',
+ '¾Ó' => '懈',
+ '¾Ô' => '戰',
+ '¾Õ' => 'æ“…',
+ '¾Ö' => 'æ“',
+ '¾×' => 'æ“‹',
+ '¾Ø' => 'æ’»',
+ '¾Ù' => 'æ’¼',
+ '¾Ú' => 'æ“š',
+ '¾Û' => 'æ“„',
+ '¾Ü' => '擇',
+ '¾Ý' => 'æ“‚',
+ '¾Þ' => 'æ“',
+ '¾ß' => 'æ’¿',
+ '¾à' => 'æ“’',
+ '¾á' => 'æ“”',
+ '¾â' => 'æ’¾',
+ '¾ã' => 'æ•´',
+ '¾ä' => '曆',
+ '¾å' => '曉',
+ '¾æ' => 'æš¹',
+ '¾ç' => '曄',
+ '¾è' => '曇',
+ '¾é' => '暸',
+ '¾ê' => '樽',
+ '¾ë' => '樸',
+ '¾ì' => '樺',
+ '¾í' => 'æ©™',
+ '¾î' => 'æ©«',
+ '¾ï' => '橘',
+ '¾ð' => '樹',
+ '¾ñ' => 'æ©„',
+ '¾ò' => 'æ©¢',
+ '¾ó' => 'æ©¡',
+ '¾ô' => 'æ©‹',
+ '¾õ' => '橇',
+ '¾ö' => '樵',
+ '¾÷' => 'æ©Ÿ',
+ '¾ø' => '橈',
+ '¾ù' => 'æ™',
+ '¾ú' => 'æ·',
+ '¾û' => 'æ°…',
+ '¾ü' => 'æ¿‚',
+ '¾ý' => 'æ¾±',
+ '¾þ' => '澡',
+ '¿@' => '濃',
+ '¿A' => '澤',
+ '¿B' => 'æ¿',
+ '¿C' => '澧',
+ '¿D' => 'æ¾³',
+ '¿E' => 'æ¿€',
+ '¿F' => 'æ¾¹',
+ '¿G' => '澶',
+ '¿H' => '澦',
+ '¿I' => 'æ¾ ',
+ '¿J' => 'æ¾´',
+ '¿K' => '熾',
+ '¿L' => '燉',
+ '¿M' => 'ç‡',
+ '¿N' => '燒',
+ '¿O' => '燈',
+ '¿P' => '燕',
+ '¿Q' => '熹',
+ '¿R' => '燎',
+ '¿S' => '燙',
+ '¿T' => '燜',
+ '¿U' => '燃',
+ '¿V' => '燄',
+ '¿W' => 'ç¨',
+ '¿X' => 'ç’œ',
+ '¿Y' => 'ç’£',
+ '¿Z' => 'ç’˜',
+ '¿[' => 'ç’Ÿ',
+ '¿\\' => 'ç’ž',
+ '¿]' => 'ç“¢',
+ '¿^' => '甌',
+ '¿_' => 'ç”',
+ '¿`' => '瘴',
+ '¿a' => '瘸',
+ '¿b' => '瘺',
+ '¿c' => '盧',
+ '¿d' => '盥',
+ '¿e' => 'çž ',
+ '¿f' => 'çžž',
+ '¿g' => '瞟',
+ '¿h' => '瞥',
+ '¿i' => '磨',
+ '¿j' => '磚',
+ '¿k' => '磬',
+ '¿l' => '磧',
+ '¿m' => '禦',
+ '¿n' => 'ç©',
+ '¿o' => 'ç©Ž',
+ '¿p' => '穆',
+ '¿q' => 'ç©Œ',
+ '¿r' => 'ç©‹',
+ '¿s' => '窺',
+ '¿t' => '篙',
+ '¿u' => 'ç°‘',
+ '¿v' => '築',
+ '¿w' => '篤',
+ '¿x' => '篛',
+ '¿y' => '篡',
+ '¿z' => '篩',
+ '¿{' => '篦',
+ '¿|' => '糕',
+ '¿}' => 'ç³–',
+ '¿~' => '縊',
+ '¿¡' => '縑',
+ '¿¢' => '縈',
+ '¿£' => '縛',
+ '¿¤' => '縣',
+ '¿¥' => '縞',
+ '¿¦' => 'ç¸',
+ '¿§' => '縉',
+ '¿¨' => 'ç¸',
+ '¿©' => 'ç½¹',
+ '¿ª' => 'ç¾²',
+ '¿«' => 'ç¿°',
+ '¿¬' => '翱',
+ '¿' => 'ç¿®',
+ '¿®' => '耨',
+ '¿¯' => '膳',
+ '¿°' => '膩',
+ '¿±' => '膨',
+ '¿²' => '臻',
+ '¿³' => '興',
+ '¿´' => '艘',
+ '¿µ' => '艙',
+ '¿¶' => 'è•Š',
+ '¿·' => 'è•™',
+ '¿¸' => '蕈',
+ '¿¹' => '蕨',
+ '¿º' => 'è•©',
+ '¿»' => '蕃',
+ '¿¼' => '蕉',
+ '¿½' => 'è•',
+ '¿¾' => '蕪',
+ '¿¿' => 'è•ž',
+ '¿À' => '螃',
+ '¿Á' => '螟',
+ '¿Â' => 'èžž',
+ '¿Ã' => '螢',
+ '¿Ä' => 'èž',
+ '¿Å' => 'è¡¡',
+ '¿Æ' => '褪',
+ '¿Ç' => '褲',
+ '¿È' => '褥',
+ '¿É' => '褫',
+ '¿Ê' => '褡',
+ '¿Ë' => '親',
+ '¿Ì' => '覦',
+ '¿Í' => '諦',
+ '¿Î' => '諺',
+ '¿Ï' => 'è««',
+ '¿Ð' => '諱',
+ '¿Ñ' => '謀',
+ '¿Ò' => 'è«œ',
+ '¿Ó' => '諧',
+ '¿Ô' => 'è«®',
+ '¿Õ' => '諾',
+ '¿Ö' => 'è¬',
+ '¿×' => '謂',
+ '¿Ø' => 'è«·',
+ '¿Ù' => 'è«',
+ '¿Ú' => '諳',
+ '¿Û' => '諶',
+ '¿Ü' => '諼',
+ '¿Ý' => '豫',
+ '¿Þ' => 'è±',
+ '¿ß' => '貓',
+ '¿à' => 'è³´',
+ '¿á' => '蹄',
+ '¿â' => '踱',
+ '¿ã' => '踴',
+ '¿ä' => '蹂',
+ '¿å' => '踹',
+ '¿æ' => '踵',
+ '¿ç' => 'è¼»',
+ '¿è' => '輯',
+ '¿é' => '輸',
+ '¿ê' => 'è¼³',
+ '¿ë' => '辨',
+ '¿ì' => '辦',
+ '¿í' => 'éµ',
+ '¿î' => 'é´',
+ '¿ï' => 'é¸',
+ '¿ð' => 'é²',
+ '¿ñ' => 'é¼',
+ '¿ò' => 'éº',
+ '¿ó' => 'é„´',
+ '¿ô' => '醒',
+ '¿õ' => 'éŒ ',
+ '¿ö' => '錶',
+ '¿÷' => '鋸',
+ '¿ø' => '錳',
+ '¿ù' => '錯',
+ '¿ú' => '錢',
+ '¿û' => '鋼',
+ '¿ü' => '錫',
+ '¿ý' => '錄',
+ '¿þ' => '錚',
+ 'À@' => 'éŒ',
+ 'ÀA' => '錦',
+ 'ÀB' => '錡',
+ 'ÀC' => '錕',
+ 'ÀD' => '錮',
+ 'ÀE' => '錙',
+ 'ÀF' => 'é–»',
+ 'ÀG' => '隧',
+ 'ÀH' => '隨',
+ 'ÀI' => '險',
+ 'ÀJ' => '雕',
+ 'ÀK' => '霎',
+ 'ÀL' => '霑',
+ 'ÀM' => '霖',
+ 'ÀN' => 'éœ',
+ 'ÀO' => '霓',
+ 'ÀP' => 'éœ',
+ 'ÀQ' => 'é›',
+ 'ÀR' => 'éœ',
+ 'ÀS' => 'é¦',
+ 'ÀT' => '鞘',
+ 'ÀU' => 'é °',
+ 'ÀV' => 'é ¸',
+ 'ÀW' => 'é »',
+ 'ÀX' => 'é ·',
+ 'ÀY' => 'é ',
+ 'ÀZ' => 'é ¹',
+ 'À[' => 'é ¤',
+ 'À\\' => 'é¤',
+ 'À]' => '館',
+ 'À^' => '餞',
+ 'À_' => '餛',
+ 'À`' => '餡',
+ 'Àa' => '餚',
+ 'Àb' => 'é§',
+ 'Àc' => '駢',
+ 'Àd' => '駱',
+ 'Àe' => '骸',
+ 'Àf' => '骼',
+ 'Àg' => 'é«»',
+ 'Àh' => 'é«',
+ 'Ài' => '鬨',
+ 'Àj' => '鮑',
+ 'Àk' => 'é´•',
+ 'Àl' => 'é´£',
+ 'Àm' => 'é´¦',
+ 'Àn' => 'é´¨',
+ 'Ào' => 'é´’',
+ 'Àp' => 'é´›',
+ 'Àq' => '默',
+ 'Àr' => 'é»”',
+ 'Às' => 'é¾',
+ 'Àt' => '龜',
+ 'Àu' => '優',
+ 'Àv' => 'å„Ÿ',
+ 'Àw' => 'å„¡',
+ 'Àx' => '儲',
+ 'Ày' => '勵',
+ 'Àz' => '嚎',
+ 'À{' => '嚀',
+ 'À|' => 'åš',
+ 'À}' => 'åš…',
+ 'À~' => '嚇',
+ 'À¡' => 'åš',
+ 'À¢' => '壕',
+ 'À£' => '壓',
+ 'À¤' => '壑',
+ 'À¥' => '壎',
+ 'À¦' => '嬰',
+ 'À§' => '嬪',
+ 'À¨' => '嬤',
+ 'À©' => 'åº',
+ 'Àª' => 'å°·',
+ 'À«' => '屨',
+ 'À¬' => '嶼',
+ 'À' => '嶺',
+ 'À®' => '嶽',
+ 'À¯' => '嶸',
+ 'À°' => '幫',
+ 'À±' => '彌',
+ 'À²' => 'å¾½',
+ 'À³' => '應',
+ 'À´' => '懂',
+ 'Àµ' => '懇',
+ 'À¶' => '懦',
+ 'À·' => '懋',
+ 'À¸' => '戲',
+ 'À¹' => '戴',
+ 'Àº' => 'æ“Ž',
+ 'À»' => 'æ“Š',
+ 'À¼' => '擘',
+ 'À½' => 'æ“ ',
+ 'À¾' => 'æ“°',
+ 'À¿' => '擦',
+ 'ÀÀ' => '擬',
+ 'ÀÁ' => '擱',
+ 'ÀÂ' => 'æ“¢',
+ 'ÀÃ' => 'æ“',
+ 'ÀÄ' => 'æ–‚',
+ 'ÀÅ' => 'æ–ƒ',
+ 'ÀÆ' => 'æ›™',
+ 'ÀÇ' => 'æ›–',
+ 'ÀÈ' => '檀',
+ 'ÀÉ' => '檔',
+ 'ÀÊ' => '檄',
+ 'ÀË' => '檢',
+ 'ÀÌ' => '檜',
+ 'ÀÍ' => 'æ«›',
+ 'ÀÎ' => '檣',
+ 'ÀÏ' => '橾',
+ 'ÀÐ' => '檗',
+ 'ÀÑ' => 'æª',
+ 'ÀÒ' => 'æª ',
+ 'ÀÓ' => 'æœ',
+ 'ÀÔ' => 'æ®®',
+ 'ÀÕ' => '毚',
+ 'ÀÖ' => 'æ°ˆ',
+ 'À×' => '濘',
+ 'ÀØ' => '濱',
+ 'ÀÙ' => 'æ¿Ÿ',
+ 'ÀÚ' => 'æ¿ ',
+ 'ÀÛ' => 'æ¿›',
+ 'ÀÜ' => '濤',
+ 'ÀÝ' => 'æ¿«',
+ 'ÀÞ' => '濯',
+ 'Àß' => 'æ¾€',
+ 'Àà' => '濬',
+ 'Àá' => 'æ¿¡',
+ 'Àâ' => 'æ¿©',
+ 'Àã' => 'æ¿•',
+ 'Àä' => 'æ¿®',
+ 'Àå' => 'æ¿°',
+ 'Àæ' => '燧',
+ 'Àç' => '營',
+ 'Àè' => '燮',
+ 'Àé' => '燦',
+ 'Àê' => '燥',
+ 'Àë' => 'ç‡',
+ 'Àì' => '燬',
+ 'Àí' => '燴',
+ 'Àî' => 'ç‡ ',
+ 'Àï' => '爵',
+ 'Àð' => '牆',
+ 'Àñ' => 'ç°',
+ 'Àò' => 'ç²',
+ 'Àó' => 'ç’©',
+ 'Àô' => 'ç’°',
+ 'Àõ' => 'ç’¦',
+ 'Àö' => 'ç’¨',
+ 'À÷' => '癆',
+ 'Àø' => '療',
+ 'Àù' => '癌',
+ 'Àú' => '盪',
+ 'Àû' => 'çž³',
+ 'Àü' => '瞪',
+ 'Àý' => 'çž°',
+ 'Àþ' => '瞬',
+ 'Á@' => '瞧',
+ 'ÁA' => 'çž',
+ 'ÁB' => '矯',
+ 'ÁC' => '磷',
+ 'ÁD' => '磺',
+ 'ÁE' => '磴',
+ 'ÁF' => '磯',
+ 'ÁG' => 'ç¤',
+ 'ÁH' => '禧',
+ 'ÁI' => '禪',
+ 'ÁJ' => 'ç©—',
+ 'ÁK' => '窿',
+ 'ÁL' => 'ç°‡',
+ 'ÁM' => 'ç°',
+ 'ÁN' => '篾',
+ 'ÁO' => '篷',
+ 'ÁP' => 'ç°Œ',
+ 'ÁQ' => 'ç¯ ',
+ 'ÁR' => 'ç³ ',
+ 'ÁS' => '糜',
+ 'ÁT' => '糞',
+ 'ÁU' => 'ç³¢',
+ 'ÁV' => '糟',
+ 'ÁW' => 'ç³™',
+ 'ÁX' => 'ç³',
+ 'ÁY' => '縮',
+ 'ÁZ' => '績',
+ 'Á[' => '繆',
+ 'Á\\' => '縷',
+ 'Á]' => '縲',
+ 'Á^' => '繃',
+ 'Á_' => '縫',
+ 'Á`' => '總',
+ 'Áa' => '縱',
+ 'Áb' => 'ç¹…',
+ 'Ác' => 'ç¹',
+ 'Ád' => '縴',
+ 'Áe' => '縹',
+ 'Áf' => '繈',
+ 'Ág' => '縵',
+ 'Áh' => '縿',
+ 'Ái' => '縯',
+ 'Áj' => '罄',
+ 'Ák' => '翳',
+ 'Ál' => '翼',
+ 'Ám' => 'è±',
+ 'Án' => 'è²',
+ 'Áo' => 'è°',
+ 'Áp' => 'è¯',
+ 'Áq' => 'è³',
+ 'Ár' => '臆',
+ 'Ás' => '臃',
+ 'Át' => '膺',
+ 'Áu' => '臂',
+ 'Áv' => '臀',
+ 'Áw' => '膿',
+ 'Áx' => '膽',
+ 'Áy' => '臉',
+ 'Áz' => '膾',
+ 'Á{' => '臨',
+ 'Á|' => '舉',
+ 'Á}' => '艱',
+ 'Á~' => 'è–ª',
+ 'Á¡' => 'è–„',
+ 'Á¢' => '蕾',
+ 'Á£' => 'è–œ',
+ 'Á¤' => 'è–‘',
+ 'Á¥' => 'è–”',
+ 'Á¦' => 'è–¯',
+ 'Á§' => 'è–›',
+ 'Á¨' => 'è–‡',
+ 'Á©' => 'è–¨',
+ 'Áª' => 'è–Š',
+ 'Á«' => '虧',
+ 'Á¬' => '蟀',
+ 'Á' => '蟑',
+ 'Á®' => 'èž³',
+ 'Á¯' => '蟒',
+ 'Á°' => '蟆',
+ 'Á±' => 'èž«',
+ 'Á²' => 'èž»',
+ 'Á³' => '螺',
+ 'Á´' => '蟈',
+ 'Áµ' => '蟋',
+ 'Á¶' => '褻',
+ 'Á·' => '褶',
+ 'Á¸' => '襄',
+ 'Á¹' => '褸',
+ 'Áº' => '褽',
+ 'Á»' => '覬',
+ 'Á¼' => '謎',
+ 'Á½' => '謗',
+ 'Á¾' => '謙',
+ 'Á¿' => '講',
+ 'ÁÀ' => '謊',
+ 'ÁÁ' => 'è¬ ',
+ 'ÁÂ' => 'è¬',
+ 'ÁÃ' => '謄',
+ 'ÁÄ' => 'è¬',
+ 'ÁÅ' => 'è±',
+ 'ÁÆ' => 'è°¿',
+ 'ÁÇ' => 'è±³',
+ 'ÁÈ' => '賺',
+ 'ÁÉ' => 'è³½',
+ 'ÁÊ' => 'è³¼',
+ 'ÁË' => '賸',
+ 'ÁÌ' => 'è³»',
+ 'ÁÍ' => '趨',
+ 'ÁÎ' => '蹉',
+ 'ÁÏ' => '蹋',
+ 'ÁÐ' => '蹈',
+ 'ÁÑ' => '蹊',
+ 'ÁÒ' => '轄',
+ 'ÁÓ' => 'è¼¾',
+ 'ÁÔ' => '轂',
+ 'ÁÕ' => 'è½…',
+ 'ÁÖ' => '輿',
+ 'Á×' => 'é¿',
+ 'ÁØ' => 'é½',
+ 'ÁÙ' => 'é‚„',
+ 'ÁÚ' => 'é‚',
+ 'ÁÛ' => 'é‚‚',
+ 'ÁÜ' => 'é‚€',
+ 'ÁÝ' => '鄹',
+ 'ÁÞ' => '醣',
+ 'Áß' => '醞',
+ 'Áà' => '醜',
+ 'Áá' => 'é',
+ 'Áâ' => '鎂',
+ 'Áã' => '錨',
+ 'Áä' => 'éµ',
+ 'Áå' => 'éŠ',
+ 'Áæ' => 'é¥',
+ 'Áç' => 'é‹',
+ 'Áè' => '錘',
+ 'Áé' => 'é¾',
+ 'Áê' => 'é¬',
+ 'Áë' => 'é›',
+ 'Áì' => 'é°',
+ 'Áí' => 'éš',
+ 'Áî' => 'é”',
+ 'Áï' => 'é—Š',
+ 'Áð' => 'é—‹',
+ 'Áñ' => 'é—Œ',
+ 'Áò' => 'é—ˆ',
+ 'Áó' => 'é—†',
+ 'Áô' => 'éš±',
+ 'Áõ' => '隸',
+ 'Áö' => 'é›–',
+ 'Á÷' => '霜',
+ 'Áø' => '霞',
+ 'Áù' => 'éž ',
+ 'Áú' => '韓',
+ 'Áû' => '顆',
+ 'Áü' => '颶',
+ 'Áý' => '餵',
+ 'Áþ' => 'é¨',
+ 'Â@' => '駿',
+ 'ÂA' => 'é®®',
+ 'ÂB' => '鮫',
+ 'ÂC' => '鮪',
+ 'ÂD' => 'é®',
+ 'ÂE' => 'é´»',
+ 'ÂF' => 'é´¿',
+ 'ÂG' => '麋',
+ 'ÂH' => 'é»',
+ 'ÂI' => '點',
+ 'ÂJ' => '黜',
+ 'ÂK' => 'é»',
+ 'ÂL' => 'é»›',
+ 'ÂM' => 'é¼¾',
+ 'ÂN' => '齋',
+ 'ÂO' => 'å¢',
+ 'ÂP' => 'åš•',
+ 'ÂQ' => 'åš®',
+ 'ÂR' => '壙',
+ 'ÂS' => '壘',
+ 'ÂT' => '嬸',
+ 'ÂU' => 'å½',
+ 'ÂV' => '懣',
+ 'ÂW' => '戳',
+ 'ÂX' => 'æ“´',
+ 'ÂY' => '擲',
+ 'ÂZ' => '擾',
+ 'Â[' => '攆',
+ 'Â\\' => '擺',
+ 'Â]' => 'æ“»',
+ 'Â^' => 'æ“·',
+ 'Â_' => 'æ–·',
+ 'Â`' => '曜',
+ 'Âa' => '朦',
+ 'Âb' => '檳',
+ 'Âc' => '檬',
+ 'Âd' => '櫃',
+ 'Âe' => '檻',
+ 'Âf' => '檸',
+ 'Âg' => 'æ«‚',
+ 'Âh' => '檮',
+ 'Âi' => '檯',
+ 'Âj' => 'æŸ',
+ 'Âk' => 'æ¸',
+ 'Âl' => '殯',
+ 'Âm' => '瀉',
+ 'Ân' => '瀋',
+ 'Âo' => '濾',
+ 'Âp' => '瀆',
+ 'Âq' => '濺',
+ 'Âr' => '瀑',
+ 'Âs' => 'ç€',
+ 'Ât' => '燻',
+ 'Âu' => '燼',
+ 'Âv' => '燾',
+ 'Âw' => '燸',
+ 'Âx' => 'ç·',
+ 'Ây' => 'çµ',
+ 'Âz' => 'ç’§',
+ 'Â{' => 'ç’¿',
+ 'Â|' => '甕',
+ 'Â}' => 'ç™–',
+ 'Â~' => '癘',
+ '¡' => '癒',
+ '¢' => '瞽',
+ '£' => '瞿',
+ '¤' => '瞻',
+ 'Â¥' => 'çž¼',
+ '¦' => '礎',
+ '§' => '禮',
+ '¨' => '穡',
+ '©' => '穢',
+ 'ª' => 'ç© ',
+ '«' => '竄',
+ '¬' => '竅',
+ 'Â' => 'ç°«',
+ '®' => '簧',
+ '¯' => '簪',
+ '°' => '簞',
+ '±' => '簣',
+ '²' => '簡',
+ '³' => '糧',
+ '´' => '織',
+ 'µ' => '繕',
+ '¶' => '繞',
+ '·' => '繚',
+ '¸' => '繡',
+ '¹' => '繒',
+ 'º' => '繙',
+ '»' => '罈',
+ '¼' => '翹',
+ '½' => '翻',
+ '¾' => 'è·',
+ '¿' => 'è¶',
+ 'ÂÀ' => 'è‡',
+ 'ÂÁ' => 'è‡',
+ 'ÂÂ' => '舊',
+ 'ÂÃ' => 'è—',
+ 'ÂÄ' => 'è–©',
+ 'ÂÅ' => 'è—',
+ 'ÂÆ' => 'è—',
+ 'ÂÇ' => 'è—‰',
+ 'ÂÈ' => 'è–°',
+ 'ÂÉ' => 'è–º',
+ 'ÂÊ' => 'è–¹',
+ 'ÂË' => 'è–¦',
+ 'ÂÌ' => '蟯',
+ 'ÂÍ' => '蟬',
+ 'ÂÎ' => '蟲',
+ 'ÂÏ' => 'èŸ ',
+ 'ÂÐ' => '覆',
+ 'ÂÑ' => '覲',
+ 'ÂÒ' => '觴',
+ 'ÂÓ' => '謨',
+ 'ÂÔ' => '謹',
+ 'ÂÕ' => '謬',
+ 'ÂÖ' => '謫',
+ 'Â×' => 'è±',
+ 'ÂØ' => 'è´…',
+ 'ÂÙ' => 'è¹™',
+ 'ÂÚ' => 'è¹£',
+ 'ÂÛ' => '蹦',
+ 'ÂÜ' => '蹤',
+ 'ÂÝ' => '蹟',
+ 'ÂÞ' => '蹕',
+ 'Âß' => '軀',
+ 'Âà' => '轉',
+ 'Âá' => 'è½',
+ 'Ââ' => '邇',
+ 'Âã' => '邃',
+ 'Âä' => '邈',
+ 'Âå' => '醫',
+ 'Âæ' => '醬',
+ 'Âç' => 'é‡',
+ 'Âè' => '鎔',
+ 'Âé' => '鎊',
+ 'Âê' => '鎖',
+ 'Âë' => '鎢',
+ 'Âì' => '鎳',
+ 'Âí' => '鎮',
+ 'Âî' => '鎬',
+ 'Âï' => '鎰',
+ 'Âð' => '鎘',
+ 'Âñ' => '鎚',
+ 'Âò' => '鎗',
+ 'Âó' => 'é—”',
+ 'Âô' => 'é—–',
+ 'Âõ' => 'é—',
+ 'Âö' => 'é—•',
+ 'Â÷' => '離',
+ 'Âø' => '雜',
+ 'Âù' => 'é›™',
+ 'Âú' => 'é››',
+ 'Âû' => '雞',
+ 'Âü' => '霤',
+ 'Âý' => '鞣',
+ 'Âþ' => '鞦',
+ 'Ã@' => 'éž',
+ 'ÃA' => '韹',
+ 'ÃB' => 'é¡',
+ 'ÃC' => 'é¡',
+ 'ÃD' => 'é¡Œ',
+ 'ÃE' => 'é¡Ž',
+ 'ÃF' => 'é¡“',
+ 'ÃG' => '颺',
+ 'ÃH' => '餾',
+ 'ÃI' => '餿',
+ 'ÃJ' => '餽',
+ 'ÃK' => '餮',
+ 'ÃL' => '馥',
+ 'ÃM' => '騎',
+ 'ÃN' => 'é«',
+ 'ÃO' => '鬃',
+ 'ÃP' => '鬆',
+ 'ÃQ' => 'é',
+ 'ÃR' => 'éŽ',
+ 'ÃS' => 'é',
+ 'ÃT' => '鯊',
+ 'ÃU' => '鯉',
+ 'ÃV' => '鯽',
+ 'ÃW' => '鯈',
+ 'ÃX' => '鯀',
+ 'ÃY' => '鵑',
+ 'ÃZ' => 'éµ',
+ 'Ã[' => 'éµ ',
+ 'Ã\\' => 'é» ',
+ 'Ã]' => '鼕',
+ 'Ã^' => '鼬',
+ 'Ã_' => '儳',
+ 'Ã`' => '嚥',
+ 'Ãa' => '壞',
+ 'Ãb' => '壟',
+ 'Ãc' => '壢',
+ 'Ãd' => '寵',
+ 'Ãe' => 'é¾',
+ 'Ãf' => '廬',
+ 'Ãg' => '懲',
+ 'Ãh' => '懷',
+ 'Ãi' => '懶',
+ 'Ãj' => '懵',
+ 'Ãk' => '攀',
+ 'Ãl' => 'æ”',
+ 'Ãm' => 'æ› ',
+ 'Ãn' => 'æ›',
+ 'Ão' => 'æ«¥',
+ 'Ãp' => 'æ«',
+ 'Ãq' => 'æ«š',
+ 'Ãr' => 'æ«“',
+ 'Ãs' => '瀛',
+ 'Ãt' => '瀟',
+ 'Ãu' => '瀨',
+ 'Ãv' => '瀚',
+ 'Ãw' => 'ç€',
+ 'Ãx' => '瀕',
+ 'Ãy' => '瀘',
+ 'Ãz' => '爆',
+ 'Ã{' => 'çˆ',
+ 'Ã|' => '牘',
+ 'Ã}' => '犢',
+ 'Ã~' => 'ç¸',
+ 'á' => 'çº',
+ 'â' => '璽',
+ 'ã' => '瓊',
+ 'ä' => '瓣',
+ 'Ã¥' => 'ç–‡',
+ 'æ' => '疆',
+ 'ç' => '癟',
+ 'è' => '癡',
+ 'é' => '矇',
+ 'ê' => '礙',
+ 'ë' => '禱',
+ 'ì' => '穫',
+ 'Ã' => 'ç©©',
+ 'î' => '簾',
+ 'ï' => '簿',
+ 'ð' => '簸',
+ 'ñ' => '簽',
+ 'ò' => '簷',
+ 'ó' => '籀',
+ 'ô' => '繫',
+ 'õ' => 'ç¹',
+ 'ö' => '繹',
+ '÷' => '繩',
+ 'ø' => '繪',
+ 'ù' => '羅',
+ 'ú' => '繳',
+ 'û' => '羶',
+ 'ü' => '羹',
+ 'ý' => '羸',
+ 'þ' => '臘',
+ 'ÿ' => '藩',
+ 'ÃÀ' => 'è—',
+ 'ÃÁ' => 'è—ª',
+ 'ÃÂ' => 'è—•',
+ 'ÃÃ' => 'è—¤',
+ 'ÃÄ' => 'è—¥',
+ 'ÃÅ' => 'è—·',
+ 'ÃÆ' => '蟻',
+ 'ÃÇ' => 'è …',
+ 'ÃÈ' => 'è ',
+ 'ÃÉ' => '蟹',
+ 'ÃÊ' => '蟾',
+ 'ÃË' => 'è¥ ',
+ 'ÃÌ' => '襟',
+ 'ÃÍ' => '襖',
+ 'ÃÎ' => '襞',
+ 'ÃÏ' => 'è',
+ 'ÃÐ' => 'èœ',
+ 'ÃÑ' => 'è˜',
+ 'ÃÒ' => 'è‰',
+ 'ÃÓ' => 'èš',
+ 'ÃÔ' => 'èŽ',
+ 'ÃÕ' => 'è',
+ 'ÃÖ' => 'è†',
+ 'Ã×' => 'è™',
+ 'ÃØ' => 'è´ˆ',
+ 'ÃÙ' => 'è´Š',
+ 'ÃÚ' => 'è¹¼',
+ 'ÃÛ' => 'è¹²',
+ 'ÃÜ' => '躇',
+ 'ÃÝ' => '蹶',
+ 'ÃÞ' => '蹬',
+ 'Ãß' => '蹺',
+ 'Ãà' => 'è¹´',
+ 'Ãá' => 'è½”',
+ 'Ãâ' => '轎',
+ 'Ãã' => 'è¾',
+ 'Ãä' => 'é‚Š',
+ 'Ãå' => 'é‚‹',
+ 'Ãæ' => '醱',
+ 'Ãç' => '醮',
+ 'Ãè' => 'é¡',
+ 'Ãé' => 'é‘',
+ 'Ãê' => 'éŸ',
+ 'Ãë' => 'éƒ',
+ 'Ãì' => 'éˆ',
+ 'Ãí' => 'éœ',
+ 'Ãî' => 'é',
+ 'Ãï' => 'é–',
+ 'Ãð' => 'é¢',
+ 'Ãñ' => 'é',
+ 'Ãò' => 'é˜',
+ 'Ãó' => 'é¤',
+ 'Ãô' => 'é—',
+ 'Ãõ' => 'é¨',
+ 'Ãö' => 'é—œ',
+ 'Ã÷' => 'éš´',
+ 'Ãø' => '難',
+ 'Ãù' => '霪',
+ 'Ãú' => '霧',
+ 'Ãû' => 'é¡',
+ 'Ãü' => '韜',
+ 'Ãý' => '韻',
+ 'Ãþ' => 'é¡ž',
+ 'Ä@' => '願',
+ 'ÄA' => 'é¡›',
+ 'ÄB' => '颼',
+ 'ÄC' => '饅',
+ 'ÄD' => '饉',
+ 'ÄE' => '騖',
+ 'ÄF' => '騙',
+ 'ÄG' => 'é¬',
+ 'ÄH' => '鯨',
+ 'ÄI' => '鯧',
+ 'ÄJ' => '鯖',
+ 'ÄK' => '鯛',
+ 'ÄL' => '鶉',
+ 'ÄM' => '鵡',
+ 'ÄN' => 'éµ²',
+ 'ÄO' => '鵪',
+ 'ÄP' => '鵬',
+ 'ÄQ' => '麒',
+ 'ÄR' => '麗',
+ 'ÄS' => '麓',
+ 'ÄT' => '麴',
+ 'ÄU' => '勸',
+ 'ÄV' => '嚨',
+ 'ÄW' => 'åš·',
+ 'ÄX' => '嚶',
+ 'ÄY' => 'åš´',
+ 'ÄZ' => 'åš¼',
+ 'Ä[' => '壤',
+ 'Ä\\' => 'å€',
+ 'Ä]' => 'åƒ',
+ 'Ä^' => 'å½',
+ 'Ä_' => '寶',
+ 'Ä`' => 'å·‰',
+ 'Äa' => '懸',
+ 'Äb' => '懺',
+ 'Äc' => '攘',
+ 'Äd' => 'æ””',
+ 'Äe' => 'æ”™',
+ 'Äf' => '曦',
+ 'Äg' => '朧',
+ 'Äh' => '櫬',
+ 'Äi' => '瀾',
+ 'Äj' => '瀰',
+ 'Äk' => '瀲',
+ 'Äl' => 'çˆ',
+ 'Äm' => 'ç»',
+ 'Än' => 'ç“',
+ 'Äo' => '癢',
+ 'Äp' => '癥',
+ 'Äq' => '礦',
+ 'Är' => '礪',
+ 'Äs' => '礬',
+ 'Ät' => '礫',
+ 'Äu' => '竇',
+ 'Äv' => '競',
+ 'Äw' => '籌',
+ 'Äx' => '籃',
+ 'Äy' => 'ç±',
+ 'Äz' => '糯',
+ 'Ä{' => 'ç³°',
+ 'Ä|' => 'è¾®',
+ 'Ä}' => 'ç¹½',
+ 'Ä~' => 'ç¹¼',
+ 'ġ' => '纂',
+ 'Ģ' => '罌',
+ 'ģ' => '耀',
+ 'Ĥ' => '臚',
+ 'ĥ' => '艦',
+ 'Ħ' => '藻',
+ 'ħ' => '藹',
+ 'Ĩ' => '蘑',
+ 'Ä©' => 'è—º',
+ 'Ī' => '蘆',
+ 'ī' => '蘋',
+ 'Ĭ' => '蘇',
+ 'Ä' => '蘊',
+ 'Ä®' => 'è ”',
+ 'į' => 'è •',
+ 'İ' => '襤',
+ 'ı' => '覺',
+ 'IJ' => '觸',
+ 'ij' => 'è°',
+ 'Ä´' => 'è¬',
+ 'ĵ' => 'è¦',
+ 'Ķ' => 'è¯',
+ 'Ä·' => 'èŸ',
+ 'ĸ' => 'è«',
+ 'Ĺ' => 'è´',
+ 'ĺ' => 'è´',
+ 'Ļ' => '躉',
+ 'ļ' => 'èº',
+ 'Ľ' => '躅',
+ 'ľ' => '躂',
+ 'Ŀ' => '醴',
+ 'ÄÀ' => '釋',
+ 'ÄÁ' => 'é˜',
+ 'ÄÂ' => 'éƒ',
+ 'ÄÃ' => 'é½',
+ 'ÄÄ' => 'é—¡',
+ 'ÄÅ' => '霰',
+ 'ÄÆ' => '飄',
+ 'ÄÇ' => '饒',
+ 'ÄÈ' => '饑',
+ 'ÄÉ' => '馨',
+ 'ÄÊ' => '騫',
+ 'ÄË' => '騰',
+ 'ÄÌ' => '騷',
+ 'ÄÍ' => '騵',
+ 'ÄÎ' => 'é°“',
+ 'ÄÏ' => 'é°',
+ 'ÄÐ' => 'é¹¹',
+ 'ÄÑ' => '麵',
+ 'ÄÒ' => '黨',
+ 'ÄÓ' => '鼯',
+ 'ÄÔ' => '齟',
+ 'ÄÕ' => 'é½£',
+ 'ÄÖ' => '齡',
+ 'Ä×' => 'å„·',
+ 'ÄØ' => '儸',
+ 'ÄÙ' => 'å›',
+ 'ÄÚ' => '囀',
+ 'ÄÛ' => '囂',
+ 'ÄÜ' => '夔',
+ 'ÄÝ' => '屬',
+ 'ÄÞ' => 'å·',
+ 'Äß' => '懼',
+ 'Äà' => '懾',
+ 'Äá' => 'æ”',
+ 'Äâ' => '攜',
+ 'Äã' => 'æ–•',
+ 'Ää' => '曩',
+ 'Äå' => 'æ«»',
+ 'Äæ' => '欄',
+ 'Äç' => '櫺',
+ 'Äè' => '殲',
+ 'Äé' => 'çŒ',
+ 'Äê' => '爛',
+ 'Äë' => '犧',
+ 'Äì' => 'ç“–',
+ 'Äí' => 'ç“”',
+ 'Äî' => '癩',
+ 'Äï' => '矓',
+ 'Äð' => 'ç±',
+ 'Äñ' => 'çº',
+ 'Äò' => '續',
+ 'Äó' => 'ç¾¼',
+ 'Äô' => '蘗',
+ 'Äõ' => 'è˜',
+ 'Äö' => '蘚',
+ 'Ä÷' => 'è £',
+ 'Äø' => 'è ¢',
+ 'Äù' => 'è ¡',
+ 'Äú' => 'è Ÿ',
+ 'Äû' => '襪',
+ 'Äü' => '襬',
+ 'Äý' => '覽',
+ 'Äþ' => 'è´',
+ 'Å@' => 'è·',
+ 'ÅA' => 'è½',
+ 'ÅB' => 'è´“',
+ 'ÅC' => '躊',
+ 'ÅD' => 'èº',
+ 'ÅE' => '躋',
+ 'ÅF' => '轟',
+ 'ÅG' => '辯',
+ 'ÅH' => '醺',
+ 'ÅI' => 'é®',
+ 'ÅJ' => 'é³',
+ 'ÅK' => 'éµ',
+ 'ÅL' => 'éº',
+ 'ÅM' => 'é¸',
+ 'ÅN' => 'é²',
+ 'ÅO' => 'é«',
+ 'ÅP' => 'é—¢',
+ 'ÅQ' => '霸',
+ 'ÅR' => '霹',
+ 'ÅS' => '露',
+ 'ÅT' => '響',
+ 'ÅU' => '顧',
+ 'ÅV' => 'é¡¥',
+ 'ÅW' => '饗',
+ 'ÅX' => 'é©…',
+ 'ÅY' => '驃',
+ 'ÅZ' => 'é©€',
+ 'Å[' => '騾',
+ 'Å\\' => 'é«',
+ 'Å]' => 'é”',
+ 'Å^' => 'é‘',
+ 'Å_' => 'é°',
+ 'Å`' => 'é°¥',
+ 'Åa' => '鶯',
+ 'Åb' => '鶴',
+ 'Åc' => 'é·‚',
+ 'Åd' => '鶸',
+ 'Åe' => 'éº',
+ 'Åf' => '黯',
+ 'Åg' => 'é¼™',
+ 'Åh' => '齜',
+ 'Åi' => '齦',
+ 'Åj' => '齧',
+ 'Åk' => '儼',
+ 'Ål' => 'å„»',
+ 'Åm' => '囈',
+ 'Ån' => '囊',
+ 'Åo' => '囉',
+ 'Åp' => 'å¿',
+ 'Åq' => 'å·”',
+ 'År' => 'å·’',
+ 'Ås' => '彎',
+ 'Åt' => '懿',
+ 'Åu' => '攤',
+ 'Åv' => '權',
+ 'Åw' => 'æ¡',
+ 'Åx' => 'ç‘',
+ 'Åy' => 'ç˜',
+ 'Åz' => '玀',
+ 'Å{' => '瓤',
+ 'Å|' => 'ç–Š',
+ 'Å}' => 'ç™®',
+ 'Å~' => '癬',
+ 'š' => '禳',
+ 'Å¢' => 'ç± ',
+ 'ţ' => '籟',
+ 'Ť' => 'è¾',
+ 'Å¥' => 'è½',
+ 'Ŧ' => '臟',
+ 'ŧ' => '襲',
+ 'Ũ' => '襯',
+ 'ũ' => '觼',
+ 'Ū' => '讀',
+ 'Å«' => 'è´–',
+ 'Ŭ' => '贗',
+ 'Å' => '躑',
+ 'Ů' => '躓',
+ 'ů' => '轡',
+ 'Å°' => 'é…ˆ',
+ 'ű' => '鑄',
+ 'Ų' => '鑑',
+ 'ų' => '鑒',
+ 'Ŵ' => '霽',
+ 'ŵ' => '霾',
+ 'Ŷ' => '韃',
+ 'Å·' => 'éŸ',
+ 'Ÿ' => '顫',
+ 'Ź' => '饕',
+ 'ź' => '驕',
+ 'Å»' => 'é©',
+ 'ż' => '髒',
+ 'Ž' => '鬚',
+ 'ž' => '鱉',
+ 'Å¿' => 'é°±',
+ 'ÅÀ' => 'é°¾',
+ 'ÅÁ' => 'é°»',
+ 'ÅÂ' => 'é·“',
+ 'ÅÃ' => 'é·—',
+ 'ÅÄ' => 'é¼´',
+ 'ÅÅ' => '齬',
+ 'ÅÆ' => '齪',
+ 'ÅÇ' => 'é¾”',
+ 'ÅÈ' => '囌',
+ 'ÅÉ' => 'å·–',
+ 'ÅÊ' => '戀',
+ 'ÅË' => '攣',
+ 'ÅÌ' => '攫',
+ 'ÅÍ' => '攪',
+ 'ÅÎ' => '曬',
+ 'ÅÏ' => 'æ¬',
+ 'ÅÐ' => 'ç“š',
+ 'ÅÑ' => 'ç«Š',
+ 'ÅÒ' => '籤',
+ 'ÅÓ' => 'ç±£',
+ 'ÅÔ' => 'ç±¥',
+ 'ÅÕ' => '纓',
+ 'ÅÖ' => '纖',
+ 'Å×' => '纔',
+ 'ÅØ' => '臢',
+ 'ÅÙ' => '蘸',
+ 'ÅÚ' => '蘿',
+ 'ÅÛ' => 'è ±',
+ 'ÅÜ' => '變',
+ 'ÅÝ' => 'é‚',
+ 'ÅÞ' => 'é‚',
+ 'Åß' => 'é‘£',
+ 'Åà' => 'é‘ ',
+ 'Åá' => '鑤',
+ 'Åâ' => 'é¨',
+ 'Åã' => '顯',
+ 'Åä' => '饜',
+ 'Åå' => 'é©š',
+ 'Åæ' => 'é©›',
+ 'Åç' => 'é©—',
+ 'Åè' => 'é«“',
+ 'Åé' => 'é«”',
+ 'Åê' => 'é«‘',
+ 'Åë' => 'é±”',
+ 'Åì' => 'é±—',
+ 'Åí' => 'é±–',
+ 'Åî' => 'é·¥',
+ 'Åï' => '麟',
+ 'Åð' => 'é»´',
+ 'Åñ' => '囑',
+ 'Åò' => '壩',
+ 'Åó' => '攬',
+ 'Åô' => 'çž',
+ 'Åõ' => 'ç™±',
+ 'Åö' => '癲',
+ 'Å÷' => '矗',
+ 'Åø' => 'ç½',
+ 'Åù' => '羈',
+ 'Åú' => 'è ¶',
+ 'Åû' => 'è ¹',
+ 'Åü' => 'è¡¢',
+ 'Åý' => '讓',
+ 'Åþ' => 'è®’',
+ 'Æ@' => 'è®–',
+ 'ÆA' => '艷',
+ 'ÆB' => 'è´›',
+ 'ÆC' => '釀',
+ 'ÆD' => '鑪',
+ 'ÆE' => 'é‚',
+ 'ÆF' => 'éˆ',
+ 'ÆG' => 'é„',
+ 'ÆH' => '韆',
+ 'ÆI' => 'é¡°',
+ 'ÆJ' => 'é©Ÿ',
+ 'ÆK' => '鬢',
+ 'ÆL' => 'é˜',
+ 'ÆM' => '鱟',
+ 'ÆN' => 'é·¹',
+ 'ÆO' => 'é·º',
+ 'ÆP' => 'é¹¼',
+ 'ÆQ' => 'é¹½',
+ 'ÆR' => '鼇',
+ 'ÆS' => 'é½·',
+ 'ÆT' => 'é½²',
+ 'ÆU' => '廳',
+ 'ÆV' => '欖',
+ 'ÆW' => 'ç£',
+ 'ÆX' => '籬',
+ 'ÆY' => 'ç±®',
+ 'ÆZ' => 'è »',
+ 'Æ[' => '觀',
+ 'Æ\\' => '躡',
+ 'Æ]' => 'é‡',
+ 'Æ^' => '鑲',
+ 'Æ_' => 'é‘°',
+ 'Æ`' => '顱',
+ 'Æa' => '饞',
+ 'Æb' => 'é«–',
+ 'Æc' => '鬣',
+ 'Æd' => '黌',
+ 'Æe' => 'ç¤',
+ 'Æf' => '矚',
+ 'Æg' => '讚',
+ 'Æh' => 'é‘·',
+ 'Æi' => '韉',
+ 'Æj' => 'é©¢',
+ 'Æk' => 'é©¥',
+ 'Æl' => '纜',
+ 'Æm' => '讜',
+ 'Æn' => '躪',
+ 'Æo' => '釅',
+ 'Æp' => '鑽',
+ 'Æq' => '鑾',
+ 'Ær' => '鑼',
+ 'Æs' => 'é±·',
+ 'Æt' => '鱸',
+ 'Æu' => 'é»·',
+ 'Æv' => 'è±”',
+ 'Æw' => 'é‘¿',
+ 'Æx' => '鸚',
+ 'Æy' => '爨',
+ 'Æz' => '驪',
+ 'Æ{' => '鬱',
+ 'Æ|' => '鸛',
+ 'Æ}' => '鸞',
+ 'Æ~' => 'ç±²',
+ 'ơ' => 'ヾ',
+ 'Æ¢' => 'ã‚',
+ 'Æ£' => 'ã‚ž',
+ 'Ƥ' => '々',
+ 'Æ¥' => 'ã',
+ 'Ʀ' => 'ã‚',
+ 'Ƨ' => 'ãƒ',
+ 'ƨ' => 'ã„',
+ 'Æ©' => 'ã…',
+ 'ƪ' => 'ã†',
+ 'Æ«' => 'ã‡',
+ 'Ƭ' => 'ãˆ',
+ 'Æ' => 'ã‰',
+ 'Æ®' => 'ãŠ',
+ 'Ư' => 'ã‹',
+ 'Æ°' => 'ãŒ',
+ 'Ʊ' => 'ã',
+ 'Ʋ' => 'ãŽ',
+ 'Ƴ' => 'ã',
+ 'Æ´' => 'ã',
+ 'Ƶ' => 'ã‘',
+ 'ƶ' => 'ã’',
+ 'Æ·' => 'ã“',
+ 'Ƹ' => 'ã”',
+ 'ƹ' => 'ã•',
+ 'ƺ' => 'ã–',
+ 'Æ»' => 'ã—',
+ 'Ƽ' => 'ã˜',
+ 'ƽ' => 'ã™',
+ 'ƾ' => 'ãš',
+ 'Æ¿' => 'ã›',
+ 'ÆÀ' => 'ãœ',
+ 'ÆÁ' => 'ã',
+ 'ÆÂ' => 'ãž',
+ 'ÆÃ' => 'ãŸ',
+ 'ÆÄ' => 'ã ',
+ 'ÆÅ' => 'ã¡',
+ 'ÆÆ' => 'ã¢',
+ 'ÆÇ' => 'ã£',
+ 'ÆÈ' => 'ã¤',
+ 'ÆÉ' => 'ã¥',
+ 'ÆÊ' => 'ã¦',
+ 'ÆË' => 'ã§',
+ 'ÆÌ' => 'ã¨',
+ 'ÆÍ' => 'ã©',
+ 'ÆÎ' => 'ãª',
+ 'ÆÏ' => 'ã«',
+ 'ÆÐ' => 'ã¬',
+ 'ÆÑ' => 'ã',
+ 'ÆÒ' => 'ã®',
+ 'ÆÓ' => 'ã¯',
+ 'ÆÔ' => 'ã°',
+ 'ÆÕ' => 'ã±',
+ 'ÆÖ' => 'ã²',
+ 'Æ×' => 'ã³',
+ 'ÆØ' => 'ã´',
+ 'ÆÙ' => 'ãµ',
+ 'ÆÚ' => 'ã¶',
+ 'ÆÛ' => 'ã·',
+ 'ÆÜ' => 'ã¸',
+ 'ÆÝ' => 'ã¹',
+ 'ÆÞ' => 'ãº',
+ 'Æß' => 'ã»',
+ 'Æà' => 'ã¼',
+ 'Æá' => 'ã½',
+ 'Æâ' => 'ã¾',
+ 'Æã' => 'ã¿',
+ 'Æä' => 'ã‚€',
+ 'Æå' => 'ã‚',
+ 'Ææ' => 'ã‚‚',
+ 'Æç' => 'ゃ',
+ 'Æè' => 'ã‚„',
+ 'Æé' => 'ã‚…',
+ 'Æê' => 'ゆ',
+ 'Æë' => 'ょ',
+ 'Æì' => 'よ',
+ 'Æí' => 'ら',
+ 'Æî' => 'ã‚Š',
+ 'Æï' => 'ã‚‹',
+ 'Æð' => 'ã‚Œ',
+ 'Æñ' => 'ã‚',
+ 'Æò' => 'ã‚Ž',
+ 'Æó' => 'ã‚',
+ 'Æô' => 'ã‚',
+ 'Æõ' => 'ã‚‘',
+ 'Æö' => 'ã‚’',
+ 'Æ÷' => 'ã‚“',
+ 'Æø' => 'ã‚¡',
+ 'Æù' => 'ã‚¢',
+ 'Æú' => 'ã‚£',
+ 'Æû' => 'イ',
+ 'Æü' => 'ã‚¥',
+ 'Æý' => 'ウ',
+ 'Æþ' => 'ェ',
+ 'Ç@' => 'エ',
+ 'ÇA' => 'ã‚©',
+ 'ÇB' => 'オ',
+ 'ÇC' => 'ã‚«',
+ 'ÇD' => 'ガ',
+ 'ÇE' => 'ã‚',
+ 'ÇF' => 'ã‚®',
+ 'ÇG' => 'ク',
+ 'ÇH' => 'ã‚°',
+ 'ÇI' => 'ケ',
+ 'ÇJ' => 'ゲ',
+ 'ÇK' => 'コ',
+ 'ÇL' => 'ã‚´',
+ 'ÇM' => 'サ',
+ 'ÇN' => 'ザ',
+ 'ÇO' => 'ã‚·',
+ 'ÇP' => 'ジ',
+ 'ÇQ' => 'ス',
+ 'ÇR' => 'ズ',
+ 'ÇS' => 'ã‚»',
+ 'ÇT' => 'ゼ',
+ 'ÇU' => 'ソ',
+ 'ÇV' => 'ゾ',
+ 'ÇW' => 'ã‚¿',
+ 'ÇX' => 'ダ',
+ 'ÇY' => 'ãƒ',
+ 'ÇZ' => 'ヂ',
+ 'Ç[' => 'ッ',
+ 'Ç\\' => 'ツ',
+ 'Ç]' => 'ヅ',
+ 'Ç^' => 'テ',
+ 'Ç_' => 'デ',
+ 'Ç`' => 'ト',
+ 'Ça' => 'ド',
+ 'Çb' => 'ナ',
+ 'Çc' => 'ニ',
+ 'Çd' => 'ヌ',
+ 'Çe' => 'ãƒ',
+ 'Çf' => 'ノ',
+ 'Çg' => 'ãƒ',
+ 'Çh' => 'ãƒ',
+ 'Çi' => 'パ',
+ 'Çj' => 'ヒ',
+ 'Çk' => 'ビ',
+ 'Çl' => 'ピ',
+ 'Çm' => 'フ',
+ 'Çn' => 'ブ',
+ 'Ço' => 'プ',
+ 'Çp' => 'ヘ',
+ 'Çq' => 'ベ',
+ 'Çr' => 'ペ',
+ 'Çs' => 'ホ',
+ 'Çt' => 'ボ',
+ 'Çu' => 'ãƒ',
+ 'Çv' => 'マ',
+ 'Çw' => 'ミ',
+ 'Çx' => 'ム',
+ 'Çy' => 'メ',
+ 'Çz' => 'モ',
+ 'Ç{' => 'ャ',
+ 'Ç|' => 'ヤ',
+ 'Ç}' => 'ュ',
+ 'Ç~' => 'ユ',
+ 'ǡ' => 'ョ',
+ 'Ǣ' => 'ヨ',
+ 'ǣ' => 'ラ',
+ 'Ǥ' => 'リ',
+ 'ǥ' => 'ル',
+ 'Ǧ' => 'レ',
+ 'ǧ' => 'ãƒ',
+ 'Ǩ' => 'ヮ',
+ 'ǩ' => 'ワ',
+ 'Ǫ' => 'ヰ',
+ 'ǫ' => 'ヱ',
+ 'Ǭ' => 'ヲ',
+ 'Ç' => 'ン',
+ 'Ǯ' => 'ヴ',
+ 'ǯ' => 'ヵ',
+ 'ǰ' => 'ヶ',
+ 'DZ' => 'Д',
+ 'Dz' => 'Е',
+ 'dz' => 'Ð',
+ 'Ǵ' => 'Ж',
+ 'ǵ' => 'З',
+ 'Ƕ' => 'И',
+ 'Ƿ' => 'Й',
+ 'Ǹ' => 'К',
+ 'ǹ' => 'Л',
+ 'Ǻ' => 'М',
+ 'ǻ' => 'У',
+ 'Ǽ' => 'Ф',
+ 'ǽ' => 'Х',
+ 'Ǿ' => 'Ц',
+ 'ǿ' => 'Ч',
+ 'ÇÀ' => 'Ш',
+ 'ÇÁ' => 'Щ',
+ 'ÇÂ' => 'Ъ',
+ 'ÇÃ' => 'Ы',
+ 'ÇÄ' => 'Ь',
+ 'ÇÅ' => 'Ð',
+ 'ÇÆ' => 'Ю',
+ 'ÇÇ' => 'Я',
+ 'ÇÈ' => 'а',
+ 'ÇÉ' => 'б',
+ 'ÇÊ' => 'в',
+ 'ÇË' => 'г',
+ 'ÇÌ' => 'д',
+ 'ÇÍ' => 'е',
+ 'ÇÎ' => 'Ñ‘',
+ 'ÇÏ' => 'ж',
+ 'ÇÐ' => 'з',
+ 'ÇÑ' => 'и',
+ 'ÇÒ' => 'й',
+ 'ÇÓ' => 'к',
+ 'ÇÔ' => 'л',
+ 'ÇÕ' => 'м',
+ 'ÇÖ' => 'н',
+ 'Ç×' => 'о',
+ 'ÇØ' => 'п',
+ 'ÇÙ' => 'Ñ€',
+ 'ÇÚ' => 'Ñ',
+ 'ÇÛ' => 'Ñ‚',
+ 'ÇÜ' => 'у',
+ 'ÇÝ' => 'Ñ„',
+ 'ÇÞ' => 'Ñ…',
+ 'Çß' => 'ц',
+ 'Çà' => 'ч',
+ 'Çá' => 'ш',
+ 'Çâ' => 'щ',
+ 'Çã' => 'ÑŠ',
+ 'Çä' => 'Ñ‹',
+ 'Çå' => 'ÑŒ',
+ 'Çæ' => 'Ñ',
+ 'Çç' => 'ÑŽ',
+ 'Çè' => 'Ñ',
+ 'Çé' => 'â‘ ',
+ 'Çê' => 'â‘¡',
+ 'Çë' => 'â‘¢',
+ 'Çì' => 'â‘£',
+ 'Çí' => '⑤',
+ 'Çî' => 'â‘¥',
+ 'Çï' => '⑦',
+ 'Çð' => '⑧',
+ 'Çñ' => '⑨',
+ 'Çò' => 'â‘©',
+ 'Çó' => 'â‘´',
+ 'Çô' => '⑵',
+ 'Çõ' => '⑶',
+ 'Çö' => 'â‘·',
+ 'Ç÷' => '⑸',
+ 'Çø' => '⑹',
+ 'Çù' => '⑺',
+ 'Çú' => 'â‘»',
+ 'Çû' => '⑼',
+ 'Çü' => '⑽',
+ 'É@' => '乂',
+ 'ÉA' => '乜',
+ 'ÉB' => '凵',
+ 'ÉC' => '匚',
+ 'ÉD' => '厂',
+ 'ÉE' => '万',
+ 'ÉF' => '丌',
+ 'ÉG' => '乇',
+ 'ÉH' => 'äº',
+ 'ÉI' => 'å›—',
+ 'ÉJ' => '兀',
+ 'ÉK' => 'å±®',
+ 'ÉL' => 'å½³',
+ 'ÉM' => 'ä¸',
+ 'ÉN' => '冇',
+ 'ÉO' => '与',
+ 'ÉP' => '丮',
+ 'ÉQ' => '亓',
+ 'ÉR' => '仂',
+ 'ÉS' => '仉',
+ 'ÉT' => '仈',
+ 'ÉU' => '冘',
+ 'ÉV' => '勼',
+ 'ÉW' => 'å¬',
+ 'ÉX' => '厹',
+ 'ÉY' => 'åœ ',
+ 'ÉZ' => '夃',
+ 'É[' => '夬',
+ 'É\\' => 'å°',
+ 'É]' => 'å·¿',
+ 'É^' => 'æ—¡',
+ 'É_' => '殳',
+ 'É`' => '毌',
+ 'Éa' => 'æ°”',
+ 'Éb' => '爿',
+ 'Éc' => '丱',
+ 'Éd' => '丼',
+ 'Ée' => '仨',
+ 'Éf' => '仜',
+ 'Ég' => '仩',
+ 'Éh' => '仡',
+ 'Éi' => 'ä»',
+ 'Éj' => '仚',
+ 'Ék' => '刌',
+ 'Él' => '匜',
+ 'Ém' => 'åŒ',
+ 'Én' => '圢',
+ 'Éo' => '圣',
+ 'Ép' => '夗',
+ 'Éq' => '夯',
+ 'Ér' => 'å®',
+ 'És' => '宄',
+ 'Ét' => 'å°’',
+ 'Éu' => 'å°»',
+ 'Év' => 'å±´',
+ 'Éw' => 'å±³',
+ 'Éx' => '帄',
+ 'Éy' => '庀',
+ 'Éz' => '庂',
+ 'É{' => '忉',
+ 'É|' => '戉',
+ 'É}' => 'æ‰',
+ 'É~' => 'æ°•',
+ 'É¡' => 'æ°¶',
+ 'ɢ' => '汃',
+ 'É£' => 'æ°¿',
+ 'ɤ' => '氻',
+ 'ɥ' => '犮',
+ 'ɦ' => '犰',
+ 'ɧ' => '玊',
+ 'ɨ' => '禸',
+ 'É©' => 'è‚Š',
+ 'ɪ' => '阞',
+ 'ɫ' => '伎',
+ 'ɬ' => '优',
+ 'É' => '伬',
+ 'ɮ' => '仵',
+ 'ɯ' => '伔',
+ 'É°' => 'ä»±',
+ 'ɱ' => '伀',
+ 'ɲ' => '价',
+ 'ɳ' => '伈',
+ 'É´' => 'ä¼',
+ 'ɵ' => '伂',
+ 'ɶ' => '伅',
+ 'É·' => 'ä¼¢',
+ 'ɸ' => '伓',
+ 'ɹ' => '伄',
+ 'ɺ' => '仴',
+ 'É»' => 'ä¼’',
+ 'ɼ' => '冱',
+ 'ɽ' => '刓',
+ 'ɾ' => '刉',
+ 'É¿' => 'åˆ',
+ 'ÉÀ' => '劦',
+ 'ÉÁ' => '匢',
+ 'ÉÂ' => '匟',
+ 'ÉÃ' => 'å',
+ 'ÉÄ' => '厊',
+ 'ÉÅ' => 'å‡',
+ 'ÉÆ' => '囡',
+ 'ÉÇ' => '囟',
+ 'ÉÈ' => '圮',
+ 'ÉÉ' => '圪',
+ 'ÉÊ' => '圴',
+ 'ÉË' => '夼',
+ 'ÉÌ' => '妀',
+ 'ÉÍ' => '奼',
+ 'ÉÎ' => '妅',
+ 'ÉÏ' => '奻',
+ 'ÉÐ' => '奾',
+ 'ÉÑ' => '奷',
+ 'ÉÒ' => '奿',
+ 'ÉÓ' => 'å–',
+ 'ÉÔ' => 'å°•',
+ 'ÉÕ' => 'å°¥',
+ 'ÉÖ' => 'å±¼',
+ 'É×' => '屺',
+ 'ÉØ' => 'å±»',
+ 'ÉÙ' => 'å±¾',
+ 'ÉÚ' => 'å·Ÿ',
+ 'ÉÛ' => 'å¹µ',
+ 'ÉÜ' => '庄',
+ 'ÉÝ' => '异',
+ 'ÉÞ' => '弚',
+ 'Éß' => 'å½´',
+ 'Éà' => 'å¿•',
+ 'Éá' => 'å¿”',
+ 'Éâ' => 'å¿',
+ 'Éã' => '扜',
+ 'Éä' => '扞',
+ 'Éå' => '扤',
+ 'Éæ' => '扡',
+ 'Éç' => '扦',
+ 'Éè' => '扢',
+ 'Éé' => '扙',
+ 'Éê' => 'æ‰ ',
+ 'Éë' => '扚',
+ 'Éì' => '扥',
+ 'Éí' => 'æ—¯',
+ 'Éî' => 'æ—®',
+ 'Éï' => '朾',
+ 'Éð' => '朹',
+ 'Éñ' => '朸',
+ 'Éò' => '朻',
+ 'Éó' => '机',
+ 'Éô' => '朿',
+ 'Éõ' => '朼',
+ 'Éö' => '朳',
+ 'É÷' => 'æ°˜',
+ 'Éø' => '汆',
+ 'Éù' => 'æ±’',
+ 'Éú' => '汜',
+ 'Éû' => 'æ±',
+ 'Éü' => '汊',
+ 'Éý' => 'æ±”',
+ 'Éþ' => '汋',
+ 'Ê@' => '汌',
+ 'ÊA' => 'ç±',
+ 'ÊB' => '牞',
+ 'ÊC' => '犴',
+ 'ÊD' => '犵',
+ 'ÊE' => '玎',
+ 'ÊF' => '甪',
+ 'ÊG' => '癿',
+ 'ÊH' => '穵',
+ 'ÊI' => '网',
+ 'ÊJ' => '艸',
+ 'ÊK' => '艼',
+ 'ÊL' => '芀',
+ 'ÊM' => '艽',
+ 'ÊN' => '艿',
+ 'ÊO' => 'è™',
+ 'ÊP' => '襾',
+ 'ÊQ' => 'é‚™',
+ 'ÊR' => 'é‚—',
+ 'ÊS' => '邘',
+ 'ÊT' => 'é‚›',
+ 'ÊU' => 'é‚”',
+ 'ÊV' => '阢',
+ 'ÊW' => '阤',
+ 'ÊX' => 'é˜ ',
+ 'ÊY' => '阣',
+ 'ÊZ' => 'ä½–',
+ 'Ê[' => 'ä¼»',
+ 'Ê\\' => 'ä½¢',
+ 'Ê]' => '佉',
+ 'Ê^' => '体',
+ 'Ê_' => '佤',
+ 'Ê`' => 'ä¼¾',
+ 'Êa' => '佧',
+ 'Êb' => 'ä½’',
+ 'Êc' => '佟',
+ 'Êd' => 'ä½',
+ 'Êe' => '佘',
+ 'Êf' => 'ä¼',
+ 'Êg' => 'ä¼³',
+ 'Êh' => '伿',
+ 'Êi' => '佡',
+ 'Êj' => 'å†',
+ 'Êk' => '冹',
+ 'Êl' => '刜',
+ 'Êm' => '刞',
+ 'Ên' => '刡',
+ 'Êo' => 'åŠ',
+ 'Êp' => '劮',
+ 'Êq' => '匉',
+ 'Êr' => 'å£',
+ 'Ês' => 'å²',
+ 'Êt' => '厎',
+ 'Êu' => 'åŽ',
+ 'Êv' => 'å°',
+ 'Êw' => 'å·',
+ 'Êx' => 'åª',
+ 'Êy' => 'å‘”',
+ 'Êz' => 'å‘…',
+ 'Ê{' => 'å™',
+ 'Ê|' => 'åœ',
+ 'Ê}' => 'å¥',
+ 'Ê~' => 'å˜',
+ 'Ê¡' => 'å½',
+ 'Ê¢' => 'å‘',
+ 'Ê£' => 'å‘',
+ 'ʤ' => 'å¨',
+ 'Ê¥' => 'å¤',
+ 'ʦ' => '呇',
+ 'ʧ' => '囮',
+ 'ʨ' => '囧',
+ 'ʩ' => '囥',
+ 'ʪ' => 'å',
+ 'Ê«' => 'å…',
+ 'ʬ' => 'åŒ',
+ 'Ê' => 'å‰',
+ 'Ê®' => 'å‹',
+ 'ʯ' => 'å’',
+ 'ʰ' => '夆',
+ 'ʱ' => '奀',
+ 'ʲ' => '妦',
+ 'ʳ' => '妘',
+ 'Ê´' => 'å¦ ',
+ 'ʵ' => '妗',
+ 'ʶ' => '妎',
+ 'ʷ' => '妢',
+ 'ʸ' => 'å¦',
+ 'ʹ' => 'å¦',
+ 'ʺ' => '妧',
+ 'ʻ' => '妡',
+ 'ʼ' => '宎',
+ 'ʽ' => '宒',
+ 'ʾ' => '尨',
+ 'Ê¿' => 'å°ª',
+ 'ÊÀ' => 'å²',
+ 'ÊÁ' => 'å²',
+ 'ÊÂ' => '岈',
+ 'ÊÃ' => '岋',
+ 'ÊÄ' => '岉',
+ 'ÊÅ' => 'å²’',
+ 'ÊÆ' => '岊',
+ 'ÊÇ' => '岆',
+ 'ÊÈ' => '岓',
+ 'ÊÉ' => '岕',
+ 'ÊÊ' => 'å· ',
+ 'ÊË' => '帊',
+ 'ÊÌ' => '帎',
+ 'ÊÍ' => '庋',
+ 'ÊÎ' => '庉',
+ 'ÊÏ' => '庌',
+ 'ÊÐ' => '庈',
+ 'ÊÑ' => 'åº',
+ 'ÊÒ' => 'å¼…',
+ 'ÊÓ' => 'å¼',
+ 'ÊÔ' => '彸',
+ 'ÊÕ' => '彶',
+ 'ÊÖ' => 'å¿’',
+ 'Ê×' => 'å¿‘',
+ 'ÊØ' => 'å¿',
+ 'ÊÙ' => 'å¿',
+ 'ÊÚ' => '忨',
+ 'ÊÛ' => 'å¿®',
+ 'ÊÜ' => '忳',
+ 'ÊÝ' => 'å¿¡',
+ 'ÊÞ' => '忤',
+ 'Êß' => 'å¿£',
+ 'Êà' => '忺',
+ 'Êá' => '忯',
+ 'Êâ' => 'å¿·',
+ 'Êã' => 'å¿»',
+ 'Êä' => '怀',
+ 'Êå' => 'å¿´',
+ 'Êæ' => '戺',
+ 'Êç' => '抃',
+ 'Êè' => '抌',
+ 'Êé' => '抎',
+ 'Êê' => 'æŠ',
+ 'Êë' => '抔',
+ 'Êì' => '抇',
+ 'Êí' => '扱',
+ 'Êî' => '扻',
+ 'Êï' => '扺',
+ 'Êð' => '扰',
+ 'Êñ' => 'æŠ',
+ 'Êò' => '抈',
+ 'Êó' => '扷',
+ 'Êô' => '扽',
+ 'Êõ' => '扲',
+ 'Êö' => '扴',
+ 'Ê÷' => 'æ”·',
+ 'Êø' => 'æ—°',
+ 'Êù' => 'æ—´',
+ 'Êú' => 'æ—³',
+ 'Êû' => 'æ—²',
+ 'Êü' => 'æ—µ',
+ 'Êý' => 'æ…',
+ 'Êþ' => 'æ‡',
+ 'Ë@' => 'æ™',
+ 'ËA' => 'æ•',
+ 'ËB' => 'æŒ',
+ 'ËC' => 'æˆ',
+ 'ËD' => 'æ',
+ 'ËE' => 'æ',
+ 'ËF' => 'æš',
+ 'ËG' => 'æ‹',
+ 'ËH' => 'æ¯',
+ 'ËI' => 'æ°™',
+ 'ËJ' => 'æ°š',
+ 'ËK' => '汸',
+ 'ËL' => '汧',
+ 'ËM' => '汫',
+ 'ËN' => '沄',
+ 'ËO' => '沋',
+ 'ËP' => 'æ²',
+ 'ËQ' => 'æ±±',
+ 'ËR' => '汯',
+ 'ËS' => '汩',
+ 'ËT' => '沚',
+ 'ËU' => 'æ±',
+ 'ËV' => '沇',
+ 'ËW' => '沕',
+ 'ËX' => '沜',
+ 'ËY' => '汦',
+ 'ËZ' => 'æ±³',
+ 'Ë[' => 'æ±¥',
+ 'Ë\\' => 'æ±»',
+ 'Ë]' => '沎',
+ 'Ë^' => 'ç´',
+ 'Ë_' => 'çº',
+ 'Ë`' => '牣',
+ 'Ëa' => '犿',
+ 'Ëb' => '犽',
+ 'Ëc' => '狃',
+ 'Ëd' => '狆',
+ 'Ëe' => 'ç‹',
+ 'Ëf' => '犺',
+ 'Ëg' => 'ç‹…',
+ 'Ëh' => '玕',
+ 'Ëi' => '玗',
+ 'Ëj' => '玓',
+ 'Ëk' => '玔',
+ 'Ël' => '玒',
+ 'Ëm' => '町',
+ 'Ën' => '甹',
+ 'Ëo' => 'ç–”',
+ 'Ëp' => 'ç–•',
+ 'Ëq' => 'çš',
+ 'Ër' => '礽',
+ 'Ës' => '耴',
+ 'Ët' => 'è‚•',
+ 'Ëu' => 'è‚™',
+ 'Ëv' => 'è‚',
+ 'Ëw' => 'è‚’',
+ 'Ëx' => 'è‚œ',
+ 'Ëy' => 'èŠ',
+ 'Ëz' => 'èŠ',
+ 'Ë{' => '芅',
+ 'Ë|' => '芎',
+ 'Ë}' => '芑',
+ 'Ë~' => '芓',
+ 'ˡ' => '芊',
+ 'ˢ' => '芃',
+ 'ˣ' => '芄',
+ 'ˤ' => '豸',
+ '˥' => '迉',
+ '˦' => '辿',
+ '˧' => '邟',
+ '˨' => '邡',
+ 'Ë©' => 'é‚¥',
+ '˪' => '邞',
+ '˫' => '邧',
+ 'ˬ' => 'é‚ ',
+ 'Ë' => '阰',
+ 'ˮ' => '阨',
+ '˯' => '阯',
+ 'Ë°' => 'é˜',
+ '˱' => '丳',
+ '˲' => '侘',
+ '˳' => '佼',
+ 'Ë´' => 'ä¾…',
+ '˵' => '佽',
+ '˶' => '侀',
+ '˷' => '侇',
+ '˸' => '佶',
+ '˹' => '佴',
+ '˺' => '侉',
+ '˻' => '侄',
+ '˼' => '佷',
+ '˽' => '佌',
+ '˾' => '侗',
+ '˿' => '佪',
+ 'ËÀ' => '侚',
+ 'ËÁ' => 'ä½¹',
+ 'ËÂ' => 'ä¾',
+ 'ËÃ' => '佸',
+ 'ËÄ' => 'ä¾',
+ 'ËÅ' => '侜',
+ 'ËÆ' => 'ä¾”',
+ 'ËÇ' => '侞',
+ 'ËÈ' => 'ä¾’',
+ 'ËÉ' => '侂',
+ 'ËÊ' => '侕',
+ 'ËË' => '佫',
+ 'ËÌ' => 'ä½®',
+ 'ËÍ' => '冞',
+ 'ËÎ' => '冼',
+ 'ËÏ' => '冾',
+ 'ËÐ' => '刵',
+ 'ËÑ' => '刲',
+ 'ËÒ' => '刳',
+ 'ËÓ' => '剆',
+ 'ËÔ' => '刱',
+ 'ËÕ' => '劼',
+ 'ËÖ' => '匊',
+ 'Ë×' => '匋',
+ 'ËØ' => '匼',
+ 'ËÙ' => '厒',
+ 'ËÚ' => '厔',
+ 'ËÛ' => 'å’‡',
+ 'ËÜ' => 'å‘¿',
+ 'ËÝ' => 'å’',
+ 'ËÞ' => 'å’‘',
+ 'Ëß' => 'å’‚',
+ 'Ëà' => 'å’ˆ',
+ 'Ëá' => 'å‘«',
+ 'Ëâ' => '呺',
+ 'Ëã' => '呾',
+ 'Ëä' => 'å‘¥',
+ 'Ëå' => '呬',
+ 'Ëæ' => 'å‘´',
+ 'Ëç' => '呦',
+ 'Ëè' => 'å’',
+ 'Ëé' => '呯',
+ 'Ëê' => 'å‘¡',
+ 'Ëë' => 'å‘ ',
+ 'Ëì' => 'å’˜',
+ 'Ëí' => 'å‘£',
+ 'Ëî' => '呧',
+ 'Ëï' => '呤',
+ 'Ëð' => 'å›·',
+ 'Ëñ' => '囹',
+ 'Ëò' => 'å¯',
+ 'Ëó' => 'å²',
+ 'Ëô' => 'å',
+ 'Ëõ' => 'å«',
+ 'Ëö' => 'å±',
+ 'Ë÷' => 'å°',
+ 'Ëø' => 'å¶',
+ 'Ëù' => '垀',
+ 'Ëú' => 'åµ',
+ 'Ëû' => 'å»',
+ 'Ëü' => 'å³',
+ 'Ëý' => 'å´',
+ 'Ëþ' => 'å¢',
+ 'Ì@' => 'å¨',
+ 'ÌA' => 'å½',
+ 'ÌB' => '夌',
+ 'ÌC' => '奅',
+ 'ÌD' => '妵',
+ 'ÌE' => '妺',
+ 'ÌF' => 'å§',
+ 'ÌG' => '姎',
+ 'ÌH' => '妲',
+ 'ÌI' => '姌',
+ 'ÌJ' => 'å§',
+ 'ÌK' => '妶',
+ 'ÌL' => '妼',
+ 'ÌM' => '姃',
+ 'ÌN' => '姖',
+ 'ÌO' => '妱',
+ 'ÌP' => '妽',
+ 'ÌQ' => '姀',
+ 'ÌR' => '姈',
+ 'ÌS' => '妴',
+ 'ÌT' => '姇',
+ 'ÌU' => 'å¢',
+ 'ÌV' => 'å¥',
+ 'ÌW' => '宓',
+ 'ÌX' => '宕',
+ 'ÌY' => '屄',
+ 'ÌZ' => '屇',
+ 'Ì[' => 'å²®',
+ 'Ì\\' => '岤',
+ 'Ì]' => 'å² ',
+ 'Ì^' => 'å²µ',
+ 'Ì_' => '岯',
+ 'Ì`' => '岨',
+ 'Ìa' => '岬',
+ 'Ìb' => '岟',
+ 'Ìc' => 'å²£',
+ 'Ìd' => 'å²',
+ 'Ìe' => 'å²¢',
+ 'Ìf' => '岪',
+ 'Ìg' => '岧',
+ 'Ìh' => 'å²',
+ 'Ìi' => 'å²¥',
+ 'Ìj' => '岶',
+ 'Ìk' => 'å²°',
+ 'Ìl' => '岦',
+ 'Ìm' => '帗',
+ 'Ìn' => '帔',
+ 'Ìo' => '帙',
+ 'Ìp' => '弨',
+ 'Ìq' => 'å¼¢',
+ 'Ìr' => 'å¼£',
+ 'Ìs' => '弤',
+ 'Ìt' => 'å½”',
+ 'Ìu' => '徂',
+ 'Ìv' => 'å½¾',
+ 'Ìw' => 'å½½',
+ 'Ìx' => 'å¿ž',
+ 'Ìy' => 'å¿¥',
+ 'Ìz' => 'æ€',
+ 'Ì{' => '怦',
+ 'Ì|' => '怙',
+ 'Ì}' => '怲',
+ 'Ì~' => '怋',
+ '̡' => '怴',
+ '̢' => '怊',
+ '̣' => '怗',
+ '̤' => '怳',
+ '̥' => '怚',
+ '̦' => '怞',
+ '̧' => '怬',
+ '̨' => '怢',
+ 'Ì©' => 'æ€',
+ '̪' => 'æ€',
+ '̫' => '怮',
+ '̬' => '怓',
+ 'Ì' => '怑',
+ '̮' => '怌',
+ '̯' => '怉',
+ '̰' => '怜',
+ '̱' => '戔',
+ '̲' => '戽',
+ '̳' => 'æŠ',
+ '̴' => '抴',
+ '̵' => '拑',
+ '̶' => '抾',
+ '̷' => '抪',
+ '̸' => '抶',
+ '̹' => '拊',
+ '̺' => '抮',
+ '̻' => '抳',
+ '̼' => '抯',
+ '̽' => '抻',
+ '̾' => '抩',
+ '̿' => '抰',
+ 'ÌÀ' => '抸',
+ 'ÌÁ' => '攽',
+ 'ÌÂ' => 'æ–¨',
+ 'ÌÃ' => 'æ–»',
+ 'ÌÄ' => '昉',
+ 'ÌÅ' => 'æ—¼',
+ 'ÌÆ' => '昄',
+ 'ÌÇ' => '昒',
+ 'ÌÈ' => '昈',
+ 'ÌÉ' => 'æ—»',
+ 'ÌÊ' => '昃',
+ 'ÌË' => '昋',
+ 'ÌÌ' => 'æ˜',
+ 'ÌÍ' => '昅',
+ 'ÌÎ' => 'æ—½',
+ 'ÌÏ' => '昑',
+ 'ÌÐ' => 'æ˜',
+ 'ÌÑ' => '曶',
+ 'ÌÒ' => '朊',
+ 'ÌÓ' => 'æž…',
+ 'ÌÔ' => 'æ¬',
+ 'ÌÕ' => '枎',
+ 'ÌÖ' => 'æž’',
+ 'Ì×' => 'æ¶',
+ 'ÌØ' => 'æ»',
+ 'ÌÙ' => '枘',
+ 'ÌÚ' => '枆',
+ 'ÌÛ' => 'æž„',
+ 'ÌÜ' => 'æ´',
+ 'ÌÝ' => 'æž',
+ 'ÌÞ' => '枌',
+ 'Ìß' => 'æº',
+ 'Ìà' => '枟',
+ 'Ìá' => 'æž‘',
+ 'Ìâ' => 'æž™',
+ 'Ìã' => '枃',
+ 'Ìä' => 'æ½',
+ 'Ìå' => 'æž',
+ 'Ìæ' => 'æ¸',
+ 'Ìç' => 'æ¹',
+ 'Ìè' => 'æž”',
+ 'Ìé' => '欥',
+ 'Ìê' => '殀',
+ 'Ìë' => 'æ¾',
+ 'Ìì' => '毞',
+ 'Ìí' => 'æ°',
+ 'Ìî' => '沓',
+ 'Ìï' => '泬',
+ 'Ìð' => '泫',
+ 'Ìñ' => 'æ³®',
+ 'Ìò' => 'æ³™',
+ 'Ìó' => '沶',
+ 'Ìô' => 'æ³”',
+ 'Ìõ' => 'æ²',
+ 'Ìö' => '泧',
+ 'Ì÷' => 'æ²·',
+ 'Ìø' => 'æ³',
+ 'Ìù' => '泂',
+ 'Ìú' => '沺',
+ 'Ìû' => '泃',
+ 'Ìü' => '泆',
+ 'Ìý' => 'æ³',
+ 'Ìþ' => 'æ³²',
+ 'Í@' => 'æ³’',
+ 'ÍA' => 'æ³',
+ 'ÍB' => 'æ²´',
+ 'ÍC' => '沊',
+ 'ÍD' => 'æ²',
+ 'ÍE' => 'æ²€',
+ 'ÍF' => '泞',
+ 'ÍG' => 'æ³€',
+ 'ÍH' => 'æ´°',
+ 'ÍI' => 'æ³',
+ 'ÍJ' => '泇',
+ 'ÍK' => 'æ²°',
+ 'ÍL' => 'æ³¹',
+ 'ÍM' => 'æ³',
+ 'ÍN' => '泩',
+ 'ÍO' => '泑',
+ 'ÍP' => 'ç‚”',
+ 'ÍQ' => '炘',
+ 'ÍR' => 'ç‚…',
+ 'ÍS' => 'ç‚“',
+ 'ÍT' => '炆',
+ 'ÍU' => 'ç‚„',
+ 'ÍV' => 'ç‚‘',
+ 'ÍW' => 'ç‚–',
+ 'ÍX' => 'ç‚‚',
+ 'ÍY' => 'ç‚š',
+ 'ÍZ' => '炃',
+ 'Í[' => '牪',
+ 'Í\\' => 'ç‹–',
+ 'Í]' => 'ç‹‹',
+ 'Í^' => '狘',
+ 'Í_' => '狉',
+ 'Í`' => 'ç‹œ',
+ 'Ía' => 'ç‹’',
+ 'Íb' => 'ç‹”',
+ 'Íc' => 'ç‹š',
+ 'Íd' => 'ç‹Œ',
+ 'Íe' => 'ç‹‘',
+ 'Íf' => '玤',
+ 'Íg' => '玡',
+ 'Íh' => 'çŽ',
+ 'Íi' => '玦',
+ 'Íj' => '玢',
+ 'Ík' => 'çŽ ',
+ 'Íl' => '玬',
+ 'Ím' => 'çŽ',
+ 'Ín' => 'ç“',
+ 'Ío' => '瓨',
+ 'Íp' => '甿',
+ 'Íq' => 'ç•€',
+ 'Ír' => '甾',
+ 'Ís' => 'ç–Œ',
+ 'Ít' => 'ç–˜',
+ 'Íu' => '皯',
+ 'Ív' => '盳',
+ 'Íw' => 'ç›±',
+ 'Íx' => 'ç›°',
+ 'Íy' => '盵',
+ 'Íz' => '矸',
+ 'Í{' => '矼',
+ 'Í|' => '矹',
+ 'Í}' => '矻',
+ 'Í~' => '矺',
+ '͡' => '矷',
+ '͢' => '祂',
+ 'ͣ' => '礿',
+ 'ͤ' => '秅',
+ 'ͥ' => '穸',
+ 'ͦ' => '穻',
+ 'ͧ' => '竻',
+ 'ͨ' => '籵',
+ 'Í©' => 'ç³½',
+ 'ͪ' => '耵',
+ 'Í«' => 'è‚',
+ 'ͬ' => '肮',
+ 'Í' => 'è‚£',
+ 'ͮ' => '肸',
+ 'ͯ' => '肵',
+ 'Í°' => 'è‚',
+ 'ͱ' => 'èˆ ',
+ 'Ͳ' => 'èŠ ',
+ 'ͳ' => '苀',
+ 'ʹ' => '芫',
+ '͵' => '芚',
+ 'Ͷ' => '芘',
+ 'ͷ' => '芛',
+ '͸' => '芵',
+ '͹' => '芧',
+ 'ͺ' => '芮',
+ 'ͻ' => '芼',
+ 'ͼ' => '芞',
+ 'ͽ' => '芺',
+ ';' => '芴',
+ 'Ϳ' => '芨',
+ 'ÍÀ' => '芡',
+ 'ÍÁ' => '芩',
+ 'ÍÂ' => 'è‹‚',
+ 'ÍÃ' => '芤',
+ 'ÍÄ' => '苃',
+ 'ÍÅ' => '芶',
+ 'ÍÆ' => '芢',
+ 'ÍÇ' => 'è™°',
+ 'ÍÈ' => '虯',
+ 'ÍÉ' => 'è™',
+ 'ÍÊ' => 'è™®',
+ 'ÍË' => 'è±–',
+ 'ÍÌ' => 'è¿’',
+ 'ÍÍ' => 'è¿‹',
+ 'ÍÎ' => 'è¿“',
+ 'ÍÏ' => 'è¿',
+ 'ÍÐ' => 'è¿–',
+ 'ÍÑ' => 'è¿•',
+ 'ÍÒ' => 'è¿—',
+ 'ÍÓ' => '邲',
+ 'ÍÔ' => 'é‚´',
+ 'ÍÕ' => '邯',
+ 'ÍÖ' => '邳',
+ 'Í×' => 'é‚°',
+ 'ÍØ' => '阹',
+ 'ÍÙ' => '阽',
+ 'ÍÚ' => '阼',
+ 'ÍÛ' => '阺',
+ 'ÍÜ' => '陃',
+ 'ÍÝ' => 'ä¿',
+ 'ÍÞ' => 'ä¿…',
+ 'Íß' => 'ä¿“',
+ 'Íà' => 'ä¾²',
+ 'Íá' => '俉',
+ 'Íâ' => 'ä¿‹',
+ 'Íã' => 'ä¿',
+ 'Íä' => 'ä¿”',
+ 'Íå' => 'ä¿œ',
+ 'Íæ' => 'ä¿™',
+ 'Íç' => 'ä¾»',
+ 'Íè' => 'ä¾³',
+ 'Íé' => 'ä¿›',
+ 'Íê' => '俇',
+ 'Íë' => 'ä¿–',
+ 'Íì' => '侺',
+ 'Íí' => 'ä¿€',
+ 'Íî' => 'ä¾¹',
+ 'Íï' => '俬',
+ 'Íð' => '剄',
+ 'Íñ' => '剉',
+ 'Íò' => 'å‹€',
+ 'Íó' => 'å‹‚',
+ 'Íô' => '匽',
+ 'Íõ' => 'å¼',
+ 'Íö' => '厗',
+ 'Í÷' => '厖',
+ 'Íø' => '厙',
+ 'Íù' => '厘',
+ 'Íú' => 'å’º',
+ 'Íû' => 'å’¡',
+ 'Íü' => 'å’',
+ 'Íý' => 'å’¥',
+ 'Íþ' => 'å“',
+ 'Î@' => '哃',
+ 'ÎA' => 'èŒ',
+ 'ÎB' => 'å’·',
+ 'ÎC' => 'å’®',
+ 'ÎD' => 'å“–',
+ 'ÎE' => 'å’¶',
+ 'ÎF' => 'å“…',
+ 'ÎG' => '哆',
+ 'ÎH' => 'å’ ',
+ 'ÎI' => 'å‘°',
+ 'ÎJ' => 'å’¼',
+ 'ÎK' => 'å’¢',
+ 'ÎL' => 'å’¾',
+ 'ÎM' => '呲',
+ 'ÎN' => 'å“ž',
+ 'ÎO' => 'å’°',
+ 'ÎP' => 'åžµ',
+ 'ÎQ' => 'åžž',
+ 'ÎR' => '垟',
+ 'ÎS' => '垤',
+ 'ÎT' => '垌',
+ 'ÎU' => 'åž—',
+ 'ÎV' => 'åž',
+ 'ÎW' => 'åž›',
+ 'ÎX' => 'åž”',
+ 'ÎY' => '垘',
+ 'ÎZ' => 'åž',
+ 'Î[' => 'åž™',
+ 'Î\\' => '垥',
+ 'Î]' => 'åžš',
+ 'Î^' => 'åž•',
+ 'Î_' => '壴',
+ 'Î`' => 'å¤',
+ 'Îa' => '奓',
+ 'Îb' => '姡',
+ 'Îc' => '姞',
+ 'Îd' => '姮',
+ 'Îe' => '娀',
+ 'Îf' => '姱',
+ 'Îg' => 'å§',
+ 'Îh' => '姺',
+ 'Îi' => '姽',
+ 'Îj' => '姼',
+ 'Îk' => '姶',
+ 'Îl' => '姤',
+ 'Îm' => '姲',
+ 'În' => '姷',
+ 'Îo' => '姛',
+ 'Îp' => '姩',
+ 'Îq' => '姳',
+ 'Îr' => '姵',
+ 'Îs' => 'å§ ',
+ 'Ît' => '姾',
+ 'Îu' => '姴',
+ 'Îv' => 'å§',
+ 'Îw' => '宨',
+ 'Îx' => '屌',
+ 'Îy' => 'å³',
+ 'Îz' => '峘',
+ 'Î{' => '峌',
+ 'Î|' => 'å³—',
+ 'Î}' => '峋',
+ 'Î~' => 'å³›',
+ 'Ρ' => '峞',
+ '΢' => '峚',
+ 'Σ' => '峉',
+ 'Τ' => '峇',
+ 'Υ' => '峊',
+ 'Φ' => '峖',
+ 'Χ' => '峓',
+ 'Ψ' => '峔',
+ 'Ω' => 'å³',
+ 'Ϊ' => '峈',
+ 'Ϋ' => '峆',
+ 'ά' => '峎',
+ 'Î' => '峟',
+ 'ή' => '峸',
+ 'ί' => '巹',
+ 'ΰ' => '帡',
+ 'α' => '帢',
+ 'β' => '帣',
+ 'γ' => 'å¸ ',
+ 'δ' => '帤',
+ 'ε' => '庰',
+ 'ζ' => '庤',
+ 'η' => '庢',
+ 'θ' => '庛',
+ 'ι' => '庣',
+ 'κ' => '庥',
+ 'λ' => '弇',
+ 'μ' => '弮',
+ 'ν' => '彖',
+ 'ξ' => '徆',
+ 'ο' => '怷',
+ 'ÎÀ' => '怹',
+ 'ÎÁ' => 'æ”',
+ 'ÎÂ' => 'æ²',
+ 'ÎÃ' => 'æž',
+ 'ÎÄ' => 'æ…',
+ 'ÎÅ' => 'æ“',
+ 'ÎÆ' => 'æ‡',
+ 'ÎÇ' => 'æ‰',
+ 'ÎÈ' => 'æ›',
+ 'ÎÉ' => 'æŒ',
+ 'ÎÊ' => 'æ€',
+ 'ÎË' => 'æ‚',
+ 'ÎÌ' => 'æŸ',
+ 'ÎÍ' => '怤',
+ 'ÎÎ' => 'æ„',
+ 'ÎÏ' => 'æ˜',
+ 'ÎÐ' => 'æ¦',
+ 'ÎÑ' => 'æ®',
+ 'ÎÒ' => '扂',
+ 'ÎÓ' => '扃',
+ 'ÎÔ' => 'æ‹',
+ 'ÎÕ' => 'æŒ',
+ 'ÎÖ' => '挋',
+ 'Î×' => '拵',
+ 'ÎØ' => '挎',
+ 'ÎÙ' => '挃',
+ 'ÎÚ' => 'æ‹«',
+ 'ÎÛ' => '拹',
+ 'ÎÜ' => 'æŒ',
+ 'ÎÝ' => '挌',
+ 'ÎÞ' => '拸',
+ 'Îß' => '拶',
+ 'Îà' => '挀',
+ 'Îá' => '挓',
+ 'Îâ' => '挔',
+ 'Îã' => '拺',
+ 'Îä' => '挕',
+ 'Îå' => 'æ‹»',
+ 'Îæ' => 'æ‹°',
+ 'Îç' => 'æ•',
+ 'Îè' => '敃',
+ 'Îé' => 'æ–ª',
+ 'Îê' => 'æ–¿',
+ 'Îë' => '昶',
+ 'Îì' => '昡',
+ 'Îí' => '昲',
+ 'Îî' => '昵',
+ 'Îï' => '昜',
+ 'Îð' => '昦',
+ 'Îñ' => '昢',
+ 'Îò' => '昳',
+ 'Îó' => '昫',
+ 'Îô' => '昺',
+ 'Îõ' => 'æ˜',
+ 'Îö' => '昴',
+ 'Î÷' => '昹',
+ 'Îø' => '昮',
+ 'Îù' => 'æœ',
+ 'Îú' => 'æœ',
+ 'Îû' => 'æŸ',
+ 'Îü' => '柲',
+ 'Îý' => '柈',
+ 'Îþ' => '枺',
+ 'Ï@' => '柜',
+ 'ÏA' => 'æž»',
+ 'ÏB' => '柸',
+ 'ÏC' => '柘',
+ 'ÏD' => '柀',
+ 'ÏE' => 'æž·',
+ 'ÏF' => '柅',
+ 'ÏG' => '柫',
+ 'ÏH' => '柤',
+ 'ÏI' => '柟',
+ 'ÏJ' => 'æžµ',
+ 'ÏK' => 'æŸ',
+ 'ÏL' => 'æž³',
+ 'ÏM' => '柷',
+ 'ÏN' => '柶',
+ 'ÏO' => '柮',
+ 'ÏP' => '柣',
+ 'ÏQ' => '柂',
+ 'ÏR' => 'æž¹',
+ 'ÏS' => '柎',
+ 'ÏT' => '柧',
+ 'ÏU' => '柰',
+ 'ÏV' => 'æž²',
+ 'ÏW' => '柼',
+ 'ÏX' => '柆',
+ 'ÏY' => 'æŸ',
+ 'ÏZ' => '柌',
+ 'Ï[' => 'æž®',
+ 'Ï\\' => '柦',
+ 'Ï]' => '柛',
+ 'Ï^' => '柺',
+ 'Ï_' => '柉',
+ 'Ï`' => '柊',
+ 'Ïa' => '柃',
+ 'Ïb' => '柪',
+ 'Ïc' => '柋',
+ 'Ïd' => '欨',
+ 'Ïe' => '殂',
+ 'Ïf' => '殄',
+ 'Ïg' => '殶',
+ 'Ïh' => '毖',
+ 'Ïi' => '毘',
+ 'Ïj' => 'æ¯ ',
+ 'Ïk' => 'æ° ',
+ 'Ïl' => 'æ°¡',
+ 'Ïm' => 'æ´¨',
+ 'Ïn' => 'æ´´',
+ 'Ïo' => 'æ´',
+ 'Ïp' => 'æ´Ÿ',
+ 'Ïq' => 'æ´¼',
+ 'Ïr' => 'æ´¿',
+ 'Ïs' => 'æ´’',
+ 'Ït' => 'æ´Š',
+ 'Ïu' => '泚',
+ 'Ïv' => 'æ´³',
+ 'Ïw' => 'æ´„',
+ 'Ïx' => 'æ´™',
+ 'Ïy' => 'æ´º',
+ 'Ïz' => 'æ´š',
+ 'Ï{' => 'æ´‘',
+ 'Ï|' => 'æ´€',
+ 'Ï}' => 'æ´',
+ 'Ï~' => '浂',
+ 'Ï¡' => 'æ´',
+ 'Ï¢' => 'æ´˜',
+ 'Ï£' => 'æ´·',
+ 'Ϥ' => '洃',
+ 'Ï¥' => 'æ´',
+ 'Ϧ' => '浀',
+ 'ϧ' => '洇',
+ 'Ϩ' => 'æ´ ',
+ 'Ï©' => 'æ´¬',
+ 'Ϫ' => '洈',
+ 'Ï«' => 'æ´¢',
+ 'Ϭ' => '洉',
+ 'Ï' => 'æ´',
+ 'Ï®' => 'ç‚·',
+ 'ϯ' => '炟',
+ 'ϰ' => '炾',
+ 'ϱ' => '炱',
+ 'ϲ' => '炰',
+ 'ϳ' => '炡',
+ 'Ï´' => 'ç‚´',
+ 'ϵ' => '炵',
+ '϶' => '炩',
+ 'Ï·' => 'ç‰',
+ 'ϸ' => '牉',
+ 'Ϲ' => '牊',
+ 'Ϻ' => '牬',
+ 'ϻ' => '牰',
+ 'ϼ' => '牳',
+ 'Ͻ' => '牮',
+ 'Ͼ' => '狊',
+ 'Ͽ' => '狤',
+ 'ÏÀ' => '狨',
+ 'ÏÁ' => 'ç‹«',
+ 'ÏÂ' => 'ç‹Ÿ',
+ 'ÏÃ' => '狪',
+ 'ÏÄ' => '狦',
+ 'ÏÅ' => 'ç‹£',
+ 'ÏÆ' => '玅',
+ 'ÏÇ' => 'çŒ',
+ 'ÏÈ' => 'ç‚',
+ 'ÏÉ' => 'çˆ',
+ 'ÏÊ' => 'ç…',
+ 'ÏË' => '玹',
+ 'ÏÌ' => '玶',
+ 'ÏÍ' => '玵',
+ 'ÏÎ' => '玴',
+ 'ÏÏ' => 'ç«',
+ 'ÏÐ' => '玿',
+ 'ÏÑ' => 'ç‡',
+ 'ÏÒ' => '玾',
+ 'ÏÓ' => 'çƒ',
+ 'ÏÔ' => 'ç†',
+ 'ÏÕ' => '玸',
+ 'ÏÖ' => 'ç‹',
+ 'Ï×' => '瓬',
+ 'ÏØ' => 'ç“®',
+ 'ÏÙ' => 'ç”®',
+ 'ÏÚ' => '畇',
+ 'ÏÛ' => '畈',
+ 'ÏÜ' => 'ç–§',
+ 'ÏÝ' => 'ç–ª',
+ 'ÏÞ' => '癹',
+ 'Ïß' => '盄',
+ 'Ïà' => '眈',
+ 'Ïá' => '眃',
+ 'Ïâ' => '眄',
+ 'Ïã' => '眅',
+ 'Ïä' => '眊',
+ 'Ïå' => 'ç›·',
+ 'Ïæ' => 'ç›»',
+ 'Ïç' => '盺',
+ 'Ïè' => '矧',
+ 'Ïé' => '矨',
+ 'Ïê' => 'ç †',
+ 'Ïë' => 'ç ‘',
+ 'Ïì' => 'ç ’',
+ 'Ïí' => 'ç …',
+ 'Ïî' => 'ç ',
+ 'Ïï' => 'ç ',
+ 'Ïð' => 'ç Ž',
+ 'Ïñ' => 'ç ‰',
+ 'Ïò' => 'ç ƒ',
+ 'Ïó' => 'ç “',
+ 'Ïô' => '祊',
+ 'Ïõ' => '祌',
+ 'Ïö' => '祋',
+ 'Ï÷' => '祅',
+ 'Ïø' => '祄',
+ 'Ïù' => '秕',
+ 'Ïú' => 'ç§',
+ 'Ïû' => 'ç§',
+ 'Ïü' => '秖',
+ 'Ïý' => '秎',
+ 'Ïþ' => '窀',
+ 'Ð@' => '穾',
+ 'ÐA' => 'ç«‘',
+ 'ÐB' => '笀',
+ 'ÐC' => 'ç¬',
+ 'ÐD' => '籺',
+ 'ÐE' => '籸',
+ 'ÐF' => 'ç±¹',
+ 'ÐG' => '籿',
+ 'ÐH' => 'ç²€',
+ 'ÐI' => 'ç²',
+ 'ÐJ' => 'ç´ƒ',
+ 'ÐK' => 'ç´ˆ',
+ 'ÐL' => 'ç´',
+ 'ÐM' => '罘',
+ 'ÐN' => '羑',
+ 'ÐO' => 'ç¾',
+ 'ÐP' => 'ç¾¾',
+ 'ÐQ' => '耇',
+ 'ÐR' => '耎',
+ 'ÐS' => 'è€',
+ 'ÐT' => '耔',
+ 'ÐU' => '耷',
+ 'ÐV' => '胘',
+ 'ÐW' => '胇',
+ 'ÐX' => 'èƒ ',
+ 'ÐY' => '胑',
+ 'ÐZ' => '胈',
+ 'Ð[' => '胂',
+ 'Ð\\' => 'èƒ',
+ 'Ð]' => '胅',
+ 'Ð^' => '胣',
+ 'Ð_' => '胙',
+ 'Ð`' => '胜',
+ 'Ða' => '胊',
+ 'Ðb' => '胕',
+ 'Ðc' => '胉',
+ 'Ðd' => 'èƒ',
+ 'Ðe' => '胗',
+ 'Ðf' => '胦',
+ 'Ðg' => 'èƒ',
+ 'Ðh' => '臿',
+ 'Ði' => '舡',
+ 'Ðj' => '芔',
+ 'Ðk' => 'è‹™',
+ 'Ðl' => '苾',
+ 'Ðm' => '苹',
+ 'Ðn' => '茇',
+ 'Ðo' => '苨',
+ 'Ðp' => '茀',
+ 'Ðq' => 'è‹•',
+ 'Ðr' => '茺',
+ 'Ðs' => 'è‹«',
+ 'Ðt' => 'è‹–',
+ 'Ðu' => 'è‹´',
+ 'Ðv' => '苬',
+ 'Ðw' => 'è‹¡',
+ 'Ðx' => '苲',
+ 'Ðy' => '苵',
+ 'Ðz' => '茌',
+ 'Ð{' => 'è‹»',
+ 'Ð|' => '苶',
+ 'Ð}' => 'è‹°',
+ 'Ð~' => '苪',
+ 'С' => '苤',
+ 'Т' => 'è‹ ',
+ 'У' => '苺',
+ 'Ф' => '苳',
+ 'Ð¥' => 'è‹',
+ 'Ц' => '虷',
+ 'Ч' => '虴',
+ 'Ш' => '虼',
+ 'Щ' => '虳',
+ 'Ъ' => 'è¡',
+ 'Ы' => '衎',
+ 'Ь' => '衧',
+ 'Ð' => '衪',
+ 'Ю' => '衩',
+ 'Я' => '觓',
+ 'а' => '訄',
+ 'б' => '訇',
+ 'в' => '赲',
+ 'г' => '迣',
+ 'д' => '迡',
+ 'е' => '迮',
+ 'ж' => 'è¿ ',
+ 'з' => '郱',
+ 'и' => '邽',
+ 'й' => '邿',
+ 'к' => '郕',
+ 'л' => '郅',
+ 'м' => '邾',
+ 'н' => '郇',
+ 'о' => '郋',
+ 'п' => '郈',
+ 'ÐÀ' => '釔',
+ 'ÐÁ' => '釓',
+ 'ÐÂ' => 'é™”',
+ 'ÐÃ' => 'é™',
+ 'ÐÄ' => '陑',
+ 'ÐÅ' => '陓',
+ 'ÐÆ' => '陊',
+ 'ÐÇ' => '陎',
+ 'ÐÈ' => '倞',
+ 'ÐÉ' => '倅',
+ 'ÐÊ' => '倇',
+ 'ÐË' => '倓',
+ 'ÐÌ' => '倢',
+ 'ÐÍ' => '倰',
+ 'ÐÎ' => '倛',
+ 'ÐÏ' => '俵',
+ 'ÐÐ' => 'ä¿´',
+ 'ÐÑ' => '倳',
+ 'ÐÒ' => '倷',
+ 'ÐÓ' => '倬',
+ 'ÐÔ' => '俶',
+ 'ÐÕ' => 'ä¿·',
+ 'ÐÖ' => '倗',
+ 'Ð×' => '倜',
+ 'ÐØ' => 'å€ ',
+ 'ÐÙ' => '倧',
+ 'ÐÚ' => '倵',
+ 'ÐÛ' => '倯',
+ 'ÐÜ' => '倱',
+ 'ÐÝ' => '倎',
+ 'ÐÞ' => 'å…š',
+ 'Ðß' => '冔',
+ 'Ðà' => '冓',
+ 'Ðá' => '凊',
+ 'Ðâ' => '凄',
+ 'Ðã' => '凅',
+ 'Ðä' => '凈',
+ 'Ðå' => '凎',
+ 'Ðæ' => '剡',
+ 'Ðç' => '剚',
+ 'Ðè' => '剒',
+ 'Ðé' => '剞',
+ 'Ðê' => '剟',
+ 'Ðë' => '剕',
+ 'Ðì' => '剢',
+ 'Ðí' => 'å‹',
+ 'Ðî' => '匎',
+ 'Ðï' => '厞',
+ 'Ðð' => '唦',
+ 'Ðñ' => 'å“¢',
+ 'Ðò' => 'å”—',
+ 'Ðó' => 'å”’',
+ 'Ðô' => '哧',
+ 'Ðõ' => '哳',
+ 'Ðö' => '哤',
+ 'Ð÷' => '唚',
+ 'Ðø' => 'å“¿',
+ 'Ðù' => '唄',
+ 'Ðú' => '唈',
+ 'Ðû' => 'å“«',
+ 'Ðü' => '唑',
+ 'Ðý' => 'å”…',
+ 'Ðþ' => '哱',
+ 'Ñ@' => '唊',
+ 'ÑA' => 'å“»',
+ 'ÑB' => 'å“·',
+ 'ÑC' => '哸',
+ 'ÑD' => 'å“ ',
+ 'ÑE' => '唎',
+ 'ÑF' => '唃',
+ 'ÑG' => '唋',
+ 'ÑH' => 'åœ',
+ 'ÑI' => '圂',
+ 'ÑJ' => '埌',
+ 'ÑK' => 'å ²',
+ 'ÑL' => '埕',
+ 'ÑM' => '埒',
+ 'ÑN' => '垺',
+ 'ÑO' => '埆',
+ 'ÑP' => 'åž½',
+ 'ÑQ' => 'åž¼',
+ 'ÑR' => '垸',
+ 'ÑS' => '垶',
+ 'ÑT' => 'åž¿',
+ 'ÑU' => '埇',
+ 'ÑV' => 'åŸ',
+ 'ÑW' => 'åž¹',
+ 'ÑX' => 'åŸ',
+ 'ÑY' => '夎',
+ 'ÑZ' => '奊',
+ 'Ñ[' => '娙',
+ 'Ñ\\' => '娖',
+ 'Ñ]' => 'å¨',
+ 'Ñ^' => '娮',
+ 'Ñ_' => '娕',
+ 'Ñ`' => 'å¨',
+ 'Ña' => '娗',
+ 'Ñb' => '娊',
+ 'Ñc' => '娞',
+ 'Ñd' => '娳',
+ 'Ñe' => 'å¬',
+ 'Ñf' => '宧',
+ 'Ñg' => 'å®',
+ 'Ñh' => '宬',
+ 'Ñi' => 'å°ƒ',
+ 'Ñj' => 'å±–',
+ 'Ñk' => 'å±”',
+ 'Ñl' => '峬',
+ 'Ñm' => '峿',
+ 'Ñn' => 'å³®',
+ 'Ño' => 'å³±',
+ 'Ñp' => 'å³·',
+ 'Ñq' => 'å´€',
+ 'Ñr' => 'å³¹',
+ 'Ñs' => '帩',
+ 'Ñt' => '帨',
+ 'Ñu' => '庨',
+ 'Ñv' => '庮',
+ 'Ñw' => '庪',
+ 'Ñx' => '庬',
+ 'Ñy' => 'å¼³',
+ 'Ñz' => 'å¼°',
+ 'Ñ{' => '彧',
+ 'Ñ|' => 'æ',
+ 'Ñ}' => 'æš',
+ 'Ñ~' => 'æ§',
+ 'Ñ¡' => 'æ',
+ 'Ñ¢' => 'æ‚¢',
+ 'ѣ' => '悈',
+ 'Ѥ' => '悀',
+ 'Ñ¥' => 'æ‚’',
+ 'Ѧ' => 'æ‚',
+ 'ѧ' => 'æ‚',
+ 'Ѩ' => '悃',
+ 'Ñ©' => 'æ‚•',
+ 'Ѫ' => '悛',
+ 'Ñ«' => 'æ‚—',
+ 'Ѭ' => '悇',
+ 'Ñ' => 'æ‚œ',
+ 'Ñ®' => 'æ‚Ž',
+ 'ѯ' => '戙',
+ 'Ѱ' => '扆',
+ 'ѱ' => '拲',
+ 'Ѳ' => 'æŒ',
+ 'ѳ' => 'æ–',
+ 'Ѵ' => '挬',
+ 'ѵ' => 'æ„',
+ 'Ѷ' => 'æ…',
+ 'ѷ' => '挶',
+ 'Ѹ' => 'æƒ',
+ 'ѹ' => 'æ¤',
+ 'Ѻ' => '挹',
+ 'Ñ»' => 'æ‹',
+ 'Ѽ' => 'æŠ',
+ 'ѽ' => '挼',
+ 'Ѿ' => '挩',
+ 'Ñ¿' => 'æ',
+ 'ÑÀ' => '挴',
+ 'ÑÁ' => 'æ˜',
+ 'ÑÂ' => 'æ”',
+ 'ÑÃ' => 'æ™',
+ 'ÑÄ' => 'æŒ',
+ 'ÑÅ' => 'æ‡',
+ 'ÑÆ' => '挳',
+ 'ÑÇ' => 'æš',
+ 'ÑÈ' => 'æ‘',
+ 'ÑÉ' => '挸',
+ 'ÑÊ' => 'æ—',
+ 'ÑË' => 'æ€',
+ 'ÑÌ' => 'æˆ',
+ 'ÑÍ' => 'æ•Š',
+ 'ÑÎ' => '敆',
+ 'ÑÏ' => 'æ—†',
+ 'ÑÐ' => 'æ—ƒ',
+ 'ÑÑ' => 'æ—„',
+ 'ÑÒ' => 'æ—‚',
+ 'ÑÓ' => '晊',
+ 'ÑÔ' => '晟',
+ 'ÑÕ' => '晇',
+ 'ÑÖ' => '晑',
+ 'Ñ×' => '朒',
+ 'ÑØ' => '朓',
+ 'ÑÙ' => 'æ Ÿ',
+ 'ÑÚ' => 'æ š',
+ 'ÑÛ' => '桉',
+ 'ÑÜ' => 'æ ²',
+ 'ÑÝ' => 'æ ³',
+ 'ÑÞ' => 'æ »',
+ 'Ñß' => 'æ¡‹',
+ 'Ñà' => 'æ¡',
+ 'Ñá' => 'æ –',
+ 'Ñâ' => 'æ ±',
+ 'Ñã' => 'æ œ',
+ 'Ñä' => 'æ µ',
+ 'Ñå' => 'æ «',
+ 'Ñæ' => 'æ ',
+ 'Ñç' => 'æ ¯',
+ 'Ñè' => 'æ¡Ž',
+ 'Ñé' => 'æ¡„',
+ 'Ñê' => 'æ ´',
+ 'Ñë' => 'æ ',
+ 'Ñì' => 'æ ’',
+ 'Ñí' => 'æ ”',
+ 'Ñî' => 'æ ¦',
+ 'Ñï' => 'æ ¨',
+ 'Ñð' => 'æ ®',
+ 'Ññ' => 'æ¡',
+ 'Ñò' => 'æ º',
+ 'Ñó' => 'æ ¥',
+ 'Ñô' => 'æ ',
+ 'Ñõ' => '欬',
+ 'Ñö' => '欯',
+ 'Ñ÷' => 'æ¬',
+ 'Ñø' => '欱',
+ 'Ñù' => '欴',
+ 'Ñú' => 'æ',
+ 'Ñû' => 'è‚‚',
+ 'Ñü' => '殈',
+ 'Ñý' => '毦',
+ 'Ñþ' => '毤',
+ 'Ò@' => '毨',
+ 'ÒA' => '毣',
+ 'ÒB' => '毢',
+ 'ÒC' => '毧',
+ 'ÒD' => 'æ°¥',
+ 'ÒE' => '浺',
+ 'ÒF' => 'æµ£',
+ 'ÒG' => '浤',
+ 'ÒH' => '浶',
+ 'ÒI' => 'æ´',
+ 'ÒJ' => '浡',
+ 'ÒK' => '涒',
+ 'ÒL' => '浘',
+ 'ÒM' => 'æµ¢',
+ 'ÒN' => 'æµ',
+ 'ÒO' => '浯',
+ 'ÒP' => '涑',
+ 'ÒQ' => 'æ¶',
+ 'ÒR' => 'æ·¯',
+ 'ÒS' => '浿',
+ 'ÒT' => '涆',
+ 'ÒU' => '浞',
+ 'ÒV' => '浧',
+ 'ÒW' => 'æµ ',
+ 'ÒX' => '涗',
+ 'ÒY' => 'æµ°',
+ 'ÒZ' => 'æµ¼',
+ 'Ò[' => '浟',
+ 'Ò\\' => '涂',
+ 'Ò]' => '涘',
+ 'Ò^' => 'æ´¯',
+ 'Ò_' => '浨',
+ 'Ò`' => '涋',
+ 'Òa' => 'æµ¾',
+ 'Òb' => '涀',
+ 'Òc' => '涄',
+ 'Òd' => 'æ´–',
+ 'Òe' => '涃',
+ 'Òf' => 'æµ»',
+ 'Òg' => 'æµ½',
+ 'Òh' => 'æµµ',
+ 'Òi' => 'æ¶',
+ 'Òj' => '烜',
+ 'Òk' => '烓',
+ 'Òl' => '烑',
+ 'Òm' => 'çƒ',
+ 'Òn' => '烋',
+ 'Òo' => 'ç¼¹',
+ 'Òp' => '烢',
+ 'Òq' => '烗',
+ 'Òr' => '烒',
+ 'Òs' => '烞',
+ 'Òt' => 'çƒ ',
+ 'Òu' => '烔',
+ 'Òv' => 'çƒ',
+ 'Òw' => '烅',
+ 'Òx' => '烆',
+ 'Òy' => '烇',
+ 'Òz' => '烚',
+ 'Ò{' => '烎',
+ 'Ò|' => '烡',
+ 'Ò}' => '牂',
+ 'Ò~' => '牸',
+ 'ҡ' => '牷',
+ 'Ң' => '牶',
+ 'ң' => '猀',
+ 'Ҥ' => '狺',
+ 'Ò¥' => 'ç‹´',
+ 'Ҧ' => '狾',
+ 'ҧ' => '狶',
+ 'Ҩ' => '狳',
+ 'Ò©' => 'ç‹»',
+ 'Òª' => 'çŒ',
+ 'Ò«' => 'ç“',
+ 'Ò¬' => 'ç™',
+ 'Ò' => 'ç¥',
+ 'Ò®' => 'ç–',
+ 'ү' => '玼',
+ 'Ò°' => 'ç§',
+ 'Ò±' => 'ç£',
+ 'Ò²' => 'ç©',
+ 'Ò³' => 'çœ',
+ 'Ò´' => 'ç’',
+ 'Òµ' => 'ç›',
+ 'Ò¶' => 'ç”',
+ 'Ò·' => 'ç',
+ 'Ò¸' => 'çš',
+ 'Ò¹' => 'ç—',
+ 'Òº' => 'ç˜',
+ 'Ò»' => 'ç¨',
+ 'Ò¼' => 'ç“ž',
+ 'Ò½' => 'ç“Ÿ',
+ 'Ò¾' => 'ç“´',
+ 'ҿ' => '瓵',
+ 'ÒÀ' => '甡',
+ 'ÒÁ' => 'ç•›',
+ 'ÒÂ' => 'ç•Ÿ',
+ 'ÒÃ' => 'ç–°',
+ 'ÒÄ' => 'ç—',
+ 'ÒÅ' => 'ç–»',
+ 'ÒÆ' => 'ç—„',
+ 'ÒÇ' => 'ç—€',
+ 'ÒÈ' => 'ç–¿',
+ 'ÒÉ' => 'ç–¶',
+ 'ÒÊ' => 'ç–º',
+ 'ÒË' => '皊',
+ 'ÒÌ' => '盉',
+ 'ÒÍ' => 'çœ',
+ 'ÒÎ' => '眛',
+ 'ÒÏ' => 'çœ',
+ 'ÒÐ' => '眓',
+ 'ÒÑ' => '眒',
+ 'ÒÒ' => '眣',
+ 'ÒÓ' => '眑',
+ 'ÒÔ' => '眕',
+ 'ÒÕ' => '眙',
+ 'ÒÖ' => '眚',
+ 'Ò×' => '眢',
+ 'ÒØ' => '眧',
+ 'ÒÙ' => 'ç £',
+ 'ÒÚ' => 'ç ¬',
+ 'ÒÛ' => 'ç ¢',
+ 'ÒÜ' => 'ç µ',
+ 'ÒÝ' => 'ç ¯',
+ 'ÒÞ' => 'ç ¨',
+ 'Òß' => 'ç ®',
+ 'Òà' => 'ç «',
+ 'Òá' => 'ç ¡',
+ 'Òâ' => 'ç ©',
+ 'Òã' => 'ç ³',
+ 'Òä' => 'ç ª',
+ 'Òå' => 'ç ±',
+ 'Òæ' => '祔',
+ 'Òç' => '祛',
+ 'Òè' => 'ç¥',
+ 'Òé' => '祜',
+ 'Òê' => '祓',
+ 'Òë' => '祒',
+ 'Òì' => '祑',
+ 'Òí' => '秫',
+ 'Òî' => '秬',
+ 'Òï' => 'ç§ ',
+ 'Òð' => '秮',
+ 'Òñ' => 'ç§',
+ 'Òò' => '秪',
+ 'Òó' => '秜',
+ 'Òô' => '秞',
+ 'Òõ' => 'ç§',
+ 'Òö' => '窆',
+ 'Ò÷' => '窉',
+ 'Òø' => '窅',
+ 'Òù' => '窋',
+ 'Òú' => '窌',
+ 'Òû' => '窊',
+ 'Òü' => '窇',
+ 'Òý' => '竘',
+ 'Òþ' => 'ç¬',
+ 'Ó@' => '笄',
+ 'ÓA' => '笓',
+ 'ÓB' => '笅',
+ 'ÓC' => 'ç¬',
+ 'ÓD' => '笈',
+ 'ÓE' => '笊',
+ 'ÓF' => '笎',
+ 'ÓG' => '笉',
+ 'ÓH' => '笒',
+ 'ÓI' => '粄',
+ 'ÓJ' => '粑',
+ 'ÓK' => '粊',
+ 'ÓL' => '粌',
+ 'ÓM' => '粈',
+ 'ÓN' => 'ç²',
+ 'ÓO' => 'ç²…',
+ 'ÓP' => 'ç´ž',
+ 'ÓQ' => 'ç´',
+ 'ÓR' => 'ç´‘',
+ 'ÓS' => 'ç´Ž',
+ 'ÓT' => 'ç´˜',
+ 'ÓU' => 'ç´–',
+ 'ÓV' => 'ç´“',
+ 'ÓW' => 'ç´Ÿ',
+ 'ÓX' => 'ç´’',
+ 'ÓY' => 'ç´',
+ 'ÓZ' => 'ç´Œ',
+ 'Ó[' => '罜',
+ 'Ó\\' => '罡',
+ 'Ó]' => '罞',
+ 'Ó^' => 'ç½ ',
+ 'Ó_' => 'ç½',
+ 'Ó`' => 'ç½›',
+ 'Óa' => 'ç¾–',
+ 'Ób' => 'ç¾’',
+ 'Óc' => '翃',
+ 'Ód' => 'ç¿‚',
+ 'Óe' => 'ç¿€',
+ 'Óf' => '耖',
+ 'Óg' => '耾',
+ 'Óh' => '耹',
+ 'Ói' => '胺',
+ 'Ój' => '胲',
+ 'Ók' => '胹',
+ 'Ól' => '胵',
+ 'Óm' => 'è„',
+ 'Ón' => '胻',
+ 'Óo' => 'è„€',
+ 'Óp' => 'èˆ',
+ 'Óq' => '舯',
+ 'Ór' => '舥',
+ 'Ós' => '茳',
+ 'Ót' => 'èŒ',
+ 'Óu' => 'è„',
+ 'Óv' => '茙',
+ 'Ów' => 'è‘',
+ 'Óx' => '茥',
+ 'Óy' => 'è–',
+ 'Óz' => '茿',
+ 'Ó{' => 'è',
+ 'Ó|' => '茦',
+ 'Ó}' => '茜',
+ 'Ó~' => '茢',
+ 'Ó¡' => 'è‚',
+ 'Ó¢' => 'èŽ',
+ 'ӣ' => '茛',
+ 'Ӥ' => '茪',
+ 'ӥ' => '茈',
+ 'Ӧ' => '茼',
+ 'Ó§' => 'è',
+ 'Ө' => '茖',
+ 'ө' => '茤',
+ 'Óª' => 'èŒ ',
+ 'ӫ' => '茷',
+ 'Ӭ' => '茯',
+ 'Ó' => '茩',
+ 'Ó®' => 'è‡',
+ 'Ó¯' => 'è…',
+ 'Ó°' => 'èŒ',
+ 'Ó±' => 'è“',
+ 'Ӳ' => '茞',
+ 'ӳ' => '茬',
+ 'Ó´' => 'è‹',
+ 'ӵ' => '茧',
+ 'Ó¶' => 'èˆ',
+ 'ӷ' => '虓',
+ 'Ó¸' => 'è™’',
+ 'ӹ' => '蚢',
+ 'Ӻ' => '蚨',
+ 'Ó»' => 'èš–',
+ 'Ó¼' => 'èš',
+ 'Ó½' => 'èš‘',
+ 'Ó¾' => 'èšž',
+ 'ӿ' => '蚇',
+ 'ÓÀ' => 'èš—',
+ 'ÓÁ' => '蚆',
+ 'ÓÂ' => 'èš‹',
+ 'ÓÃ' => 'èšš',
+ 'ÓÄ' => 'èš…',
+ 'ÓÅ' => '蚥',
+ 'ÓÆ' => 'èš™',
+ 'ÓÇ' => 'èš¡',
+ 'ÓÈ' => '蚧',
+ 'ÓÉ' => 'èš•',
+ 'ÓÊ' => '蚘',
+ 'ÓË' => '蚎',
+ 'ÓÌ' => 'èš',
+ 'ÓÍ' => 'èš',
+ 'ÓÎ' => 'èš”',
+ 'ÓÏ' => '衃',
+ 'ÓÐ' => 'è¡„',
+ 'ÓÑ' => 'è¡',
+ 'ÓÒ' => '衵',
+ 'ÓÓ' => '衶',
+ 'ÓÔ' => '衲',
+ 'ÓÕ' => '袀',
+ 'ÓÖ' => '衱',
+ 'Ó×' => 'è¡¿',
+ 'ÓØ' => '衯',
+ 'ÓÙ' => '袃',
+ 'ÓÚ' => '衾',
+ 'ÓÛ' => 'è¡´',
+ 'ÓÜ' => '衼',
+ 'ÓÝ' => '訒',
+ 'ÓÞ' => '豇',
+ 'Óß' => 'è±—',
+ 'Óà' => 'è±»',
+ 'Óá' => '貤',
+ 'Óâ' => 'è²£',
+ 'Óã' => '赶',
+ 'Óä' => '赸',
+ 'Óå' => '趵',
+ 'Óæ' => '趷',
+ 'Óç' => '趶',
+ 'Óè' => '軑',
+ 'Óé' => '軓',
+ 'Óê' => '迾',
+ 'Óë' => '迵',
+ 'Óì' => '适',
+ 'Óí' => 'è¿¿',
+ 'Óî' => 'è¿»',
+ 'Óï' => '逄',
+ 'Óð' => '迼',
+ 'Óñ' => '迶',
+ 'Óò' => '郖',
+ 'Óó' => 'éƒ ',
+ 'Óô' => '郙',
+ 'Óõ' => '郚',
+ 'Óö' => '郣',
+ 'Ó÷' => '郟',
+ 'Óø' => '郥',
+ 'Óù' => '郘',
+ 'Óú' => '郛',
+ 'Óû' => '郗',
+ 'Óü' => '郜',
+ 'Óý' => '郤',
+ 'Óþ' => 'é…',
+ 'Ô@' => 'é…Ž',
+ 'ÔA' => 'é…',
+ 'ÔB' => '釕',
+ 'ÔC' => '釢',
+ 'ÔD' => '釚',
+ 'ÔE' => '陜',
+ 'ÔF' => '陟',
+ 'ÔG' => 'éš¼',
+ 'ÔH' => '飣',
+ 'ÔI' => 'é«Ÿ',
+ 'ÔJ' => '鬯',
+ 'ÔK' => '乿',
+ 'ÔL' => 'å°',
+ 'ÔM' => 'åª',
+ 'ÔN' => 'å¡',
+ 'ÔO' => 'åž',
+ 'ÔP' => 'å ',
+ 'ÔQ' => 'å“',
+ 'ÔR' => 'å‹',
+ 'ÔS' => 'å',
+ 'ÔT' => 'å²',
+ 'ÔU' => 'åˆ',
+ 'ÔV' => 'å',
+ 'ÔW' => 'å',
+ 'ÔX' => 'å›',
+ 'ÔY' => 'åŠ',
+ 'ÔZ' => 'å¢',
+ 'Ô[' => '倕',
+ 'Ô\\' => 'å…',
+ 'Ô]' => 'åŸ',
+ 'Ô^' => 'å©',
+ 'Ô_' => 'å«',
+ 'Ô`' => 'å£',
+ 'Ôa' => 'å¤',
+ 'Ôb' => 'å†',
+ 'Ôc' => 'å€',
+ 'Ôd' => 'å®',
+ 'Ôe' => 'å³',
+ 'Ôf' => 'å—',
+ 'Ôg' => 'å‘',
+ 'Ôh' => 'å‡',
+ 'Ôi' => '剫',
+ 'Ôj' => 'å‰',
+ 'Ôk' => '剬',
+ 'Ôl' => '剮',
+ 'Ôm' => 'å‹–',
+ 'Ôn' => 'å‹“',
+ 'Ôo' => 'åŒ',
+ 'Ôp' => '厜',
+ 'Ôq' => '啵',
+ 'Ôr' => '啶',
+ 'Ôs' => '唼',
+ 'Ôt' => 'å•',
+ 'Ôu' => 'å•',
+ 'Ôv' => 'å”´',
+ 'Ôw' => '唪',
+ 'Ôx' => 'å•‘',
+ 'Ôy' => 'å•¢',
+ 'Ôz' => '唶',
+ 'Ô{' => '唵',
+ 'Ô|' => 'å”°',
+ 'Ô}' => 'å•’',
+ 'Ô~' => 'å•…',
+ 'ԡ' => '唌',
+ 'Ԣ' => '唲',
+ 'Ô£' => 'å•¥',
+ 'Ô¤' => 'å•Ž',
+ 'ԥ' => '唹',
+ 'Ԧ' => '啈',
+ 'Ô§' => 'å”',
+ 'Ô¨' => 'å”»',
+ 'Ô©' => 'å•€',
+ 'Ôª' => 'å•‹',
+ 'ԫ' => '圊',
+ 'Ԭ' => '圇',
+ 'Ô' => '埻',
+ 'Ô®' => 'å ”',
+ 'ԯ' => '埢',
+ '԰' => '埶',
+ 'Ա' => '埜',
+ 'Բ' => '埴',
+ 'Ô³' => 'å €',
+ 'Ô´' => 'åŸ',
+ 'Ե' => '埽',
+ 'Ô¶' => 'å ˆ',
+ 'Է' => '埸',
+ 'Ô¸' => 'å ‹',
+ 'Թ' => '埳',
+ 'Ôº' => 'åŸ',
+ 'Ô»' => 'å ‡',
+ 'Լ' => '埮',
+ 'Խ' => '埣',
+ 'Ծ' => '埲',
+ 'Կ' => '埥',
+ 'ÔÀ' => '埬',
+ 'ÔÁ' => '埡',
+ 'ÔÂ' => 'å Ž',
+ 'ÔÃ' => '埼',
+ 'ÔÄ' => 'å ',
+ 'ÔÅ' => '埧',
+ 'ÔÆ' => 'å ',
+ 'ÔÇ' => 'å Œ',
+ 'ÔÈ' => '埱',
+ 'ÔÉ' => '埩',
+ 'ÔÊ' => '埰',
+ 'ÔË' => 'å ',
+ 'ÔÌ' => 'å „',
+ 'ÔÍ' => '奜',
+ 'ÔÎ' => 'å© ',
+ 'ÔÏ' => '婘',
+ 'ÔÐ' => 'å©•',
+ 'ÔÑ' => '婧',
+ 'ÔÒ' => 'å©ž',
+ 'ÔÓ' => '娸',
+ 'ÔÔ' => '娵',
+ 'ÔÕ' => 'å©',
+ 'ÔÖ' => 'å©',
+ 'Ô×' => 'å©Ÿ',
+ 'ÔØ' => 'å©¥',
+ 'ÔÙ' => '婬',
+ 'ÔÚ' => 'å©“',
+ 'ÔÛ' => '婤',
+ 'ÔÜ' => 'å©—',
+ 'ÔÝ' => '婃',
+ 'ÔÞ' => 'å©',
+ 'Ôß' => 'å©’',
+ 'Ôà' => 'å©„',
+ 'Ôá' => 'å©›',
+ 'Ôâ' => '婈',
+ 'Ôã' => '媎',
+ 'Ôä' => '娾',
+ 'Ôå' => 'å©',
+ 'Ôæ' => '娹',
+ 'Ôç' => 'å©Œ',
+ 'Ôè' => 'å©°',
+ 'Ôé' => 'å©©',
+ 'Ôê' => '婇',
+ 'Ôë' => 'å©‘',
+ 'Ôì' => 'å©–',
+ 'Ôí' => 'å©‚',
+ 'Ôî' => 'å©œ',
+ 'Ôï' => 'å²',
+ 'Ôð' => 'å®',
+ 'Ôñ' => 'å¯',
+ 'Ôò' => '寀',
+ 'Ôó' => 'å±™',
+ 'Ôô' => 'å´ž',
+ 'Ôõ' => 'å´‹',
+ 'Ôö' => 'å´',
+ 'Ô÷' => 'å´š',
+ 'Ôø' => 'å´ ',
+ 'Ôù' => 'å´Œ',
+ 'Ôú' => 'å´¨',
+ 'Ôû' => 'å´',
+ 'Ôü' => 'å´¦',
+ 'Ôý' => 'å´¥',
+ 'Ôþ' => 'å´',
+ 'Õ@' => 'å´°',
+ 'ÕA' => 'å´’',
+ 'ÕB' => 'å´£',
+ 'ÕC' => 'å´Ÿ',
+ 'ÕD' => 'å´®',
+ 'ÕE' => '帾',
+ 'ÕF' => '帴',
+ 'ÕG' => '庱',
+ 'ÕH' => '庴',
+ 'ÕI' => '庹',
+ 'ÕJ' => '庲',
+ 'ÕK' => '庳',
+ 'ÕL' => '弶',
+ 'ÕM' => '弸',
+ 'ÕN' => 'å¾›',
+ 'ÕO' => 'å¾–',
+ 'ÕP' => '徟',
+ 'ÕQ' => 'æ‚Š',
+ 'ÕR' => 'æ‚',
+ 'ÕS' => '悆',
+ 'ÕT' => '悾',
+ 'ÕU' => 'æ‚°',
+ 'ÕV' => '悺',
+ 'ÕW' => '惓',
+ 'ÕX' => '惔',
+ 'ÕY' => 'æƒ',
+ 'ÕZ' => '惤',
+ 'Õ[' => '惙',
+ 'Õ\\' => 'æƒ',
+ 'Õ]' => '惈',
+ 'Õ^' => '悱',
+ 'Õ_' => '惛',
+ 'Õ`' => 'æ‚·',
+ 'Õa' => '惊',
+ 'Õb' => 'æ‚¿',
+ 'Õc' => '惃',
+ 'Õd' => 'æƒ',
+ 'Õe' => '惀',
+ 'Õf' => '挲',
+ 'Õg' => 'æ¥',
+ 'Õh' => '掊',
+ 'Õi' => '掂',
+ 'Õj' => 'æ½',
+ 'Õk' => '掽',
+ 'Õl' => '掞',
+ 'Õm' => 'æŽ',
+ 'Õn' => 'æŽ',
+ 'Õo' => '掗',
+ 'Õp' => '掫',
+ 'Õq' => '掎',
+ 'Õr' => 'æ¯',
+ 'Õs' => '掇',
+ 'Õt' => 'æŽ',
+ 'Õu' => 'æ®',
+ 'Õv' => '掯',
+ 'Õw' => 'æµ',
+ 'Õx' => '掜',
+ 'Õy' => 'æ',
+ 'Õz' => '掮',
+ 'Õ{' => 'æ¼',
+ 'Õ|' => '掤',
+ 'Õ}' => '挻',
+ 'Õ~' => '掟',
+ 'Õ¡' => 'æ¸',
+ 'բ' => '掅',
+ 'Õ£' => 'æŽ',
+ 'դ' => '掑',
+ 'Õ¥' => 'æŽ',
+ 'Õ¦' => 'æ°',
+ 'Õ§' => 'æ•“',
+ 'Õ¨' => 'æ—',
+ 'թ' => '晥',
+ 'ժ' => '晡',
+ 'Õ«' => 'æ™›',
+ 'Õ¬' => 'æ™™',
+ 'Õ' => '晜',
+ 'ծ' => '晢',
+ 'կ' => '朘',
+ 'հ' => '桹',
+ 'ձ' => '梇',
+ 'Õ²' => 'æ¢',
+ 'ճ' => '梜',
+ 'Õ´' => 'æ¡',
+ 'Õµ' => 'æ¡®',
+ 'ն' => '梮',
+ 'շ' => '梫',
+ 'ո' => '楖',
+ 'չ' => '桯',
+ 'պ' => '梣',
+ 'ջ' => '梬',
+ 'ռ' => '梩',
+ 'ս' => '桵',
+ 'Õ¾' => 'æ¡´',
+ 'տ' => '梲',
+ 'ÕÀ' => 'æ¢',
+ 'ÕÁ' => 'æ¡·',
+ 'ÕÂ' => '梒',
+ 'ÕÃ' => '桼',
+ 'ÕÄ' => 'æ¡«',
+ 'ÕÅ' => '桲',
+ 'ÕÆ' => '梪',
+ 'ÕÇ' => '梀',
+ 'ÕÈ' => '桱',
+ 'ÕÉ' => '桾',
+ 'ÕÊ' => '梛',
+ 'ÕË' => '梖',
+ 'ÕÌ' => '梋',
+ 'ÕÍ' => 'æ¢ ',
+ 'ÕÎ' => '梉',
+ 'ÕÏ' => '梤',
+ 'ÕÐ' => '桸',
+ 'ÕÑ' => 'æ¡»',
+ 'ÕÒ' => '梑',
+ 'ÕÓ' => '梌',
+ 'ÕÔ' => '梊',
+ 'ÕÕ' => '桽',
+ 'ÕÖ' => '欶',
+ 'Õ×' => '欳',
+ 'ÕØ' => '欷',
+ 'ÕÙ' => '欸',
+ 'ÕÚ' => '殑',
+ 'ÕÛ' => 'æ®',
+ 'ÕÜ' => 'æ®',
+ 'ÕÝ' => '殎',
+ 'ÕÞ' => '殌',
+ 'Õß' => 'æ°ª',
+ 'Õà' => 'æ·€',
+ 'Õá' => '涫',
+ 'Õâ' => '涴',
+ 'Õã' => '涳',
+ 'Õä' => 'æ¹´',
+ 'Õå' => '涬',
+ 'Õæ' => 'æ·©',
+ 'Õç' => 'æ·¢',
+ 'Õè' => '涷',
+ 'Õé' => 'æ·¶',
+ 'Õê' => 'æ·”',
+ 'Õë' => '渀',
+ 'Õì' => 'æ·ˆ',
+ 'Õí' => 'æ· ',
+ 'Õî' => 'æ·Ÿ',
+ 'Õï' => 'æ·–',
+ 'Õð' => '涾',
+ 'Õñ' => 'æ·¥',
+ 'Õò' => 'æ·œ',
+ 'Õó' => 'æ·',
+ 'Õô' => 'æ·›',
+ 'Õõ' => 'æ·´',
+ 'Õö' => 'æ·Š',
+ 'Õ÷' => '涽',
+ 'Õø' => 'æ·',
+ 'Õù' => 'æ·°',
+ 'Õú' => '涺',
+ 'Õû' => 'æ·•',
+ 'Õü' => 'æ·‚',
+ 'Õý' => 'æ·',
+ 'Õþ' => 'æ·‰',
+ 'Ö@' => 'æ·',
+ 'ÖA' => 'æ·²',
+ 'ÖB' => 'æ·“',
+ 'ÖC' => 'æ·½',
+ 'ÖD' => 'æ·—',
+ 'ÖE' => 'æ·',
+ 'ÖF' => 'æ·£',
+ 'ÖG' => '涻',
+ 'ÖH' => '烺',
+ 'ÖI' => 'ç„',
+ 'ÖJ' => '烷',
+ 'ÖK' => 'ç„—',
+ 'ÖL' => '烴',
+ 'ÖM' => 'ç„Œ',
+ 'ÖN' => '烰',
+ 'ÖO' => 'ç„„',
+ 'ÖP' => '烳',
+ 'ÖQ' => 'ç„',
+ 'ÖR' => '烼',
+ 'ÖS' => '烿',
+ 'ÖT' => '焆',
+ 'ÖU' => 'ç„“',
+ 'ÖV' => 'ç„€',
+ 'ÖW' => '烸',
+ 'ÖX' => '烶',
+ 'ÖY' => 'ç„‹',
+ 'ÖZ' => 'ç„‚',
+ 'Ö[' => 'ç„Ž',
+ 'Ö\\' => '牾',
+ 'Ö]' => '牻',
+ 'Ö^' => '牼',
+ 'Ö_' => '牿',
+ 'Ö`' => 'çŒ',
+ 'Öa' => '猗',
+ 'Öb' => '猇',
+ 'Öc' => '猑',
+ 'Öd' => '猘',
+ 'Öe' => '猊',
+ 'Öf' => '猈',
+ 'Ög' => 'ç‹¿',
+ 'Öh' => 'çŒ',
+ 'Öi' => '猞',
+ 'Öj' => '玈',
+ 'Ök' => 'ç¶',
+ 'Öl' => 'ç¸',
+ 'Öm' => 'çµ',
+ 'Ön' => 'ç„',
+ 'Öo' => 'ç',
+ 'Öp' => 'ç½',
+ 'Öq' => 'ç‡',
+ 'Ör' => 'ç€',
+ 'Ös' => 'çº',
+ 'Öt' => 'ç¼',
+ 'Öu' => 'ç¿',
+ 'Öv' => 'çŒ',
+ 'Öw' => 'ç‹',
+ 'Öx' => 'ç´',
+ 'Öy' => 'çˆ',
+ 'Öz' => '畤',
+ 'Ö{' => 'ç•£',
+ 'Ö|' => 'ç—Ž',
+ 'Ö}' => 'ç—’',
+ 'Ö~' => 'ç—',
+ 'Ö¡' => 'ç—‹',
+ '֢' => '痌',
+ 'Ö£' => 'ç—‘',
+ 'Ö¤' => 'ç—',
+ 'Ö¥' => 'çš',
+ '֦' => '皉',
+ '֧' => '盓',
+ '֨' => '眹',
+ '֩' => '眯',
+ 'Öª' => 'çœ',
+ '֫' => '眱',
+ '֬' => '眲',
+ 'Ö' => '眴',
+ '֮' => '眳',
+ '֯' => '眽',
+ 'ְ' => '眥',
+ 'ֱ' => '眻',
+ 'ֲ' => '眵',
+ 'ֳ' => '硈',
+ 'Ö´' => 'ç¡’',
+ 'ֵ' => '硉',
+ 'Ö¶' => 'ç¡',
+ 'Ö·' => 'ç¡Š',
+ 'ָ' => '硌',
+ 'Ö¹' => 'ç ¦',
+ 'Öº' => 'ç¡…',
+ 'Ö»' => 'ç¡',
+ 'ּ' => '祤',
+ 'ֽ' => '祧',
+ '־' => '祩',
+ 'ֿ' => '祪',
+ 'ÖÀ' => '祣',
+ 'ÖÁ' => '祫',
+ 'ÖÂ' => '祡',
+ 'ÖÃ' => '离',
+ 'ÖÄ' => '秺',
+ 'ÖÅ' => '秸',
+ 'ÖÆ' => '秶',
+ 'ÖÇ' => '秷',
+ 'ÖÈ' => 'çª',
+ 'ÖÉ' => '窔',
+ 'ÖÊ' => 'çª',
+ 'ÖË' => '笵',
+ 'ÖÌ' => 'ç‡',
+ 'ÖÍ' => '笴',
+ 'ÖÎ' => '笥',
+ 'ÖÏ' => '笰',
+ 'ÖÐ' => '笢',
+ 'ÖÑ' => '笤',
+ 'ÖÒ' => '笳',
+ 'ÖÓ' => '笘',
+ 'ÖÔ' => '笪',
+ 'ÖÕ' => 'ç¬',
+ 'ÖÖ' => '笱',
+ 'Ö×' => '笫',
+ 'ÖØ' => 'ç¬',
+ 'ÖÙ' => '笯',
+ 'ÖÚ' => '笲',
+ 'ÖÛ' => '笸',
+ 'ÖÜ' => '笚',
+ 'ÖÝ' => '笣',
+ 'ÖÞ' => 'ç²”',
+ 'Öß' => '粘',
+ 'Öà' => 'ç²–',
+ 'Öá' => 'ç²£',
+ 'Öâ' => 'ç´µ',
+ 'Öã' => 'ç´½',
+ 'Öä' => 'ç´¸',
+ 'Öå' => 'ç´¶',
+ 'Öæ' => 'ç´º',
+ 'Öç' => 'çµ…',
+ 'Öè' => 'ç´¬',
+ 'Öé' => 'ç´©',
+ 'Öê' => 'çµ',
+ 'Öë' => '絇',
+ 'Öì' => 'ç´¾',
+ 'Öí' => 'ç´¿',
+ 'Öî' => '絊',
+ 'Öï' => 'ç´»',
+ 'Öð' => 'ç´¨',
+ 'Öñ' => 'ç½£',
+ 'Öò' => '羕',
+ 'Öó' => '羜',
+ 'Öô' => 'ç¾',
+ 'Öõ' => 'ç¾›',
+ 'Öö' => 'ç¿Š',
+ 'Ö÷' => 'ç¿‹',
+ 'Öø' => 'ç¿',
+ 'Öù' => 'ç¿',
+ 'Öú' => 'ç¿‘',
+ 'Öû' => '翇',
+ 'Öü' => 'ç¿',
+ 'Öý' => '翉',
+ 'Öþ' => '耟',
+ '×@' => '耞',
+ '×A' => '耛',
+ '×B' => 'è‡',
+ '×C' => 'èƒ',
+ '×D' => 'èˆ',
+ '×E' => '脘',
+ '×F' => 'è„¥',
+ '×G' => 'è„™',
+ '×H' => 'è„›',
+ '×I' => 'è„',
+ '×J' => 'è„Ÿ',
+ '×K' => '脬',
+ '×L' => 'è„ž',
+ '×M' => 'è„¡',
+ '×N' => 'è„•',
+ '×O' => '脧',
+ '×P' => 'è„',
+ '×Q' => 'è„¢',
+ '×R' => '舑',
+ '×S' => '舸',
+ '×T' => '舳',
+ '×U' => '舺',
+ '×V' => '舴',
+ '×W' => '舲',
+ '×X' => '艴',
+ '×Y' => 'èŽ',
+ '×Z' => '莣',
+ '×[' => '莨',
+ '×\\' => 'èŽ',
+ '×]' => 'èº',
+ '×^' => 'è³',
+ '×_' => '莤',
+ '×`' => 'è´',
+ '×a' => 'èŽ',
+ '×b' => 'èŽ',
+ '×c' => '莕',
+ '×d' => '莙',
+ '×e' => 'èµ',
+ '×f' => '莔',
+ '×g' => '莩',
+ '×h' => 'è½',
+ '×i' => '莃',
+ '×j' => '莌',
+ '×k' => 'èŽ',
+ '×l' => '莛',
+ '×m' => '莪',
+ '×n' => '莋',
+ '×o' => 'è¾',
+ '×p' => '莥',
+ '×q' => '莯',
+ '×r' => '莈',
+ '×s' => '莗',
+ '×t' => '莰',
+ '×u' => 'è¿',
+ '×v' => '莦',
+ '×w' => '莇',
+ '×x' => '莮',
+ '×y' => 'è¶',
+ '×z' => '莚',
+ '×{' => 'è™™',
+ '×|' => 'è™–',
+ '×}' => 'èš¿',
+ '×~' => 'èš·',
+ 'ס' => '蛂',
+ '×¢' => 'è›',
+ '×£' => 'è›…',
+ 'פ' => '蚺',
+ '×¥' => 'èš°',
+ 'צ' => '蛈',
+ 'ק' => '蚹',
+ 'ר' => '蚳',
+ 'ש' => '蚸',
+ 'ת' => '蛌',
+ '׫' => '蚴',
+ '׬' => '蚻',
+ '×' => 'èš¼',
+ '׮' => '蛃',
+ 'ׯ' => '蚽',
+ '×°' => 'èš¾',
+ '×±' => 'è¡’',
+ 'ײ' => '袉',
+ '׳' => '袕',
+ '״' => '袨',
+ '׵' => '袢',
+ '׶' => '袪',
+ '׷' => '袚',
+ '׸' => '袑',
+ '׹' => '袡',
+ '׺' => '袟',
+ '׻' => '袘',
+ '׼' => '袧',
+ '׽' => '袙',
+ '׾' => '袛',
+ '׿' => '袗',
+ '×À' => '袤',
+ '×Á' => '袬',
+ '×Â' => '袌',
+ '×Ã' => '袓',
+ '×Ä' => '袎',
+ '×Å' => '覂',
+ '×Æ' => '觖',
+ '×Ç' => '觙',
+ '×È' => '觕',
+ '×É' => '訰',
+ '×Ê' => '訧',
+ '×Ë' => '訬',
+ '×Ì' => '訞',
+ '×Í' => 'è°¹',
+ '×Î' => 'è°»',
+ '×Ï' => '豜',
+ '×Ð' => 'è±',
+ '×Ñ' => 'è±½',
+ '×Ò' => 'è²¥',
+ '×Ó' => 'èµ½',
+ '×Ô' => 'èµ»',
+ '×Õ' => 'èµ¹',
+ '×Ö' => '趼',
+ '××' => 'è·‚',
+ '×Ø' => '趹',
+ '×Ù' => '趿',
+ '×Ú' => 'è·',
+ '×Û' => '軘',
+ '×Ü' => '軞',
+ '×Ý' => 'è»',
+ '×Þ' => '軜',
+ '×ß' => 'è»—',
+ '×à' => 'è» ',
+ '×á' => '軡',
+ '×â' => '逤',
+ '×ã' => '逋',
+ '×ä' => '逑',
+ '×å' => '逜',
+ '×æ' => '逌',
+ '×ç' => '逡',
+ '×è' => '郯',
+ '×é' => '郪',
+ '×ê' => '郰',
+ '×ë' => '郴',
+ '×ì' => '郲',
+ '×í' => '郳',
+ '×î' => '郔',
+ '×ï' => '郫',
+ '×ð' => '郬',
+ '×ñ' => '郩',
+ '×ò' => 'é…–',
+ '×ó' => 'é…˜',
+ '×ô' => 'é…š',
+ '×õ' => 'é…“',
+ '×ö' => 'é…•',
+ '×÷' => '釬',
+ '×ø' => '釴',
+ '×ù' => '釱',
+ '×ú' => '釳',
+ '×û' => '釸',
+ '×ü' => '釤',
+ '×ý' => '釹',
+ '×þ' => '釪',
+ 'Ø@' => '釫',
+ 'ØA' => '釷',
+ 'ØB' => '釨',
+ 'ØC' => '釮',
+ 'ØD' => '镺',
+ 'ØE' => 'é–†',
+ 'ØF' => 'é–ˆ',
+ 'ØG' => '陼',
+ 'ØH' => 'é™',
+ 'ØI' => '陫',
+ 'ØJ' => 'é™±',
+ 'ØK' => '陯',
+ 'ØL' => 'éš¿',
+ 'ØM' => 'éª',
+ 'ØN' => 'é „',
+ 'ØO' => '飥',
+ 'ØP' => '馗',
+ 'ØQ' => 'å‚›',
+ 'ØR' => 'å‚•',
+ 'ØS' => 'å‚”',
+ 'ØT' => 'å‚ž',
+ 'ØU' => 'å‚‹',
+ 'ØV' => 'å‚£',
+ 'ØW' => '傃',
+ 'ØX' => 'å‚Œ',
+ 'ØY' => 'å‚Ž',
+ 'ØZ' => 'å‚',
+ 'Ø[' => 'å¨',
+ 'Ø\\' => 'å‚œ',
+ 'Ø]' => 'å‚’',
+ 'Ø^' => 'å‚‚',
+ 'Ø_' => '傇',
+ 'Ø`' => 'å…Ÿ',
+ 'Øa' => '凔',
+ 'Øb' => '匒',
+ 'Øc' => '匑',
+ 'Ød' => '厤',
+ 'Øe' => '厧',
+ 'Øf' => 'å–‘',
+ 'Øg' => 'å–¨',
+ 'Øh' => 'å–¥',
+ 'Øi' => 'å–',
+ 'Øj' => 'å•·',
+ 'Øk' => 'å™…',
+ 'Øl' => 'å–¢',
+ 'Øm' => 'å–“',
+ 'Øn' => 'å–ˆ',
+ 'Øo' => 'å–',
+ 'Øp' => 'å–µ',
+ 'Øq' => 'å–',
+ 'Ør' => 'å–£',
+ 'Øs' => 'å–’',
+ 'Øt' => 'å–¤',
+ 'Øu' => '啽',
+ 'Øv' => 'å–Œ',
+ 'Øw' => 'å–¦',
+ 'Øx' => 'å•¿',
+ 'Øy' => 'å–•',
+ 'Øz' => 'å–¡',
+ 'Ø{' => 'å–Ž',
+ 'Ø|' => '圌',
+ 'Ø}' => 'å ©',
+ 'Ø~' => 'å ·',
+ 'Ø¡' => 'å ™',
+ 'Ø¢' => 'å ž',
+ 'Ø£' => 'å §',
+ 'ؤ' => 'å £',
+ 'Ø¥' => 'å ¨',
+ 'ئ' => '埵',
+ 'ا' => '塈',
+ 'ب' => 'å ¥',
+ 'Ø©' => 'å œ',
+ 'ت' => 'å ›',
+ 'Ø«' => 'å ³',
+ 'ج' => 'å ¿',
+ 'Ø' => 'å ¶',
+ 'Ø®' => 'å ®',
+ 'د' => 'å ¹',
+ 'Ø°' => 'å ¸',
+ 'ر' => 'å ',
+ 'ز' => 'å ¬',
+ 'س' => 'å »',
+ 'ش' => '奡',
+ 'ص' => '媯',
+ 'ض' => '媔',
+ 'ط' => '媟',
+ 'ظ' => '婺',
+ 'ع' => '媢',
+ 'غ' => '媞',
+ 'ػ' => '婸',
+ 'ؼ' => '媦',
+ 'ؽ' => '婼',
+ 'ؾ' => '媥',
+ 'ؿ' => '媬',
+ 'ØÀ' => '媕',
+ 'ØÁ' => '媮',
+ 'ØÂ' => '娷',
+ 'ØÃ' => '媄',
+ 'ØÄ' => '媊',
+ 'ØÅ' => '媗',
+ 'ØÆ' => '媃',
+ 'ØÇ' => '媋',
+ 'ØÈ' => '媩',
+ 'ØÉ' => 'å©»',
+ 'ØÊ' => '婽',
+ 'ØË' => '媌',
+ 'ØÌ' => '媜',
+ 'ØÍ' => 'åª',
+ 'ØÎ' => '媓',
+ 'ØÏ' => 'åª',
+ 'ØÐ' => '寪',
+ 'ØÑ' => 'å¯',
+ 'ØÒ' => '寋',
+ 'ØÓ' => '寔',
+ 'ØÔ' => '寑',
+ 'ØÕ' => '寊',
+ 'ØÖ' => '寎',
+ 'Ø×' => 'å°Œ',
+ 'ØØ' => 'å°°',
+ 'ØÙ' => 'å´·',
+ 'ØÚ' => '嵃',
+ 'ØÛ' => '嵫',
+ 'ØÜ' => 'åµ',
+ 'ØÝ' => '嵋',
+ 'ØÞ' => 'å´¿',
+ 'Øß' => 'å´µ',
+ 'Øà' => '嵑',
+ 'Øá' => '嵎',
+ 'Øâ' => '嵕',
+ 'Øã' => 'å´³',
+ 'Øä' => 'å´º',
+ 'Øå' => 'åµ’',
+ 'Øæ' => 'å´½',
+ 'Øç' => 'å´±',
+ 'Øè' => 'åµ™',
+ 'Øé' => '嵂',
+ 'Øê' => 'å´¹',
+ 'Øë' => '嵉',
+ 'Øì' => 'å´¸',
+ 'Øí' => 'å´¼',
+ 'Øî' => 'å´²',
+ 'Øï' => 'å´¶',
+ 'Øð' => 'åµ€',
+ 'Øñ' => 'åµ…',
+ 'Øò' => '幄',
+ 'Øó' => 'å¹',
+ 'Øô' => '彘',
+ 'Øõ' => '徦',
+ 'Øö' => 'å¾¥',
+ 'Ø÷' => '徫',
+ 'Øø' => '惉',
+ 'Øù' => '悹',
+ 'Øú' => '惌',
+ 'Øû' => '惢',
+ 'Øü' => '惎',
+ 'Øý' => '惄',
+ 'Øþ' => 'æ„”',
+ 'Ù@' => '惲',
+ 'ÙA' => 'æ„Š',
+ 'ÙB' => 'æ„–',
+ 'ÙC' => 'æ„…',
+ 'ÙD' => '惵',
+ 'ÙE' => 'æ„“',
+ 'ÙF' => '惸',
+ 'ÙG' => '惼',
+ 'ÙH' => '惾',
+ 'ÙI' => 'æƒ',
+ 'ÙJ' => '愃',
+ 'ÙK' => '愘',
+ 'ÙL' => 'æ„',
+ 'ÙM' => 'æ„',
+ 'ÙN' => '惿',
+ 'ÙO' => 'æ„„',
+ 'ÙP' => 'æ„‹',
+ 'ÙQ' => '扊',
+ 'ÙR' => '掔',
+ 'ÙS' => '掱',
+ 'ÙT' => '掰',
+ 'ÙU' => 'æŽ',
+ 'ÙV' => 'æ¥',
+ 'ÙW' => 'æ¨',
+ 'ÙX' => 'æ¯',
+ 'ÙY' => 'æƒ',
+ 'ÙZ' => 'æ’',
+ 'Ù[' => 'æ³',
+ 'Ù\\' => 'æŠ',
+ 'Ù]' => 'æ ',
+ 'Ù^' => 'æ¶',
+ 'Ù_' => 'æ•',
+ 'Ù`' => 'æ²',
+ 'Ùa' => 'æµ',
+ 'Ùb' => 'æ‘¡',
+ 'Ùc' => 'æŸ',
+ 'Ùd' => '掾',
+ 'Ùe' => 'æ',
+ 'Ùf' => 'æœ',
+ 'Ùg' => 'æ„',
+ 'Ùh' => 'æ˜',
+ 'Ùi' => 'æ“',
+ 'Ùj' => 'æ‚',
+ 'Ùk' => 'æ‡',
+ 'Ùl' => 'æŒ',
+ 'Ùm' => 'æ‹',
+ 'Ùn' => 'æˆ',
+ 'Ùo' => 'æ°',
+ 'Ùp' => 'æ—',
+ 'Ùq' => 'æ™',
+ 'Ùr' => '攲',
+ 'Ùs' => '敧',
+ 'Ùt' => '敪',
+ 'Ùu' => '敤',
+ 'Ùv' => 'æ•œ',
+ 'Ùw' => '敨',
+ 'Ùx' => 'æ•¥',
+ 'Ùy' => 'æ–Œ',
+ 'Ùz' => 'æ–',
+ 'Ù{' => 'æ–ž',
+ 'Ù|' => 'æ–®',
+ 'Ù}' => 'æ—',
+ 'Ù~' => 'æ—’',
+ '١' => '晼',
+ '٢' => '晬',
+ 'Ù£' => 'æ™»',
+ '٤' => '暀',
+ 'Ù¥' => 'æ™±',
+ '٦' => '晹',
+ '٧' => '晪',
+ '٨' => '晲',
+ 'Ù©' => 'æœ',
+ '٪' => '椌',
+ '٫' => '棓',
+ '٬' => '椄',
+ 'Ù' => '棜',
+ 'ٮ' => '椪',
+ 'ٯ' => '棬',
+ 'ٰ' => '棪',
+ 'ٱ' => '棱',
+ 'Ù²' => 'æ¤',
+ 'ٳ' => '棖',
+ 'ٴ' => '棷',
+ 'ٵ' => '棫',
+ 'ٶ' => '棤',
+ 'ٷ' => '棶',
+ 'ٸ' => '椓',
+ 'Ù¹' => 'æ¤',
+ 'ٺ' => '棳',
+ 'ٻ' => '棡',
+ 'ټ' => '椇',
+ 'ٽ' => '棌',
+ 'پ' => '椈',
+ 'ٿ' => '楰',
+ 'ÙÀ' => '梴',
+ 'ÙÁ' => '椑',
+ 'ÙÂ' => '棯',
+ 'ÙÃ' => '棆',
+ 'ÙÄ' => '椔',
+ 'ÙÅ' => '棸',
+ 'ÙÆ' => 'æ£',
+ 'ÙÇ' => '棽',
+ 'ÙÈ' => '棼',
+ 'ÙÉ' => '棨',
+ 'ÙÊ' => '椋',
+ 'ÙË' => '椊',
+ 'ÙÌ' => '椗',
+ 'ÙÍ' => '棎',
+ 'ÙÎ' => '棈',
+ 'ÙÏ' => 'æ£',
+ 'ÙÐ' => '棞',
+ 'ÙÑ' => '棦',
+ 'ÙÒ' => '棴',
+ 'ÙÓ' => '棑',
+ 'ÙÔ' => '椆',
+ 'ÙÕ' => '棔',
+ 'ÙÖ' => '棩',
+ 'Ù×' => '椕',
+ 'ÙØ' => '椥',
+ 'ÙÙ' => '棇',
+ 'ÙÚ' => '欹',
+ 'ÙÛ' => '欻',
+ 'ÙÜ' => '欿',
+ 'ÙÝ' => '欼',
+ 'ÙÞ' => 'æ®”',
+ 'Ùß' => 'æ®—',
+ 'Ùà' => 'æ®™',
+ 'Ùá' => '殕',
+ 'Ùâ' => '殽',
+ 'Ùã' => '毰',
+ 'Ùä' => '毲',
+ 'Ùå' => '毳',
+ 'Ùæ' => 'æ°°',
+ 'Ùç' => 'æ·¼',
+ 'Ùè' => '湆',
+ 'Ùé' => '湇',
+ 'Ùê' => '渟',
+ 'Ùë' => '湉',
+ 'Ùì' => '溈',
+ 'Ùí' => '渼',
+ 'Ùî' => '渽',
+ 'Ùï' => 'æ¹…',
+ 'Ùð' => 'æ¹¢',
+ 'Ùñ' => '渫',
+ 'Ùò' => '渿',
+ 'Ùó' => 'æ¹',
+ 'Ùô' => 'æ¹',
+ 'Ùõ' => 'æ¹³',
+ 'Ùö' => '渜',
+ 'Ù÷' => '渳',
+ 'Ùø' => '湋',
+ 'Ùù' => 'æ¹€',
+ 'Ùú' => '湑',
+ 'Ùû' => '渻',
+ 'Ùü' => '渃',
+ 'Ùý' => '渮',
+ 'Ùþ' => '湞',
+ 'Ú@' => '湨',
+ 'ÚA' => '湜',
+ 'ÚB' => '湡',
+ 'ÚC' => '渱',
+ 'ÚD' => '渨',
+ 'ÚE' => 'æ¹ ',
+ 'ÚF' => 'æ¹±',
+ 'ÚG' => '湫',
+ 'ÚH' => '渹',
+ 'ÚI' => '渢',
+ 'ÚJ' => '渰',
+ 'ÚK' => '湓',
+ 'ÚL' => 'æ¹¥',
+ 'ÚM' => '渧',
+ 'ÚN' => '湸',
+ 'ÚO' => '湤',
+ 'ÚP' => 'æ¹·',
+ 'ÚQ' => '湕',
+ 'ÚR' => 'æ¹¹',
+ 'ÚS' => 'æ¹’',
+ 'ÚT' => '湦',
+ 'ÚU' => '渵',
+ 'ÚV' => '渶',
+ 'ÚW' => '湚',
+ 'ÚX' => 'ç„ ',
+ 'ÚY' => 'ç„ž',
+ 'ÚZ' => '焯',
+ 'Ú[' => '烻',
+ 'Ú\\' => 'ç„®',
+ 'Ú]' => '焱',
+ 'Ú^' => 'ç„£',
+ 'Ú_' => 'ç„¥',
+ 'Ú`' => 'ç„¢',
+ 'Úa' => '焲',
+ 'Úb' => 'ç„Ÿ',
+ 'Úc' => '焨',
+ 'Úd' => '焺',
+ 'Úe' => 'ç„›',
+ 'Úf' => '牋',
+ 'Úg' => '牚',
+ 'Úh' => '犈',
+ 'Úi' => '犉',
+ 'Új' => '犆',
+ 'Úk' => '犅',
+ 'Úl' => '犋',
+ 'Úm' => '猒',
+ 'Ún' => '猋',
+ 'Úo' => '猰',
+ 'Úp' => '猢',
+ 'Úq' => '猱',
+ 'Úr' => '猳',
+ 'Ús' => '猧',
+ 'Út' => '猲',
+ 'Úu' => 'çŒ',
+ 'Úv' => '猦',
+ 'Úw' => '猣',
+ 'Úx' => '猵',
+ 'Úy' => '猌',
+ 'Úz' => 'ç®',
+ 'Ú{' => 'ç¬',
+ 'Ú|' => 'ç°',
+ 'Ú}' => 'ç«',
+ 'Ú~' => 'ç–',
+ 'Ú¡' => 'çš',
+ 'Ú¢' => 'ç¡',
+ 'Ú£' => 'ç',
+ 'Ú¤' => 'ç±',
+ 'Ú¥' => 'ç¤',
+ 'Ú¦' => 'ç£',
+ 'Ú§' => 'ç',
+ 'Ú¨' => 'ç©',
+ 'Ú©' => 'ç ',
+ 'Úª' => 'ç²',
+ 'Ú«' => 'ç“»',
+ 'ڬ' => '甯',
+ 'Ú' => '畯',
+ 'ڮ' => '畬',
+ 'Ú¯' => 'ç—§',
+ 'Ú°' => 'ç—š',
+ 'Ú±' => 'ç—¡',
+ 'Ú²' => 'ç—¦',
+ 'Ú³' => 'ç—',
+ 'Ú´' => 'ç—Ÿ',
+ 'Úµ' => 'ç—¤',
+ 'Ú¶' => 'ç——',
+ 'Ú·' => 'çš•',
+ 'Ú¸' => 'çš’',
+ 'ڹ' => '盚',
+ 'Úº' => 'ç†',
+ 'Ú»' => 'ç‡',
+ 'Ú¼' => 'ç„',
+ 'Ú½' => 'ç',
+ 'Ú¾' => 'ç…',
+ 'Ú¿' => 'çŠ',
+ 'ÚÀ' => 'çŽ',
+ 'ÚÁ' => 'ç‹',
+ 'ÚÂ' => 'çŒ',
+ 'ÚÃ' => '矞',
+ 'ÚÄ' => '矬',
+ 'ÚÅ' => 'ç¡ ',
+ 'ÚÆ' => '硤',
+ 'ÚÇ' => 'ç¡¥',
+ 'ÚÈ' => 'ç¡œ',
+ 'ÚÉ' => 'ç¡',
+ 'ÚÊ' => '硱',
+ 'ÚË' => '硪',
+ 'ÚÌ' => 'ç¡®',
+ 'ÚÍ' => 'ç¡°',
+ 'ÚÎ' => 'ç¡©',
+ 'ÚÏ' => '硨',
+ 'ÚÐ' => 'ç¡ž',
+ 'ÚÑ' => 'ç¡¢',
+ 'ÚÒ' => '祴',
+ 'ÚÓ' => '祳',
+ 'ÚÔ' => '祲',
+ 'ÚÕ' => '祰',
+ 'ÚÖ' => '稂',
+ 'Ú×' => '稊',
+ 'ÚØ' => '稃',
+ 'ÚÙ' => '稌',
+ 'ÚÚ' => '稄',
+ 'ÚÛ' => '窙',
+ 'ÚÜ' => '竦',
+ 'ÚÝ' => '竤',
+ 'ÚÞ' => 'çŠ',
+ 'Úß' => '笻',
+ 'Úà' => 'ç„',
+ 'Úá' => 'çˆ',
+ 'Úâ' => 'çŒ',
+ 'Úã' => 'çŽ',
+ 'Úä' => 'ç€',
+ 'Úå' => 'ç˜',
+ 'Úæ' => 'ç…',
+ 'Úç' => 'ç²¢',
+ 'Úè' => '粞',
+ 'Úé' => '粨',
+ 'Úê' => '粡',
+ 'Úë' => '絘',
+ 'Úì' => '絯',
+ 'Úí' => 'çµ£',
+ 'Úî' => '絓',
+ 'Úï' => 'çµ–',
+ 'Úð' => '絧',
+ 'Úñ' => '絪',
+ 'Úò' => 'çµ',
+ 'Úó' => 'çµ',
+ 'Úô' => '絜',
+ 'Úõ' => '絫',
+ 'Úö' => 'çµ’',
+ 'Ú÷' => 'çµ”',
+ 'Úø' => '絩',
+ 'Úù' => '絑',
+ 'Úú' => '絟',
+ 'Úû' => '絎',
+ 'Úü' => 'ç¼¾',
+ 'Úý' => '缿',
+ 'Úþ' => 'ç½¥',
+ 'Û@' => '罦',
+ 'ÛA' => 'ç¾¢',
+ 'ÛB' => 'ç¾ ',
+ 'ÛC' => '羡',
+ 'ÛD' => 'ç¿—',
+ 'ÛE' => 'è‘',
+ 'ÛF' => 'è',
+ 'ÛG' => 'è',
+ 'ÛH' => '胾',
+ 'ÛI' => '胔',
+ 'ÛJ' => 'è…ƒ',
+ 'ÛK' => 'è…Š',
+ 'ÛL' => 'è…’',
+ 'ÛM' => 'è…',
+ 'ÛN' => 'è…‡',
+ 'ÛO' => '脽',
+ 'ÛP' => 'è…',
+ 'ÛQ' => '脺',
+ 'ÛR' => '臦',
+ 'ÛS' => '臮',
+ 'ÛT' => '臷',
+ 'ÛU' => '臸',
+ 'ÛV' => '臹',
+ 'ÛW' => '舄',
+ 'ÛX' => '舼',
+ 'ÛY' => '舽',
+ 'ÛZ' => '舿',
+ 'Û[' => '艵',
+ 'Û\\' => '茻',
+ 'Û]' => 'è',
+ 'Û^' => 'è¹',
+ 'Û_' => 'è£',
+ 'Û`' => 'è€',
+ 'Ûa' => 'è¨',
+ 'Ûb' => 'è’',
+ 'Ûc' => 'è§',
+ 'Ûd' => 'è¤',
+ 'Ûe' => 'è¼',
+ 'Ûf' => 'è¶',
+ 'Ûg' => 'è',
+ 'Ûh' => 'è†',
+ 'Ûi' => 'èˆ',
+ 'Ûj' => 'è«',
+ 'Ûk' => 'è£',
+ 'Ûl' => '莿',
+ 'Ûm' => 'è',
+ 'Ûn' => 'è',
+ 'Ûo' => 'è¥',
+ 'Ûp' => 'è˜',
+ 'Ûq' => 'è¿',
+ 'Ûr' => 'è¡',
+ 'Ûs' => 'è‹',
+ 'Ût' => 'èŽ',
+ 'Ûu' => 'è–',
+ 'Ûv' => 'èµ',
+ 'Ûw' => 'è‰',
+ 'Ûx' => 'è‰',
+ 'Ûy' => 'è',
+ 'Ûz' => 'èž',
+ 'Û{' => 'è‘',
+ 'Û|' => 'è†',
+ 'Û}' => 'è‚',
+ 'Û~' => 'è³',
+ 'Û¡' => 'è•',
+ 'Û¢' => 'èº',
+ 'Û£' => 'è‡',
+ 'Û¤' => 'è‘',
+ 'Û¥' => 'èª',
+ 'Û¦' => 'è“',
+ 'Û§' => 'èƒ',
+ 'Û¨' => 'è¬',
+ 'Û©' => 'è®',
+ 'Ûª' => 'è„',
+ 'Û«' => 'è»',
+ 'Û¬' => 'è—',
+ 'Û' => 'è¢',
+ 'Û®' => 'è›',
+ 'Û¯' => 'è›',
+ 'Û°' => 'è¾',
+ '۱' => '蛘',
+ '۲' => '蛢',
+ '۳' => '蛦',
+ '۴' => '蛓',
+ '۵' => '蛣',
+ '۶' => '蛚',
+ '۷' => '蛪',
+ 'Û¸' => 'è›',
+ '۹' => '蛫',
+ 'ۺ' => '蛜',
+ 'ۻ' => '蛬',
+ 'ۼ' => '蛩',
+ 'Û½' => 'è›—',
+ '۾' => '蛨',
+ 'ۿ' => '蛑',
+ 'ÛÀ' => '衈',
+ 'ÛÁ' => 'è¡–',
+ 'ÛÂ' => 'è¡•',
+ 'ÛÃ' => '袺',
+ 'ÛÄ' => '裗',
+ 'ÛÅ' => '袹',
+ 'ÛÆ' => '袸',
+ 'ÛÇ' => '裀',
+ 'ÛÈ' => '袾',
+ 'ÛÉ' => '袶',
+ 'ÛÊ' => '袼',
+ 'ÛË' => '袷',
+ 'ÛÌ' => '袽',
+ 'ÛÍ' => '袲',
+ 'ÛÎ' => 'è¤',
+ 'ÛÏ' => '裉',
+ 'ÛÐ' => '覕',
+ 'ÛÑ' => '覘',
+ 'ÛÒ' => '覗',
+ 'ÛÓ' => 'è§',
+ 'ÛÔ' => '觚',
+ 'ÛÕ' => '觛',
+ 'ÛÖ' => 'è©Ž',
+ 'Û×' => 'è©',
+ 'ÛØ' => '訹',
+ 'ÛÙ' => 'è©™',
+ 'ÛÚ' => 'è©€',
+ 'ÛÛ' => 'è©—',
+ 'ÛÜ' => '詘',
+ 'ÛÝ' => 'è©„',
+ 'ÛÞ' => 'è©…',
+ 'Ûß' => 'è©’',
+ 'Ûà' => '詈',
+ 'Ûá' => 'è©‘',
+ 'Ûâ' => 'è©Š',
+ 'Ûã' => 'è©Œ',
+ 'Ûä' => 'è©',
+ 'Ûå' => '豟',
+ 'Ûæ' => 'è²',
+ 'Ûç' => 'è²€',
+ 'Ûè' => '貺',
+ 'Ûé' => 'è²¾',
+ 'Ûê' => 'è²°',
+ 'Ûë' => 'è²¹',
+ 'Ûì' => 'è²µ',
+ 'Ûí' => '趄',
+ 'Ûî' => '趀',
+ 'Ûï' => '趉',
+ 'Ûð' => 'è·˜',
+ 'Ûñ' => 'è·“',
+ 'Ûò' => 'è·',
+ 'Ûó' => 'è·‡',
+ 'Ûô' => 'è·–',
+ 'Ûõ' => 'è·œ',
+ 'Ûö' => 'è·',
+ 'Û÷' => 'è·•',
+ 'Ûø' => 'è·™',
+ 'Ûù' => 'è·ˆ',
+ 'Ûú' => 'è·—',
+ 'Ûû' => 'è·…',
+ 'Ûü' => '軯',
+ 'Ûý' => 'è»·',
+ 'Ûþ' => '軺',
+ 'Ü@' => '軹',
+ 'ÜA' => '軦',
+ 'ÜB' => 'è»®',
+ 'ÜC' => '軥',
+ 'ÜD' => '軵',
+ 'ÜE' => '軧',
+ 'ÜF' => '軨',
+ 'ÜG' => '軶',
+ 'ÜH' => '軫',
+ 'ÜI' => 'è»±',
+ 'ÜJ' => '軬',
+ 'ÜK' => 'è»´',
+ 'ÜL' => '軩',
+ 'ÜM' => 'é€',
+ 'ÜN' => '逴',
+ 'ÜO' => '逯',
+ 'ÜP' => '鄆',
+ 'ÜQ' => '鄬',
+ 'ÜR' => 'é„„',
+ 'ÜS' => '郿',
+ 'ÜT' => '郼',
+ 'ÜU' => '鄈',
+ 'ÜV' => '郹',
+ 'ÜW' => '郻',
+ 'ÜX' => 'é„',
+ 'ÜY' => 'é„€',
+ 'ÜZ' => '鄇',
+ 'Ü[' => 'é„…',
+ 'Ü\\' => '鄃',
+ 'Ü]' => 'é…¡',
+ 'Ü^' => 'é…¤',
+ 'Ü_' => 'é…Ÿ',
+ 'Ü`' => 'é…¢',
+ 'Üa' => 'é… ',
+ 'Üb' => 'éˆ',
+ 'Üc' => '鈊',
+ 'Üd' => '鈥',
+ 'Üe' => '鈃',
+ 'Üf' => '鈚',
+ 'Üg' => '鈦',
+ 'Üh' => 'éˆ',
+ 'Üi' => '鈌',
+ 'Üj' => '鈀',
+ 'Ük' => '鈒',
+ 'Ül' => '釿',
+ 'Üm' => '釽',
+ 'Ün' => '鈆',
+ 'Üo' => '鈄',
+ 'Üp' => '鈧',
+ 'Üq' => '鈂',
+ 'Ür' => '鈜',
+ 'Üs' => '鈤',
+ 'Üt' => '鈙',
+ 'Üu' => '鈗',
+ 'Üv' => '鈅',
+ 'Üw' => '鈖',
+ 'Üx' => 'é•»',
+ 'Üy' => 'é–',
+ 'Üz' => 'é–Œ',
+ 'Ü{' => 'é–',
+ 'Ü|' => '隇',
+ 'Ü}' => '陾',
+ 'Ü~' => '隈',
+ 'ܡ' => '隉',
+ 'ܢ' => '隃',
+ 'ܣ' => '隀',
+ 'ܤ' => '雂',
+ 'ܥ' => '雈',
+ 'ܦ' => '雃',
+ 'ܧ' => '雱',
+ 'ܨ' => '雰',
+ 'Ü©' => 'é¬',
+ 'ܪ' => 'é°',
+ 'Ü«' => 'é®',
+ 'ܬ' => 'é ‡',
+ 'Ü' => '颩',
+ 'ܮ' => '飫',
+ 'ܯ' => '鳦',
+ 'ܰ' => '黹',
+ 'ܱ' => '亃',
+ 'ܲ' => '亄',
+ 'ܳ' => '亶',
+ 'ܴ' => '傽',
+ 'ܵ' => '傿',
+ 'ܶ' => '僆',
+ 'Ü·' => 'å‚®',
+ 'ܸ' => '僄',
+ 'ܹ' => '僊',
+ 'ܺ' => '傴',
+ 'ܻ' => '僈',
+ 'ܼ' => '僂',
+ 'ܽ' => '傰',
+ 'ܾ' => 'åƒ',
+ 'ܿ' => '傺',
+ 'ÜÀ' => '傱',
+ 'ÜÁ' => '僋',
+ 'ÜÂ' => '僉',
+ 'ÜÃ' => '傶',
+ 'ÜÄ' => '傸',
+ 'ÜÅ' => '凗',
+ 'ÜÆ' => '剺',
+ 'ÜÇ' => '剸',
+ 'ÜÈ' => '剻',
+ 'ÜÉ' => '剼',
+ 'ÜÊ' => 'å—ƒ',
+ 'ÜË' => 'å—›',
+ 'ÜÌ' => 'å—Œ',
+ 'ÜÍ' => 'å—',
+ 'ÜÎ' => 'å—‹',
+ 'ÜÏ' => 'å—Š',
+ 'ÜÐ' => 'å—',
+ 'ÜÑ' => 'å—€',
+ 'ÜÒ' => 'å—”',
+ 'ÜÓ' => 'å—„',
+ 'ÜÔ' => 'å—©',
+ 'ÜÕ' => 'å–¿',
+ 'ÜÖ' => 'å—’',
+ 'Ü×' => 'å–',
+ 'ÜØ' => 'å—',
+ 'ÜÙ' => 'å—•',
+ 'ÜÚ' => 'å—¢',
+ 'ÜÛ' => 'å—–',
+ 'ÜÜ' => 'å—ˆ',
+ 'ÜÝ' => 'å—²',
+ 'ÜÞ' => 'å—',
+ 'Üß' => 'å—™',
+ 'Üà' => 'å—‚',
+ 'Üá' => '圔',
+ 'Üâ' => 'å¡“',
+ 'Üã' => '塨',
+ 'Üä' => '塤',
+ 'Üå' => 'å¡',
+ 'Üæ' => 'å¡',
+ 'Üç' => '塉',
+ 'Üè' => '塯',
+ 'Üé' => 'å¡•',
+ 'Üê' => 'å¡Ž',
+ 'Üë' => 'å¡',
+ 'Üì' => 'å¡™',
+ 'Üí' => 'å¡¥',
+ 'Üî' => 'å¡›',
+ 'Üï' => 'å ½',
+ 'Üð' => 'å¡£',
+ 'Üñ' => '塱',
+ 'Üò' => '壼',
+ 'Üó' => '嫇',
+ 'Üô' => 'å«„',
+ 'Üõ' => 'å«‹',
+ 'Üö' => '媺',
+ 'Ü÷' => '媸',
+ 'Üø' => '媱',
+ 'Üù' => '媵',
+ 'Üú' => '媰',
+ 'Üû' => '媿',
+ 'Üü' => '嫈',
+ 'Üý' => '媻',
+ 'Üþ' => '嫆',
+ 'Ý@' => '媷',
+ 'ÝA' => 'å«€',
+ 'ÝB' => 'å«Š',
+ 'ÝC' => '媴',
+ 'ÝD' => '媶',
+ 'ÝE' => 'å«',
+ 'ÝF' => '媹',
+ 'ÝG' => 'åª',
+ 'ÝH' => '寖',
+ 'ÝI' => '寘',
+ 'ÝJ' => '寙',
+ 'ÝK' => 'å°Ÿ',
+ 'ÝL' => 'å°³',
+ 'ÝM' => 'åµ±',
+ 'ÝN' => 'åµ£',
+ 'ÝO' => '嵊',
+ 'ÝP' => 'åµ¥',
+ 'ÝQ' => 'åµ²',
+ 'ÝR' => '嵬',
+ 'ÝS' => '嵞',
+ 'ÝT' => '嵨',
+ 'ÝU' => '嵧',
+ 'ÝV' => 'åµ¢',
+ 'ÝW' => 'å·°',
+ 'ÝX' => 'å¹',
+ 'ÝY' => '幎',
+ 'ÝZ' => '幊',
+ 'Ý[' => 'å¹',
+ 'Ý\\' => '幋',
+ 'Ý]' => 'å»…',
+ 'Ý^' => '廌',
+ 'Ý_' => '廆',
+ 'Ý`' => '廋',
+ 'Ýa' => '廇',
+ 'Ýb' => 'å½€',
+ 'Ýc' => '徯',
+ 'Ýd' => 'å¾',
+ 'Ýe' => '惷',
+ 'Ýf' => 'æ…‰',
+ 'Ýg' => 'æ…Š',
+ 'Ýh' => 'æ„«',
+ 'Ýi' => 'æ……',
+ 'Ýj' => '愶',
+ 'Ýk' => '愲',
+ 'Ýl' => 'æ„®',
+ 'Ým' => 'æ…†',
+ 'Ýn' => '愯',
+ 'Ýo' => 'æ…',
+ 'Ýp' => 'æ„©',
+ 'Ýq' => 'æ…€',
+ 'Ýr' => 'æˆ ',
+ 'Ýs' => 'é…¨',
+ 'Ýt' => '戣',
+ 'Ýu' => '戥',
+ 'Ýv' => '戤',
+ 'Ýw' => 'æ…',
+ 'Ýx' => 'æ±',
+ 'Ýy' => 'æ«',
+ 'Ýz' => 'æ',
+ 'Ý{' => 'æ’',
+ 'Ý|' => 'æ‰',
+ 'Ý}' => 'æ ',
+ 'Ý~' => 'æ¤',
+ 'Ý¡' => 'æ³',
+ 'ݢ' => '摃',
+ 'Ý£' => 'æŸ',
+ 'ݤ' => 'æ•',
+ 'Ý¥' => 'æ˜',
+ 'ݦ' => 'æ¹',
+ 'ݧ' => 'æ·',
+ 'ݨ' => 'æ¢',
+ 'Ý©' => 'æ£',
+ 'ݪ' => 'æŒ',
+ 'Ý«' => 'æ¦',
+ 'ݬ' => 'æ°',
+ 'Ý' => 'æ¨',
+ 'Ý®' => 'æ‘',
+ 'ݯ' => 'æµ',
+ 'Ý°' => 'æ¯',
+ 'ݱ' => 'æŠ',
+ 'ݲ' => 'æš',
+ 'ݳ' => '摀',
+ 'Ý´' => 'æ¥',
+ 'ݵ' => 'æ§',
+ 'ݶ' => 'æ‹',
+ 'Ý·' => 'æ§',
+ 'ݸ' => 'æ›',
+ 'ݹ' => 'æ®',
+ 'ݺ' => 'æ¡',
+ 'Ý»' => 'æŽ',
+ 'ݼ' => '敯',
+ 'ݽ' => '斒',
+ 'ݾ' => '旓',
+ 'ݿ' => '暆',
+ 'ÝÀ' => '暌',
+ 'ÝÁ' => 'æš•',
+ 'ÝÂ' => 'æš',
+ 'ÝÃ' => 'æš‹',
+ 'ÝÄ' => '暊',
+ 'ÝÅ' => 'æš™',
+ 'ÝÆ' => 'æš”',
+ 'ÝÇ' => '晸',
+ 'ÝÈ' => 'æœ ',
+ 'ÝÉ' => '楦',
+ 'ÝÊ' => '楟',
+ 'ÝË' => '椸',
+ 'ÝÌ' => '楎',
+ 'ÝÍ' => '楢',
+ 'ÝÎ' => '楱',
+ 'ÝÏ' => '椿',
+ 'ÝÐ' => '楅',
+ 'ÝÑ' => '楪',
+ 'ÝÒ' => '椹',
+ 'ÝÓ' => '楂',
+ 'ÝÔ' => '楗',
+ 'ÝÕ' => '楙',
+ 'ÝÖ' => '楺',
+ 'Ý×' => '楈',
+ 'ÝØ' => '楉',
+ 'ÝÙ' => '椵',
+ 'ÝÚ' => '楬',
+ 'ÝÛ' => '椳',
+ 'ÝÜ' => '椽',
+ 'ÝÝ' => '楥',
+ 'ÝÞ' => '棰',
+ 'Ýß' => '楸',
+ 'Ýà' => '椴',
+ 'Ýá' => '楩',
+ 'Ýâ' => '楀',
+ 'Ýã' => '楯',
+ 'Ýä' => '楄',
+ 'Ýå' => '楶',
+ 'Ýæ' => '楘',
+ 'Ýç' => 'æ¥',
+ 'Ýè' => '楴',
+ 'Ýé' => '楌',
+ 'Ýê' => '椻',
+ 'Ýë' => '楋',
+ 'Ýì' => '椷',
+ 'Ýí' => '楜',
+ 'Ýî' => 'æ¥',
+ 'Ýï' => '楑',
+ 'Ýð' => '椲',
+ 'Ýñ' => '楒',
+ 'Ýò' => '椯',
+ 'Ýó' => '楻',
+ 'Ýô' => '椼',
+ 'Ýõ' => 'æ†',
+ 'Ýö' => 'æ…',
+ 'Ý÷' => 'æƒ',
+ 'Ýø' => 'æ‚',
+ 'Ýù' => 'æˆ',
+ 'Ýú' => 'æ',
+ 'Ýû' => 'æ®›',
+ 'Ýü' => 'ï¨',
+ 'Ýý' => '毻',
+ 'Ýþ' => '毼',
+ 'Þ@' => '毹',
+ 'ÞA' => '毷',
+ 'ÞB' => '毸',
+ 'ÞC' => '溛',
+ 'ÞD' => 'æ»–',
+ 'ÞE' => '滈',
+ 'ÞF' => 'æº',
+ 'ÞG' => '滀',
+ 'ÞH' => '溟',
+ 'ÞI' => '溓',
+ 'ÞJ' => '溔',
+ 'ÞK' => 'æº ',
+ 'ÞL' => '溱',
+ 'ÞM' => '溹',
+ 'ÞN' => '滆',
+ 'ÞO' => 'æ»’',
+ 'ÞP' => '溽',
+ 'ÞQ' => 'æ»',
+ 'ÞR' => '溞',
+ 'ÞS' => '滉',
+ 'ÞT' => '溷',
+ 'ÞU' => '溰',
+ 'ÞV' => 'æ»',
+ 'ÞW' => '溦',
+ 'ÞX' => 'æ»',
+ 'ÞY' => '溲',
+ 'ÞZ' => '溾',
+ 'Þ[' => '滃',
+ 'Þ\\' => '滜',
+ 'Þ]' => '滘',
+ 'Þ^' => '溙',
+ 'Þ_' => '溒',
+ 'Þ`' => '溎',
+ 'Þa' => 'æº',
+ 'Þb' => '溤',
+ 'Þc' => '溡',
+ 'Þd' => '溿',
+ 'Þe' => '溳',
+ 'Þf' => 'æ»',
+ 'Þg' => '滊',
+ 'Þh' => '溗',
+ 'Þi' => '溮',
+ 'Þj' => '溣',
+ 'Þk' => 'ç…‡',
+ 'Þl' => 'ç…”',
+ 'Þm' => 'ç…’',
+ 'Þn' => 'ç…£',
+ 'Þo' => 'ç… ',
+ 'Þp' => 'ç…',
+ 'Þq' => 'ç…',
+ 'Þr' => 'ç…¢',
+ 'Þs' => 'ç…²',
+ 'Þt' => 'ç…¸',
+ 'Þu' => 'ç…ª',
+ 'Þv' => 'ç…¡',
+ 'Þw' => 'ç…‚',
+ 'Þx' => 'ç…˜',
+ 'Þy' => 'ç…ƒ',
+ 'Þz' => 'ç…‹',
+ 'Þ{' => 'ç…°',
+ 'Þ|' => 'ç…Ÿ',
+ 'Þ}' => 'ç…',
+ 'Þ~' => 'ç…“',
+ 'Þ¡' => 'ç…„',
+ 'Þ¢' => 'ç…',
+ 'Þ£' => 'ç…š',
+ 'Þ¤' => 'ç‰',
+ 'Þ¥' => 'çŠ',
+ 'ަ' => '犌',
+ 'ާ' => '犑',
+ 'Þ¨' => 'çŠ',
+ 'ީ' => '犎',
+ 'ު' => '猼',
+ 'Þ«' => 'ç‚',
+ 'ެ' => '猻',
+ 'Þ' => '猺',
+ 'Þ®' => 'ç€',
+ 'Þ¯' => 'çŠ',
+ 'Þ°' => 'ç‰',
+ 'Þ±' => 'ç‘„',
+ 'Þ²' => 'ç‘Š',
+ 'Þ³' => 'ç‘‹',
+ 'Þ´' => 'ç‘’',
+ 'Þµ' => 'ç‘‘',
+ 'Þ¶' => 'ç‘—',
+ 'Þ·' => 'ç‘€',
+ 'Þ¸' => 'ç‘',
+ 'Þ¹' => 'ç‘',
+ 'Þº' => 'ç‘Ž',
+ 'Þ»' => 'ç‘‚',
+ '޼' => '瑆',
+ 'Þ½' => 'ç‘',
+ 'Þ¾' => 'ç‘”',
+ 'Þ¿' => 'ç“¡',
+ 'ÞÀ' => 'ç“¿',
+ 'ÞÁ' => '瓾',
+ 'ÞÂ' => '瓽',
+ 'ÞÃ' => 'ç”',
+ 'ÞÄ' => '畹',
+ 'ÞÅ' => 'ç•·',
+ 'ÞÆ' => '榃',
+ 'ÞÇ' => 'ç—¯',
+ 'ÞÈ' => 'ç˜',
+ 'ÞÉ' => '瘃',
+ 'ÞÊ' => 'ç—·',
+ 'ÞË' => 'ç—¾',
+ 'ÞÌ' => 'ç—¼',
+ 'ÞÍ' => 'ç—¹',
+ 'ÞÎ' => 'ç—¸',
+ 'ÞÏ' => 'ç˜',
+ 'ÞÐ' => 'ç—»',
+ 'ÞÑ' => 'ç—¶',
+ 'ÞÒ' => 'ç—',
+ 'ÞÓ' => 'ç—µ',
+ 'ÞÔ' => 'ç—½',
+ 'ÞÕ' => 'çš™',
+ 'ÞÖ' => 'çšµ',
+ 'Þ×' => 'ç›',
+ 'ÞØ' => 'ç•',
+ 'ÞÙ' => 'çŸ',
+ 'ÞÚ' => 'ç ',
+ 'ÞÛ' => 'ç’',
+ 'ÞÜ' => 'ç–',
+ 'ÞÝ' => 'çš',
+ 'ÞÞ' => 'ç©',
+ 'Þß' => 'ç§',
+ 'Þà' => 'ç”',
+ 'Þá' => 'ç™',
+ 'Þâ' => 'ç',
+ 'Þã' => 'çŸ ',
+ 'Þä' => '碇',
+ 'Þå' => '碚',
+ 'Þæ' => '碔',
+ 'Þç' => 'ç¢',
+ 'Þè' => '碄',
+ 'Þé' => '碕',
+ 'Þê' => '碅',
+ 'Þë' => '碆',
+ 'Þì' => '碡',
+ 'Þí' => '碃',
+ 'Þî' => '硹',
+ 'Þï' => '碙',
+ 'Þð' => '碀',
+ 'Þñ' => '碖',
+ 'Þò' => 'ç¡»',
+ 'Þó' => '祼',
+ 'Þô' => '禂',
+ 'Þõ' => '祽',
+ 'Þö' => '祹',
+ 'Þ÷' => '稑',
+ 'Þø' => '稘',
+ 'Þù' => '稙',
+ 'Þú' => '稒',
+ 'Þû' => '稗',
+ 'Þü' => '稕',
+ 'Þý' => '稢',
+ 'Þþ' => '稓',
+ 'ß@' => '稛',
+ 'ßA' => 'ç¨',
+ 'ßB' => '窣',
+ 'ßC' => '窢',
+ 'ßD' => '窞',
+ 'ßE' => 'ç««',
+ 'ßF' => 'ç¦',
+ 'ßG' => 'ç¤',
+ 'ßH' => 'ç',
+ 'ßI' => 'ç´',
+ 'ßJ' => 'ç©',
+ 'ßK' => 'ç²',
+ 'ßL' => 'ç¥',
+ 'ßM' => 'ç³',
+ 'ßN' => 'ç±',
+ 'ßO' => 'ç°',
+ 'ßP' => 'ç¡',
+ 'ßQ' => 'ç¸',
+ 'ßR' => 'ç¶',
+ 'ßS' => 'ç£',
+ 'ßT' => 'ç²²',
+ 'ßU' => 'ç²´',
+ 'ßV' => '粯',
+ 'ßW' => '綈',
+ 'ßX' => '綆',
+ 'ßY' => '綀',
+ 'ßZ' => 'ç¶',
+ 'ß[' => '絿',
+ 'ß\\' => '綅',
+ 'ß]' => '絺',
+ 'ß^' => '綎',
+ 'ß_' => 'çµ»',
+ 'ß`' => '綃',
+ 'ßa' => 'çµ¼',
+ 'ßb' => '綌',
+ 'ßc' => '綔',
+ 'ßd' => '綄',
+ 'ße' => 'çµ½',
+ 'ßf' => '綒',
+ 'ßg' => 'ç½',
+ 'ßh' => '罫',
+ 'ßi' => '罧',
+ 'ßj' => '罨',
+ 'ßk' => '罬',
+ 'ßl' => '羦',
+ 'ßm' => 'ç¾¥',
+ 'ßn' => '羧',
+ 'ßo' => 'ç¿›',
+ 'ßp' => 'ç¿œ',
+ 'ßq' => '耡',
+ 'ßr' => 'è…¤',
+ 'ßs' => 'è… ',
+ 'ßt' => 'è…·',
+ 'ßu' => 'è…œ',
+ 'ßv' => 'è…©',
+ 'ßw' => 'è…›',
+ 'ßx' => 'è…¢',
+ 'ßy' => 'è…²',
+ 'ßz' => '朡',
+ 'ß{' => 'è…ž',
+ 'ß|' => 'è…¶',
+ 'ß}' => 'è…§',
+ 'ß~' => 'è…¯',
+ 'ß¡' => 'è…„',
+ 'ߢ' => '腡',
+ 'ߣ' => 'èˆ',
+ 'ߤ' => '艉',
+ 'ߥ' => '艄',
+ 'ߦ' => '艀',
+ 'ߧ' => '艂',
+ 'ߨ' => '艅',
+ 'ߩ' => '蓱',
+ 'ߪ' => 'è¿',
+ 'ß«' => 'è‘–',
+ '߬' => '葶',
+ 'ß' => '葹',
+ 'ß®' => 'è’',
+ '߯' => 'è’',
+ 'ß°' => 'è‘¥',
+ 'ß±' => 'è‘‘',
+ 'ß²' => 'è‘€',
+ 'ß³' => 'è’†',
+ 'ߴ' => '葧',
+ 'ßµ' => 'è°',
+ '߶' => 'è‘',
+ '߷' => '葽',
+ '߸' => '葚',
+ 'ß¹' => 'è‘™',
+ 'ߺ' => '葴',
+ '߻' => '葳',
+ 'ß¼' => 'è‘',
+ '߽' => '蔇',
+ 'ß¾' => 'è‘ž',
+ 'ß¿' => 'è·',
+ 'ßÀ' => 'èº',
+ 'ßÁ' => 'è´',
+ 'ßÂ' => '葺',
+ 'ßÃ' => '葃',
+ 'ßÄ' => '葸',
+ 'ßÅ' => 'è²',
+ 'ßÆ' => 'è‘…',
+ 'ßÇ' => 'è©',
+ 'ßÈ' => 'è™',
+ 'ßÉ' => 'è‘‹',
+ 'ßÊ' => 'è¯',
+ 'ßË' => 'è‘‚',
+ 'ßÌ' => 'è',
+ 'ßÍ' => 'è‘Ÿ',
+ 'ßÎ' => 'è‘°',
+ 'ßÏ' => 'è¹',
+ 'ßÐ' => 'è‘Ž',
+ 'ßÑ' => 'è‘Œ',
+ 'ßÒ' => 'è‘’',
+ 'ßÓ' => '葯',
+ 'ßÔ' => 'è“…',
+ 'ßÕ' => 'è’Ž',
+ 'ßÖ' => 'è»',
+ 'ß×' => '葇',
+ 'ßØ' => 'è¶',
+ 'ßÙ' => 'è³',
+ 'ßÚ' => '葨',
+ 'ßÛ' => '葾',
+ 'ßÜ' => 'è‘„',
+ 'ßÝ' => 'è«',
+ 'ßÞ' => 'è‘ ',
+ 'ßß' => 'è‘”',
+ 'ßà' => 'è‘®',
+ 'ßá' => 'è‘',
+ 'ßâ' => '蜋',
+ 'ßã' => '蜄',
+ 'ßä' => 'è›·',
+ 'ßå' => '蜌',
+ 'ßæ' => '蛺',
+ 'ßç' => 'è›–',
+ 'ßè' => '蛵',
+ 'ßé' => 'è',
+ 'ßê' => '蛸',
+ 'ßë' => '蜎',
+ 'ßì' => '蜉',
+ 'ßí' => 'èœ',
+ 'ßî' => '蛶',
+ 'ßï' => 'èœ',
+ 'ßð' => '蜅',
+ 'ßñ' => '裖',
+ 'ßò' => '裋',
+ 'ßó' => 'è£',
+ 'ßô' => '裎',
+ 'ßõ' => '裞',
+ 'ßö' => '裛',
+ 'ß÷' => '裚',
+ 'ßø' => '裌',
+ 'ßù' => 'è£',
+ 'ßú' => '覅',
+ 'ßû' => '覛',
+ 'ßü' => '觟',
+ 'ßý' => '觥',
+ 'ßþ' => '觤',
+ 'à@' => '觡',
+ 'àA' => 'è§ ',
+ 'àB' => '觢',
+ 'àC' => '觜',
+ 'àD' => '触',
+ 'àE' => '詶',
+ 'àF' => '誆',
+ 'àG' => 'è©¿',
+ 'àH' => 'è©¡',
+ 'àI' => '訿',
+ 'àJ' => 'è©·',
+ 'àK' => '誂',
+ 'àL' => '誄',
+ 'àM' => '詵',
+ 'àN' => '誃',
+ 'àO' => 'èª',
+ 'àP' => 'è©´',
+ 'àQ' => '詺',
+ 'àR' => 'è°¼',
+ 'àS' => '豋',
+ 'àT' => '豊',
+ 'àU' => 'è±¥',
+ 'àV' => '豤',
+ 'àW' => '豦',
+ 'àX' => '貆',
+ 'àY' => '貄',
+ 'àZ' => 'è²…',
+ 'à[' => '賌',
+ 'à\\' => '赨',
+ 'à]' => '赩',
+ 'à^' => '趑',
+ 'à_' => '趌',
+ 'à`' => '趎',
+ 'àa' => 'è¶',
+ 'àb' => 'è¶',
+ 'àc' => '趓',
+ 'àd' => '趔',
+ 'àe' => 'è¶',
+ 'àf' => '趒',
+ 'àg' => 'è·°',
+ 'àh' => 'è· ',
+ 'ài' => 'è·¬',
+ 'àj' => 'è·±',
+ 'àk' => 'è·®',
+ 'àl' => 'è·',
+ 'àm' => 'è·©',
+ 'àn' => 'è·£',
+ 'ào' => 'è·¢',
+ 'àp' => 'è·§',
+ 'àq' => 'è·²',
+ 'àr' => 'è·«',
+ 'às' => 'è·´',
+ 'àt' => '輆',
+ 'àu' => '軿',
+ 'àv' => 'è¼',
+ 'àw' => 'è¼€',
+ 'àx' => 'è¼…',
+ 'ày' => '輇',
+ 'àz' => '輈',
+ 'à{' => '輂',
+ 'à|' => '輋',
+ 'à}' => 'é’',
+ 'à~' => '逿',
+ 'à¡' => 'é„',
+ 'à¢' => 'é‰',
+ 'à£' => '逽',
+ 'à¤' => 'é„',
+ 'à¥' => 'é„',
+ 'à¦' => 'é„',
+ 'à§' => 'é„‘',
+ 'à¨' => 'é„–',
+ 'à©' => 'é„”',
+ 'àª' => 'é„‹',
+ 'à«' => 'é„Ž',
+ 'à¬' => 'é…®',
+ 'à' => 'é…¯',
+ 'à®' => '鉈',
+ 'à¯' => '鉒',
+ 'à°' => '鈰',
+ 'à±' => '鈺',
+ 'à²' => '鉦',
+ 'à³' => '鈳',
+ 'à´' => '鉥',
+ 'àµ' => '鉞',
+ 'à¶' => '銃',
+ 'à·' => '鈮',
+ 'à¸' => '鉊',
+ 'à¹' => '鉆',
+ 'àº' => 'é‰',
+ 'à»' => '鉬',
+ 'à¼' => 'é‰',
+ 'à½' => 'é‰ ',
+ 'à¾' => '鉧',
+ 'à¿' => '鉯',
+ 'àÀ' => '鈶',
+ 'àÁ' => '鉡',
+ 'àÂ' => '鉰',
+ 'àÃ' => '鈱',
+ 'àÄ' => '鉔',
+ 'àÅ' => '鉣',
+ 'àÆ' => 'é‰',
+ 'àÇ' => '鉲',
+ 'àÈ' => '鉎',
+ 'àÉ' => '鉓',
+ 'àÊ' => '鉌',
+ 'àË' => '鉖',
+ 'àÌ' => '鈲',
+ 'àÍ' => 'é–Ÿ',
+ 'àÎ' => 'é–œ',
+ 'àÏ' => 'é–ž',
+ 'àÐ' => 'é–›',
+ 'àÑ' => 'éš’',
+ 'àÒ' => 'éš“',
+ 'àÓ' => 'éš‘',
+ 'àÔ' => 'éš—',
+ 'àÕ' => '雎',
+ 'àÖ' => '雺',
+ 'à×' => '雽',
+ 'àØ' => '雸',
+ 'àÙ' => '雵',
+ 'àÚ' => 'é³',
+ 'àÛ' => 'é·',
+ 'àÜ' => 'é¸',
+ 'àÝ' => 'é²',
+ 'àÞ' => 'é ',
+ 'àß' => 'é ',
+ 'àà' => 'é Ž',
+ 'àá' => '颬',
+ 'àâ' => '飶',
+ 'àã' => '飹',
+ 'àä' => '馯',
+ 'àå' => '馲',
+ 'àæ' => '馰',
+ 'àç' => '馵',
+ 'àè' => 'éª',
+ 'àé' => '骫',
+ 'àê' => 'é›',
+ 'àë' => '鳪',
+ 'àì' => 'é³',
+ 'àí' => '鳧',
+ 'àî' => '麀',
+ 'àï' => '黽',
+ 'àð' => '僦',
+ 'àñ' => '僔',
+ 'àò' => '僗',
+ 'àó' => '僨',
+ 'àô' => '僳',
+ 'àõ' => '僛',
+ 'àö' => '僪',
+ 'à÷' => 'åƒ',
+ 'àø' => '僤',
+ 'àù' => '僓',
+ 'àú' => '僬',
+ 'àû' => '僰',
+ 'àü' => '僯',
+ 'àý' => '僣',
+ 'àþ' => 'åƒ ',
+ 'á@' => '凘',
+ 'áA' => '劀',
+ 'áB' => 'åŠ',
+ 'áC' => 'å‹©',
+ 'áD' => 'å‹«',
+ 'áE' => '匰',
+ 'áF' => '厬',
+ 'áG' => '嘧',
+ 'áH' => '嘕',
+ 'áI' => '嘌',
+ 'áJ' => '嘒',
+ 'áK' => 'å—¼',
+ 'áL' => 'å˜',
+ 'áM' => '嘜',
+ 'áN' => 'å˜',
+ 'áO' => '嘓',
+ 'áP' => '嘂',
+ 'áQ' => 'å—º',
+ 'áR' => 'å˜',
+ 'áS' => '嘄',
+ 'áT' => 'å—¿',
+ 'áU' => 'å—¹',
+ 'áV' => '墉',
+ 'áW' => '塼',
+ 'áX' => 'å¢',
+ 'áY' => '墘',
+ 'áZ' => '墆',
+ 'á[' => 'å¢',
+ 'á\\' => 'å¡¿',
+ 'á]' => 'å¡´',
+ 'á^' => '墋',
+ 'á_' => '塺',
+ 'á`' => '墇',
+ 'áa' => '墑',
+ 'áb' => '墎',
+ 'ác' => '塶',
+ 'ád' => '墂',
+ 'áe' => '墈',
+ 'áf' => 'å¡»',
+ 'ág' => '墔',
+ 'áh' => 'å¢',
+ 'ái' => '壾',
+ 'áj' => '奫',
+ 'ák' => 'å«œ',
+ 'ál' => 'å«®',
+ 'ám' => 'å«¥',
+ 'án' => 'å«•',
+ 'áo' => '嫪',
+ 'áp' => 'å«š',
+ 'áq' => 'å«',
+ 'ár' => 'å««',
+ 'ás' => '嫳',
+ 'át' => 'å«¢',
+ 'áu' => 'å« ',
+ 'áv' => 'å«›',
+ 'áw' => '嫬',
+ 'áx' => 'å«ž',
+ 'áy' => 'å«',
+ 'áz' => 'å«™',
+ 'á{' => '嫨',
+ 'á|' => 'å«Ÿ',
+ 'á}' => 'å·',
+ 'á~' => 'å¯ ',
+ 'á¡' => '寣',
+ 'á¢' => 'å±£',
+ 'á£' => '嶂',
+ 'á¤' => '嶀',
+ 'á¥' => 'åµ½',
+ 'á¦' => '嶆',
+ 'á§' => '嵺',
+ 'á¨' => 'å¶',
+ 'á©' => 'åµ·',
+ 'áª' => '嶊',
+ 'á«' => '嶉',
+ 'á¬' => '嶈',
+ 'á' => 'åµ¾',
+ 'á®' => 'åµ¼',
+ 'á¯' => 'å¶',
+ 'á°' => 'åµ¹',
+ 'á±' => '嵿',
+ 'á²' => '幘',
+ 'á³' => 'å¹™',
+ 'á´' => '幓',
+ 'áµ' => '廘',
+ 'á¶' => '廑',
+ 'á·' => 'å»—',
+ 'á¸' => '廎',
+ 'á¹' => '廜',
+ 'áº' => '廕',
+ 'á»' => 'å»™',
+ 'á¼' => 'å»’',
+ 'á½' => 'å»”',
+ 'á¾' => '彄',
+ 'á¿' => '彃',
+ 'áÀ' => '彯',
+ 'áÁ' => '徶',
+ 'áÂ' => '愬',
+ 'áÃ' => '愨',
+ 'áÄ' => 'æ…',
+ 'áÅ' => 'æ…ž',
+ 'áÆ' => 'æ…±',
+ 'áÇ' => 'æ…³',
+ 'áÈ' => 'æ…’',
+ 'áÉ' => 'æ…“',
+ 'áÊ' => 'æ…²',
+ 'áË' => 'æ…¬',
+ 'áÌ' => '憀',
+ 'áÍ' => 'æ…´',
+ 'áÎ' => 'æ…”',
+ 'áÏ' => 'æ…º',
+ 'áÐ' => 'æ…›',
+ 'áÑ' => 'æ…¥',
+ 'áÒ' => 'æ„»',
+ 'áÓ' => 'æ…ª',
+ 'áÔ' => 'æ…¡',
+ 'áÕ' => 'æ…–',
+ 'áÖ' => '戩',
+ 'á×' => '戧',
+ 'áØ' => '戫',
+ 'áÙ' => 'æ«',
+ 'áÚ' => 'æ‘',
+ 'áÛ' => 'æ‘›',
+ 'áÜ' => 'æ‘',
+ 'áÝ' => 'æ‘´',
+ 'áÞ' => '摶',
+ 'áß' => '摲',
+ 'áà' => '摳',
+ 'áá' => '摽',
+ 'áâ' => '摵',
+ 'áã' => '摦',
+ 'áä' => 'æ’¦',
+ 'áå' => 'æ‘Ž',
+ 'áæ' => 'æ’‚',
+ 'áç' => 'æ‘ž',
+ 'áè' => 'æ‘œ',
+ 'áé' => 'æ‘‹',
+ 'áê' => 'æ‘“',
+ 'áë' => 'æ‘ ',
+ 'áì' => 'æ‘',
+ 'áí' => 'æ‘¿',
+ 'áî' => 'æ¿',
+ 'áï' => '摬',
+ 'áð' => 'æ‘«',
+ 'áñ' => 'æ‘™',
+ 'áò' => 'æ‘¥',
+ 'áó' => 'æ‘·',
+ 'áô' => '敳',
+ 'áõ' => 'æ– ',
+ 'áö' => 'æš¡',
+ 'á÷' => 'æš ',
+ 'áø' => '暟',
+ 'áù' => '朅',
+ 'áú' => '朄',
+ 'áû' => '朢',
+ 'áü' => '榱',
+ 'áý' => '榶',
+ 'áþ' => '槉',
+ 'â@' => 'æ¦ ',
+ 'âA' => '槎',
+ 'âB' => '榖',
+ 'âC' => '榰',
+ 'âD' => '榬',
+ 'âE' => '榼',
+ 'âF' => '榑',
+ 'âG' => '榙',
+ 'âH' => '榎',
+ 'âI' => '榧',
+ 'âJ' => 'æ¦',
+ 'âK' => '榩',
+ 'âL' => '榾',
+ 'âM' => '榯',
+ 'âN' => '榿',
+ 'âO' => '槄',
+ 'âP' => '榽',
+ 'âQ' => '榤',
+ 'âR' => '槔',
+ 'âS' => '榹',
+ 'âT' => '槊',
+ 'âU' => '榚',
+ 'âV' => 'æ§',
+ 'âW' => '榳',
+ 'âX' => '榓',
+ 'âY' => '榪',
+ 'âZ' => '榡',
+ 'â[' => '榞',
+ 'â\\' => '槙',
+ 'â]' => '榗',
+ 'â^' => 'æ¦',
+ 'â_' => '槂',
+ 'â`' => '榵',
+ 'âa' => '榥',
+ 'âb' => '槆',
+ 'âc' => 'æŠ',
+ 'âd' => 'æ',
+ 'âe' => 'æ‹',
+ 'âf' => '殞',
+ 'âg' => '殟',
+ 'âh' => 'æ® ',
+ 'âi' => '毃',
+ 'âj' => '毄',
+ 'âk' => '毾',
+ 'âl' => '滎',
+ 'âm' => '滵',
+ 'ân' => 'æ»±',
+ 'âo' => '漃',
+ 'âp' => 'æ¼¥',
+ 'âq' => '滸',
+ 'âr' => 'æ¼·',
+ 'âs' => 'æ»»',
+ 'ât' => 'æ¼®',
+ 'âu' => '漉',
+ 'âv' => '潎',
+ 'âw' => 'æ¼™',
+ 'âx' => '漚',
+ 'ây' => '漧',
+ 'âz' => '漘',
+ 'â{' => 'æ¼»',
+ 'â|' => 'æ¼’',
+ 'â}' => 'æ»',
+ 'â~' => '漊',
+ 'â¡' => '漶',
+ 'â¢' => 'æ½³',
+ 'â£' => '滹',
+ 'â¤' => 'æ»®',
+ 'â¥' => 'æ¼',
+ 'â¦' => 'æ½€',
+ 'â§' => 'æ¼°',
+ 'â¨' => 'æ¼¼',
+ 'â©' => 'æ¼µ',
+ 'âª' => '滫',
+ 'â«' => '漇',
+ 'â¬' => '漎',
+ 'â' => '潃',
+ 'â®' => 'æ¼…',
+ 'â¯' => '滽',
+ 'â°' => '滶',
+ 'â±' => 'æ¼¹',
+ 'â²' => '漜',
+ 'â³' => '滼',
+ 'â´' => '漺',
+ 'âµ' => '漟',
+ 'â¶' => 'æ¼',
+ 'â·' => '漞',
+ 'â¸' => '漈',
+ 'â¹' => '漡',
+ 'âº' => '熇',
+ 'â»' => 'ç†',
+ 'â¼' => '熉',
+ 'â½' => '熀',
+ 'â¾' => '熅',
+ 'â¿' => '熂',
+ 'âÀ' => 'ç†',
+ 'âÁ' => 'ç…»',
+ 'âÂ' => '熆',
+ 'âÃ' => 'ç†',
+ 'âÄ' => '熗',
+ 'âÅ' => '牄',
+ 'âÆ' => '牓',
+ 'âÇ' => '犗',
+ 'âÈ' => '犕',
+ 'âÉ' => '犓',
+ 'âÊ' => 'çƒ',
+ 'âË' => 'ç',
+ 'âÌ' => 'ç‘',
+ 'âÍ' => 'çŒ',
+ 'âÎ' => 'ç‘¢',
+ 'âÏ' => '瑳',
+ 'âÐ' => '瑱',
+ 'âÑ' => '瑵',
+ 'âÒ' => '瑲',
+ 'âÓ' => '瑧',
+ 'âÔ' => 'ç‘®',
+ 'âÕ' => '甀',
+ 'âÖ' => '甂',
+ 'â×' => '甃',
+ 'âØ' => '畽',
+ 'âÙ' => 'ç–',
+ 'âÚ' => '瘖',
+ 'âÛ' => '瘈',
+ 'âÜ' => '瘌',
+ 'âÝ' => '瘕',
+ 'âÞ' => '瘑',
+ 'âß' => '瘊',
+ 'âà' => '瘔',
+ 'âá' => '皸',
+ 'ââ' => 'çž',
+ 'âã' => 'ç¼',
+ 'âä' => 'çž…',
+ 'âå' => 'çž‚',
+ 'âæ' => 'ç®',
+ 'âç' => '瞀',
+ 'âè' => 'ç¯',
+ 'âé' => 'ç¾',
+ 'âê' => '瞃',
+ 'âë' => '碲',
+ 'âì' => '碪',
+ 'âí' => '碴',
+ 'âî' => 'ç¢',
+ 'âï' => '碨',
+ 'âð' => '硾',
+ 'âñ' => '碫',
+ 'âò' => '碞',
+ 'âó' => '碥',
+ 'âô' => 'ç¢ ',
+ 'âõ' => '碬',
+ 'âö' => '碢',
+ 'â÷' => '碤',
+ 'âø' => '禘',
+ 'âù' => '禊',
+ 'âú' => '禋',
+ 'âû' => '禖',
+ 'âü' => '禕',
+ 'âý' => '禔',
+ 'âþ' => '禓',
+ 'ã@' => '禗',
+ 'ãA' => '禈',
+ 'ãB' => '禒',
+ 'ãC' => 'ç¦',
+ 'ãD' => '稫',
+ 'ãE' => 'ç©Š',
+ 'ãF' => '稰',
+ 'ãG' => '稯',
+ 'ãH' => '稨',
+ 'ãI' => '稦',
+ 'ãJ' => '窨',
+ 'ãK' => '窫',
+ 'ãL' => '窬',
+ 'ãM' => 'ç«®',
+ 'ãN' => '箈',
+ 'ãO' => '箜',
+ 'ãP' => '箊',
+ 'ãQ' => '箑',
+ 'ãR' => 'ç®',
+ 'ãS' => 'ç®–',
+ 'ãT' => 'ç®',
+ 'ãU' => '箌',
+ 'ãV' => 'ç®›',
+ 'ãW' => '箎',
+ 'ãX' => 'ç®…',
+ 'ãY' => '箘',
+ 'ãZ' => '劄',
+ 'ã[' => 'ç®™',
+ 'ã\\' => '箤',
+ 'ã]' => '箂',
+ 'ã^' => 'ç²»',
+ 'ã_' => '粿',
+ 'ã`' => 'ç²¼',
+ 'ãa' => '粺',
+ 'ãb' => '綧',
+ 'ãc' => '綷',
+ 'ãd' => 'ç·‚',
+ 'ãe' => '綣',
+ 'ãf' => '綪',
+ 'ãg' => 'ç·',
+ 'ãh' => 'ç·€',
+ 'ãi' => 'ç·…',
+ 'ãj' => 'ç¶',
+ 'ãk' => 'ç·Ž',
+ 'ãl' => 'ç·„',
+ 'ãm' => 'ç·†',
+ 'ãn' => 'ç·‹',
+ 'ão' => 'ç·Œ',
+ 'ãp' => '綯',
+ 'ãq' => '綹',
+ 'ãr' => '綖',
+ 'ãs' => '綼',
+ 'ãt' => '綟',
+ 'ãu' => '綦',
+ 'ãv' => '綮',
+ 'ãw' => '綩',
+ 'ãx' => '綡',
+ 'ãy' => 'ç·‰',
+ 'ãz' => 'ç½³',
+ 'ã{' => 'ç¿¢',
+ 'ã|' => 'ç¿£',
+ 'ã}' => 'ç¿¥',
+ 'ã~' => 'ç¿ž',
+ 'ã¡' => '耤',
+ 'ã¢' => 'è',
+ 'ã£' => 'èœ',
+ 'ã¤' => '膉',
+ 'ã¥' => '膆',
+ 'ã¦' => '膃',
+ 'ã§' => '膇',
+ 'ã¨' => 'è†',
+ 'ã©' => '膌',
+ 'ãª' => '膋',
+ 'ã«' => '舕',
+ 'ã¬' => 'è’—',
+ 'ã' => 'è’¤',
+ 'ã®' => 'è’¡',
+ 'ã¯' => 'è’Ÿ',
+ 'ã°' => 'è’º',
+ 'ã±' => 'è“Ž',
+ 'ã²' => 'è“‚',
+ 'ã³' => 'è’¬',
+ 'ã´' => 'è’®',
+ 'ãµ' => 'è’«',
+ 'ã¶' => 'è’¹',
+ 'ã·' => 'è’´',
+ 'ã¸' => 'è“',
+ 'ã¹' => 'è“',
+ 'ãº' => 'è’ª',
+ 'ã»' => 'è’š',
+ 'ã¼' => 'è’±',
+ 'ã½' => 'è“',
+ 'ã¾' => 'è’',
+ 'ã¿' => 'è’§',
+ 'ãÀ' => 'è’»',
+ 'ãÁ' => 'è’¢',
+ 'ãÂ' => 'è’”',
+ 'ãÃ' => '蓇',
+ 'ãÄ' => 'è“Œ',
+ 'ãÅ' => 'è’›',
+ 'ãÆ' => 'è’©',
+ 'ãÇ' => 'è’¯',
+ 'ãÈ' => 'è’¨',
+ 'ãÉ' => 'è“–',
+ 'ãÊ' => 'è’˜',
+ 'ãË' => 'è’¶',
+ 'ãÌ' => 'è“',
+ 'ãÍ' => 'è’ ',
+ 'ãÎ' => 'è“—',
+ 'ãÏ' => 'è“”',
+ 'ãÐ' => 'è“’',
+ 'ãÑ' => 'è“›',
+ 'ãÒ' => 'è’°',
+ 'ãÓ' => 'è’‘',
+ 'ãÔ' => '虡',
+ 'ãÕ' => '蜳',
+ 'ãÖ' => '蜣',
+ 'ã×' => '蜨',
+ 'ãØ' => 'è«',
+ 'ãÙ' => 'è€',
+ 'ãÚ' => '蜮',
+ 'ãÛ' => '蜞',
+ 'ãÜ' => '蜡',
+ 'ãÝ' => '蜙',
+ 'ãÞ' => '蜛',
+ 'ãß' => 'èƒ',
+ 'ãà' => '蜬',
+ 'ãá' => 'è',
+ 'ãâ' => '蜾',
+ 'ãã' => 'è†',
+ 'ãä' => 'èœ ',
+ 'ãå' => '蜲',
+ 'ãæ' => '蜪',
+ 'ãç' => 'èœ',
+ 'ãè' => '蜼',
+ 'ãé' => '蜒',
+ 'ãê' => '蜺',
+ 'ãë' => '蜱',
+ 'ãì' => '蜵',
+ 'ãí' => 'è‚',
+ 'ãî' => '蜦',
+ 'ãï' => '蜧',
+ 'ãð' => '蜸',
+ 'ãñ' => '蜤',
+ 'ãò' => '蜚',
+ 'ãó' => '蜰',
+ 'ãô' => '蜑',
+ 'ãõ' => '裷',
+ 'ãö' => '裧',
+ 'ã÷' => '裱',
+ 'ãø' => '裲',
+ 'ãù' => '裺',
+ 'ãú' => '裾',
+ 'ãû' => '裮',
+ 'ãü' => '裼',
+ 'ãý' => '裶',
+ 'ãþ' => '裻',
+ 'ä@' => '裰',
+ 'äA' => '裬',
+ 'äB' => '裫',
+ 'äC' => 'è¦',
+ 'äD' => '覡',
+ 'äE' => '覟',
+ 'äF' => '覞',
+ 'äG' => '觩',
+ 'äH' => '觫',
+ 'äI' => '觨',
+ 'äJ' => '誫',
+ 'äK' => '誙',
+ 'äL' => '誋',
+ 'äM' => '誒',
+ 'äN' => 'èª',
+ 'äO' => '誖',
+ 'äP' => 'è°½',
+ 'äQ' => '豨',
+ 'äR' => '豩',
+ 'äS' => '賕',
+ 'äT' => 'è³',
+ 'äU' => 'è³—',
+ 'äV' => '趖',
+ 'äW' => '踉',
+ 'äX' => '踂',
+ 'äY' => 'è·¿',
+ 'äZ' => 'è¸',
+ 'ä[' => 'è·½',
+ 'ä\\' => '踊',
+ 'ä]' => '踃',
+ 'ä^' => '踇',
+ 'ä_' => '踆',
+ 'ä`' => '踅',
+ 'äa' => 'è·¾',
+ 'äb' => '踀',
+ 'äc' => '踄',
+ 'äd' => 'è¼',
+ 'äe' => '輑',
+ 'äf' => '輎',
+ 'äg' => 'è¼',
+ 'äh' => 'é„£',
+ 'äi' => 'é„œ',
+ 'äj' => 'é„ ',
+ 'äk' => 'é„¢',
+ 'äl' => 'é„Ÿ',
+ 'äm' => 'é„',
+ 'än' => 'é„š',
+ 'äo' => '鄤',
+ 'äp' => 'é„¡',
+ 'äq' => 'é„›',
+ 'är' => 'é…º',
+ 'äs' => 'é…²',
+ 'ät' => 'é…¹',
+ 'äu' => 'é…³',
+ 'äv' => '銥',
+ 'äw' => '銤',
+ 'äx' => '鉶',
+ 'äy' => '銛',
+ 'äz' => '鉺',
+ 'ä{' => 'éŠ ',
+ 'ä|' => '銔',
+ 'ä}' => '銪',
+ 'ä~' => 'éŠ',
+ 'ä¡' => '銦',
+ 'ä¢' => '銚',
+ 'ä£' => '銫',
+ 'ä¤' => '鉹',
+ 'ä¥' => '銗',
+ 'ä¦' => '鉿',
+ 'ä§' => '銣',
+ 'ä¨' => 'é‹®',
+ 'ä©' => '銎',
+ 'äª' => '銂',
+ 'ä«' => '銕',
+ 'ä¬' => '銢',
+ 'ä' => '鉽',
+ 'ä®' => '銈',
+ 'ä¯' => '銡',
+ 'ä°' => '銊',
+ 'ä±' => '銆',
+ 'ä²' => '銌',
+ 'ä³' => '銙',
+ 'ä´' => '銧',
+ 'äµ' => '鉾',
+ 'ä¶' => '銇',
+ 'ä·' => '銩',
+ 'ä¸' => 'éŠ',
+ 'ä¹' => '銋',
+ 'äº' => 'éˆ',
+ 'ä»' => 'éšž',
+ 'ä¼' => 'éš¡',
+ 'ä½' => '雿',
+ 'ä¾' => 'é˜',
+ 'ä¿' => 'é½',
+ 'äÀ' => 'éº',
+ 'äÁ' => 'é¾',
+ 'äÂ' => '鞃',
+ 'äÃ' => '鞀',
+ 'äÄ' => 'éž‚',
+ 'äÅ' => 'é»',
+ 'äÆ' => 'éž„',
+ 'äÇ' => 'éž',
+ 'äÈ' => 'é¿',
+ 'äÉ' => '韎',
+ 'äÊ' => 'éŸ',
+ 'äË' => 'é –',
+ 'äÌ' => 'é¢',
+ 'äÍ' => '颮',
+ 'äÎ' => '餂',
+ 'äÏ' => '餀',
+ 'äÐ' => '餇',
+ 'äÑ' => 'é¦',
+ 'äÒ' => '馜',
+ 'äÓ' => '駃',
+ 'äÔ' => '馹',
+ 'äÕ' => '馻',
+ 'äÖ' => '馺',
+ 'ä×' => '駂',
+ 'äØ' => '馽',
+ 'äÙ' => '駇',
+ 'äÚ' => '骱',
+ 'äÛ' => 'é«£',
+ 'äÜ' => '髧',
+ 'äÝ' => '鬾',
+ 'äÞ' => '鬿',
+ 'äß' => 'é ',
+ 'äà' => 'é¡',
+ 'äá' => 'éŸ',
+ 'äâ' => 'é³±',
+ 'äã' => 'é³²',
+ 'ää' => 'é³µ',
+ 'äå' => '麧',
+ 'äæ' => '僿',
+ 'äç' => '儃',
+ 'äè' => 'å„°',
+ 'äé' => '僸',
+ 'äê' => '儆',
+ 'äë' => '儇',
+ 'äì' => '僶',
+ 'äí' => '僾',
+ 'äî' => 'å„‹',
+ 'äï' => 'å„Œ',
+ 'äð' => '僽',
+ 'äñ' => 'å„Š',
+ 'äò' => '劋',
+ 'äó' => '劌',
+ 'äô' => '勱',
+ 'äõ' => '勯',
+ 'äö' => '噈',
+ 'ä÷' => '噂',
+ 'äø' => '噌',
+ 'äù' => '嘵',
+ 'äú' => 'å™',
+ 'äû' => '噊',
+ 'äü' => '噉',
+ 'äý' => '噆',
+ 'äþ' => '噘',
+ 'å@' => '噚',
+ 'åA' => '噀',
+ 'åB' => '嘳',
+ 'åC' => '嘽',
+ 'åD' => '嘬',
+ 'åE' => '嘾',
+ 'åF' => '嘸',
+ 'åG' => '嘪',
+ 'åH' => '嘺',
+ 'åI' => '圚',
+ 'åJ' => '墫',
+ 'åK' => 'å¢',
+ 'åL' => '墱',
+ 'åM' => 'å¢ ',
+ 'åN' => '墣',
+ 'åO' => '墯',
+ 'åP' => '墬',
+ 'åQ' => '墥',
+ 'åR' => '墡',
+ 'åS' => '壿',
+ 'åT' => 'å«¿',
+ 'åU' => 'å«´',
+ 'åV' => '嫽',
+ 'åW' => 'å«·',
+ 'åX' => '嫶',
+ 'åY' => '嬃',
+ 'åZ' => '嫸',
+ 'å[' => '嬂',
+ 'å\\' => '嫹',
+ 'å]' => 'å¬',
+ 'å^' => '嬇',
+ 'å_' => '嬅',
+ 'å`' => 'å¬',
+ 'åa' => '屧',
+ 'åb' => '嶙',
+ 'åc' => '嶗',
+ 'åd' => '嶟',
+ 'åe' => '嶒',
+ 'åf' => '嶢',
+ 'åg' => '嶓',
+ 'åh' => '嶕',
+ 'åi' => 'å¶ ',
+ 'åj' => '嶜',
+ 'åk' => '嶡',
+ 'ål' => '嶚',
+ 'åm' => '嶞',
+ 'ån' => '幩',
+ 'åo' => 'å¹',
+ 'åp' => 'å¹ ',
+ 'åq' => '幜',
+ 'år' => 'ç·³',
+ 'ås' => 'å»›',
+ 'åt' => '廞',
+ 'åu' => '廡',
+ 'åv' => '彉',
+ 'åw' => 'å¾²',
+ 'åx' => '憋',
+ 'åy' => '憃',
+ 'åz' => 'æ…¹',
+ 'å{' => '憱',
+ 'å|' => '憰',
+ 'å}' => '憢',
+ 'å~' => '憉',
+ 'å¡' => '憛',
+ 'å¢' => '憓',
+ 'å£' => '憯',
+ 'å¤' => 'æ†',
+ 'å¥' => '憟',
+ 'å¦' => '憒',
+ 'å§' => '憪',
+ 'å¨' => '憡',
+ 'å©' => 'æ†',
+ 'åª' => 'æ…¦',
+ 'å«' => '憳',
+ 'å¬' => 'æˆ',
+ 'å' => 'æ‘®',
+ 'å®' => 'æ‘°',
+ 'å¯' => 'æ’–',
+ 'å°' => 'æ’ ',
+ 'å±' => 'æ’…',
+ 'å²' => 'æ’—',
+ 'å³' => 'æ’œ',
+ 'å´' => 'æ’',
+ 'åµ' => 'æ’‹',
+ 'å¶' => 'æ’Š',
+ 'å·' => 'æ’Œ',
+ 'å¸' => 'æ’£',
+ 'å¹' => 'æ’Ÿ',
+ 'åº' => '摨',
+ 'å»' => 'æ’±',
+ 'å¼' => 'æ’˜',
+ 'å½' => '敶',
+ 'å¾' => '敺',
+ 'å¿' => '敹',
+ 'åÀ' => 'æ•»',
+ 'åÁ' => 'æ–²',
+ 'åÂ' => 'æ–³',
+ 'åÃ' => 'æšµ',
+ 'åÄ' => 'æš°',
+ 'åÅ' => 'æš©',
+ 'åÆ' => 'æš²',
+ 'åÇ' => 'æš·',
+ 'åÈ' => '暪',
+ 'åÉ' => '暯',
+ 'åÊ' => '樀',
+ 'åË' => '樆',
+ 'åÌ' => '樗',
+ 'åÍ' => '槥',
+ 'åÎ' => '槸',
+ 'åÏ' => '樕',
+ 'åÐ' => '槱',
+ 'åÑ' => '槤',
+ 'åÒ' => 'æ¨ ',
+ 'åÓ' => '槿',
+ 'åÔ' => '槬',
+ 'åÕ' => '槢',
+ 'åÖ' => '樛',
+ 'å×' => 'æ¨',
+ 'åØ' => '槾',
+ 'åÙ' => '樧',
+ 'åÚ' => '槲',
+ 'åÛ' => '槮',
+ 'åÜ' => '樔',
+ 'åÝ' => '槷',
+ 'åÞ' => '槧',
+ 'åß' => 'æ©€',
+ 'åà' => '樈',
+ 'åá' => '槦',
+ 'åâ' => '槻',
+ 'åã' => 'æ¨',
+ 'åä' => '槼',
+ 'åå' => '槫',
+ 'åæ' => '樉',
+ 'åç' => '樄',
+ 'åè' => '樘',
+ 'åé' => '樥',
+ 'åê' => 'æ¨',
+ 'åë' => '槶',
+ 'åì' => '樦',
+ 'åí' => '樇',
+ 'åî' => '槴',
+ 'åï' => '樖',
+ 'åð' => 'æ‘',
+ 'åñ' => '殥',
+ 'åò' => '殣',
+ 'åó' => '殢',
+ 'åô' => '殦',
+ 'åõ' => 'æ°',
+ 'åö' => 'æ°€',
+ 'å÷' => '毿',
+ 'åø' => 'æ°‚',
+ 'åù' => 'æ½',
+ 'åú' => '漦',
+ 'åû' => 'æ½¾',
+ 'åü' => '澇',
+ 'åý' => '濆',
+ 'åþ' => 'æ¾’',
+ 'æ@' => 'æ¾',
+ 'æA' => '澉',
+ 'æB' => '澌',
+ 'æC' => 'æ½¢',
+ 'æD' => 'æ½',
+ 'æE' => 'æ¾…',
+ 'æF' => '潚',
+ 'æG' => 'æ¾–',
+ 'æH' => '潶',
+ 'æI' => '潬',
+ 'æJ' => '澂',
+ 'æK' => '潕',
+ 'æL' => 'æ½²',
+ 'æM' => 'æ½’',
+ 'æN' => 'æ½',
+ 'æO' => 'æ½—',
+ 'æP' => 'æ¾”',
+ 'æQ' => '澓',
+ 'æR' => 'æ½',
+ 'æS' => 'æ¼€',
+ 'æT' => '潡',
+ 'æU' => '潫',
+ 'æV' => 'æ½½',
+ 'æW' => '潧',
+ 'æX' => 'æ¾',
+ 'æY' => '潓',
+ 'æZ' => '澋',
+ 'æ[' => '潩',
+ 'æ\\' => '潿',
+ 'æ]' => '澕',
+ 'æ^' => 'æ½£',
+ 'æ_' => 'æ½·',
+ 'æ`' => '潪',
+ 'æa' => 'æ½»',
+ 'æb' => '熲',
+ 'æc' => '熯',
+ 'æd' => '熛',
+ 'æe' => '熰',
+ 'æf' => 'ç† ',
+ 'æg' => '熚',
+ 'æh' => '熩',
+ 'æi' => '熵',
+ 'æj' => 'ç†',
+ 'æk' => '熥',
+ 'æl' => '熞',
+ 'æm' => '熤',
+ 'æn' => '熡',
+ 'æo' => '熪',
+ 'æp' => '熜',
+ 'æq' => '熧',
+ 'ær' => '熳',
+ 'æs' => '犘',
+ 'æt' => '犚',
+ 'æu' => 'ç˜',
+ 'æv' => 'ç’',
+ 'æw' => 'çž',
+ 'æx' => 'çŸ',
+ 'æy' => 'ç ',
+ 'æz' => 'ç',
+ 'æ{' => 'ç›',
+ 'æ|' => 'ç¡',
+ 'æ}' => 'çš',
+ 'æ~' => 'ç™',
+ 'æ¡' => 'ç¢',
+ 'æ¢' => 'ç’‡',
+ 'æ£' => 'ç’‰',
+ 'æ¤' => 'ç’Š',
+ 'æ¥' => 'ç’†',
+ 'æ¦' => 'ç’',
+ 'æ§' => '瑽',
+ 'æ¨' => 'ç’…',
+ 'æ©' => 'ç’ˆ',
+ 'æª' => '瑼',
+ 'æ«' => '瑹',
+ 'æ¬' => '甈',
+ 'æ' => '甇',
+ 'æ®' => '畾',
+ 'æ¯' => '瘥',
+ 'æ°' => '瘞',
+ 'æ±' => '瘙',
+ 'æ²' => 'ç˜',
+ 'æ³' => '瘜',
+ 'æ´' => '瘣',
+ 'æµ' => '瘚',
+ 'æ¶' => '瘨',
+ 'æ·' => '瘛',
+ 'æ¸' => 'çšœ',
+ 'æ¹' => 'çš',
+ 'æº' => 'çšž',
+ 'æ»' => 'çš›',
+ 'æ¼' => 'çž',
+ 'æ½' => 'çž',
+ 'æ¾' => '瞉',
+ 'æ¿' => '瞈',
+ 'æÀ' => 'ç£',
+ 'æÁ' => '碻',
+ 'æÂ' => 'ç£',
+ 'æÃ' => '磌',
+ 'æÄ' => '磑',
+ 'æÅ' => '磎',
+ 'æÆ' => '磔',
+ 'æÇ' => '磈',
+ 'æÈ' => '磃',
+ 'æÉ' => '磄',
+ 'æÊ' => '磉',
+ 'æË' => '禚',
+ 'æÌ' => '禡',
+ 'æÍ' => 'ç¦ ',
+ 'æÎ' => '禜',
+ 'æÏ' => '禢',
+ 'æÐ' => '禛',
+ 'æÑ' => 'æ¶',
+ 'æÒ' => '稹',
+ 'æÓ' => '窲',
+ 'æÔ' => '窴',
+ 'æÕ' => '窳',
+ 'æÖ' => 'ç®·',
+ 'æ×' => '篋',
+ 'æØ' => '箾',
+ 'æÙ' => '箬',
+ 'æÚ' => '篎',
+ 'æÛ' => '箯',
+ 'æÜ' => '箹',
+ 'æÝ' => '篊',
+ 'æÞ' => '箵',
+ 'æß' => 'ç³…',
+ 'æà' => '糈',
+ 'æá' => '糌',
+ 'æâ' => '糋',
+ 'æã' => 'ç··',
+ 'æä' => 'ç·›',
+ 'æå' => 'ç·ª',
+ 'ææ' => 'ç·§',
+ 'æç' => 'ç·—',
+ 'æè' => 'ç·¡',
+ 'æé' => '縃',
+ 'æê' => 'ç·º',
+ 'æë' => 'ç·¦',
+ 'æì' => 'ç·¶',
+ 'æí' => 'ç·±',
+ 'æî' => 'ç·°',
+ 'æï' => 'ç·®',
+ 'æð' => 'ç·Ÿ',
+ 'æñ' => '罶',
+ 'æò' => '羬',
+ 'æó' => 'ç¾°',
+ 'æô' => 'ç¾',
+ 'æõ' => 'ç¿',
+ 'æö' => 'ç¿«',
+ 'æ÷' => '翪',
+ 'æø' => '翬',
+ 'æù' => '翦',
+ 'æú' => '翨',
+ 'æû' => 'è¤',
+ 'æü' => 'è§',
+ 'æý' => '膣',
+ 'æþ' => '膟',
+ 'ç@' => '膞',
+ 'çA' => '膕',
+ 'çB' => '膢',
+ 'çC' => '膙',
+ 'çD' => '膗',
+ 'çE' => '舖',
+ 'çF' => 'è‰',
+ 'çG' => '艓',
+ 'çH' => '艒',
+ 'çI' => 'è‰',
+ 'çJ' => '艎',
+ 'çK' => '艑',
+ 'çL' => '蔤',
+ 'çM' => 'è”»',
+ 'çN' => 'è”',
+ 'çO' => '蔀',
+ 'çP' => '蔩',
+ 'çQ' => '蔎',
+ 'çR' => '蔉',
+ 'çS' => 'è”',
+ 'çT' => '蔟',
+ 'çU' => '蔊',
+ 'çV' => '蔧',
+ 'çW' => '蔜',
+ 'çX' => 'è“»',
+ 'çY' => '蔫',
+ 'çZ' => '蓺',
+ 'ç[' => '蔈',
+ 'ç\\' => '蔌',
+ 'ç]' => 'è“´',
+ 'ç^' => '蔪',
+ 'ç_' => '蓲',
+ 'ç`' => '蔕',
+ 'ça' => 'è“·',
+ 'çb' => 'è“«',
+ 'çc' => '蓳',
+ 'çd' => '蓼',
+ 'çe' => 'è”’',
+ 'çf' => '蓪',
+ 'çg' => 'è“©',
+ 'çh' => 'è”–',
+ 'çi' => '蓾',
+ 'çj' => '蔨',
+ 'çk' => 'è”',
+ 'çl' => 'è”®',
+ 'çm' => '蔂',
+ 'çn' => '蓽',
+ 'ço' => '蔞',
+ 'çp' => '蓶',
+ 'çq' => 'è”±',
+ 'çr' => '蔦',
+ 'çs' => '蓧',
+ 'çt' => '蓨',
+ 'çu' => 'è“°',
+ 'çv' => '蓯',
+ 'çw' => '蓹',
+ 'çx' => '蔘',
+ 'çy' => 'è” ',
+ 'çz' => 'è”°',
+ 'ç{' => '蔋',
+ 'ç|' => 'è”™',
+ 'ç}' => '蔯',
+ 'ç~' => '虢',
+ 'ç¡' => 'è–',
+ 'ç¢' => 'è£',
+ 'ç£' => 'è¤',
+ 'ç¤' => 'è·',
+ 'ç¥' => '蟡',
+ 'ç¦' => 'è³',
+ 'ç§' => 'è˜',
+ 'ç¨' => 'è”',
+ 'ç©' => 'è›',
+ 'çª' => 'è’',
+ 'ç«' => 'è¡',
+ 'ç¬' => 'èš',
+ 'ç' => 'è‘',
+ 'ç®' => 'èž',
+ 'ç¯' => 'è',
+ 'ç°' => 'èª',
+ 'ç±' => 'è',
+ 'ç²' => 'èŽ',
+ 'ç³' => 'èŸ',
+ 'ç´' => 'è',
+ 'çµ' => 'è¯',
+ 'ç¶' => 'è¬',
+ 'ç·' => 'èº',
+ 'ç¸' => 'è®',
+ 'ç¹' => 'èœ',
+ 'çº' => 'è¥',
+ 'ç»' => 'è',
+ 'ç¼' => 'è»',
+ 'ç½' => 'èµ',
+ 'ç¾' => 'è¢',
+ 'ç¿' => 'è§',
+ 'çÀ' => 'è©',
+ 'çÁ' => 'è¡š',
+ 'çÂ' => '褅',
+ 'çÃ' => '褌',
+ 'çÄ' => '褔',
+ 'çÅ' => '褋',
+ 'çÆ' => '褗',
+ 'çÇ' => '褘',
+ 'çÈ' => '褙',
+ 'çÉ' => '褆',
+ 'çÊ' => '褖',
+ 'çË' => '褑',
+ 'çÌ' => '褎',
+ 'çÍ' => '褉',
+ 'çÎ' => '覢',
+ 'çÏ' => '覤',
+ 'çÐ' => '覣',
+ 'çÑ' => 'è§',
+ 'çÒ' => '觰',
+ 'çÓ' => '觬',
+ 'çÔ' => 'è«',
+ 'çÕ' => '諆',
+ 'çÖ' => '誸',
+ 'ç×' => 'è«“',
+ 'çØ' => 'è«‘',
+ 'çÙ' => 'è«”',
+ 'çÚ' => 'è«•',
+ 'çÛ' => '誻',
+ 'çÜ' => 'è«—',
+ 'çÝ' => '誾',
+ 'çÞ' => 'è«€',
+ 'çß' => 'è«…',
+ 'çà' => '諘',
+ 'çá' => '諃',
+ 'çâ' => '誺',
+ 'çã' => '誽',
+ 'çä' => 'è«™',
+ 'çå' => 'è°¾',
+ 'çæ' => 'è±',
+ 'çç' => 'è²',
+ 'çè' => 'è³¥',
+ 'çé' => '賟',
+ 'çê' => 'è³™',
+ 'çë' => '賨',
+ 'çì' => '賚',
+ 'çí' => 'è³',
+ 'çî' => '賧',
+ 'çï' => 'è¶ ',
+ 'çð' => '趜',
+ 'çñ' => '趡',
+ 'çò' => '趛',
+ 'çó' => 'è¸ ',
+ 'çô' => '踣',
+ 'çõ' => '踥',
+ 'çö' => '踤',
+ 'ç÷' => '踮',
+ 'çø' => '踕',
+ 'çù' => '踛',
+ 'çú' => '踖',
+ 'çû' => '踑',
+ 'çü' => '踙',
+ 'çý' => '踦',
+ 'çþ' => '踧',
+ 'è@' => '踔',
+ 'èA' => '踒',
+ 'èB' => '踘',
+ 'èC' => '踓',
+ 'èD' => '踜',
+ 'èE' => '踗',
+ 'èF' => '踚',
+ 'èG' => '輬',
+ 'èH' => '輤',
+ 'èI' => '輘',
+ 'èJ' => '輚',
+ 'èK' => 'è¼ ',
+ 'èL' => 'è¼£',
+ 'èM' => 'è¼–',
+ 'èN' => 'è¼—',
+ 'èO' => 'é³',
+ 'èP' => 'é°',
+ 'èQ' => 'é¯',
+ 'èR' => 'é§',
+ 'èS' => 'é«',
+ 'èT' => '鄯',
+ 'èU' => 'é„«',
+ 'èV' => 'é„©',
+ 'èW' => '鄪',
+ 'èX' => '鄲',
+ 'èY' => '鄦',
+ 'èZ' => 'é„®',
+ 'è[' => '醅',
+ 'è\\' => '醆',
+ 'è]' => '醊',
+ 'è^' => 'é†',
+ 'è_' => '醂',
+ 'è`' => '醄',
+ 'èa' => '醀',
+ 'èb' => 'é‹',
+ 'èc' => '鋃',
+ 'èd' => 'é‹„',
+ 'èe' => 'é‹€',
+ 'èf' => 'é‹™',
+ 'èg' => '銶',
+ 'èh' => 'é‹',
+ 'èi' => '鋱',
+ 'èj' => 'é‹Ÿ',
+ 'èk' => '鋘',
+ 'èl' => 'é‹©',
+ 'èm' => 'é‹—',
+ 'èn' => 'é‹',
+ 'èo' => 'é‹Œ',
+ 'èp' => '鋯',
+ 'èq' => 'é‹‚',
+ 'èr' => '鋨',
+ 'ès' => 'é‹Š',
+ 'èt' => '鋈',
+ 'èu' => 'é‹Ž',
+ 'èv' => '鋦',
+ 'èw' => 'é‹',
+ 'èx' => 'é‹•',
+ 'èy' => '鋉',
+ 'èz' => 'é‹ ',
+ 'è{' => 'é‹ž',
+ 'è|' => '鋧',
+ 'è}' => 'é‹‘',
+ 'è~' => 'é‹“',
+ 'è¡' => '銵',
+ 'è¢' => 'é‹¡',
+ 'è£' => '鋆',
+ 'è¤' => '銴',
+ 'è¥' => '镼',
+ 'è¦' => 'é–¬',
+ 'è§' => 'é–«',
+ 'è¨' => 'é–®',
+ 'è©' => 'é–°',
+ 'èª' => '隤',
+ 'è«' => '隢',
+ 'è¬' => '雓',
+ 'è' => '霅',
+ 'è®' => '霈',
+ 'è¯' => '霂',
+ 'è°' => 'éš',
+ 'è±' => '鞊',
+ 'è²' => '鞎',
+ 'è³' => '鞈',
+ 'è´' => 'éŸ',
+ 'èµ' => 'éŸ',
+ 'è¶' => 'é ž',
+ 'è·' => 'é ',
+ 'è¸' => 'é ¦',
+ 'è¹' => 'é ©',
+ 'èº' => 'é ¨',
+ 'è»' => 'é ',
+ 'è¼' => 'é ›',
+ 'è½' => 'é §',
+ 'è¾' => '颲',
+ 'è¿' => '餈',
+ 'èÀ' => '飺',
+ 'èÁ' => '餑',
+ 'èÂ' => '餔',
+ 'èÃ' => '餖',
+ 'èÄ' => '餗',
+ 'èÅ' => '餕',
+ 'èÆ' => '駜',
+ 'èÇ' => 'é§',
+ 'èÈ' => 'é§',
+ 'èÉ' => '駓',
+ 'èÊ' => '駔',
+ 'èË' => '駎',
+ 'èÌ' => '駉',
+ 'èÍ' => '駖',
+ 'èÎ' => '駘',
+ 'èÏ' => '駋',
+ 'èÐ' => '駗',
+ 'èÑ' => '駌',
+ 'èÒ' => '骳',
+ 'èÓ' => '髬',
+ 'èÔ' => 'é««',
+ 'èÕ' => '髳',
+ 'èÖ' => '髲',
+ 'è×' => '髱',
+ 'èØ' => 'é†',
+ 'èÙ' => 'éƒ',
+ 'èÚ' => 'é§',
+ 'èÛ' => 'é´',
+ 'èÜ' => 'é±',
+ 'èÝ' => 'é¦',
+ 'èÞ' => 'é¶',
+ 'èß' => 'éµ',
+ 'èà' => 'é°',
+ 'èá' => 'é¨',
+ 'èâ' => 'é¤',
+ 'èã' => 'é¬',
+ 'èä' => 'é³¼',
+ 'èå' => '鳺',
+ 'èæ' => 'é³½',
+ 'èç' => '鳿',
+ 'èè' => 'é³·',
+ 'èé' => 'é´‡',
+ 'èê' => 'é´€',
+ 'èë' => 'é³¹',
+ 'èì' => 'é³»',
+ 'èí' => 'é´ˆ',
+ 'èî' => 'é´…',
+ 'èï' => 'é´„',
+ 'èð' => '麃',
+ 'èñ' => '黓',
+ 'èò' => 'é¼',
+ 'èó' => 'é¼',
+ 'èô' => 'å„œ',
+ 'èõ' => 'å„“',
+ 'èö' => 'å„—',
+ 'è÷' => 'å„š',
+ 'èø' => 'å„‘',
+ 'èù' => '凞',
+ 'èú' => '匴',
+ 'èû' => 'å¡',
+ 'èü' => 'å™°',
+ 'èý' => 'å™ ',
+ 'èþ' => 'å™®',
+ 'é@' => '噳',
+ 'éA' => '噦',
+ 'éB' => '噣',
+ 'éC' => 'å™',
+ 'éD' => '噲',
+ 'éE' => '噞',
+ 'éF' => 'å™·',
+ 'éG' => '圜',
+ 'éH' => '圛',
+ 'éI' => '壈',
+ 'éJ' => '墽',
+ 'éK' => '壉',
+ 'éL' => '墿',
+ 'éM' => '墺',
+ 'éN' => '壂',
+ 'éO' => '墼',
+ 'éP' => '壆',
+ 'éQ' => '嬗',
+ 'éR' => '嬙',
+ 'éS' => '嬛',
+ 'éT' => '嬡',
+ 'éU' => '嬔',
+ 'éV' => '嬓',
+ 'éW' => 'å¬',
+ 'éX' => '嬖',
+ 'éY' => '嬨',
+ 'éZ' => '嬚',
+ 'é[' => 'å¬ ',
+ 'é\\' => '嬞',
+ 'é]' => '寯',
+ 'é^' => '嶬',
+ 'é_' => '嶱',
+ 'é`' => '嶩',
+ 'éa' => '嶧',
+ 'éb' => '嶵',
+ 'éc' => '嶰',
+ 'éd' => '嶮',
+ 'ée' => '嶪',
+ 'éf' => '嶨',
+ 'ég' => '嶲',
+ 'éh' => 'å¶',
+ 'éi' => '嶯',
+ 'éj' => '嶴',
+ 'ék' => '幧',
+ 'él' => '幨',
+ 'ém' => '幦',
+ 'én' => '幯',
+ 'éo' => '廩',
+ 'ép' => '廧',
+ 'éq' => '廦',
+ 'ér' => '廨',
+ 'és' => '廥',
+ 'ét' => '彋',
+ 'éu' => 'å¾¼',
+ 'év' => 'æ†',
+ 'éw' => '憨',
+ 'éx' => '憖',
+ 'éy' => '懅',
+ 'éz' => '憴',
+ 'é{' => '懆',
+ 'é|' => 'æ‡',
+ 'é}' => '懌',
+ 'é~' => '憺',
+ 'é¡' => '憿',
+ 'é¢' => '憸',
+ 'é£' => '憌',
+ 'é¤' => 'æ“—',
+ 'é¥' => 'æ“–',
+ 'é¦' => 'æ“',
+ 'é§' => 'æ“',
+ 'é¨' => '擉',
+ 'é©' => 'æ’½',
+ 'éª' => 'æ’‰',
+ 'é«' => '擃',
+ 'é¬' => 'æ“›',
+ 'é' => '擳',
+ 'é®' => 'æ“™',
+ 'é¯' => '攳',
+ 'é°' => 'æ•¿',
+ 'é±' => '敼',
+ 'é²' => 'æ–¢',
+ 'é³' => '曈',
+ 'é´' => 'æš¾',
+ 'éµ' => '曀',
+ 'é¶' => '曊',
+ 'é·' => '曋',
+ 'é¸' => 'æ›',
+ 'é¹' => 'æš½',
+ 'éº' => 'æš»',
+ 'é»' => '暺',
+ 'é¼' => '曌',
+ 'é½' => '朣',
+ 'é¾' => '樴',
+ 'é¿' => '橦',
+ 'éÀ' => '橉',
+ 'éÁ' => '橧',
+ 'éÂ' => '樲',
+ 'éÃ' => '橨',
+ 'éÄ' => '樾',
+ 'éÅ' => 'æ©',
+ 'éÆ' => 'æ©',
+ 'éÇ' => '橶',
+ 'éÈ' => 'æ©›',
+ 'éÉ' => 'æ©‘',
+ 'éÊ' => '樨',
+ 'éË' => 'æ©š',
+ 'éÌ' => '樻',
+ 'éÍ' => '樿',
+ 'éÎ' => 'æ©',
+ 'éÏ' => '橪',
+ 'éÐ' => '橤',
+ 'éÑ' => 'æ©',
+ 'éÒ' => 'æ©',
+ 'éÓ' => 'æ©”',
+ 'éÔ' => '橯',
+ 'éÕ' => 'æ©©',
+ 'éÖ' => 'æ© ',
+ 'é×' => '樼',
+ 'éØ' => 'æ©ž',
+ 'éÙ' => 'æ©–',
+ 'éÚ' => 'æ©•',
+ 'éÛ' => 'æ©',
+ 'éÜ' => 'æ©Ž',
+ 'éÝ' => '橆',
+ 'éÞ' => 'æ•',
+ 'éß' => 'æ”',
+ 'éà' => 'æ–',
+ 'éá' => '殧',
+ 'éâ' => '殪',
+ 'éã' => '殫',
+ 'éä' => '毈',
+ 'éå' => '毇',
+ 'éæ' => 'æ°„',
+ 'éç' => 'æ°ƒ',
+ 'éè' => 'æ°†',
+ 'éé' => 'æ¾',
+ 'éê' => 'æ¿‹',
+ 'éë' => 'æ¾£',
+ 'éì' => '濇',
+ 'éí' => 'æ¾¼',
+ 'éî' => 'æ¿Ž',
+ 'éï' => '濈',
+ 'éð' => '潞',
+ 'éñ' => 'æ¿„',
+ 'éò' => 'æ¾½',
+ 'éó' => '澞',
+ 'éô' => 'æ¿Š',
+ 'éõ' => '澨',
+ 'éö' => '瀄',
+ 'é÷' => 'æ¾¥',
+ 'éø' => 'æ¾®',
+ 'éù' => '澺',
+ 'éú' => '澬',
+ 'éû' => '澪',
+ 'éü' => 'æ¿',
+ 'éý' => '澿',
+ 'éþ' => '澸',
+ 'ê@' => 'æ¾¢',
+ 'êA' => '濉',
+ 'êB' => '澫',
+ 'êC' => 'æ¿',
+ 'êD' => '澯',
+ 'êE' => 'æ¾²',
+ 'êF' => 'æ¾°',
+ 'êG' => '燅',
+ 'êH' => '燂',
+ 'êI' => '熿',
+ 'êJ' => '熸',
+ 'êK' => '燖',
+ 'êL' => '燀',
+ 'êM' => 'ç‡',
+ 'êN' => '燋',
+ 'êO' => '燔',
+ 'êP' => '燊',
+ 'êQ' => '燇',
+ 'êR' => 'ç‡',
+ 'êS' => '熽',
+ 'êT' => '燘',
+ 'êU' => '熼',
+ 'êV' => '燆',
+ 'êW' => '燚',
+ 'êX' => '燛',
+ 'êY' => 'çŠ',
+ 'êZ' => '犞',
+ 'ê[' => 'ç©',
+ 'ê\\' => 'ç¦',
+ 'ê]' => 'ç§',
+ 'ê^' => 'ç¬',
+ 'ê_' => 'ç¥',
+ 'ê`' => 'ç«',
+ 'êa' => 'çª',
+ 'êb' => 'ç‘¿',
+ 'êc' => 'ç’š',
+ 'êd' => 'ç’ ',
+ 'êe' => 'ç’”',
+ 'êf' => 'ç’’',
+ 'êg' => 'ç’•',
+ 'êh' => 'ç’¡',
+ 'êi' => '甋',
+ 'êj' => 'ç–€',
+ 'êk' => '瘯',
+ 'êl' => 'ç˜',
+ 'êm' => '瘱',
+ 'ên' => '瘽',
+ 'êo' => '瘳',
+ 'êp' => '瘼',
+ 'êq' => '瘵',
+ 'êr' => '瘲',
+ 'ês' => '瘰',
+ 'êt' => 'çš»',
+ 'êu' => '盦',
+ 'êv' => 'çžš',
+ 'êw' => 'çž',
+ 'êx' => 'çž¡',
+ 'êy' => 'çžœ',
+ 'êz' => 'çž›',
+ 'ê{' => '瞢',
+ 'ê|' => '瞣',
+ 'ê}' => 'çž•',
+ 'ê~' => 'çž™',
+ 'ê¡' => 'çž—',
+ 'ê¢' => 'ç£',
+ 'ê£' => '磩',
+ 'ê¤' => '磥',
+ 'ê¥' => '磪',
+ 'ê¦' => '磞',
+ 'ê§' => '磣',
+ 'ê¨' => '磛',
+ 'ê©' => '磡',
+ 'êª' => '磢',
+ 'ê«' => 'ç£',
+ 'ê¬' => '磟',
+ 'ê' => 'ç£ ',
+ 'ê®' => '禤',
+ 'ê¯' => 'ç©„',
+ 'ê°' => '穈',
+ 'ê±' => '穇',
+ 'ê²' => '窶',
+ 'ê³' => '窸',
+ 'ê´' => '窵',
+ 'êµ' => '窱',
+ 'ê¶' => '窷',
+ 'ê·' => '篞',
+ 'ê¸' => '篣',
+ 'ê¹' => '篧',
+ 'êº' => 'ç¯',
+ 'ê»' => '篕',
+ 'ê¼' => '篥',
+ 'ê½' => '篚',
+ 'ê¾' => '篨',
+ 'ê¿' => '篹',
+ 'êÀ' => '篔',
+ 'êÁ' => '篪',
+ 'êÂ' => '篢',
+ 'êÃ' => '篜',
+ 'êÄ' => '篫',
+ 'êÅ' => '篘',
+ 'êÆ' => '篟',
+ 'êÇ' => 'ç³’',
+ 'êÈ' => 'ç³”',
+ 'êÉ' => 'ç³—',
+ 'êÊ' => 'ç³',
+ 'êË' => '糑',
+ 'êÌ' => '縒',
+ 'êÍ' => '縡',
+ 'êÎ' => '縗',
+ 'êÏ' => '縌',
+ 'êÐ' => '縟',
+ 'êÑ' => 'ç¸ ',
+ 'êÒ' => '縓',
+ 'êÓ' => '縎',
+ 'êÔ' => '縜',
+ 'êÕ' => '縕',
+ 'êÖ' => '縚',
+ 'ê×' => '縢',
+ 'êØ' => '縋',
+ 'êÙ' => 'ç¸',
+ 'êÚ' => '縖',
+ 'êÛ' => 'ç¸',
+ 'êÜ' => '縔',
+ 'êÝ' => '縥',
+ 'êÞ' => '縤',
+ 'êß' => '罃',
+ 'êà' => 'ç½»',
+ 'êá' => 'ç½¼',
+ 'êâ' => '罺',
+ 'êã' => 'ç¾±',
+ 'êä' => '翯',
+ 'êå' => '耪',
+ 'êæ' => '耩',
+ 'êç' => 'è¬',
+ 'êè' => '膱',
+ 'êé' => '膦',
+ 'êê' => '膮',
+ 'êë' => '膹',
+ 'êì' => '膵',
+ 'êí' => '膫',
+ 'êî' => '膰',
+ 'êï' => '膬',
+ 'êð' => '膴',
+ 'êñ' => '膲',
+ 'êò' => '膷',
+ 'êó' => '膧',
+ 'êô' => '臲',
+ 'êõ' => '艕',
+ 'êö' => '艖',
+ 'ê÷' => '艗',
+ 'êø' => 'è•–',
+ 'êù' => 'è•…',
+ 'êú' => 'è•«',
+ 'êû' => 'è•',
+ 'êü' => 'è•“',
+ 'êý' => 'è•¡',
+ 'êþ' => '蕘',
+ 'ë@' => 'è•€',
+ 'ëA' => '蕆',
+ 'ëB' => '蕤',
+ 'ëC' => 'è•',
+ 'ëD' => 'è•¢',
+ 'ëE' => 'è•„',
+ 'ëF' => 'è•‘',
+ 'ëG' => '蕇',
+ 'ëH' => 'è•£',
+ 'ëI' => '蔾',
+ 'ëJ' => 'è•›',
+ 'ëK' => '蕱',
+ 'ëL' => 'è•Ž',
+ 'ëM' => 'è•®',
+ 'ëN' => '蕵',
+ 'ëO' => 'è••',
+ 'ëP' => '蕧',
+ 'ëQ' => 'è• ',
+ 'ëR' => 'è–Œ',
+ 'ëS' => '蕦',
+ 'ëT' => 'è•',
+ 'ëU' => 'è•”',
+ 'ëV' => 'è•¥',
+ 'ëW' => '蕬',
+ 'ëX' => '虣',
+ 'ëY' => '虥',
+ 'ëZ' => '虤',
+ 'ë[' => 'èž›',
+ 'ë\\' => 'èž',
+ 'ë]' => 'èž—',
+ 'ë^' => 'èž“',
+ 'ë_' => 'èž’',
+ 'ë`' => '螈',
+ 'ëa' => 'èž',
+ 'ëb' => 'èž–',
+ 'ëc' => '螘',
+ 'ëd' => 'è¹',
+ 'ëe' => '螇',
+ 'ëf' => '螣',
+ 'ëg' => 'èž…',
+ 'ëh' => 'èž',
+ 'ëi' => 'èž‘',
+ 'ëj' => 'èž',
+ 'ëk' => 'èž„',
+ 'ël' => 'èž”',
+ 'ëm' => 'èžœ',
+ 'ën' => 'èžš',
+ 'ëo' => '螉',
+ 'ëp' => '褞',
+ 'ëq' => '褦',
+ 'ër' => '褰',
+ 'ës' => 'è¤',
+ 'ët' => '褮',
+ 'ëu' => '褧',
+ 'ëv' => '褱',
+ 'ëw' => '褢',
+ 'ëx' => '褩',
+ 'ëy' => '褣',
+ 'ëz' => '褯',
+ 'ë{' => '褬',
+ 'ë|' => '褟',
+ 'ë}' => '觱',
+ 'ë~' => 'è« ',
+ 'ë¡' => 'è«¢',
+ 'ë¢' => '諲',
+ 'ë£' => 'è«´',
+ 'ë¤' => '諵',
+ 'ë¥' => 'è«',
+ 'ë¦' => '謔',
+ 'ë§' => '諤',
+ 'ë¨' => 'è«Ÿ',
+ 'ë©' => 'è«°',
+ 'ëª' => '諈',
+ 'ë«' => 'è«ž',
+ 'ë¬' => 'è«¡',
+ 'ë' => '諨',
+ 'ë®' => 'è«¿',
+ 'ë¯' => '諯',
+ 'ë°' => 'è«»',
+ 'ë±' => '貑',
+ 'ë²' => 'è²’',
+ 'ë³' => 'è²',
+ 'ë´' => 'è³µ',
+ 'ëµ' => 'è³®',
+ 'ë¶' => 'è³±',
+ 'ë·' => 'è³°',
+ 'ë¸' => 'è³³',
+ 'ë¹' => '赬',
+ 'ëº' => 'èµ®',
+ 'ë»' => '趥',
+ 'ë¼' => '趧',
+ 'ë½' => '踳',
+ 'ë¾' => '踾',
+ 'ë¿' => '踸',
+ 'ëÀ' => 'è¹€',
+ 'ëÁ' => 'è¹…',
+ 'ëÂ' => '踶',
+ 'ëÃ' => '踼',
+ 'ëÄ' => '踽',
+ 'ëÅ' => 'è¹',
+ 'ëÆ' => '踰',
+ 'ëÇ' => '踿',
+ 'ëÈ' => '躽',
+ 'ëÉ' => '輶',
+ 'ëÊ' => 'è¼®',
+ 'ëË' => 'è¼µ',
+ 'ëÌ' => 'è¼²',
+ 'ëÍ' => 'è¼¹',
+ 'ëÎ' => 'è¼·',
+ 'ëÏ' => 'è¼´',
+ 'ëÐ' => 'é¶',
+ 'ëÑ' => 'é¹',
+ 'ëÒ' => 'é»',
+ 'ëÓ' => '邆',
+ 'ëÔ' => '郺',
+ 'ëÕ' => '鄳',
+ 'ëÖ' => '鄵',
+ 'ë×' => '鄶',
+ 'ëØ' => '醓',
+ 'ëÙ' => 'é†',
+ 'ëÚ' => '醑',
+ 'ëÛ' => 'é†',
+ 'ëÜ' => 'é†',
+ 'ëÝ' => '錧',
+ 'ëÞ' => '錞',
+ 'ëß' => '錈',
+ 'ëà' => '錟',
+ 'ëá' => '錆',
+ 'ëâ' => 'éŒ',
+ 'ëã' => 'éº',
+ 'ëä' => '錸',
+ 'ëå' => '錼',
+ 'ëæ' => '錛',
+ 'ëç' => '錣',
+ 'ëè' => '錒',
+ 'ëé' => 'éŒ',
+ 'ëê' => 'é†',
+ 'ëë' => 'éŒ',
+ 'ëì' => '錎',
+ 'ëí' => 'éŒ',
+ 'ëî' => 'é‹‹',
+ 'ëï' => 'éŒ',
+ 'ëð' => '鋺',
+ 'ëñ' => '錥',
+ 'ëò' => '錓',
+ 'ëó' => '鋹',
+ 'ëô' => 'é‹·',
+ 'ëõ' => '錴',
+ 'ëö' => '錂',
+ 'ë÷' => '錤',
+ 'ëø' => 'é‹¿',
+ 'ëù' => '錩',
+ 'ëú' => '錹',
+ 'ëû' => '錵',
+ 'ëü' => '錪',
+ 'ëý' => '錔',
+ 'ëþ' => '錌',
+ 'ì@' => '錋',
+ 'ìA' => '鋾',
+ 'ìB' => '錉',
+ 'ìC' => '錀',
+ 'ìD' => 'é‹»',
+ 'ìE' => '錖',
+ 'ìF' => 'é–¼',
+ 'ìG' => 'é—',
+ 'ìH' => 'é–¾',
+ 'ìI' => 'é–¹',
+ 'ìJ' => 'é–º',
+ 'ìK' => 'é–¶',
+ 'ìL' => 'é–¿',
+ 'ìM' => 'é–µ',
+ 'ìN' => 'é–½',
+ 'ìO' => 'éš©',
+ 'ìP' => 'é›”',
+ 'ìQ' => '霋',
+ 'ìR' => '霒',
+ 'ìS' => 'éœ',
+ 'ìT' => 'éž™',
+ 'ìU' => 'éž—',
+ 'ìV' => 'éž”',
+ 'ìW' => '韰',
+ 'ìX' => '韸',
+ 'ìY' => 'é µ',
+ 'ìZ' => 'é ¯',
+ 'ì[' => 'é ²',
+ 'ì\\' => '餤',
+ 'ì]' => '餟',
+ 'ì^' => '餧',
+ 'ì_' => '餩',
+ 'ì`' => '馞',
+ 'ìa' => '駮',
+ 'ìb' => '駬',
+ 'ìc' => '駥',
+ 'ìd' => '駤',
+ 'ìe' => '駰',
+ 'ìf' => '駣',
+ 'ìg' => '駪',
+ 'ìh' => '駩',
+ 'ìi' => '駧',
+ 'ìj' => '骹',
+ 'ìk' => '骿',
+ 'ìl' => '骴',
+ 'ìm' => '骻',
+ 'ìn' => '髶',
+ 'ìo' => '髺',
+ 'ìp' => '髹',
+ 'ìq' => 'é«·',
+ 'ìr' => '鬳',
+ 'ìs' => '鮀',
+ 'ìt' => 'é®…',
+ 'ìu' => '鮇',
+ 'ìv' => 'é¼',
+ 'ìw' => 'é¾',
+ 'ìx' => 'é»',
+ 'ìy' => '鮂',
+ 'ìz' => '鮓',
+ 'ì{' => 'é®’',
+ 'ì|' => 'é®',
+ 'ì}' => 'éº',
+ 'ì~' => '鮕',
+ 'ì¡' => 'é½',
+ 'ì¢' => '鮈',
+ 'ì£' => 'é´¥',
+ 'ì¤' => 'é´—',
+ 'ì¥' => 'é´ ',
+ 'ì¦' => 'é´ž',
+ 'ì§' => 'é´”',
+ 'ì¨' => 'é´©',
+ 'ì©' => 'é´',
+ 'ìª' => 'é´˜',
+ 'ì«' => 'é´¢',
+ 'ì¬' => 'é´',
+ 'ì' => 'é´™',
+ 'ì®' => 'é´Ÿ',
+ 'ì¯' => '麈',
+ 'ì°' => '麆',
+ 'ì±' => '麇',
+ 'ì²' => '麮',
+ 'ì³' => 'éº',
+ 'ì´' => '黕',
+ 'ìµ' => 'é»–',
+ 'ì¶' => '黺',
+ 'ì·' => 'é¼’',
+ 'ì¸' => 'é¼½',
+ 'ì¹' => '儦',
+ 'ìº' => 'å„¥',
+ 'ì»' => 'å„¢',
+ 'ì¼' => '儤',
+ 'ì½' => 'å„ ',
+ 'ì¾' => 'å„©',
+ 'ì¿' => 'å‹´',
+ 'ìÀ' => 'åš“',
+ 'ìÁ' => '嚌',
+ 'ìÂ' => 'åš',
+ 'ìÃ' => '嚆',
+ 'ìÄ' => 'åš„',
+ 'ìÅ' => '嚃',
+ 'ìÆ' => '噾',
+ 'ìÇ' => 'åš‚',
+ 'ìÈ' => '噿',
+ 'ìÉ' => 'åš',
+ 'ìÊ' => '壖',
+ 'ìË' => '壔',
+ 'ìÌ' => 'å£',
+ 'ìÍ' => '壒',
+ 'ìÎ' => 'å¬',
+ 'ìÏ' => '嬥',
+ 'ìÐ' => '嬲',
+ 'ìÑ' => '嬣',
+ 'ìÒ' => '嬬',
+ 'ìÓ' => '嬧',
+ 'ìÔ' => '嬦',
+ 'ìÕ' => '嬯',
+ 'ìÖ' => '嬮',
+ 'ì×' => 'å»',
+ 'ìØ' => '寱',
+ 'ìÙ' => '寲',
+ 'ìÚ' => '嶷',
+ 'ìÛ' => '幬',
+ 'ìÜ' => '幪',
+ 'ìÝ' => 'å¾¾',
+ 'ìÞ' => 'å¾»',
+ 'ìß' => '懃',
+ 'ìà' => '憵',
+ 'ìá' => '憼',
+ 'ìâ' => '懧',
+ 'ìã' => 'æ‡ ',
+ 'ìä' => '懥',
+ 'ìå' => '懤',
+ 'ìæ' => '懨',
+ 'ìç' => '懞',
+ 'ìè' => '擯',
+ 'ìé' => 'æ“©',
+ 'ìê' => 'æ“£',
+ 'ìë' => 'æ“«',
+ 'ìì' => '擤',
+ 'ìí' => '擨',
+ 'ìî' => 'æ–',
+ 'ìï' => 'æ–€',
+ 'ìð' => 'æ–¶',
+ 'ìñ' => 'æ—š',
+ 'ìò' => 'æ›’',
+ 'ìó' => 'æª',
+ 'ìô' => '檖',
+ 'ìõ' => 'æª',
+ 'ìö' => '檥',
+ 'ì÷' => '檉',
+ 'ìø' => '檟',
+ 'ìù' => '檛',
+ 'ìú' => '檡',
+ 'ìû' => '檞',
+ 'ìü' => '檇',
+ 'ìý' => '檓',
+ 'ìþ' => '檎',
+ 'í@' => '檕',
+ 'íA' => '檃',
+ 'íB' => '檨',
+ 'íC' => '檤',
+ 'íD' => '檑',
+ 'íE' => 'æ©¿',
+ 'íF' => '檦',
+ 'íG' => '檚',
+ 'íH' => '檅',
+ 'íI' => '檌',
+ 'íJ' => '檒',
+ 'íK' => 'æ›',
+ 'íL' => 'æ®',
+ 'íM' => 'æ°‰',
+ 'íN' => 'æ¿Œ',
+ 'íO' => '澩',
+ 'íP' => 'æ¿´',
+ 'íQ' => 'æ¿”',
+ 'íR' => 'æ¿£',
+ 'íS' => 'æ¿œ',
+ 'íT' => 'æ¿',
+ 'íU' => '濧',
+ 'íV' => '濦',
+ 'íW' => 'æ¿ž',
+ 'íX' => '濲',
+ 'íY' => 'æ¿',
+ 'íZ' => 'æ¿¢',
+ 'í[' => '濨',
+ 'í\\' => '燡',
+ 'í]' => '燱',
+ 'í^' => '燨',
+ 'í_' => '燲',
+ 'í`' => '燤',
+ 'ía' => '燰',
+ 'íb' => '燢',
+ 'íc' => 'ç³',
+ 'íd' => 'ç®',
+ 'íe' => 'ç¯',
+ 'íf' => 'ç’—',
+ 'íg' => 'ç’²',
+ 'íh' => 'ç’«',
+ 'íi' => 'ç’',
+ 'íj' => 'ç’ª',
+ 'ík' => 'ç’',
+ 'íl' => 'ç’±',
+ 'ím' => 'ç’¥',
+ 'ín' => 'ç’¯',
+ 'ío' => 'ç”',
+ 'íp' => '甑',
+ 'íq' => 'ç”’',
+ 'ír' => 'ç”',
+ 'ís' => 'ç–„',
+ 'ít' => '癃',
+ 'íu' => '癈',
+ 'ív' => '癉',
+ 'íw' => '癇',
+ 'íx' => '皤',
+ 'íy' => '盩',
+ 'íz' => 'çžµ',
+ 'í{' => 'çž«',
+ 'í|' => 'çž²',
+ 'í}' => 'çž·',
+ 'í~' => '瞶',
+ 'í¡' => 'çž´',
+ 'í¢' => 'çž±',
+ 'í£' => '瞨',
+ 'í¤' => '矰',
+ 'í¥' => '磳',
+ 'í¦' => '磽',
+ 'í§' => '礂',
+ 'í¨' => '磻',
+ 'í©' => '磼',
+ 'íª' => '磲',
+ 'í«' => '礅',
+ 'í¬' => '磹',
+ 'í' => '磾',
+ 'í®' => '礄',
+ 'í¯' => '禫',
+ 'í°' => '禨',
+ 'í±' => 'ç©œ',
+ 'í²' => 'ç©›',
+ 'í³' => 'ç©–',
+ 'í´' => '穘',
+ 'íµ' => 'ç©”',
+ 'í¶' => 'ç©š',
+ 'í·' => '窾',
+ 'í¸' => 'ç«€',
+ 'í¹' => 'ç«',
+ 'íº' => 'ç°…',
+ 'í»' => 'ç°',
+ 'í¼' => '篲',
+ 'í½' => 'ç°€',
+ 'í¾' => '篿',
+ 'í¿' => '篻',
+ 'íÀ' => 'ç°Ž',
+ 'íÁ' => '篴',
+ 'íÂ' => 'ç°‹',
+ 'íÃ' => '篳',
+ 'íÄ' => 'ç°‚',
+ 'íÅ' => 'ç°‰',
+ 'íÆ' => 'ç°ƒ',
+ 'íÇ' => 'ç°',
+ 'íÈ' => '篸',
+ 'íÉ' => '篽',
+ 'íÊ' => 'ç°†',
+ 'íË' => '篰',
+ 'íÌ' => '篱',
+ 'íÍ' => 'ç°',
+ 'íÎ' => 'ç°Š',
+ 'íÏ' => '糨',
+ 'íÐ' => 'ç¸',
+ 'íÑ' => '縼',
+ 'íÒ' => '繂',
+ 'íÓ' => '縳',
+ 'íÔ' => '顈',
+ 'íÕ' => '縸',
+ 'íÖ' => '縪',
+ 'í×' => '繉',
+ 'íØ' => 'ç¹€',
+ 'íÙ' => '繇',
+ 'íÚ' => '縩',
+ 'íÛ' => '繌',
+ 'íÜ' => '縰',
+ 'íÝ' => '縻',
+ 'íÞ' => '縶',
+ 'íß' => '繄',
+ 'íà' => '縺',
+ 'íá' => 'ç½…',
+ 'íâ' => '罿',
+ 'íã' => 'ç½¾',
+ 'íä' => 'ç½½',
+ 'íå' => 'ç¿´',
+ 'íæ' => '翲',
+ 'íç' => '耬',
+ 'íè' => '膻',
+ 'íé' => '臄',
+ 'íê' => '臌',
+ 'íë' => '臊',
+ 'íì' => '臅',
+ 'íí' => '臇',
+ 'íî' => '膼',
+ 'íï' => '臩',
+ 'íð' => '艛',
+ 'íñ' => '艚',
+ 'íò' => '艜',
+ 'íó' => 'è–ƒ',
+ 'íô' => 'è–€',
+ 'íõ' => 'è–',
+ 'íö' => 'è–§',
+ 'í÷' => 'è–•',
+ 'íø' => 'è– ',
+ 'íù' => 'è–‹',
+ 'íú' => 'è–£',
+ 'íû' => 'è•»',
+ 'íü' => 'è–¤',
+ 'íý' => 'è–š',
+ 'íþ' => 'è–ž',
+ 'î@' => 'è•·',
+ 'îA' => '蕼',
+ 'îB' => 'è–‰',
+ 'îC' => 'è–¡',
+ 'îD' => '蕺',
+ 'îE' => '蕸',
+ 'îF' => 'è•—',
+ 'îG' => 'è–Ž',
+ 'îH' => 'è––',
+ 'îI' => 'è–†',
+ 'îJ' => 'è–',
+ 'îK' => 'è–™',
+ 'îL' => 'è–',
+ 'îM' => 'è–',
+ 'îN' => 'è–¢',
+ 'îO' => 'è–‚',
+ 'îP' => 'è–ˆ',
+ 'îQ' => 'è–…',
+ 'îR' => '蕹',
+ 'îS' => '蕶',
+ 'îT' => 'è–˜',
+ 'îU' => 'è–',
+ 'îV' => 'è–Ÿ',
+ 'îW' => '虨',
+ 'îX' => 'èž¾',
+ 'îY' => '螪',
+ 'îZ' => 'èž',
+ 'î[' => '蟅',
+ 'î\\' => 'èž°',
+ 'î]' => '螬',
+ 'î^' => 'èž¹',
+ 'î_' => 'èžµ',
+ 'î`' => 'èž¼',
+ 'îa' => 'èž®',
+ 'îb' => '蟉',
+ 'îc' => '蟃',
+ 'îd' => '蟂',
+ 'îe' => '蟌',
+ 'îf' => 'èž·',
+ 'îg' => '螯',
+ 'îh' => '蟄',
+ 'îi' => '蟊',
+ 'îj' => 'èž´',
+ 'îk' => '螶',
+ 'îl' => 'èž¿',
+ 'îm' => '螸',
+ 'în' => 'èž½',
+ 'îo' => '蟞',
+ 'îp' => 'èž²',
+ 'îq' => '褵',
+ 'îr' => '褳',
+ 'îs' => '褼',
+ 'ît' => '褾',
+ 'îu' => 'è¥',
+ 'îv' => '襒',
+ 'îw' => '褷',
+ 'îx' => '襂',
+ 'îy' => 'è¦',
+ 'îz' => '覯',
+ 'î{' => '覮',
+ 'î|' => '觲',
+ 'î}' => '觳',
+ 'î~' => '謞',
+ 'î¡' => '謘',
+ 'î¢' => '謖',
+ 'î£' => '謑',
+ 'î¤' => '謅',
+ 'î¥' => '謋',
+ 'î¦' => '謢',
+ 'î§' => 'è¬',
+ 'î¨' => '謒',
+ 'î©' => '謕',
+ 'îª' => '謇',
+ 'î«' => 'è¬',
+ 'î¬' => '謈',
+ 'î' => '謆',
+ 'î®' => '謜',
+ 'î¯' => '謓',
+ 'î°' => '謚',
+ 'î±' => 'è±',
+ 'î²' => 'è±°',
+ 'î³' => 'è±²',
+ 'î´' => 'è±±',
+ 'îµ' => '豯',
+ 'î¶' => '貕',
+ 'î·' => 'è²”',
+ 'î¸' => 'è³¹',
+ 'î¹' => '赯',
+ 'îº' => '蹎',
+ 'î»' => 'è¹',
+ 'î¼' => '蹓',
+ 'î½' => 'è¹',
+ 'î¾' => '蹌',
+ 'î¿' => '蹇',
+ 'îÀ' => '轃',
+ 'îÁ' => 'è½€',
+ 'îÂ' => 'é‚…',
+ 'îÃ' => 'é¾',
+ 'îÄ' => '鄸',
+ 'îÅ' => '醚',
+ 'îÆ' => '醢',
+ 'îÇ' => '醛',
+ 'îÈ' => '醙',
+ 'îÉ' => '醟',
+ 'îÊ' => '醡',
+ 'îË' => 'é†',
+ 'îÌ' => 'é† ',
+ 'îÍ' => '鎡',
+ 'îÎ' => '鎃',
+ 'îÏ' => '鎯',
+ 'îÐ' => 'é¤',
+ 'îÑ' => 'é–',
+ 'îÒ' => 'é‡',
+ 'îÓ' => 'é¼',
+ 'îÔ' => 'é˜',
+ 'îÕ' => 'éœ',
+ 'îÖ' => 'é¶',
+ 'î×' => 'é‰',
+ 'îØ' => 'é',
+ 'îÙ' => 'é‘',
+ 'îÚ' => 'é ',
+ 'îÛ' => 'é',
+ 'îÜ' => 'éŽ',
+ 'îÝ' => 'éŒ',
+ 'îÞ' => 'éª',
+ 'îß' => 'é¹',
+ 'îà' => 'é—',
+ 'îá' => 'é•',
+ 'îâ' => 'é’',
+ 'îã' => 'é',
+ 'îä' => 'é±',
+ 'îå' => 'é·',
+ 'îæ' => 'é»',
+ 'îç' => 'é¡',
+ 'îè' => 'éž',
+ 'îé' => 'é£',
+ 'îê' => 'é§',
+ 'îë' => '鎀',
+ 'îì' => 'éŽ',
+ 'îí' => 'é™',
+ 'îî' => 'é—‡',
+ 'îï' => 'é—€',
+ 'îð' => 'é—‰',
+ 'îñ' => 'é—ƒ',
+ 'îò' => 'é—…',
+ 'îó' => 'é–·',
+ 'îô' => 'éš®',
+ 'îõ' => 'éš°',
+ 'îö' => '隬',
+ 'î÷' => 'éœ ',
+ 'îø' => '霟',
+ 'îù' => '霘',
+ 'îú' => 'éœ',
+ 'îû' => '霙',
+ 'îü' => 'éžš',
+ 'îý' => 'éž¡',
+ 'îþ' => 'éžœ',
+ 'ï@' => 'éžž',
+ 'ïA' => 'éž',
+ 'ïB' => '韕',
+ 'ïC' => '韔',
+ 'ïD' => '韱',
+ 'ïE' => 'é¡',
+ 'ïF' => 'é¡„',
+ 'ïG' => 'é¡Š',
+ 'ïH' => '顉',
+ 'ïI' => 'é¡…',
+ 'ïJ' => '顃',
+ 'ïK' => '餥',
+ 'ïL' => '餫',
+ 'ïM' => '餬',
+ 'ïN' => '餪',
+ 'ïO' => '餳',
+ 'ïP' => '餲',
+ 'ïQ' => '餯',
+ 'ïR' => 'é¤',
+ 'ïS' => '餱',
+ 'ïT' => '餰',
+ 'ïU' => '馘',
+ 'ïV' => '馣',
+ 'ïW' => '馡',
+ 'ïX' => '騂',
+ 'ïY' => '駺',
+ 'ïZ' => '駴',
+ 'ï[' => '駷',
+ 'ï\\' => '駹',
+ 'ï]' => '駸',
+ 'ï^' => '駶',
+ 'ï_' => '駻',
+ 'ï`' => '駽',
+ 'ïa' => '駾',
+ 'ïb' => '駼',
+ 'ïc' => '騃',
+ 'ïd' => '骾',
+ 'ïe' => '髾',
+ 'ïf' => '髽',
+ 'ïg' => 'é¬',
+ 'ïh' => '髼',
+ 'ïi' => 'éˆ',
+ 'ïj' => '鮚',
+ 'ïk' => '鮨',
+ 'ïl' => '鮞',
+ 'ïm' => 'é®›',
+ 'ïn' => '鮦',
+ 'ïo' => '鮡',
+ 'ïp' => '鮥',
+ 'ïq' => '鮤',
+ 'ïr' => '鮆',
+ 'ïs' => '鮢',
+ 'ït' => 'é® ',
+ 'ïu' => '鮯',
+ 'ïv' => 'é´³',
+ 'ïw' => 'éµ',
+ 'ïx' => '鵧',
+ 'ïy' => 'é´¶',
+ 'ïz' => 'é´®',
+ 'ï{' => 'é´¯',
+ 'ï|' => 'é´±',
+ 'ï}' => 'é´¸',
+ 'ï~' => 'é´°',
+ 'ï¡' => 'éµ…',
+ 'ï¢' => '鵂',
+ 'ï£' => '鵃',
+ 'ï¤' => 'é´¾',
+ 'ï¥' => 'é´·',
+ 'ï¦' => 'éµ€',
+ 'ï§' => 'é´½',
+ 'ï¨' => '翵',
+ 'ï©' => 'é´',
+ 'ïª' => '麊',
+ 'ï«' => '麉',
+ 'ï¬' => 'éº',
+ 'ï' => '麰',
+ 'ï®' => '黈',
+ 'ï¯' => '黚',
+ 'ï°' => 'é»»',
+ 'ï±' => '黿',
+ 'ï²' => '鼤',
+ 'ï³' => 'é¼£',
+ 'ï´' => 'é¼¢',
+ 'ïµ' => 'é½”',
+ 'ï¶' => 'é¾ ',
+ 'ï·' => '儱',
+ 'ï¸' => 'å„',
+ 'ï¹' => 'å„®',
+ 'ïº' => '嚘',
+ 'ï»' => 'åšœ',
+ 'ï¼' => 'åš—',
+ 'ï½' => 'åšš',
+ 'ï¾' => 'åš',
+ 'ï¿' => 'åš™',
+ 'ïÀ' => '奰',
+ 'ïÁ' => '嬼',
+ 'ïÂ' => '屩',
+ 'ïÃ' => '屪',
+ 'ïÄ' => 'å·€',
+ 'ïÅ' => 'å¹',
+ 'ïÆ' => 'å¹®',
+ 'ïÇ' => '懘',
+ 'ïÈ' => '懟',
+ 'ïÉ' => 'æ‡',
+ 'ïÊ' => '懮',
+ 'ïË' => '懱',
+ 'ïÌ' => '懪',
+ 'ïÍ' => '懰',
+ 'ïÎ' => '懫',
+ 'ïÏ' => '懖',
+ 'ïÐ' => '懩',
+ 'ïÑ' => 'æ“¿',
+ 'ïÒ' => '攄',
+ 'ïÓ' => '擽',
+ 'ïÔ' => '擸',
+ 'ïÕ' => 'æ”',
+ 'ïÖ' => '攃',
+ 'ï×' => '擼',
+ 'ïØ' => 'æ–”',
+ 'ïÙ' => 'æ—›',
+ 'ïÚ' => '曚',
+ 'ïÛ' => 'æ››',
+ 'ïÜ' => '曘',
+ 'ïÝ' => 'æ«…',
+ 'ïÞ' => '檹',
+ 'ïß' => '檽',
+ 'ïà' => 'æ«¡',
+ 'ïá' => '櫆',
+ 'ïâ' => '檺',
+ 'ïã' => '檶',
+ 'ïä' => '檷',
+ 'ïå' => '櫇',
+ 'ïæ' => '檴',
+ 'ïç' => 'æª',
+ 'ïè' => 'æž',
+ 'ïé' => '毉',
+ 'ïê' => 'æ°‹',
+ 'ïë' => '瀇',
+ 'ïì' => '瀌',
+ 'ïí' => 'ç€',
+ 'ïî' => 'ç€',
+ 'ïï' => '瀅',
+ 'ïð' => '瀔',
+ 'ïñ' => '瀎',
+ 'ïò' => 'æ¿¿',
+ 'ïó' => '瀀',
+ 'ïô' => 'æ¿»',
+ 'ïõ' => '瀦',
+ 'ïö' => '濼',
+ 'ï÷' => 'æ¿·',
+ 'ïø' => '瀊',
+ 'ïù' => 'çˆ',
+ 'ïú' => '燿',
+ 'ïû' => '燹',
+ 'ïü' => '爃',
+ 'ïý' => '燽',
+ 'ïþ' => 'ç¶',
+ 'ð@' => 'ç’¸',
+ 'ðA' => 'ç“€',
+ 'ðB' => 'ç’µ',
+ 'ðC' => 'ç“',
+ 'ðD' => 'ç’¾',
+ 'ðE' => 'ç’¶',
+ 'ðF' => 'ç’»',
+ 'ðG' => 'ç“‚',
+ 'ðH' => 'ç””',
+ 'ðI' => '甓',
+ 'ðJ' => '癜',
+ 'ðK' => '癤',
+ 'ðL' => 'ç™™',
+ 'ðM' => 'ç™',
+ 'ðN' => '癓',
+ 'ðO' => 'ç™—',
+ 'ðP' => '癚',
+ 'ðQ' => '皦',
+ 'ðR' => 'çš½',
+ 'ðS' => '盬',
+ 'ðT' => '矂',
+ 'ðU' => '瞺',
+ 'ðV' => '磿',
+ 'ðW' => '礌',
+ 'ðX' => '礓',
+ 'ðY' => '礔',
+ 'ðZ' => '礉',
+ 'ð[' => 'ç¤',
+ 'ð\\' => '礒',
+ 'ð]' => '礑',
+ 'ð^' => 'ç¦',
+ 'ð_' => '禬',
+ 'ð`' => 'ç©Ÿ',
+ 'ða' => 'ç°œ',
+ 'ðb' => 'ç°©',
+ 'ðc' => 'ç°™',
+ 'ðd' => 'ç° ',
+ 'ðe' => 'ç°Ÿ',
+ 'ðf' => 'ç°',
+ 'ðg' => 'ç°',
+ 'ðh' => 'ç°¦',
+ 'ði' => 'ç°¨',
+ 'ðj' => 'ç°¢',
+ 'ðk' => 'ç°¥',
+ 'ðl' => 'ç°°',
+ 'ðm' => '繜',
+ 'ðn' => 'ç¹',
+ 'ðo' => 'ç¹–',
+ 'ðp' => 'ç¹£',
+ 'ðq' => '繘',
+ 'ðr' => 'ç¹¢',
+ 'ðs' => '繟',
+ 'ðt' => '繑',
+ 'ðu' => 'ç¹ ',
+ 'ðv' => 'ç¹—',
+ 'ðw' => '繓',
+ 'ðx' => 'ç¾µ',
+ 'ðy' => 'ç¾³',
+ 'ðz' => 'ç¿·',
+ 'ð{' => '翸',
+ 'ð|' => 'èµ',
+ 'ð}' => '臑',
+ 'ð~' => '臒',
+ 'ð¡' => 'è‡',
+ 'ð¢' => '艟',
+ 'ð£' => '艞',
+ 'ð¤' => 'è–´',
+ 'ð¥' => 'è—†',
+ 'ð¦' => 'è—€',
+ 'ð§' => 'è—ƒ',
+ 'ð¨' => 'è—‚',
+ 'ð©' => 'è–³',
+ 'ðª' => 'è–µ',
+ 'ð«' => 'è–½',
+ 'ð¬' => 'è—‡',
+ 'ð' => 'è—„',
+ 'ð®' => 'è–¿',
+ 'ð¯' => 'è—‹',
+ 'ð°' => 'è—Ž',
+ 'ð±' => 'è—ˆ',
+ 'ð²' => 'è—…',
+ 'ð³' => 'è–±',
+ 'ð´' => 'è–¶',
+ 'ðµ' => 'è—’',
+ 'ð¶' => '蘤',
+ 'ð·' => 'è–¸',
+ 'ð¸' => 'è–·',
+ 'ð¹' => 'è–¾',
+ 'ðº' => '虩',
+ 'ð»' => '蟧',
+ 'ð¼' => '蟦',
+ 'ð½' => '蟢',
+ 'ð¾' => '蟛',
+ 'ð¿' => '蟫',
+ 'ðÀ' => '蟪',
+ 'ðÁ' => '蟥',
+ 'ðÂ' => '蟟',
+ 'ðÃ' => '蟳',
+ 'ðÄ' => '蟤',
+ 'ðÅ' => '蟔',
+ 'ðÆ' => '蟜',
+ 'ðÇ' => '蟓',
+ 'ðÈ' => 'èŸ',
+ 'ðÉ' => '蟘',
+ 'ðÊ' => '蟣',
+ 'ðË' => '螤',
+ 'ðÌ' => '蟗',
+ 'ðÍ' => '蟙',
+ 'ðÎ' => 'è ',
+ 'ðÏ' => '蟴',
+ 'ðÐ' => '蟨',
+ 'ðÑ' => 'èŸ',
+ 'ðÒ' => '襓',
+ 'ðÓ' => '襋',
+ 'ðÔ' => 'è¥',
+ 'ðÕ' => '襌',
+ 'ðÖ' => '襆',
+ 'ð×' => 'è¥',
+ 'ðØ' => '襑',
+ 'ðÙ' => '襉',
+ 'ðÚ' => '謪',
+ 'ðÛ' => '謧',
+ 'ðÜ' => '謣',
+ 'ðÝ' => '謳',
+ 'ðÞ' => '謰',
+ 'ðß' => '謵',
+ 'ðà' => 'è‡',
+ 'ðá' => '謯',
+ 'ðâ' => '謼',
+ 'ðã' => '謾',
+ 'ðä' => '謱',
+ 'ðå' => '謥',
+ 'ðæ' => '謷',
+ 'ðç' => '謦',
+ 'ðè' => '謶',
+ 'ðé' => '謮',
+ 'ðê' => '謤',
+ 'ðë' => '謻',
+ 'ðì' => '謽',
+ 'ðí' => '謺',
+ 'ðî' => '豂',
+ 'ðï' => 'è±µ',
+ 'ðð' => 'è²™',
+ 'ðñ' => '貘',
+ 'ðò' => 'è²—',
+ 'ðó' => 'è³¾',
+ 'ðô' => 'è´„',
+ 'ðõ' => 'è´‚',
+ 'ðö' => 'è´€',
+ 'ð÷' => '蹜',
+ 'ðø' => 'è¹¢',
+ 'ðù' => 'è¹ ',
+ 'ðú' => 'è¹—',
+ 'ðû' => 'è¹–',
+ 'ðü' => '蹞',
+ 'ðý' => 'è¹¥',
+ 'ðþ' => '蹧',
+ 'ñ@' => 'è¹›',
+ 'ñA' => '蹚',
+ 'ñB' => '蹡',
+ 'ñC' => 'è¹',
+ 'ñD' => '蹩',
+ 'ñE' => 'è¹”',
+ 'ñF' => '轆',
+ 'ñG' => '轇',
+ 'ñH' => '轈',
+ 'ñI' => '轋',
+ 'ñJ' => '鄨',
+ 'ñK' => '鄺',
+ 'ñL' => 'é„»',
+ 'ñM' => '鄾',
+ 'ñN' => '醨',
+ 'ñO' => '醥',
+ 'ñP' => '醧',
+ 'ñQ' => '醯',
+ 'ñR' => '醪',
+ 'ñS' => '鎵',
+ 'ñT' => '鎌',
+ 'ñU' => '鎒',
+ 'ñV' => '鎷',
+ 'ñW' => '鎛',
+ 'ñX' => 'éŽ',
+ 'ñY' => '鎉',
+ 'ñZ' => '鎧',
+ 'ñ[' => '鎎',
+ 'ñ\\' => '鎪',
+ 'ñ]' => '鎞',
+ 'ñ^' => '鎦',
+ 'ñ_' => '鎕',
+ 'ñ`' => '鎈',
+ 'ña' => '鎙',
+ 'ñb' => '鎟',
+ 'ñc' => 'éŽ',
+ 'ñd' => '鎱',
+ 'ñe' => '鎑',
+ 'ñf' => '鎲',
+ 'ñg' => '鎤',
+ 'ñh' => '鎨',
+ 'ñi' => '鎴',
+ 'ñj' => '鎣',
+ 'ñk' => '鎥',
+ 'ñl' => 'é—’',
+ 'ñm' => 'é—“',
+ 'ñn' => 'é—‘',
+ 'ño' => 'éš³',
+ 'ñp' => 'é›—',
+ 'ñq' => '雚',
+ 'ñr' => 'å·‚',
+ 'ñs' => '雟',
+ 'ñt' => '雘',
+ 'ñu' => 'é›',
+ 'ñv' => '霣',
+ 'ñw' => '霢',
+ 'ñx' => '霥',
+ 'ñy' => '鞬',
+ 'ñz' => 'éž®',
+ 'ñ{' => '鞨',
+ 'ñ|' => 'éž«',
+ 'ñ}' => '鞤',
+ 'ñ~' => '鞪',
+ 'ñ¡' => '鞢',
+ 'ñ¢' => '鞥',
+ 'ñ£' => '韗',
+ 'ñ¤' => '韙',
+ 'ñ¥' => '韖',
+ 'ñ¦' => '韘',
+ 'ñ§' => '韺',
+ 'ñ¨' => 'é¡',
+ 'ñ©' => 'é¡‘',
+ 'ñª' => 'é¡’',
+ 'ñ«' => '颸',
+ 'ñ¬' => 'é¥',
+ 'ñ' => '餼',
+ 'ñ®' => '餺',
+ 'ñ¯' => 'é¨',
+ 'ñ°' => '騋',
+ 'ñ±' => '騉',
+ 'ñ²' => 'é¨',
+ 'ñ³' => '騄',
+ 'ñ´' => '騑',
+ 'ñµ' => '騊',
+ 'ñ¶' => '騅',
+ 'ñ·' => '騇',
+ 'ñ¸' => '騆',
+ 'ñ¹' => 'é«€',
+ 'ñº' => 'é«œ',
+ 'ñ»' => '鬈',
+ 'ñ¼' => '鬄',
+ 'ñ½' => '鬅',
+ 'ñ¾' => '鬩',
+ 'ñ¿' => '鬵',
+ 'ñÀ' => 'éŠ',
+ 'ñÁ' => 'éŒ',
+ 'ñÂ' => 'é‹',
+ 'ñÃ' => '鯇',
+ 'ñÄ' => '鯆',
+ 'ñÅ' => '鯃',
+ 'ñÆ' => '鮿',
+ 'ñÇ' => 'é¯',
+ 'ñÈ' => '鮵',
+ 'ñÉ' => '鮸',
+ 'ñÊ' => '鯓',
+ 'ñË' => '鮶',
+ 'ñÌ' => '鯄',
+ 'ñÍ' => '鮹',
+ 'ñÎ' => '鮽',
+ 'ñÏ' => '鵜',
+ 'ñÐ' => '鵓',
+ 'ñÑ' => 'éµ',
+ 'ñÒ' => '鵊',
+ 'ñÓ' => 'éµ›',
+ 'ñÔ' => '鵋',
+ 'ñÕ' => 'éµ™',
+ 'ñÖ' => 'éµ–',
+ 'ñ×' => '鵌',
+ 'ñØ' => 'éµ—',
+ 'ñÙ' => 'éµ’',
+ 'ñÚ' => 'éµ”',
+ 'ñÛ' => '鵟',
+ 'ñÜ' => '鵘',
+ 'ñÝ' => '鵚',
+ 'ñÞ' => '麎',
+ 'ñß' => '麌',
+ 'ñà' => '黟',
+ 'ñá' => 'é¼',
+ 'ñâ' => 'é¼€',
+ 'ñã' => 'é¼–',
+ 'ñä' => 'é¼¥',
+ 'ñå' => '鼫',
+ 'ñæ' => '鼪',
+ 'ñç' => '鼩',
+ 'ñè' => '鼨',
+ 'ñé' => '齌',
+ 'ñê' => '齕',
+ 'ñë' => 'å„´',
+ 'ñì' => '儵',
+ 'ñí' => '劖',
+ 'ñî' => 'å‹·',
+ 'ñï' => '厴',
+ 'ñð' => 'åš«',
+ 'ññ' => 'åš',
+ 'ñò' => '嚦',
+ 'ñó' => '嚧',
+ 'ñô' => '嚪',
+ 'ñõ' => '嚬',
+ 'ñö' => '壚',
+ 'ñ÷' => 'å£',
+ 'ñø' => '壛',
+ 'ñù' => '夒',
+ 'ñú' => '嬽',
+ 'ñû' => '嬾',
+ 'ñü' => '嬿',
+ 'ñý' => 'å·ƒ',
+ 'ñþ' => 'å¹°',
+ 'ò@' => '徿',
+ 'òA' => '懻',
+ 'òB' => '攇',
+ 'òC' => 'æ”',
+ 'òD' => 'æ”',
+ 'òE' => '攉',
+ 'òF' => '攌',
+ 'òG' => '攎',
+ 'òH' => 'æ–„',
+ 'òI' => 'æ—ž',
+ 'òJ' => 'æ—',
+ 'òK' => '曞',
+ 'òL' => '櫧',
+ 'òM' => 'æ« ',
+ 'òN' => 'æ«Œ',
+ 'òO' => 'æ«‘',
+ 'òP' => 'æ«™',
+ 'òQ' => 'æ«‹',
+ 'òR' => 'æ«Ÿ',
+ 'òS' => 'æ«œ',
+ 'òT' => 'æ«',
+ 'òU' => 'æ««',
+ 'òV' => 'æ«',
+ 'òW' => 'æ«',
+ 'òX' => 'æ«ž',
+ 'òY' => 'æ ',
+ 'òZ' => 'æ®°',
+ 'ò[' => 'æ°Œ',
+ 'ò\\' => '瀙',
+ 'ò]' => '瀧',
+ 'ò^' => 'ç€ ',
+ 'ò_' => '瀖',
+ 'ò`' => '瀫',
+ 'òa' => '瀡',
+ 'òb' => '瀢',
+ 'òc' => '瀣',
+ 'òd' => '瀩',
+ 'òe' => '瀗',
+ 'òf' => '瀤',
+ 'òg' => '瀜',
+ 'òh' => '瀪',
+ 'òi' => '爌',
+ 'òj' => '爊',
+ 'òk' => '爇',
+ 'òl' => '爂',
+ 'òm' => '爅',
+ 'òn' => '犥',
+ 'òo' => '犦',
+ 'òp' => '犤',
+ 'òq' => '犣',
+ 'òr' => '犡',
+ 'òs' => 'ç“‹',
+ 'òt' => 'ç“…',
+ 'òu' => 'ç’·',
+ 'òv' => '瓃',
+ 'òw' => 'ç”–',
+ 'òx' => 'ç™ ',
+ 'òy' => '矉',
+ 'òz' => '矊',
+ 'ò{' => '矄',
+ 'ò|' => '矱',
+ 'ò}' => 'ç¤',
+ 'ò~' => '礛',
+ 'ò¡' => '礡',
+ 'ò¢' => '礜',
+ 'ò£' => '礗',
+ 'ò¤' => '礞',
+ 'ò¥' => '禰',
+ 'ò¦' => '穧',
+ 'ò§' => '穨',
+ 'ò¨' => 'ç°³',
+ 'ò©' => 'ç°¼',
+ 'òª' => 'ç°¹',
+ 'ò«' => 'ç°¬',
+ 'ò¬' => 'ç°»',
+ 'ò' => '糬',
+ 'ò®' => '糪',
+ 'ò¯' => '繶',
+ 'ò°' => 'ç¹µ',
+ 'ò±' => '繸',
+ 'ò²' => 'ç¹°',
+ 'ò³' => 'ç¹·',
+ 'ò´' => '繯',
+ 'òµ' => '繺',
+ 'ò¶' => 'ç¹²',
+ 'ò·' => 'ç¹´',
+ 'ò¸' => '繨',
+ 'ò¹' => '罋',
+ 'òº' => '罊',
+ 'ò»' => '羃',
+ 'ò¼' => '羆',
+ 'ò½' => 'ç¾·',
+ 'ò¾' => '翽',
+ 'ò¿' => '翾',
+ 'òÀ' => 'è¸',
+ 'òÁ' => '臗',
+ 'òÂ' => '臕',
+ 'òÃ' => '艤',
+ 'òÄ' => '艡',
+ 'òÅ' => '艣',
+ 'òÆ' => 'è—«',
+ 'òÇ' => 'è—±',
+ 'òÈ' => 'è—',
+ 'òÉ' => 'è—™',
+ 'òÊ' => 'è—¡',
+ 'òË' => 'è—¨',
+ 'òÌ' => 'è—š',
+ 'òÍ' => 'è——',
+ 'òÎ' => 'è—¬',
+ 'òÏ' => 'è—²',
+ 'òÐ' => 'è—¸',
+ 'òÑ' => 'è—˜',
+ 'òÒ' => 'è—Ÿ',
+ 'òÓ' => 'è—£',
+ 'òÔ' => 'è—œ',
+ 'òÕ' => 'è—‘',
+ 'òÖ' => 'è—°',
+ 'ò×' => 'è—¦',
+ 'òØ' => 'è—¯',
+ 'òÙ' => 'è—ž',
+ 'òÚ' => 'è—¢',
+ 'òÛ' => 'è €',
+ 'òÜ' => '蟺',
+ 'òÝ' => 'è ƒ',
+ 'òÞ' => '蟶',
+ 'òß' => '蟷',
+ 'òà' => 'è ‰',
+ 'òá' => 'è Œ',
+ 'òâ' => 'è ‹',
+ 'òã' => 'è †',
+ 'òä' => '蟼',
+ 'òå' => 'è ˆ',
+ 'òæ' => '蟿',
+ 'òç' => 'è Š',
+ 'òè' => 'è ‚',
+ 'òé' => '襢',
+ 'òê' => '襚',
+ 'òë' => '襛',
+ 'òì' => '襗',
+ 'òí' => '襡',
+ 'òî' => '襜',
+ 'òï' => '襘',
+ 'òð' => 'è¥',
+ 'òñ' => '襙',
+ 'òò' => '覈',
+ 'òó' => '覷',
+ 'òô' => '覶',
+ 'òõ' => '觶',
+ 'òö' => 'è',
+ 'ò÷' => 'èˆ',
+ 'òø' => 'èŠ',
+ 'òù' => 'è€',
+ 'òú' => 'è“',
+ 'òû' => 'è–',
+ 'òü' => 'è”',
+ 'òý' => 'è‹',
+ 'òþ' => 'è•',
+ 'ó@' => 'è‘',
+ 'óA' => 'è‚',
+ 'óB' => 'è’',
+ 'óC' => 'è—',
+ 'óD' => '豃',
+ 'óE' => 'è±·',
+ 'óF' => '豶',
+ 'óG' => '貚',
+ 'óH' => 'è´†',
+ 'óI' => 'è´‡',
+ 'óJ' => 'è´‰',
+ 'óK' => '趬',
+ 'óL' => '趪',
+ 'óM' => 'è¶',
+ 'óN' => '趫',
+ 'óO' => 'è¹',
+ 'óP' => '蹸',
+ 'óQ' => 'è¹³',
+ 'óR' => '蹪',
+ 'óS' => '蹯',
+ 'óT' => 'è¹»',
+ 'óU' => '軂',
+ 'óV' => 'è½’',
+ 'óW' => '轑',
+ 'óX' => 'è½',
+ 'óY' => 'è½',
+ 'óZ' => '轓',
+ 'ó[' => 'è¾´',
+ 'ó\\' => 'é…€',
+ 'ó]' => 'é„¿',
+ 'ó^' => '醰',
+ 'ó_' => 'é†',
+ 'ó`' => 'éž',
+ 'óa' => 'é‡',
+ 'ób' => 'é',
+ 'óc' => 'é‚',
+ 'ód' => 'éš',
+ 'óe' => 'é',
+ 'óf' => 'é¹',
+ 'óg' => 'é¬',
+ 'óh' => 'éŒ',
+ 'ói' => 'é™',
+ 'ój' => '鎩',
+ 'ók' => 'é¦',
+ 'ól' => 'éŠ',
+ 'óm' => 'é”',
+ 'ón' => 'é®',
+ 'óo' => 'é£',
+ 'óp' => 'é•',
+ 'óq' => 'é„',
+ 'ór' => 'éŽ',
+ 'ós' => 'é€',
+ 'ót' => 'é’',
+ 'óu' => 'é§',
+ 'óv' => '镽',
+ 'ów' => 'é—š',
+ 'óx' => 'é—›',
+ 'óy' => '雡',
+ 'óz' => '霩',
+ 'ó{' => '霫',
+ 'ó|' => '霬',
+ 'ó}' => '霨',
+ 'ó~' => '霦',
+ 'ó¡' => 'éž³',
+ 'ó¢' => 'éž·',
+ 'ó£' => '鞶',
+ 'ó¤' => 'éŸ',
+ 'ó¥' => '韞',
+ 'ó¦' => '韟',
+ 'ó§' => 'é¡œ',
+ 'ó¨' => 'é¡™',
+ 'ó©' => 'é¡',
+ 'óª' => 'é¡—',
+ 'ó«' => '颿',
+ 'ó¬' => '颽',
+ 'ó' => '颻',
+ 'ó®' => '颾',
+ 'ó¯' => '饈',
+ 'ó°' => '饇',
+ 'ó±' => '饃',
+ 'ó²' => '馦',
+ 'ó³' => '馧',
+ 'ó´' => '騚',
+ 'óµ' => '騕',
+ 'ó¶' => '騥',
+ 'ó·' => 'é¨',
+ 'ó¸' => '騤',
+ 'ó¹' => '騛',
+ 'óº' => '騢',
+ 'ó»' => 'é¨ ',
+ 'ó¼' => '騧',
+ 'ó½' => '騣',
+ 'ó¾' => '騞',
+ 'ó¿' => '騜',
+ 'óÀ' => '騔',
+ 'óÁ' => 'é«‚',
+ 'óÂ' => '鬋',
+ 'óÃ' => '鬊',
+ 'óÄ' => '鬎',
+ 'óÅ' => '鬌',
+ 'óÆ' => '鬷',
+ 'óÇ' => '鯪',
+ 'óÈ' => '鯫',
+ 'óÉ' => 'é¯ ',
+ 'óÊ' => '鯞',
+ 'óË' => '鯤',
+ 'óÌ' => '鯦',
+ 'óÍ' => '鯢',
+ 'óÎ' => '鯰',
+ 'óÏ' => '鯔',
+ 'óÐ' => '鯗',
+ 'óÑ' => '鯬',
+ 'óÒ' => '鯜',
+ 'óÓ' => '鯙',
+ 'óÔ' => '鯥',
+ 'óÕ' => '鯕',
+ 'óÖ' => '鯡',
+ 'ó×' => '鯚',
+ 'óØ' => 'éµ·',
+ 'óÙ' => 'é¶',
+ 'óÚ' => '鶊',
+ 'óÛ' => '鶄',
+ 'óÜ' => '鶈',
+ 'óÝ' => 'éµ±',
+ 'óÞ' => '鶀',
+ 'óß' => '鵸',
+ 'óà' => '鶆',
+ 'óá' => '鶋',
+ 'óâ' => '鶌',
+ 'óã' => 'éµ½',
+ 'óä' => '鵫',
+ 'óå' => 'éµ´',
+ 'óæ' => 'éµµ',
+ 'óç' => 'éµ°',
+ 'óè' => '鵩',
+ 'óé' => '鶅',
+ 'óê' => 'éµ³',
+ 'óë' => 'éµ»',
+ 'óì' => '鶂',
+ 'óí' => '鵯',
+ 'óî' => 'éµ¹',
+ 'óï' => '鵿',
+ 'óð' => '鶇',
+ 'óñ' => '鵨',
+ 'óò' => '麔',
+ 'óó' => '麑',
+ 'óô' => '黀',
+ 'óõ' => '黼',
+ 'óö' => 'é¼',
+ 'ó÷' => 'é½€',
+ 'óø' => 'é½',
+ 'óù' => 'é½',
+ 'óú' => 'é½–',
+ 'óû' => 'é½—',
+ 'óü' => '齘',
+ 'óý' => '匷',
+ 'óþ' => 'åš²',
+ 'ô@' => 'åšµ',
+ 'ôA' => 'åš³',
+ 'ôB' => '壣',
+ 'ôC' => 'å…',
+ 'ôD' => 'å·†',
+ 'ôE' => 'å·‡',
+ 'ôF' => 'å»®',
+ 'ôG' => '廯',
+ 'ôH' => 'å¿€',
+ 'ôI' => 'å¿',
+ 'ôJ' => '懹',
+ 'ôK' => 'æ”—',
+ 'ôL' => 'æ”–',
+ 'ôM' => '攕',
+ 'ôN' => '攓',
+ 'ôO' => 'æ—Ÿ',
+ 'ôP' => '曨',
+ 'ôQ' => '曣',
+ 'ôR' => '曤',
+ 'ôS' => '櫳',
+ 'ôT' => 'æ«°',
+ 'ôU' => '櫪',
+ 'ôV' => '櫨',
+ 'ôW' => '櫹',
+ 'ôX' => '櫱',
+ 'ôY' => 'æ«®',
+ 'ôZ' => '櫯',
+ 'ô[' => '瀼',
+ 'ô\\' => '瀵',
+ 'ô]' => '瀯',
+ 'ô^' => '瀷',
+ 'ô_' => '瀴',
+ 'ô`' => '瀱',
+ 'ôa' => 'ç‚',
+ 'ôb' => '瀸',
+ 'ôc' => '瀿',
+ 'ôd' => '瀺',
+ 'ôe' => '瀹',
+ 'ôf' => 'ç€',
+ 'ôg' => '瀻',
+ 'ôh' => '瀳',
+ 'ôi' => 'ç',
+ 'ôj' => '爓',
+ 'ôk' => '爔',
+ 'ôl' => '犨',
+ 'ôm' => 'ç½',
+ 'ôn' => 'ç¼',
+ 'ôo' => 'ç’º',
+ 'ôp' => 'çš«',
+ 'ôq' => '皪',
+ 'ôr' => 'çš¾',
+ 'ôs' => 'ç›',
+ 'ôt' => '矌',
+ 'ôu' => '矎',
+ 'ôv' => 'çŸ',
+ 'ôw' => 'çŸ',
+ 'ôx' => '矲',
+ 'ôy' => '礥',
+ 'ôz' => '礣',
+ 'ô{' => '礧',
+ 'ô|' => '礨',
+ 'ô}' => '礤',
+ 'ô~' => '礩',
+ 'ô¡' => '禲',
+ 'ô¢' => 'ç©®',
+ 'ô£' => '穬',
+ 'ô¤' => 'ç©',
+ 'ô¥' => 'ç«·',
+ 'ô¦' => '籉',
+ 'ô§' => '籈',
+ 'ô¨' => '籊',
+ 'ô©' => '籇',
+ 'ôª' => 'ç±…',
+ 'ô«' => 'ç³®',
+ 'ô¬' => 'ç¹»',
+ 'ô' => 'ç¹¾',
+ 'ô®' => 'çº',
+ 'ô¯' => '纀',
+ 'ô°' => '羺',
+ 'ô±' => 'ç¿¿',
+ 'ô²' => 'è¹',
+ 'ô³' => '臛',
+ 'ô´' => '臙',
+ 'ôµ' => '舋',
+ 'ô¶' => '艨',
+ 'ô·' => '艩',
+ 'ô¸' => '蘢',
+ 'ô¹' => 'è—¿',
+ 'ôº' => 'è˜',
+ 'ô»' => 'è—¾',
+ 'ô¼' => '蘛',
+ 'ô½' => '蘀',
+ 'ô¾' => 'è—¶',
+ 'ô¿' => '蘄',
+ 'ôÀ' => '蘉',
+ 'ôÁ' => '蘅',
+ 'ôÂ' => '蘌',
+ 'ôÃ' => 'è—½',
+ 'ôÄ' => 'è ™',
+ 'ôÅ' => 'è ',
+ 'ôÆ' => 'è ‘',
+ 'ôÇ' => 'è —',
+ 'ôÈ' => 'è “',
+ 'ôÉ' => 'è –',
+ 'ôÊ' => '襣',
+ 'ôË' => '襦',
+ 'ôÌ' => '覹',
+ 'ôÍ' => '觷',
+ 'ôÎ' => 'è ',
+ 'ôÏ' => 'èª',
+ 'ôÐ' => 'è',
+ 'ôÑ' => 'è¨',
+ 'ôÒ' => 'è£',
+ 'ôÓ' => 'è¥',
+ 'ôÔ' => 'è§',
+ 'ôÕ' => 'è',
+ 'ôÖ' => '趮',
+ 'ô×' => '躆',
+ 'ôØ' => '躈',
+ 'ôÙ' => '躄',
+ 'ôÚ' => 'è½™',
+ 'ôÛ' => 'è½–',
+ 'ôÜ' => 'è½—',
+ 'ôÝ' => '轕',
+ 'ôÞ' => '轘',
+ 'ôß' => '轚',
+ 'ôà' => 'é‚',
+ 'ôá' => 'é…ƒ',
+ 'ôâ' => 'é…',
+ 'ôã' => '醷',
+ 'ôä' => '醵',
+ 'ôå' => '醲',
+ 'ôæ' => '醳',
+ 'ôç' => 'é‹',
+ 'ôè' => 'é“',
+ 'ôé' => 'é»',
+ 'ôê' => 'é ',
+ 'ôë' => 'é',
+ 'ôì' => 'é”',
+ 'ôí' => 'é¾',
+ 'ôî' => 'é•',
+ 'ôï' => 'é',
+ 'ôð' => 'é¨',
+ 'ôñ' => 'é™',
+ 'ôò' => 'é',
+ 'ôó' => 'éµ',
+ 'ôô' => 'é€',
+ 'ôõ' => 'é·',
+ 'ôö' => 'é‡',
+ 'ô÷' => 'éŽ',
+ 'ôø' => 'é–',
+ 'ôù' => 'é’',
+ 'ôú' => 'éº',
+ 'ôû' => 'é‰',
+ 'ôü' => 'é¸',
+ 'ôý' => 'éŠ',
+ 'ôþ' => 'é¿',
+ 'õ@' => 'é¼',
+ 'õA' => 'éŒ',
+ 'õB' => 'é¶',
+ 'õC' => 'é‘',
+ 'õD' => 'é†',
+ 'õE' => 'é—ž',
+ 'õF' => 'é— ',
+ 'õG' => 'é—Ÿ',
+ 'õH' => '霮',
+ 'õI' => '霯',
+ 'õJ' => 'éž¹',
+ 'õK' => 'éž»',
+ 'õL' => '韽',
+ 'õM' => '韾',
+ 'õN' => 'é¡ ',
+ 'õO' => 'é¡¢',
+ 'õP' => 'é¡£',
+ 'õQ' => 'é¡Ÿ',
+ 'õR' => 'é£',
+ 'õS' => '飂',
+ 'õT' => 'é¥',
+ 'õU' => '饎',
+ 'õV' => '饙',
+ 'õW' => '饌',
+ 'õX' => '饋',
+ 'õY' => '饓',
+ 'õZ' => '騲',
+ 'õ[' => '騴',
+ 'õ\\' => '騱',
+ 'õ]' => '騬',
+ 'õ^' => '騪',
+ 'õ_' => '騶',
+ 'õ`' => '騩',
+ 'õa' => '騮',
+ 'õb' => '騸',
+ 'õc' => 'é¨',
+ 'õd' => '髇',
+ 'õe' => 'é«Š',
+ 'õf' => '髆',
+ 'õg' => 'é¬',
+ 'õh' => '鬒',
+ 'õi' => '鬑',
+ 'õj' => 'é°‹',
+ 'õk' => 'é°ˆ',
+ 'õl' => '鯷',
+ 'õm' => 'é°…',
+ 'õn' => 'é°’',
+ 'õo' => '鯸',
+ 'õp' => 'é±€',
+ 'õq' => 'é°‡',
+ 'õr' => 'é°Ž',
+ 'õs' => 'é°†',
+ 'õt' => 'é°—',
+ 'õu' => 'é°”',
+ 'õv' => 'é°‰',
+ 'õw' => '鶟',
+ 'õx' => '鶙',
+ 'õy' => '鶤',
+ 'õz' => 'é¶',
+ 'õ{' => '鶒',
+ 'õ|' => '鶘',
+ 'õ}' => 'é¶',
+ 'õ~' => '鶛',
+ 'õ¡' => 'é¶ ',
+ 'õ¢' => '鶔',
+ 'õ£' => '鶜',
+ 'õ¤' => '鶪',
+ 'õ¥' => '鶗',
+ 'õ¦' => '鶡',
+ 'õ§' => '鶚',
+ 'õ¨' => '鶢',
+ 'õ©' => '鶨',
+ 'õª' => '鶞',
+ 'õ«' => '鶣',
+ 'õ¬' => '鶿',
+ 'õ' => '鶩',
+ 'õ®' => '鶖',
+ 'õ¯' => '鶦',
+ 'õ°' => '鶧',
+ 'õ±' => '麙',
+ 'õ²' => '麛',
+ 'õ³' => '麚',
+ 'õ´' => '黥',
+ 'õµ' => '黤',
+ 'õ¶' => '黧',
+ 'õ·' => '黦',
+ 'õ¸' => 'é¼°',
+ 'õ¹' => 'é¼®',
+ 'õº' => 'é½›',
+ 'õ»' => 'é½ ',
+ 'õ¼' => '齞',
+ 'õ½' => 'é½',
+ 'õ¾' => 'é½™',
+ 'õ¿' => '龑',
+ 'õÀ' => '儺',
+ 'õÁ' => '儹',
+ 'õÂ' => '劘',
+ 'õÃ' => '劗',
+ 'õÄ' => '囃',
+ 'õÅ' => 'åš½',
+ 'õÆ' => 'åš¾',
+ 'õÇ' => 'åˆ',
+ 'õÈ' => 'å‡',
+ 'õÉ' => 'å·‹',
+ 'õÊ' => 'å·',
+ 'õË' => 'å»±',
+ 'õÌ' => '懽',
+ 'õÍ' => 'æ”›',
+ 'õÎ' => '欂',
+ 'õÏ' => '櫼',
+ 'õÐ' => '欃',
+ 'õÑ' => '櫸',
+ 'õÒ' => '欀',
+ 'õÓ' => 'çƒ',
+ 'õÔ' => 'ç„',
+ 'õÕ' => 'çŠ',
+ 'õÖ' => 'çˆ',
+ 'õ×' => 'ç‰',
+ 'õØ' => 'ç…',
+ 'õÙ' => 'ç†',
+ 'õÚ' => 'çˆ',
+ 'õÛ' => '爚',
+ 'õÜ' => '爙',
+ 'õÝ' => 'ç¾',
+ 'õÞ' => 'ç”—',
+ 'õß' => '癪',
+ 'õà' => 'çŸ',
+ 'õá' => 'ç¤',
+ 'õâ' => '礱',
+ 'õã' => '礯',
+ 'õä' => 'ç±”',
+ 'õå' => '籓',
+ 'õæ' => 'ç³²',
+ 'õç' => '纊',
+ 'õè' => '纇',
+ 'õé' => '纈',
+ 'õê' => '纋',
+ 'õë' => '纆',
+ 'õì' => 'çº',
+ 'õí' => 'ç½',
+ 'õî' => 'ç¾»',
+ 'õï' => '耰',
+ 'õð' => 'è‡',
+ 'õñ' => '蘘',
+ 'õò' => '蘪',
+ 'õó' => '蘦',
+ 'õô' => '蘟',
+ 'õõ' => '蘣',
+ 'õö' => '蘜',
+ 'õ÷' => '蘙',
+ 'õø' => '蘧',
+ 'õù' => '蘮',
+ 'õú' => '蘡',
+ 'õû' => 'è˜ ',
+ 'õü' => '蘩',
+ 'õý' => '蘞',
+ 'õþ' => '蘥',
+ 'ö@' => 'è ©',
+ 'öA' => 'è ',
+ 'öB' => 'è ›',
+ 'öC' => 'è ',
+ 'öD' => 'è ¤',
+ 'öE' => 'è œ',
+ 'öF' => 'è «',
+ 'öG' => 'è¡Š',
+ 'öH' => 'è¥',
+ 'öI' => '襩',
+ 'öJ' => '襮',
+ 'öK' => '襫',
+ 'öL' => '觺',
+ 'öM' => 'è¹',
+ 'öN' => 'è¸',
+ 'öO' => 'è…',
+ 'öP' => 'èº',
+ 'öQ' => 'è»',
+ 'öR' => 'è´',
+ 'öS' => 'è´”',
+ 'öT' => '趯',
+ 'öU' => '躎',
+ 'öV' => '躌',
+ 'öW' => '轞',
+ 'öX' => 'è½›',
+ 'öY' => 'è½',
+ 'öZ' => 'é…†',
+ 'ö[' => 'é…„',
+ 'ö\\' => 'é……',
+ 'ö]' => '醹',
+ 'ö^' => 'é¿',
+ 'ö_' => 'é»',
+ 'ö`' => 'é¶',
+ 'öa' => 'é©',
+ 'öb' => 'é½',
+ 'öc' => 'é¼',
+ 'öd' => 'é°',
+ 'öe' => 'é¹',
+ 'öf' => 'éª',
+ 'ög' => 'é·',
+ 'öh' => 'é¬',
+ 'öi' => 'é‘€',
+ 'öj' => 'é±',
+ 'ök' => 'é—¥',
+ 'öl' => 'é—¤',
+ 'öm' => 'é—£',
+ 'ön' => '霵',
+ 'öo' => '霺',
+ 'öp' => 'éž¿',
+ 'öq' => '韡',
+ 'ör' => '顤',
+ 'ös' => '飉',
+ 'öt' => '飆',
+ 'öu' => '飀',
+ 'öv' => '饘',
+ 'öw' => '饖',
+ 'öx' => '騹',
+ 'öy' => '騽',
+ 'öz' => '驆',
+ 'ö{' => 'é©„',
+ 'ö|' => 'é©‚',
+ 'ö}' => 'é©',
+ 'ö~' => '騺',
+ 'ö¡' => '騿',
+ 'ö¢' => 'é«',
+ 'ö£' => '鬕',
+ 'ö¤' => '鬗',
+ 'ö¥' => '鬘',
+ 'ö¦' => '鬖',
+ 'ö§' => '鬺',
+ 'ö¨' => 'é’',
+ 'ö©' => 'é°«',
+ 'öª' => 'é°',
+ 'ö«' => 'é°œ',
+ 'ö¬' => 'é°¬',
+ 'ö' => 'é°£',
+ 'ö®' => 'é°¨',
+ 'ö¯' => 'é°©',
+ 'ö°' => 'é°¤',
+ 'ö±' => 'é°¡',
+ 'ö²' => '鶷',
+ 'ö³' => '鶶',
+ 'ö´' => '鶼',
+ 'öµ' => 'é·',
+ 'ö¶' => 'é·‡',
+ 'ö·' => 'é·Š',
+ 'ö¸' => 'é·',
+ 'ö¹' => '鶾',
+ 'öº' => 'é·…',
+ 'ö»' => 'é·ƒ',
+ 'ö¼' => '鶻',
+ 'ö½' => '鶵',
+ 'ö¾' => 'é·Ž',
+ 'ö¿' => '鶹',
+ 'öÀ' => '鶺',
+ 'öÁ' => '鶬',
+ 'öÂ' => 'é·ˆ',
+ 'öÃ' => '鶱',
+ 'öÄ' => 'é¶',
+ 'öÅ' => 'é·Œ',
+ 'öÆ' => '鶳',
+ 'öÇ' => 'é·',
+ 'öÈ' => '鶲',
+ 'öÉ' => '鹺',
+ 'öÊ' => '麜',
+ 'öË' => '黫',
+ 'öÌ' => 'é»®',
+ 'öÍ' => 'é»',
+ 'öÎ' => 'é¼›',
+ 'öÏ' => '鼘',
+ 'öÐ' => '鼚',
+ 'öÑ' => 'é¼±',
+ 'öÒ' => '齎',
+ 'öÓ' => 'é½¥',
+ 'öÔ' => '齤',
+ 'öÕ' => 'é¾’',
+ 'öÖ' => '亹',
+ 'ö×' => '囆',
+ 'öØ' => 'å›…',
+ 'öÙ' => '囋',
+ 'öÚ' => '奱',
+ 'öÛ' => 'å‹',
+ 'öÜ' => 'åŒ',
+ 'öÝ' => 'å·•',
+ 'öÞ' => 'å·‘',
+ 'öß' => '廲',
+ 'öà' => '攡',
+ 'öá' => 'æ” ',
+ 'öâ' => '攦',
+ 'öã' => '攢',
+ 'öä' => '欋',
+ 'öå' => '欈',
+ 'öæ' => '欉',
+ 'öç' => 'æ°',
+ 'öè' => 'ç•',
+ 'öé' => 'ç–',
+ 'öê' => 'ç—',
+ 'öë' => 'ç’',
+ 'öì' => '爞',
+ 'öí' => '爟',
+ 'öî' => '犩',
+ 'öï' => 'ç¿',
+ 'öð' => '瓘',
+ 'öñ' => 'ç“•',
+ 'öò' => 'ç“™',
+ 'öó' => 'ç“—',
+ 'öô' => 'ç™',
+ 'öõ' => 'çš',
+ 'öö' => '礵',
+ 'ö÷' => '禴',
+ 'öø' => 'ç©°',
+ 'öù' => '穱',
+ 'öú' => 'ç±—',
+ 'öû' => '籜',
+ 'öü' => 'ç±™',
+ 'öý' => 'ç±›',
+ 'öþ' => '籚',
+ '÷@' => 'ç³´',
+ '÷A' => 'ç³±',
+ '÷B' => '纑',
+ '÷C' => 'ç½',
+ '÷D' => '羇',
+ '÷E' => '臞',
+ '÷F' => '艫',
+ '÷G' => '蘴',
+ '÷H' => '蘵',
+ '÷I' => '蘳',
+ '÷J' => '蘬',
+ '÷K' => '蘲',
+ '÷L' => '蘶',
+ '÷M' => 'è ¬',
+ '÷N' => 'è ¨',
+ '÷O' => 'è ¦',
+ '÷P' => 'è ª',
+ '÷Q' => 'è ¥',
+ '÷R' => '襱',
+ '÷S' => '覿',
+ '÷T' => '覾',
+ '÷U' => '觻',
+ '÷V' => 'è¾',
+ '÷W' => '讄',
+ '÷X' => '讂',
+ '÷Y' => '讆',
+ '÷Z' => 'è®…',
+ '÷[' => 'è¿',
+ '÷\\' => 'è´•',
+ '÷]' => '躕',
+ '÷^' => '躔',
+ '÷_' => '躚',
+ '÷`' => '躒',
+ '÷a' => 'èº',
+ '÷b' => '躖',
+ '÷c' => '躗',
+ '÷d' => 'è½ ',
+ '÷e' => 'è½¢',
+ '÷f' => 'é…‡',
+ '÷g' => 'é‘Œ',
+ '÷h' => 'é‘',
+ '÷i' => 'é‘Š',
+ '÷j' => 'é‘‹',
+ '÷k' => 'é‘',
+ '÷l' => '鑇',
+ '÷m' => 'é‘…',
+ '÷n' => '鑈',
+ '÷o' => '鑉',
+ '÷p' => '鑆',
+ '÷q' => '霿',
+ '÷r' => '韣',
+ '÷s' => '顪',
+ '÷t' => 'é¡©',
+ '÷u' => '飋',
+ '÷v' => '饔',
+ '÷w' => '饛',
+ '÷x' => 'é©Ž',
+ '÷y' => 'é©“',
+ '÷z' => 'é©”',
+ '÷{' => 'é©Œ',
+ '÷|' => 'é©',
+ '÷}' => '驈',
+ '÷~' => 'é©Š',
+ '÷¡' => '驉',
+ '÷¢' => 'é©’',
+ '÷£' => 'é©',
+ '÷¤' => 'é«',
+ '÷¥' => '鬙',
+ '÷¦' => '鬫',
+ '÷§' => '鬻',
+ '÷¨' => 'é–',
+ '÷©' => 'é•',
+ '÷ª' => '鱆',
+ '÷«' => '鱈',
+ '÷¬' => 'é°¿',
+ '÷' => '鱄',
+ '÷®' => 'é°¹',
+ '÷¯' => 'é°³',
+ '÷°' => 'é±',
+ '÷±' => 'é°¼',
+ '÷²' => 'é°·',
+ '÷³' => 'é°´',
+ '÷´' => 'é°²',
+ '÷µ' => 'é°½',
+ '÷¶' => 'é°¶',
+ '÷·' => 'é·›',
+ '÷¸' => 'é·’',
+ '÷¹' => 'é·ž',
+ '÷º' => 'é·š',
+ '÷»' => 'é·‹',
+ '÷¼' => 'é·',
+ '÷½' => 'é·œ',
+ '÷¾' => 'é·‘',
+ '÷¿' => 'é·Ÿ',
+ '÷À' => 'é·©',
+ '÷Á' => 'é·™',
+ '÷Â' => 'é·˜',
+ '÷Ã' => 'é·–',
+ '÷Ä' => 'é·µ',
+ '÷Å' => 'é·•',
+ '÷Æ' => 'é·',
+ '÷Ç' => '麶',
+ '÷È' => 'é»°',
+ '÷É' => 'é¼µ',
+ '÷Ê' => 'é¼³',
+ '÷Ë' => 'é¼²',
+ '÷Ì' => '齂',
+ '÷Í' => '齫',
+ '÷Î' => '龕',
+ '÷Ï' => 'é¾¢',
+ '÷Ð' => '儽',
+ '÷Ñ' => '劙',
+ '÷Ò' => '壨',
+ '÷Ó' => '壧',
+ '÷Ô' => '奲',
+ '÷Õ' => 'å',
+ '÷Ö' => 'å·˜',
+ '÷×' => 'è ¯',
+ '÷Ø' => 'å½',
+ '÷Ù' => 'æˆ',
+ '÷Ú' => '戃',
+ '÷Û' => '戄',
+ '÷Ü' => '攩',
+ '÷Ý' => '攥',
+ '÷Þ' => 'æ––',
+ '÷ß' => '曫',
+ '÷à' => '欑',
+ '÷á' => '欒',
+ '÷â' => 'æ¬',
+ '÷ã' => '毊',
+ '÷ä' => 'ç›',
+ '÷å' => 'çš',
+ '÷æ' => '爢',
+ '÷ç' => '玂',
+ '÷è' => 'çŽ',
+ '÷é' => '玃',
+ '÷ê' => 'ç™°',
+ '÷ë' => '矔',
+ '÷ì' => '籧',
+ '÷í' => '籦',
+ '÷î' => '纕',
+ '÷ï' => '艬',
+ '÷ð' => '蘺',
+ '÷ñ' => '虀',
+ '÷ò' => '蘹',
+ '÷ó' => '蘼',
+ '÷ô' => '蘱',
+ '÷õ' => '蘻',
+ '÷ö' => '蘾',
+ '÷÷' => 'è °',
+ '÷ø' => 'è ²',
+ '÷ù' => 'è ®',
+ '÷ú' => 'è ³',
+ '÷û' => '襶',
+ '÷ü' => '襴',
+ '÷ý' => '襳',
+ '÷þ' => '觾',
+ 'ø@' => '讌',
+ 'øA' => '讎',
+ 'øB' => '讋',
+ 'øC' => '讈',
+ 'øD' => 'è±…',
+ 'øE' => 'è´™',
+ 'øF' => '躘',
+ 'øG' => '轤',
+ 'øH' => 'è½£',
+ 'øI' => '醼',
+ 'øJ' => 'é‘¢',
+ 'øK' => 'é‘•',
+ 'øL' => 'é‘',
+ 'øM' => 'é‘—',
+ 'øN' => 'é‘ž',
+ 'øO' => '韄',
+ 'øP' => '韅',
+ 'øQ' => 'é €',
+ 'øR' => 'é©–',
+ 'øS' => 'é©™',
+ 'øT' => '鬞',
+ 'øU' => '鬟',
+ 'øV' => 'é¬ ',
+ 'øW' => 'é±’',
+ 'øX' => '鱘',
+ 'øY' => 'é±',
+ 'øZ' => '鱊',
+ 'ø[' => 'é±',
+ 'ø\\' => '鱋',
+ 'ø]' => '鱕',
+ 'ø^' => 'é±™',
+ 'ø_' => '鱌',
+ 'ø`' => '鱎',
+ 'øa' => 'é·»',
+ 'øb' => 'é··',
+ 'øc' => 'é·¯',
+ 'ød' => 'é·£',
+ 'øe' => 'é·«',
+ 'øf' => 'é·¸',
+ 'øg' => 'é·¤',
+ 'øh' => 'é·¶',
+ 'øi' => 'é·¡',
+ 'øj' => 'é·®',
+ 'øk' => 'é·¦',
+ 'øl' => 'é·²',
+ 'øm' => 'é·°',
+ 'øn' => 'é·¢',
+ 'øo' => 'é·¬',
+ 'øp' => 'é·´',
+ 'øq' => 'é·³',
+ 'ør' => 'é·¨',
+ 'øs' => 'é·',
+ 'øt' => '黂',
+ 'øu' => 'é»',
+ 'øv' => '黲',
+ 'øw' => '黳',
+ 'øx' => '鼆',
+ 'øy' => '鼜',
+ 'øz' => '鼸',
+ 'ø{' => 'é¼·',
+ 'ø|' => '鼶',
+ 'ø}' => '齃',
+ 'ø~' => 'é½',
+ 'ø¡' => 'é½±',
+ 'ø¢' => 'é½°',
+ 'ø£' => 'é½®',
+ 'ø¤' => '齯',
+ 'ø¥' => '囓',
+ 'ø¦' => 'å›',
+ 'ø§' => 'åŽ',
+ 'ø¨' => 'å±',
+ 'ø©' => 'æ”',
+ 'øª' => 'æ›',
+ 'ø«' => 'æ›®',
+ 'ø¬' => '欓',
+ 'ø' => 'çŸ',
+ 'ø®' => 'ç¡',
+ 'ø¯' => 'ç',
+ 'ø°' => 'ç ',
+ 'ø±' => '爣',
+ 'ø²' => 'ç“›',
+ 'ø³' => 'ç“¥',
+ 'ø´' => '矕',
+ 'øµ' => '礸',
+ 'ø¶' => '禷',
+ 'ø·' => '禶',
+ 'ø¸' => '籪',
+ 'ø¹' => '纗',
+ 'øº' => '羉',
+ 'ø»' => 'è‰',
+ 'ø¼' => '虃',
+ 'ø½' => 'è ¸',
+ 'ø¾' => 'è ·',
+ 'ø¿' => 'è µ',
+ 'øÀ' => 'è¡‹',
+ 'øÁ' => 'è®”',
+ 'øÂ' => '讕',
+ 'øÃ' => '躞',
+ 'øÄ' => '躟',
+ 'øÅ' => 'èº ',
+ 'øÆ' => 'èº',
+ 'øÇ' => '醾',
+ 'øÈ' => '醽',
+ 'øÉ' => '釂',
+ 'øÊ' => 'é‘«',
+ 'øË' => '鑨',
+ 'øÌ' => 'é‘©',
+ 'øÍ' => '雥',
+ 'øÎ' => 'é†',
+ 'øÏ' => 'éƒ',
+ 'øÐ' => 'é‡',
+ 'øÑ' => '韇',
+ 'øÒ' => '韥',
+ 'øÓ' => 'é©ž',
+ 'øÔ' => 'é«•',
+ 'øÕ' => 'é™',
+ 'øÖ' => 'é±£',
+ 'ø×' => '鱧',
+ 'øØ' => '鱦',
+ 'øÙ' => 'é±¢',
+ 'øÚ' => '鱞',
+ 'øÛ' => 'é± ',
+ 'øÜ' => '鸂',
+ 'øÝ' => 'é·¾',
+ 'øÞ' => '鸇',
+ 'øß' => '鸃',
+ 'øà' => '鸆',
+ 'øá' => '鸅',
+ 'øâ' => '鸀',
+ 'øã' => 'é¸',
+ 'øä' => '鸉',
+ 'øå' => 'é·¿',
+ 'øæ' => 'é·½',
+ 'øç' => '鸄',
+ 'øè' => 'éº ',
+ 'øé' => '鼞',
+ 'øê' => '齆',
+ 'øë' => 'é½´',
+ 'øì' => 'é½µ',
+ 'øí' => '齶',
+ 'øî' => 'å›”',
+ 'øï' => 'æ”®',
+ 'øð' => 'æ–¸',
+ 'øñ' => '欘',
+ 'øò' => '欙',
+ 'øó' => '欗',
+ 'øô' => '欚',
+ 'øõ' => 'ç¢',
+ 'øö' => '爦',
+ 'ø÷' => '犪',
+ 'øø' => '矘',
+ 'øù' => '矙',
+ 'øú' => '礹',
+ 'øû' => '籩',
+ 'øü' => '籫',
+ 'øý' => '糶',
+ 'øþ' => '纚',
+ 'ù@' => '纘',
+ 'ùA' => '纛',
+ 'ùB' => '纙',
+ 'ùC' => 'è‡ ',
+ 'ùD' => '臡',
+ 'ùE' => '虆',
+ 'ùF' => '虇',
+ 'ùG' => '虈',
+ 'ùH' => '襹',
+ 'ùI' => '襺',
+ 'ùJ' => '襼',
+ 'ùK' => '襻',
+ 'ùL' => '觿',
+ 'ùM' => '讘',
+ 'ùN' => 'è®™',
+ 'ùO' => '躥',
+ 'ùP' => '躤',
+ 'ùQ' => '躣',
+ 'ùR' => 'é‘®',
+ 'ùS' => 'é‘',
+ 'ùT' => '鑯',
+ 'ùU' => '鑱',
+ 'ùV' => '鑳',
+ 'ùW' => 'é‰',
+ 'ùX' => '顲',
+ 'ùY' => '饟',
+ 'ùZ' => '鱨',
+ 'ù[' => 'é±®',
+ 'ù\\' => 'é±',
+ 'ù]' => '鸋',
+ 'ù^' => 'é¸',
+ 'ù_' => 'é¸',
+ 'ù`' => 'é¸',
+ 'ùa' => '鸒',
+ 'ùb' => '鸑',
+ 'ùc' => '麡',
+ 'ùd' => '黵',
+ 'ùe' => '鼉',
+ 'ùf' => '齇',
+ 'ùg' => '齸',
+ 'ùh' => 'é½»',
+ 'ùi' => '齺',
+ 'ùj' => 'é½¹',
+ 'ùk' => '圞',
+ 'ùl' => 'ç¦',
+ 'ùm' => '籯',
+ 'ùn' => 'è ¼',
+ 'ùo' => '趲',
+ 'ùp' => '躦',
+ 'ùq' => '釃',
+ 'ùr' => 'é‘´',
+ 'ùs' => '鑸',
+ 'ùt' => '鑶',
+ 'ùu' => '鑵',
+ 'ùv' => 'é© ',
+ 'ùw' => 'é±´',
+ 'ùx' => 'é±³',
+ 'ùy' => 'é±±',
+ 'ùz' => 'é±µ',
+ 'ù{' => '鸔',
+ 'ù|' => '鸓',
+ 'ù}' => '黶',
+ 'ù~' => '鼊',
+ 'ù¡' => '龤',
+ 'ù¢' => 'ç¨',
+ 'ù£' => 'ç¥',
+ 'ù¤' => 'ç³·',
+ 'ù¥' => '虪',
+ 'ù¦' => 'è ¾',
+ 'ù§' => 'è ½',
+ 'ù¨' => 'è ¿',
+ 'ù©' => '讞',
+ 'ùª' => '貜',
+ 'ù«' => '躩',
+ 'ù¬' => '軉',
+ 'ù' => 'é‹',
+ 'ù®' => '顳',
+ 'ù¯' => 'é¡´',
+ 'ù°' => '飌',
+ 'ù±' => '饡',
+ 'ù²' => '馫',
+ 'ù³' => '驤',
+ 'ù´' => '驦',
+ 'ùµ' => '驧',
+ 'ù¶' => '鬤',
+ 'ù·' => '鸕',
+ 'ù¸' => '鸗',
+ 'ù¹' => '齈',
+ 'ùº' => '戇',
+ 'ù»' => '欞',
+ 'ù¼' => '爧',
+ 'ù½' => '虌',
+ 'ù¾' => '躨',
+ 'ù¿' => 'é’‚',
+ 'ùÀ' => 'é’€',
+ 'ùÁ' => 'é’',
+ 'ùÂ' => 'é©©',
+ 'ùÃ' => '驨',
+ 'ùÄ' => '鬮',
+ 'ùÅ' => '鸙',
+ 'ùÆ' => '爩',
+ 'ùÇ' => '虋',
+ 'ùÈ' => '讟',
+ 'ùÉ' => 'é’ƒ',
+ 'ùÊ' => 'é±¹',
+ 'ùË' => '麷',
+ 'ùÌ' => '癵',
+ 'ùÍ' => 'é©«',
+ 'ùÎ' => '鱺',
+ 'ùÏ' => 'é¸',
+ 'ùÐ' => 'ç©',
+ 'ùÑ' => 'çª',
+ 'ùÒ' => '麤',
+ 'ùÓ' => 'é½¾',
+ 'ùÔ' => '齉',
+ 'ùÕ' => '龘',
+);
+
+$result =& $data;
+unset($data);
+
+return $result;
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp037.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp037.php
new file mode 100644
index 00000000..a014e4b4
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp037.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1006.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1006.php
new file mode 100644
index 00000000..2b5e7beb
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1006.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1026.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1026.php
new file mode 100644
index 00000000..aba455b5
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1026.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp424.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp424.php
new file mode 100644
index 00000000..e8e23703
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp424.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp437.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp437.php
new file mode 100644
index 00000000..e3ebb45c
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp437.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp500.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp500.php
new file mode 100644
index 00000000..3771c8f6
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp500.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp737.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp737.php
new file mode 100644
index 00000000..2d67d33f
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp737.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp775.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp775.php
new file mode 100644
index 00000000..1fbc4cdc
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp775.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp850.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp850.php
new file mode 100644
index 00000000..0b314c80
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp850.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp852.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp852.php
new file mode 100644
index 00000000..f8c318ca
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp852.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp855.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp855.php
new file mode 100644
index 00000000..48440ba1
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp855.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp856.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp856.php
new file mode 100644
index 00000000..c9cac0c3
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp856.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp857.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp857.php
new file mode 100644
index 00000000..3e7770ad
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp857.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp860.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp860.php
new file mode 100644
index 00000000..2a52d473
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp860.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp861.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp861.php
new file mode 100644
index 00000000..4ba6573c
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp861.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp862.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp862.php
new file mode 100644
index 00000000..d2a29a22
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp862.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp863.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp863.php
new file mode 100644
index 00000000..1f36b9a2
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp863.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp864.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp864.php
new file mode 100644
index 00000000..953e4635
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp864.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp865.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp865.php
new file mode 100644
index 00000000..2668bcc4
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp865.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp866.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp866.php
new file mode 100644
index 00000000..a7b47f8f
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp866.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp869.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp869.php
new file mode 100644
index 00000000..0f040548
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp869.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp874.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp874.php
new file mode 100644
index 00000000..47994569
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp874.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp875.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp875.php
new file mode 100644
index 00000000..85616453
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp875.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp932.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp932.php
new file mode 100644
index 00000000..0bf828ff
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp932.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp936.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp936.php
new file mode 100644
index 00000000..a593d05d
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp936.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp949.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp949.php
new file mode 100644
index 00000000..d4e99f1f
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp949.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp950.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp950.php
new file mode 100644
index 00000000..267b1906
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.cp950.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-1.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-1.php
new file mode 100644
index 00000000..d7a217c9
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-1.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-10.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-10.php
new file mode 100644
index 00000000..d60f6473
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-10.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-11.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-11.php
new file mode 100644
index 00000000..d69220bf
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-11.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-13.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-13.php
new file mode 100644
index 00000000..838783f1
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-13.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-14.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-14.php
new file mode 100644
index 00000000..65a48ee3
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-14.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-15.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-15.php
new file mode 100644
index 00000000..42e50e0f
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-15.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-16.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-16.php
new file mode 100644
index 00000000..46758a6a
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-16.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-2.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-2.php
new file mode 100644
index 00000000..5f23f515
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-2.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-3.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-3.php
new file mode 100644
index 00000000..b31bb83f
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-3.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-4.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-4.php
new file mode 100644
index 00000000..9cbf9f37
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-4.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-5.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-5.php
new file mode 100644
index 00000000..fd038823
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-5.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-6.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-6.php
new file mode 100644
index 00000000..ed6f72f3
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-6.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-7.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-7.php
new file mode 100644
index 00000000..cf723ac6
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-7.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-8.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-8.php
new file mode 100644
index 00000000..c978731a
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-8.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-9.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-9.php
new file mode 100644
index 00000000..2a3e36a4
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-9.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-r.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-r.php
new file mode 100644
index 00000000..d83c2125
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-r.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-u.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-u.php
new file mode 100644
index 00000000..dbbf96be
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-u.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.us-ascii.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.us-ascii.php
new file mode 100644
index 00000000..94a93b28
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.us-ascii.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1250.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1250.php
new file mode 100644
index 00000000..d1d5e6f2
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1250.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1251.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1251.php
new file mode 100644
index 00000000..f422a71f
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1251.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1252.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1252.php
new file mode 100644
index 00000000..ba6d203d
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1252.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1253.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1253.php
new file mode 100644
index 00000000..c04dc8f0
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1253.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1254.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1254.php
new file mode 100644
index 00000000..1cfadcf2
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1254.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1255.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1255.php
new file mode 100644
index 00000000..f73cbb6f
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1255.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1256.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1256.php
new file mode 100644
index 00000000..953704f6
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1256.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1257.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1257.php
new file mode 100644
index 00000000..78580ece
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1257.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1258.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1258.php
new file mode 100644
index 00000000..de1609d8
Binary files /dev/null and b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1258.php differ
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/translit.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/translit.php
new file mode 100644
index 00000000..f322ff0d
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-iconv/Resources/charset/translit.php
@@ -0,0 +1,4106 @@
+ 'μ',
+ '¼' => ' 1â„4 ',
+ '½' => ' 1â„2 ',
+ '¾' => ' 3â„4 ',
+ 'IJ' => 'IJ',
+ 'ij' => 'ij',
+ 'Ŀ' => 'L·',
+ 'ŀ' => 'l·',
+ 'ʼn' => 'ʼn',
+ 'Å¿' => 's',
+ 'DŽ' => 'DŽ',
+ 'Dž' => 'Dž',
+ 'dž' => 'dž',
+ 'LJ' => 'LJ',
+ 'Lj' => 'Lj',
+ 'lj' => 'lj',
+ 'ÇŠ' => 'NJ',
+ 'Ç‹' => 'Nj',
+ 'nj' => 'nj',
+ 'DZ' => 'DZ',
+ 'Dz' => 'Dz',
+ 'dz' => 'dz',
+ 'Ï' => 'β',
+ 'ϑ' => 'θ',
+ 'Ï’' => 'Î¥',
+ 'ϕ' => 'φ',
+ 'Ï–' => 'Ï€',
+ 'ϰ' => 'κ',
+ 'ϱ' => 'Ï',
+ 'ϲ' => 'ς',
+ 'ϴ' => 'Θ',
+ 'ϵ' => 'ε',
+ 'Ϲ' => 'Σ',
+ 'Ö‡' => 'Õ¥Ö‚',
+ 'ٵ' => 'اٴ',
+ 'ٶ' => 'وٴ',
+ 'Ù·' => 'Û‡Ù´',
+ 'ٸ' => 'يٴ',
+ 'ำ' => 'à¹à¸²',
+ 'ຳ' => 'à»àº²',
+ 'ໜ' => 'ຫນ',
+ 'à»' => 'ຫມ',
+ 'ཷ' => 'ྲà¾',
+ 'ཹ' => 'ླà¾',
+ 'ẚ' => 'aʾ',
+ '․' => '.',
+ '‥' => '..',
+ '…' => '...',
+ '″' => '′′',
+ '‴' => '′′′',
+ '‶' => '‵‵',
+ '‷' => '‵‵‵',
+ '‼' => '!!',
+ 'â‡' => '??',
+ 'âˆ' => '?!',
+ 'â‰' => '!?',
+ 'â—' => '′′′′',
+ '₨' => 'Rs',
+ 'â„€' => 'a/c',
+ 'â„' => 'a/s',
+ 'â„‚' => 'C',
+ '℃' => '°C',
+ 'â„…' => 'c/o',
+ '℆' => 'c/u',
+ 'ℇ' => 'Æ',
+ '℉' => '°F',
+ 'â„Š' => 'g',
+ 'â„‹' => 'H',
+ 'ℌ' => 'H',
+ 'â„' => 'H',
+ 'â„Ž' => 'h',
+ 'â„' => 'ħ',
+ 'â„' => 'I',
+ 'â„‘' => 'I',
+ 'â„’' => 'L',
+ 'â„“' => 'l',
+ 'â„•' => 'N',
+ 'â„–' => 'No',
+ 'â„™' => 'P',
+ 'â„š' => 'Q',
+ 'â„›' => 'R',
+ 'ℜ' => 'R',
+ 'â„' => 'R',
+ 'â„¡' => 'TEL',
+ 'ℤ' => 'Z',
+ 'ℨ' => 'Z',
+ 'ℬ' => 'B',
+ 'â„' => 'C',
+ 'ℯ' => 'e',
+ 'â„°' => 'E',
+ 'ℱ' => 'F',
+ 'ℳ' => 'M',
+ 'â„´' => 'o',
+ 'ℵ' => '×',
+ 'ℶ' => 'ב',
+ 'â„·' => '×’',
+ 'ℸ' => 'ד',
+ 'ℹ' => 'i',
+ 'â„»' => 'FAX',
+ 'ℼ' => 'π',
+ 'ℽ' => 'γ',
+ 'ℾ' => 'Γ',
+ 'â„¿' => 'Î ',
+ '⅀' => '∑',
+ 'â……' => 'D',
+ 'â…†' => 'd',
+ 'â…‡' => 'e',
+ 'â…ˆ' => 'i',
+ 'â…‰' => 'j',
+ 'â…' => ' 1â„7 ',
+ 'â…‘' => ' 1â„9 ',
+ 'â…’' => ' 1â„10 ',
+ 'â…“' => ' 1â„3 ',
+ 'â…”' => ' 2â„3 ',
+ 'â…•' => ' 1â„5 ',
+ 'â…–' => ' 2â„5 ',
+ 'â…—' => ' 3â„5 ',
+ 'â…˜' => ' 4â„5 ',
+ 'â…™' => ' 1â„6 ',
+ 'â…š' => ' 5â„6 ',
+ 'â…›' => ' 1â„8 ',
+ 'â…œ' => ' 3â„8 ',
+ 'â…' => ' 5â„8 ',
+ 'â…ž' => ' 7â„8 ',
+ 'â…Ÿ' => ' 1â„ ',
+ 'â… ' => 'I',
+ 'â…¡' => 'II',
+ 'â…¢' => 'III',
+ 'â…£' => 'IV',
+ 'â…¤' => 'V',
+ 'â…¥' => 'VI',
+ 'â…¦' => 'VII',
+ 'â…§' => 'VIII',
+ 'â…¨' => 'IX',
+ 'â…©' => 'X',
+ 'â…ª' => 'XI',
+ 'â…«' => 'XII',
+ 'â…¬' => 'L',
+ 'â…' => 'C',
+ 'â…®' => 'D',
+ 'â…¯' => 'M',
+ 'â…°' => 'i',
+ 'â…±' => 'ii',
+ 'â…²' => 'iii',
+ 'â…³' => 'iv',
+ 'â…´' => 'v',
+ 'â…µ' => 'vi',
+ 'â…¶' => 'vii',
+ 'â…·' => 'viii',
+ 'â…¸' => 'ix',
+ 'â…¹' => 'x',
+ 'â…º' => 'xi',
+ 'â…»' => 'xii',
+ 'â…¼' => 'l',
+ 'â…½' => 'c',
+ 'â…¾' => 'd',
+ 'â…¿' => 'm',
+ '↉' => ' 0â„3 ',
+ '∬' => '∫∫',
+ 'âˆ' => '∫∫∫',
+ '∯' => '∮∮',
+ '∰' => '∮∮∮',
+ 'â‘ ' => '(1)',
+ 'â‘¡' => '(2)',
+ 'â‘¢' => '(3)',
+ 'â‘£' => '(4)',
+ '⑤' => '(5)',
+ 'â‘¥' => '(6)',
+ '⑦' => '(7)',
+ '⑧' => '(8)',
+ '⑨' => '(9)',
+ 'â‘©' => '(10)',
+ '⑪' => '(11)',
+ 'â‘«' => '(12)',
+ '⑬' => '(13)',
+ 'â‘' => '(14)',
+ 'â‘®' => '(15)',
+ '⑯' => '(16)',
+ 'â‘°' => '(17)',
+ '⑱' => '(18)',
+ '⑲' => '(19)',
+ '⑳' => '(20)',
+ 'â‘´' => '(1)',
+ '⑵' => '(2)',
+ '⑶' => '(3)',
+ 'â‘·' => '(4)',
+ '⑸' => '(5)',
+ '⑹' => '(6)',
+ '⑺' => '(7)',
+ 'â‘»' => '(8)',
+ '⑼' => '(9)',
+ '⑽' => '(10)',
+ '⑾' => '(11)',
+ 'â‘¿' => '(12)',
+ 'â’€' => '(13)',
+ 'â’' => '(14)',
+ 'â’‚' => '(15)',
+ 'â’ƒ' => '(16)',
+ 'â’„' => '(17)',
+ 'â’…' => '(18)',
+ 'â’†' => '(19)',
+ 'â’‡' => '(20)',
+ 'â’ˆ' => '1.',
+ 'â’‰' => '2.',
+ 'â’Š' => '3.',
+ 'â’‹' => '4.',
+ '⒌' => '5.',
+ 'â’' => '6.',
+ 'â’Ž' => '7.',
+ 'â’' => '8.',
+ 'â’' => '9.',
+ 'â’‘' => '10.',
+ 'â’’' => '11.',
+ 'â’“' => '12.',
+ 'â’”' => '13.',
+ 'â’•' => '14.',
+ 'â’–' => '15.',
+ 'â’—' => '16.',
+ 'â’˜' => '17.',
+ 'â’™' => '18.',
+ 'â’š' => '19.',
+ 'â’›' => '20.',
+ '⒜' => '(a)',
+ 'â’' => '(b)',
+ 'â’ž' => '(c)',
+ 'â’Ÿ' => '(d)',
+ 'â’ ' => '(e)',
+ 'â’¡' => '(f)',
+ 'â’¢' => '(g)',
+ 'â’£' => '(h)',
+ 'â’¤' => '(i)',
+ 'â’¥' => '(j)',
+ 'â’¦' => '(k)',
+ 'â’§' => '(l)',
+ 'â’¨' => '(m)',
+ 'â’©' => '(n)',
+ 'â’ª' => '(o)',
+ 'â’«' => '(p)',
+ 'â’¬' => '(q)',
+ 'â’' => '(r)',
+ 'â’®' => '(s)',
+ 'â’¯' => '(t)',
+ 'â’°' => '(u)',
+ 'â’±' => '(v)',
+ 'â’²' => '(w)',
+ 'â’³' => '(x)',
+ 'â’´' => '(y)',
+ 'â’µ' => '(z)',
+ 'â’¶' => '(A)',
+ 'â’·' => '(B)',
+ 'â’¸' => '(C)',
+ 'â’¹' => '(D)',
+ 'â’º' => '(E)',
+ 'â’»' => '(F)',
+ 'â’¼' => '(G)',
+ 'â’½' => '(H)',
+ 'â’¾' => '(I)',
+ 'â’¿' => '(J)',
+ 'â“€' => '(K)',
+ 'â“' => '(L)',
+ 'â“‚' => '(M)',
+ 'Ⓝ' => '(N)',
+ 'â“„' => '(O)',
+ 'â“…' => '(P)',
+ 'Ⓠ' => '(Q)',
+ 'Ⓡ' => '(R)',
+ 'Ⓢ' => '(S)',
+ 'Ⓣ' => '(T)',
+ 'â“Š' => '(U)',
+ 'â“‹' => '(V)',
+ 'Ⓦ' => '(W)',
+ 'â“' => '(X)',
+ 'â“Ž' => '(Y)',
+ 'â“' => '(Z)',
+ 'â“' => '(a)',
+ 'â“‘' => '(b)',
+ 'â“’' => '(c)',
+ 'â““' => '(d)',
+ 'â“”' => '(e)',
+ 'â“•' => '(f)',
+ 'â“–' => '(g)',
+ 'â“—' => '(h)',
+ 'ⓘ' => '(i)',
+ 'â“™' => '(j)',
+ 'â“š' => '(k)',
+ 'â“›' => '(l)',
+ 'ⓜ' => '(m)',
+ 'â“' => '(n)',
+ 'â“ž' => '(o)',
+ 'â“Ÿ' => '(p)',
+ 'â“ ' => '(q)',
+ 'â“¡' => '(r)',
+ 'â“¢' => '(s)',
+ 'â“£' => '(t)',
+ 'ⓤ' => '(u)',
+ 'â“¥' => '(v)',
+ 'ⓦ' => '(w)',
+ 'ⓧ' => '(x)',
+ 'ⓨ' => '(y)',
+ 'â“©' => '(z)',
+ '⓪' => '(0)',
+ '⨌' => '∫∫∫∫',
+ 'â©´' => '::=',
+ '⩵' => '==',
+ '⩶' => '===',
+ '⺟' => 'æ¯',
+ '⻳' => '龟',
+ '⼀' => '一',
+ 'â¼' => '丨',
+ '⼂' => '丶',
+ '⼃' => '丿',
+ '⼄' => '乙',
+ '⼅' => '亅',
+ '⼆' => '二',
+ '⼇' => 'äº ',
+ '⼈' => '人',
+ '⼉' => '儿',
+ '⼊' => '入',
+ '⼋' => '八',
+ '⼌' => '冂',
+ 'â¼' => '冖',
+ '⼎' => '冫',
+ 'â¼' => 'å‡ ',
+ 'â¼' => '凵',
+ '⼑' => '刀',
+ '⼒' => '力',
+ '⼓' => '勹',
+ '⼔' => '匕',
+ '⼕' => '匚',
+ '⼖' => '匸',
+ 'â¼—' => 'å',
+ '⼘' => 'åœ',
+ 'â¼™' => 'å©',
+ '⼚' => '厂',
+ '⼛' => '厶',
+ '⼜' => 'åˆ',
+ 'â¼' => 'å£',
+ '⼞' => '囗',
+ '⼟' => '土',
+ '⼠' => '士',
+ '⼡' => '夂',
+ '⼢' => '夊',
+ '⼣' => '夕',
+ '⼤' => '大',
+ '⼥' => '女',
+ '⼦' => 'å',
+ '⼧' => '宀',
+ '⼨' => '寸',
+ '⼩' => 'å°',
+ '⼪' => '尢',
+ '⼫' => '尸',
+ '⼬' => '屮',
+ 'â¼' => 'å±±',
+ 'â¼®' => 'å·›',
+ '⼯' => '工',
+ 'â¼°' => 'å·±',
+ 'â¼±' => 'å·¾',
+ 'â¼²' => 'å¹²',
+ '⼳' => '幺',
+ '⼴' => '广',
+ 'â¼µ' => 'å»´',
+ '⼶' => '廾',
+ '⼷' => '弋',
+ '⼸' => '弓',
+ 'â¼¹' => 'å½',
+ '⼺' => '彡',
+ 'â¼»' => 'å½³',
+ '⼼' => '心',
+ '⼽' => '戈',
+ '⼾' => '戶',
+ '⼿' => '手',
+ '⽀' => '支',
+ 'â½' => 'æ”´',
+ '⽂' => '文',
+ '⽃' => '斗',
+ '⽄' => '斤',
+ 'â½…' => 'æ–¹',
+ '⽆' => 'æ— ',
+ '⽇' => '日',
+ '⽈' => '曰',
+ '⽉' => '月',
+ '⽊' => '木',
+ '⽋' => 'æ¬ ',
+ '⽌' => 'æ¢',
+ 'â½' => 'æ¹',
+ '⽎' => '殳',
+ 'â½' => '毋',
+ 'â½' => '比',
+ '⽑' => '毛',
+ 'â½’' => 'æ°',
+ '⽓' => '气',
+ 'â½”' => 'æ°´',
+ '⽕' => 'ç«',
+ '⽖' => '爪',
+ '⽗' => '父',
+ '⽘' => '爻',
+ '⽙' => '爿',
+ '⽚' => '片',
+ '⽛' => '牙',
+ '⽜' => '牛',
+ 'â½' => '犬',
+ '⽞' => '玄',
+ '⽟' => '玉',
+ '⽠' => '瓜',
+ '⽡' => '瓦',
+ '⽢' => '甘',
+ '⽣' => '生',
+ '⽤' => '用',
+ 'â½¥' => 'ç”°',
+ '⽦' => '疋',
+ '⽧' => '疒',
+ '⽨' => '癶',
+ '⽩' => '白',
+ '⽪' => '皮',
+ '⽫' => '皿',
+ '⽬' => '目',
+ 'â½' => '矛',
+ '⽮' => '矢',
+ '⽯' => '石',
+ '⽰' => '示',
+ '⽱' => '禸',
+ '⽲' => '禾',
+ 'â½³' => 'ç©´',
+ 'â½´' => 'ç«‹',
+ '⽵' => '竹',
+ '⽶' => '米',
+ '⽷' => '糸',
+ '⽸' => '缶',
+ '⽹' => '网',
+ '⽺' => '羊',
+ 'â½»' => 'ç¾½',
+ 'â½¼' => 'è€',
+ '⽽' => '而',
+ '⽾' => '耒',
+ '⽿' => '耳',
+ 'â¾€' => 'è¿',
+ 'â¾' => '肉',
+ '⾂' => '臣',
+ '⾃' => '自',
+ '⾄' => '至',
+ '⾅' => '臼',
+ '⾆' => '舌',
+ '⾇' => '舛',
+ '⾈' => '舟',
+ '⾉' => '艮',
+ '⾊' => '色',
+ '⾋' => '艸',
+ '⾌' => 'è™',
+ 'â¾' => '虫',
+ '⾎' => '血',
+ 'â¾' => 'è¡Œ',
+ 'â¾' => 'è¡£',
+ '⾑' => '襾',
+ '⾒' => '見',
+ '⾓' => '角',
+ '⾔' => '言',
+ '⾕' => '谷',
+ '⾖' => '豆',
+ '⾗' => '豕',
+ '⾘' => '豸',
+ 'â¾™' => 'è²',
+ '⾚' => '赤',
+ 'â¾›' => 'èµ°',
+ '⾜' => '足',
+ 'â¾' => '身',
+ '⾞' => '車',
+ '⾟' => '辛',
+ 'â¾ ' => 'è¾°',
+ '⾡' => '辵',
+ 'â¾¢' => 'é‚‘',
+ 'â¾£' => 'é…‰',
+ '⾤' => '釆',
+ '⾥' => '里',
+ '⾦' => '金',
+ '⾧' => '長',
+ '⾨' => '門',
+ '⾩' => '阜',
+ '⾪' => '隶',
+ '⾫' => '隹',
+ '⾬' => '雨',
+ 'â¾' => 'é‘',
+ 'â¾®' => 'éž',
+ '⾯' => 'é¢',
+ 'â¾°' => 'é©',
+ '⾱' => '韋',
+ 'â¾²' => 'éŸ',
+ '⾳' => '音',
+ 'â¾´' => 'é ',
+ '⾵' => '風',
+ '⾶' => '飛',
+ '⾷' => '食',
+ '⾸' => '首',
+ '⾹' => '香',
+ '⾺' => '馬',
+ '⾻' => '骨',
+ '⾼' => '高',
+ 'â¾½' => 'é«Ÿ',
+ '⾾' => '鬥',
+ '⾿' => '鬯',
+ '⿀' => '鬲',
+ 'â¿' => '鬼',
+ 'â¿‚' => 'éš',
+ '⿃' => '鳥',
+ 'â¿„' => 'é¹µ',
+ '⿅' => '鹿',
+ '⿆' => '麥',
+ '⿇' => '麻',
+ '⿈' => '黃',
+ '⿉' => 'é»',
+ '⿊' => '黑',
+ '⿋' => '黹',
+ '⿌' => '黽',
+ 'â¿' => '鼎',
+ '⿎' => '鼓',
+ 'â¿' => 'é¼ ',
+ 'â¿' => 'é¼»',
+ '⿑' => '齊',
+ 'â¿’' => 'é½’',
+ 'â¿“' => 'é¾',
+ '⿔' => '龜',
+ 'â¿•' => 'é¾ ',
+ ' ' => ' ',
+ '〶' => '〒',
+ '〸' => 'å',
+ '〹' => 'å„',
+ '〺' => 'å…',
+ 'ㄱ' => 'ᄀ',
+ 'ㄲ' => 'á„',
+ 'ㄳ' => 'ᆪ',
+ 'ã„´' => 'á„‚',
+ 'ㄵ' => 'ᆬ',
+ 'ㄶ' => 'á†',
+ 'ㄷ' => 'ᄃ',
+ 'ㄸ' => 'ᄄ',
+ 'ㄹ' => 'ᄅ',
+ 'ㄺ' => 'ᆰ',
+ 'ㄻ' => 'ᆱ',
+ 'ㄼ' => 'ᆲ',
+ 'ㄽ' => 'ᆳ',
+ 'ㄾ' => 'ᆴ',
+ 'ㄿ' => 'ᆵ',
+ 'ã…€' => 'á„š',
+ 'ã…' => 'ᄆ',
+ 'ㅂ' => 'ᄇ',
+ 'ㅃ' => 'ᄈ',
+ 'ã…„' => 'á„¡',
+ 'ㅅ' => 'ᄉ',
+ 'ã…†' => 'á„Š',
+ 'ã…‡' => 'á„‹',
+ 'ㅈ' => 'ᄌ',
+ 'ã…‰' => 'á„',
+ 'ã…Š' => 'á„Ž',
+ 'ã…‹' => 'á„',
+ 'ã…Œ' => 'á„',
+ 'ã…' => 'á„‘',
+ 'ã…Ž' => 'á„’',
+ 'ã…' => 'á…¡',
+ 'ã…' => 'á…¢',
+ 'ã…‘' => 'á…£',
+ 'ã…’' => 'á…¤',
+ 'ã…“' => 'á…¥',
+ 'ã…”' => 'á…¦',
+ 'ã…•' => 'á…§',
+ 'ã…–' => 'á…¨',
+ 'ã…—' => 'á…©',
+ 'ã…˜' => 'á…ª',
+ 'ã…™' => 'á…«',
+ 'ã…š' => 'á…¬',
+ 'ã…›' => 'á…',
+ 'ㅜ' => 'ᅮ',
+ 'ã…' => 'á…¯',
+ 'ã…ž' => 'á…°',
+ 'ã…Ÿ' => 'á…±',
+ 'ã… ' => 'á…²',
+ 'ã…¡' => 'á…³',
+ 'ã…¢' => 'á…´',
+ 'ã…£' => 'á…µ',
+ 'ã…¤' => 'á… ',
+ 'ã…¥' => 'á„”',
+ 'ã…¦' => 'á„•',
+ 'ㅧ' => 'ᇇ',
+ 'ㅨ' => 'ᇈ',
+ 'ㅩ' => 'ᇌ',
+ 'ㅪ' => 'ᇎ',
+ 'ㅫ' => 'ᇓ',
+ 'ㅬ' => 'ᇗ',
+ 'ã…' => 'ᇙ',
+ 'ㅮ' => 'ᄜ',
+ 'ã…¯' => 'á‡',
+ 'ㅰ' => 'ᇟ',
+ 'ã…±' => 'á„',
+ 'ã…²' => 'á„ž',
+ 'ã…³' => 'á„ ',
+ 'ã…´' => 'á„¢',
+ 'ã…µ' => 'á„£',
+ 'ㅶ' => 'ᄧ',
+ 'ã…·' => 'á„©',
+ 'ã…¸' => 'á„«',
+ 'ㅹ' => 'ᄬ',
+ 'ã…º' => 'á„',
+ 'ã…»' => 'á„®',
+ 'ㅼ' => 'ᄯ',
+ 'ㅽ' => 'ᄲ',
+ 'ㅾ' => 'ᄶ',
+ 'ã…¿' => 'á…€',
+ 'ㆀ' => 'ᅇ',
+ 'ã†' => 'á…Œ',
+ 'ㆂ' => 'ᇱ',
+ 'ㆃ' => 'ᇲ',
+ 'ㆄ' => 'ᅗ',
+ 'ㆅ' => 'ᅘ',
+ 'ㆆ' => 'ᅙ',
+ 'ㆇ' => 'ᆄ',
+ 'ㆈ' => 'ᆅ',
+ 'ㆉ' => 'ᆈ',
+ 'ㆊ' => 'ᆑ',
+ 'ㆋ' => 'ᆒ',
+ 'ㆌ' => 'ᆔ',
+ 'ã†' => 'ᆞ',
+ 'ㆎ' => 'ᆡ',
+ '㈀' => '(ᄀ)',
+ 'ãˆ' => '(á„‚)',
+ '㈂' => '(ᄃ)',
+ '㈃' => '(ᄅ)',
+ '㈄' => '(ᄆ)',
+ '㈅' => '(ᄇ)',
+ '㈆' => '(ᄉ)',
+ '㈇' => '(ᄋ)',
+ '㈈' => '(ᄌ)',
+ '㈉' => '(ᄎ)',
+ '㈊' => '(á„)',
+ '㈋' => '(á„)',
+ '㈌' => '(ᄑ)',
+ 'ãˆ' => '(á„’)',
+ '㈎' => '(가)',
+ 'ãˆ' => '(á„‚á…¡)',
+ 'ãˆ' => '(다)',
+ '㈑' => '(라)',
+ '㈒' => '(마)',
+ '㈓' => '(바)',
+ '㈔' => '(사)',
+ '㈕' => '(아)',
+ '㈖' => '(자)',
+ '㈗' => '(차)',
+ '㈘' => '(á„á…¡)',
+ '㈙' => '(á„á…¡)',
+ '㈚' => '(파)',
+ '㈛' => '(하)',
+ '㈜' => '(주)',
+ 'ãˆ' => '(오전)',
+ '㈞' => '(오후)',
+ '㈠' => '(一)',
+ '㈡' => '(二)',
+ '㈢' => '(三)',
+ '㈣' => '(四)',
+ '㈤' => '(五)',
+ '㈥' => '(å…)',
+ '㈦' => '(七)',
+ '㈧' => '(八)',
+ '㈨' => '(ä¹)',
+ '㈩' => '(å)',
+ '㈪' => '(月)',
+ '㈫' => '(ç«)',
+ '㈬' => '(水)',
+ 'ãˆ' => '(木)',
+ '㈮' => '(金)',
+ '㈯' => '(土)',
+ '㈰' => '(日)',
+ '㈱' => '(æ ª)',
+ '㈲' => '(有)',
+ '㈳' => '(社)',
+ '㈴' => '(å)',
+ '㈵' => '(特)',
+ '㈶' => '(財)',
+ '㈷' => '(ç¥)',
+ '㈸' => '(労)',
+ '㈹' => '(代)',
+ '㈺' => '(呼)',
+ '㈻' => '(å¦)',
+ '㈼' => '(監)',
+ '㈽' => '(ä¼)',
+ '㈾' => '(資)',
+ '㈿' => '(å”)',
+ '㉀' => '(ç¥)',
+ 'ã‰' => '(休)',
+ '㉂' => '(自)',
+ '㉃' => '(至)',
+ '㉄' => '(å•)',
+ '㉅' => '(幼)',
+ '㉆' => '(文)',
+ '㉇' => '(ç®)',
+ 'ã‰' => 'PTE',
+ '㉑' => '(21)',
+ '㉒' => '(22)',
+ '㉓' => '(23)',
+ '㉔' => '(24)',
+ '㉕' => '(25)',
+ '㉖' => '(26)',
+ '㉗' => '(27)',
+ '㉘' => '(28)',
+ '㉙' => '(29)',
+ '㉚' => '(30)',
+ '㉛' => '(31)',
+ '㉜' => '(32)',
+ 'ã‰' => '(33)',
+ '㉞' => '(34)',
+ '㉟' => '(35)',
+ '㉠' => '(ᄀ)',
+ '㉡' => '(ᄂ)',
+ '㉢' => '(ᄃ)',
+ '㉣' => '(ᄅ)',
+ '㉤' => '(ᄆ)',
+ '㉥' => '(ᄇ)',
+ '㉦' => '(ᄉ)',
+ '㉧' => '(ᄋ)',
+ '㉨' => '(ᄌ)',
+ '㉩' => '(ᄎ)',
+ '㉪' => '(á„)',
+ '㉫' => '(á„)',
+ '㉬' => '(ᄑ)',
+ 'ã‰' => '(á„’)',
+ '㉮' => '(가)',
+ '㉯' => '(나)',
+ '㉰' => '(다)',
+ '㉱' => '(라)',
+ '㉲' => '(마)',
+ '㉳' => '(바)',
+ '㉴' => '(사)',
+ '㉵' => '(아)',
+ '㉶' => '(자)',
+ '㉷' => '(차)',
+ '㉸' => '(á„á…¡)',
+ '㉹' => '(á„á…¡)',
+ '㉺' => '(파)',
+ '㉻' => '(하)',
+ '㉼' => '(참고)',
+ '㉽' => '(주의)',
+ '㉾' => '(우)',
+ '㊀' => '(一)',
+ 'ãŠ' => '(二)',
+ '㊂' => '(三)',
+ '㊃' => '(四)',
+ '㊄' => '(五)',
+ '㊅' => '(å…)',
+ '㊆' => '(七)',
+ '㊇' => '(八)',
+ '㊈' => '(ä¹)',
+ '㊉' => '(å)',
+ '㊊' => '(月)',
+ '㊋' => '(ç«)',
+ '㊌' => '(水)',
+ 'ãŠ' => '(木)',
+ '㊎' => '(金)',
+ 'ãŠ' => '(土)',
+ 'ãŠ' => '(æ—¥)',
+ '㊑' => '(æ ª)',
+ '㊒' => '(有)',
+ '㊓' => '(社)',
+ '㊔' => '(å)',
+ '㊕' => '(特)',
+ '㊖' => '(財)',
+ '㊗' => '(ç¥)',
+ '㊘' => '(労)',
+ '㊙' => '(秘)',
+ '㊚' => '(男)',
+ '㊛' => '(女)',
+ '㊜' => '(é©)',
+ 'ãŠ' => '(優)',
+ '㊞' => '(å°)',
+ '㊟' => '(注)',
+ '㊠' => '(é …)',
+ '㊡' => '(休)',
+ '㊢' => '(写)',
+ '㊣' => '(æ£)',
+ '㊤' => '(上)',
+ '㊥' => '(ä¸)',
+ '㊦' => '(下)',
+ '㊧' => '(左)',
+ '㊨' => '(å³)',
+ '㊩' => '(医)',
+ '㊪' => '(宗)',
+ '㊫' => '(å¦)',
+ '㊬' => '(監)',
+ 'ãŠ' => '(ä¼)',
+ '㊮' => '(資)',
+ '㊯' => '(å”)',
+ '㊰' => '(夜)',
+ '㊱' => '(36)',
+ '㊲' => '(37)',
+ '㊳' => '(38)',
+ '㊴' => '(39)',
+ '㊵' => '(40)',
+ '㊶' => '(41)',
+ '㊷' => '(42)',
+ '㊸' => '(43)',
+ '㊹' => '(44)',
+ '㊺' => '(45)',
+ '㊻' => '(46)',
+ '㊼' => '(47)',
+ '㊽' => '(48)',
+ '㊾' => '(49)',
+ '㊿' => '(50)',
+ '㋀' => '1月',
+ 'ã‹' => '2月',
+ '㋂' => '3月',
+ '㋃' => '4月',
+ '㋄' => '5月',
+ '㋅' => '6月',
+ '㋆' => '7月',
+ '㋇' => '8月',
+ '㋈' => '9月',
+ '㋉' => '10月',
+ '㋊' => '11月',
+ '㋋' => '12月',
+ '㋌' => 'Hg',
+ 'ã‹' => 'erg',
+ 'ã‹Ž' => 'eV',
+ 'ã‹' => 'LTD',
+ 'ã‹' => '(ã‚¢)',
+ '㋑' => '(イ)',
+ '㋒' => '(ウ)',
+ '㋓' => '(エ)',
+ '㋔' => '(オ)',
+ 'ã‹•' => '(ã‚«)',
+ 'ã‹–' => '(ã‚)',
+ '㋗' => '(ク)',
+ '㋘' => '(ケ)',
+ '㋙' => '(コ)',
+ '㋚' => '(サ)',
+ 'ã‹›' => '(ã‚·)',
+ '㋜' => '(ス)',
+ 'ã‹' => '(ã‚»)',
+ '㋞' => '(ソ)',
+ 'ã‹Ÿ' => '(ã‚¿)',
+ 'ã‹ ' => '(ãƒ)',
+ '㋡' => '(ツ)',
+ '㋢' => '(テ)',
+ '㋣' => '(ト)',
+ '㋤' => '(ナ)',
+ '㋥' => '(ニ)',
+ '㋦' => '(ヌ)',
+ '㋧' => '(ãƒ)',
+ '㋨' => '(ノ)',
+ 'ã‹©' => '(ãƒ)',
+ '㋪' => '(ヒ)',
+ '㋫' => '(フ)',
+ '㋬' => '(ヘ)',
+ 'ã‹' => '(ホ)',
+ '㋮' => '(マ)',
+ '㋯' => '(ミ)',
+ '㋰' => '(ム)',
+ '㋱' => '(メ)',
+ '㋲' => '(モ)',
+ '㋳' => '(ヤ)',
+ '㋴' => '(ユ)',
+ '㋵' => '(ヨ)',
+ '㋶' => '(ラ)',
+ '㋷' => '(リ)',
+ '㋸' => '(ル)',
+ '㋹' => '(レ)',
+ '㋺' => '(ãƒ)',
+ '㋻' => '(ワ)',
+ '㋼' => '(ヰ)',
+ '㋽' => '(ヱ)',
+ '㋾' => '(ヲ)',
+ '㋿' => '令和',
+ '㌀' => 'アパート',
+ 'ãŒ' => 'アルファ',
+ '㌂' => 'アンペア',
+ '㌃' => 'アール',
+ '㌄' => 'イニング',
+ '㌅' => 'インãƒ',
+ '㌆' => 'ウォン',
+ '㌇' => 'エスクード',
+ '㌈' => 'エーカー',
+ '㌉' => 'オンス',
+ '㌊' => 'オーム',
+ '㌋' => 'カイリ',
+ '㌌' => 'カラット',
+ 'ãŒ' => 'ã‚«ãƒãƒªãƒ¼',
+ '㌎' => 'ガãƒãƒ³',
+ 'ãŒ' => 'ガンマ',
+ 'ãŒ' => 'ギガ',
+ '㌑' => 'ギニー',
+ '㌒' => 'ã‚ュリー',
+ '㌓' => 'ギルダー',
+ '㌔' => 'ã‚ãƒ',
+ '㌕' => 'ã‚ãƒã‚°ãƒ©ãƒ ',
+ '㌖' => 'ã‚ãƒãƒ¡ãƒ¼ãƒˆãƒ«',
+ '㌗' => 'ã‚ãƒãƒ¯ãƒƒãƒˆ',
+ '㌘' => 'グラム',
+ '㌙' => 'グラムトン',
+ '㌚' => 'クルゼイãƒ',
+ '㌛' => 'クãƒãƒ¼ãƒ',
+ '㌜' => 'ケース',
+ 'ãŒ' => 'コルナ',
+ '㌞' => 'コーãƒ',
+ '㌟' => 'サイクル',
+ '㌠' => 'サンãƒãƒ¼ãƒ ',
+ '㌡' => 'シリング',
+ '㌢' => 'センãƒ',
+ '㌣' => 'セント',
+ '㌤' => 'ダース',
+ '㌥' => 'デシ',
+ '㌦' => 'ドル',
+ '㌧' => 'トン',
+ '㌨' => 'ナノ',
+ '㌩' => 'ノット',
+ '㌪' => 'ãƒã‚¤ãƒ„',
+ '㌫' => 'パーセント',
+ '㌬' => 'パーツ',
+ 'ãŒ' => 'ãƒãƒ¼ãƒ¬ãƒ«',
+ '㌮' => 'ピアストル',
+ '㌯' => 'ピクル',
+ '㌰' => 'ピコ',
+ '㌱' => 'ビル',
+ '㌲' => 'ファラッド',
+ '㌳' => 'フィート',
+ '㌴' => 'ブッシェル',
+ '㌵' => 'フラン',
+ '㌶' => 'ヘクタール',
+ '㌷' => 'ペソ',
+ '㌸' => 'ペニヒ',
+ '㌹' => 'ヘルツ',
+ '㌺' => 'ペンス',
+ '㌻' => 'ページ',
+ '㌼' => 'ベータ',
+ '㌽' => 'ãƒã‚¤ãƒ³ãƒˆ',
+ '㌾' => 'ボルト',
+ '㌿' => 'ホン',
+ 'ã€' => 'ãƒãƒ³ãƒ‰',
+ 'ã' => 'ホール',
+ 'ã‚' => 'ホーン',
+ 'ãƒ' => 'マイクãƒ',
+ 'ã„' => 'マイル',
+ 'ã…' => 'マッãƒ',
+ 'ã†' => 'マルク',
+ 'ã‡' => 'マンション',
+ 'ãˆ' => 'ミクãƒãƒ³',
+ 'ã‰' => 'ミリ',
+ 'ãŠ' => 'ミリãƒãƒ¼ãƒ«',
+ 'ã‹' => 'メガ',
+ 'ãŒ' => 'メガトン',
+ 'ã' => 'メートル',
+ 'ãŽ' => 'ヤード',
+ 'ã' => 'ヤール',
+ 'ã' => 'ユアン',
+ 'ã‘' => 'リットル',
+ 'ã’' => 'リラ',
+ 'ã“' => 'ルピー',
+ 'ã”' => 'ルーブル',
+ 'ã•' => 'レム',
+ 'ã–' => 'レントゲン',
+ 'ã—' => 'ワット',
+ 'ã˜' => '0点',
+ 'ã™' => '1点',
+ 'ãš' => '2点',
+ 'ã›' => '3点',
+ 'ãœ' => '4点',
+ 'ã' => '5点',
+ 'ãž' => '6点',
+ 'ãŸ' => '7点',
+ 'ã ' => '8点',
+ 'ã¡' => '9点',
+ 'ã¢' => '10点',
+ 'ã£' => '11点',
+ 'ã¤' => '12点',
+ 'ã¥' => '13点',
+ 'ã¦' => '14点',
+ 'ã§' => '15点',
+ 'ã¨' => '16点',
+ 'ã©' => '17点',
+ 'ãª' => '18点',
+ 'ã«' => '19点',
+ 'ã¬' => '20点',
+ 'ã' => '21点',
+ 'ã®' => '22点',
+ 'ã¯' => '23点',
+ 'ã°' => '24点',
+ 'ã±' => 'hPa',
+ 'ã²' => 'da',
+ 'ã³' => 'AU',
+ 'ã´' => 'bar',
+ 'ãµ' => 'oV',
+ 'ã¶' => 'pc',
+ 'ã·' => 'dm',
+ 'ã¸' => 'dm²',
+ 'ã¹' => 'dm³',
+ 'ãº' => 'IU',
+ 'ã»' => 'å¹³æˆ',
+ 'ã¼' => 'æ˜å’Œ',
+ 'ã½' => '大æ£',
+ 'ã¾' => '明治',
+ 'ã¿' => 'æ ªå¼ä¼šç¤¾',
+ '㎀' => 'pA',
+ 'ãŽ' => 'nA',
+ '㎂' => 'μA',
+ '㎃' => 'mA',
+ '㎄' => 'kA',
+ '㎅' => 'KB',
+ '㎆' => 'MB',
+ '㎇' => 'GB',
+ '㎈' => 'cal',
+ '㎉' => 'kcal',
+ '㎊' => 'pF',
+ '㎋' => 'nF',
+ '㎌' => 'μF',
+ 'ãŽ' => 'μg',
+ '㎎' => 'mg',
+ 'ãŽ' => 'kg',
+ 'ãŽ' => 'Hz',
+ '㎑' => 'kHz',
+ '㎒' => 'MHz',
+ '㎓' => 'GHz',
+ '㎔' => 'THz',
+ '㎕' => 'μℓ',
+ '㎖' => 'mℓ',
+ '㎗' => 'dℓ',
+ '㎘' => 'kℓ',
+ '㎙' => 'fm',
+ '㎚' => 'nm',
+ '㎛' => 'μm',
+ '㎜' => 'mm',
+ 'ãŽ' => 'cm',
+ '㎞' => 'km',
+ '㎟' => 'mm²',
+ '㎠' => 'cm²',
+ '㎡' => 'm²',
+ '㎢' => 'km²',
+ '㎣' => 'mm³',
+ '㎤' => 'cm³',
+ '㎥' => 'm³',
+ '㎦' => 'km³',
+ '㎧' => 'm∕s',
+ '㎨' => 'm∕s²',
+ '㎩' => 'Pa',
+ '㎪' => 'kPa',
+ '㎫' => 'MPa',
+ '㎬' => 'GPa',
+ 'ãŽ' => 'rad',
+ '㎮' => 'rad∕s',
+ '㎯' => 'rad∕s²',
+ '㎰' => 'ps',
+ '㎱' => 'ns',
+ '㎲' => 'μs',
+ '㎳' => 'ms',
+ '㎴' => 'pV',
+ '㎵' => 'nV',
+ '㎶' => 'μV',
+ '㎷' => 'mV',
+ '㎸' => 'kV',
+ '㎹' => 'MV',
+ '㎺' => 'pW',
+ '㎻' => 'nW',
+ '㎼' => 'μW',
+ '㎽' => 'mW',
+ '㎾' => 'kW',
+ '㎿' => 'MW',
+ 'ã€' => 'kΩ',
+ 'ã' => 'MΩ',
+ 'ã‚' => 'a.m.',
+ 'ãƒ' => 'Bq',
+ 'ã„' => 'cc',
+ 'ã…' => 'cd',
+ 'ã†' => 'C∕kg',
+ 'ã‡' => 'Co.',
+ 'ãˆ' => 'dB',
+ 'ã‰' => 'Gy',
+ 'ãŠ' => 'ha',
+ 'ã‹' => 'HP',
+ 'ãŒ' => 'in',
+ 'ã' => 'KK',
+ 'ãŽ' => 'KM',
+ 'ã' => 'kt',
+ 'ã' => 'lm',
+ 'ã‘' => 'ln',
+ 'ã’' => 'log',
+ 'ã“' => 'lx',
+ 'ã”' => 'mb',
+ 'ã•' => 'mil',
+ 'ã–' => 'mol',
+ 'ã—' => 'PH',
+ 'ã˜' => 'p.m.',
+ 'ã™' => 'PPM',
+ 'ãš' => 'PR',
+ 'ã›' => 'sr',
+ 'ãœ' => 'Sv',
+ 'ã' => 'Wb',
+ 'ãž' => 'V∕m',
+ 'ãŸ' => 'A∕m',
+ 'ã ' => '1æ—¥',
+ 'ã¡' => '2æ—¥',
+ 'ã¢' => '3æ—¥',
+ 'ã£' => '4æ—¥',
+ 'ã¤' => '5æ—¥',
+ 'ã¥' => '6æ—¥',
+ 'ã¦' => '7æ—¥',
+ 'ã§' => '8æ—¥',
+ 'ã¨' => '9æ—¥',
+ 'ã©' => '10æ—¥',
+ 'ãª' => '11æ—¥',
+ 'ã«' => '12æ—¥',
+ 'ã¬' => '13æ—¥',
+ 'ã' => '14æ—¥',
+ 'ã®' => '15æ—¥',
+ 'ã¯' => '16æ—¥',
+ 'ã°' => '17æ—¥',
+ 'ã±' => '18æ—¥',
+ 'ã²' => '19æ—¥',
+ 'ã³' => '20æ—¥',
+ 'ã´' => '21æ—¥',
+ 'ãµ' => '22æ—¥',
+ 'ã¶' => '23æ—¥',
+ 'ã·' => '24æ—¥',
+ 'ã¸' => '25æ—¥',
+ 'ã¹' => '26æ—¥',
+ 'ãº' => '27æ—¥',
+ 'ã»' => '28æ—¥',
+ 'ã¼' => '29æ—¥',
+ 'ã½' => '30æ—¥',
+ 'ã¾' => '31æ—¥',
+ 'ã¿' => 'gal',
+ '豈' => '豈',
+ 'ï¤' => 'æ›´',
+ '車' => '車',
+ '賈' => '賈',
+ '滑' => '滑',
+ '串' => '串',
+ '句' => 'å¥',
+ '龜' => '龜',
+ '龜' => '龜',
+ '契' => '契',
+ '金' => '金',
+ '喇' => '喇',
+ '奈' => '奈',
+ 'ï¤' => '懶',
+ '癩' => '癩',
+ 'ï¤' => 'ç¾…',
+ 'ï¤' => '蘿',
+ '螺' => '螺',
+ '裸' => '裸',
+ '邏' => 'é‚',
+ '樂' => '樂',
+ '洛' => '洛',
+ '烙' => '烙',
+ '珞' => 'çž',
+ '落' => 'è½',
+ '酪' => '酪',
+ '駱' => '駱',
+ '亂' => '亂',
+ '卵' => 'åµ',
+ 'ï¤' => '欄',
+ '爛' => '爛',
+ '蘭' => 'è˜',
+ 'ï¤ ' => '鸞',
+ '嵐' => 'åµ',
+ '濫' => '濫',
+ '藍' => 'è—',
+ '襤' => '襤',
+ '拉' => '拉',
+ '臘' => '臘',
+ '蠟' => 'è Ÿ',
+ '廊' => '廊',
+ '朗' => '朗',
+ '浪' => '浪',
+ '狼' => '狼',
+ '郎' => '郎',
+ 'ï¤' => '來',
+ '冷' => '冷',
+ '勞' => '勞',
+ '擄' => '擄',
+ '櫓' => '櫓',
+ '爐' => 'çˆ',
+ '盧' => '盧',
+ '老' => 'è€',
+ '蘆' => '蘆',
+ '虜' => '虜',
+ '路' => '路',
+ '露' => '露',
+ '魯' => 'é¯',
+ '鷺' => '鷺',
+ '碌' => '碌',
+ '祿' => '祿',
+ '綠' => 'ç¶ ',
+ '菉' => 'è‰',
+ '錄' => '錄',
+ '鹿' => '鹿',
+ 'ï¥' => 'è«–',
+ '壟' => '壟',
+ '弄' => '弄',
+ '籠' => 'ç± ',
+ '聾' => 'è¾',
+ '牢' => '牢',
+ '磊' => '磊',
+ '賂' => '賂',
+ '雷' => '雷',
+ '壘' => '壘',
+ '屢' => '屢',
+ '樓' => '樓',
+ 'ï¥' => 'æ·š',
+ '漏' => 'æ¼',
+ 'ï¥' => 'ç´¯',
+ 'ï¥' => '縷',
+ '陋' => '陋',
+ '勒' => '勒',
+ '肋' => '肋',
+ '凜' => '凜',
+ '凌' => '凌',
+ '稜' => '稜',
+ '綾' => '綾',
+ '菱' => 'è±',
+ '陵' => '陵',
+ '讀' => '讀',
+ '拏' => 'æ‹',
+ '樂' => '樂',
+ 'ï¥' => '諾',
+ '丹' => '丹',
+ '寧' => '寧',
+ 'ï¥ ' => '怒',
+ '率' => '率',
+ '異' => '異',
+ '北' => '北',
+ '磻' => '磻',
+ '便' => '便',
+ '復' => '復',
+ '不' => 'ä¸',
+ '泌' => '泌',
+ '數' => '數',
+ '索' => '索',
+ '參' => 'åƒ',
+ '塞' => '塞',
+ 'ï¥' => 'çœ',
+ '葉' => '葉',
+ '說' => '說',
+ '殺' => '殺',
+ '辰' => '辰',
+ '沈' => '沈',
+ '拾' => '拾',
+ '若' => '若',
+ '掠' => 'æŽ ',
+ '略' => '略',
+ '亮' => '亮',
+ '兩' => '兩',
+ '凉' => '凉',
+ '梁' => 'æ¢',
+ '糧' => '糧',
+ '良' => '良',
+ '諒' => '諒',
+ '量' => 'é‡',
+ '勵' => '勵',
+ '呂' => '呂',
+ 'ï¦' => '女',
+ '廬' => '廬',
+ '旅' => '旅',
+ '濾' => '濾',
+ '礪' => '礪',
+ '閭' => 'é–',
+ '驪' => '驪',
+ '麗' => '麗',
+ '黎' => '黎',
+ '力' => '力',
+ '曆' => '曆',
+ '歷' => 'æ·',
+ 'ï¦' => 'è½¢',
+ '年' => '年',
+ 'ï¦' => 'æ†',
+ 'ï¦' => '戀',
+ '撚' => '撚',
+ '漣' => '漣',
+ '煉' => '煉',
+ '璉' => '璉',
+ '秊' => '秊',
+ '練' => '練',
+ '聯' => 'è¯',
+ '輦' => '輦',
+ '蓮' => '蓮',
+ '連' => '連',
+ '鍊' => 'éŠ',
+ '列' => '列',
+ 'ï¦' => '劣',
+ '咽' => '咽',
+ '烈' => '烈',
+ 'ï¦ ' => '裂',
+ '說' => '說',
+ '廉' => '廉',
+ '念' => '念',
+ '捻' => 'æ»',
+ '殮' => '殮',
+ '簾' => '簾',
+ '獵' => 'çµ',
+ '令' => '令',
+ '囹' => '囹',
+ '寧' => '寧',
+ '嶺' => '嶺',
+ '怜' => '怜',
+ 'ï¦' => '玲',
+ '瑩' => '瑩',
+ '羚' => '羚',
+ '聆' => 'è†',
+ '鈴' => '鈴',
+ '零' => '零',
+ '靈' => 'éˆ',
+ '領' => 'é ˜',
+ '例' => '例',
+ '禮' => '禮',
+ '醴' => '醴',
+ '隸' => '隸',
+ '惡' => '惡',
+ '了' => '了',
+ '僚' => '僚',
+ '寮' => '寮',
+ '尿' => '尿',
+ '料' => '料',
+ '樂' => '樂',
+ '燎' => '燎',
+ 'ï§' => '療',
+ '蓼' => '蓼',
+ '遼' => 'é¼',
+ '龍' => 'é¾',
+ '暈' => '暈',
+ '阮' => '阮',
+ '劉' => '劉',
+ '杻' => 'æ»',
+ '柳' => '柳',
+ '流' => 'æµ',
+ '溜' => '溜',
+ '琉' => 'ç‰',
+ 'ï§' => 'ç•™',
+ '硫' => '硫',
+ 'ï§' => 'ç´',
+ 'ï§' => 'é¡ž',
+ '六' => 'å…',
+ '戮' => '戮',
+ '陸' => '陸',
+ '倫' => '倫',
+ '崙' => '崙',
+ '淪' => '淪',
+ '輪' => '輪',
+ '律' => '律',
+ '慄' => '慄',
+ '栗' => 'æ —',
+ '率' => '率',
+ '隆' => '隆',
+ 'ï§' => '利',
+ '吏' => 'å',
+ '履' => '履',
+ 'ï§ ' => '易',
+ '李' => 'æŽ',
+ '梨' => '梨',
+ '泥' => '泥',
+ '理' => 'ç†',
+ '痢' => '痢',
+ '罹' => '罹',
+ '裏' => 'è£',
+ '裡' => '裡',
+ '里' => '里',
+ '離' => '離',
+ '匿' => '匿',
+ '溺' => '溺',
+ 'ï§' => 'å',
+ '燐' => 'ç‡',
+ '璘' => '璘',
+ '藺' => '藺',
+ '隣' => '隣',
+ '鱗' => '鱗',
+ '麟' => '麟',
+ '林' => '林',
+ '淋' => '淋',
+ '臨' => '臨',
+ '立' => '立',
+ '笠' => 'ç¬ ',
+ '粒' => '粒',
+ '狀' => '狀',
+ '炙' => '炙',
+ '識' => 'è˜',
+ '什' => '什',
+ '茶' => '茶',
+ '刺' => '刺',
+ '切' => '切',
+ 'ï¨' => '度',
+ '拓' => '拓',
+ '糖' => '糖',
+ '宅' => '宅',
+ '洞' => '洞',
+ '暴' => '暴',
+ '輻' => '輻',
+ '行' => '行',
+ '降' => 'é™',
+ '見' => '見',
+ '廓' => '廓',
+ '兀' => '兀',
+ 'ï¨' => 'å—€',
+ '﨎' => '' . "\0" . '',
+ 'ï¨' => '' . "\0" . '',
+ 'ï¨' => 'å¡š',
+ '﨑' => '' . "\0" . '',
+ '晴' => '晴',
+ '﨓' => '' . "\0" . '',
+ '﨔' => '' . "\0" . '',
+ '凞' => '凞',
+ '猪' => '猪',
+ '益' => '益',
+ '礼' => '礼',
+ '神' => '神',
+ '祥' => '祥',
+ '福' => 'ç¦',
+ '靖' => 'é–',
+ 'ï¨' => 'ç²¾',
+ '羽' => '羽',
+ '﨟' => '' . "\0" . '',
+ 'ï¨ ' => '蘒',
+ '﨡' => '' . "\0" . '',
+ '諸' => '諸',
+ '﨣' => '' . "\0" . '',
+ '﨤' => '' . "\0" . '',
+ '逸' => '逸',
+ '都' => '都',
+ '﨧' => '' . "\0" . '',
+ '﨨' => '' . "\0" . '',
+ '﨩' => '' . "\0" . '',
+ '飯' => '飯',
+ '飼' => '飼',
+ '館' => '館',
+ 'ï¨' => '鶴',
+ '郞' => '郞',
+ '隷' => '隷',
+ '侮' => '侮',
+ '僧' => '僧',
+ '免' => 'å…',
+ '勉' => '勉',
+ '勤' => '勤',
+ '卑' => 'å‘',
+ '喝' => 'å–',
+ '嘆' => '嘆',
+ '器' => '器',
+ '塀' => '塀',
+ '墨' => '墨',
+ '層' => '層',
+ '屮' => '屮',
+ '悔' => '悔',
+ '慨' => '慨',
+ '憎' => '憎',
+ '懲' => '懲',
+ 'ï©' => 'æ•',
+ 'ï©‚' => 'æ—¢',
+ '暑' => '暑',
+ '梅' => '梅',
+ 'ï©…' => 'æµ·',
+ '渚' => '渚',
+ '漢' => '漢',
+ '煮' => '煮',
+ '爫' => '爫',
+ 'ï©Š' => 'ç¢',
+ '碑' => '碑',
+ '社' => '社',
+ 'ï©' => '祉',
+ '祈' => '祈',
+ 'ï©' => 'ç¥',
+ 'ï©' => '祖',
+ 'ï©‘' => 'ç¥',
+ 'ï©’' => 'ç¦',
+ '禎' => '禎',
+ 'ï©”' => 'ç©€',
+ 'ï©•' => 'çª',
+ '節' => '節',
+ 'ï©—' => 'ç·´',
+ '縉' => '縉',
+ 'ï©™' => 'ç¹',
+ 'ï©š' => 'ç½²',
+ '者' => '者',
+ 'ï©œ' => 'è‡',
+ 'ï©' => '艹',
+ '艹' => '艹',
+ 'ï©Ÿ' => 'è‘—',
+ 'ï© ' => 'è¤',
+ '視' => '視',
+ 'ï©¢' => 'è¬',
+ '謹' => '謹',
+ '賓' => '賓',
+ 'ï©¥' => 'è´ˆ',
+ '辶' => '辶',
+ '逸' => '逸',
+ '難' => '難',
+ '響' => '響',
+ '頻' => 'é »',
+ 'ï©«' => 'æµ',
+ '𤋮' => '𤋮',
+ 'ï©' => '舘',
+ '並' => '並',
+ '况' => '况',
+ '全' => '全',
+ '侀' => '侀',
+ 'ï©´' => 'å……',
+ '冀' => '冀',
+ '勇' => '勇',
+ '勺' => '勺',
+ '喝' => 'å–',
+ '啕' => '啕',
+ '喙' => '喙',
+ 'ï©»' => 'å—¢',
+ '塚' => '塚',
+ '墳' => '墳',
+ '奄' => '奄',
+ '奔' => '奔',
+ '婢' => '婢',
+ 'ïª' => '嬨',
+ '廒' => '廒',
+ '廙' => '廙',
+ '彩' => '彩',
+ '徭' => 'å¾',
+ '惘' => '惘',
+ '慎' => '慎',
+ '愈' => '愈',
+ '憎' => '憎',
+ '慠' => 'æ… ',
+ '懲' => '懲',
+ '戴' => '戴',
+ 'ïª' => 'æ„',
+ '搜' => 'æœ',
+ 'ïª' => 'æ‘’',
+ 'ïª' => 'æ•–',
+ '晴' => '晴',
+ '朗' => '朗',
+ '望' => '望',
+ '杖' => 'æ–',
+ '歹' => 'æ¹',
+ '殺' => '殺',
+ '流' => 'æµ',
+ '滛' => '滛',
+ '滋' => '滋',
+ '漢' => '漢',
+ '瀞' => '瀞',
+ '煮' => '煮',
+ 'ïª' => '瞧',
+ '爵' => '爵',
+ '犯' => '犯',
+ 'ïª ' => '猪',
+ '瑱' => '瑱',
+ '甆' => '甆',
+ '画' => '画',
+ '瘝' => 'ç˜',
+ '瘟' => '瘟',
+ '益' => '益',
+ '盛' => '盛',
+ '直' => '直',
+ '睊' => 'çŠ',
+ '着' => 'ç€',
+ '磌' => '磌',
+ '窱' => '窱',
+ 'ïª' => '節',
+ '类' => '类',
+ '絛' => '絛',
+ '練' => '練',
+ '缾' => '缾',
+ '者' => '者',
+ '荒' => 'è’',
+ '華' => 'è¯',
+ '蝹' => 'è¹',
+ '襁' => 'è¥',
+ '覆' => '覆',
+ '視' => '視',
+ '調' => '調',
+ '諸' => '諸',
+ '請' => '請',
+ '謁' => 'è¬',
+ '諾' => '諾',
+ '諭' => 'è«',
+ '謹' => '謹',
+ '變' => '變',
+ 'ï«' => 'è´ˆ',
+ '輸' => '輸',
+ '遲' => 'é²',
+ '醙' => '醙',
+ '鉶' => '鉶',
+ '陼' => '陼',
+ '難' => '難',
+ '靖' => 'é–',
+ '韛' => '韛',
+ '響' => '響',
+ 'ï«‹' => 'é ‹',
+ 'ï«Œ' => 'é »',
+ 'ï«' => '鬒',
+ '龜' => '龜',
+ 'ï«' => '𢡊',
+ 'ï«' => '𢡄',
+ 'ï«‘' => 'ð£•',
+ 'ï«’' => 'ã®',
+ '䀘' => '䀘',
+ '䀹' => '䀹',
+ '𥉉' => '𥉉',
+ 'ï«–' => 'ð¥³',
+ '𧻓' => '𧻓',
+ '齃' => '齃',
+ '龎' => '龎',
+ 'ff' => 'ff',
+ 'ï¬' => 'fi',
+ 'fl' => 'fl',
+ 'ffi' => 'ffi',
+ 'ffl' => 'ffl',
+ 'ſt' => 'ſt',
+ 'st' => 'st',
+ 'ﬓ' => 'մն',
+ 'ﬔ' => 'մե',
+ 'ﬕ' => 'մի',
+ 'ﬖ' => 'վն',
+ 'ﬗ' => 'Õ´Õ',
+ 'ï¬ ' => '×¢',
+ 'ﬡ' => '×',
+ 'ﬢ' => 'ד',
+ 'ﬣ' => 'ה',
+ 'ﬤ' => 'כ',
+ 'ﬥ' => 'ל',
+ 'ﬦ' => '×',
+ 'ﬧ' => 'ר',
+ 'ﬨ' => 'ת',
+ '﬩' => '+',
+ 'ï' => '×ל',
+ '﹉' => '‾',
+ '﹊' => '‾',
+ '﹋' => '‾',
+ '﹌' => '‾',
+ 'ï¹' => '_',
+ '﹎' => '_',
+ 'ï¹' => '_',
+ 'ï¹' => ',',
+ '﹑' => 'ã€',
+ 'ï¹’' => '.',
+ 'ï¹”' => ';',
+ '﹕' => ':',
+ 'ï¹–' => '?',
+ 'ï¹—' => '!',
+ '﹘' => '—',
+ 'ï¹™' => '(',
+ '﹚' => ')',
+ 'ï¹›' => '{',
+ '﹜' => '}',
+ 'ï¹' => '〔',
+ '﹞' => '〕',
+ '﹟' => '#',
+ 'ï¹ ' => '&',
+ '﹡' => '*',
+ 'ï¹¢' => '+',
+ 'ï¹£' => '-',
+ '﹤' => '<',
+ 'ï¹¥' => '>',
+ '﹦' => '=',
+ '﹨' => '\\',
+ '﹩' => '$',
+ '﹪' => '%',
+ '﹫' => '@',
+ 'ï¼' => '!',
+ '"' => '"',
+ '#' => '#',
+ '$' => '$',
+ 'ï¼…' => '%',
+ '&' => '&',
+ ''' => '\'',
+ '(' => '(',
+ ')' => ')',
+ '*' => '*',
+ '+' => '+',
+ ',' => ',',
+ 'ï¼' => '-',
+ '.' => '.',
+ 'ï¼' => '/',
+ 'ï¼' => '0',
+ '1' => '1',
+ 'ï¼’' => '2',
+ '3' => '3',
+ 'ï¼”' => '4',
+ '5' => '5',
+ 'ï¼–' => '6',
+ 'ï¼—' => '7',
+ '8' => '8',
+ 'ï¼™' => '9',
+ ':' => ':',
+ 'ï¼›' => ';',
+ '<' => '<',
+ 'ï¼' => '=',
+ '>' => '>',
+ '?' => '?',
+ 'ï¼ ' => '@',
+ 'A' => 'A',
+ 'ï¼¢' => 'B',
+ 'ï¼£' => 'C',
+ 'D' => 'D',
+ 'ï¼¥' => 'E',
+ 'F' => 'F',
+ 'G' => 'G',
+ 'H' => 'H',
+ 'I' => 'I',
+ 'J' => 'J',
+ 'K' => 'K',
+ 'L' => 'L',
+ 'ï¼' => 'M',
+ 'ï¼®' => 'N',
+ 'O' => 'O',
+ 'ï¼°' => 'P',
+ 'ï¼±' => 'Q',
+ 'ï¼²' => 'R',
+ 'ï¼³' => 'S',
+ 'ï¼´' => 'T',
+ 'ï¼µ' => 'U',
+ 'V' => 'V',
+ 'ï¼·' => 'W',
+ 'X' => 'X',
+ 'ï¼¹' => 'Y',
+ 'Z' => 'Z',
+ 'ï¼»' => '[',
+ 'ï¼¼' => '\\',
+ 'ï¼½' => ']',
+ 'ï¼¾' => '^',
+ '_' => '_',
+ 'ï½€' => '`',
+ 'ï½' => 'a',
+ 'b' => 'b',
+ 'c' => 'c',
+ 'd' => 'd',
+ 'ï½…' => 'e',
+ 'f' => 'f',
+ 'g' => 'g',
+ 'h' => 'h',
+ 'i' => 'i',
+ 'j' => 'j',
+ 'k' => 'k',
+ 'l' => 'l',
+ 'ï½' => 'm',
+ 'n' => 'n',
+ 'ï½' => 'o',
+ 'ï½' => 'p',
+ 'q' => 'q',
+ 'ï½’' => 'r',
+ 's' => 's',
+ 'ï½”' => 't',
+ 'u' => 'u',
+ 'ï½–' => 'v',
+ 'ï½—' => 'w',
+ 'x' => 'x',
+ 'ï½™' => 'y',
+ 'z' => 'z',
+ 'ï½›' => '{',
+ '|' => '|',
+ 'ï½' => '}',
+ '~' => '~',
+ '⦅' => '⦅',
+ 'ï½ ' => '⦆',
+ '。' => '。',
+ '「' => '「',
+ 'ï½£' => 'ã€',
+ '、' => 'ã€',
+ '・' => '・',
+ 'ヲ' => 'ヲ',
+ 'ァ' => 'ァ',
+ 'ィ' => 'ィ',
+ 'ゥ' => 'ゥ',
+ 'ェ' => 'ェ',
+ 'ォ' => 'ォ',
+ 'ャ' => 'ャ',
+ 'ï½' => 'ュ',
+ 'ョ' => 'ョ',
+ 'ッ' => 'ッ',
+ 'ー' => 'ー',
+ 'ï½±' => 'ã‚¢',
+ 'イ' => 'イ',
+ 'ウ' => 'ウ',
+ 'エ' => 'エ',
+ 'オ' => 'オ',
+ 'カ' => 'カ',
+ 'ï½·' => 'ã‚',
+ 'ク' => 'ク',
+ 'ケ' => 'ケ',
+ 'コ' => 'コ',
+ 'サ' => 'サ',
+ 'ï½¼' => 'ã‚·',
+ 'ス' => 'ス',
+ 'ï½¾' => 'ã‚»',
+ 'ソ' => 'ソ',
+ 'ï¾€' => 'ã‚¿',
+ 'ï¾' => 'ãƒ',
+ 'ツ' => 'ツ',
+ 'テ' => 'テ',
+ 'ト' => 'ト',
+ 'ナ' => 'ナ',
+ 'ニ' => 'ニ',
+ 'ヌ' => 'ヌ',
+ 'ネ' => 'ãƒ',
+ 'ノ' => 'ノ',
+ 'ハ' => 'ãƒ',
+ 'ヒ' => 'ヒ',
+ 'フ' => 'フ',
+ 'ï¾' => 'ヘ',
+ 'ホ' => 'ホ',
+ 'ï¾' => 'マ',
+ 'ï¾' => 'ミ',
+ 'ム' => 'ム',
+ 'メ' => 'メ',
+ 'モ' => 'モ',
+ 'ヤ' => 'ヤ',
+ 'ユ' => 'ユ',
+ 'ヨ' => 'ヨ',
+ 'ラ' => 'ラ',
+ 'リ' => 'リ',
+ 'ル' => 'ル',
+ 'レ' => 'レ',
+ 'ï¾›' => 'ãƒ',
+ 'ワ' => 'ワ',
+ 'ï¾' => 'ン',
+ '゙' => '゙',
+ '゚' => '゚',
+ 'ï¾ ' => 'ã…¤',
+ 'ᄀ' => 'ㄱ',
+ 'ᄁ' => 'ㄲ',
+ 'ᆪ' => 'ㄳ',
+ 'ᄂ' => 'ㄴ',
+ 'ᆬ' => 'ㄵ',
+ 'ᆭ' => 'ㄶ',
+ 'ᄃ' => 'ㄷ',
+ 'ᄄ' => 'ㄸ',
+ 'ᄅ' => 'ㄹ',
+ 'ᆰ' => 'ㄺ',
+ 'ᆱ' => 'ㄻ',
+ 'ᆲ' => 'ㄼ',
+ 'ï¾' => 'ㄽ',
+ 'ᆴ' => 'ㄾ',
+ 'ᆵ' => 'ㄿ',
+ 'ï¾°' => 'ã…€',
+ 'ï¾±' => 'ã…',
+ 'ï¾²' => 'ã…‚',
+ 'ï¾³' => 'ã…ƒ',
+ 'ï¾´' => 'ã…„',
+ 'ï¾µ' => 'ã……',
+ 'ᄊ' => 'ㅆ',
+ 'ï¾·' => 'ã…‡',
+ 'ᄌ' => 'ㅈ',
+ 'ï¾¹' => 'ã…‰',
+ 'ᄎ' => 'ㅊ',
+ 'ï¾»' => 'ã…‹',
+ 'ᄐ' => 'ㅌ',
+ 'ï¾½' => 'ã…',
+ 'ï¾¾' => 'ã…Ž',
+ 'ï¿‚' => 'ã…',
+ 'ᅢ' => 'ã…',
+ 'ï¿„' => 'ã…‘',
+ 'ï¿…' => 'ã…’',
+ 'ᅥ' => 'ㅓ',
+ 'ᅦ' => 'ㅔ',
+ 'ï¿Š' => 'ã…•',
+ 'ï¿‹' => 'ã…–',
+ 'ᅩ' => 'ㅗ',
+ 'ï¿' => 'ã…˜',
+ 'ï¿Ž' => 'ã…™',
+ 'ï¿' => 'ã…š',
+ 'ï¿’' => 'ã…›',
+ 'ᅮ' => 'ㅜ',
+ 'ï¿”' => 'ã…',
+ 'ï¿•' => 'ã…ž',
+ 'ï¿–' => 'ã…Ÿ',
+ 'ï¿—' => 'ã… ',
+ 'ï¿š' => 'ã…¡',
+ 'ï¿›' => 'ã…¢',
+ 'ᅵ' => 'ㅣ',
+ 'ï¿ ' => '¢',
+ '£' => '£',
+ '¬' => '¬',
+ ' ̄' => '¯',
+ '¦' => '¦',
+ 'ï¿¥' => 'Â¥',
+ '₩' => '₩',
+ '│' => '│',
+ 'ï¿©' => 'â†',
+ '↑' => '↑',
+ '→' => '→',
+ '↓' => '↓',
+ 'ï¿' => 'â– ',
+ 'ï¿®' => 'â—‹',
+ 'ð€' => 'A',
+ 'ð' => 'B',
+ 'ð‚' => 'C',
+ 'ðƒ' => 'D',
+ 'ð„' => 'E',
+ 'ð…' => 'F',
+ 'ð†' => 'G',
+ 'ð‡' => 'H',
+ 'ðˆ' => 'I',
+ 'ð‰' => 'J',
+ 'ðŠ' => 'K',
+ 'ð‹' => 'L',
+ 'ðŒ' => 'M',
+ 'ð' => 'N',
+ 'ðŽ' => 'O',
+ 'ð' => 'P',
+ 'ð' => 'Q',
+ 'ð‘' => 'R',
+ 'ð’' => 'S',
+ 'ð“' => 'T',
+ 'ð”' => 'U',
+ 'ð•' => 'V',
+ 'ð–' => 'W',
+ 'ð—' => 'X',
+ 'ð˜' => 'Y',
+ 'ð™' => 'Z',
+ 'ðš' => 'a',
+ 'ð›' => 'b',
+ 'ðœ' => 'c',
+ 'ð' => 'd',
+ 'ðž' => 'e',
+ 'ðŸ' => 'f',
+ 'ð ' => 'g',
+ 'ð¡' => 'h',
+ 'ð¢' => 'i',
+ 'ð£' => 'j',
+ 'ð¤' => 'k',
+ 'ð¥' => 'l',
+ 'ð¦' => 'm',
+ 'ð§' => 'n',
+ 'ð¨' => 'o',
+ 'ð©' => 'p',
+ 'ðª' => 'q',
+ 'ð«' => 'r',
+ 'ð¬' => 's',
+ 'ð' => 't',
+ 'ð®' => 'u',
+ 'ð¯' => 'v',
+ 'ð°' => 'w',
+ 'ð±' => 'x',
+ 'ð²' => 'y',
+ 'ð³' => 'z',
+ 'ð´' => 'A',
+ 'ðµ' => 'B',
+ 'ð¶' => 'C',
+ 'ð·' => 'D',
+ 'ð¸' => 'E',
+ 'ð¹' => 'F',
+ 'ðº' => 'G',
+ 'ð»' => 'H',
+ 'ð¼' => 'I',
+ 'ð½' => 'J',
+ 'ð¾' => 'K',
+ 'ð¿' => 'L',
+ 'ð‘€' => 'M',
+ 'ð‘' => 'N',
+ 'ð‘‚' => 'O',
+ 'ð‘ƒ' => 'P',
+ 'ð‘„' => 'Q',
+ 'ð‘…' => 'R',
+ 'ð‘†' => 'S',
+ 'ð‘‡' => 'T',
+ 'ð‘ˆ' => 'U',
+ 'ð‘‰' => 'V',
+ 'ð‘Š' => 'W',
+ 'ð‘‹' => 'X',
+ 'ð‘Œ' => 'Y',
+ 'ð‘' => 'Z',
+ 'ð‘Ž' => 'a',
+ 'ð‘' => 'b',
+ 'ð‘' => 'c',
+ 'ð‘‘' => 'd',
+ 'ð‘’' => 'e',
+ 'ð‘“' => 'f',
+ 'ð‘”' => 'g',
+ 'ð‘–' => 'i',
+ 'ð‘—' => 'j',
+ 'ð‘˜' => 'k',
+ 'ð‘™' => 'l',
+ 'ð‘š' => 'm',
+ 'ð‘›' => 'n',
+ 'ð‘œ' => 'o',
+ 'ð‘' => 'p',
+ 'ð‘ž' => 'q',
+ 'ð‘Ÿ' => 'r',
+ 'ð‘ ' => 's',
+ 'ð‘¡' => 't',
+ 'ð‘¢' => 'u',
+ 'ð‘£' => 'v',
+ 'ð‘¤' => 'w',
+ 'ð‘¥' => 'x',
+ 'ð‘¦' => 'y',
+ 'ð‘§' => 'z',
+ 'ð‘¨' => 'A',
+ 'ð‘©' => 'B',
+ 'ð‘ª' => 'C',
+ 'ð‘«' => 'D',
+ 'ð‘¬' => 'E',
+ 'ð‘' => 'F',
+ 'ð‘®' => 'G',
+ 'ð‘¯' => 'H',
+ 'ð‘°' => 'I',
+ 'ð‘±' => 'J',
+ 'ð‘²' => 'K',
+ 'ð‘³' => 'L',
+ 'ð‘´' => 'M',
+ 'ð‘µ' => 'N',
+ 'ð‘¶' => 'O',
+ 'ð‘·' => 'P',
+ 'ð‘¸' => 'Q',
+ 'ð‘¹' => 'R',
+ 'ð‘º' => 'S',
+ 'ð‘»' => 'T',
+ 'ð‘¼' => 'U',
+ 'ð‘½' => 'V',
+ 'ð‘¾' => 'W',
+ 'ð‘¿' => 'X',
+ 'ð’€' => 'Y',
+ 'ð’' => 'Z',
+ 'ð’‚' => 'a',
+ 'ð’ƒ' => 'b',
+ 'ð’„' => 'c',
+ 'ð’…' => 'd',
+ 'ð’†' => 'e',
+ 'ð’‡' => 'f',
+ 'ð’ˆ' => 'g',
+ 'ð’‰' => 'h',
+ 'ð’Š' => 'i',
+ 'ð’‹' => 'j',
+ 'ð’Œ' => 'k',
+ 'ð’' => 'l',
+ 'ð’Ž' => 'm',
+ 'ð’' => 'n',
+ 'ð’' => 'o',
+ 'ð’‘' => 'p',
+ 'ð’’' => 'q',
+ 'ð’“' => 'r',
+ 'ð’”' => 's',
+ 'ð’•' => 't',
+ 'ð’–' => 'u',
+ 'ð’—' => 'v',
+ 'ð’˜' => 'w',
+ 'ð’™' => 'x',
+ 'ð’š' => 'y',
+ 'ð’›' => 'z',
+ 'ð’œ' => 'A',
+ 'ð’ž' => 'C',
+ 'ð’Ÿ' => 'D',
+ 'ð’¢' => 'G',
+ 'ð’¥' => 'J',
+ 'ð’¦' => 'K',
+ 'ð’©' => 'N',
+ 'ð’ª' => 'O',
+ 'ð’«' => 'P',
+ 'ð’¬' => 'Q',
+ 'ð’®' => 'S',
+ 'ð’¯' => 'T',
+ 'ð’°' => 'U',
+ 'ð’±' => 'V',
+ 'ð’²' => 'W',
+ 'ð’³' => 'X',
+ 'ð’´' => 'Y',
+ 'ð’µ' => 'Z',
+ 'ð’¶' => 'a',
+ 'ð’·' => 'b',
+ 'ð’¸' => 'c',
+ 'ð’¹' => 'd',
+ 'ð’»' => 'f',
+ 'ð’½' => 'h',
+ 'ð’¾' => 'i',
+ 'ð’¿' => 'j',
+ 'ð“€' => 'k',
+ 'ð“' => 'l',
+ 'ð“‚' => 'm',
+ 'ð“ƒ' => 'n',
+ 'ð“…' => 'p',
+ 'ð“†' => 'q',
+ 'ð“‡' => 'r',
+ 'ð“ˆ' => 's',
+ 'ð“‰' => 't',
+ 'ð“Š' => 'u',
+ 'ð“‹' => 'v',
+ 'ð“Œ' => 'w',
+ 'ð“' => 'x',
+ 'ð“Ž' => 'y',
+ 'ð“' => 'z',
+ 'ð“' => 'A',
+ 'ð“‘' => 'B',
+ 'ð“’' => 'C',
+ 'ð““' => 'D',
+ 'ð“”' => 'E',
+ 'ð“•' => 'F',
+ 'ð“–' => 'G',
+ 'ð“—' => 'H',
+ 'ð“˜' => 'I',
+ 'ð“™' => 'J',
+ 'ð“š' => 'K',
+ 'ð“›' => 'L',
+ 'ð“œ' => 'M',
+ 'ð“' => 'N',
+ 'ð“ž' => 'O',
+ 'ð“Ÿ' => 'P',
+ 'ð“ ' => 'Q',
+ 'ð“¡' => 'R',
+ 'ð“¢' => 'S',
+ 'ð“£' => 'T',
+ 'ð“¤' => 'U',
+ 'ð“¥' => 'V',
+ 'ð“¦' => 'W',
+ 'ð“§' => 'X',
+ 'ð“¨' => 'Y',
+ 'ð“©' => 'Z',
+ 'ð“ª' => 'a',
+ 'ð“«' => 'b',
+ 'ð“¬' => 'c',
+ 'ð“' => 'd',
+ 'ð“®' => 'e',
+ 'ð“¯' => 'f',
+ 'ð“°' => 'g',
+ 'ð“±' => 'h',
+ 'ð“²' => 'i',
+ 'ð“³' => 'j',
+ 'ð“´' => 'k',
+ 'ð“µ' => 'l',
+ 'ð“¶' => 'm',
+ 'ð“·' => 'n',
+ 'ð“¸' => 'o',
+ 'ð“¹' => 'p',
+ 'ð“º' => 'q',
+ 'ð“»' => 'r',
+ 'ð“¼' => 's',
+ 'ð“½' => 't',
+ 'ð“¾' => 'u',
+ 'ð“¿' => 'v',
+ 'ð”€' => 'w',
+ 'ð”' => 'x',
+ 'ð”‚' => 'y',
+ 'ð”ƒ' => 'z',
+ 'ð”„' => 'A',
+ 'ð”…' => 'B',
+ 'ð”‡' => 'D',
+ 'ð”ˆ' => 'E',
+ 'ð”‰' => 'F',
+ 'ð”Š' => 'G',
+ 'ð”' => 'J',
+ 'ð”Ž' => 'K',
+ 'ð”' => 'L',
+ 'ð”' => 'M',
+ 'ð”‘' => 'N',
+ 'ð”’' => 'O',
+ 'ð”“' => 'P',
+ 'ð””' => 'Q',
+ 'ð”–' => 'S',
+ 'ð”—' => 'T',
+ 'ð”˜' => 'U',
+ 'ð”™' => 'V',
+ 'ð”š' => 'W',
+ 'ð”›' => 'X',
+ 'ð”œ' => 'Y',
+ 'ð”ž' => 'a',
+ 'ð”Ÿ' => 'b',
+ 'ð” ' => 'c',
+ 'ð”¡' => 'd',
+ 'ð”¢' => 'e',
+ 'ð”£' => 'f',
+ 'ð”¤' => 'g',
+ 'ð”¥' => 'h',
+ 'ð”¦' => 'i',
+ 'ð”§' => 'j',
+ 'ð”¨' => 'k',
+ 'ð”©' => 'l',
+ 'ð”ª' => 'm',
+ 'ð”«' => 'n',
+ 'ð”¬' => 'o',
+ 'ð”' => 'p',
+ 'ð”®' => 'q',
+ 'ð”¯' => 'r',
+ 'ð”°' => 's',
+ 'ð”±' => 't',
+ 'ð”²' => 'u',
+ 'ð”³' => 'v',
+ 'ð”´' => 'w',
+ 'ð”µ' => 'x',
+ 'ð”¶' => 'y',
+ 'ð”·' => 'z',
+ 'ð”¸' => 'A',
+ 'ð”¹' => 'B',
+ 'ð”»' => 'D',
+ 'ð”¼' => 'E',
+ 'ð”½' => 'F',
+ 'ð”¾' => 'G',
+ 'ð•€' => 'I',
+ 'ð•' => 'J',
+ 'ð•‚' => 'K',
+ 'ð•ƒ' => 'L',
+ 'ð•„' => 'M',
+ 'ð•†' => 'O',
+ 'ð•Š' => 'S',
+ 'ð•‹' => 'T',
+ 'ð•Œ' => 'U',
+ 'ð•' => 'V',
+ 'ð•Ž' => 'W',
+ 'ð•' => 'X',
+ 'ð•' => 'Y',
+ 'ð•’' => 'a',
+ 'ð•“' => 'b',
+ 'ð•”' => 'c',
+ 'ð••' => 'd',
+ 'ð•–' => 'e',
+ 'ð•—' => 'f',
+ 'ð•˜' => 'g',
+ 'ð•™' => 'h',
+ 'ð•š' => 'i',
+ 'ð•›' => 'j',
+ 'ð•œ' => 'k',
+ 'ð•' => 'l',
+ 'ð•ž' => 'm',
+ 'ð•Ÿ' => 'n',
+ 'ð• ' => 'o',
+ 'ð•¡' => 'p',
+ 'ð•¢' => 'q',
+ 'ð•£' => 'r',
+ 'ð•¤' => 's',
+ 'ð•¥' => 't',
+ 'ð•¦' => 'u',
+ 'ð•§' => 'v',
+ 'ð•¨' => 'w',
+ 'ð•©' => 'x',
+ 'ð•ª' => 'y',
+ 'ð•«' => 'z',
+ 'ð•¬' => 'A',
+ 'ð•' => 'B',
+ 'ð•®' => 'C',
+ 'ð•¯' => 'D',
+ 'ð•°' => 'E',
+ 'ð•±' => 'F',
+ 'ð•²' => 'G',
+ 'ð•³' => 'H',
+ 'ð•´' => 'I',
+ 'ð•µ' => 'J',
+ 'ð•¶' => 'K',
+ 'ð•·' => 'L',
+ 'ð•¸' => 'M',
+ 'ð•¹' => 'N',
+ 'ð•º' => 'O',
+ 'ð•»' => 'P',
+ 'ð•¼' => 'Q',
+ 'ð•½' => 'R',
+ 'ð•¾' => 'S',
+ 'ð•¿' => 'T',
+ 'ð–€' => 'U',
+ 'ð–' => 'V',
+ 'ð–‚' => 'W',
+ 'ð–ƒ' => 'X',
+ 'ð–„' => 'Y',
+ 'ð–…' => 'Z',
+ 'ð–†' => 'a',
+ 'ð–‡' => 'b',
+ 'ð–ˆ' => 'c',
+ 'ð–‰' => 'd',
+ 'ð–Š' => 'e',
+ 'ð–‹' => 'f',
+ 'ð–Œ' => 'g',
+ 'ð–' => 'h',
+ 'ð–Ž' => 'i',
+ 'ð–' => 'j',
+ 'ð–' => 'k',
+ 'ð–‘' => 'l',
+ 'ð–’' => 'm',
+ 'ð–“' => 'n',
+ 'ð–”' => 'o',
+ 'ð–•' => 'p',
+ 'ð––' => 'q',
+ 'ð–—' => 'r',
+ 'ð–˜' => 's',
+ 'ð–™' => 't',
+ 'ð–š' => 'u',
+ 'ð–›' => 'v',
+ 'ð–œ' => 'w',
+ 'ð–' => 'x',
+ 'ð–ž' => 'y',
+ 'ð–Ÿ' => 'z',
+ 'ð– ' => 'A',
+ 'ð–¡' => 'B',
+ 'ð–¢' => 'C',
+ 'ð–£' => 'D',
+ 'ð–¤' => 'E',
+ 'ð–¥' => 'F',
+ 'ð–¦' => 'G',
+ 'ð–§' => 'H',
+ 'ð–¨' => 'I',
+ 'ð–©' => 'J',
+ 'ð–ª' => 'K',
+ 'ð–«' => 'L',
+ 'ð–¬' => 'M',
+ 'ð–' => 'N',
+ 'ð–®' => 'O',
+ 'ð–¯' => 'P',
+ 'ð–°' => 'Q',
+ 'ð–±' => 'R',
+ 'ð–²' => 'S',
+ 'ð–³' => 'T',
+ 'ð–´' => 'U',
+ 'ð–µ' => 'V',
+ 'ð–¶' => 'W',
+ 'ð–·' => 'X',
+ 'ð–¸' => 'Y',
+ 'ð–¹' => 'Z',
+ 'ð–º' => 'a',
+ 'ð–»' => 'b',
+ 'ð–¼' => 'c',
+ 'ð–½' => 'd',
+ 'ð–¾' => 'e',
+ 'ð–¿' => 'f',
+ 'ð—€' => 'g',
+ 'ð—' => 'h',
+ 'ð—‚' => 'i',
+ 'ð—ƒ' => 'j',
+ 'ð—„' => 'k',
+ 'ð—…' => 'l',
+ 'ð—†' => 'm',
+ 'ð—‡' => 'n',
+ 'ð—ˆ' => 'o',
+ 'ð—‰' => 'p',
+ 'ð—Š' => 'q',
+ 'ð—‹' => 'r',
+ 'ð—Œ' => 's',
+ 'ð—' => 't',
+ 'ð—Ž' => 'u',
+ 'ð—' => 'v',
+ 'ð—' => 'w',
+ 'ð—‘' => 'x',
+ 'ð—’' => 'y',
+ 'ð—“' => 'z',
+ 'ð—”' => 'A',
+ 'ð—•' => 'B',
+ 'ð—–' => 'C',
+ 'ð——' => 'D',
+ 'ð—˜' => 'E',
+ 'ð—™' => 'F',
+ 'ð—š' => 'G',
+ 'ð—›' => 'H',
+ 'ð—œ' => 'I',
+ 'ð—' => 'J',
+ 'ð—ž' => 'K',
+ 'ð—Ÿ' => 'L',
+ 'ð— ' => 'M',
+ 'ð—¡' => 'N',
+ 'ð—¢' => 'O',
+ 'ð—£' => 'P',
+ 'ð—¤' => 'Q',
+ 'ð—¥' => 'R',
+ 'ð—¦' => 'S',
+ 'ð—§' => 'T',
+ 'ð—¨' => 'U',
+ 'ð—©' => 'V',
+ 'ð—ª' => 'W',
+ 'ð—«' => 'X',
+ 'ð—¬' => 'Y',
+ 'ð—' => 'Z',
+ 'ð—®' => 'a',
+ 'ð—¯' => 'b',
+ 'ð—°' => 'c',
+ 'ð—±' => 'd',
+ 'ð—²' => 'e',
+ 'ð—³' => 'f',
+ 'ð—´' => 'g',
+ 'ð—µ' => 'h',
+ 'ð—¶' => 'i',
+ 'ð—·' => 'j',
+ 'ð—¸' => 'k',
+ 'ð—¹' => 'l',
+ 'ð—º' => 'm',
+ 'ð—»' => 'n',
+ 'ð—¼' => 'o',
+ 'ð—½' => 'p',
+ 'ð—¾' => 'q',
+ 'ð—¿' => 'r',
+ 'ð˜€' => 's',
+ 'ð˜' => 't',
+ 'ð˜‚' => 'u',
+ 'ð˜ƒ' => 'v',
+ 'ð˜„' => 'w',
+ 'ð˜…' => 'x',
+ 'ð˜†' => 'y',
+ 'ð˜‡' => 'z',
+ 'ð˜ˆ' => 'A',
+ 'ð˜‰' => 'B',
+ 'ð˜Š' => 'C',
+ 'ð˜‹' => 'D',
+ 'ð˜Œ' => 'E',
+ 'ð˜' => 'F',
+ 'ð˜Ž' => 'G',
+ 'ð˜' => 'H',
+ 'ð˜' => 'I',
+ 'ð˜‘' => 'J',
+ 'ð˜’' => 'K',
+ 'ð˜“' => 'L',
+ 'ð˜”' => 'M',
+ 'ð˜•' => 'N',
+ 'ð˜–' => 'O',
+ 'ð˜—' => 'P',
+ 'ð˜˜' => 'Q',
+ 'ð˜™' => 'R',
+ 'ð˜š' => 'S',
+ 'ð˜›' => 'T',
+ 'ð˜œ' => 'U',
+ 'ð˜' => 'V',
+ 'ð˜ž' => 'W',
+ 'ð˜Ÿ' => 'X',
+ 'ð˜ ' => 'Y',
+ 'ð˜¡' => 'Z',
+ 'ð˜¢' => 'a',
+ 'ð˜£' => 'b',
+ 'ð˜¤' => 'c',
+ 'ð˜¥' => 'd',
+ 'ð˜¦' => 'e',
+ 'ð˜§' => 'f',
+ 'ð˜¨' => 'g',
+ 'ð˜©' => 'h',
+ 'ð˜ª' => 'i',
+ 'ð˜«' => 'j',
+ 'ð˜¬' => 'k',
+ 'ð˜' => 'l',
+ 'ð˜®' => 'm',
+ 'ð˜¯' => 'n',
+ 'ð˜°' => 'o',
+ 'ð˜±' => 'p',
+ 'ð˜²' => 'q',
+ 'ð˜³' => 'r',
+ 'ð˜´' => 's',
+ 'ð˜µ' => 't',
+ 'ð˜¶' => 'u',
+ 'ð˜·' => 'v',
+ 'ð˜¸' => 'w',
+ 'ð˜¹' => 'x',
+ 'ð˜º' => 'y',
+ 'ð˜»' => 'z',
+ 'ð˜¼' => 'A',
+ 'ð˜½' => 'B',
+ 'ð˜¾' => 'C',
+ 'ð˜¿' => 'D',
+ 'ð™€' => 'E',
+ 'ð™' => 'F',
+ 'ð™‚' => 'G',
+ 'ð™ƒ' => 'H',
+ 'ð™„' => 'I',
+ 'ð™…' => 'J',
+ 'ð™†' => 'K',
+ 'ð™‡' => 'L',
+ 'ð™ˆ' => 'M',
+ 'ð™‰' => 'N',
+ 'ð™Š' => 'O',
+ 'ð™‹' => 'P',
+ 'ð™Œ' => 'Q',
+ 'ð™' => 'R',
+ 'ð™Ž' => 'S',
+ 'ð™' => 'T',
+ 'ð™' => 'U',
+ 'ð™‘' => 'V',
+ 'ð™’' => 'W',
+ 'ð™“' => 'X',
+ 'ð™”' => 'Y',
+ 'ð™•' => 'Z',
+ 'ð™–' => 'a',
+ 'ð™—' => 'b',
+ 'ð™˜' => 'c',
+ 'ð™™' => 'd',
+ 'ð™š' => 'e',
+ 'ð™›' => 'f',
+ 'ð™œ' => 'g',
+ 'ð™' => 'h',
+ 'ð™ž' => 'i',
+ 'ð™Ÿ' => 'j',
+ 'ð™ ' => 'k',
+ 'ð™¡' => 'l',
+ 'ð™¢' => 'm',
+ 'ð™£' => 'n',
+ 'ð™¤' => 'o',
+ 'ð™¥' => 'p',
+ 'ð™¦' => 'q',
+ 'ð™§' => 'r',
+ 'ð™¨' => 's',
+ 'ð™©' => 't',
+ 'ð™ª' => 'u',
+ 'ð™«' => 'v',
+ 'ð™¬' => 'w',
+ 'ð™' => 'x',
+ 'ð™®' => 'y',
+ 'ð™¯' => 'z',
+ 'ð™°' => 'A',
+ 'ð™±' => 'B',
+ 'ð™²' => 'C',
+ 'ð™³' => 'D',
+ 'ð™´' => 'E',
+ 'ð™µ' => 'F',
+ 'ð™¶' => 'G',
+ 'ð™·' => 'H',
+ 'ð™¸' => 'I',
+ 'ð™¹' => 'J',
+ 'ð™º' => 'K',
+ 'ð™»' => 'L',
+ 'ð™¼' => 'M',
+ 'ð™½' => 'N',
+ 'ð™¾' => 'O',
+ 'ð™¿' => 'P',
+ 'ðš€' => 'Q',
+ 'ðš' => 'R',
+ 'ðš‚' => 'S',
+ 'ðšƒ' => 'T',
+ 'ðš„' => 'U',
+ 'ðš…' => 'V',
+ 'ðš†' => 'W',
+ 'ðš‡' => 'X',
+ 'ðšˆ' => 'Y',
+ 'ðš‰' => 'Z',
+ 'ðšŠ' => 'a',
+ 'ðš‹' => 'b',
+ 'ðšŒ' => 'c',
+ 'ðš' => 'd',
+ 'ðšŽ' => 'e',
+ 'ðš' => 'f',
+ 'ðš' => 'g',
+ 'ðš‘' => 'h',
+ 'ðš’' => 'i',
+ 'ðš“' => 'j',
+ 'ðš”' => 'k',
+ 'ðš•' => 'l',
+ 'ðš–' => 'm',
+ 'ðš—' => 'n',
+ 'ðš˜' => 'o',
+ 'ðš™' => 'p',
+ 'ðšš' => 'q',
+ 'ðš›' => 'r',
+ 'ðšœ' => 's',
+ 'ðš' => 't',
+ 'ðšž' => 'u',
+ 'ðšŸ' => 'v',
+ 'ðš ' => 'w',
+ 'ðš¡' => 'x',
+ 'ðš¢' => 'y',
+ 'ðš£' => 'z',
+ 'ðš¤' => 'ı',
+ 'ðš¥' => 'È·',
+ 'ðš¨' => 'Α',
+ 'ðš©' => 'Î’',
+ 'ðšª' => 'Γ',
+ 'ðš«' => 'Δ',
+ 'ðš¬' => 'Ε',
+ 'ðš' => 'Ζ',
+ 'ðš®' => 'Η',
+ 'ðš¯' => 'Θ',
+ 'ðš°' => 'Ι',
+ 'ðš±' => 'Κ',
+ 'ðš²' => 'Λ',
+ 'ðš³' => 'Îœ',
+ 'ðš´' => 'Î',
+ 'ðšµ' => 'Ξ',
+ 'ðš¶' => 'Ο',
+ 'ðš·' => 'Î ',
+ 'ðš¸' => 'Ρ',
+ 'ðš¹' => 'Ï´',
+ 'ðšº' => 'Σ',
+ 'ðš»' => 'Τ',
+ 'ðš¼' => 'Î¥',
+ 'ðš½' => 'Φ',
+ 'ðš¾' => 'Χ',
+ 'ðš¿' => 'Ψ',
+ 'ð›€' => 'Ω',
+ 'ð›' => '∇',
+ 'ð›‚' => 'α',
+ 'ð›ƒ' => 'β',
+ 'ð›„' => 'γ',
+ 'ð›…' => 'δ',
+ 'ð›†' => 'ε',
+ 'ð›‡' => 'ζ',
+ 'ð›ˆ' => 'η',
+ 'ð›‰' => 'θ',
+ 'ð›Š' => 'ι',
+ 'ð›‹' => 'κ',
+ 'ð›Œ' => 'λ',
+ 'ð›' => 'μ',
+ 'ð›Ž' => 'ν',
+ 'ð›' => 'ξ',
+ 'ð›' => 'ο',
+ 'ð›‘' => 'Ï€',
+ 'ð›’' => 'Ï',
+ 'ð›“' => 'Ï‚',
+ 'ð›”' => 'σ',
+ 'ð›•' => 'Ï„',
+ 'ð›–' => 'Ï…',
+ 'ð›—' => 'φ',
+ 'ð›˜' => 'χ',
+ 'ð›™' => 'ψ',
+ 'ð›š' => 'ω',
+ 'ð››' => '∂',
+ 'ð›œ' => 'ϵ',
+ 'ð›' => 'Ï‘',
+ 'ð›ž' => 'Ï°',
+ 'ð›Ÿ' => 'Ï•',
+ 'ð› ' => 'ϱ',
+ 'ð›¡' => 'Ï–',
+ 'ð›¢' => 'Α',
+ 'ð›£' => 'Î’',
+ 'ð›¤' => 'Γ',
+ 'ð›¥' => 'Δ',
+ 'ð›¦' => 'Ε',
+ 'ð›§' => 'Ζ',
+ 'ð›¨' => 'Η',
+ 'ð›©' => 'Θ',
+ 'ð›ª' => 'Ι',
+ 'ð›«' => 'Κ',
+ 'ð›¬' => 'Λ',
+ 'ð›' => 'Îœ',
+ 'ð›®' => 'Î',
+ 'ð›¯' => 'Ξ',
+ 'ð›°' => 'Ο',
+ 'ð›±' => 'Î ',
+ 'ð›²' => 'Ρ',
+ 'ð›³' => 'Ï´',
+ 'ð›´' => 'Σ',
+ 'ð›µ' => 'Τ',
+ 'ð›¶' => 'Î¥',
+ 'ð›·' => 'Φ',
+ 'ð›¸' => 'Χ',
+ 'ð›¹' => 'Ψ',
+ 'ð›º' => 'Ω',
+ 'ð›»' => '∇',
+ 'ð›¼' => 'α',
+ 'ð›½' => 'β',
+ 'ð›¾' => 'γ',
+ 'ð›¿' => 'δ',
+ 'ðœ€' => 'ε',
+ 'ðœ' => 'ζ',
+ 'ðœ‚' => 'η',
+ 'ðœƒ' => 'θ',
+ 'ðœ„' => 'ι',
+ 'ðœ…' => 'κ',
+ 'ðœ†' => 'λ',
+ 'ðœ‡' => 'μ',
+ 'ðœˆ' => 'ν',
+ 'ðœ‰' => 'ξ',
+ 'ðœŠ' => 'ο',
+ 'ðœ‹' => 'Ï€',
+ 'ðœŒ' => 'Ï',
+ 'ðœ' => 'Ï‚',
+ 'ðœŽ' => 'σ',
+ 'ðœ' => 'Ï„',
+ 'ðœ' => 'Ï…',
+ 'ðœ‘' => 'φ',
+ 'ðœ’' => 'χ',
+ 'ðœ“' => 'ψ',
+ 'ðœ”' => 'ω',
+ 'ðœ•' => '∂',
+ 'ðœ–' => 'ϵ',
+ 'ðœ—' => 'Ï‘',
+ 'ðœ˜' => 'Ï°',
+ 'ðœ™' => 'Ï•',
+ 'ðœš' => 'ϱ',
+ 'ðœ›' => 'Ï–',
+ 'ðœœ' => 'Α',
+ 'ðœ' => 'Î’',
+ 'ðœž' => 'Γ',
+ 'ðœŸ' => 'Δ',
+ 'ðœ ' => 'Ε',
+ 'ðœ¡' => 'Ζ',
+ 'ðœ¢' => 'Η',
+ 'ðœ£' => 'Θ',
+ 'ðœ¤' => 'Ι',
+ 'ðœ¥' => 'Κ',
+ 'ðœ¦' => 'Λ',
+ 'ðœ§' => 'Îœ',
+ 'ðœ¨' => 'Î',
+ 'ðœ©' => 'Ξ',
+ 'ðœª' => 'Ο',
+ 'ðœ«' => 'Î ',
+ 'ðœ¬' => 'Ρ',
+ 'ðœ' => 'Ï´',
+ 'ðœ®' => 'Σ',
+ 'ðœ¯' => 'Τ',
+ 'ðœ°' => 'Î¥',
+ 'ðœ±' => 'Φ',
+ 'ðœ²' => 'Χ',
+ 'ðœ³' => 'Ψ',
+ 'ðœ´' => 'Ω',
+ 'ðœµ' => '∇',
+ 'ðœ¶' => 'α',
+ 'ðœ·' => 'β',
+ 'ðœ¸' => 'γ',
+ 'ðœ¹' => 'δ',
+ 'ðœº' => 'ε',
+ 'ðœ»' => 'ζ',
+ 'ðœ¼' => 'η',
+ 'ðœ½' => 'θ',
+ 'ðœ¾' => 'ι',
+ 'ðœ¿' => 'κ',
+ 'ð€' => 'λ',
+ 'ð' => 'μ',
+ 'ð‚' => 'ν',
+ 'ðƒ' => 'ξ',
+ 'ð„' => 'ο',
+ 'ð…' => 'Ï€',
+ 'ð†' => 'Ï',
+ 'ð‡' => 'Ï‚',
+ 'ðˆ' => 'σ',
+ 'ð‰' => 'Ï„',
+ 'ðŠ' => 'Ï…',
+ 'ð‹' => 'φ',
+ 'ðŒ' => 'χ',
+ 'ð' => 'ψ',
+ 'ðŽ' => 'ω',
+ 'ð' => '∂',
+ 'ð' => 'ϵ',
+ 'ð‘' => 'Ï‘',
+ 'ð’' => 'Ï°',
+ 'ð“' => 'Ï•',
+ 'ð”' => 'ϱ',
+ 'ð•' => 'Ï–',
+ 'ð–' => 'Α',
+ 'ð—' => 'Î’',
+ 'ð˜' => 'Γ',
+ 'ð™' => 'Δ',
+ 'ðš' => 'Ε',
+ 'ð›' => 'Ζ',
+ 'ðœ' => 'Η',
+ 'ð' => 'Θ',
+ 'ðž' => 'Ι',
+ 'ðŸ' => 'Κ',
+ 'ð ' => 'Λ',
+ 'ð¡' => 'Îœ',
+ 'ð¢' => 'Î',
+ 'ð£' => 'Ξ',
+ 'ð¤' => 'Ο',
+ 'ð¥' => 'Î ',
+ 'ð¦' => 'Ρ',
+ 'ð§' => 'Ï´',
+ 'ð¨' => 'Σ',
+ 'ð©' => 'Τ',
+ 'ðª' => 'Î¥',
+ 'ð«' => 'Φ',
+ 'ð¬' => 'Χ',
+ 'ð' => 'Ψ',
+ 'ð®' => 'Ω',
+ 'ð¯' => '∇',
+ 'ð°' => 'α',
+ 'ð±' => 'β',
+ 'ð²' => 'γ',
+ 'ð³' => 'δ',
+ 'ð´' => 'ε',
+ 'ðµ' => 'ζ',
+ 'ð¶' => 'η',
+ 'ð·' => 'θ',
+ 'ð¸' => 'ι',
+ 'ð¹' => 'κ',
+ 'ðº' => 'λ',
+ 'ð»' => 'μ',
+ 'ð¼' => 'ν',
+ 'ð½' => 'ξ',
+ 'ð¾' => 'ο',
+ 'ð¿' => 'Ï€',
+ 'ðž€' => 'Ï',
+ 'ðž' => 'Ï‚',
+ 'ðž‚' => 'σ',
+ 'ðžƒ' => 'Ï„',
+ 'ðž„' => 'Ï…',
+ 'ðž…' => 'φ',
+ 'ðž†' => 'χ',
+ 'ðž‡' => 'ψ',
+ 'ðžˆ' => 'ω',
+ 'ðž‰' => '∂',
+ 'ðžŠ' => 'ϵ',
+ 'ðž‹' => 'Ï‘',
+ 'ðžŒ' => 'Ï°',
+ 'ðž' => 'Ï•',
+ 'ðžŽ' => 'ϱ',
+ 'ðž' => 'Ï–',
+ 'ðž' => 'Α',
+ 'ðž‘' => 'Î’',
+ 'ðž’' => 'Γ',
+ 'ðž“' => 'Δ',
+ 'ðž”' => 'Ε',
+ 'ðž•' => 'Ζ',
+ 'ðž–' => 'Η',
+ 'ðž—' => 'Θ',
+ 'ðž˜' => 'Ι',
+ 'ðž™' => 'Κ',
+ 'ðžš' => 'Λ',
+ 'ðž›' => 'Îœ',
+ 'ðžœ' => 'Î',
+ 'ðž' => 'Ξ',
+ 'ðžž' => 'Ο',
+ 'ðžŸ' => 'Î ',
+ 'ðž ' => 'Ρ',
+ 'ðž¡' => 'Ï´',
+ 'ðž¢' => 'Σ',
+ 'ðž£' => 'Τ',
+ 'ðž¤' => 'Î¥',
+ 'ðž¥' => 'Φ',
+ 'ðž¦' => 'Χ',
+ 'ðž§' => 'Ψ',
+ 'ðž¨' => 'Ω',
+ 'ðž©' => '∇',
+ 'ðžª' => 'α',
+ 'ðž«' => 'β',
+ 'ðž¬' => 'γ',
+ 'ðž' => 'δ',
+ 'ðž®' => 'ε',
+ 'ðž¯' => 'ζ',
+ 'ðž°' => 'η',
+ 'ðž±' => 'θ',
+ 'ðž²' => 'ι',
+ 'ðž³' => 'κ',
+ 'ðž´' => 'λ',
+ 'ðžµ' => 'μ',
+ 'ðž¶' => 'ν',
+ 'ðž·' => 'ξ',
+ 'ðž¸' => 'ο',
+ 'ðž¹' => 'Ï€',
+ 'ðžº' => 'Ï',
+ 'ðž»' => 'Ï‚',
+ 'ðž¼' => 'σ',
+ 'ðž½' => 'Ï„',
+ 'ðž¾' => 'Ï…',
+ 'ðž¿' => 'φ',
+ 'ðŸ€' => 'χ',
+ 'ðŸ' => 'ψ',
+ 'ðŸ‚' => 'ω',
+ 'ðŸƒ' => '∂',
+ 'ðŸ„' => 'ϵ',
+ 'ðŸ…' => 'Ï‘',
+ 'ðŸ†' => 'Ï°',
+ 'ðŸ‡' => 'Ï•',
+ 'ðŸˆ' => 'ϱ',
+ 'ðŸ‰' => 'Ï–',
+ 'ðŸŠ' => 'Ïœ',
+ 'ðŸ‹' => 'Ï',
+ 'ðŸŽ' => '0',
+ 'ðŸ' => '1',
+ 'ðŸ' => '2',
+ 'ðŸ‘' => '3',
+ 'ðŸ’' => '4',
+ 'ðŸ“' => '5',
+ 'ðŸ”' => '6',
+ 'ðŸ•' => '7',
+ 'ðŸ–' => '8',
+ 'ðŸ—' => '9',
+ 'ðŸ˜' => '0',
+ 'ðŸ™' => '1',
+ 'ðŸš' => '2',
+ 'ðŸ›' => '3',
+ 'ðŸœ' => '4',
+ 'ðŸ' => '5',
+ 'ðŸž' => '6',
+ 'ðŸŸ' => '7',
+ 'ðŸ ' => '8',
+ 'ðŸ¡' => '9',
+ 'ðŸ¢' => '0',
+ 'ðŸ£' => '1',
+ 'ðŸ¤' => '2',
+ 'ðŸ¥' => '3',
+ 'ðŸ¦' => '4',
+ 'ðŸ§' => '5',
+ 'ðŸ¨' => '6',
+ 'ðŸ©' => '7',
+ 'ðŸª' => '8',
+ 'ðŸ«' => '9',
+ 'ðŸ¬' => '0',
+ 'ðŸ' => '1',
+ 'ðŸ®' => '2',
+ 'ðŸ¯' => '3',
+ 'ðŸ°' => '4',
+ 'ðŸ±' => '5',
+ 'ðŸ²' => '6',
+ 'ðŸ³' => '7',
+ 'ðŸ´' => '8',
+ 'ðŸµ' => '9',
+ 'ðŸ¶' => '0',
+ 'ðŸ·' => '1',
+ 'ðŸ¸' => '2',
+ 'ðŸ¹' => '3',
+ 'ðŸº' => '4',
+ 'ðŸ»' => '5',
+ 'ðŸ¼' => '6',
+ 'ðŸ½' => '7',
+ 'ðŸ¾' => '8',
+ 'ðŸ¿' => '9',
+ '𞸀' => 'ا',
+ 'ðž¸' => 'ب',
+ '𞸂' => 'ج',
+ '𞸃' => 'د',
+ '𞸅' => 'و',
+ '𞸆' => 'ز',
+ '𞸇' => 'Ø',
+ '𞸈' => 'ط',
+ '𞸉' => 'ي',
+ '𞸊' => 'ك',
+ '𞸋' => 'ل',
+ '𞸌' => 'م',
+ 'ðž¸' => 'Ù†',
+ '𞸎' => 'س',
+ 'ðž¸' => 'ع',
+ 'ðž¸' => 'Ù',
+ '𞸑' => 'ص',
+ '𞸒' => 'ق',
+ '𞸓' => 'ر',
+ '𞸔' => 'ش',
+ '𞸕' => 'ت',
+ '𞸖' => 'ث',
+ '𞸗' => 'خ',
+ '𞸘' => 'ذ',
+ '𞸙' => 'ض',
+ '𞸚' => 'ظ',
+ '𞸛' => 'غ',
+ '𞸜' => 'ٮ',
+ 'ðž¸' => 'Úº',
+ '𞸞' => 'ڡ',
+ '𞸟' => 'ٯ',
+ '𞸡' => 'ب',
+ '𞸢' => 'ج',
+ '𞸤' => 'ه',
+ '𞸧' => 'Ø',
+ '𞸩' => 'ي',
+ '𞸪' => 'ك',
+ '𞸫' => 'ل',
+ '𞸬' => 'م',
+ 'ðž¸' => 'Ù†',
+ '𞸮' => 'س',
+ '𞸯' => 'ع',
+ '𞸰' => 'Ù',
+ '𞸱' => 'ص',
+ '𞸲' => 'ق',
+ '𞸴' => 'ش',
+ '𞸵' => 'ت',
+ '𞸶' => 'ث',
+ '𞸷' => 'خ',
+ '𞸹' => 'ض',
+ '𞸻' => 'غ',
+ '𞹂' => 'ج',
+ '𞹇' => 'Ø',
+ '𞹉' => 'ي',
+ '𞹋' => 'ل',
+ 'ðž¹' => 'Ù†',
+ '𞹎' => 'س',
+ 'ðž¹' => 'ع',
+ '𞹑' => 'ص',
+ 'ðž¹’' => 'Ù‚',
+ 'ðž¹”' => 'Ø´',
+ 'ðž¹—' => 'Ø®',
+ '𞹙' => 'ض',
+ '𞹛' => 'غ',
+ 'ðž¹' => 'Úº',
+ '𞹟' => 'ٯ',
+ '𞹡' => 'ب',
+ '𞹢' => 'ج',
+ '𞹤' => 'ه',
+ '𞹧' => 'Ø',
+ '𞹨' => 'ط',
+ '𞹩' => 'ي',
+ '𞹪' => 'ك',
+ '𞹬' => 'م',
+ 'ðž¹' => 'Ù†',
+ '𞹮' => 'س',
+ '𞹯' => 'ع',
+ 'ðž¹°' => 'Ù',
+ '𞹱' => 'ص',
+ 'ðž¹²' => 'Ù‚',
+ 'ðž¹´' => 'Ø´',
+ '𞹵' => 'ت',
+ '𞹶' => 'ث',
+ 'ðž¹·' => 'Ø®',
+ '𞹹' => 'ض',
+ '𞹺' => 'ظ',
+ '𞹻' => 'غ',
+ 'ðž¹¼' => 'Ù®',
+ 'ðž¹¾' => 'Ú¡',
+ '𞺀' => 'ا',
+ 'ðžº' => 'ب',
+ '𞺂' => 'ج',
+ '𞺃' => 'د',
+ '𞺄' => 'ه',
+ '𞺅' => 'و',
+ '𞺆' => 'ز',
+ '𞺇' => 'Ø',
+ '𞺈' => 'ط',
+ '𞺉' => 'ي',
+ '𞺋' => 'ل',
+ '𞺌' => 'م',
+ 'ðžº' => 'Ù†',
+ '𞺎' => 'س',
+ 'ðžº' => 'ع',
+ 'ðžº' => 'Ù',
+ '𞺑' => 'ص',
+ '𞺒' => 'ق',
+ '𞺓' => 'ر',
+ '𞺔' => 'ش',
+ '𞺕' => 'ت',
+ '𞺖' => 'ث',
+ '𞺗' => 'خ',
+ '𞺘' => 'ذ',
+ '𞺙' => 'ض',
+ '𞺚' => 'ظ',
+ '𞺛' => 'غ',
+ '𞺡' => 'ب',
+ '𞺢' => 'ج',
+ '𞺣' => 'د',
+ '𞺥' => 'و',
+ '𞺦' => 'ز',
+ '𞺧' => 'Ø',
+ '𞺨' => 'ط',
+ '𞺩' => 'ي',
+ '𞺫' => 'ل',
+ '𞺬' => 'م',
+ 'ðžº' => 'Ù†',
+ '𞺮' => 'س',
+ '𞺯' => 'ع',
+ '𞺰' => 'Ù',
+ '𞺱' => 'ص',
+ '𞺲' => 'ق',
+ '𞺳' => 'ر',
+ '𞺴' => 'ش',
+ '𞺵' => 'ت',
+ '𞺶' => 'ث',
+ '𞺷' => 'خ',
+ '𞺸' => 'ذ',
+ '𞺹' => 'ض',
+ '𞺺' => 'ظ',
+ '𞺻' => 'غ',
+ '🄀' => '0.',
+ 'ðŸ„' => '0,',
+ '🄂' => '1,',
+ '🄃' => '2,',
+ '🄄' => '3,',
+ '🄅' => '4,',
+ '🄆' => '5,',
+ '🄇' => '6,',
+ '🄈' => '7,',
+ '🄉' => '8,',
+ '🄊' => '9,',
+ 'ðŸ„' => '(A)',
+ '🄑' => '(B)',
+ '🄒' => '(C)',
+ '🄓' => '(D)',
+ '🄔' => '(E)',
+ '🄕' => '(F)',
+ '🄖' => '(G)',
+ '🄗' => '(H)',
+ '🄘' => '(I)',
+ '🄙' => '(J)',
+ '🄚' => '(K)',
+ '🄛' => '(L)',
+ '🄜' => '(M)',
+ 'ðŸ„' => '(N)',
+ '🄞' => '(O)',
+ '🄟' => '(P)',
+ '🄠' => '(Q)',
+ '🄡' => '(R)',
+ '🄢' => '(S)',
+ '🄣' => '(T)',
+ '🄤' => '(U)',
+ '🄥' => '(V)',
+ '🄦' => '(W)',
+ '🄧' => '(X)',
+ '🄨' => '(Y)',
+ '🄩' => '(Z)',
+ '🄪' => '〔S〕',
+ '🄫' => '(C)',
+ '🄬' => '(R)',
+ 'ðŸ„' => '(CD)',
+ '🄮' => '(WZ)',
+ '🄰' => 'A',
+ '🄱' => 'B',
+ '🄲' => 'C',
+ '🄳' => 'D',
+ '🄴' => 'E',
+ '🄵' => 'F',
+ '🄶' => 'G',
+ '🄷' => 'H',
+ '🄸' => 'I',
+ '🄹' => 'J',
+ '🄺' => 'K',
+ '🄻' => 'L',
+ '🄼' => 'M',
+ '🄽' => 'N',
+ '🄾' => 'O',
+ '🄿' => 'P',
+ '🅀' => 'Q',
+ 'ðŸ…' => 'R',
+ '🅂' => 'S',
+ '🅃' => 'T',
+ '🅄' => 'U',
+ '🅅' => 'V',
+ '🅆' => 'W',
+ '🅇' => 'X',
+ '🅈' => 'Y',
+ '🅉' => 'Z',
+ '🅊' => 'HV',
+ '🅋' => 'MV',
+ '🅌' => 'SD',
+ 'ðŸ…' => 'SS',
+ '🅎' => 'PPV',
+ 'ðŸ…' => 'WC',
+ 'ðŸ†' => 'DJ',
+ '🈀' => 'ã»ã‹',
+ 'ðŸˆ' => 'ココ',
+ '🈂' => 'サ',
+ 'ðŸˆ' => '手',
+ '🈑' => 'å—',
+ '🈒' => 'åŒ',
+ '🈓' => 'デ',
+ '🈔' => '二',
+ '🈕' => '多',
+ '🈖' => '解',
+ '🈗' => '天',
+ '🈘' => '交',
+ '🈙' => 'æ˜ ',
+ '🈚' => '無',
+ '🈛' => '料',
+ '🈜' => 'å‰',
+ 'ðŸˆ' => '後',
+ '🈞' => 'å†',
+ '🈟' => '新',
+ '🈠' => 'åˆ',
+ '🈡' => '終',
+ '🈢' => '生',
+ '🈣' => '販',
+ '🈤' => '声',
+ '🈥' => 'å¹',
+ '🈦' => '演',
+ '🈧' => '投',
+ '🈨' => 'æ•',
+ '🈩' => '一',
+ '🈪' => '三',
+ '🈫' => 'éŠ',
+ '🈬' => '左',
+ 'ðŸˆ' => 'ä¸',
+ '🈮' => 'å³',
+ '🈯' => '指',
+ '🈰' => '走',
+ '🈱' => '打',
+ '🈲' => 'ç¦',
+ '🈳' => '空',
+ '🈴' => 'åˆ',
+ '🈵' => '満',
+ '🈶' => '有',
+ '🈷' => '月',
+ '🈸' => '申',
+ '🈹' => '割',
+ '🈺' => '営',
+ '🈻' => 'é…',
+ '🉀' => '〔本〕',
+ 'ðŸ‰' => '〔三〕',
+ '🉂' => '〔二〕',
+ '🉃' => '〔安〕',
+ '🉄' => '〔点〕',
+ '🉅' => '〔打〕',
+ '🉆' => '〔盗〕',
+ '🉇' => '〔å‹ã€•',
+ '🉈' => '〔敗〕',
+ 'ðŸ‰' => '(å¾—)',
+ '🉑' => '(å¯)',
+ '🯰' => '0',
+ '🯱' => '1',
+ '🯲' => '2',
+ '🯳' => '3',
+ '🯴' => '4',
+ '🯵' => '5',
+ '🯶' => '6',
+ '🯷' => '7',
+ '🯸' => '8',
+ '🯹' => '9',
+ '丽' => '丽',
+ 'ð¯ ' => '丸',
+ '乁' => 'ä¹',
+ '𠄢' => '𠄢',
+ '你' => 'ä½ ',
+ '侮' => '侮',
+ '侻' => '侻',
+ '倂' => '倂',
+ '偺' => 'åº',
+ '備' => '備',
+ '僧' => '僧',
+ '像' => 'åƒ',
+ '㒞' => '㒞',
+ 'ð¯ ' => '𠘺',
+ '免' => 'å…',
+ 'ð¯ ' => 'å…”',
+ 'ð¯ ' => 'å…¤',
+ '具' => '具',
+ '𠔜' => '𠔜',
+ '㒹' => '㒹',
+ '內' => '內',
+ '再' => 'å†',
+ '𠕋' => '𠕋',
+ '冗' => '冗',
+ '冤' => '冤',
+ '仌' => '仌',
+ '冬' => '冬',
+ '况' => '况',
+ '𩇟' => '𩇟',
+ 'ð¯ ' => '凵',
+ '刃' => '刃',
+ '㓟' => '㓟',
+ 'ð¯ ' => '刻',
+ '剆' => '剆',
+ '割' => '割',
+ '剷' => '剷',
+ '㔕' => '㔕',
+ '勇' => '勇',
+ '勉' => '勉',
+ '勤' => '勤',
+ '勺' => '勺',
+ '包' => '包',
+ '匆' => '匆',
+ '北' => '北',
+ '卉' => 'å‰',
+ 'ð¯ ' => 'å‘',
+ '博' => 'åš',
+ '即' => 'å³',
+ '卽' => 'å½',
+ '卿' => 'å¿',
+ '卿' => 'å¿',
+ '卿' => 'å¿',
+ '𠨬' => '𠨬',
+ '灰' => 'ç°',
+ '及' => 'åŠ',
+ '叟' => 'åŸ',
+ '𠭣' => 'ð £',
+ '叫' => 'å«',
+ '叱' => 'å±',
+ '吆' => 'å†',
+ '咞' => '咞',
+ '吸' => 'å¸',
+ '呈' => '呈',
+ '周' => '周',
+ '咢' => '咢',
+ 'ð¯¡' => '哶',
+ '唐' => 'å”',
+ '啓' => '啓',
+ '啣' => '啣',
+ '善' => '善',
+ '善' => '善',
+ '喙' => '喙',
+ '喫' => '喫',
+ '喳' => '喳',
+ '嗂' => '嗂',
+ '圖' => '圖',
+ '嘆' => '嘆',
+ 'ð¯¡' => '圗',
+ '噑' => '噑',
+ 'ð¯¡' => 'å™´',
+ 'ð¯¡' => '切',
+ '壮' => '壮',
+ '城' => '城',
+ '埴' => '埴',
+ '堍' => 'å ',
+ '型' => '型',
+ '堲' => 'å ²',
+ '報' => 'å ±',
+ '墬' => '墬',
+ '𡓤' => '𡓤',
+ '売' => '売',
+ '壷' => '壷',
+ '夆' => '夆',
+ 'ð¯¡' => '多',
+ '夢' => '夢',
+ '奢' => '奢',
+ '𡚨' => '𡚨',
+ '𡛪' => '𡛪',
+ '姬' => '姬',
+ '娛' => '娛',
+ '娧' => '娧',
+ '姘' => '姘',
+ '婦' => '婦',
+ '㛮' => '㛮',
+ '㛼' => '㛼',
+ '嬈' => '嬈',
+ '嬾' => '嬾',
+ '嬾' => '嬾',
+ '𡧈' => '𡧈',
+ 'ð¯¡' => '寃',
+ '寘' => '寘',
+ '寧' => '寧',
+ '寳' => '寳',
+ '𡬘' => '𡬘',
+ '寿' => '寿',
+ '将' => '将',
+ '当' => '当',
+ '尢' => '尢',
+ '㞁' => 'ãž',
+ '屠' => 'å± ',
+ '屮' => '屮',
+ '峀' => '峀',
+ '岍' => 'å²',
+ '𡷤' => '𡷤',
+ '嵃' => '嵃',
+ '𡷦' => '𡷦',
+ '嵮' => '嵮',
+ '嵫' => '嵫',
+ '嵼' => '嵼',
+ 'ð¯¢' => 'å·¡',
+ '巢' => '巢',
+ '㠯' => '㠯',
+ '巽' => '巽',
+ '帨' => '帨',
+ '帽' => '帽',
+ '幩' => '幩',
+ '㡢' => '㡢',
+ '𢆃' => '𢆃',
+ '㡼' => '㡼',
+ '庰' => '庰',
+ '庳' => '庳',
+ 'ð¯¢' => '庶',
+ '廊' => '廊',
+ 'ð¯¢' => '𪎒',
+ 'ð¯¢' => '廾',
+ '𢌱' => '𢌱',
+ '𢌱' => '𢌱',
+ '舁' => 'èˆ',
+ '弢' => '弢',
+ '弢' => '弢',
+ '㣇' => '㣇',
+ '𣊸' => '𣊸',
+ '𦇚' => '𦇚',
+ '形' => '形',
+ '彫' => '彫',
+ '㣣' => '㣣',
+ '徚' => '徚',
+ 'ð¯¢' => 'å¿',
+ '志' => '志',
+ '忹' => '忹',
+ '悁' => 'æ‚',
+ '㤺' => '㤺',
+ '㤜' => '㤜',
+ '悔' => '悔',
+ '𢛔' => '𢛔',
+ '惇' => '惇',
+ '慈' => '慈',
+ '慌' => '慌',
+ '慎' => '慎',
+ '慌' => '慌',
+ '慺' => '慺',
+ '憎' => '憎',
+ '憲' => '憲',
+ 'ð¯¢' => '憤',
+ '憯' => '憯',
+ '懞' => '懞',
+ '懲' => '懲',
+ '懶' => '懶',
+ '成' => 'æˆ',
+ '戛' => '戛',
+ '扝' => 'æ‰',
+ '抱' => '抱',
+ '拔' => '拔',
+ '捐' => 'æ',
+ '𢬌' => '𢬌',
+ '挽' => '挽',
+ '拼' => '拼',
+ '捨' => 'æ¨',
+ '掃' => '掃',
+ '揤' => 'æ¤',
+ '𢯱' => '𢯱',
+ '搢' => 'æ¢',
+ '揅' => 'æ…',
+ 'ð¯£' => '掩',
+ '㨮' => '㨮',
+ '摩' => '摩',
+ '摾' => '摾',
+ '撝' => 'æ’',
+ '摷' => '摷',
+ '㩬' => '㩬',
+ '敏' => 'æ•',
+ '敬' => '敬',
+ '𣀊' => '𣀊',
+ '旣' => '旣',
+ '書' => '書',
+ 'ð¯£' => '晉',
+ '㬙' => '㬙',
+ 'ð¯£' => 'æš‘',
+ 'ð¯£' => '㬈',
+ '㫤' => '㫤',
+ '冒' => '冒',
+ '冕' => '冕',
+ '最' => '最',
+ '暜' => '暜',
+ '肭' => 'è‚',
+ '䏙' => 'ä™',
+ '朗' => '朗',
+ '望' => '望',
+ '朡' => '朡',
+ '杞' => 'æž',
+ '杓' => 'æ“',
+ 'ð¯£' => 'ð£ƒ',
+ '㭉' => 'ã‰',
+ '柺' => '柺',
+ '枅' => '枅',
+ '桒' => '桒',
+ '梅' => '梅',
+ '𣑭' => 'ð£‘',
+ '梎' => '梎',
+ '栟' => 'æ Ÿ',
+ '椔' => '椔',
+ '㮝' => 'ã®',
+ '楂' => '楂',
+ '榣' => '榣',
+ '槪' => '槪',
+ '檨' => '檨',
+ '𣚣' => '𣚣',
+ 'ð¯£' => 'æ«›',
+ '㰘' => '㰘',
+ '次' => '次',
+ '𣢧' => '𣢧',
+ '歔' => 'æ”',
+ '㱎' => '㱎',
+ '歲' => 'æ²',
+ '殟' => '殟',
+ '殺' => '殺',
+ '殻' => '殻',
+ '𣪍' => 'ð£ª',
+ '𡴋' => '𡴋',
+ '𣫺' => '𣫺',
+ '汎' => '汎',
+ '𣲼' => '𣲼',
+ '沿' => '沿',
+ '泍' => 'æ³',
+ '汧' => '汧',
+ '洖' => '洖',
+ '派' => '派',
+ 'ð¯¤' => 'æµ·',
+ '流' => 'æµ',
+ '浩' => '浩',
+ '浸' => '浸',
+ '涅' => '涅',
+ '𣴞' => '𣴞',
+ '洴' => '洴',
+ '港' => '港',
+ '湮' => '湮',
+ '㴳' => '㴳',
+ '滋' => '滋',
+ '滇' => '滇',
+ 'ð¯¤' => '𣻑',
+ '淹' => '淹',
+ 'ð¯¤' => 'æ½®',
+ 'ð¯¤' => '𣽞',
+ '𣾎' => '𣾎',
+ '濆' => '濆',
+ '瀹' => '瀹',
+ '瀞' => '瀞',
+ '瀛' => '瀛',
+ '㶖' => '㶖',
+ '灊' => 'çŠ',
+ '災' => 'ç½',
+ '灷' => 'ç·',
+ '炭' => 'ç‚',
+ '𠔥' => '𠔥',
+ '煅' => '煅',
+ 'ð¯¤' => '𤉣',
+ '熜' => '熜',
+ '𤎫' => '𤎫',
+ '爨' => '爨',
+ '爵' => '爵',
+ '牐' => 'ç‰',
+ '𤘈' => '𤘈',
+ '犀' => '犀',
+ '犕' => '犕',
+ '𤜵' => '𤜵',
+ '𤠔' => '𤠔',
+ '獺' => 'çº',
+ '王' => '王',
+ '㺬' => '㺬',
+ '玥' => '玥',
+ '㺸' => '㺸',
+ 'ð¯¤' => '㺸',
+ '瑇' => '瑇',
+ '瑜' => '瑜',
+ '瑱' => '瑱',
+ '璅' => '璅',
+ '瓊' => '瓊',
+ '㼛' => '㼛',
+ '甤' => '甤',
+ '𤰶' => '𤰶',
+ '甾' => '甾',
+ '𤲒' => '𤲒',
+ '異' => '異',
+ '𢆟' => '𢆟',
+ '瘐' => 'ç˜',
+ '𤾡' => '𤾡',
+ '𤾸' => '𤾸',
+ '𥁄' => 'ð¥„',
+ '㿼' => '㿼',
+ '䀈' => '䀈',
+ '直' => '直',
+ 'ð¯¥' => '𥃳',
+ '𥃲' => '𥃲',
+ '𥄙' => '𥄙',
+ '𥄳' => '𥄳',
+ '眞' => '眞',
+ '真' => '真',
+ '真' => '真',
+ '睊' => 'çŠ',
+ '䀹' => '䀹',
+ '瞋' => '瞋',
+ '䁆' => 'ä†',
+ '䂖' => '䂖',
+ 'ð¯¥' => 'ð¥',
+ '硎' => '硎',
+ 'ð¯¥' => '碌',
+ 'ð¯¥' => '磌',
+ '䃣' => '䃣',
+ '𥘦' => '𥘦',
+ '祖' => '祖',
+ '𥚚' => '𥚚',
+ '𥛅' => '𥛅',
+ '福' => 'ç¦',
+ '秫' => '秫',
+ '䄯' => '䄯',
+ '穀' => '穀',
+ '穊' => '穊',
+ '穏' => 'ç©',
+ '𥥼' => '𥥼',
+ 'ð¯¥' => '𥪧',
+ '𥪧' => '𥪧',
+ '竮' => '竮',
+ '䈂' => '䈂',
+ '𥮫' => '𥮫',
+ '篆' => '篆',
+ '築' => '築',
+ '䈧' => '䈧',
+ '𥲀' => '𥲀',
+ '糒' => '糒',
+ '䊠' => 'äŠ ',
+ '糨' => '糨',
+ '糣' => '糣',
+ '紀' => '紀',
+ '𥾆' => '𥾆',
+ '絣' => '絣',
+ 'ð¯¥' => 'äŒ',
+ '緇' => '緇',
+ '縂' => '縂',
+ '繅' => '繅',
+ '䌴' => '䌴',
+ '𦈨' => '𦈨',
+ '𦉇' => '𦉇',
+ '䍙' => 'ä™',
+ '𦋙' => '𦋙',
+ '罺' => '罺',
+ '𦌾' => '𦌾',
+ '羕' => '羕',
+ '翺' => '翺',
+ '者' => '者',
+ '𦓚' => '𦓚',
+ '𦔣' => '𦔣',
+ '聠' => 'è ',
+ '𦖨' => '𦖨',
+ '聰' => 'è°',
+ '𣍟' => 'ð£Ÿ',
+ 'ð¯¦' => 'ä•',
+ '育' => '育',
+ '脃' => '脃',
+ '䐋' => 'ä‹',
+ '脾' => '脾',
+ '媵' => '媵',
+ '𦞧' => '𦞧',
+ '𦞵' => '𦞵',
+ '𣎓' => '𣎓',
+ '𣎜' => '𣎜',
+ '舁' => 'èˆ',
+ '舄' => '舄',
+ 'ð¯¦' => '辞',
+ '䑫' => '䑫',
+ 'ð¯¦' => '芑',
+ 'ð¯¦' => '芋',
+ '芝' => 'èŠ',
+ '劳' => '劳',
+ '花' => '花',
+ '芳' => '芳',
+ '芽' => '芽',
+ '苦' => '苦',
+ '𦬼' => '𦬼',
+ '若' => '若',
+ '茝' => 'èŒ',
+ '荣' => 'è£',
+ '莭' => 'èŽ',
+ '茣' => '茣',
+ 'ð¯¦' => '莽',
+ '菧' => 'è§',
+ '著' => '著',
+ '荓' => 'è“',
+ '菊' => 'èŠ',
+ '菌' => 'èŒ',
+ '菜' => 'èœ',
+ '𦰶' => '𦰶',
+ '𦵫' => '𦵫',
+ '𦳕' => '𦳕',
+ '䔫' => '䔫',
+ '蓱' => '蓱',
+ '蓳' => '蓳',
+ '蔖' => '蔖',
+ '𧏊' => 'ð§Š',
+ '蕤' => '蕤',
+ 'ð¯¦' => '𦼬',
+ '䕝' => 'ä•',
+ '䕡' => '䕡',
+ '𦾱' => '𦾱',
+ '𧃒' => '𧃒',
+ '䕫' => '䕫',
+ '虐' => 'è™',
+ '虜' => '虜',
+ '虧' => '虧',
+ '虩' => '虩',
+ '蚩' => '蚩',
+ '蚈' => '蚈',
+ '蜎' => '蜎',
+ '蛢' => '蛢',
+ '蝹' => 'è¹',
+ '蜨' => '蜨',
+ '蝫' => 'è«',
+ '螆' => '螆',
+ '䗗' => '䗗',
+ '蟡' => '蟡',
+ 'ð¯§' => 'è ',
+ '䗹' => '䗹',
+ '衠' => 'è¡ ',
+ '衣' => '衣',
+ '𧙧' => '𧙧',
+ '裗' => '裗',
+ '裞' => '裞',
+ '䘵' => '䘵',
+ '裺' => '裺',
+ '㒻' => '㒻',
+ '𧢮' => '𧢮',
+ '𧥦' => '𧥦',
+ 'ð¯§' => 'äš¾',
+ '䛇' => '䛇',
+ 'ð¯§' => 'èª ',
+ 'ð¯§' => 'è«',
+ '變' => '變',
+ '豕' => '豕',
+ '𧲨' => '𧲨',
+ '貫' => '貫',
+ '賁' => 'è³',
+ '贛' => '贛',
+ '起' => '起',
+ '𧼯' => '𧼯',
+ '𠠄' => 'ð „',
+ '跋' => '跋',
+ '趼' => '趼',
+ '跰' => '跰',
+ 'ð¯§' => '𠣞',
+ '軔' => '軔',
+ '輸' => '輸',
+ '𨗒' => '𨗒',
+ '𨗭' => 'ð¨—',
+ '邔' => '邔',
+ '郱' => '郱',
+ '鄑' => '鄑',
+ '𨜮' => '𨜮',
+ '鄛' => '鄛',
+ '鈸' => '鈸',
+ '鋗' => '鋗',
+ '鋘' => '鋘',
+ '鉼' => '鉼',
+ '鏹' => 'é¹',
+ '鐕' => 'é•',
+ 'ð¯§' => '𨯺',
+ '開' => '開',
+ '䦕' => '䦕',
+ '閷' => '閷',
+ '𨵷' => '𨵷',
+ '䧦' => '䧦',
+ '雃' => '雃',
+ '嶲' => '嶲',
+ '霣' => '霣',
+ '𩅅' => '𩅅',
+ '𩈚' => '𩈚',
+ '䩮' => '䩮',
+ '䩶' => '䩶',
+ '韠' => 'éŸ ',
+ '𩐊' => 'ð©Š',
+ '䪲' => '䪲',
+ '𩒖' => '𩒖',
+ '頋' => 'é ‹',
+ '頋' => 'é ‹',
+ '頩' => 'é ©',
+ 'ð¯¨' => 'ð©–¶',
+ '飢' => '飢',
+ '䬳' => '䬳',
+ '餩' => '餩',
+ '馧' => '馧',
+ '駂' => '駂',
+ '駾' => '駾',
+ '䯎' => '䯎',
+ '𩬰' => '𩬰',
+ '鬒' => '鬒',
+ '鱀' => '鱀',
+ '鳽' => '鳽',
+ 'ð¯¨' => '䳎',
+ '䳭' => 'ä³',
+ 'ð¯¨' => '鵧',
+ 'ð¯¨' => '𪃎',
+ '䳸' => '䳸',
+ '𪄅' => '𪄅',
+ '𪈎' => '𪈎',
+ '𪊑' => '𪊑',
+ '麻' => '麻',
+ '䵖' => '䵖',
+ '黹' => '黹',
+ '黾' => '黾',
+ '鼅' => '鼅',
+ '鼏' => 'é¼',
+ '鼖' => '鼖',
+ '鼻' => '鼻',
+ 'ð¯¨' => '𪘀',
+ 'Æ' => 'AE',
+ 'Ã' => 'D',
+ 'Ø' => 'O',
+ 'Þ' => 'TH',
+ 'ß' => 'ss',
+ 'æ' => 'ae',
+ 'ð' => 'd',
+ 'ø' => 'o',
+ 'þ' => 'th',
+ 'Ä' => 'D',
+ 'Ä‘' => 'd',
+ 'Ħ' => 'H',
+ 'ħ' => 'h',
+ 'ı' => 'i',
+ 'ĸ' => 'q',
+ 'Å' => 'L',
+ 'Å‚' => 'l',
+ 'ÅŠ' => 'N',
+ 'Å‹' => 'n',
+ 'Å’' => 'OE',
+ 'Å“' => 'oe',
+ 'Ŧ' => 'T',
+ 'ŧ' => 't',
+ 'Æ€' => 'b',
+ 'Æ' => 'B',
+ 'Æ‚' => 'B',
+ 'ƃ' => 'b',
+ 'Ƈ' => 'C',
+ 'ƈ' => 'c',
+ 'Ɖ' => 'D',
+ 'ÆŠ' => 'D',
+ 'Æ‹' => 'D',
+ 'ƌ' => 'd',
+ 'Æ' => 'E',
+ 'Æ‘' => 'F',
+ 'Æ’' => 'f',
+ 'Æ“' => 'G',
+ 'Æ•' => 'hv',
+ 'Æ–' => 'I',
+ 'Æ—' => 'I',
+ 'Ƙ' => 'K',
+ 'Æ™' => 'k',
+ 'Æš' => 'l',
+ 'Æ' => 'N',
+ 'Æž' => 'n',
+ 'Æ¢' => 'OI',
+ 'Æ£' => 'oi',
+ 'Ƥ' => 'P',
+ 'Æ¥' => 'p',
+ 'Æ«' => 't',
+ 'Ƭ' => 'T',
+ 'Æ' => 't',
+ 'Æ®' => 'T',
+ 'Ʋ' => 'V',
+ 'Ƴ' => 'Y',
+ 'Æ´' => 'y',
+ 'Ƶ' => 'Z',
+ 'ƶ' => 'z',
+ 'Ǥ' => 'G',
+ 'Ç¥' => 'g',
+ 'È¡' => 'd',
+ 'Ȥ' => 'Z',
+ 'È¥' => 'z',
+ 'È´' => 'l',
+ 'ȵ' => 'n',
+ 'ȶ' => 't',
+ 'È·' => 'j',
+ 'ȸ' => 'db',
+ 'ȹ' => 'qp',
+ 'Ⱥ' => 'A',
+ 'È»' => 'C',
+ 'ȼ' => 'c',
+ 'Ƚ' => 'L',
+ 'Ⱦ' => 'T',
+ 'È¿' => 's',
+ 'É€' => 'z',
+ 'Ƀ' => 'B',
+ 'É„' => 'U',
+ 'Ɇ' => 'E',
+ 'ɇ' => 'e',
+ 'Ɉ' => 'J',
+ 'ɉ' => 'j',
+ 'Ɍ' => 'R',
+ 'É' => 'r',
+ 'ÉŽ' => 'Y',
+ 'É' => 'y',
+ 'É“' => 'b',
+ 'É•' => 'c',
+ 'É–' => 'd',
+ 'É—' => 'd',
+ 'É›' => 'e',
+ 'ÉŸ' => 'j',
+ 'É ' => 'g',
+ 'É¡' => 'g',
+ 'É¢' => 'G',
+ 'ɦ' => 'h',
+ 'ɧ' => 'h',
+ 'ɨ' => 'i',
+ 'ɪ' => 'I',
+ 'É«' => 'l',
+ 'ɬ' => 'l',
+ 'É' => 'l',
+ 'ɱ' => 'm',
+ 'ɲ' => 'n',
+ 'ɳ' => 'n',
+ 'É´' => 'N',
+ 'ɶ' => 'OE',
+ 'ɼ' => 'r',
+ 'ɽ' => 'r',
+ 'ɾ' => 'r',
+ 'Ê€' => 'R',
+ 'Ê‚' => 's',
+ 'ʈ' => 't',
+ 'ʉ' => 'u',
+ 'Ê‹' => 'v',
+ 'Ê' => 'Y',
+ 'Ê' => 'z',
+ 'Ê‘' => 'z',
+ 'Ê™' => 'B',
+ 'Ê›' => 'G',
+ 'ʜ' => 'H',
+ 'Ê' => 'j',
+ 'ÊŸ' => 'L',
+ 'Ê ' => 'q',
+ 'Ê£' => 'dz',
+ 'Ê¥' => 'dz',
+ 'ʦ' => 'ts',
+ 'ʪ' => 'ls',
+ 'Ê«' => 'lz',
+ 'á´€' => 'A',
+ 'á´' => 'AE',
+ 'á´ƒ' => 'B',
+ 'á´„' => 'C',
+ 'á´…' => 'D',
+ 'á´†' => 'D',
+ 'á´‡' => 'E',
+ 'á´Š' => 'J',
+ 'á´‹' => 'K',
+ 'ᴌ' => 'L',
+ 'á´' => 'M',
+ 'á´' => 'O',
+ 'á´˜' => 'P',
+ 'á´›' => 'T',
+ 'ᴜ' => 'U',
+ 'á´ ' => 'V',
+ 'á´¡' => 'W',
+ 'á´¢' => 'Z',
+ 'ᵫ' => 'ue',
+ 'ᵬ' => 'b',
+ 'áµ' => 'd',
+ 'áµ®' => 'f',
+ 'ᵯ' => 'm',
+ 'áµ°' => 'n',
+ 'áµ±' => 'p',
+ 'áµ²' => 'r',
+ 'áµ³' => 'r',
+ 'áµ´' => 's',
+ 'áµµ' => 't',
+ 'ᵶ' => 'z',
+ 'ᵺ' => 'th',
+ 'áµ»' => 'I',
+ 'áµ½' => 'p',
+ 'áµ¾' => 'U',
+ 'ᶀ' => 'b',
+ 'á¶' => 'd',
+ 'ᶂ' => 'f',
+ 'ᶃ' => 'g',
+ 'ᶄ' => 'k',
+ 'ᶅ' => 'l',
+ 'ᶆ' => 'm',
+ 'ᶇ' => 'n',
+ 'ᶈ' => 'p',
+ 'ᶉ' => 'r',
+ 'ᶊ' => 's',
+ 'ᶌ' => 'v',
+ 'á¶' => 'x',
+ 'ᶎ' => 'z',
+ 'á¶' => 'a',
+ 'ᶑ' => 'd',
+ 'ᶒ' => 'e',
+ 'ᶓ' => 'e',
+ 'ᶖ' => 'i',
+ 'ᶙ' => 'u',
+ 'ẜ' => 's',
+ 'áº' => 's',
+ 'ẞ' => 'SS',
+ 'Ỻ' => 'LL',
+ 'á»»' => 'll',
+ 'Ỽ' => 'V',
+ 'ỽ' => 'v',
+ 'Ỿ' => 'Y',
+ 'ỿ' => 'y',
+ 'â± ' => 'L',
+ 'ⱡ' => 'l',
+ 'â±¢' => 'L',
+ 'â±£' => 'P',
+ 'Ɽ' => 'R',
+ 'â±¥' => 'a',
+ 'ⱦ' => 't',
+ 'Ⱨ' => 'H',
+ 'ⱨ' => 'h',
+ 'Ⱪ' => 'K',
+ 'ⱪ' => 'k',
+ 'Ⱬ' => 'Z',
+ 'ⱬ' => 'z',
+ 'â±®' => 'M',
+ 'â±±' => 'v',
+ 'â±²' => 'W',
+ 'â±³' => 'w',
+ 'â±´' => 'v',
+ 'ⱸ' => 'e',
+ 'ⱺ' => 'o',
+ 'â±¾' => 'S',
+ 'Ɀ' => 'Z',
+ 'ꜰ' => 'F',
+ 'ꜱ' => 'S',
+ 'Ꜳ' => 'AA',
+ 'ꜳ' => 'aa',
+ 'Ꜵ' => 'AO',
+ 'ꜵ' => 'ao',
+ 'Ꜷ' => 'AU',
+ 'ꜷ' => 'au',
+ 'Ꜹ' => 'AV',
+ 'ꜹ' => 'av',
+ 'Ꜻ' => 'AV',
+ 'ꜻ' => 'av',
+ 'Ꜽ' => 'AY',
+ 'ꜽ' => 'ay',
+ 'ê€' => 'K',
+ 'ê' => 'k',
+ 'ê‚' => 'K',
+ 'êƒ' => 'k',
+ 'ê„' => 'K',
+ 'ê…' => 'k',
+ 'ê†' => 'L',
+ 'ê‡' => 'l',
+ 'êˆ' => 'L',
+ 'ê‰' => 'l',
+ 'êŠ' => 'O',
+ 'ê‹' => 'o',
+ 'êŒ' => 'O',
+ 'ê' => 'o',
+ 'êŽ' => 'OO',
+ 'ê' => 'oo',
+ 'ê' => 'P',
+ 'ê‘' => 'p',
+ 'ê’' => 'P',
+ 'ê“' => 'p',
+ 'ê”' => 'P',
+ 'ê•' => 'p',
+ 'ê–' => 'Q',
+ 'ê—' => 'q',
+ 'ê˜' => 'Q',
+ 'ê™' => 'q',
+ 'êž' => 'V',
+ 'êŸ' => 'v',
+ 'ê ' => 'VY',
+ 'ê¡' => 'vy',
+ 'ê¤' => 'TH',
+ 'ê¥' => 'th',
+ 'ê¦' => 'TH',
+ 'ê§' => 'th',
+ 'ê±' => 'd',
+ 'ê²' => 'l',
+ 'ê³' => 'm',
+ 'ê´' => 'n',
+ 'êµ' => 'r',
+ 'ê¶' => 'R',
+ 'ê·' => 't',
+ 'ê¹' => 'D',
+ 'êº' => 'd',
+ 'ê»' => 'F',
+ 'ê¼' => 'f',
+ 'Ꞇ' => 'T',
+ 'ꞇ' => 't',
+ 'êž' => 'N',
+ 'êž‘' => 'n',
+ 'êž’' => 'C',
+ 'êž“' => 'c',
+ 'êž ' => 'G',
+ 'êž¡' => 'g',
+ 'Ꞣ' => 'K',
+ 'ꞣ' => 'k',
+ 'Ꞥ' => 'N',
+ 'ꞥ' => 'n',
+ 'Ꞧ' => 'R',
+ 'ꞧ' => 'r',
+ 'Ꞩ' => 'S',
+ 'êž©' => 's',
+ 'Ɦ' => 'H',
+ '©' => '(C)',
+ '®' => '(R)',
+ 'â‚ ' => 'CE',
+ 'â‚¢' => 'Cr',
+ 'â‚£' => 'Fr.',
+ '₤' => 'L.',
+ '₧' => 'Pts',
+ '₹' => 'Rs',
+ '₺' => 'TL',
+ 'â„—' => '(P)',
+ '℘' => 'P',
+ 'â„ž' => 'Rx',
+ '〇' => '0',
+ 'Â ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ 'âŸ' => ' ',
+ 'ʹ' => '\'',
+ 'ʺ' => '"',
+ 'Ê»' => '\'',
+ 'ʼ' => '\'',
+ 'ʽ' => '\'',
+ 'ˈ' => '\'',
+ 'Ë‹' => '`',
+ '‘' => '\'',
+ '’' => '\'',
+ '‚' => ',',
+ '‛' => '\'',
+ '“' => '"',
+ 'â€' => '"',
+ '„' => ',,',
+ '‟' => '"',
+ '′' => '\'',
+ 'ã€' => '"',
+ '〞' => '"',
+ '«' => '<<',
+ '»' => '>>',
+ '‹' => '<',
+ '›' => '>',
+ 'Â' => '-',
+ 'â€' => '-',
+ '‑' => '-',
+ '‒' => '-',
+ '–' => '-',
+ '—' => '-',
+ '―' => '-',
+ '︱' => '-',
+ '︲' => '-',
+ '¡' => '!',
+ '¿' => '?',
+ 'Ë‚' => '<',
+ '˃' => '>',
+ 'Ë„' => '^',
+ 'ˆ' => '^',
+ 'Ë' => ':',
+ '˜' => '~',
+ '‖' => '||',
+ 'â„' => '/',
+ 'â…' => '[',
+ 'â†' => ']',
+ 'âŽ' => '*',
+ 'ã€' => ',',
+ '。' => '.',
+ '〈' => '<',
+ '〉' => '>',
+ '《' => '<<',
+ '》' => '>>',
+ '〔' => '[',
+ '〕' => ']',
+ '〘' => '[',
+ '〙' => ']',
+ '〚' => '[',
+ '〛' => ']',
+ 'ï¸' => ',',
+ '︑' => ',',
+ '︒' => '.',
+ '︓' => ':',
+ '︔' => ';',
+ '︕' => '!',
+ '︖' => '?',
+ '︙' => '...',
+ '︰' => '..',
+ '︵' => '(',
+ '︶' => ')',
+ '︷' => '{',
+ '︸' => '}',
+ '︹' => '[',
+ '︺' => ']',
+ '︽' => '<<',
+ '︾' => '>>',
+ '︿' => '<',
+ 'ï¹€' => '>',
+ '﹇' => '[',
+ '﹈' => ']',
+ '±' => '+/-',
+ '×' => '*',
+ '÷' => '/',
+ 'Ë–' => '+',
+ 'Ë—' => '-',
+ '−' => '-',
+ '∕' => '/',
+ '∖' => '\\',
+ '∣' => '|',
+ '∥' => '||',
+ '≪' => '<<',
+ '≫' => '>>',
+ '⦅' => '((',
+ '⦆' => '))',
+);
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/bootstrap.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/bootstrap.php
new file mode 100644
index 00000000..91fdba0d
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-iconv/bootstrap.php
@@ -0,0 +1,88 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Iconv as p;
+
+if (extension_loaded('iconv')) {
+ return;
+}
+
+if (\PHP_VERSION_ID >= 80000) {
+ return require __DIR__.'/bootstrap80.php';
+}
+
+if (!defined('ICONV_IMPL')) {
+ define('ICONV_IMPL', 'Symfony');
+}
+if (!defined('ICONV_VERSION')) {
+ define('ICONV_VERSION', '1.0');
+}
+if (!defined('ICONV_MIME_DECODE_STRICT')) {
+ define('ICONV_MIME_DECODE_STRICT', 1);
+}
+if (!defined('ICONV_MIME_DECODE_CONTINUE_ON_ERROR')) {
+ define('ICONV_MIME_DECODE_CONTINUE_ON_ERROR', 2);
+}
+
+if (!function_exists('iconv')) {
+ function iconv($from_encoding, $to_encoding, $string) { return p\Iconv::iconv($from_encoding, $to_encoding, $string); }
+}
+if (!function_exists('iconv_get_encoding')) {
+ function iconv_get_encoding($type = 'all') { return p\Iconv::iconv_get_encoding($type); }
+}
+if (!function_exists('iconv_set_encoding')) {
+ function iconv_set_encoding($type, $encoding) { return p\Iconv::iconv_set_encoding($type, $encoding); }
+}
+if (!function_exists('iconv_mime_encode')) {
+ function iconv_mime_encode($field_name, $field_value, $options = []) { return p\Iconv::iconv_mime_encode($field_name, $field_value, $options); }
+}
+if (!function_exists('iconv_mime_decode_headers')) {
+ function iconv_mime_decode_headers($headers, $mode = 0, $encoding = null) { return p\Iconv::iconv_mime_decode_headers($headers, $mode, $encoding); }
+}
+
+if (extension_loaded('mbstring')) {
+ if (!function_exists('iconv_strlen')) {
+ function iconv_strlen($string, $encoding = null) { null === $encoding && $encoding = p\Iconv::$internalEncoding; return mb_strlen($string, $encoding); }
+ }
+ if (!function_exists('iconv_strpos')) {
+ function iconv_strpos($haystack, $needle, $offset = 0, $encoding = null) { null === $encoding && $encoding = p\Iconv::$internalEncoding; return mb_strpos($haystack, $needle, $offset, $encoding); }
+ }
+ if (!function_exists('iconv_strrpos')) {
+ function iconv_strrpos($haystack, $needle, $encoding = null) { null === $encoding && $encoding = p\Iconv::$internalEncoding; return mb_strrpos($haystack, $needle, 0, $encoding); }
+ }
+ if (!function_exists('iconv_substr')) {
+ function iconv_substr($string, $offset, $length = 2147483647, $encoding = null) { null === $encoding && $encoding = p\Iconv::$internalEncoding; return mb_substr($string, $offset, $length, $encoding); }
+ }
+ if (!function_exists('iconv_mime_decode')) {
+ function iconv_mime_decode($string, $mode = 0, $encoding = null) { null === $encoding && $encoding = p\Iconv::$internalEncoding; return mb_decode_mimeheader($string, $mode, $encoding); }
+ }
+} else {
+ if (!function_exists('iconv_strlen')) {
+ if (extension_loaded('xml')) {
+ function iconv_strlen($string, $encoding = null) { return p\Iconv::strlen1($string, $encoding); }
+ } else {
+ function iconv_strlen($string, $encoding = null) { return p\Iconv::strlen2($string, $encoding); }
+ }
+ }
+
+ if (!function_exists('iconv_strpos')) {
+ function iconv_strpos($haystack, $needle, $offset = 0, $encoding = null) { return p\Iconv::iconv_strpos($haystack, $needle, $offset, $encoding); }
+ }
+ if (!function_exists('iconv_strrpos')) {
+ function iconv_strrpos($haystack, $needle, $encoding = null) { return p\Iconv::iconv_strrpos($haystack, $needle, $encoding); }
+ }
+ if (!function_exists('iconv_substr')) {
+ function iconv_substr($string, $offset, $length = 2147483647, $encoding = null) { return p\Iconv::iconv_substr($string, $offset, $length, $encoding); }
+ }
+ if (!function_exists('iconv_mime_decode')) {
+ function iconv_mime_decode($string, $mode = 0, $encoding = null) { return p\Iconv::iconv_mime_decode($string, $mode, $encoding); }
+ }
+}
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/bootstrap80.php b/dev/plugins/email/vendor/symfony/polyfill-iconv/bootstrap80.php
new file mode 100644
index 00000000..cf895574
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-iconv/bootstrap80.php
@@ -0,0 +1,80 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Iconv as p;
+
+if (!defined('ICONV_IMPL')) {
+ define('ICONV_IMPL', 'Symfony');
+}
+if (!defined('ICONV_VERSION')) {
+ define('ICONV_VERSION', '1.0');
+}
+if (!defined('ICONV_MIME_DECODE_STRICT')) {
+ define('ICONV_MIME_DECODE_STRICT', 1);
+}
+if (!defined('ICONV_MIME_DECODE_CONTINUE_ON_ERROR')) {
+ define('ICONV_MIME_DECODE_CONTINUE_ON_ERROR', 2);
+}
+
+if (!function_exists('iconv')) {
+ function iconv(?string $from_encoding, ?string $to_encoding, ?string $string): string|false { return p\Iconv::iconv((string) $from_encoding, (string) $to_encoding, (string) $string); }
+}
+if (!function_exists('iconv_get_encoding')) {
+ function iconv_get_encoding(?string $type = 'all'): array|string|false { return p\Iconv::iconv_get_encoding((string) $type); }
+}
+if (!function_exists('iconv_set_encoding')) {
+ function iconv_set_encoding(?string $type, ?string $encoding): bool { return p\Iconv::iconv_set_encoding((string) $type, (string) $encoding); }
+}
+if (!function_exists('iconv_mime_encode')) {
+ function iconv_mime_encode(?string $field_name, ?string $field_value, ?array $options = []): string|false { return p\Iconv::iconv_mime_encode((string) $field_name, (string) $field_value, (array) $options); }
+}
+if (!function_exists('iconv_mime_decode_headers')) {
+ function iconv_mime_decode_headers(?string $headers, ?int $mode = 0, ?string $encoding = null): array|false { return p\Iconv::iconv_mime_decode_headers((string) $headers, (int) $mode, $encoding); }
+}
+
+if (extension_loaded('mbstring')) {
+ if (!function_exists('iconv_strlen')) {
+ function iconv_strlen(?string $string, ?string $encoding = null): int|false { null === $encoding && $encoding = p\Iconv::$internalEncoding; return mb_strlen((string) $string, $encoding); }
+ }
+ if (!function_exists('iconv_strpos')) {
+ function iconv_strpos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { null === $encoding && $encoding = p\Iconv::$internalEncoding; return mb_strpos((string) $haystack, (string) $needle, (int) $offset, $encoding); }
+ }
+ if (!function_exists('iconv_strrpos')) {
+ function iconv_strrpos(?string $haystack, ?string $needle, ?string $encoding = null): int|false { null === $encoding && $encoding = p\Iconv::$internalEncoding; return mb_strrpos((string) $haystack, (string) $needle, 0, $encoding); }
+ }
+ if (!function_exists('iconv_substr')) {
+ function iconv_substr(?string $string, ?int $offset, ?int $length = null, ?string $encoding = null): string|false { null === $encoding && $encoding = p\Iconv::$internalEncoding; return mb_substr((string) $string, (int) $offset, $length, $encoding); }
+ }
+ if (!function_exists('iconv_mime_decode')) {
+ function iconv_mime_decode($string, $mode = 0, $encoding = null) { null === $encoding && $encoding = p\Iconv::$internalEncoding; return mb_decode_mimeheader($string, $mode, $encoding); }
+ }
+} else {
+ if (!function_exists('iconv_strlen')) {
+ if (extension_loaded('xml')) {
+ function iconv_strlen(?string $string, ?string $encoding = null): int|false { return p\Iconv::strlen1((string) $string, $encoding); }
+ } else {
+ function iconv_strlen(?string $string, ?string $encoding = null): int|false { return p\Iconv::strlen2((string) $string, $encoding); }
+ }
+ }
+
+ if (!function_exists('iconv_strpos')) {
+ function iconv_strpos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Iconv::iconv_strpos((string) $haystack, (string) $needle, (int) $offset, $encoding); }
+ }
+ if (!function_exists('iconv_strrpos')) {
+ function iconv_strrpos(?string $haystack, ?string $needle, ?string $encoding = null): int|false { return p\Iconv::iconv_strrpos((string) $haystack, (string) $needle, $encoding); }
+ }
+ if (!function_exists('iconv_substr')) {
+ function iconv_substr(?string $string, ?int $offset, ?int $length = null, ?string $encoding = null): string|false { return p\Iconv::iconv_substr((string) $string, (string) $offset, $length, $encoding); }
+ }
+ if (!function_exists('iconv_mime_decode')) {
+ function iconv_mime_decode(?string $string, ?int $mode = 0, ?string $encoding = null): string|false { return p\Iconv::iconv_mime_decode((string) $string, (int) $mode, $encoding); }
+ }
+}
diff --git a/dev/plugins/email/vendor/symfony/polyfill-iconv/composer.json b/dev/plugins/email/vendor/symfony/polyfill-iconv/composer.json
new file mode 100644
index 00000000..17483e00
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-iconv/composer.json
@@ -0,0 +1,38 @@
+{
+ "name": "symfony/polyfill-iconv",
+ "type": "library",
+ "description": "Symfony polyfill for the Iconv extension",
+ "keywords": ["polyfill", "shim", "compatibility", "portable", "iconv"],
+ "homepage": "https://symfony.com",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "require": {
+ "php": ">=7.1"
+ },
+ "autoload": {
+ "psr-4": { "Symfony\\Polyfill\\Iconv\\": "" },
+ "files": [ "bootstrap.php" ]
+ },
+ "suggest": {
+ "ext-iconv": "For best performance"
+ },
+ "minimum-stability": "dev",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ }
+}
diff --git a/dev/plugins/email/vendor/symfony/polyfill-intl-idn/Idn.php b/dev/plugins/email/vendor/symfony/polyfill-intl-idn/Idn.php
new file mode 100644
index 00000000..fee3026d
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-intl-idn/Idn.php
@@ -0,0 +1,925 @@
+ and Trevor Rowbotham
+ *
+ * @internal
+ */
+class Normalizer
+{
+ public const FORM_D = \Normalizer::FORM_D;
+ public const FORM_KD = \Normalizer::FORM_KD;
+ public const FORM_C = \Normalizer::FORM_C;
+ public const FORM_KC = \Normalizer::FORM_KC;
+ public const NFD = \Normalizer::NFD;
+ public const NFKD = \Normalizer::NFKD;
+ public const NFC = \Normalizer::NFC;
+ public const NFKC = \Normalizer::NFKC;
+
+ private static $C;
+ private static $D;
+ private static $KD;
+ private static $cC;
+ private static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4];
+ private static $ASCII = "\x20\x65\x69\x61\x73\x6E\x74\x72\x6F\x6C\x75\x64\x5D\x5B\x63\x6D\x70\x27\x0A\x67\x7C\x68\x76\x2E\x66\x62\x2C\x3A\x3D\x2D\x71\x31\x30\x43\x32\x2A\x79\x78\x29\x28\x4C\x39\x41\x53\x2F\x50\x22\x45\x6A\x4D\x49\x6B\x33\x3E\x35\x54\x3C\x44\x34\x7D\x42\x7B\x38\x46\x77\x52\x36\x37\x55\x47\x4E\x3B\x4A\x7A\x56\x23\x48\x4F\x57\x5F\x26\x21\x4B\x3F\x58\x51\x25\x59\x5C\x09\x5A\x2B\x7E\x5E\x24\x40\x60\x7F\x00\x01\x02\x03\x04\x05\x06\x07\x08\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F";
+
+ public static function isNormalized(string $s, int $form = self::FORM_C)
+ {
+ if (!\in_array($form, [self::NFD, self::NFKD, self::NFC, self::NFKC])) {
+ return false;
+ }
+ if (!isset($s[strspn($s, self::$ASCII)])) {
+ return true;
+ }
+ if (self::NFC == $form && preg_match('//u', $s) && !preg_match('/[^\x00-\x{2FF}]/u', $s)) {
+ return true;
+ }
+
+ return self::normalize($s, $form) === $s;
+ }
+
+ public static function normalize(string $s, int $form = self::FORM_C)
+ {
+ if (!preg_match('//u', $s)) {
+ return false;
+ }
+
+ switch ($form) {
+ case self::NFC: $C = true; $K = false; break;
+ case self::NFD: $C = false; $K = false; break;
+ case self::NFKC: $C = true; $K = true; break;
+ case self::NFKD: $C = false; $K = true; break;
+ default:
+ if (\defined('Normalizer::NONE') && \Normalizer::NONE == $form) {
+ return $s;
+ }
+
+ if (80000 > \PHP_VERSION_ID) {
+ return false;
+ }
+
+ throw new \ValueError('normalizer_normalize(): Argument #2 ($form) must be a a valid normalization form');
+ }
+
+ if ('' === $s) {
+ return '';
+ }
+
+ if ($K && null === self::$KD) {
+ self::$KD = self::getData('compatibilityDecomposition');
+ }
+
+ if (null === self::$D) {
+ self::$D = self::getData('canonicalDecomposition');
+ self::$cC = self::getData('combiningClass');
+ }
+
+ if (null !== $mbEncoding = (2 /* MB_OVERLOAD_STRING */ & (int) ini_get('mbstring.func_overload')) ? mb_internal_encoding() : null) {
+ mb_internal_encoding('8bit');
+ }
+
+ $r = self::decompose($s, $K);
+
+ if ($C) {
+ if (null === self::$C) {
+ self::$C = self::getData('canonicalComposition');
+ }
+
+ $r = self::recompose($r);
+ }
+ if (null !== $mbEncoding) {
+ mb_internal_encoding($mbEncoding);
+ }
+
+ return $r;
+ }
+
+ private static function recompose($s)
+ {
+ $ASCII = self::$ASCII;
+ $compMap = self::$C;
+ $combClass = self::$cC;
+ $ulenMask = self::$ulenMask;
+
+ $result = $tail = '';
+
+ $i = $s[0] < "\x80" ? 1 : $ulenMask[$s[0] & "\xF0"];
+ $len = \strlen($s);
+
+ $lastUchr = substr($s, 0, $i);
+ $lastUcls = isset($combClass[$lastUchr]) ? 256 : 0;
+
+ while ($i < $len) {
+ if ($s[$i] < "\x80") {
+ // ASCII chars
+
+ if ($tail) {
+ $lastUchr .= $tail;
+ $tail = '';
+ }
+
+ if ($j = strspn($s, $ASCII, $i + 1)) {
+ $lastUchr .= substr($s, $i, $j);
+ $i += $j;
+ }
+
+ $result .= $lastUchr;
+ $lastUchr = $s[$i];
+ $lastUcls = 0;
+ ++$i;
+ continue;
+ }
+
+ $ulen = $ulenMask[$s[$i] & "\xF0"];
+ $uchr = substr($s, $i, $ulen);
+
+ if ($lastUchr < "\xE1\x84\x80" || "\xE1\x84\x92" < $lastUchr
+ || $uchr < "\xE1\x85\xA1" || "\xE1\x85\xB5" < $uchr
+ || $lastUcls) {
+ // Table lookup and combining chars composition
+
+ $ucls = $combClass[$uchr] ?? 0;
+
+ if (isset($compMap[$lastUchr.$uchr]) && (!$lastUcls || $lastUcls < $ucls)) {
+ $lastUchr = $compMap[$lastUchr.$uchr];
+ } elseif ($lastUcls = $ucls) {
+ $tail .= $uchr;
+ } else {
+ if ($tail) {
+ $lastUchr .= $tail;
+ $tail = '';
+ }
+
+ $result .= $lastUchr;
+ $lastUchr = $uchr;
+ }
+ } else {
+ // Hangul chars
+
+ $L = \ord($lastUchr[2]) - 0x80;
+ $V = \ord($uchr[2]) - 0xA1;
+ $T = 0;
+
+ $uchr = substr($s, $i + $ulen, 3);
+
+ if ("\xE1\x86\xA7" <= $uchr && $uchr <= "\xE1\x87\x82") {
+ $T = \ord($uchr[2]) - 0xA7;
+ 0 > $T && $T += 0x40;
+ $ulen += 3;
+ }
+
+ $L = 0xAC00 + ($L * 21 + $V) * 28 + $T;
+ $lastUchr = \chr(0xE0 | $L >> 12).\chr(0x80 | $L >> 6 & 0x3F).\chr(0x80 | $L & 0x3F);
+ }
+
+ $i += $ulen;
+ }
+
+ return $result.$lastUchr.$tail;
+ }
+
+ private static function decompose($s, $c)
+ {
+ $result = '';
+
+ $ASCII = self::$ASCII;
+ $decompMap = self::$D;
+ $combClass = self::$cC;
+ $ulenMask = self::$ulenMask;
+ if ($c) {
+ $compatMap = self::$KD;
+ }
+
+ $c = [];
+ $i = 0;
+ $len = \strlen($s);
+
+ while ($i < $len) {
+ if ($s[$i] < "\x80") {
+ // ASCII chars
+
+ if ($c) {
+ ksort($c);
+ $result .= implode('', $c);
+ $c = [];
+ }
+
+ $j = 1 + strspn($s, $ASCII, $i + 1);
+ $result .= substr($s, $i, $j);
+ $i += $j;
+ continue;
+ }
+
+ $ulen = $ulenMask[$s[$i] & "\xF0"];
+ $uchr = substr($s, $i, $ulen);
+ $i += $ulen;
+
+ if ($uchr < "\xEA\xB0\x80" || "\xED\x9E\xA3" < $uchr) {
+ // Table lookup
+
+ if ($uchr !== $j = $compatMap[$uchr] ?? ($decompMap[$uchr] ?? $uchr)) {
+ $uchr = $j;
+
+ $j = \strlen($uchr);
+ $ulen = $uchr[0] < "\x80" ? 1 : $ulenMask[$uchr[0] & "\xF0"];
+
+ if ($ulen != $j) {
+ // Put trailing chars in $s
+
+ $j -= $ulen;
+ $i -= $j;
+
+ if (0 > $i) {
+ $s = str_repeat(' ', -$i).$s;
+ $len -= $i;
+ $i = 0;
+ }
+
+ while ($j--) {
+ $s[$i + $j] = $uchr[$ulen + $j];
+ }
+
+ $uchr = substr($uchr, 0, $ulen);
+ }
+ }
+ if (isset($combClass[$uchr])) {
+ // Combining chars, for sorting
+
+ if (!isset($c[$combClass[$uchr]])) {
+ $c[$combClass[$uchr]] = '';
+ }
+ $c[$combClass[$uchr]] .= $uchr;
+ continue;
+ }
+ } else {
+ // Hangul chars
+
+ $uchr = unpack('C*', $uchr);
+ $j = (($uchr[1] - 224) << 12) + (($uchr[2] - 128) << 6) + $uchr[3] - 0xAC80;
+
+ $uchr = "\xE1\x84".\chr(0x80 + (int) ($j / 588))
+ ."\xE1\x85".\chr(0xA1 + (int) (($j % 588) / 28));
+
+ if ($j %= 28) {
+ $uchr .= $j < 25
+ ? ("\xE1\x86".\chr(0xA7 + $j))
+ : ("\xE1\x87".\chr(0x67 + $j));
+ }
+ }
+ if ($c) {
+ ksort($c);
+ $result .= implode('', $c);
+ $c = [];
+ }
+
+ $result .= $uchr;
+ }
+
+ if ($c) {
+ ksort($c);
+ $result .= implode('', $c);
+ }
+
+ return $result;
+ }
+
+ private static function getData($file)
+ {
+ if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) {
+ return require $file;
+ }
+
+ return false;
+ }
+}
diff --git a/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/README.md b/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/README.md
new file mode 100644
index 00000000..15060c5f
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/README.md
@@ -0,0 +1,14 @@
+Symfony Polyfill / Intl: Normalizer
+===================================
+
+This component provides a fallback implementation for the
+[`Normalizer`](https://php.net/Normalizer) class provided
+by the [Intl](https://php.net/intl) extension.
+
+More information can be found in the
+[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md).
+
+License
+=======
+
+This library is released under the [MIT license](LICENSE).
diff --git a/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php b/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php
new file mode 100644
index 00000000..0fdfc890
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php
@@ -0,0 +1,17 @@
+ 'À',
+ 'AÌ' => 'Ã',
+ 'Â' => 'Â',
+ 'Ã' => 'Ã',
+ 'Ä' => 'Ä',
+ 'AÌŠ' => 'Ã…',
+ 'Ç' => 'Ç',
+ 'È' => 'È',
+ 'EÌ' => 'É',
+ 'Ê' => 'Ê',
+ 'Ë' => 'Ë',
+ 'Ì' => 'Ì',
+ 'IÌ' => 'Ã',
+ 'IÌ‚' => 'ÃŽ',
+ 'Ï' => 'Ã',
+ 'Ñ' => 'Ñ',
+ 'OÌ€' => 'Ã’',
+ 'OÌ' => 'Ó',
+ 'Ô' => 'Ô',
+ 'Õ' => 'Õ',
+ 'Ö' => 'Ö',
+ 'Ù' => 'Ù',
+ 'UÌ' => 'Ú',
+ 'Û' => 'Û',
+ 'Ü' => 'Ü',
+ 'YÌ' => 'Ã',
+ 'à' => 'à ',
+ 'aÌ' => 'á',
+ 'â' => 'â',
+ 'ã' => 'ã',
+ 'ä' => 'ä',
+ 'aÌŠ' => 'Ã¥',
+ 'ç' => 'ç',
+ 'è' => 'è',
+ 'eÌ' => 'é',
+ 'ê' => 'ê',
+ 'ë' => 'ë',
+ 'ì' => 'ì',
+ 'iÌ' => 'Ã',
+ 'î' => 'î',
+ 'ï' => 'ï',
+ 'ñ' => 'ñ',
+ 'ò' => 'ò',
+ 'oÌ' => 'ó',
+ 'ô' => 'ô',
+ 'õ' => 'õ',
+ 'ö' => 'ö',
+ 'ù' => 'ù',
+ 'uÌ' => 'ú',
+ 'û' => 'û',
+ 'ü' => 'ü',
+ 'yÌ' => 'ý',
+ 'ÿ' => 'ÿ',
+ 'AÌ„' => 'Ä€',
+ 'aÌ„' => 'Ä',
+ 'Ă' => 'Ă',
+ 'ă' => 'ă',
+ 'Ą' => 'Ą',
+ 'ą' => 'ą',
+ 'CÌ' => 'Ć',
+ 'cÌ' => 'ć',
+ 'Ĉ' => 'Ĉ',
+ 'ĉ' => 'ĉ',
+ 'Ċ' => 'Ċ',
+ 'ċ' => 'ċ',
+ 'Č' => 'Č',
+ 'cÌŒ' => 'Ä',
+ 'Ď' => 'Ď',
+ 'dÌŒ' => 'Ä',
+ 'EÌ„' => 'Ä’',
+ 'ē' => 'ē',
+ 'Ĕ' => 'Ĕ',
+ 'ĕ' => 'ĕ',
+ 'Ė' => 'Ė',
+ 'ė' => 'ė',
+ 'Ę' => 'Ę',
+ 'ę' => 'ę',
+ 'Ě' => 'Ě',
+ 'ě' => 'ě',
+ 'Ĝ' => 'Ĝ',
+ 'gÌ‚' => 'Ä',
+ 'Ğ' => 'Ğ',
+ 'ğ' => 'ğ',
+ 'Ġ' => 'Ä ',
+ 'ġ' => 'ġ',
+ 'Ģ' => 'Ģ',
+ 'ģ' => 'ģ',
+ 'Ĥ' => 'Ĥ',
+ 'ĥ' => 'ĥ',
+ 'Ĩ' => 'Ĩ',
+ 'ĩ' => 'ĩ',
+ 'Ī' => 'Ī',
+ 'ī' => 'ī',
+ 'Ĭ' => 'Ĭ',
+ 'ĭ' => 'Ä',
+ 'Į' => 'Į',
+ 'į' => 'į',
+ 'İ' => 'İ',
+ 'JÌ‚' => 'Ä´',
+ 'ĵ' => 'ĵ',
+ 'Ķ' => 'Ķ',
+ 'ķ' => 'ķ',
+ 'LÌ' => 'Ĺ',
+ 'lÌ' => 'ĺ',
+ 'Ļ' => 'Ļ',
+ 'ļ' => 'ļ',
+ 'Ľ' => 'Ľ',
+ 'ľ' => 'ľ',
+ 'NÌ' => 'Ń',
+ 'nÌ' => 'Å„',
+ 'Ņ' => 'Ņ',
+ 'ņ' => 'ņ',
+ 'Ň' => 'Ň',
+ 'ň' => 'ň',
+ 'Ō' => 'Ō',
+ 'oÌ„' => 'Å',
+ 'Ŏ' => 'Ŏ',
+ 'ŏ' => 'Å',
+ 'OÌ‹' => 'Å',
+ 'ő' => 'ő',
+ 'RÌ' => 'Å”',
+ 'rÌ' => 'Å•',
+ 'Ŗ' => 'Ŗ',
+ 'ŗ' => 'ŗ',
+ 'Ř' => 'Ř',
+ 'ř' => 'ř',
+ 'SÌ' => 'Åš',
+ 'sÌ' => 'Å›',
+ 'Ŝ' => 'Ŝ',
+ 'sÌ‚' => 'Å',
+ 'Ş' => 'Ş',
+ 'ş' => 'ş',
+ 'Š' => 'Š',
+ 'š' => 'š',
+ 'Ţ' => 'Ţ',
+ 'ţ' => 'ţ',
+ 'Ť' => 'Ť',
+ 'ť' => 'ť',
+ 'Ũ' => 'Ũ',
+ 'ũ' => 'ũ',
+ 'Ū' => 'Ū',
+ 'ū' => 'ū',
+ 'Ŭ' => 'Ŭ',
+ 'ŭ' => 'Å',
+ 'UÌŠ' => 'Å®',
+ 'ů' => 'ů',
+ 'UÌ‹' => 'Å°',
+ 'ű' => 'ű',
+ 'Ų' => 'Ų',
+ 'ų' => 'ų',
+ 'WÌ‚' => 'Å´',
+ 'ŵ' => 'ŵ',
+ 'Ŷ' => 'Ŷ',
+ 'ŷ' => 'ŷ',
+ 'Ÿ' => 'Ÿ',
+ 'ZÌ' => 'Ź',
+ 'zÌ' => 'ź',
+ 'Ż' => 'Ż',
+ 'ż' => 'ż',
+ 'Ž' => 'Ž',
+ 'ž' => 'ž',
+ 'OÌ›' => 'Æ ',
+ 'oÌ›' => 'Æ¡',
+ 'Ư' => 'Ư',
+ 'uÌ›' => 'Æ°',
+ 'AÌŒ' => 'Ç',
+ 'ǎ' => 'ǎ',
+ 'IÌŒ' => 'Ç',
+ 'iÌŒ' => 'Ç',
+ 'Ǒ' => 'Ǒ',
+ 'ǒ' => 'ǒ',
+ 'Ǔ' => 'Ǔ',
+ 'ǔ' => 'ǔ',
+ 'Ǖ' => 'Ǖ',
+ 'ǖ' => 'ǖ',
+ 'ÃœÌ' => 'Ç—',
+ 'üÌ' => 'ǘ',
+ 'Ǚ' => 'Ǚ',
+ 'ǚ' => 'ǚ',
+ 'Ǜ' => 'Ǜ',
+ 'ǜ' => 'ǜ',
+ 'Ǟ' => 'Ǟ',
+ 'ǟ' => 'ǟ',
+ 'Ǡ' => 'Ç ',
+ 'ǡ' => 'ǡ',
+ 'Ǣ' => 'Ǣ',
+ 'ǣ' => 'ǣ',
+ 'Ǧ' => 'Ǧ',
+ 'ǧ' => 'ǧ',
+ 'Ǩ' => 'Ǩ',
+ 'ǩ' => 'ǩ',
+ 'Ǫ' => 'Ǫ',
+ 'ǫ' => 'ǫ',
+ 'Ǭ' => 'Ǭ',
+ 'Ç«Ì„' => 'Ç',
+ 'Ǯ' => 'Ǯ',
+ 'ǯ' => 'ǯ',
+ 'ǰ' => 'ǰ',
+ 'GÌ' => 'Ç´',
+ 'gÌ' => 'ǵ',
+ 'Ǹ' => 'Ǹ',
+ 'ǹ' => 'ǹ',
+ 'Ã…Ì' => 'Ǻ',
+ 'Ã¥Ì' => 'Ç»',
+ 'ÆÌ' => 'Ǽ',
+ 'æÌ' => 'ǽ',
+ 'ØÌ' => 'Ǿ',
+ 'øÌ' => 'Ç¿',
+ 'AÌ' => 'È€',
+ 'aÌ' => 'È',
+ 'AÌ‘' => 'È‚',
+ 'ȃ' => 'ȃ',
+ 'EÌ' => 'È„',
+ 'eÌ' => 'È…',
+ 'Ȇ' => 'Ȇ',
+ 'ȇ' => 'ȇ',
+ 'IÌ' => 'Ȉ',
+ 'iÌ' => 'ȉ',
+ 'IÌ‘' => 'ÈŠ',
+ 'ȋ' => 'ȋ',
+ 'OÌ' => 'ÈŒ',
+ 'oÌ' => 'È',
+ 'OÌ‘' => 'ÈŽ',
+ 'oÌ‘' => 'È',
+ 'RÌ' => 'È',
+ 'rÌ' => 'È‘',
+ 'RÌ‘' => 'È’',
+ 'ȓ' => 'ȓ',
+ 'UÌ' => 'È”',
+ 'uÌ' => 'È•',
+ 'UÌ‘' => 'È–',
+ 'ȗ' => 'ȗ',
+ 'Ș' => 'Ș',
+ 'ș' => 'ș',
+ 'Ț' => 'Ț',
+ 'ț' => 'ț',
+ 'Ȟ' => 'Ȟ',
+ 'ȟ' => 'ȟ',
+ 'Ȧ' => 'Ȧ',
+ 'ȧ' => 'ȧ',
+ 'Ȩ' => 'Ȩ',
+ 'ȩ' => 'ȩ',
+ 'Ȫ' => 'Ȫ',
+ 'ȫ' => 'ȫ',
+ 'Ȭ' => 'Ȭ',
+ 'ȭ' => 'È',
+ 'Ȯ' => 'Ȯ',
+ 'ȯ' => 'ȯ',
+ 'Ȱ' => 'Ȱ',
+ 'ȱ' => 'ȱ',
+ 'Ȳ' => 'Ȳ',
+ 'ȳ' => 'ȳ',
+ '¨Ì' => 'Î…',
+ 'ΑÌ' => 'Ά',
+ 'ΕÌ' => 'Έ',
+ 'ΗÌ' => 'Ή',
+ 'ΙÌ' => 'Ί',
+ 'ΟÌ' => 'ÎŒ',
+ 'Î¥Ì' => 'ÎŽ',
+ 'ΩÌ' => 'Î',
+ 'ÏŠÌ' => 'Î',
+ 'Ϊ' => 'Ϊ',
+ 'Ϋ' => 'Ϋ',
+ 'αÌ' => 'ά',
+ 'εÌ' => 'Î',
+ 'ηÌ' => 'ή',
+ 'ιÌ' => 'ί',
+ 'Ï‹Ì' => 'ΰ',
+ 'ϊ' => 'ϊ',
+ 'ϋ' => 'ϋ',
+ 'οÌ' => 'ÏŒ',
+ 'Ï…Ì' => 'Ï',
+ 'ωÌ' => 'ÏŽ',
+ 'Ï’Ì' => 'Ï“',
+ 'ϔ' => 'ϔ',
+ 'Ѐ' => 'Ѐ',
+ 'Ё' => 'Ð',
+ 'ГÌ' => 'Ѓ',
+ 'Ї' => 'Ї',
+ 'КÌ' => 'ÐŒ',
+ 'Ѝ' => 'Ð',
+ 'Ў' => 'Ў',
+ 'Й' => 'Й',
+ 'й' => 'й',
+ 'ѐ' => 'Ñ',
+ 'ё' => 'ё',
+ 'гÌ' => 'Ñ“',
+ 'ї' => 'ї',
+ 'кÌ' => 'Ñœ',
+ 'ѝ' => 'Ñ',
+ 'ў' => 'ў',
+ 'Ñ´Ì' => 'Ѷ',
+ 'ѵÌ' => 'Ñ·',
+ 'Ӂ' => 'Ó',
+ 'ӂ' => 'ӂ',
+ 'Ð̆' => 'Ó',
+ 'ӑ' => 'ӑ',
+ 'Ð̈' => 'Ó’',
+ 'ӓ' => 'ӓ',
+ 'Ӗ' => 'Ӗ',
+ 'ӗ' => 'ӗ',
+ 'Ӛ' => 'Ӛ',
+ 'ӛ' => 'ӛ',
+ 'Ӝ' => 'Ӝ',
+ 'ӝ' => 'Ó',
+ 'Ӟ' => 'Ӟ',
+ 'ӟ' => 'ӟ',
+ 'Ӣ' => 'Ӣ',
+ 'ӣ' => 'ӣ',
+ 'Ӥ' => 'Ӥ',
+ 'ӥ' => 'ӥ',
+ 'Ӧ' => 'Ӧ',
+ 'ӧ' => 'ӧ',
+ 'Ӫ' => 'Ӫ',
+ 'ӫ' => 'ӫ',
+ 'Ð̈' => 'Ó¬',
+ 'Ñ̈' => 'Ó',
+ 'Ӯ' => 'Ӯ',
+ 'ӯ' => 'ӯ',
+ 'Ӱ' => 'Ӱ',
+ 'ӱ' => 'ӱ',
+ 'Ӳ' => 'Ӳ',
+ 'ӳ' => 'ӳ',
+ 'Ӵ' => 'Ӵ',
+ 'ӵ' => 'ӵ',
+ 'Ӹ' => 'Ӹ',
+ 'ӹ' => 'ӹ',
+ 'آ' => 'آ',
+ 'أ' => 'أ',
+ 'ؤ' => 'ؤ',
+ 'إ' => 'إ',
+ 'ئ' => 'ئ',
+ 'Û•Ù”' => 'Û€',
+ 'ÛÙ”' => 'Û‚',
+ 'Û’Ù”' => 'Û“',
+ 'ऩ' => 'ऩ',
+ 'ऱ' => 'ऱ',
+ 'ऴ' => 'ऴ',
+ 'ো' => 'ো',
+ 'ৌ' => 'ৌ',
+ 'à‡à–' => 'àˆ',
+ 'à‡à¬¾' => 'à‹',
+ 'à‡à—' => 'àŒ',
+ 'ஔ' => 'ஔ',
+ 'ொ' => 'ொ',
+ 'ோ' => 'ோ',
+ 'ௌ' => 'ௌ',
+ 'ై' => 'ై',
+ 'ೀ' => 'ೀ',
+ 'ೇ' => 'ೇ',
+ 'ೈ' => 'ೈ',
+ 'ೊ' => 'ೊ',
+ 'ೋ' => 'ೋ',
+ 'ൊ' => 'ൊ',
+ 'ോ' => 'ോ',
+ 'ൌ' => 'ൌ',
+ 'ේ' => 'ේ',
+ 'à·™à·' => 'à·œ',
+ 'ෝ' => 'à·',
+ 'ෞ' => 'ෞ',
+ 'ဦ' => 'ဦ',
+ 'ᬆ' => 'ᬆ',
+ 'ᬈ' => 'ᬈ',
+ 'ᬊ' => 'ᬊ',
+ 'ᬌ' => 'ᬌ',
+ 'á¬á¬µ' => 'ᬎ',
+ 'ᬒ' => 'ᬒ',
+ 'ᬻ' => 'ᬻ',
+ 'ᬽ' => 'ᬽ',
+ 'ᭀ' => 'á€',
+ 'ᭁ' => 'á',
+ 'á‚ᬵ' => 'áƒ',
+ 'Ḁ' => 'Ḁ',
+ 'aÌ¥' => 'á¸',
+ 'Ḃ' => 'Ḃ',
+ 'ḃ' => 'ḃ',
+ 'Ḅ' => 'Ḅ',
+ 'ḅ' => 'ḅ',
+ 'Ḇ' => 'Ḇ',
+ 'ḇ' => 'ḇ',
+ 'ÇÌ' => 'Ḉ',
+ 'çÌ' => 'ḉ',
+ 'Ḋ' => 'Ḋ',
+ 'ḋ' => 'ḋ',
+ 'Ḍ' => 'Ḍ',
+ 'dÌ£' => 'á¸',
+ 'Ḏ' => 'Ḏ',
+ 'ḏ' => 'á¸',
+ 'Ḑ' => 'á¸',
+ 'ḑ' => 'ḑ',
+ 'DÌ' => 'Ḓ',
+ 'dÌ' => 'ḓ',
+ 'Ḕ' => 'Ḕ',
+ 'ḕ' => 'ḕ',
+ 'Ä’Ì' => 'Ḗ',
+ 'Ä“Ì' => 'ḗ',
+ 'EÌ' => 'Ḙ',
+ 'eÌ' => 'ḙ',
+ 'Ḛ' => 'Ḛ',
+ 'ḛ' => 'ḛ',
+ 'Ḝ' => 'Ḝ',
+ 'ḝ' => 'á¸',
+ 'Ḟ' => 'Ḟ',
+ 'ḟ' => 'ḟ',
+ 'Ḡ' => 'Ḡ',
+ 'ḡ' => 'ḡ',
+ 'Ḣ' => 'Ḣ',
+ 'ḣ' => 'ḣ',
+ 'Ḥ' => 'Ḥ',
+ 'ḥ' => 'ḥ',
+ 'Ḧ' => 'Ḧ',
+ 'ḧ' => 'ḧ',
+ 'Ḩ' => 'Ḩ',
+ 'ḩ' => 'ḩ',
+ 'Ḫ' => 'Ḫ',
+ 'ḫ' => 'ḫ',
+ 'Ḭ' => 'Ḭ',
+ 'iÌ°' => 'á¸',
+ 'ÃÌ' => 'Ḯ',
+ 'ïÌ' => 'ḯ',
+ 'KÌ' => 'Ḱ',
+ 'kÌ' => 'ḱ',
+ 'Ḳ' => 'Ḳ',
+ 'ḳ' => 'ḳ',
+ 'Ḵ' => 'Ḵ',
+ 'ḵ' => 'ḵ',
+ 'Ḷ' => 'Ḷ',
+ 'ḷ' => 'ḷ',
+ 'Ḹ' => 'Ḹ',
+ 'ḹ' => 'ḹ',
+ 'Ḻ' => 'Ḻ',
+ 'ḻ' => 'ḻ',
+ 'LÌ' => 'Ḽ',
+ 'lÌ' => 'ḽ',
+ 'MÌ' => 'Ḿ',
+ 'mÌ' => 'ḿ',
+ 'Ṁ' => 'Ṁ',
+ 'ṁ' => 'á¹',
+ 'Ṃ' => 'Ṃ',
+ 'ṃ' => 'ṃ',
+ 'Ṅ' => 'Ṅ',
+ 'ṅ' => 'ṅ',
+ 'Ṇ' => 'Ṇ',
+ 'ṇ' => 'ṇ',
+ 'Ṉ' => 'Ṉ',
+ 'ṉ' => 'ṉ',
+ 'NÌ' => 'Ṋ',
+ 'nÌ' => 'ṋ',
+ 'ÕÌ' => 'Ṍ',
+ 'õÌ' => 'á¹',
+ 'Ṏ' => 'Ṏ',
+ 'ṏ' => 'á¹',
+ 'Ṑ' => 'á¹',
+ 'ÅÌ€' => 'ṑ',
+ 'ÅŒÌ' => 'á¹’',
+ 'ÅÌ' => 'ṓ',
+ 'PÌ' => 'á¹”',
+ 'pÌ' => 'ṕ',
+ 'Ṗ' => 'Ṗ',
+ 'ṗ' => 'ṗ',
+ 'Ṙ' => 'Ṙ',
+ 'ṙ' => 'ṙ',
+ 'Ṛ' => 'Ṛ',
+ 'ṛ' => 'ṛ',
+ 'Ṝ' => 'Ṝ',
+ 'ṝ' => 'á¹',
+ 'Ṟ' => 'Ṟ',
+ 'ṟ' => 'ṟ',
+ 'Ṡ' => 'Ṡ',
+ 'ṡ' => 'ṡ',
+ 'SÌ£' => 'á¹¢',
+ 'ṣ' => 'ṣ',
+ 'Ṥ' => 'Ṥ',
+ 'ṥ' => 'ṥ',
+ 'Ṧ' => 'Ṧ',
+ 'ṧ' => 'ṧ',
+ 'Ṩ' => 'Ṩ',
+ 'ṩ' => 'ṩ',
+ 'Ṫ' => 'Ṫ',
+ 'ṫ' => 'ṫ',
+ 'Ṭ' => 'Ṭ',
+ 'tÌ£' => 'á¹',
+ 'Ṯ' => 'Ṯ',
+ 'ṯ' => 'ṯ',
+ 'TÌ' => 'á¹°',
+ 'tÌ' => 'á¹±',
+ 'Ṳ' => 'Ṳ',
+ 'ṳ' => 'ṳ',
+ 'UÌ°' => 'á¹´',
+ 'uÌ°' => 'á¹µ',
+ 'UÌ' => 'Ṷ',
+ 'uÌ' => 'á¹·',
+ 'ŨÌ' => 'Ṹ',
+ 'Å©Ì' => 'á¹¹',
+ 'Ṻ' => 'Ṻ',
+ 'ṻ' => 'ṻ',
+ 'Ṽ' => 'Ṽ',
+ 'ṽ' => 'ṽ',
+ 'VÌ£' => 'á¹¾',
+ 'ṿ' => 'ṿ',
+ 'Ẁ' => 'Ẁ',
+ 'wÌ€' => 'áº',
+ 'WÌ' => 'Ẃ',
+ 'wÌ' => 'ẃ',
+ 'Ẅ' => 'Ẅ',
+ 'ẅ' => 'ẅ',
+ 'Ẇ' => 'Ẇ',
+ 'ẇ' => 'ẇ',
+ 'Ẉ' => 'Ẉ',
+ 'ẉ' => 'ẉ',
+ 'Ẋ' => 'Ẋ',
+ 'ẋ' => 'ẋ',
+ 'Ẍ' => 'Ẍ',
+ 'ẍ' => 'áº',
+ 'Ẏ' => 'Ẏ',
+ 'ẏ' => 'áº',
+ 'ZÌ‚' => 'áº',
+ 'ẑ' => 'ẑ',
+ 'Ẓ' => 'Ẓ',
+ 'ẓ' => 'ẓ',
+ 'Ẕ' => 'Ẕ',
+ 'ẕ' => 'ẕ',
+ 'ẖ' => 'ẖ',
+ 'ẗ' => 'ẗ',
+ 'ẘ' => 'ẘ',
+ 'ẙ' => 'ẙ',
+ 'ẛ' => 'ẛ',
+ 'Ạ' => 'Ạ',
+ 'ạ' => 'ạ',
+ 'Ả' => 'Ả',
+ 'ả' => 'ả',
+ 'ÂÌ' => 'Ấ',
+ 'âÌ' => 'ấ',
+ 'Ầ' => 'Ầ',
+ 'ầ' => 'ầ',
+ 'Ẩ' => 'Ẩ',
+ 'ẩ' => 'ẩ',
+ 'Ẫ' => 'Ẫ',
+ 'ẫ' => 'ẫ',
+ 'Ậ' => 'Ậ',
+ 'ậ' => 'áº',
+ 'Ä‚Ì' => 'Ắ',
+ 'ăÌ' => 'ắ',
+ 'Ằ' => 'Ằ',
+ 'ằ' => 'ằ',
+ 'Ẳ' => 'Ẳ',
+ 'ẳ' => 'ẳ',
+ 'Ẵ' => 'Ẵ',
+ 'ẵ' => 'ẵ',
+ 'Ặ' => 'Ặ',
+ 'ặ' => 'ặ',
+ 'Ẹ' => 'Ẹ',
+ 'ẹ' => 'ẹ',
+ 'Ẻ' => 'Ẻ',
+ 'ẻ' => 'ẻ',
+ 'Ẽ' => 'Ẽ',
+ 'ẽ' => 'ẽ',
+ 'ÊÌ' => 'Ế',
+ 'êÌ' => 'ế',
+ 'Ề' => 'Ề',
+ 'ề' => 'á»',
+ 'Ể' => 'Ể',
+ 'ể' => 'ể',
+ 'Ễ' => 'Ễ',
+ 'ễ' => 'ễ',
+ 'Ệ' => 'Ệ',
+ 'ệ' => 'ệ',
+ 'Ỉ' => 'Ỉ',
+ 'ỉ' => 'ỉ',
+ 'Ị' => 'Ị',
+ 'ị' => 'ị',
+ 'Ọ' => 'Ọ',
+ 'oÌ£' => 'á»',
+ 'Ỏ' => 'Ỏ',
+ 'ỏ' => 'á»',
+ 'ÔÌ' => 'á»',
+ 'ôÌ' => 'ố',
+ 'Ồ' => 'Ồ',
+ 'ồ' => 'ồ',
+ 'Ổ' => 'Ổ',
+ 'ổ' => 'ổ',
+ 'Ỗ' => 'Ỗ',
+ 'ỗ' => 'ỗ',
+ 'Ộ' => 'Ộ',
+ 'á»Ì‚' => 'á»™',
+ 'Æ Ì' => 'Ớ',
+ 'Æ¡Ì' => 'á»›',
+ 'Æ Ì€' => 'Ờ',
+ 'Æ¡Ì€' => 'á»',
+ 'Æ Ì‰' => 'Ở',
+ 'ở' => 'ở',
+ 'Æ Ìƒ' => 'á» ',
+ 'ỡ' => 'ỡ',
+ 'Æ Ì£' => 'Ợ',
+ 'ợ' => 'ợ',
+ 'Ụ' => 'Ụ',
+ 'ụ' => 'ụ',
+ 'Ủ' => 'Ủ',
+ 'ủ' => 'ủ',
+ 'ƯÌ' => 'Ứ',
+ 'Æ°Ì' => 'ứ',
+ 'Ừ' => 'Ừ',
+ 'ừ' => 'ừ',
+ 'Ử' => 'Ử',
+ 'ử' => 'á»',
+ 'Ữ' => 'Ữ',
+ 'ữ' => 'ữ',
+ 'Ự' => 'Ự',
+ 'Æ°Ì£' => 'á»±',
+ 'Ỳ' => 'Ỳ',
+ 'ỳ' => 'ỳ',
+ 'YÌ£' => 'á»´',
+ 'ỵ' => 'ỵ',
+ 'Ỷ' => 'Ỷ',
+ 'ỷ' => 'ỷ',
+ 'Ỹ' => 'Ỹ',
+ 'ỹ' => 'ỹ',
+ 'ἀ' => 'ἀ',
+ 'ἁ' => 'á¼',
+ 'ἂ' => 'ἂ',
+ 'á¼Ì€' => 'ἃ',
+ 'á¼€Ì' => 'ἄ',
+ 'á¼Ì' => 'á¼…',
+ 'ἆ' => 'ἆ',
+ 'á¼Í‚' => 'ἇ',
+ 'Ἀ' => 'Ἀ',
+ 'Ἁ' => 'Ἁ',
+ 'Ἂ' => 'Ἂ',
+ 'Ἃ' => 'Ἃ',
+ 'ἈÌ' => 'Ἄ',
+ 'ἉÌ' => 'á¼',
+ 'Ἆ' => 'Ἆ',
+ 'Ἇ' => 'á¼',
+ 'ἐ' => 'á¼',
+ 'ἑ' => 'ἑ',
+ 'á¼Ì€' => 'á¼’',
+ 'ἓ' => 'ἓ',
+ 'á¼Ì' => 'á¼”',
+ 'ἑÌ' => 'ἕ',
+ 'Ἐ' => 'Ἐ',
+ 'Ἑ' => 'Ἑ',
+ 'Ἒ' => 'Ἒ',
+ 'Ἓ' => 'Ἓ',
+ 'ἘÌ' => 'Ἔ',
+ 'á¼™Ì' => 'á¼',
+ 'ἠ' => 'ἠ',
+ 'ἡ' => 'ἡ',
+ 'ἢ' => 'ἢ',
+ 'ἣ' => 'ἣ',
+ 'á¼ Ì' => 'ἤ',
+ 'ἡÌ' => 'á¼¥',
+ 'ἦ' => 'ἦ',
+ 'ἧ' => 'ἧ',
+ 'Ἠ' => 'Ἠ',
+ 'Ἡ' => 'Ἡ',
+ 'Ἢ' => 'Ἢ',
+ 'Ἣ' => 'Ἣ',
+ 'ἨÌ' => 'Ἤ',
+ 'ἩÌ' => 'á¼',
+ 'Ἦ' => 'Ἦ',
+ 'Ἧ' => 'Ἧ',
+ 'ἰ' => 'ἰ',
+ 'ἱ' => 'ἱ',
+ 'á¼°Ì€' => 'á¼²',
+ 'ἳ' => 'ἳ',
+ 'á¼°Ì' => 'á¼´',
+ 'á¼±Ì' => 'á¼µ',
+ 'ἶ' => 'ἶ',
+ 'ἷ' => 'ἷ',
+ 'Ἰ' => 'Ἰ',
+ 'Ἱ' => 'Ἱ',
+ 'Ἲ' => 'Ἲ',
+ 'Ἳ' => 'Ἳ',
+ 'ἸÌ' => 'á¼¼',
+ 'á¼¹Ì' => 'á¼½',
+ 'Ἶ' => 'Ἶ',
+ 'Ἷ' => 'Ἷ',
+ 'ὀ' => 'ὀ',
+ 'ὁ' => 'á½',
+ 'ὂ' => 'ὂ',
+ 'á½Ì€' => 'ὃ',
+ 'á½€Ì' => 'ὄ',
+ 'á½Ì' => 'á½…',
+ 'Ὀ' => 'Ὀ',
+ 'Ὁ' => 'Ὁ',
+ 'Ὂ' => 'Ὂ',
+ 'Ὃ' => 'Ὃ',
+ 'ὈÌ' => 'Ὄ',
+ 'ὉÌ' => 'á½',
+ 'Ï…Ì“' => 'á½',
+ 'ὑ' => 'ὑ',
+ 'á½Ì€' => 'á½’',
+ 'ὓ' => 'ὓ',
+ 'á½Ì' => 'á½”',
+ 'ὑÌ' => 'ὕ',
+ 'á½Í‚' => 'á½–',
+ 'ὗ' => 'ὗ',
+ 'Ὑ' => 'Ὑ',
+ 'Ὓ' => 'Ὓ',
+ 'á½™Ì' => 'á½',
+ 'Ὗ' => 'Ὗ',
+ 'ὠ' => 'ὠ',
+ 'ὡ' => 'ὡ',
+ 'ὢ' => 'ὢ',
+ 'ὣ' => 'ὣ',
+ 'á½ Ì' => 'ὤ',
+ 'ὡÌ' => 'á½¥',
+ 'ὦ' => 'ὦ',
+ 'ὧ' => 'ὧ',
+ 'Ὠ' => 'Ὠ',
+ 'Ὡ' => 'Ὡ',
+ 'Ὢ' => 'Ὢ',
+ 'Ὣ' => 'Ὣ',
+ 'ὨÌ' => 'Ὤ',
+ 'ὩÌ' => 'á½',
+ 'Ὦ' => 'Ὦ',
+ 'Ὧ' => 'Ὧ',
+ 'ὰ' => 'ὰ',
+ 'ὲ' => 'ὲ',
+ 'ὴ' => 'ὴ',
+ 'ὶ' => 'ὶ',
+ 'ὸ' => 'ὸ',
+ 'ὺ' => 'ὺ',
+ 'ὼ' => 'ὼ',
+ 'ᾀ' => 'ᾀ',
+ 'á¼Í…' => 'á¾',
+ 'ᾂ' => 'ᾂ',
+ 'ᾃ' => 'ᾃ',
+ 'ᾄ' => 'ᾄ',
+ 'á¼…Í…' => 'á¾…',
+ 'ᾆ' => 'ᾆ',
+ 'ᾇ' => 'ᾇ',
+ 'ᾈ' => 'ᾈ',
+ 'ᾉ' => 'ᾉ',
+ 'ᾊ' => 'ᾊ',
+ 'ᾋ' => 'ᾋ',
+ 'ᾌ' => 'ᾌ',
+ 'á¼Í…' => 'á¾',
+ 'ᾎ' => 'ᾎ',
+ 'á¼Í…' => 'á¾',
+ 'á¼ Í…' => 'á¾',
+ 'ᾑ' => 'ᾑ',
+ 'ᾒ' => 'ᾒ',
+ 'ᾓ' => 'ᾓ',
+ 'ᾔ' => 'ᾔ',
+ 'ᾕ' => 'ᾕ',
+ 'ᾖ' => 'ᾖ',
+ 'ᾗ' => 'ᾗ',
+ 'ᾘ' => 'ᾘ',
+ 'ᾙ' => 'ᾙ',
+ 'ᾚ' => 'ᾚ',
+ 'ᾛ' => 'ᾛ',
+ 'ᾜ' => 'ᾜ',
+ 'á¼Í…' => 'á¾',
+ 'ᾞ' => 'ᾞ',
+ 'ᾟ' => 'ᾟ',
+ 'á½ Í…' => 'á¾ ',
+ 'ᾡ' => 'ᾡ',
+ 'ᾢ' => 'ᾢ',
+ 'ᾣ' => 'ᾣ',
+ 'ᾤ' => 'ᾤ',
+ 'ᾥ' => 'ᾥ',
+ 'ᾦ' => 'ᾦ',
+ 'ᾧ' => 'ᾧ',
+ 'ᾨ' => 'ᾨ',
+ 'ᾩ' => 'ᾩ',
+ 'ᾪ' => 'ᾪ',
+ 'ᾫ' => 'ᾫ',
+ 'ᾬ' => 'ᾬ',
+ 'á½Í…' => 'á¾',
+ 'ᾮ' => 'ᾮ',
+ 'ᾯ' => 'ᾯ',
+ 'ᾰ' => 'ᾰ',
+ 'ᾱ' => 'ᾱ',
+ 'á½°Í…' => 'á¾²',
+ 'ᾳ' => 'ᾳ',
+ 'ᾴ' => 'ᾴ',
+ 'ᾶ' => 'ᾶ',
+ 'ᾷ' => 'ᾷ',
+ 'Ᾰ' => 'Ᾰ',
+ 'Ᾱ' => 'Ᾱ',
+ 'Ὰ' => 'Ὰ',
+ 'ᾼ' => 'ᾼ',
+ '῁' => 'á¿',
+ 'á½´Í…' => 'á¿‚',
+ 'ῃ' => 'ῃ',
+ 'ῄ' => 'ῄ',
+ 'ῆ' => 'ῆ',
+ 'ῇ' => 'ῇ',
+ 'Ὲ' => 'Ὲ',
+ 'Ὴ' => 'Ὴ',
+ 'ῌ' => 'ῌ',
+ '῍' => 'á¿',
+ '᾿Ì' => 'á¿Ž',
+ '῏' => 'á¿',
+ 'ῐ' => 'á¿',
+ 'ῑ' => 'ῑ',
+ 'ÏŠÌ€' => 'á¿’',
+ 'ῖ' => 'ῖ',
+ 'ÏŠÍ‚' => 'á¿—',
+ 'Ῐ' => 'Ῐ',
+ 'Ῑ' => 'Ῑ',
+ 'Ὶ' => 'Ὶ',
+ '῝' => 'á¿',
+ '῾Ì' => 'á¿ž',
+ '῟' => '῟',
+ 'ῠ' => 'ῠ',
+ 'Ï…Ì„' => 'á¿¡',
+ 'Ï‹Ì€' => 'á¿¢',
+ 'ÏÌ“' => 'ῤ',
+ 'ÏÌ”' => 'á¿¥',
+ 'ῦ' => 'ῦ',
+ 'ῧ' => 'ῧ',
+ 'Ῠ' => 'Ῠ',
+ 'Ῡ' => 'Ῡ',
+ 'Ὺ' => 'Ὺ',
+ 'Ῥ' => 'Ῥ',
+ '῭' => 'á¿',
+ 'ῲ' => 'ῲ',
+ 'ῳ' => 'ῳ',
+ 'ÏŽÍ…' => 'á¿´',
+ 'ῶ' => 'ῶ',
+ 'ῷ' => 'ῷ',
+ 'Ὸ' => 'Ὸ',
+ 'Ὼ' => 'Ὼ',
+ 'ῼ' => 'ῼ',
+ 'â†Ì¸' => '↚',
+ '↛' => '↛',
+ '↮' => '↮',
+ 'â‡Ì¸' => 'â‡',
+ '⇎' => '⇎',
+ '⇏' => 'â‡',
+ '∄' => '∄',
+ '∉' => '∉',
+ '∌' => '∌',
+ '∤' => '∤',
+ '∦' => '∦',
+ '≁' => 'â‰',
+ '≄' => '≄',
+ '≇' => '≇',
+ '≉' => '≉',
+ '≠' => '≠',
+ '≢' => '≢',
+ 'â‰Ì¸' => 'â‰',
+ '≮' => '≮',
+ '≯' => '≯',
+ '≰' => '≰',
+ '≱' => '≱',
+ '≴' => '≴',
+ '≵' => '≵',
+ '≸' => '≸',
+ '≹' => '≹',
+ '⊀' => '⊀',
+ '⊁' => 'âŠ',
+ '⊄' => '⊄',
+ '⊅' => '⊅',
+ '⊈' => '⊈',
+ '⊉' => '⊉',
+ '⊬' => '⊬',
+ '⊭' => 'âŠ',
+ '⊮' => '⊮',
+ '⊯' => '⊯',
+ '⋠' => '⋠',
+ '⋡' => '⋡',
+ '⋢' => '⋢',
+ '⋣' => '⋣',
+ '⋪' => '⋪',
+ '⋫' => '⋫',
+ '⋬' => '⋬',
+ '⋭' => 'â‹',
+ 'ã‹ã‚™' => 'ãŒ',
+ 'ãã‚™' => 'ãŽ',
+ 'ãã‚™' => 'ã',
+ 'ã‘ã‚™' => 'ã’',
+ 'ã“ã‚™' => 'ã”',
+ 'ã•ã‚™' => 'ã–',
+ 'ã—ã‚™' => 'ã˜',
+ 'ã™ã‚™' => 'ãš',
+ 'ã›ã‚™' => 'ãœ',
+ 'ãã‚™' => 'ãž',
+ 'ãŸã‚™' => 'ã ',
+ 'ã¡ã‚™' => 'ã¢',
+ 'ã¤ã‚™' => 'ã¥',
+ 'ã¦ã‚™' => 'ã§',
+ 'ã¨ã‚™' => 'ã©',
+ 'ã¯ã‚™' => 'ã°',
+ 'ã¯ã‚š' => 'ã±',
+ 'ã²ã‚™' => 'ã³',
+ 'ã²ã‚š' => 'ã´',
+ 'ãµã‚™' => 'ã¶',
+ 'ãµã‚š' => 'ã·',
+ 'ã¸ã‚™' => 'ã¹',
+ 'ã¸ã‚š' => 'ãº',
+ 'ã»ã‚™' => 'ã¼',
+ 'ã»ã‚š' => 'ã½',
+ 'ã†ã‚™' => 'ã‚”',
+ 'ã‚ã‚™' => 'ã‚ž',
+ 'ガ' => 'ガ',
+ 'ã‚ã‚™' => 'ã‚®',
+ 'グ' => 'グ',
+ 'ゲ' => 'ゲ',
+ 'ゴ' => 'ゴ',
+ 'ザ' => 'ザ',
+ 'ジ' => 'ジ',
+ 'ズ' => 'ズ',
+ 'ゼ' => 'ゼ',
+ 'ゾ' => 'ゾ',
+ 'ダ' => 'ダ',
+ 'ãƒã‚™' => 'ヂ',
+ 'ヅ' => 'ヅ',
+ 'デ' => 'デ',
+ 'ド' => 'ド',
+ 'ãƒã‚™' => 'ãƒ',
+ 'ãƒã‚š' => 'パ',
+ 'ビ' => 'ビ',
+ 'ピ' => 'ピ',
+ 'ブ' => 'ブ',
+ 'プ' => 'プ',
+ 'ベ' => 'ベ',
+ 'ペ' => 'ペ',
+ 'ボ' => 'ボ',
+ 'ポ' => 'ãƒ',
+ 'ヴ' => 'ヴ',
+ 'ヷ' => 'ヷ',
+ 'ヸ' => 'ヸ',
+ 'ヹ' => 'ヹ',
+ 'ヺ' => 'ヺ',
+ 'ヾ' => 'ヾ',
+ '𑂚' => '𑂚',
+ '𑂜' => '𑂜',
+ '𑂫' => '𑂫',
+ '𑄮' => '𑄮',
+ '𑄯' => '𑄯',
+ 'ð‘‡ð‘Œ¾' => 'ð‘‹',
+ 'ð‘‡ð‘—' => 'ð‘Œ',
+ '𑒻' => '𑒻',
+ '𑒼' => '𑒼',
+ '𑒾' => '𑒾',
+ '𑖺' => '𑖺',
+ '𑖻' => '𑖻',
+ '𑤸' => '𑤸',
+);
diff --git a/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalDecomposition.php b/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalDecomposition.php
new file mode 100644
index 00000000..5a3e8e09
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalDecomposition.php
@@ -0,0 +1,2065 @@
+ 'AÌ€',
+ 'Ã' => 'AÌ',
+ 'Â' => 'Â',
+ 'Ã' => 'Ã',
+ 'Ä' => 'Ä',
+ 'Ã…' => 'AÌŠ',
+ 'Ç' => 'Ç',
+ 'È' => 'È',
+ 'É' => 'EÌ',
+ 'Ê' => 'Ê',
+ 'Ë' => 'Ë',
+ 'Ì' => 'Ì',
+ 'Ã' => 'IÌ',
+ 'ÃŽ' => 'IÌ‚',
+ 'Ã' => 'Ï',
+ 'Ñ' => 'Ñ',
+ 'Ã’' => 'OÌ€',
+ 'Ó' => 'OÌ',
+ 'Ô' => 'Ô',
+ 'Õ' => 'Õ',
+ 'Ö' => 'Ö',
+ 'Ù' => 'Ù',
+ 'Ú' => 'UÌ',
+ 'Û' => 'Û',
+ 'Ü' => 'Ü',
+ 'Ã' => 'YÌ',
+ 'à ' => 'à',
+ 'á' => 'aÌ',
+ 'â' => 'â',
+ 'ã' => 'ã',
+ 'ä' => 'ä',
+ 'Ã¥' => 'aÌŠ',
+ 'ç' => 'ç',
+ 'è' => 'è',
+ 'é' => 'eÌ',
+ 'ê' => 'ê',
+ 'ë' => 'ë',
+ 'ì' => 'ì',
+ 'Ã' => 'iÌ',
+ 'î' => 'î',
+ 'ï' => 'ï',
+ 'ñ' => 'ñ',
+ 'ò' => 'ò',
+ 'ó' => 'oÌ',
+ 'ô' => 'ô',
+ 'õ' => 'õ',
+ 'ö' => 'ö',
+ 'ù' => 'ù',
+ 'ú' => 'uÌ',
+ 'û' => 'û',
+ 'ü' => 'ü',
+ 'ý' => 'yÌ',
+ 'ÿ' => 'ÿ',
+ 'Ä€' => 'AÌ„',
+ 'Ä' => 'aÌ„',
+ 'Ă' => 'Ă',
+ 'ă' => 'ă',
+ 'Ą' => 'Ą',
+ 'ą' => 'ą',
+ 'Ć' => 'CÌ',
+ 'ć' => 'cÌ',
+ 'Ĉ' => 'Ĉ',
+ 'ĉ' => 'ĉ',
+ 'Ċ' => 'Ċ',
+ 'ċ' => 'ċ',
+ 'Č' => 'Č',
+ 'Ä' => 'cÌŒ',
+ 'Ď' => 'Ď',
+ 'Ä' => 'dÌŒ',
+ 'Ä’' => 'EÌ„',
+ 'ē' => 'ē',
+ 'Ĕ' => 'Ĕ',
+ 'ĕ' => 'ĕ',
+ 'Ė' => 'Ė',
+ 'ė' => 'ė',
+ 'Ę' => 'Ę',
+ 'ę' => 'ę',
+ 'Ě' => 'Ě',
+ 'ě' => 'ě',
+ 'Ĝ' => 'Ĝ',
+ 'Ä' => 'gÌ‚',
+ 'Ğ' => 'Ğ',
+ 'ğ' => 'ğ',
+ 'Ä ' => 'Ġ',
+ 'ġ' => 'ġ',
+ 'Ģ' => 'Ģ',
+ 'ģ' => 'ģ',
+ 'Ĥ' => 'Ĥ',
+ 'ĥ' => 'ĥ',
+ 'Ĩ' => 'Ĩ',
+ 'ĩ' => 'ĩ',
+ 'Ī' => 'Ī',
+ 'ī' => 'ī',
+ 'Ĭ' => 'Ĭ',
+ 'Ä' => 'ĭ',
+ 'Į' => 'Į',
+ 'į' => 'į',
+ 'İ' => 'İ',
+ 'Ä´' => 'JÌ‚',
+ 'ĵ' => 'ĵ',
+ 'Ķ' => 'Ķ',
+ 'ķ' => 'ķ',
+ 'Ĺ' => 'LÌ',
+ 'ĺ' => 'lÌ',
+ 'Ļ' => 'Ļ',
+ 'ļ' => 'ļ',
+ 'Ľ' => 'Ľ',
+ 'ľ' => 'ľ',
+ 'Ń' => 'NÌ',
+ 'Å„' => 'nÌ',
+ 'Ņ' => 'Ņ',
+ 'ņ' => 'ņ',
+ 'Ň' => 'Ň',
+ 'ň' => 'ň',
+ 'Ō' => 'Ō',
+ 'Å' => 'oÌ„',
+ 'Ŏ' => 'Ŏ',
+ 'Å' => 'ŏ',
+ 'Å' => 'OÌ‹',
+ 'ő' => 'ő',
+ 'Å”' => 'RÌ',
+ 'Å•' => 'rÌ',
+ 'Ŗ' => 'Ŗ',
+ 'ŗ' => 'ŗ',
+ 'Ř' => 'Ř',
+ 'ř' => 'ř',
+ 'Åš' => 'SÌ',
+ 'Å›' => 'sÌ',
+ 'Ŝ' => 'Ŝ',
+ 'Å' => 'sÌ‚',
+ 'Ş' => 'Ş',
+ 'ş' => 'ş',
+ 'Š' => 'Š',
+ 'š' => 'š',
+ 'Ţ' => 'Ţ',
+ 'ţ' => 'ţ',
+ 'Ť' => 'Ť',
+ 'ť' => 'ť',
+ 'Ũ' => 'Ũ',
+ 'ũ' => 'ũ',
+ 'Ū' => 'Ū',
+ 'ū' => 'ū',
+ 'Ŭ' => 'Ŭ',
+ 'Å' => 'ŭ',
+ 'Å®' => 'UÌŠ',
+ 'ů' => 'ů',
+ 'Å°' => 'UÌ‹',
+ 'ű' => 'ű',
+ 'Ų' => 'Ų',
+ 'ų' => 'ų',
+ 'Å´' => 'WÌ‚',
+ 'ŵ' => 'ŵ',
+ 'Ŷ' => 'Ŷ',
+ 'ŷ' => 'ŷ',
+ 'Ÿ' => 'Ÿ',
+ 'Ź' => 'ZÌ',
+ 'ź' => 'zÌ',
+ 'Ż' => 'Ż',
+ 'ż' => 'ż',
+ 'Ž' => 'Ž',
+ 'ž' => 'ž',
+ 'Æ ' => 'OÌ›',
+ 'Æ¡' => 'oÌ›',
+ 'Ư' => 'Ư',
+ 'Æ°' => 'uÌ›',
+ 'Ç' => 'AÌŒ',
+ 'ǎ' => 'ǎ',
+ 'Ç' => 'IÌŒ',
+ 'Ç' => 'iÌŒ',
+ 'Ǒ' => 'Ǒ',
+ 'ǒ' => 'ǒ',
+ 'Ǔ' => 'Ǔ',
+ 'ǔ' => 'ǔ',
+ 'Ǖ' => 'Ǖ',
+ 'ǖ' => 'ǖ',
+ 'Ç—' => 'ÜÌ',
+ 'ǘ' => 'üÌ',
+ 'Ǚ' => 'Ǚ',
+ 'ǚ' => 'ǚ',
+ 'Ǜ' => 'Ǜ',
+ 'ǜ' => 'ǜ',
+ 'Ǟ' => 'Ǟ',
+ 'ǟ' => 'ǟ',
+ 'Ç ' => 'Ǡ',
+ 'ǡ' => 'ǡ',
+ 'Ǣ' => 'Ǣ',
+ 'ǣ' => 'ǣ',
+ 'Ǧ' => 'Ǧ',
+ 'ǧ' => 'ǧ',
+ 'Ǩ' => 'Ǩ',
+ 'ǩ' => 'ǩ',
+ 'Ǫ' => 'Ǫ',
+ 'ǫ' => 'ǫ',
+ 'Ǭ' => 'Ǭ',
+ 'Ç' => 'ǭ',
+ 'Ǯ' => 'Ǯ',
+ 'ǯ' => 'ǯ',
+ 'ǰ' => 'ǰ',
+ 'Ç´' => 'GÌ',
+ 'ǵ' => 'gÌ',
+ 'Ǹ' => 'Ǹ',
+ 'ǹ' => 'ǹ',
+ 'Ǻ' => 'AÌŠÌ',
+ 'Ç»' => 'aÌŠÌ',
+ 'Ǽ' => 'ÆÌ',
+ 'ǽ' => 'æÌ',
+ 'Ǿ' => 'ØÌ',
+ 'Ç¿' => 'øÌ',
+ 'È€' => 'AÌ',
+ 'È' => 'aÌ',
+ 'È‚' => 'AÌ‘',
+ 'ȃ' => 'ȃ',
+ 'È„' => 'EÌ',
+ 'È…' => 'eÌ',
+ 'Ȇ' => 'Ȇ',
+ 'ȇ' => 'ȇ',
+ 'Ȉ' => 'IÌ',
+ 'ȉ' => 'iÌ',
+ 'ÈŠ' => 'IÌ‘',
+ 'ȋ' => 'ȋ',
+ 'ÈŒ' => 'OÌ',
+ 'È' => 'oÌ',
+ 'ÈŽ' => 'OÌ‘',
+ 'È' => 'oÌ‘',
+ 'È' => 'RÌ',
+ 'È‘' => 'rÌ',
+ 'È’' => 'RÌ‘',
+ 'ȓ' => 'ȓ',
+ 'È”' => 'UÌ',
+ 'È•' => 'uÌ',
+ 'È–' => 'UÌ‘',
+ 'ȗ' => 'ȗ',
+ 'Ș' => 'Ș',
+ 'ș' => 'ș',
+ 'Ț' => 'Ț',
+ 'ț' => 'ț',
+ 'Ȟ' => 'Ȟ',
+ 'ȟ' => 'ȟ',
+ 'Ȧ' => 'Ȧ',
+ 'ȧ' => 'ȧ',
+ 'Ȩ' => 'Ȩ',
+ 'ȩ' => 'ȩ',
+ 'Ȫ' => 'Ȫ',
+ 'ȫ' => 'ȫ',
+ 'Ȭ' => 'Ȭ',
+ 'È' => 'ȭ',
+ 'Ȯ' => 'Ȯ',
+ 'ȯ' => 'ȯ',
+ 'Ȱ' => 'Ȱ',
+ 'ȱ' => 'ȱ',
+ 'Ȳ' => 'Ȳ',
+ 'ȳ' => 'ȳ',
+ 'Í€' => 'Ì€',
+ 'Í' => 'Ì',
+ '̓' => '̓',
+ 'Í„' => '̈Ì',
+ 'ʹ' => 'ʹ',
+ ';' => ';',
+ 'Î…' => '¨Ì',
+ 'Ά' => 'ΑÌ',
+ '·' => '·',
+ 'Έ' => 'ΕÌ',
+ 'Ή' => 'ΗÌ',
+ 'Ί' => 'ΙÌ',
+ 'ÎŒ' => 'ΟÌ',
+ 'ÎŽ' => 'Î¥Ì',
+ 'Î' => 'ΩÌ',
+ 'Î' => 'ϊÌ',
+ 'Ϊ' => 'Ϊ',
+ 'Ϋ' => 'Ϋ',
+ 'ά' => 'αÌ',
+ 'Î' => 'εÌ',
+ 'ή' => 'ηÌ',
+ 'ί' => 'ιÌ',
+ 'ΰ' => 'ϋÌ',
+ 'ϊ' => 'ϊ',
+ 'ϋ' => 'ϋ',
+ 'ÏŒ' => 'οÌ',
+ 'Ï' => 'Ï…Ì',
+ 'ÏŽ' => 'ωÌ',
+ 'Ï“' => 'Ï’Ì',
+ 'ϔ' => 'ϔ',
+ 'Ѐ' => 'Ѐ',
+ 'Ð' => 'Ё',
+ 'Ѓ' => 'ГÌ',
+ 'Ї' => 'Ї',
+ 'ÐŒ' => 'КÌ',
+ 'Ð' => 'Ѝ',
+ 'Ў' => 'Ў',
+ 'Й' => 'Й',
+ 'й' => 'й',
+ 'Ñ' => 'ѐ',
+ 'ё' => 'ё',
+ 'Ñ“' => 'гÌ',
+ 'ї' => 'ї',
+ 'Ñœ' => 'кÌ',
+ 'Ñ' => 'ѝ',
+ 'ў' => 'ў',
+ 'Ѷ' => 'Ñ´Ì',
+ 'Ñ·' => 'ѵÌ',
+ 'Ó' => 'Ӂ',
+ 'ӂ' => 'ӂ',
+ 'Ó' => 'Ð̆',
+ 'ӑ' => 'ӑ',
+ 'Ó’' => 'Ð̈',
+ 'ӓ' => 'ӓ',
+ 'Ӗ' => 'Ӗ',
+ 'ӗ' => 'ӗ',
+ 'Ӛ' => 'Ӛ',
+ 'ӛ' => 'ӛ',
+ 'Ӝ' => 'Ӝ',
+ 'Ó' => 'ӝ',
+ 'Ӟ' => 'Ӟ',
+ 'ӟ' => 'ӟ',
+ 'Ӣ' => 'Ӣ',
+ 'ӣ' => 'ӣ',
+ 'Ӥ' => 'Ӥ',
+ 'ӥ' => 'ӥ',
+ 'Ӧ' => 'Ӧ',
+ 'ӧ' => 'ӧ',
+ 'Ӫ' => 'Ӫ',
+ 'ӫ' => 'ӫ',
+ 'Ó¬' => 'Ð̈',
+ 'Ó' => 'Ñ̈',
+ 'Ӯ' => 'Ӯ',
+ 'ӯ' => 'ӯ',
+ 'Ӱ' => 'Ӱ',
+ 'ӱ' => 'ӱ',
+ 'Ӳ' => 'Ӳ',
+ 'ӳ' => 'ӳ',
+ 'Ӵ' => 'Ӵ',
+ 'ӵ' => 'ӵ',
+ 'Ӹ' => 'Ӹ',
+ 'ӹ' => 'ӹ',
+ 'آ' => 'آ',
+ 'أ' => 'أ',
+ 'ؤ' => 'ؤ',
+ 'إ' => 'إ',
+ 'ئ' => 'ئ',
+ 'Û€' => 'Û•Ù”',
+ 'Û‚' => 'ÛÙ”',
+ 'Û“' => 'Û’Ù”',
+ 'ऩ' => 'ऩ',
+ 'ऱ' => 'ऱ',
+ 'ऴ' => 'ऴ',
+ 'क़' => 'क़',
+ 'ख़' => 'ख़',
+ 'ग़' => 'ग़',
+ 'ज़' => 'ज़',
+ 'ड़' => 'ड़',
+ 'à¥' => 'ढ़',
+ 'फ़' => 'फ़',
+ 'य़' => 'य़',
+ 'ো' => 'ো',
+ 'ৌ' => 'ৌ',
+ 'ড়' => 'ড়',
+ 'à§' => 'ঢ়',
+ 'য়' => 'য়',
+ 'ਲ਼' => 'ਲ਼',
+ 'ਸ਼' => 'ਸ਼',
+ 'ਖ਼' => 'ਖ਼',
+ 'ਗ਼' => 'ਗ਼',
+ 'ਜ਼' => 'ਜ਼',
+ 'ਫ਼' => 'ਫ਼',
+ 'àˆ' => 'à‡à–',
+ 'à‹' => 'à‡à¬¾',
+ 'àŒ' => 'à‡à—',
+ 'àœ' => 'ଡ଼',
+ 'à' => 'ଢ଼',
+ 'ஔ' => 'ஔ',
+ 'ொ' => 'ொ',
+ 'ோ' => 'ோ',
+ 'ௌ' => 'ௌ',
+ 'ై' => 'ై',
+ 'ೀ' => 'ೀ',
+ 'ೇ' => 'ೇ',
+ 'ೈ' => 'ೈ',
+ 'ೊ' => 'ೊ',
+ 'ೋ' => 'ೋ',
+ 'ൊ' => 'ൊ',
+ 'ോ' => 'ോ',
+ 'ൌ' => 'ൌ',
+ 'ේ' => 'ේ',
+ 'à·œ' => 'à·™à·',
+ 'à·' => 'à·™à·à·Š',
+ 'ෞ' => 'ෞ',
+ 'གྷ' => 'གྷ',
+ 'à½' => 'ཌྷ',
+ 'དྷ' => 'དྷ',
+ 'བྷ' => 'བྷ',
+ 'ཛྷ' => 'ཛྷ',
+ 'ཀྵ' => 'ཀྵ',
+ 'ཱི' => 'ཱི',
+ 'ཱུ' => 'ཱུ',
+ 'ྲྀ' => 'ྲྀ',
+ 'ླྀ' => 'ླྀ',
+ 'à¾' => 'ཱྀ',
+ 'ྒྷ' => 'ྒྷ',
+ 'à¾' => 'ྜྷ',
+ 'ྡྷ' => 'ྡྷ',
+ 'ྦྷ' => 'ྦྷ',
+ 'ྫྷ' => 'ྫྷ',
+ 'ྐྵ' => 'à¾à¾µ',
+ 'ဦ' => 'ဦ',
+ 'ᬆ' => 'ᬆ',
+ 'ᬈ' => 'ᬈ',
+ 'ᬊ' => 'ᬊ',
+ 'ᬌ' => 'ᬌ',
+ 'ᬎ' => 'á¬á¬µ',
+ 'ᬒ' => 'ᬒ',
+ 'ᬻ' => 'ᬻ',
+ 'ᬽ' => 'ᬽ',
+ 'á€' => 'ᭀ',
+ 'á' => 'ᭁ',
+ 'áƒ' => 'á‚ᬵ',
+ 'Ḁ' => 'Ḁ',
+ 'á¸' => 'aÌ¥',
+ 'Ḃ' => 'Ḃ',
+ 'ḃ' => 'ḃ',
+ 'Ḅ' => 'Ḅ',
+ 'ḅ' => 'ḅ',
+ 'Ḇ' => 'Ḇ',
+ 'ḇ' => 'ḇ',
+ 'Ḉ' => 'ÇÌ',
+ 'ḉ' => 'çÌ',
+ 'Ḋ' => 'Ḋ',
+ 'ḋ' => 'ḋ',
+ 'Ḍ' => 'Ḍ',
+ 'á¸' => 'dÌ£',
+ 'Ḏ' => 'Ḏ',
+ 'á¸' => 'ḏ',
+ 'á¸' => 'Ḑ',
+ 'ḑ' => 'ḑ',
+ 'Ḓ' => 'DÌ',
+ 'ḓ' => 'dÌ',
+ 'Ḕ' => 'Ḕ',
+ 'ḕ' => 'ḕ',
+ 'Ḗ' => 'EÌ„Ì',
+ 'ḗ' => 'eÌ„Ì',
+ 'Ḙ' => 'EÌ',
+ 'ḙ' => 'eÌ',
+ 'Ḛ' => 'Ḛ',
+ 'ḛ' => 'ḛ',
+ 'Ḝ' => 'Ḝ',
+ 'á¸' => 'ḝ',
+ 'Ḟ' => 'Ḟ',
+ 'ḟ' => 'ḟ',
+ 'Ḡ' => 'Ḡ',
+ 'ḡ' => 'ḡ',
+ 'Ḣ' => 'Ḣ',
+ 'ḣ' => 'ḣ',
+ 'Ḥ' => 'Ḥ',
+ 'ḥ' => 'ḥ',
+ 'Ḧ' => 'Ḧ',
+ 'ḧ' => 'ḧ',
+ 'Ḩ' => 'Ḩ',
+ 'ḩ' => 'ḩ',
+ 'Ḫ' => 'Ḫ',
+ 'ḫ' => 'ḫ',
+ 'Ḭ' => 'Ḭ',
+ 'á¸' => 'iÌ°',
+ 'Ḯ' => 'ÏÌ',
+ 'ḯ' => 'ïÌ',
+ 'Ḱ' => 'KÌ',
+ 'ḱ' => 'kÌ',
+ 'Ḳ' => 'Ḳ',
+ 'ḳ' => 'ḳ',
+ 'Ḵ' => 'Ḵ',
+ 'ḵ' => 'ḵ',
+ 'Ḷ' => 'Ḷ',
+ 'ḷ' => 'ḷ',
+ 'Ḹ' => 'Ḹ',
+ 'ḹ' => 'ḹ',
+ 'Ḻ' => 'Ḻ',
+ 'ḻ' => 'ḻ',
+ 'Ḽ' => 'LÌ',
+ 'ḽ' => 'lÌ',
+ 'Ḿ' => 'MÌ',
+ 'ḿ' => 'mÌ',
+ 'Ṁ' => 'Ṁ',
+ 'á¹' => 'ṁ',
+ 'Ṃ' => 'Ṃ',
+ 'ṃ' => 'ṃ',
+ 'Ṅ' => 'Ṅ',
+ 'ṅ' => 'ṅ',
+ 'Ṇ' => 'Ṇ',
+ 'ṇ' => 'ṇ',
+ 'Ṉ' => 'Ṉ',
+ 'ṉ' => 'ṉ',
+ 'Ṋ' => 'NÌ',
+ 'ṋ' => 'nÌ',
+ 'Ṍ' => 'ÕÌ',
+ 'á¹' => 'õÌ',
+ 'Ṏ' => 'Ṏ',
+ 'á¹' => 'ṏ',
+ 'á¹' => 'OÌ„Ì€',
+ 'ṑ' => 'ṑ',
+ 'á¹’' => 'OÌ„Ì',
+ 'ṓ' => 'oÌ„Ì',
+ 'á¹”' => 'PÌ',
+ 'ṕ' => 'pÌ',
+ 'Ṗ' => 'Ṗ',
+ 'ṗ' => 'ṗ',
+ 'Ṙ' => 'Ṙ',
+ 'ṙ' => 'ṙ',
+ 'Ṛ' => 'Ṛ',
+ 'ṛ' => 'ṛ',
+ 'Ṝ' => 'Ṝ',
+ 'á¹' => 'ṝ',
+ 'Ṟ' => 'Ṟ',
+ 'ṟ' => 'ṟ',
+ 'Ṡ' => 'Ṡ',
+ 'ṡ' => 'ṡ',
+ 'á¹¢' => 'SÌ£',
+ 'ṣ' => 'ṣ',
+ 'Ṥ' => 'SÌ̇',
+ 'á¹¥' => 'sÌ̇',
+ 'Ṧ' => 'Ṧ',
+ 'ṧ' => 'ṧ',
+ 'Ṩ' => 'Ṩ',
+ 'ṩ' => 'ṩ',
+ 'Ṫ' => 'Ṫ',
+ 'ṫ' => 'ṫ',
+ 'Ṭ' => 'Ṭ',
+ 'á¹' => 'tÌ£',
+ 'Ṯ' => 'Ṯ',
+ 'ṯ' => 'ṯ',
+ 'á¹°' => 'TÌ',
+ 'á¹±' => 'tÌ',
+ 'Ṳ' => 'Ṳ',
+ 'ṳ' => 'ṳ',
+ 'á¹´' => 'UÌ°',
+ 'á¹µ' => 'uÌ°',
+ 'Ṷ' => 'UÌ',
+ 'á¹·' => 'uÌ',
+ 'Ṹ' => 'ŨÌ',
+ 'á¹¹' => 'ũÌ',
+ 'Ṻ' => 'Ṻ',
+ 'ṻ' => 'ṻ',
+ 'Ṽ' => 'Ṽ',
+ 'ṽ' => 'ṽ',
+ 'á¹¾' => 'VÌ£',
+ 'ṿ' => 'ṿ',
+ 'Ẁ' => 'Ẁ',
+ 'áº' => 'wÌ€',
+ 'Ẃ' => 'WÌ',
+ 'ẃ' => 'wÌ',
+ 'Ẅ' => 'Ẅ',
+ 'ẅ' => 'ẅ',
+ 'Ẇ' => 'Ẇ',
+ 'ẇ' => 'ẇ',
+ 'Ẉ' => 'Ẉ',
+ 'ẉ' => 'ẉ',
+ 'Ẋ' => 'Ẋ',
+ 'ẋ' => 'ẋ',
+ 'Ẍ' => 'Ẍ',
+ 'áº' => 'ẍ',
+ 'Ẏ' => 'Ẏ',
+ 'áº' => 'ẏ',
+ 'áº' => 'ZÌ‚',
+ 'ẑ' => 'ẑ',
+ 'Ẓ' => 'Ẓ',
+ 'ẓ' => 'ẓ',
+ 'Ẕ' => 'Ẕ',
+ 'ẕ' => 'ẕ',
+ 'ẖ' => 'ẖ',
+ 'ẗ' => 'ẗ',
+ 'ẘ' => 'ẘ',
+ 'ẙ' => 'ẙ',
+ 'ẛ' => 'ẛ',
+ 'Ạ' => 'Ạ',
+ 'ạ' => 'ạ',
+ 'Ả' => 'Ả',
+ 'ả' => 'ả',
+ 'Ấ' => 'AÌ‚Ì',
+ 'ấ' => 'aÌ‚Ì',
+ 'Ầ' => 'Ầ',
+ 'ầ' => 'ầ',
+ 'Ẩ' => 'Ẩ',
+ 'ẩ' => 'ẩ',
+ 'Ẫ' => 'Ẫ',
+ 'ẫ' => 'ẫ',
+ 'Ậ' => 'Ậ',
+ 'áº' => 'ậ',
+ 'Ắ' => 'ĂÌ',
+ 'ắ' => 'ăÌ',
+ 'Ằ' => 'Ằ',
+ 'ằ' => 'ằ',
+ 'Ẳ' => 'Ẳ',
+ 'ẳ' => 'ẳ',
+ 'Ẵ' => 'Ẵ',
+ 'ẵ' => 'ẵ',
+ 'Ặ' => 'Ặ',
+ 'ặ' => 'ặ',
+ 'Ẹ' => 'Ẹ',
+ 'ẹ' => 'ẹ',
+ 'Ẻ' => 'Ẻ',
+ 'ẻ' => 'ẻ',
+ 'Ẽ' => 'Ẽ',
+ 'ẽ' => 'ẽ',
+ 'Ế' => 'EÌ‚Ì',
+ 'ế' => 'eÌ‚Ì',
+ 'Ề' => 'Ề',
+ 'á»' => 'eÌ‚Ì€',
+ 'Ể' => 'Ể',
+ 'ể' => 'ể',
+ 'Ễ' => 'Ễ',
+ 'ễ' => 'ễ',
+ 'Ệ' => 'Ệ',
+ 'ệ' => 'ệ',
+ 'Ỉ' => 'Ỉ',
+ 'ỉ' => 'ỉ',
+ 'Ị' => 'Ị',
+ 'ị' => 'ị',
+ 'Ọ' => 'Ọ',
+ 'á»' => 'oÌ£',
+ 'Ỏ' => 'Ỏ',
+ 'á»' => 'ỏ',
+ 'á»' => 'OÌ‚Ì',
+ 'ố' => 'oÌ‚Ì',
+ 'á»’' => 'OÌ‚Ì€',
+ 'ồ' => 'ồ',
+ 'Ổ' => 'Ổ',
+ 'ổ' => 'ổ',
+ 'Ỗ' => 'Ỗ',
+ 'ỗ' => 'ỗ',
+ 'Ộ' => 'Ộ',
+ 'ộ' => 'ộ',
+ 'Ớ' => 'OÌ›Ì',
+ 'á»›' => 'oÌ›Ì',
+ 'Ờ' => 'Ờ',
+ 'á»' => 'ờ',
+ 'Ở' => 'Ở',
+ 'ở' => 'ở',
+ 'Ỡ' => 'Ỡ',
+ 'ỡ' => 'ỡ',
+ 'Ợ' => 'Ợ',
+ 'ợ' => 'ợ',
+ 'Ụ' => 'Ụ',
+ 'ụ' => 'ụ',
+ 'Ủ' => 'Ủ',
+ 'ủ' => 'ủ',
+ 'Ứ' => 'UÌ›Ì',
+ 'ứ' => 'uÌ›Ì',
+ 'Ừ' => 'Ừ',
+ 'ừ' => 'ừ',
+ 'Ử' => 'Ử',
+ 'á»' => 'ử',
+ 'Ữ' => 'Ữ',
+ 'ữ' => 'ữ',
+ 'Ự' => 'Ự',
+ 'ự' => 'ự',
+ 'Ỳ' => 'Ỳ',
+ 'ỳ' => 'ỳ',
+ 'á»´' => 'YÌ£',
+ 'ỵ' => 'ỵ',
+ 'Ỷ' => 'Ỷ',
+ 'ỷ' => 'ỷ',
+ 'Ỹ' => 'Ỹ',
+ 'ỹ' => 'ỹ',
+ 'ἀ' => 'ἀ',
+ 'á¼' => 'ἁ',
+ 'ἂ' => 'ἂ',
+ 'ἃ' => 'ἃ',
+ 'ἄ' => 'ἀÌ',
+ 'á¼…' => 'ἁÌ',
+ 'ἆ' => 'ἆ',
+ 'ἇ' => 'ἇ',
+ 'Ἀ' => 'Ἀ',
+ 'Ἁ' => 'Ἁ',
+ 'Ἂ' => 'Ἂ',
+ 'Ἃ' => 'Ἃ',
+ 'Ἄ' => 'ἈÌ',
+ 'á¼' => 'ἉÌ',
+ 'Ἆ' => 'Ἆ',
+ 'á¼' => 'Ἇ',
+ 'á¼' => 'ἐ',
+ 'ἑ' => 'ἑ',
+ 'ἒ' => 'ἒ',
+ 'ἓ' => 'ἓ',
+ 'á¼”' => 'ἐÌ',
+ 'ἕ' => 'ἑÌ',
+ 'Ἐ' => 'Ἐ',
+ 'Ἑ' => 'Ἑ',
+ 'Ἒ' => 'Ἒ',
+ 'Ἓ' => 'Ἓ',
+ 'Ἔ' => 'ἘÌ',
+ 'á¼' => 'ἙÌ',
+ 'ἠ' => 'ἠ',
+ 'ἡ' => 'ἡ',
+ 'ἢ' => 'ἢ',
+ 'ἣ' => 'ἣ',
+ 'ἤ' => 'ἠÌ',
+ 'á¼¥' => 'ἡÌ',
+ 'ἦ' => 'ἦ',
+ 'ἧ' => 'ἧ',
+ 'Ἠ' => 'Ἠ',
+ 'Ἡ' => 'Ἡ',
+ 'Ἢ' => 'Ἢ',
+ 'Ἣ' => 'Ἣ',
+ 'Ἤ' => 'ἨÌ',
+ 'á¼' => 'ἩÌ',
+ 'Ἦ' => 'Ἦ',
+ 'Ἧ' => 'Ἧ',
+ 'ἰ' => 'ἰ',
+ 'ἱ' => 'ἱ',
+ 'ἲ' => 'ἲ',
+ 'ἳ' => 'ἳ',
+ 'á¼´' => 'ἰÌ',
+ 'á¼µ' => 'ἱÌ',
+ 'ἶ' => 'ἶ',
+ 'ἷ' => 'ἷ',
+ 'Ἰ' => 'Ἰ',
+ 'Ἱ' => 'Ἱ',
+ 'Ἲ' => 'Ἲ',
+ 'Ἳ' => 'Ἳ',
+ 'á¼¼' => 'ἸÌ',
+ 'á¼½' => 'ἹÌ',
+ 'Ἶ' => 'Ἶ',
+ 'Ἷ' => 'Ἷ',
+ 'ὀ' => 'ὀ',
+ 'á½' => 'ὁ',
+ 'ὂ' => 'ὂ',
+ 'ὃ' => 'ὃ',
+ 'ὄ' => 'ὀÌ',
+ 'á½…' => 'ὁÌ',
+ 'Ὀ' => 'Ὀ',
+ 'Ὁ' => 'Ὁ',
+ 'Ὂ' => 'Ὂ',
+ 'Ὃ' => 'Ὃ',
+ 'Ὄ' => 'ὈÌ',
+ 'á½' => 'ὉÌ',
+ 'á½' => 'Ï…Ì“',
+ 'ὑ' => 'ὑ',
+ 'á½’' => 'Ï…Ì“Ì€',
+ 'ὓ' => 'ὓ',
+ 'á½”' => 'Ï…Ì“Ì',
+ 'ὕ' => 'Ï…Ì”Ì',
+ 'á½–' => 'Ï…Ì“Í‚',
+ 'ὗ' => 'ὗ',
+ 'Ὑ' => 'Ὑ',
+ 'Ὓ' => 'Ὓ',
+ 'á½' => 'ὙÌ',
+ 'Ὗ' => 'Ὗ',
+ 'ὠ' => 'ὠ',
+ 'ὡ' => 'ὡ',
+ 'ὢ' => 'ὢ',
+ 'ὣ' => 'ὣ',
+ 'ὤ' => 'ὠÌ',
+ 'á½¥' => 'ὡÌ',
+ 'ὦ' => 'ὦ',
+ 'ὧ' => 'ὧ',
+ 'Ὠ' => 'Ὠ',
+ 'Ὡ' => 'Ὡ',
+ 'Ὢ' => 'Ὢ',
+ 'Ὣ' => 'Ὣ',
+ 'Ὤ' => 'ὨÌ',
+ 'á½' => 'ὩÌ',
+ 'Ὦ' => 'Ὦ',
+ 'Ὧ' => 'Ὧ',
+ 'ὰ' => 'ὰ',
+ 'á½±' => 'αÌ',
+ 'ὲ' => 'ὲ',
+ 'á½³' => 'εÌ',
+ 'ὴ' => 'ὴ',
+ 'á½µ' => 'ηÌ',
+ 'ὶ' => 'ὶ',
+ 'á½·' => 'ιÌ',
+ 'ὸ' => 'ὸ',
+ 'á½¹' => 'οÌ',
+ 'ὺ' => 'ὺ',
+ 'á½»' => 'Ï…Ì',
+ 'ὼ' => 'ὼ',
+ 'á½½' => 'ωÌ',
+ 'ᾀ' => 'ᾀ',
+ 'á¾' => 'ᾁ',
+ 'ᾂ' => 'ᾂ',
+ 'ᾃ' => 'ᾃ',
+ 'ᾄ' => 'ἀÌÍ…',
+ 'á¾…' => 'ἁÌÍ…',
+ 'ᾆ' => 'ᾆ',
+ 'ᾇ' => 'ᾇ',
+ 'ᾈ' => 'ᾈ',
+ 'ᾉ' => 'ᾉ',
+ 'ᾊ' => 'ᾊ',
+ 'ᾋ' => 'ᾋ',
+ 'ᾌ' => 'ἈÌÍ…',
+ 'á¾' => 'ἉÌÍ…',
+ 'ᾎ' => 'ᾎ',
+ 'á¾' => 'ᾏ',
+ 'á¾' => 'ᾐ',
+ 'ᾑ' => 'ᾑ',
+ 'ᾒ' => 'ᾒ',
+ 'ᾓ' => 'ᾓ',
+ 'á¾”' => 'ἠÌÍ…',
+ 'ᾕ' => 'ἡÌÍ…',
+ 'ᾖ' => 'ᾖ',
+ 'ᾗ' => 'ᾗ',
+ 'ᾘ' => 'ᾘ',
+ 'ᾙ' => 'ᾙ',
+ 'ᾚ' => 'ᾚ',
+ 'ᾛ' => 'ᾛ',
+ 'ᾜ' => 'ἨÌÍ…',
+ 'á¾' => 'ἩÌÍ…',
+ 'ᾞ' => 'ᾞ',
+ 'ᾟ' => 'ᾟ',
+ 'ᾠ' => 'ᾠ',
+ 'ᾡ' => 'ᾡ',
+ 'ᾢ' => 'ᾢ',
+ 'ᾣ' => 'ᾣ',
+ 'ᾤ' => 'ὠÌÍ…',
+ 'á¾¥' => 'ὡÌÍ…',
+ 'ᾦ' => 'ᾦ',
+ 'ᾧ' => 'ᾧ',
+ 'ᾨ' => 'ᾨ',
+ 'ᾩ' => 'ᾩ',
+ 'ᾪ' => 'ᾪ',
+ 'ᾫ' => 'ᾫ',
+ 'ᾬ' => 'ὨÌÍ…',
+ 'á¾' => 'ὩÌÍ…',
+ 'ᾮ' => 'ᾮ',
+ 'ᾯ' => 'ᾯ',
+ 'ᾰ' => 'ᾰ',
+ 'ᾱ' => 'ᾱ',
+ 'ᾲ' => 'ᾲ',
+ 'ᾳ' => 'ᾳ',
+ 'á¾´' => 'αÌÍ…',
+ 'ᾶ' => 'ᾶ',
+ 'ᾷ' => 'ᾷ',
+ 'Ᾰ' => 'Ᾰ',
+ 'Ᾱ' => 'Ᾱ',
+ 'Ὰ' => 'Ὰ',
+ 'á¾»' => 'ΑÌ',
+ 'ᾼ' => 'ᾼ',
+ 'ι' => 'ι',
+ 'á¿' => '῁',
+ 'ῂ' => 'ῂ',
+ 'ῃ' => 'ῃ',
+ 'á¿„' => 'ηÌÍ…',
+ 'ῆ' => 'ῆ',
+ 'ῇ' => 'ῇ',
+ 'Ὲ' => 'Ὲ',
+ 'Έ' => 'ΕÌ',
+ 'Ὴ' => 'Ὴ',
+ 'á¿‹' => 'ΗÌ',
+ 'ῌ' => 'ῌ',
+ 'á¿' => '῍',
+ 'á¿Ž' => '᾿Ì',
+ 'á¿' => '῏',
+ 'á¿' => 'ῐ',
+ 'ῑ' => 'ῑ',
+ 'ῒ' => 'ῒ',
+ 'á¿“' => 'ϊÌ',
+ 'ῖ' => 'ῖ',
+ 'ῗ' => 'ῗ',
+ 'Ῐ' => 'Ῐ',
+ 'Ῑ' => 'Ῑ',
+ 'Ὶ' => 'Ὶ',
+ 'á¿›' => 'ΙÌ',
+ 'á¿' => '῝',
+ 'á¿ž' => '῾Ì',
+ '῟' => '῟',
+ 'ῠ' => 'ῠ',
+ 'á¿¡' => 'Ï…Ì„',
+ 'ῢ' => 'ῢ',
+ 'á¿£' => 'ϋÌ',
+ 'ῤ' => 'ÏÌ“',
+ 'á¿¥' => 'ÏÌ”',
+ 'ῦ' => 'ῦ',
+ 'ῧ' => 'ῧ',
+ 'Ῠ' => 'Ῠ',
+ 'Ῡ' => 'Ῡ',
+ 'Ὺ' => 'Ὺ',
+ 'á¿«' => 'Î¥Ì',
+ 'Ῥ' => 'Ῥ',
+ 'á¿' => '῭',
+ 'á¿®' => '¨Ì',
+ '`' => '`',
+ 'ῲ' => 'ῲ',
+ 'ῳ' => 'ῳ',
+ 'á¿´' => 'ωÌÍ…',
+ 'ῶ' => 'ῶ',
+ 'ῷ' => 'ῷ',
+ 'Ὸ' => 'Ὸ',
+ 'Ό' => 'ΟÌ',
+ 'Ὼ' => 'Ὼ',
+ 'á¿»' => 'ΩÌ',
+ 'ῼ' => 'ῼ',
+ '´' => '´',
+ ' ' => ' ',
+ 'â€' => ' ',
+ 'Ω' => 'Ω',
+ 'K' => 'K',
+ 'â„«' => 'AÌŠ',
+ '↚' => 'â†Ì¸',
+ '↛' => '↛',
+ '↮' => '↮',
+ 'â‡' => 'â‡Ì¸',
+ '⇎' => '⇎',
+ 'â‡' => '⇏',
+ '∄' => '∄',
+ '∉' => '∉',
+ '∌' => '∌',
+ '∤' => '∤',
+ '∦' => '∦',
+ 'â‰' => '≁',
+ '≄' => '≄',
+ '≇' => '≇',
+ '≉' => '≉',
+ '≠' => '≠',
+ '≢' => '≢',
+ 'â‰' => 'â‰Ì¸',
+ '≮' => '≮',
+ '≯' => '≯',
+ '≰' => '≰',
+ '≱' => '≱',
+ '≴' => '≴',
+ '≵' => '≵',
+ '≸' => '≸',
+ '≹' => '≹',
+ '⊀' => '⊀',
+ 'âŠ' => '⊁',
+ '⊄' => '⊄',
+ '⊅' => '⊅',
+ '⊈' => '⊈',
+ '⊉' => '⊉',
+ '⊬' => '⊬',
+ 'âŠ' => '⊭',
+ '⊮' => '⊮',
+ '⊯' => '⊯',
+ '⋠' => '⋠',
+ '⋡' => '⋡',
+ '⋢' => '⋢',
+ '⋣' => '⋣',
+ '⋪' => '⋪',
+ '⋫' => '⋫',
+ '⋬' => '⋬',
+ 'â‹' => '⋭',
+ '〈' => '〈',
+ '〉' => '〉',
+ 'â«œ' => 'â«Ì¸',
+ 'ãŒ' => 'ã‹ã‚™',
+ 'ãŽ' => 'ãã‚™',
+ 'ã' => 'ãã‚™',
+ 'ã’' => 'ã‘ã‚™',
+ 'ã”' => 'ã“ã‚™',
+ 'ã–' => 'ã•ã‚™',
+ 'ã˜' => 'ã—ã‚™',
+ 'ãš' => 'ã™ã‚™',
+ 'ãœ' => 'ã›ã‚™',
+ 'ãž' => 'ãã‚™',
+ 'ã ' => 'ãŸã‚™',
+ 'ã¢' => 'ã¡ã‚™',
+ 'ã¥' => 'ã¤ã‚™',
+ 'ã§' => 'ã¦ã‚™',
+ 'ã©' => 'ã¨ã‚™',
+ 'ã°' => 'ã¯ã‚™',
+ 'ã±' => 'ã¯ã‚š',
+ 'ã³' => 'ã²ã‚™',
+ 'ã´' => 'ã²ã‚š',
+ 'ã¶' => 'ãµã‚™',
+ 'ã·' => 'ãµã‚š',
+ 'ã¹' => 'ã¸ã‚™',
+ 'ãº' => 'ã¸ã‚š',
+ 'ã¼' => 'ã»ã‚™',
+ 'ã½' => 'ã»ã‚š',
+ 'ã‚”' => 'ã†ã‚™',
+ 'ã‚ž' => 'ã‚ã‚™',
+ 'ガ' => 'ガ',
+ 'ã‚®' => 'ã‚ã‚™',
+ 'グ' => 'グ',
+ 'ゲ' => 'ゲ',
+ 'ゴ' => 'ゴ',
+ 'ザ' => 'ザ',
+ 'ジ' => 'ジ',
+ 'ズ' => 'ズ',
+ 'ゼ' => 'ゼ',
+ 'ゾ' => 'ゾ',
+ 'ダ' => 'ダ',
+ 'ヂ' => 'ãƒã‚™',
+ 'ヅ' => 'ヅ',
+ 'デ' => 'デ',
+ 'ド' => 'ド',
+ 'ãƒ' => 'ãƒã‚™',
+ 'パ' => 'ãƒã‚š',
+ 'ビ' => 'ビ',
+ 'ピ' => 'ピ',
+ 'ブ' => 'ブ',
+ 'プ' => 'プ',
+ 'ベ' => 'ベ',
+ 'ペ' => 'ペ',
+ 'ボ' => 'ボ',
+ 'ãƒ' => 'ポ',
+ 'ヴ' => 'ヴ',
+ 'ヷ' => 'ヷ',
+ 'ヸ' => 'ヸ',
+ 'ヹ' => 'ヹ',
+ 'ヺ' => 'ヺ',
+ 'ヾ' => 'ヾ',
+ '豈' => '豈',
+ 'ï¤' => 'æ›´',
+ '車' => '車',
+ '賈' => '賈',
+ '滑' => '滑',
+ '串' => '串',
+ '句' => 'å¥',
+ '龜' => '龜',
+ '龜' => '龜',
+ '契' => '契',
+ '金' => '金',
+ '喇' => '喇',
+ '奈' => '奈',
+ 'ï¤' => '懶',
+ '癩' => '癩',
+ 'ï¤' => 'ç¾…',
+ 'ï¤' => '蘿',
+ '螺' => '螺',
+ '裸' => '裸',
+ '邏' => 'é‚',
+ '樂' => '樂',
+ '洛' => '洛',
+ '烙' => '烙',
+ '珞' => 'çž',
+ '落' => 'è½',
+ '酪' => '酪',
+ '駱' => '駱',
+ '亂' => '亂',
+ '卵' => 'åµ',
+ 'ï¤' => '欄',
+ '爛' => '爛',
+ '蘭' => 'è˜',
+ 'ï¤ ' => '鸞',
+ '嵐' => 'åµ',
+ '濫' => '濫',
+ '藍' => 'è—',
+ '襤' => '襤',
+ '拉' => '拉',
+ '臘' => '臘',
+ '蠟' => 'è Ÿ',
+ '廊' => '廊',
+ '朗' => '朗',
+ '浪' => '浪',
+ '狼' => '狼',
+ '郎' => '郎',
+ 'ï¤' => '來',
+ '冷' => '冷',
+ '勞' => '勞',
+ '擄' => '擄',
+ '櫓' => '櫓',
+ '爐' => 'çˆ',
+ '盧' => '盧',
+ '老' => 'è€',
+ '蘆' => '蘆',
+ '虜' => '虜',
+ '路' => '路',
+ '露' => '露',
+ '魯' => 'é¯',
+ '鷺' => '鷺',
+ '碌' => '碌',
+ '祿' => '祿',
+ '綠' => 'ç¶ ',
+ '菉' => 'è‰',
+ '錄' => '錄',
+ '鹿' => '鹿',
+ 'ï¥' => 'è«–',
+ '壟' => '壟',
+ '弄' => '弄',
+ '籠' => 'ç± ',
+ '聾' => 'è¾',
+ '牢' => '牢',
+ '磊' => '磊',
+ '賂' => '賂',
+ '雷' => '雷',
+ '壘' => '壘',
+ '屢' => '屢',
+ '樓' => '樓',
+ 'ï¥' => 'æ·š',
+ '漏' => 'æ¼',
+ 'ï¥' => 'ç´¯',
+ 'ï¥' => '縷',
+ '陋' => '陋',
+ '勒' => '勒',
+ '肋' => '肋',
+ '凜' => '凜',
+ '凌' => '凌',
+ '稜' => '稜',
+ '綾' => '綾',
+ '菱' => 'è±',
+ '陵' => '陵',
+ '讀' => '讀',
+ '拏' => 'æ‹',
+ '樂' => '樂',
+ 'ï¥' => '諾',
+ '丹' => '丹',
+ '寧' => '寧',
+ 'ï¥ ' => '怒',
+ '率' => '率',
+ '異' => '異',
+ '北' => '北',
+ '磻' => '磻',
+ '便' => '便',
+ '復' => '復',
+ '不' => 'ä¸',
+ '泌' => '泌',
+ '數' => '數',
+ '索' => '索',
+ '參' => 'åƒ',
+ '塞' => '塞',
+ 'ï¥' => 'çœ',
+ '葉' => '葉',
+ '說' => '說',
+ '殺' => '殺',
+ '辰' => '辰',
+ '沈' => '沈',
+ '拾' => '拾',
+ '若' => '若',
+ '掠' => 'æŽ ',
+ '略' => '略',
+ '亮' => '亮',
+ '兩' => '兩',
+ '凉' => '凉',
+ '梁' => 'æ¢',
+ '糧' => '糧',
+ '良' => '良',
+ '諒' => '諒',
+ '量' => 'é‡',
+ '勵' => '勵',
+ '呂' => '呂',
+ 'ï¦' => '女',
+ '廬' => '廬',
+ '旅' => '旅',
+ '濾' => '濾',
+ '礪' => '礪',
+ '閭' => 'é–',
+ '驪' => '驪',
+ '麗' => '麗',
+ '黎' => '黎',
+ '力' => '力',
+ '曆' => '曆',
+ '歷' => 'æ·',
+ 'ï¦' => 'è½¢',
+ '年' => '年',
+ 'ï¦' => 'æ†',
+ 'ï¦' => '戀',
+ '撚' => '撚',
+ '漣' => '漣',
+ '煉' => '煉',
+ '璉' => '璉',
+ '秊' => '秊',
+ '練' => '練',
+ '聯' => 'è¯',
+ '輦' => '輦',
+ '蓮' => '蓮',
+ '連' => '連',
+ '鍊' => 'éŠ',
+ '列' => '列',
+ 'ï¦' => '劣',
+ '咽' => '咽',
+ '烈' => '烈',
+ 'ï¦ ' => '裂',
+ '說' => '說',
+ '廉' => '廉',
+ '念' => '念',
+ '捻' => 'æ»',
+ '殮' => '殮',
+ '簾' => '簾',
+ '獵' => 'çµ',
+ '令' => '令',
+ '囹' => '囹',
+ '寧' => '寧',
+ '嶺' => '嶺',
+ '怜' => '怜',
+ 'ï¦' => '玲',
+ '瑩' => '瑩',
+ '羚' => '羚',
+ '聆' => 'è†',
+ '鈴' => '鈴',
+ '零' => '零',
+ '靈' => 'éˆ',
+ '領' => 'é ˜',
+ '例' => '例',
+ '禮' => '禮',
+ '醴' => '醴',
+ '隸' => '隸',
+ '惡' => '惡',
+ '了' => '了',
+ '僚' => '僚',
+ '寮' => '寮',
+ '尿' => '尿',
+ '料' => '料',
+ '樂' => '樂',
+ '燎' => '燎',
+ 'ï§' => '療',
+ '蓼' => '蓼',
+ '遼' => 'é¼',
+ '龍' => 'é¾',
+ '暈' => '暈',
+ '阮' => '阮',
+ '劉' => '劉',
+ '杻' => 'æ»',
+ '柳' => '柳',
+ '流' => 'æµ',
+ '溜' => '溜',
+ '琉' => 'ç‰',
+ 'ï§' => 'ç•™',
+ '硫' => '硫',
+ 'ï§' => 'ç´',
+ 'ï§' => 'é¡ž',
+ '六' => 'å…',
+ '戮' => '戮',
+ '陸' => '陸',
+ '倫' => '倫',
+ '崙' => '崙',
+ '淪' => '淪',
+ '輪' => '輪',
+ '律' => '律',
+ '慄' => '慄',
+ '栗' => 'æ —',
+ '率' => '率',
+ '隆' => '隆',
+ 'ï§' => '利',
+ '吏' => 'å',
+ '履' => '履',
+ 'ï§ ' => '易',
+ '李' => 'æŽ',
+ '梨' => '梨',
+ '泥' => '泥',
+ '理' => 'ç†',
+ '痢' => '痢',
+ '罹' => '罹',
+ '裏' => 'è£',
+ '裡' => '裡',
+ '里' => '里',
+ '離' => '離',
+ '匿' => '匿',
+ '溺' => '溺',
+ 'ï§' => 'å',
+ '燐' => 'ç‡',
+ '璘' => '璘',
+ '藺' => '藺',
+ '隣' => '隣',
+ '鱗' => '鱗',
+ '麟' => '麟',
+ '林' => '林',
+ '淋' => '淋',
+ '臨' => '臨',
+ '立' => '立',
+ '笠' => 'ç¬ ',
+ '粒' => '粒',
+ '狀' => '狀',
+ '炙' => '炙',
+ '識' => 'è˜',
+ '什' => '什',
+ '茶' => '茶',
+ '刺' => '刺',
+ '切' => '切',
+ 'ï¨' => '度',
+ '拓' => '拓',
+ '糖' => '糖',
+ '宅' => '宅',
+ '洞' => '洞',
+ '暴' => '暴',
+ '輻' => '輻',
+ '行' => '行',
+ '降' => 'é™',
+ '見' => '見',
+ '廓' => '廓',
+ '兀' => '兀',
+ 'ï¨' => 'å—€',
+ 'ï¨' => 'å¡š',
+ '晴' => '晴',
+ '凞' => '凞',
+ '猪' => '猪',
+ '益' => '益',
+ '礼' => '礼',
+ '神' => '神',
+ '祥' => '祥',
+ '福' => 'ç¦',
+ '靖' => 'é–',
+ 'ï¨' => 'ç²¾',
+ '羽' => '羽',
+ 'ï¨ ' => '蘒',
+ '諸' => '諸',
+ '逸' => '逸',
+ '都' => '都',
+ '飯' => '飯',
+ '飼' => '飼',
+ '館' => '館',
+ 'ï¨' => '鶴',
+ '郞' => '郞',
+ '隷' => '隷',
+ '侮' => '侮',
+ '僧' => '僧',
+ '免' => 'å…',
+ '勉' => '勉',
+ '勤' => '勤',
+ '卑' => 'å‘',
+ '喝' => 'å–',
+ '嘆' => '嘆',
+ '器' => '器',
+ '塀' => '塀',
+ '墨' => '墨',
+ '層' => '層',
+ '屮' => '屮',
+ '悔' => '悔',
+ '慨' => '慨',
+ '憎' => '憎',
+ '懲' => '懲',
+ 'ï©' => 'æ•',
+ 'ï©‚' => 'æ—¢',
+ '暑' => '暑',
+ '梅' => '梅',
+ 'ï©…' => 'æµ·',
+ '渚' => '渚',
+ '漢' => '漢',
+ '煮' => '煮',
+ '爫' => '爫',
+ 'ï©Š' => 'ç¢',
+ '碑' => '碑',
+ '社' => '社',
+ 'ï©' => '祉',
+ '祈' => '祈',
+ 'ï©' => 'ç¥',
+ 'ï©' => '祖',
+ 'ï©‘' => 'ç¥',
+ 'ï©’' => 'ç¦',
+ '禎' => '禎',
+ 'ï©”' => 'ç©€',
+ 'ï©•' => 'çª',
+ '節' => '節',
+ 'ï©—' => 'ç·´',
+ '縉' => '縉',
+ 'ï©™' => 'ç¹',
+ 'ï©š' => 'ç½²',
+ '者' => '者',
+ 'ï©œ' => 'è‡',
+ 'ï©' => '艹',
+ '艹' => '艹',
+ 'ï©Ÿ' => 'è‘—',
+ 'ï© ' => 'è¤',
+ '視' => '視',
+ 'ï©¢' => 'è¬',
+ '謹' => '謹',
+ '賓' => '賓',
+ 'ï©¥' => 'è´ˆ',
+ '辶' => '辶',
+ '逸' => '逸',
+ '難' => '難',
+ '響' => '響',
+ '頻' => 'é »',
+ 'ï©«' => 'æµ',
+ '𤋮' => '𤋮',
+ 'ï©' => '舘',
+ '並' => '並',
+ '况' => '况',
+ '全' => '全',
+ '侀' => '侀',
+ 'ï©´' => 'å……',
+ '冀' => '冀',
+ '勇' => '勇',
+ '勺' => '勺',
+ '喝' => 'å–',
+ '啕' => '啕',
+ '喙' => '喙',
+ 'ï©»' => 'å—¢',
+ '塚' => '塚',
+ '墳' => '墳',
+ '奄' => '奄',
+ '奔' => '奔',
+ '婢' => '婢',
+ 'ïª' => '嬨',
+ '廒' => '廒',
+ '廙' => '廙',
+ '彩' => '彩',
+ '徭' => 'å¾',
+ '惘' => '惘',
+ '慎' => '慎',
+ '愈' => '愈',
+ '憎' => '憎',
+ '慠' => 'æ… ',
+ '懲' => '懲',
+ '戴' => '戴',
+ 'ïª' => 'æ„',
+ '搜' => 'æœ',
+ 'ïª' => 'æ‘’',
+ 'ïª' => 'æ•–',
+ '晴' => '晴',
+ '朗' => '朗',
+ '望' => '望',
+ '杖' => 'æ–',
+ '歹' => 'æ¹',
+ '殺' => '殺',
+ '流' => 'æµ',
+ '滛' => '滛',
+ '滋' => '滋',
+ '漢' => '漢',
+ '瀞' => '瀞',
+ '煮' => '煮',
+ 'ïª' => '瞧',
+ '爵' => '爵',
+ '犯' => '犯',
+ 'ïª ' => '猪',
+ '瑱' => '瑱',
+ '甆' => '甆',
+ '画' => '画',
+ '瘝' => 'ç˜',
+ '瘟' => '瘟',
+ '益' => '益',
+ '盛' => '盛',
+ '直' => '直',
+ '睊' => 'çŠ',
+ '着' => 'ç€',
+ '磌' => '磌',
+ '窱' => '窱',
+ 'ïª' => '節',
+ '类' => '类',
+ '絛' => '絛',
+ '練' => '練',
+ '缾' => '缾',
+ '者' => '者',
+ '荒' => 'è’',
+ '華' => 'è¯',
+ '蝹' => 'è¹',
+ '襁' => 'è¥',
+ '覆' => '覆',
+ '視' => '視',
+ '調' => '調',
+ '諸' => '諸',
+ '請' => '請',
+ '謁' => 'è¬',
+ '諾' => '諾',
+ '諭' => 'è«',
+ '謹' => '謹',
+ '變' => '變',
+ 'ï«' => 'è´ˆ',
+ '輸' => '輸',
+ '遲' => 'é²',
+ '醙' => '醙',
+ '鉶' => '鉶',
+ '陼' => '陼',
+ '難' => '難',
+ '靖' => 'é–',
+ '韛' => '韛',
+ '響' => '響',
+ 'ï«‹' => 'é ‹',
+ 'ï«Œ' => 'é »',
+ 'ï«' => '鬒',
+ '龜' => '龜',
+ 'ï«' => '𢡊',
+ 'ï«' => '𢡄',
+ 'ï«‘' => 'ð£•',
+ 'ï«’' => 'ã®',
+ '䀘' => '䀘',
+ '䀹' => '䀹',
+ '𥉉' => '𥉉',
+ 'ï«–' => 'ð¥³',
+ '𧻓' => '𧻓',
+ '齃' => '齃',
+ '龎' => '龎',
+ 'ï¬' => '×™Ö´',
+ 'ײַ' => 'ײַ',
+ 'שׁ' => 'ש×',
+ 'שׂ' => 'שׂ',
+ 'שּׁ' => 'שּ×',
+ 'ï¬' => 'שּׂ',
+ 'אַ' => '×Ö·',
+ 'אָ' => '×Ö¸',
+ 'אּ' => '×Ö¼',
+ 'בּ' => 'בּ',
+ 'גּ' => 'גּ',
+ 'דּ' => 'דּ',
+ 'הּ' => 'הּ',
+ 'וּ' => 'וּ',
+ 'זּ' => 'זּ',
+ 'טּ' => 'טּ',
+ 'יּ' => 'יּ',
+ 'ךּ' => 'ךּ',
+ 'כּ' => 'כּ',
+ 'לּ' => 'לּ',
+ 'מּ' => 'מּ',
+ 'ï€' => '× Ö¼',
+ 'ï' => 'סּ',
+ 'ïƒ' => '×£Ö¼',
+ 'ï„' => 'פּ',
+ 'ï†' => 'צּ',
+ 'ï‡' => 'קּ',
+ 'ïˆ' => 'רּ',
+ 'ï‰' => 'שּ',
+ 'ïŠ' => 'תּ',
+ 'ï‹' => 'וֹ',
+ 'ïŒ' => 'בֿ',
+ 'ï' => '×›Ö¿',
+ 'ïŽ' => 'פֿ',
+ '𑂚' => '𑂚',
+ '𑂜' => '𑂜',
+ '𑂫' => '𑂫',
+ '𑄮' => '𑄮',
+ '𑄯' => '𑄯',
+ 'ð‘‹' => 'ð‘‡ð‘Œ¾',
+ 'ð‘Œ' => 'ð‘‡ð‘—',
+ '𑒻' => '𑒻',
+ '𑒼' => '𑒼',
+ '𑒾' => '𑒾',
+ '𑖺' => '𑖺',
+ '𑖻' => '𑖻',
+ '𑤸' => '𑤸',
+ 'ð…ž' => 'ð…—ð…¥',
+ 'ð…Ÿ' => 'ð…˜ð…¥',
+ 'ð… ' => 'ð…˜ð…¥ð…®',
+ 'ð…¡' => 'ð…˜ð…¥ð…¯',
+ 'ð…¢' => 'ð…˜ð…¥ð…°',
+ 'ð…£' => 'ð…˜ð…¥ð…±',
+ 'ð…¤' => 'ð…˜ð…¥ð…²',
+ 'ð†»' => 'ð†¹ð…¥',
+ 'ð†¼' => 'ð†ºð…¥',
+ 'ð†½' => 'ð†¹ð…¥ð…®',
+ 'ð†¾' => 'ð†ºð…¥ð…®',
+ 'ð†¿' => 'ð†¹ð…¥ð…¯',
+ 'ð‡€' => 'ð†ºð…¥ð…¯',
+ '丽' => '丽',
+ 'ð¯ ' => '丸',
+ '乁' => 'ä¹',
+ '𠄢' => '𠄢',
+ '你' => 'ä½ ',
+ '侮' => '侮',
+ '侻' => '侻',
+ '倂' => '倂',
+ '偺' => 'åº',
+ '備' => '備',
+ '僧' => '僧',
+ '像' => 'åƒ',
+ '㒞' => '㒞',
+ 'ð¯ ' => '𠘺',
+ '免' => 'å…',
+ 'ð¯ ' => 'å…”',
+ 'ð¯ ' => 'å…¤',
+ '具' => '具',
+ '𠔜' => '𠔜',
+ '㒹' => '㒹',
+ '內' => '內',
+ '再' => 'å†',
+ '𠕋' => '𠕋',
+ '冗' => '冗',
+ '冤' => '冤',
+ '仌' => '仌',
+ '冬' => '冬',
+ '况' => '况',
+ '𩇟' => '𩇟',
+ 'ð¯ ' => '凵',
+ '刃' => '刃',
+ '㓟' => '㓟',
+ 'ð¯ ' => '刻',
+ '剆' => '剆',
+ '割' => '割',
+ '剷' => '剷',
+ '㔕' => '㔕',
+ '勇' => '勇',
+ '勉' => '勉',
+ '勤' => '勤',
+ '勺' => '勺',
+ '包' => '包',
+ '匆' => '匆',
+ '北' => '北',
+ '卉' => 'å‰',
+ 'ð¯ ' => 'å‘',
+ '博' => 'åš',
+ '即' => 'å³',
+ '卽' => 'å½',
+ '卿' => 'å¿',
+ '卿' => 'å¿',
+ '卿' => 'å¿',
+ '𠨬' => '𠨬',
+ '灰' => 'ç°',
+ '及' => 'åŠ',
+ '叟' => 'åŸ',
+ '𠭣' => 'ð £',
+ '叫' => 'å«',
+ '叱' => 'å±',
+ '吆' => 'å†',
+ '咞' => '咞',
+ '吸' => 'å¸',
+ '呈' => '呈',
+ '周' => '周',
+ '咢' => '咢',
+ 'ð¯¡' => '哶',
+ '唐' => 'å”',
+ '啓' => '啓',
+ '啣' => '啣',
+ '善' => '善',
+ '善' => '善',
+ '喙' => '喙',
+ '喫' => '喫',
+ '喳' => '喳',
+ '嗂' => '嗂',
+ '圖' => '圖',
+ '嘆' => '嘆',
+ 'ð¯¡' => '圗',
+ '噑' => '噑',
+ 'ð¯¡' => 'å™´',
+ 'ð¯¡' => '切',
+ '壮' => '壮',
+ '城' => '城',
+ '埴' => '埴',
+ '堍' => 'å ',
+ '型' => '型',
+ '堲' => 'å ²',
+ '報' => 'å ±',
+ '墬' => '墬',
+ '𡓤' => '𡓤',
+ '売' => '売',
+ '壷' => '壷',
+ '夆' => '夆',
+ 'ð¯¡' => '多',
+ '夢' => '夢',
+ '奢' => '奢',
+ '𡚨' => '𡚨',
+ '𡛪' => '𡛪',
+ '姬' => '姬',
+ '娛' => '娛',
+ '娧' => '娧',
+ '姘' => '姘',
+ '婦' => '婦',
+ '㛮' => '㛮',
+ '㛼' => '㛼',
+ '嬈' => '嬈',
+ '嬾' => '嬾',
+ '嬾' => '嬾',
+ '𡧈' => '𡧈',
+ 'ð¯¡' => '寃',
+ '寘' => '寘',
+ '寧' => '寧',
+ '寳' => '寳',
+ '𡬘' => '𡬘',
+ '寿' => '寿',
+ '将' => '将',
+ '当' => '当',
+ '尢' => '尢',
+ '㞁' => 'ãž',
+ '屠' => 'å± ',
+ '屮' => '屮',
+ '峀' => '峀',
+ '岍' => 'å²',
+ '𡷤' => '𡷤',
+ '嵃' => '嵃',
+ '𡷦' => '𡷦',
+ '嵮' => '嵮',
+ '嵫' => '嵫',
+ '嵼' => '嵼',
+ 'ð¯¢' => 'å·¡',
+ '巢' => '巢',
+ '㠯' => '㠯',
+ '巽' => '巽',
+ '帨' => '帨',
+ '帽' => '帽',
+ '幩' => '幩',
+ '㡢' => '㡢',
+ '𢆃' => '𢆃',
+ '㡼' => '㡼',
+ '庰' => '庰',
+ '庳' => '庳',
+ 'ð¯¢' => '庶',
+ '廊' => '廊',
+ 'ð¯¢' => '𪎒',
+ 'ð¯¢' => '廾',
+ '𢌱' => '𢌱',
+ '𢌱' => '𢌱',
+ '舁' => 'èˆ',
+ '弢' => '弢',
+ '弢' => '弢',
+ '㣇' => '㣇',
+ '𣊸' => '𣊸',
+ '𦇚' => '𦇚',
+ '形' => '形',
+ '彫' => '彫',
+ '㣣' => '㣣',
+ '徚' => '徚',
+ 'ð¯¢' => 'å¿',
+ '志' => '志',
+ '忹' => '忹',
+ '悁' => 'æ‚',
+ '㤺' => '㤺',
+ '㤜' => '㤜',
+ '悔' => '悔',
+ '𢛔' => '𢛔',
+ '惇' => '惇',
+ '慈' => '慈',
+ '慌' => '慌',
+ '慎' => '慎',
+ '慌' => '慌',
+ '慺' => '慺',
+ '憎' => '憎',
+ '憲' => '憲',
+ 'ð¯¢' => '憤',
+ '憯' => '憯',
+ '懞' => '懞',
+ '懲' => '懲',
+ '懶' => '懶',
+ '成' => 'æˆ',
+ '戛' => '戛',
+ '扝' => 'æ‰',
+ '抱' => '抱',
+ '拔' => '拔',
+ '捐' => 'æ',
+ '𢬌' => '𢬌',
+ '挽' => '挽',
+ '拼' => '拼',
+ '捨' => 'æ¨',
+ '掃' => '掃',
+ '揤' => 'æ¤',
+ '𢯱' => '𢯱',
+ '搢' => 'æ¢',
+ '揅' => 'æ…',
+ 'ð¯£' => '掩',
+ '㨮' => '㨮',
+ '摩' => '摩',
+ '摾' => '摾',
+ '撝' => 'æ’',
+ '摷' => '摷',
+ '㩬' => '㩬',
+ '敏' => 'æ•',
+ '敬' => '敬',
+ '𣀊' => '𣀊',
+ '旣' => '旣',
+ '書' => '書',
+ 'ð¯£' => '晉',
+ '㬙' => '㬙',
+ 'ð¯£' => 'æš‘',
+ 'ð¯£' => '㬈',
+ '㫤' => '㫤',
+ '冒' => '冒',
+ '冕' => '冕',
+ '最' => '最',
+ '暜' => '暜',
+ '肭' => 'è‚',
+ '䏙' => 'ä™',
+ '朗' => '朗',
+ '望' => '望',
+ '朡' => '朡',
+ '杞' => 'æž',
+ '杓' => 'æ“',
+ 'ð¯£' => 'ð£ƒ',
+ '㭉' => 'ã‰',
+ '柺' => '柺',
+ '枅' => '枅',
+ '桒' => '桒',
+ '梅' => '梅',
+ '𣑭' => 'ð£‘',
+ '梎' => '梎',
+ '栟' => 'æ Ÿ',
+ '椔' => '椔',
+ '㮝' => 'ã®',
+ '楂' => '楂',
+ '榣' => '榣',
+ '槪' => '槪',
+ '檨' => '檨',
+ '𣚣' => '𣚣',
+ 'ð¯£' => 'æ«›',
+ '㰘' => '㰘',
+ '次' => '次',
+ '𣢧' => '𣢧',
+ '歔' => 'æ”',
+ '㱎' => '㱎',
+ '歲' => 'æ²',
+ '殟' => '殟',
+ '殺' => '殺',
+ '殻' => '殻',
+ '𣪍' => 'ð£ª',
+ '𡴋' => '𡴋',
+ '𣫺' => '𣫺',
+ '汎' => '汎',
+ '𣲼' => '𣲼',
+ '沿' => '沿',
+ '泍' => 'æ³',
+ '汧' => '汧',
+ '洖' => '洖',
+ '派' => '派',
+ 'ð¯¤' => 'æµ·',
+ '流' => 'æµ',
+ '浩' => '浩',
+ '浸' => '浸',
+ '涅' => '涅',
+ '𣴞' => '𣴞',
+ '洴' => '洴',
+ '港' => '港',
+ '湮' => '湮',
+ '㴳' => '㴳',
+ '滋' => '滋',
+ '滇' => '滇',
+ 'ð¯¤' => '𣻑',
+ '淹' => '淹',
+ 'ð¯¤' => 'æ½®',
+ 'ð¯¤' => '𣽞',
+ '𣾎' => '𣾎',
+ '濆' => '濆',
+ '瀹' => '瀹',
+ '瀞' => '瀞',
+ '瀛' => '瀛',
+ '㶖' => '㶖',
+ '灊' => 'çŠ',
+ '災' => 'ç½',
+ '灷' => 'ç·',
+ '炭' => 'ç‚',
+ '𠔥' => '𠔥',
+ '煅' => '煅',
+ 'ð¯¤' => '𤉣',
+ '熜' => '熜',
+ '𤎫' => '𤎫',
+ '爨' => '爨',
+ '爵' => '爵',
+ '牐' => 'ç‰',
+ '𤘈' => '𤘈',
+ '犀' => '犀',
+ '犕' => '犕',
+ '𤜵' => '𤜵',
+ '𤠔' => '𤠔',
+ '獺' => 'çº',
+ '王' => '王',
+ '㺬' => '㺬',
+ '玥' => '玥',
+ '㺸' => '㺸',
+ 'ð¯¤' => '㺸',
+ '瑇' => '瑇',
+ '瑜' => '瑜',
+ '瑱' => '瑱',
+ '璅' => '璅',
+ '瓊' => '瓊',
+ '㼛' => '㼛',
+ '甤' => '甤',
+ '𤰶' => '𤰶',
+ '甾' => '甾',
+ '𤲒' => '𤲒',
+ '異' => '異',
+ '𢆟' => '𢆟',
+ '瘐' => 'ç˜',
+ '𤾡' => '𤾡',
+ '𤾸' => '𤾸',
+ '𥁄' => 'ð¥„',
+ '㿼' => '㿼',
+ '䀈' => '䀈',
+ '直' => '直',
+ 'ð¯¥' => '𥃳',
+ '𥃲' => '𥃲',
+ '𥄙' => '𥄙',
+ '𥄳' => '𥄳',
+ '眞' => '眞',
+ '真' => '真',
+ '真' => '真',
+ '睊' => 'çŠ',
+ '䀹' => '䀹',
+ '瞋' => '瞋',
+ '䁆' => 'ä†',
+ '䂖' => '䂖',
+ 'ð¯¥' => 'ð¥',
+ '硎' => '硎',
+ 'ð¯¥' => '碌',
+ 'ð¯¥' => '磌',
+ '䃣' => '䃣',
+ '𥘦' => '𥘦',
+ '祖' => '祖',
+ '𥚚' => '𥚚',
+ '𥛅' => '𥛅',
+ '福' => 'ç¦',
+ '秫' => '秫',
+ '䄯' => '䄯',
+ '穀' => '穀',
+ '穊' => '穊',
+ '穏' => 'ç©',
+ '𥥼' => '𥥼',
+ 'ð¯¥' => '𥪧',
+ '𥪧' => '𥪧',
+ '竮' => '竮',
+ '䈂' => '䈂',
+ '𥮫' => '𥮫',
+ '篆' => '篆',
+ '築' => '築',
+ '䈧' => '䈧',
+ '𥲀' => '𥲀',
+ '糒' => '糒',
+ '䊠' => 'äŠ ',
+ '糨' => '糨',
+ '糣' => '糣',
+ '紀' => '紀',
+ '𥾆' => '𥾆',
+ '絣' => '絣',
+ 'ð¯¥' => 'äŒ',
+ '緇' => '緇',
+ '縂' => '縂',
+ '繅' => '繅',
+ '䌴' => '䌴',
+ '𦈨' => '𦈨',
+ '𦉇' => '𦉇',
+ '䍙' => 'ä™',
+ '𦋙' => '𦋙',
+ '罺' => '罺',
+ '𦌾' => '𦌾',
+ '羕' => '羕',
+ '翺' => '翺',
+ '者' => '者',
+ '𦓚' => '𦓚',
+ '𦔣' => '𦔣',
+ '聠' => 'è ',
+ '𦖨' => '𦖨',
+ '聰' => 'è°',
+ '𣍟' => 'ð£Ÿ',
+ 'ð¯¦' => 'ä•',
+ '育' => '育',
+ '脃' => '脃',
+ '䐋' => 'ä‹',
+ '脾' => '脾',
+ '媵' => '媵',
+ '𦞧' => '𦞧',
+ '𦞵' => '𦞵',
+ '𣎓' => '𣎓',
+ '𣎜' => '𣎜',
+ '舁' => 'èˆ',
+ '舄' => '舄',
+ 'ð¯¦' => '辞',
+ '䑫' => '䑫',
+ 'ð¯¦' => '芑',
+ 'ð¯¦' => '芋',
+ '芝' => 'èŠ',
+ '劳' => '劳',
+ '花' => '花',
+ '芳' => '芳',
+ '芽' => '芽',
+ '苦' => '苦',
+ '𦬼' => '𦬼',
+ '若' => '若',
+ '茝' => 'èŒ',
+ '荣' => 'è£',
+ '莭' => 'èŽ',
+ '茣' => '茣',
+ 'ð¯¦' => '莽',
+ '菧' => 'è§',
+ '著' => '著',
+ '荓' => 'è“',
+ '菊' => 'èŠ',
+ '菌' => 'èŒ',
+ '菜' => 'èœ',
+ '𦰶' => '𦰶',
+ '𦵫' => '𦵫',
+ '𦳕' => '𦳕',
+ '䔫' => '䔫',
+ '蓱' => '蓱',
+ '蓳' => '蓳',
+ '蔖' => '蔖',
+ '𧏊' => 'ð§Š',
+ '蕤' => '蕤',
+ 'ð¯¦' => '𦼬',
+ '䕝' => 'ä•',
+ '䕡' => '䕡',
+ '𦾱' => '𦾱',
+ '𧃒' => '𧃒',
+ '䕫' => '䕫',
+ '虐' => 'è™',
+ '虜' => '虜',
+ '虧' => '虧',
+ '虩' => '虩',
+ '蚩' => '蚩',
+ '蚈' => '蚈',
+ '蜎' => '蜎',
+ '蛢' => '蛢',
+ '蝹' => 'è¹',
+ '蜨' => '蜨',
+ '蝫' => 'è«',
+ '螆' => '螆',
+ '䗗' => '䗗',
+ '蟡' => '蟡',
+ 'ð¯§' => 'è ',
+ '䗹' => '䗹',
+ '衠' => 'è¡ ',
+ '衣' => '衣',
+ '𧙧' => '𧙧',
+ '裗' => '裗',
+ '裞' => '裞',
+ '䘵' => '䘵',
+ '裺' => '裺',
+ '㒻' => '㒻',
+ '𧢮' => '𧢮',
+ '𧥦' => '𧥦',
+ 'ð¯§' => 'äš¾',
+ '䛇' => '䛇',
+ 'ð¯§' => 'èª ',
+ 'ð¯§' => 'è«',
+ '變' => '變',
+ '豕' => '豕',
+ '𧲨' => '𧲨',
+ '貫' => '貫',
+ '賁' => 'è³',
+ '贛' => '贛',
+ '起' => '起',
+ '𧼯' => '𧼯',
+ '𠠄' => 'ð „',
+ '跋' => '跋',
+ '趼' => '趼',
+ '跰' => '跰',
+ 'ð¯§' => '𠣞',
+ '軔' => '軔',
+ '輸' => '輸',
+ '𨗒' => '𨗒',
+ '𨗭' => 'ð¨—',
+ '邔' => '邔',
+ '郱' => '郱',
+ '鄑' => '鄑',
+ '𨜮' => '𨜮',
+ '鄛' => '鄛',
+ '鈸' => '鈸',
+ '鋗' => '鋗',
+ '鋘' => '鋘',
+ '鉼' => '鉼',
+ '鏹' => 'é¹',
+ '鐕' => 'é•',
+ 'ð¯§' => '𨯺',
+ '開' => '開',
+ '䦕' => '䦕',
+ '閷' => '閷',
+ '𨵷' => '𨵷',
+ '䧦' => '䧦',
+ '雃' => '雃',
+ '嶲' => '嶲',
+ '霣' => '霣',
+ '𩅅' => '𩅅',
+ '𩈚' => '𩈚',
+ '䩮' => '䩮',
+ '䩶' => '䩶',
+ '韠' => 'éŸ ',
+ '𩐊' => 'ð©Š',
+ '䪲' => '䪲',
+ '𩒖' => '𩒖',
+ '頋' => 'é ‹',
+ '頋' => 'é ‹',
+ '頩' => 'é ©',
+ 'ð¯¨' => 'ð©–¶',
+ '飢' => '飢',
+ '䬳' => '䬳',
+ '餩' => '餩',
+ '馧' => '馧',
+ '駂' => '駂',
+ '駾' => '駾',
+ '䯎' => '䯎',
+ '𩬰' => '𩬰',
+ '鬒' => '鬒',
+ '鱀' => '鱀',
+ '鳽' => '鳽',
+ 'ð¯¨' => '䳎',
+ '䳭' => 'ä³',
+ 'ð¯¨' => '鵧',
+ 'ð¯¨' => '𪃎',
+ '䳸' => '䳸',
+ '𪄅' => '𪄅',
+ '𪈎' => '𪈎',
+ '𪊑' => '𪊑',
+ '麻' => '麻',
+ '䵖' => '䵖',
+ '黹' => '黹',
+ '黾' => '黾',
+ '鼅' => '鼅',
+ '鼏' => 'é¼',
+ '鼖' => '鼖',
+ '鼻' => '鼻',
+ 'ð¯¨' => '𪘀',
+);
diff --git a/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/combiningClass.php b/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/combiningClass.php
new file mode 100644
index 00000000..ec90f36e
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/combiningClass.php
@@ -0,0 +1,876 @@
+ 230,
+ 'Ì' => 230,
+ 'Ì‚' => 230,
+ '̃' => 230,
+ 'Ì„' => 230,
+ 'Ì…' => 230,
+ '̆' => 230,
+ '̇' => 230,
+ '̈' => 230,
+ '̉' => 230,
+ 'ÌŠ' => 230,
+ 'Ì‹' => 230,
+ '̌' => 230,
+ 'Ì' => 230,
+ 'ÌŽ' => 230,
+ 'Ì' => 230,
+ 'Ì' => 230,
+ 'Ì‘' => 230,
+ 'Ì’' => 230,
+ 'Ì“' => 230,
+ 'Ì”' => 230,
+ 'Ì•' => 232,
+ 'Ì–' => 220,
+ 'Ì—' => 220,
+ '̘' => 220,
+ 'Ì™' => 220,
+ 'Ìš' => 232,
+ 'Ì›' => 216,
+ '̜' => 220,
+ 'Ì' => 220,
+ 'Ìž' => 220,
+ 'ÌŸ' => 220,
+ 'Ì ' => 220,
+ 'Ì¡' => 202,
+ 'Ì¢' => 202,
+ 'Ì£' => 220,
+ '̤' => 220,
+ 'Ì¥' => 220,
+ '̦' => 220,
+ '̧' => 202,
+ '̨' => 202,
+ 'Ì©' => 220,
+ '̪' => 220,
+ 'Ì«' => 220,
+ '̬' => 220,
+ 'Ì' => 220,
+ 'Ì®' => 220,
+ '̯' => 220,
+ 'Ì°' => 220,
+ '̱' => 220,
+ '̲' => 220,
+ '̳' => 220,
+ 'Ì´' => 1,
+ '̵' => 1,
+ '̶' => 1,
+ 'Ì·' => 1,
+ '̸' => 1,
+ '̹' => 220,
+ '̺' => 220,
+ 'Ì»' => 220,
+ '̼' => 220,
+ '̽' => 230,
+ '̾' => 230,
+ 'Ì¿' => 230,
+ 'Í€' => 230,
+ 'Í' => 230,
+ 'Í‚' => 230,
+ '̓' => 230,
+ 'Í„' => 230,
+ 'Í…' => 240,
+ '͆' => 230,
+ '͇' => 220,
+ '͈' => 220,
+ '͉' => 220,
+ 'ÍŠ' => 230,
+ 'Í‹' => 230,
+ '͌' => 230,
+ 'Í' => 220,
+ 'ÍŽ' => 220,
+ 'Í' => 230,
+ 'Í‘' => 230,
+ 'Í’' => 230,
+ 'Í“' => 220,
+ 'Í”' => 220,
+ 'Í•' => 220,
+ 'Í–' => 220,
+ 'Í—' => 230,
+ '͘' => 232,
+ 'Í™' => 220,
+ 'Íš' => 220,
+ 'Í›' => 230,
+ '͜' => 233,
+ 'Í' => 234,
+ 'Íž' => 234,
+ 'ÍŸ' => 233,
+ 'Í ' => 234,
+ 'Í¡' => 234,
+ 'Í¢' => 233,
+ 'Í£' => 230,
+ 'ͤ' => 230,
+ 'Í¥' => 230,
+ 'ͦ' => 230,
+ 'ͧ' => 230,
+ 'ͨ' => 230,
+ 'Í©' => 230,
+ 'ͪ' => 230,
+ 'Í«' => 230,
+ 'ͬ' => 230,
+ 'Í' => 230,
+ 'Í®' => 230,
+ 'ͯ' => 230,
+ 'Òƒ' => 230,
+ 'Ò„' => 230,
+ 'Ò…' => 230,
+ 'Ò†' => 230,
+ 'Ò‡' => 230,
+ 'Ö‘' => 220,
+ 'Ö’' => 230,
+ 'Ö“' => 230,
+ 'Ö”' => 230,
+ 'Ö•' => 230,
+ 'Ö–' => 220,
+ 'Ö—' => 230,
+ 'Ö˜' => 230,
+ 'Ö™' => 230,
+ 'Öš' => 222,
+ 'Ö›' => 220,
+ '֜' => 230,
+ 'Ö' => 230,
+ 'Öž' => 230,
+ 'ÖŸ' => 230,
+ 'Ö ' => 230,
+ 'Ö¡' => 230,
+ 'Ö¢' => 220,
+ 'Ö£' => 220,
+ 'Ö¤' => 220,
+ 'Ö¥' => 220,
+ 'Ö¦' => 220,
+ 'Ö§' => 220,
+ 'Ö¨' => 230,
+ 'Ö©' => 230,
+ 'Öª' => 220,
+ 'Ö«' => 230,
+ 'Ö¬' => 230,
+ 'Ö' => 222,
+ 'Ö®' => 228,
+ 'Ö¯' => 230,
+ 'Ö°' => 10,
+ 'Ö±' => 11,
+ 'Ö²' => 12,
+ 'Ö³' => 13,
+ 'Ö´' => 14,
+ 'Öµ' => 15,
+ 'Ö¶' => 16,
+ 'Ö·' => 17,
+ 'Ö¸' => 18,
+ 'Ö¹' => 19,
+ 'Öº' => 19,
+ 'Ö»' => 20,
+ 'Ö¼' => 21,
+ 'Ö½' => 22,
+ 'Ö¿' => 23,
+ '×' => 24,
+ 'ׂ' => 25,
+ 'ׄ' => 230,
+ '×…' => 220,
+ 'ׇ' => 18,
+ 'Ø' => 230,
+ 'Ø‘' => 230,
+ 'Ø’' => 230,
+ 'Ø“' => 230,
+ 'Ø”' => 230,
+ 'Ø•' => 230,
+ 'Ø–' => 230,
+ 'Ø—' => 230,
+ 'ؘ' => 30,
+ 'Ø™' => 31,
+ 'Øš' => 32,
+ 'Ù‹' => 27,
+ 'ٌ' => 28,
+ 'Ù' => 29,
+ 'ÙŽ' => 30,
+ 'Ù' => 31,
+ 'Ù' => 32,
+ 'Ù‘' => 33,
+ 'Ù’' => 34,
+ 'Ù“' => 230,
+ 'Ù”' => 230,
+ 'Ù•' => 220,
+ 'Ù–' => 220,
+ 'Ù—' => 230,
+ 'Ù˜' => 230,
+ 'Ù™' => 230,
+ 'Ùš' => 230,
+ 'Ù›' => 230,
+ 'ٜ' => 220,
+ 'Ù' => 230,
+ 'Ùž' => 230,
+ 'ÙŸ' => 220,
+ 'Ù°' => 35,
+ 'Û–' => 230,
+ 'Û—' => 230,
+ 'Û˜' => 230,
+ 'Û™' => 230,
+ 'Ûš' => 230,
+ 'Û›' => 230,
+ 'ۜ' => 230,
+ 'ÛŸ' => 230,
+ 'Û ' => 230,
+ 'Û¡' => 230,
+ 'Û¢' => 230,
+ 'Û£' => 220,
+ 'Û¤' => 230,
+ 'Û§' => 230,
+ 'Û¨' => 230,
+ 'Ûª' => 220,
+ 'Û«' => 230,
+ 'Û¬' => 230,
+ 'Û' => 220,
+ 'Ü‘' => 36,
+ 'Ü°' => 230,
+ 'ܱ' => 220,
+ 'ܲ' => 230,
+ 'ܳ' => 230,
+ 'Ü´' => 220,
+ 'ܵ' => 230,
+ 'ܶ' => 230,
+ 'Ü·' => 220,
+ 'ܸ' => 220,
+ 'ܹ' => 220,
+ 'ܺ' => 230,
+ 'Ü»' => 220,
+ 'ܼ' => 220,
+ 'ܽ' => 230,
+ 'ܾ' => 220,
+ 'Ü¿' => 230,
+ 'Ý€' => 230,
+ 'Ý' => 230,
+ 'Ý‚' => 220,
+ '݃' => 230,
+ 'Ý„' => 220,
+ 'Ý…' => 230,
+ '݆' => 220,
+ '݇' => 230,
+ '݈' => 220,
+ '݉' => 230,
+ 'ÝŠ' => 230,
+ 'ß«' => 230,
+ '߬' => 230,
+ 'ß' => 230,
+ 'ß®' => 230,
+ '߯' => 230,
+ 'ß°' => 230,
+ 'ß±' => 230,
+ 'ß²' => 220,
+ 'ß³' => 230,
+ 'ß½' => 220,
+ 'à –' => 230,
+ 'à —' => 230,
+ 'à ˜' => 230,
+ 'à ™' => 230,
+ 'à ›' => 230,
+ 'à œ' => 230,
+ 'à ' => 230,
+ 'à ž' => 230,
+ 'à Ÿ' => 230,
+ 'à ' => 230,
+ 'à ¡' => 230,
+ 'à ¢' => 230,
+ 'à £' => 230,
+ 'à ¥' => 230,
+ 'à ¦' => 230,
+ 'à §' => 230,
+ 'à ©' => 230,
+ 'à ª' => 230,
+ 'à «' => 230,
+ 'à ¬' => 230,
+ 'à ' => 230,
+ 'à¡™' => 220,
+ 'à¡š' => 220,
+ 'à¡›' => 220,
+ '࣓' => 220,
+ 'ࣔ' => 230,
+ 'ࣕ' => 230,
+ 'ࣖ' => 230,
+ 'ࣗ' => 230,
+ 'ࣘ' => 230,
+ 'ࣙ' => 230,
+ 'ࣚ' => 230,
+ 'ࣛ' => 230,
+ 'ࣜ' => 230,
+ 'à£' => 230,
+ 'ࣞ' => 230,
+ 'ࣟ' => 230,
+ '࣠' => 230,
+ '࣡' => 230,
+ 'ࣣ' => 220,
+ 'ࣤ' => 230,
+ 'ࣥ' => 230,
+ 'ࣦ' => 220,
+ 'ࣧ' => 230,
+ 'ࣨ' => 230,
+ 'ࣩ' => 220,
+ '࣪' => 230,
+ '࣫' => 230,
+ '࣬' => 230,
+ 'à£' => 220,
+ '࣮' => 220,
+ '࣯' => 220,
+ 'ࣰ' => 27,
+ 'ࣱ' => 28,
+ 'ࣲ' => 29,
+ 'ࣳ' => 230,
+ 'ࣴ' => 230,
+ 'ࣵ' => 230,
+ 'ࣶ' => 220,
+ 'ࣷ' => 230,
+ 'ࣸ' => 230,
+ 'ࣹ' => 220,
+ 'ࣺ' => 220,
+ 'ࣻ' => 230,
+ 'ࣼ' => 230,
+ 'ࣽ' => 230,
+ 'ࣾ' => 230,
+ 'ࣿ' => 230,
+ '़' => 7,
+ 'à¥' => 9,
+ '॑' => 230,
+ '॒' => 220,
+ '॓' => 230,
+ '॔' => 230,
+ '়' => 7,
+ 'à§' => 9,
+ '৾' => 230,
+ '਼' => 7,
+ 'à©' => 9,
+ '઼' => 7,
+ 'à«' => 9,
+ '଼' => 7,
+ 'à' => 9,
+ 'à¯' => 9,
+ 'à±' => 9,
+ 'ౕ' => 84,
+ 'à±–' => 91,
+ '಼' => 7,
+ 'à³' => 9,
+ 'à´»' => 9,
+ 'à´¼' => 9,
+ 'àµ' => 9,
+ 'à·Š' => 9,
+ 'ุ' => 103,
+ 'ู' => 103,
+ 'ฺ' => 9,
+ '่' => 107,
+ '้' => 107,
+ '๊' => 107,
+ '๋' => 107,
+ 'ຸ' => 118,
+ 'ູ' => 118,
+ '຺' => 9,
+ '່' => 122,
+ '້' => 122,
+ '໊' => 122,
+ '໋' => 122,
+ '༘' => 220,
+ '༙' => 220,
+ '༵' => 220,
+ '༷' => 220,
+ '༹' => 216,
+ 'ཱ' => 129,
+ 'ི' => 130,
+ 'ུ' => 132,
+ 'ེ' => 130,
+ 'ཻ' => 130,
+ 'ོ' => 130,
+ 'ཽ' => 130,
+ 'ྀ' => 130,
+ 'ྂ' => 230,
+ 'ྃ' => 230,
+ '྄' => 9,
+ '྆' => 230,
+ '྇' => 230,
+ '࿆' => 220,
+ '့' => 7,
+ '္' => 9,
+ '်' => 9,
+ 'á‚' => 220,
+ 'á' => 230,
+ 'áž' => 230,
+ 'áŸ' => 230,
+ '᜔' => 9,
+ '᜴' => 9,
+ '្' => 9,
+ 'áŸ' => 230,
+ 'ᢩ' => 228,
+ '᤹' => 222,
+ '᤺' => 230,
+ '᤻' => 220,
+ 'ᨗ' => 230,
+ 'ᨘ' => 220,
+ 'á© ' => 9,
+ '᩵' => 230,
+ '᩶' => 230,
+ 'á©·' => 230,
+ '᩸' => 230,
+ '᩹' => 230,
+ '᩺' => 230,
+ 'á©»' => 230,
+ '᩼' => 230,
+ 'á©¿' => 220,
+ '᪰' => 230,
+ '᪱' => 230,
+ '᪲' => 230,
+ '᪳' => 230,
+ '᪴' => 230,
+ '᪵' => 220,
+ '᪶' => 220,
+ '᪷' => 220,
+ '᪸' => 220,
+ '᪹' => 220,
+ '᪺' => 220,
+ '᪻' => 230,
+ '᪼' => 230,
+ '᪽' => 220,
+ 'ᪿ' => 220,
+ 'á«€' => 220,
+ '᬴' => 7,
+ 'á„' => 9,
+ 'á«' => 230,
+ 'á¬' => 220,
+ 'á' => 230,
+ 'á®' => 230,
+ 'á¯' => 230,
+ 'á°' => 230,
+ 'á±' => 230,
+ 'á²' => 230,
+ 'á³' => 230,
+ '᮪' => 9,
+ '᮫' => 9,
+ '᯦' => 7,
+ '᯲' => 9,
+ '᯳' => 9,
+ 'á°·' => 7,
+ 'á³' => 230,
+ '᳑' => 230,
+ 'á³’' => 230,
+ 'á³”' => 1,
+ '᳕' => 220,
+ 'á³–' => 220,
+ 'á³—' => 220,
+ '᳘' => 220,
+ 'á³™' => 220,
+ '᳚' => 230,
+ 'á³›' => 230,
+ '᳜' => 220,
+ 'á³' => 220,
+ '᳞' => 220,
+ '᳟' => 220,
+ 'á³ ' => 230,
+ 'á³¢' => 1,
+ 'á³£' => 1,
+ '᳤' => 1,
+ 'á³¥' => 1,
+ '᳦' => 1,
+ '᳧' => 1,
+ '᳨' => 1,
+ 'á³' => 220,
+ 'á³´' => 230,
+ '᳸' => 230,
+ 'á³¹' => 230,
+ 'á·€' => 230,
+ 'á·' => 230,
+ 'á·‚' => 220,
+ 'á·ƒ' => 230,
+ 'á·„' => 230,
+ 'á·…' => 230,
+ 'á·†' => 230,
+ 'á·‡' => 230,
+ 'á·ˆ' => 230,
+ 'á·‰' => 230,
+ 'á·Š' => 220,
+ 'á·‹' => 230,
+ '᷌' => 230,
+ 'á·' => 234,
+ 'á·Ž' => 214,
+ 'á·' => 220,
+ 'á·' => 202,
+ 'á·‘' => 230,
+ 'á·’' => 230,
+ 'á·“' => 230,
+ 'á·”' => 230,
+ 'á·•' => 230,
+ 'á·–' => 230,
+ 'á·—' => 230,
+ 'á·˜' => 230,
+ 'á·™' => 230,
+ 'á·š' => 230,
+ 'á·›' => 230,
+ 'ᷜ' => 230,
+ 'á·' => 230,
+ 'á·ž' => 230,
+ 'á·Ÿ' => 230,
+ 'á· ' => 230,
+ 'á·¡' => 230,
+ 'á·¢' => 230,
+ 'á·£' => 230,
+ 'á·¤' => 230,
+ 'á·¥' => 230,
+ 'á·¦' => 230,
+ 'á·§' => 230,
+ 'á·¨' => 230,
+ 'á·©' => 230,
+ 'á·ª' => 230,
+ 'á·«' => 230,
+ 'á·¬' => 230,
+ 'á·' => 230,
+ 'á·®' => 230,
+ 'á·¯' => 230,
+ 'á·°' => 230,
+ 'á·±' => 230,
+ 'á·²' => 230,
+ 'á·³' => 230,
+ 'á·´' => 230,
+ 'á·µ' => 230,
+ 'á·¶' => 232,
+ 'á··' => 228,
+ 'á·¸' => 228,
+ 'á·¹' => 220,
+ 'á·»' => 230,
+ 'á·¼' => 233,
+ 'á·½' => 220,
+ 'á·¾' => 230,
+ 'á·¿' => 220,
+ 'âƒ' => 230,
+ '⃑' => 230,
+ '⃒' => 1,
+ '⃓' => 1,
+ '⃔' => 230,
+ '⃕' => 230,
+ '⃖' => 230,
+ '⃗' => 230,
+ '⃘' => 1,
+ '⃙' => 1,
+ '⃚' => 1,
+ '⃛' => 230,
+ '⃜' => 230,
+ '⃡' => 230,
+ '⃥' => 1,
+ '⃦' => 1,
+ '⃧' => 230,
+ '⃨' => 220,
+ '⃩' => 230,
+ '⃪' => 1,
+ '⃫' => 1,
+ '⃬' => 220,
+ 'âƒ' => 220,
+ '⃮' => 220,
+ '⃯' => 220,
+ '⃰' => 230,
+ '⳯' => 230,
+ 'â³°' => 230,
+ 'â³±' => 230,
+ '⵿' => 9,
+ 'â· ' => 230,
+ 'â·¡' => 230,
+ 'â·¢' => 230,
+ 'â·£' => 230,
+ 'â·¤' => 230,
+ 'â·¥' => 230,
+ 'â·¦' => 230,
+ 'â·§' => 230,
+ 'â·¨' => 230,
+ 'â·©' => 230,
+ 'â·ª' => 230,
+ 'â·«' => 230,
+ 'â·¬' => 230,
+ 'â·' => 230,
+ 'â·®' => 230,
+ 'â·¯' => 230,
+ 'â·°' => 230,
+ 'â·±' => 230,
+ 'â·²' => 230,
+ 'â·³' => 230,
+ 'â·´' => 230,
+ 'â·µ' => 230,
+ 'â·¶' => 230,
+ 'â··' => 230,
+ 'â·¸' => 230,
+ 'â·¹' => 230,
+ 'â·º' => 230,
+ 'â·»' => 230,
+ 'â·¼' => 230,
+ 'â·½' => 230,
+ 'â·¾' => 230,
+ 'â·¿' => 230,
+ '〪' => 218,
+ '〫' => 228,
+ '〬' => 232,
+ 'ã€' => 222,
+ '〮' => 224,
+ '〯' => 224,
+ 'ã‚™' => 8,
+ 'ã‚š' => 8,
+ '꙯' => 230,
+ 'ê™´' => 230,
+ 'ꙵ' => 230,
+ 'ꙶ' => 230,
+ 'ê™·' => 230,
+ 'ꙸ' => 230,
+ 'ꙹ' => 230,
+ 'ꙺ' => 230,
+ 'ê™»' => 230,
+ '꙼' => 230,
+ '꙽' => 230,
+ 'êšž' => 230,
+ 'ꚟ' => 230,
+ 'ê›°' => 230,
+ 'ê›±' => 230,
+ 'ê †' => 9,
+ 'ê ¬' => 9,
+ '꣄' => 9,
+ 'ê£ ' => 230,
+ '꣡' => 230,
+ '꣢' => 230,
+ '꣣' => 230,
+ '꣤' => 230,
+ '꣥' => 230,
+ '꣦' => 230,
+ '꣧' => 230,
+ '꣨' => 230,
+ '꣩' => 230,
+ '꣪' => 230,
+ '꣫' => 230,
+ '꣬' => 230,
+ 'ê£' => 230,
+ '꣮' => 230,
+ '꣯' => 230,
+ '꣰' => 230,
+ '꣱' => 230,
+ '꤫' => 220,
+ '꤬' => 220,
+ 'ê¤' => 220,
+ '꥓' => 9,
+ '꦳' => 7,
+ '꧀' => 9,
+ 'ꪰ' => 230,
+ 'ꪲ' => 230,
+ 'ꪳ' => 230,
+ 'ꪴ' => 220,
+ 'ꪷ' => 230,
+ 'ꪸ' => 230,
+ 'ꪾ' => 230,
+ '꪿' => 230,
+ 'ê«' => 230,
+ '꫶' => 9,
+ 'ê¯' => 9,
+ 'ﬞ' => 26,
+ 'ï¸ ' => 230,
+ '︡' => 230,
+ '︢' => 230,
+ '︣' => 230,
+ '︤' => 230,
+ '︥' => 230,
+ '︦' => 230,
+ '︧' => 220,
+ '︨' => 220,
+ '︩' => 220,
+ '︪' => 220,
+ '︫' => 220,
+ '︬' => 220,
+ 'ï¸' => 220,
+ '︮' => 230,
+ '︯' => 230,
+ 'ð‡½' => 220,
+ 'ð‹ ' => 220,
+ 'ð¶' => 230,
+ 'ð·' => 230,
+ 'ð¸' => 230,
+ 'ð¹' => 230,
+ 'ðº' => 230,
+ 'ð¨' => 220,
+ 'ð¨' => 230,
+ 'ð¨¸' => 230,
+ 'ð¨¹' => 1,
+ 'ð¨º' => 220,
+ 'ð¨¿' => 9,
+ 'ð«¥' => 230,
+ 'ð«¦' => 220,
+ 'ð´¤' => 230,
+ 'ð´¥' => 230,
+ 'ð´¦' => 230,
+ 'ð´§' => 230,
+ 'ðº«' => 230,
+ 'ðº¬' => 230,
+ 'ð½†' => 220,
+ 'ð½‡' => 220,
+ 'ð½ˆ' => 230,
+ 'ð½‰' => 230,
+ 'ð½Š' => 230,
+ 'ð½‹' => 220,
+ 'ð½Œ' => 230,
+ 'ð½' => 220,
+ 'ð½Ž' => 220,
+ 'ð½' => 220,
+ 'ð½' => 220,
+ 'ð‘†' => 9,
+ 'ð‘¿' => 9,
+ 'ð‘‚¹' => 9,
+ '𑂺' => 7,
+ 'ð‘„€' => 230,
+ 'ð‘„' => 230,
+ 'ð‘„‚' => 230,
+ 'ð‘„³' => 9,
+ 'ð‘„´' => 9,
+ 'ð‘…³' => 7,
+ '𑇀' => 9,
+ '𑇊' => 7,
+ '𑈵' => 9,
+ '𑈶' => 7,
+ 'ð‘‹©' => 7,
+ '𑋪' => 9,
+ '𑌻' => 7,
+ '𑌼' => 7,
+ 'ð‘' => 9,
+ 'ð‘¦' => 230,
+ 'ð‘§' => 230,
+ 'ð‘¨' => 230,
+ 'ð‘©' => 230,
+ 'ð‘ª' => 230,
+ 'ð‘«' => 230,
+ 'ð‘¬' => 230,
+ 'ð‘°' => 230,
+ 'ð‘±' => 230,
+ 'ð‘²' => 230,
+ 'ð‘³' => 230,
+ 'ð‘´' => 230,
+ 'ð‘‘‚' => 9,
+ '𑑆' => 7,
+ 'ð‘‘ž' => 230,
+ 'ð‘“‚' => 9,
+ '𑓃' => 7,
+ 'ð‘–¿' => 9,
+ 'ð‘—€' => 7,
+ '𑘿' => 9,
+ '𑚶' => 9,
+ 'ð‘š·' => 7,
+ '𑜫' => 9,
+ 'ð‘ ¹' => 9,
+ 'ð‘ º' => 7,
+ '𑤽' => 9,
+ '𑤾' => 9,
+ '𑥃' => 7,
+ '𑧠' => 9,
+ '𑨴' => 9,
+ '𑩇' => 9,
+ '𑪙' => 9,
+ 'ð‘°¿' => 9,
+ '𑵂' => 7,
+ '𑵄' => 9,
+ '𑵅' => 9,
+ '𑶗' => 9,
+ 'ð–«°' => 1,
+ 'ð–«±' => 1,
+ 'ð–«²' => 1,
+ 'ð–«³' => 1,
+ 'ð–«´' => 1,
+ 'ð–¬°' => 230,
+ '𖬱' => 230,
+ '𖬲' => 230,
+ '𖬳' => 230,
+ 'ð–¬´' => 230,
+ '𖬵' => 230,
+ '𖬶' => 230,
+ 'ð–¿°' => 6,
+ 'ð–¿±' => 6,
+ '𛲞' => 1,
+ 'ð…¥' => 216,
+ 'ð…¦' => 216,
+ 'ð…§' => 1,
+ 'ð…¨' => 1,
+ 'ð…©' => 1,
+ 'ð…' => 226,
+ 'ð…®' => 216,
+ 'ð…¯' => 216,
+ 'ð…°' => 216,
+ 'ð…±' => 216,
+ 'ð…²' => 216,
+ 'ð…»' => 220,
+ 'ð…¼' => 220,
+ 'ð…½' => 220,
+ 'ð…¾' => 220,
+ 'ð…¿' => 220,
+ 'ð†€' => 220,
+ 'ð†' => 220,
+ 'ð†‚' => 220,
+ 'ð†…' => 230,
+ 'ð††' => 230,
+ 'ð†‡' => 230,
+ 'ð†ˆ' => 230,
+ 'ð†‰' => 230,
+ 'ð†Š' => 220,
+ 'ð†‹' => 220,
+ 'ð†ª' => 230,
+ 'ð†«' => 230,
+ 'ð†¬' => 230,
+ 'ð†' => 230,
+ 'ð‰‚' => 230,
+ 'ð‰ƒ' => 230,
+ 'ð‰„' => 230,
+ '𞀀' => 230,
+ 'ðž€' => 230,
+ '𞀂' => 230,
+ '𞀃' => 230,
+ '𞀄' => 230,
+ '𞀅' => 230,
+ '𞀆' => 230,
+ '𞀈' => 230,
+ '𞀉' => 230,
+ '𞀊' => 230,
+ '𞀋' => 230,
+ '𞀌' => 230,
+ 'ðž€' => 230,
+ '𞀎' => 230,
+ 'ðž€' => 230,
+ 'ðž€' => 230,
+ '𞀑' => 230,
+ '𞀒' => 230,
+ '𞀓' => 230,
+ '𞀔' => 230,
+ '𞀕' => 230,
+ '𞀖' => 230,
+ '𞀗' => 230,
+ '𞀘' => 230,
+ '𞀛' => 230,
+ '𞀜' => 230,
+ 'ðž€' => 230,
+ '𞀞' => 230,
+ '𞀟' => 230,
+ '𞀠' => 230,
+ '𞀡' => 230,
+ '𞀣' => 230,
+ '𞀤' => 230,
+ '𞀦' => 230,
+ '𞀧' => 230,
+ '𞀨' => 230,
+ '𞀩' => 230,
+ '𞀪' => 230,
+ 'ðž„°' => 230,
+ '𞄱' => 230,
+ '𞄲' => 230,
+ '𞄳' => 230,
+ 'ðž„´' => 230,
+ '𞄵' => 230,
+ '𞄶' => 230,
+ '𞋬' => 230,
+ 'ðž‹' => 230,
+ 'ðž‹®' => 230,
+ '𞋯' => 230,
+ 'ðž£' => 220,
+ '𞣑' => 220,
+ '𞣒' => 220,
+ '𞣓' => 220,
+ '𞣔' => 220,
+ '𞣕' => 220,
+ '𞣖' => 220,
+ '𞥄' => 230,
+ '𞥅' => 230,
+ '𞥆' => 230,
+ '𞥇' => 230,
+ '𞥈' => 230,
+ '𞥉' => 230,
+ '𞥊' => 7,
+);
diff --git a/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/compatibilityDecomposition.php b/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/compatibilityDecomposition.php
new file mode 100644
index 00000000..15749028
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/compatibilityDecomposition.php
@@ -0,0 +1,3695 @@
+ ' ',
+ '¨' => ' ̈',
+ 'ª' => 'a',
+ '¯' => ' ̄',
+ '²' => '2',
+ '³' => '3',
+ '´' => ' Ì',
+ 'µ' => 'μ',
+ '¸' => ' ̧',
+ '¹' => '1',
+ 'º' => 'o',
+ '¼' => '1â„4',
+ '½' => '1â„2',
+ '¾' => '3â„4',
+ 'IJ' => 'IJ',
+ 'ij' => 'ij',
+ 'Ŀ' => 'L·',
+ 'ŀ' => 'l·',
+ 'ʼn' => 'ʼn',
+ 'Å¿' => 's',
+ 'DŽ' => 'DŽ',
+ 'Dž' => 'Dž',
+ 'dž' => 'dž',
+ 'LJ' => 'LJ',
+ 'Lj' => 'Lj',
+ 'lj' => 'lj',
+ 'ÇŠ' => 'NJ',
+ 'Ç‹' => 'Nj',
+ 'nj' => 'nj',
+ 'DZ' => 'DZ',
+ 'Dz' => 'Dz',
+ 'dz' => 'dz',
+ 'Ê°' => 'h',
+ 'ʱ' => 'ɦ',
+ 'ʲ' => 'j',
+ 'ʳ' => 'r',
+ 'ʴ' => 'ɹ',
+ 'ʵ' => 'ɻ',
+ 'ʶ' => 'Ê',
+ 'Ê·' => 'w',
+ 'ʸ' => 'y',
+ '˘' => ' ̆',
+ '˙' => ' ̇',
+ 'Ëš' => ' ÌŠ',
+ '˛' => ' ̨',
+ '˜' => ' ̃',
+ 'Ë' => ' Ì‹',
+ 'Ë ' => 'É£',
+ 'Ë¡' => 'l',
+ 'Ë¢' => 's',
+ 'Ë£' => 'x',
+ 'ˤ' => 'ʕ',
+ 'ͺ' => ' ͅ',
+ '΄' => ' Ì',
+ 'Î…' => ' ̈Ì',
+ 'Ï' => 'β',
+ 'ϑ' => 'θ',
+ 'Ï’' => 'Î¥',
+ 'Ï“' => 'Î¥Ì',
+ 'ϔ' => 'Ϋ',
+ 'ϕ' => 'φ',
+ 'Ï–' => 'Ï€',
+ 'ϰ' => 'κ',
+ 'ϱ' => 'Ï',
+ 'ϲ' => 'ς',
+ 'ϴ' => 'Θ',
+ 'ϵ' => 'ε',
+ 'Ϲ' => 'Σ',
+ 'Ö‡' => 'Õ¥Ö‚',
+ 'ٵ' => 'اٴ',
+ 'ٶ' => 'وٴ',
+ 'Ù·' => 'Û‡Ù´',
+ 'ٸ' => 'يٴ',
+ 'ำ' => 'à¹à¸²',
+ 'ຳ' => 'à»àº²',
+ 'ໜ' => 'ຫນ',
+ 'à»' => 'ຫມ',
+ '༌' => '་',
+ 'ཷ' => 'ྲཱྀ',
+ 'ཹ' => 'ླཱྀ',
+ 'ჼ' => 'ნ',
+ 'á´¬' => 'A',
+ 'á´' => 'Æ',
+ 'á´®' => 'B',
+ 'á´°' => 'D',
+ 'á´±' => 'E',
+ 'á´²' => 'ÆŽ',
+ 'á´³' => 'G',
+ 'á´´' => 'H',
+ 'á´µ' => 'I',
+ 'á´¶' => 'J',
+ 'á´·' => 'K',
+ 'á´¸' => 'L',
+ 'á´¹' => 'M',
+ 'á´º' => 'N',
+ 'á´¼' => 'O',
+ 'á´½' => 'È¢',
+ 'á´¾' => 'P',
+ 'á´¿' => 'R',
+ 'áµ€' => 'T',
+ 'áµ' => 'U',
+ 'ᵂ' => 'W',
+ 'ᵃ' => 'a',
+ 'ᵄ' => 'É',
+ 'áµ…' => 'É‘',
+ 'ᵆ' => 'ᴂ',
+ 'ᵇ' => 'b',
+ 'ᵈ' => 'd',
+ 'ᵉ' => 'e',
+ 'ᵊ' => 'ə',
+ 'ᵋ' => 'ɛ',
+ 'ᵌ' => 'ɜ',
+ 'áµ' => 'g',
+ 'áµ' => 'k',
+ 'áµ' => 'm',
+ 'ᵑ' => 'ŋ',
+ 'áµ’' => 'o',
+ 'ᵓ' => 'ɔ',
+ 'áµ”' => 'á´–',
+ 'ᵕ' => 'ᴗ',
+ 'áµ–' => 'p',
+ 'áµ—' => 't',
+ 'ᵘ' => 'u',
+ 'áµ™' => 'á´',
+ 'ᵚ' => 'ɯ',
+ 'áµ›' => 'v',
+ 'ᵜ' => 'ᴥ',
+ 'áµ' => 'β',
+ 'ᵞ' => 'γ',
+ 'ᵟ' => 'δ',
+ 'ᵠ' => 'φ',
+ 'ᵡ' => 'χ',
+ 'áµ¢' => 'i',
+ 'áµ£' => 'r',
+ 'ᵤ' => 'u',
+ 'áµ¥' => 'v',
+ 'ᵦ' => 'β',
+ 'ᵧ' => 'γ',
+ 'ᵨ' => 'Ï',
+ 'ᵩ' => 'φ',
+ 'ᵪ' => 'χ',
+ 'ᵸ' => 'н',
+ 'ᶛ' => 'ɒ',
+ 'ᶜ' => 'c',
+ 'á¶' => 'É•',
+ 'ᶞ' => 'ð',
+ 'ᶟ' => 'ɜ',
+ 'ᶠ' => 'f',
+ 'ᶡ' => 'ɟ',
+ 'ᶢ' => 'ɡ',
+ 'ᶣ' => 'ɥ',
+ 'ᶤ' => 'ɨ',
+ 'ᶥ' => 'ɩ',
+ 'ᶦ' => 'ɪ',
+ 'ᶧ' => 'ᵻ',
+ 'ᶨ' => 'Ê',
+ 'ᶩ' => 'É',
+ 'ᶪ' => 'ᶅ',
+ 'ᶫ' => 'ʟ',
+ 'ᶬ' => 'ɱ',
+ 'á¶' => 'É°',
+ 'ᶮ' => 'ɲ',
+ 'ᶯ' => 'ɳ',
+ 'ᶰ' => 'ɴ',
+ 'ᶱ' => 'ɵ',
+ 'ᶲ' => 'ɸ',
+ 'ᶳ' => 'ʂ',
+ 'ᶴ' => 'ʃ',
+ 'ᶵ' => 'ƫ',
+ 'ᶶ' => 'ʉ',
+ 'ᶷ' => 'ʊ',
+ 'ᶸ' => 'ᴜ',
+ 'ᶹ' => 'ʋ',
+ 'ᶺ' => 'ʌ',
+ 'ᶻ' => 'z',
+ 'ᶼ' => 'Ê',
+ 'ᶽ' => 'ʑ',
+ 'ᶾ' => 'ʒ',
+ 'ᶿ' => 'θ',
+ 'ẚ' => 'aʾ',
+ 'ẛ' => 'ṡ',
+ 'á¾½' => ' Ì“',
+ '᾿' => ' ̓',
+ 'á¿€' => ' Í‚',
+ 'á¿' => ' ̈͂',
+ 'á¿' => ' Ì“Ì€',
+ 'á¿Ž' => ' Ì“Ì',
+ 'á¿' => ' Ì“Í‚',
+ 'á¿' => ' ̔̀',
+ 'á¿ž' => ' Ì”Ì',
+ '῟' => ' ̔͂',
+ 'á¿' => ' ̈̀',
+ 'á¿®' => ' ̈Ì',
+ '´' => ' Ì',
+ '῾' => ' ̔',
+ ' ' => ' ',
+ 'â€' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ '‑' => 'â€',
+ '‗' => ' ̳',
+ '․' => '.',
+ '‥' => '..',
+ '…' => '...',
+ ' ' => ' ',
+ '″' => '′′',
+ '‴' => '′′′',
+ '‶' => '‵‵',
+ '‷' => '‵‵‵',
+ '‼' => '!!',
+ '‾' => ' ̅',
+ 'â‡' => '??',
+ 'âˆ' => '?!',
+ 'â‰' => '!?',
+ 'â—' => '′′′′',
+ 'âŸ' => ' ',
+ 'â°' => '0',
+ 'â±' => 'i',
+ 'â´' => '4',
+ 'âµ' => '5',
+ 'â¶' => '6',
+ 'â·' => '7',
+ 'â¸' => '8',
+ 'â¹' => '9',
+ 'âº' => '+',
+ 'â»' => '−',
+ 'â¼' => '=',
+ 'â½' => '(',
+ 'â¾' => ')',
+ 'â¿' => 'n',
+ 'â‚€' => '0',
+ 'â‚' => '1',
+ 'â‚‚' => '2',
+ '₃' => '3',
+ 'â‚„' => '4',
+ 'â‚…' => '5',
+ '₆' => '6',
+ '₇' => '7',
+ '₈' => '8',
+ '₉' => '9',
+ 'â‚Š' => '+',
+ '₋' => '−',
+ '₌' => '=',
+ 'â‚' => '(',
+ 'â‚Ž' => ')',
+ 'â‚' => 'a',
+ 'â‚‘' => 'e',
+ 'â‚’' => 'o',
+ 'â‚“' => 'x',
+ 'â‚”' => 'É™',
+ 'â‚•' => 'h',
+ 'â‚–' => 'k',
+ 'â‚—' => 'l',
+ 'ₘ' => 'm',
+ 'â‚™' => 'n',
+ 'â‚š' => 'p',
+ 'â‚›' => 's',
+ 'ₜ' => 't',
+ '₨' => 'Rs',
+ 'â„€' => 'a/c',
+ 'â„' => 'a/s',
+ 'â„‚' => 'C',
+ '℃' => '°C',
+ 'â„…' => 'c/o',
+ '℆' => 'c/u',
+ 'ℇ' => 'Æ',
+ '℉' => '°F',
+ 'â„Š' => 'g',
+ 'â„‹' => 'H',
+ 'ℌ' => 'H',
+ 'â„' => 'H',
+ 'â„Ž' => 'h',
+ 'â„' => 'ħ',
+ 'â„' => 'I',
+ 'â„‘' => 'I',
+ 'â„’' => 'L',
+ 'â„“' => 'l',
+ 'â„•' => 'N',
+ 'â„–' => 'No',
+ 'â„™' => 'P',
+ 'â„š' => 'Q',
+ 'â„›' => 'R',
+ 'ℜ' => 'R',
+ 'â„' => 'R',
+ 'â„ ' => 'SM',
+ 'â„¡' => 'TEL',
+ 'â„¢' => 'TM',
+ 'ℤ' => 'Z',
+ 'ℨ' => 'Z',
+ 'ℬ' => 'B',
+ 'â„' => 'C',
+ 'ℯ' => 'e',
+ 'â„°' => 'E',
+ 'ℱ' => 'F',
+ 'ℳ' => 'M',
+ 'â„´' => 'o',
+ 'ℵ' => '×',
+ 'ℶ' => 'ב',
+ 'â„·' => '×’',
+ 'ℸ' => 'ד',
+ 'ℹ' => 'i',
+ 'â„»' => 'FAX',
+ 'ℼ' => 'π',
+ 'ℽ' => 'γ',
+ 'ℾ' => 'Γ',
+ 'â„¿' => 'Î ',
+ '⅀' => '∑',
+ 'â……' => 'D',
+ 'â…†' => 'd',
+ 'â…‡' => 'e',
+ 'â…ˆ' => 'i',
+ 'â…‰' => 'j',
+ 'â…' => '1â„7',
+ 'â…‘' => '1â„9',
+ 'â…’' => '1â„10',
+ 'â…“' => '1â„3',
+ 'â…”' => '2â„3',
+ 'â…•' => '1â„5',
+ 'â…–' => '2â„5',
+ 'â…—' => '3â„5',
+ 'â…˜' => '4â„5',
+ 'â…™' => '1â„6',
+ 'â…š' => '5â„6',
+ 'â…›' => '1â„8',
+ 'â…œ' => '3â„8',
+ 'â…' => '5â„8',
+ 'â…ž' => '7â„8',
+ 'â…Ÿ' => '1â„',
+ 'â… ' => 'I',
+ 'â…¡' => 'II',
+ 'â…¢' => 'III',
+ 'â…£' => 'IV',
+ 'â…¤' => 'V',
+ 'â…¥' => 'VI',
+ 'â…¦' => 'VII',
+ 'â…§' => 'VIII',
+ 'â…¨' => 'IX',
+ 'â…©' => 'X',
+ 'â…ª' => 'XI',
+ 'â…«' => 'XII',
+ 'â…¬' => 'L',
+ 'â…' => 'C',
+ 'â…®' => 'D',
+ 'â…¯' => 'M',
+ 'â…°' => 'i',
+ 'â…±' => 'ii',
+ 'â…²' => 'iii',
+ 'â…³' => 'iv',
+ 'â…´' => 'v',
+ 'â…µ' => 'vi',
+ 'â…¶' => 'vii',
+ 'â…·' => 'viii',
+ 'â…¸' => 'ix',
+ 'â…¹' => 'x',
+ 'â…º' => 'xi',
+ 'â…»' => 'xii',
+ 'â…¼' => 'l',
+ 'â…½' => 'c',
+ 'â…¾' => 'd',
+ 'â…¿' => 'm',
+ '↉' => '0â„3',
+ '∬' => '∫∫',
+ 'âˆ' => '∫∫∫',
+ '∯' => '∮∮',
+ '∰' => '∮∮∮',
+ 'â‘ ' => '1',
+ 'â‘¡' => '2',
+ 'â‘¢' => '3',
+ 'â‘£' => '4',
+ '⑤' => '5',
+ 'â‘¥' => '6',
+ '⑦' => '7',
+ '⑧' => '8',
+ '⑨' => '9',
+ 'â‘©' => '10',
+ '⑪' => '11',
+ 'â‘«' => '12',
+ '⑬' => '13',
+ 'â‘' => '14',
+ 'â‘®' => '15',
+ '⑯' => '16',
+ 'â‘°' => '17',
+ '⑱' => '18',
+ '⑲' => '19',
+ '⑳' => '20',
+ 'â‘´' => '(1)',
+ '⑵' => '(2)',
+ '⑶' => '(3)',
+ 'â‘·' => '(4)',
+ '⑸' => '(5)',
+ '⑹' => '(6)',
+ '⑺' => '(7)',
+ 'â‘»' => '(8)',
+ '⑼' => '(9)',
+ '⑽' => '(10)',
+ '⑾' => '(11)',
+ 'â‘¿' => '(12)',
+ 'â’€' => '(13)',
+ 'â’' => '(14)',
+ 'â’‚' => '(15)',
+ 'â’ƒ' => '(16)',
+ 'â’„' => '(17)',
+ 'â’…' => '(18)',
+ 'â’†' => '(19)',
+ 'â’‡' => '(20)',
+ 'â’ˆ' => '1.',
+ 'â’‰' => '2.',
+ 'â’Š' => '3.',
+ 'â’‹' => '4.',
+ '⒌' => '5.',
+ 'â’' => '6.',
+ 'â’Ž' => '7.',
+ 'â’' => '8.',
+ 'â’' => '9.',
+ 'â’‘' => '10.',
+ 'â’’' => '11.',
+ 'â’“' => '12.',
+ 'â’”' => '13.',
+ 'â’•' => '14.',
+ 'â’–' => '15.',
+ 'â’—' => '16.',
+ 'â’˜' => '17.',
+ 'â’™' => '18.',
+ 'â’š' => '19.',
+ 'â’›' => '20.',
+ '⒜' => '(a)',
+ 'â’' => '(b)',
+ 'â’ž' => '(c)',
+ 'â’Ÿ' => '(d)',
+ 'â’ ' => '(e)',
+ 'â’¡' => '(f)',
+ 'â’¢' => '(g)',
+ 'â’£' => '(h)',
+ 'â’¤' => '(i)',
+ 'â’¥' => '(j)',
+ 'â’¦' => '(k)',
+ 'â’§' => '(l)',
+ 'â’¨' => '(m)',
+ 'â’©' => '(n)',
+ 'â’ª' => '(o)',
+ 'â’«' => '(p)',
+ 'â’¬' => '(q)',
+ 'â’' => '(r)',
+ 'â’®' => '(s)',
+ 'â’¯' => '(t)',
+ 'â’°' => '(u)',
+ 'â’±' => '(v)',
+ 'â’²' => '(w)',
+ 'â’³' => '(x)',
+ 'â’´' => '(y)',
+ 'â’µ' => '(z)',
+ 'â’¶' => 'A',
+ 'â’·' => 'B',
+ 'â’¸' => 'C',
+ 'â’¹' => 'D',
+ 'â’º' => 'E',
+ 'â’»' => 'F',
+ 'â’¼' => 'G',
+ 'â’½' => 'H',
+ 'â’¾' => 'I',
+ 'â’¿' => 'J',
+ 'â“€' => 'K',
+ 'â“' => 'L',
+ 'â“‚' => 'M',
+ 'Ⓝ' => 'N',
+ 'â“„' => 'O',
+ 'â“…' => 'P',
+ 'Ⓠ' => 'Q',
+ 'Ⓡ' => 'R',
+ 'Ⓢ' => 'S',
+ 'Ⓣ' => 'T',
+ 'â“Š' => 'U',
+ 'â“‹' => 'V',
+ 'Ⓦ' => 'W',
+ 'â“' => 'X',
+ 'â“Ž' => 'Y',
+ 'â“' => 'Z',
+ 'â“' => 'a',
+ 'â“‘' => 'b',
+ 'â“’' => 'c',
+ 'â““' => 'd',
+ 'â“”' => 'e',
+ 'â“•' => 'f',
+ 'â“–' => 'g',
+ 'â“—' => 'h',
+ 'ⓘ' => 'i',
+ 'â“™' => 'j',
+ 'â“š' => 'k',
+ 'â“›' => 'l',
+ 'ⓜ' => 'm',
+ 'â“' => 'n',
+ 'â“ž' => 'o',
+ 'â“Ÿ' => 'p',
+ 'â“ ' => 'q',
+ 'â“¡' => 'r',
+ 'â“¢' => 's',
+ 'â“£' => 't',
+ 'ⓤ' => 'u',
+ 'â“¥' => 'v',
+ 'ⓦ' => 'w',
+ 'ⓧ' => 'x',
+ 'ⓨ' => 'y',
+ 'â“©' => 'z',
+ '⓪' => '0',
+ '⨌' => '∫∫∫∫',
+ 'â©´' => '::=',
+ '⩵' => '==',
+ '⩶' => '===',
+ 'â±¼' => 'j',
+ 'â±½' => 'V',
+ 'ⵯ' => 'ⵡ',
+ '⺟' => 'æ¯',
+ '⻳' => '龟',
+ '⼀' => '一',
+ 'â¼' => '丨',
+ '⼂' => '丶',
+ '⼃' => '丿',
+ '⼄' => '乙',
+ '⼅' => '亅',
+ '⼆' => '二',
+ '⼇' => 'äº ',
+ '⼈' => '人',
+ '⼉' => '儿',
+ '⼊' => '入',
+ '⼋' => '八',
+ '⼌' => '冂',
+ 'â¼' => '冖',
+ '⼎' => '冫',
+ 'â¼' => 'å‡ ',
+ 'â¼' => '凵',
+ '⼑' => '刀',
+ '⼒' => '力',
+ '⼓' => '勹',
+ '⼔' => '匕',
+ '⼕' => '匚',
+ '⼖' => '匸',
+ 'â¼—' => 'å',
+ '⼘' => 'åœ',
+ 'â¼™' => 'å©',
+ '⼚' => '厂',
+ '⼛' => '厶',
+ '⼜' => 'åˆ',
+ 'â¼' => 'å£',
+ '⼞' => '囗',
+ '⼟' => '土',
+ '⼠' => '士',
+ '⼡' => '夂',
+ '⼢' => '夊',
+ '⼣' => '夕',
+ '⼤' => '大',
+ '⼥' => '女',
+ '⼦' => 'å',
+ '⼧' => '宀',
+ '⼨' => '寸',
+ '⼩' => 'å°',
+ '⼪' => '尢',
+ '⼫' => '尸',
+ '⼬' => '屮',
+ 'â¼' => 'å±±',
+ 'â¼®' => 'å·›',
+ '⼯' => '工',
+ 'â¼°' => 'å·±',
+ 'â¼±' => 'å·¾',
+ 'â¼²' => 'å¹²',
+ '⼳' => '幺',
+ '⼴' => '广',
+ 'â¼µ' => 'å»´',
+ '⼶' => '廾',
+ '⼷' => '弋',
+ '⼸' => '弓',
+ 'â¼¹' => 'å½',
+ '⼺' => '彡',
+ 'â¼»' => 'å½³',
+ '⼼' => '心',
+ '⼽' => '戈',
+ '⼾' => '戶',
+ '⼿' => '手',
+ '⽀' => '支',
+ 'â½' => 'æ”´',
+ '⽂' => '文',
+ '⽃' => '斗',
+ '⽄' => '斤',
+ 'â½…' => 'æ–¹',
+ '⽆' => 'æ— ',
+ '⽇' => '日',
+ '⽈' => '曰',
+ '⽉' => '月',
+ '⽊' => '木',
+ '⽋' => 'æ¬ ',
+ '⽌' => 'æ¢',
+ 'â½' => 'æ¹',
+ '⽎' => '殳',
+ 'â½' => '毋',
+ 'â½' => '比',
+ '⽑' => '毛',
+ 'â½’' => 'æ°',
+ '⽓' => '气',
+ 'â½”' => 'æ°´',
+ '⽕' => 'ç«',
+ '⽖' => '爪',
+ '⽗' => '父',
+ '⽘' => '爻',
+ '⽙' => '爿',
+ '⽚' => '片',
+ '⽛' => '牙',
+ '⽜' => '牛',
+ 'â½' => '犬',
+ '⽞' => '玄',
+ '⽟' => '玉',
+ '⽠' => '瓜',
+ '⽡' => '瓦',
+ '⽢' => '甘',
+ '⽣' => '生',
+ '⽤' => '用',
+ 'â½¥' => 'ç”°',
+ '⽦' => '疋',
+ '⽧' => '疒',
+ '⽨' => '癶',
+ '⽩' => '白',
+ '⽪' => '皮',
+ '⽫' => '皿',
+ '⽬' => '目',
+ 'â½' => '矛',
+ '⽮' => '矢',
+ '⽯' => '石',
+ '⽰' => '示',
+ '⽱' => '禸',
+ '⽲' => '禾',
+ 'â½³' => 'ç©´',
+ 'â½´' => 'ç«‹',
+ '⽵' => '竹',
+ '⽶' => '米',
+ '⽷' => '糸',
+ '⽸' => '缶',
+ '⽹' => '网',
+ '⽺' => '羊',
+ 'â½»' => 'ç¾½',
+ 'â½¼' => 'è€',
+ '⽽' => '而',
+ '⽾' => '耒',
+ '⽿' => '耳',
+ 'â¾€' => 'è¿',
+ 'â¾' => '肉',
+ '⾂' => '臣',
+ '⾃' => '自',
+ '⾄' => '至',
+ '⾅' => '臼',
+ '⾆' => '舌',
+ '⾇' => '舛',
+ '⾈' => '舟',
+ '⾉' => '艮',
+ '⾊' => '色',
+ '⾋' => '艸',
+ '⾌' => 'è™',
+ 'â¾' => '虫',
+ '⾎' => '血',
+ 'â¾' => 'è¡Œ',
+ 'â¾' => 'è¡£',
+ '⾑' => '襾',
+ '⾒' => '見',
+ '⾓' => '角',
+ '⾔' => '言',
+ '⾕' => '谷',
+ '⾖' => '豆',
+ '⾗' => '豕',
+ '⾘' => '豸',
+ 'â¾™' => 'è²',
+ '⾚' => '赤',
+ 'â¾›' => 'èµ°',
+ '⾜' => '足',
+ 'â¾' => '身',
+ '⾞' => '車',
+ '⾟' => '辛',
+ 'â¾ ' => 'è¾°',
+ '⾡' => '辵',
+ 'â¾¢' => 'é‚‘',
+ 'â¾£' => 'é…‰',
+ '⾤' => '釆',
+ '⾥' => '里',
+ '⾦' => '金',
+ '⾧' => '長',
+ '⾨' => '門',
+ '⾩' => '阜',
+ '⾪' => '隶',
+ '⾫' => '隹',
+ '⾬' => '雨',
+ 'â¾' => 'é‘',
+ 'â¾®' => 'éž',
+ '⾯' => 'é¢',
+ 'â¾°' => 'é©',
+ '⾱' => '韋',
+ 'â¾²' => 'éŸ',
+ '⾳' => '音',
+ 'â¾´' => 'é ',
+ '⾵' => '風',
+ '⾶' => '飛',
+ '⾷' => '食',
+ '⾸' => '首',
+ '⾹' => '香',
+ '⾺' => '馬',
+ '⾻' => '骨',
+ '⾼' => '高',
+ 'â¾½' => 'é«Ÿ',
+ '⾾' => '鬥',
+ '⾿' => '鬯',
+ '⿀' => '鬲',
+ 'â¿' => '鬼',
+ 'â¿‚' => 'éš',
+ '⿃' => '鳥',
+ 'â¿„' => 'é¹µ',
+ '⿅' => '鹿',
+ '⿆' => '麥',
+ '⿇' => '麻',
+ '⿈' => '黃',
+ '⿉' => 'é»',
+ '⿊' => '黑',
+ '⿋' => '黹',
+ '⿌' => '黽',
+ 'â¿' => '鼎',
+ '⿎' => '鼓',
+ 'â¿' => 'é¼ ',
+ 'â¿' => 'é¼»',
+ '⿑' => '齊',
+ 'â¿’' => 'é½’',
+ 'â¿“' => 'é¾',
+ '⿔' => '龜',
+ 'â¿•' => 'é¾ ',
+ ' ' => ' ',
+ '〶' => '〒',
+ '〸' => 'å',
+ '〹' => 'å„',
+ '〺' => 'å…',
+ 'ã‚›' => ' ã‚™',
+ '゜' => ' ゚',
+ 'ゟ' => 'より',
+ 'ヿ' => 'コト',
+ 'ㄱ' => 'ᄀ',
+ 'ㄲ' => 'á„',
+ 'ㄳ' => 'ᆪ',
+ 'ã„´' => 'á„‚',
+ 'ㄵ' => 'ᆬ',
+ 'ㄶ' => 'á†',
+ 'ㄷ' => 'ᄃ',
+ 'ㄸ' => 'ᄄ',
+ 'ㄹ' => 'ᄅ',
+ 'ㄺ' => 'ᆰ',
+ 'ㄻ' => 'ᆱ',
+ 'ㄼ' => 'ᆲ',
+ 'ㄽ' => 'ᆳ',
+ 'ㄾ' => 'ᆴ',
+ 'ㄿ' => 'ᆵ',
+ 'ã…€' => 'á„š',
+ 'ã…' => 'ᄆ',
+ 'ㅂ' => 'ᄇ',
+ 'ㅃ' => 'ᄈ',
+ 'ã…„' => 'á„¡',
+ 'ㅅ' => 'ᄉ',
+ 'ã…†' => 'á„Š',
+ 'ã…‡' => 'á„‹',
+ 'ㅈ' => 'ᄌ',
+ 'ã…‰' => 'á„',
+ 'ã…Š' => 'á„Ž',
+ 'ã…‹' => 'á„',
+ 'ã…Œ' => 'á„',
+ 'ã…' => 'á„‘',
+ 'ã…Ž' => 'á„’',
+ 'ã…' => 'á…¡',
+ 'ã…' => 'á…¢',
+ 'ã…‘' => 'á…£',
+ 'ã…’' => 'á…¤',
+ 'ã…“' => 'á…¥',
+ 'ã…”' => 'á…¦',
+ 'ã…•' => 'á…§',
+ 'ã…–' => 'á…¨',
+ 'ã…—' => 'á…©',
+ 'ã…˜' => 'á…ª',
+ 'ã…™' => 'á…«',
+ 'ã…š' => 'á…¬',
+ 'ã…›' => 'á…',
+ 'ㅜ' => 'ᅮ',
+ 'ã…' => 'á…¯',
+ 'ã…ž' => 'á…°',
+ 'ã…Ÿ' => 'á…±',
+ 'ã… ' => 'á…²',
+ 'ã…¡' => 'á…³',
+ 'ã…¢' => 'á…´',
+ 'ã…£' => 'á…µ',
+ 'ã…¤' => 'á… ',
+ 'ã…¥' => 'á„”',
+ 'ã…¦' => 'á„•',
+ 'ㅧ' => 'ᇇ',
+ 'ㅨ' => 'ᇈ',
+ 'ㅩ' => 'ᇌ',
+ 'ㅪ' => 'ᇎ',
+ 'ㅫ' => 'ᇓ',
+ 'ㅬ' => 'ᇗ',
+ 'ã…' => 'ᇙ',
+ 'ㅮ' => 'ᄜ',
+ 'ã…¯' => 'á‡',
+ 'ㅰ' => 'ᇟ',
+ 'ã…±' => 'á„',
+ 'ã…²' => 'á„ž',
+ 'ã…³' => 'á„ ',
+ 'ã…´' => 'á„¢',
+ 'ã…µ' => 'á„£',
+ 'ㅶ' => 'ᄧ',
+ 'ã…·' => 'á„©',
+ 'ã…¸' => 'á„«',
+ 'ㅹ' => 'ᄬ',
+ 'ã…º' => 'á„',
+ 'ã…»' => 'á„®',
+ 'ㅼ' => 'ᄯ',
+ 'ㅽ' => 'ᄲ',
+ 'ㅾ' => 'ᄶ',
+ 'ã…¿' => 'á…€',
+ 'ㆀ' => 'ᅇ',
+ 'ã†' => 'á…Œ',
+ 'ㆂ' => 'ᇱ',
+ 'ㆃ' => 'ᇲ',
+ 'ㆄ' => 'ᅗ',
+ 'ㆅ' => 'ᅘ',
+ 'ㆆ' => 'ᅙ',
+ 'ㆇ' => 'ᆄ',
+ 'ㆈ' => 'ᆅ',
+ 'ㆉ' => 'ᆈ',
+ 'ㆊ' => 'ᆑ',
+ 'ㆋ' => 'ᆒ',
+ 'ㆌ' => 'ᆔ',
+ 'ã†' => 'ᆞ',
+ 'ㆎ' => 'ᆡ',
+ '㆒' => '一',
+ '㆓' => '二',
+ '㆔' => '三',
+ '㆕' => '四',
+ '㆖' => '上',
+ '㆗' => 'ä¸',
+ '㆘' => '下',
+ '㆙' => '甲',
+ '㆚' => '乙',
+ '㆛' => '丙',
+ '㆜' => 'ä¸',
+ 'ã†' => '天',
+ '㆞' => '地',
+ '㆟' => '人',
+ '㈀' => '(ᄀ)',
+ 'ãˆ' => '(á„‚)',
+ '㈂' => '(ᄃ)',
+ '㈃' => '(ᄅ)',
+ '㈄' => '(ᄆ)',
+ '㈅' => '(ᄇ)',
+ '㈆' => '(ᄉ)',
+ '㈇' => '(ᄋ)',
+ '㈈' => '(ᄌ)',
+ '㈉' => '(ᄎ)',
+ '㈊' => '(á„)',
+ '㈋' => '(á„)',
+ '㈌' => '(ᄑ)',
+ 'ãˆ' => '(á„’)',
+ '㈎' => '(가)',
+ 'ãˆ' => '(á„‚á…¡)',
+ 'ãˆ' => '(다)',
+ '㈑' => '(라)',
+ '㈒' => '(마)',
+ '㈓' => '(바)',
+ '㈔' => '(사)',
+ '㈕' => '(아)',
+ '㈖' => '(자)',
+ '㈗' => '(차)',
+ '㈘' => '(á„á…¡)',
+ '㈙' => '(á„á…¡)',
+ '㈚' => '(파)',
+ '㈛' => '(하)',
+ '㈜' => '(주)',
+ 'ãˆ' => '(오전)',
+ '㈞' => '(오후)',
+ '㈠' => '(一)',
+ '㈡' => '(二)',
+ '㈢' => '(三)',
+ '㈣' => '(四)',
+ '㈤' => '(五)',
+ '㈥' => '(å…)',
+ '㈦' => '(七)',
+ '㈧' => '(八)',
+ '㈨' => '(ä¹)',
+ '㈩' => '(å)',
+ '㈪' => '(月)',
+ '㈫' => '(ç«)',
+ '㈬' => '(水)',
+ 'ãˆ' => '(木)',
+ '㈮' => '(金)',
+ '㈯' => '(土)',
+ '㈰' => '(日)',
+ '㈱' => '(æ ª)',
+ '㈲' => '(有)',
+ '㈳' => '(社)',
+ '㈴' => '(å)',
+ '㈵' => '(特)',
+ '㈶' => '(財)',
+ '㈷' => '(ç¥)',
+ '㈸' => '(労)',
+ '㈹' => '(代)',
+ '㈺' => '(呼)',
+ '㈻' => '(å¦)',
+ '㈼' => '(監)',
+ '㈽' => '(ä¼)',
+ '㈾' => '(資)',
+ '㈿' => '(å”)',
+ '㉀' => '(ç¥)',
+ 'ã‰' => '(休)',
+ '㉂' => '(自)',
+ '㉃' => '(至)',
+ '㉄' => 'å•',
+ '㉅' => '幼',
+ '㉆' => '文',
+ '㉇' => 'ç®',
+ 'ã‰' => 'PTE',
+ '㉑' => '21',
+ '㉒' => '22',
+ '㉓' => '23',
+ '㉔' => '24',
+ '㉕' => '25',
+ '㉖' => '26',
+ '㉗' => '27',
+ '㉘' => '28',
+ '㉙' => '29',
+ '㉚' => '30',
+ '㉛' => '31',
+ '㉜' => '32',
+ 'ã‰' => '33',
+ '㉞' => '34',
+ '㉟' => '35',
+ '㉠' => 'ᄀ',
+ '㉡' => 'ᄂ',
+ '㉢' => 'ᄃ',
+ '㉣' => 'ᄅ',
+ '㉤' => 'ᄆ',
+ '㉥' => 'ᄇ',
+ '㉦' => 'ᄉ',
+ '㉧' => 'ᄋ',
+ '㉨' => 'ᄌ',
+ '㉩' => 'ᄎ',
+ '㉪' => 'á„',
+ '㉫' => 'á„',
+ '㉬' => 'ᄑ',
+ 'ã‰' => 'á„’',
+ '㉮' => '가',
+ '㉯' => '나',
+ '㉰' => '다',
+ '㉱' => '라',
+ '㉲' => '마',
+ '㉳' => '바',
+ '㉴' => '사',
+ '㉵' => '아',
+ '㉶' => '자',
+ '㉷' => '차',
+ '㉸' => 'á„á…¡',
+ '㉹' => 'á„á…¡',
+ '㉺' => '파',
+ '㉻' => '하',
+ '㉼' => '참고',
+ '㉽' => '주의',
+ '㉾' => '우',
+ '㊀' => '一',
+ 'ãŠ' => '二',
+ '㊂' => '三',
+ '㊃' => '四',
+ '㊄' => '五',
+ '㊅' => 'å…',
+ '㊆' => '七',
+ '㊇' => '八',
+ '㊈' => 'ä¹',
+ '㊉' => 'å',
+ '㊊' => '月',
+ '㊋' => 'ç«',
+ '㊌' => '水',
+ 'ãŠ' => '木',
+ '㊎' => '金',
+ 'ãŠ' => '土',
+ 'ãŠ' => 'æ—¥',
+ '㊑' => 'æ ª',
+ '㊒' => '有',
+ '㊓' => '社',
+ '㊔' => 'å',
+ '㊕' => '特',
+ '㊖' => '財',
+ '㊗' => 'ç¥',
+ '㊘' => '労',
+ '㊙' => '秘',
+ '㊚' => '男',
+ '㊛' => '女',
+ '㊜' => 'é©',
+ 'ãŠ' => '優',
+ '㊞' => 'å°',
+ '㊟' => '注',
+ '㊠' => 'é …',
+ '㊡' => '休',
+ '㊢' => '写',
+ '㊣' => 'æ£',
+ '㊤' => '上',
+ '㊥' => 'ä¸',
+ '㊦' => '下',
+ '㊧' => '左',
+ '㊨' => 'å³',
+ '㊩' => '医',
+ '㊪' => '宗',
+ '㊫' => 'å¦',
+ '㊬' => '監',
+ 'ãŠ' => 'ä¼',
+ '㊮' => '資',
+ '㊯' => 'å”',
+ '㊰' => '夜',
+ '㊱' => '36',
+ '㊲' => '37',
+ '㊳' => '38',
+ '㊴' => '39',
+ '㊵' => '40',
+ '㊶' => '41',
+ '㊷' => '42',
+ '㊸' => '43',
+ '㊹' => '44',
+ '㊺' => '45',
+ '㊻' => '46',
+ '㊼' => '47',
+ '㊽' => '48',
+ '㊾' => '49',
+ '㊿' => '50',
+ '㋀' => '1月',
+ 'ã‹' => '2月',
+ '㋂' => '3月',
+ '㋃' => '4月',
+ '㋄' => '5月',
+ '㋅' => '6月',
+ '㋆' => '7月',
+ '㋇' => '8月',
+ '㋈' => '9月',
+ '㋉' => '10月',
+ '㋊' => '11月',
+ '㋋' => '12月',
+ '㋌' => 'Hg',
+ 'ã‹' => 'erg',
+ 'ã‹Ž' => 'eV',
+ 'ã‹' => 'LTD',
+ 'ã‹' => 'ã‚¢',
+ '㋑' => 'イ',
+ '㋒' => 'ウ',
+ '㋓' => 'エ',
+ '㋔' => 'オ',
+ 'ã‹•' => 'ã‚«',
+ 'ã‹–' => 'ã‚',
+ '㋗' => 'ク',
+ '㋘' => 'ケ',
+ '㋙' => 'コ',
+ '㋚' => 'サ',
+ 'ã‹›' => 'ã‚·',
+ '㋜' => 'ス',
+ 'ã‹' => 'ã‚»',
+ '㋞' => 'ソ',
+ 'ã‹Ÿ' => 'ã‚¿',
+ 'ã‹ ' => 'ãƒ',
+ '㋡' => 'ツ',
+ '㋢' => 'テ',
+ '㋣' => 'ト',
+ '㋤' => 'ナ',
+ '㋥' => 'ニ',
+ '㋦' => 'ヌ',
+ '㋧' => 'ãƒ',
+ '㋨' => 'ノ',
+ 'ã‹©' => 'ãƒ',
+ '㋪' => 'ヒ',
+ '㋫' => 'フ',
+ '㋬' => 'ヘ',
+ 'ã‹' => 'ホ',
+ '㋮' => 'マ',
+ '㋯' => 'ミ',
+ '㋰' => 'ム',
+ '㋱' => 'メ',
+ '㋲' => 'モ',
+ '㋳' => 'ヤ',
+ '㋴' => 'ユ',
+ '㋵' => 'ヨ',
+ '㋶' => 'ラ',
+ '㋷' => 'リ',
+ '㋸' => 'ル',
+ '㋹' => 'レ',
+ '㋺' => 'ãƒ',
+ '㋻' => 'ワ',
+ '㋼' => 'ヰ',
+ '㋽' => 'ヱ',
+ '㋾' => 'ヲ',
+ '㋿' => '令和',
+ '㌀' => 'ã‚¢ãƒã‚šãƒ¼ãƒˆ',
+ 'ãŒ' => 'アルファ',
+ '㌂' => 'アンペア',
+ '㌃' => 'アール',
+ '㌄' => 'イニング',
+ '㌅' => 'インãƒ',
+ '㌆' => 'ウォン',
+ '㌇' => 'エスクード',
+ '㌈' => 'エーカー',
+ '㌉' => 'オンス',
+ '㌊' => 'オーム',
+ '㌋' => 'カイリ',
+ '㌌' => 'カラット',
+ 'ãŒ' => 'ã‚«ãƒãƒªãƒ¼',
+ '㌎' => 'ã‚«ã‚™ãƒãƒ³',
+ 'ãŒ' => 'ガンマ',
+ 'ãŒ' => 'ã‚゙ガ',
+ '㌑' => 'ã‚゙ニー',
+ '㌒' => 'ã‚ュリー',
+ '㌓' => 'ã‚゙ルダー',
+ '㌔' => 'ã‚ãƒ',
+ '㌕' => 'ã‚ãƒã‚¯ã‚™ãƒ©ãƒ ',
+ '㌖' => 'ã‚ãƒãƒ¡ãƒ¼ãƒˆãƒ«',
+ '㌗' => 'ã‚ãƒãƒ¯ãƒƒãƒˆ',
+ '㌘' => 'グラム',
+ '㌙' => 'グラムトン',
+ '㌚' => 'クルゼイãƒ',
+ '㌛' => 'クãƒãƒ¼ãƒ',
+ '㌜' => 'ケース',
+ 'ãŒ' => 'コルナ',
+ '㌞' => 'コーポ',
+ '㌟' => 'サイクル',
+ '㌠' => 'サンãƒãƒ¼ãƒ ',
+ '㌡' => 'シリング',
+ '㌢' => 'センãƒ',
+ '㌣' => 'セント',
+ '㌤' => 'ダース',
+ '㌥' => 'デシ',
+ '㌦' => 'ドル',
+ '㌧' => 'トン',
+ '㌨' => 'ナノ',
+ '㌩' => 'ノット',
+ '㌪' => 'ãƒã‚¤ãƒ„',
+ '㌫' => 'ãƒã‚šãƒ¼ã‚»ãƒ³ãƒˆ',
+ '㌬' => 'ãƒã‚šãƒ¼ãƒ„',
+ 'ãŒ' => 'ãƒã‚™ãƒ¼ãƒ¬ãƒ«',
+ '㌮' => 'ピアストル',
+ '㌯' => 'ピクル',
+ '㌰' => 'ピコ',
+ '㌱' => 'ビル',
+ '㌲' => 'ファラッド',
+ '㌳' => 'フィート',
+ '㌴' => 'ブッシェル',
+ '㌵' => 'フラン',
+ '㌶' => 'ヘクタール',
+ '㌷' => 'ペソ',
+ '㌸' => 'ペニヒ',
+ '㌹' => 'ヘルツ',
+ '㌺' => 'ペンス',
+ '㌻' => 'ページ',
+ '㌼' => 'ベータ',
+ '㌽' => 'ポイント',
+ '㌾' => 'ボルト',
+ '㌿' => 'ホン',
+ 'ã€' => 'ポンド',
+ 'ã' => 'ホール',
+ 'ã‚' => 'ホーン',
+ 'ãƒ' => 'マイクãƒ',
+ 'ã„' => 'マイル',
+ 'ã…' => 'マッãƒ',
+ 'ã†' => 'マルク',
+ 'ã‡' => 'マンション',
+ 'ãˆ' => 'ミクãƒãƒ³',
+ 'ã‰' => 'ミリ',
+ 'ãŠ' => 'ミリãƒã‚™ãƒ¼ãƒ«',
+ 'ã‹' => 'メガ',
+ 'ãŒ' => 'メガトン',
+ 'ã' => 'メートル',
+ 'ãŽ' => 'ヤード',
+ 'ã' => 'ヤール',
+ 'ã' => 'ユアン',
+ 'ã‘' => 'リットル',
+ 'ã’' => 'リラ',
+ 'ã“' => 'ルピー',
+ 'ã”' => 'ルーブル',
+ 'ã•' => 'レム',
+ 'ã–' => 'レントゲン',
+ 'ã—' => 'ワット',
+ 'ã˜' => '0点',
+ 'ã™' => '1点',
+ 'ãš' => '2点',
+ 'ã›' => '3点',
+ 'ãœ' => '4点',
+ 'ã' => '5点',
+ 'ãž' => '6点',
+ 'ãŸ' => '7点',
+ 'ã ' => '8点',
+ 'ã¡' => '9点',
+ 'ã¢' => '10点',
+ 'ã£' => '11点',
+ 'ã¤' => '12点',
+ 'ã¥' => '13点',
+ 'ã¦' => '14点',
+ 'ã§' => '15点',
+ 'ã¨' => '16点',
+ 'ã©' => '17点',
+ 'ãª' => '18点',
+ 'ã«' => '19点',
+ 'ã¬' => '20点',
+ 'ã' => '21点',
+ 'ã®' => '22点',
+ 'ã¯' => '23点',
+ 'ã°' => '24点',
+ 'ã±' => 'hPa',
+ 'ã²' => 'da',
+ 'ã³' => 'AU',
+ 'ã´' => 'bar',
+ 'ãµ' => 'oV',
+ 'ã¶' => 'pc',
+ 'ã·' => 'dm',
+ 'ã¸' => 'dm2',
+ 'ã¹' => 'dm3',
+ 'ãº' => 'IU',
+ 'ã»' => 'å¹³æˆ',
+ 'ã¼' => 'æ˜å’Œ',
+ 'ã½' => '大æ£',
+ 'ã¾' => '明治',
+ 'ã¿' => 'æ ªå¼ä¼šç¤¾',
+ '㎀' => 'pA',
+ 'ãŽ' => 'nA',
+ '㎂' => 'μA',
+ '㎃' => 'mA',
+ '㎄' => 'kA',
+ '㎅' => 'KB',
+ '㎆' => 'MB',
+ '㎇' => 'GB',
+ '㎈' => 'cal',
+ '㎉' => 'kcal',
+ '㎊' => 'pF',
+ '㎋' => 'nF',
+ '㎌' => 'μF',
+ 'ãŽ' => 'μg',
+ '㎎' => 'mg',
+ 'ãŽ' => 'kg',
+ 'ãŽ' => 'Hz',
+ '㎑' => 'kHz',
+ '㎒' => 'MHz',
+ '㎓' => 'GHz',
+ '㎔' => 'THz',
+ '㎕' => 'μl',
+ '㎖' => 'ml',
+ '㎗' => 'dl',
+ '㎘' => 'kl',
+ '㎙' => 'fm',
+ '㎚' => 'nm',
+ '㎛' => 'μm',
+ '㎜' => 'mm',
+ 'ãŽ' => 'cm',
+ '㎞' => 'km',
+ '㎟' => 'mm2',
+ '㎠' => 'cm2',
+ '㎡' => 'm2',
+ '㎢' => 'km2',
+ '㎣' => 'mm3',
+ '㎤' => 'cm3',
+ '㎥' => 'm3',
+ '㎦' => 'km3',
+ '㎧' => 'm∕s',
+ '㎨' => 'm∕s2',
+ '㎩' => 'Pa',
+ '㎪' => 'kPa',
+ '㎫' => 'MPa',
+ '㎬' => 'GPa',
+ 'ãŽ' => 'rad',
+ '㎮' => 'rad∕s',
+ '㎯' => 'rad∕s2',
+ '㎰' => 'ps',
+ '㎱' => 'ns',
+ '㎲' => 'μs',
+ '㎳' => 'ms',
+ '㎴' => 'pV',
+ '㎵' => 'nV',
+ '㎶' => 'μV',
+ '㎷' => 'mV',
+ '㎸' => 'kV',
+ '㎹' => 'MV',
+ '㎺' => 'pW',
+ '㎻' => 'nW',
+ '㎼' => 'μW',
+ '㎽' => 'mW',
+ '㎾' => 'kW',
+ '㎿' => 'MW',
+ 'ã€' => 'kΩ',
+ 'ã' => 'MΩ',
+ 'ã‚' => 'a.m.',
+ 'ãƒ' => 'Bq',
+ 'ã„' => 'cc',
+ 'ã…' => 'cd',
+ 'ã†' => 'C∕kg',
+ 'ã‡' => 'Co.',
+ 'ãˆ' => 'dB',
+ 'ã‰' => 'Gy',
+ 'ãŠ' => 'ha',
+ 'ã‹' => 'HP',
+ 'ãŒ' => 'in',
+ 'ã' => 'KK',
+ 'ãŽ' => 'KM',
+ 'ã' => 'kt',
+ 'ã' => 'lm',
+ 'ã‘' => 'ln',
+ 'ã’' => 'log',
+ 'ã“' => 'lx',
+ 'ã”' => 'mb',
+ 'ã•' => 'mil',
+ 'ã–' => 'mol',
+ 'ã—' => 'PH',
+ 'ã˜' => 'p.m.',
+ 'ã™' => 'PPM',
+ 'ãš' => 'PR',
+ 'ã›' => 'sr',
+ 'ãœ' => 'Sv',
+ 'ã' => 'Wb',
+ 'ãž' => 'V∕m',
+ 'ãŸ' => 'A∕m',
+ 'ã ' => '1æ—¥',
+ 'ã¡' => '2æ—¥',
+ 'ã¢' => '3æ—¥',
+ 'ã£' => '4æ—¥',
+ 'ã¤' => '5æ—¥',
+ 'ã¥' => '6æ—¥',
+ 'ã¦' => '7æ—¥',
+ 'ã§' => '8æ—¥',
+ 'ã¨' => '9æ—¥',
+ 'ã©' => '10æ—¥',
+ 'ãª' => '11æ—¥',
+ 'ã«' => '12æ—¥',
+ 'ã¬' => '13æ—¥',
+ 'ã' => '14æ—¥',
+ 'ã®' => '15æ—¥',
+ 'ã¯' => '16æ—¥',
+ 'ã°' => '17æ—¥',
+ 'ã±' => '18æ—¥',
+ 'ã²' => '19æ—¥',
+ 'ã³' => '20æ—¥',
+ 'ã´' => '21æ—¥',
+ 'ãµ' => '22æ—¥',
+ 'ã¶' => '23æ—¥',
+ 'ã·' => '24æ—¥',
+ 'ã¸' => '25æ—¥',
+ 'ã¹' => '26æ—¥',
+ 'ãº' => '27æ—¥',
+ 'ã»' => '28æ—¥',
+ 'ã¼' => '29æ—¥',
+ 'ã½' => '30æ—¥',
+ 'ã¾' => '31æ—¥',
+ 'ã¿' => 'gal',
+ 'ꚜ' => 'ъ',
+ 'êš' => 'ÑŒ',
+ 'ê°' => 'ê¯',
+ 'ꟸ' => 'Ħ',
+ 'ꟹ' => 'œ',
+ 'êœ' => 'ꜧ',
+ 'ê' => 'ꬷ',
+ 'êž' => 'É«',
+ 'êŸ' => 'ê’',
+ 'ê©' => 'Ê',
+ 'ff' => 'ff',
+ 'ï¬' => 'fi',
+ 'fl' => 'fl',
+ 'ffi' => 'ffi',
+ 'ffl' => 'ffl',
+ 'ſt' => 'st',
+ 'st' => 'st',
+ 'ﬓ' => 'մն',
+ 'ﬔ' => 'մե',
+ 'ﬕ' => 'մի',
+ 'ﬖ' => 'վն',
+ 'ﬗ' => 'Õ´Õ',
+ 'ï¬ ' => '×¢',
+ 'ﬡ' => '×',
+ 'ﬢ' => 'ד',
+ 'ﬣ' => 'ה',
+ 'ﬤ' => 'כ',
+ 'ﬥ' => 'ל',
+ 'ﬦ' => '×',
+ 'ﬧ' => 'ר',
+ 'ﬨ' => 'ת',
+ '﬩' => '+',
+ 'ï' => '×ל',
+ 'ï' => 'Ù±',
+ 'ï‘' => 'Ù±',
+ 'ï’' => 'Ù»',
+ 'ï“' => 'Ù»',
+ 'ï”' => 'Ù»',
+ 'ï•' => 'Ù»',
+ 'ï–' => 'Ù¾',
+ 'ï—' => 'Ù¾',
+ 'ï˜' => 'Ù¾',
+ 'ï™' => 'Ù¾',
+ 'ïš' => 'Ú€',
+ 'ï›' => 'Ú€',
+ 'ïœ' => 'Ú€',
+ 'ï' => 'Ú€',
+ 'ïž' => 'Ùº',
+ 'ïŸ' => 'Ùº',
+ 'ï ' => 'Ùº',
+ 'ï¡' => 'Ùº',
+ 'ï¢' => 'Ù¿',
+ 'ï£' => 'Ù¿',
+ 'ï¤' => 'Ù¿',
+ 'ï¥' => 'Ù¿',
+ 'ï¦' => 'Ù¹',
+ 'ï§' => 'Ù¹',
+ 'ï¨' => 'Ù¹',
+ 'ï©' => 'Ù¹',
+ 'ïª' => 'Ú¤',
+ 'ï«' => 'Ú¤',
+ 'ï¬' => 'Ú¤',
+ 'ï' => 'Ú¤',
+ 'ï®' => 'Ú¦',
+ 'ï¯' => 'Ú¦',
+ 'ï°' => 'Ú¦',
+ 'ï±' => 'Ú¦',
+ 'ï²' => 'Ú„',
+ 'ï³' => 'Ú„',
+ 'ï´' => 'Ú„',
+ 'ïµ' => 'Ú„',
+ 'ï¶' => 'Úƒ',
+ 'ï·' => 'Úƒ',
+ 'ï¸' => 'Úƒ',
+ 'ï¹' => 'Úƒ',
+ 'ïº' => 'Ú†',
+ 'ï»' => 'Ú†',
+ 'ï¼' => 'Ú†',
+ 'ï½' => 'Ú†',
+ 'ï¾' => 'Ú‡',
+ 'ï¿' => 'Ú‡',
+ 'ﮀ' => 'ڇ',
+ 'ï®' => 'Ú‡',
+ 'ﮂ' => 'Ú',
+ 'ﮃ' => 'Ú',
+ 'ﮄ' => 'ڌ',
+ 'ﮅ' => 'ڌ',
+ 'ﮆ' => 'ڎ',
+ 'ﮇ' => 'ڎ',
+ 'ﮈ' => 'ڈ',
+ 'ﮉ' => 'ڈ',
+ 'ﮊ' => 'ژ',
+ 'ﮋ' => 'ژ',
+ 'ﮌ' => 'ڑ',
+ 'ï®' => 'Ú‘',
+ 'ﮎ' => 'ک',
+ 'ï®' => 'Ú©',
+ 'ï®' => 'Ú©',
+ 'ﮑ' => 'ک',
+ 'ï®’' => 'Ú¯',
+ 'ﮓ' => 'گ',
+ 'ï®”' => 'Ú¯',
+ 'ﮕ' => 'گ',
+ 'ï®–' => 'Ú³',
+ 'ï®—' => 'Ú³',
+ 'ﮘ' => 'ڳ',
+ 'ï®™' => 'Ú³',
+ 'ﮚ' => 'ڱ',
+ 'ï®›' => 'Ú±',
+ 'ﮜ' => 'ڱ',
+ 'ï®' => 'Ú±',
+ 'ﮞ' => 'ں',
+ 'ﮟ' => 'ں',
+ 'ï® ' => 'Ú»',
+ 'ﮡ' => 'ڻ',
+ 'ﮢ' => 'ڻ',
+ 'ﮣ' => 'ڻ',
+ 'ﮤ' => 'ۀ',
+ 'ﮥ' => 'ۀ',
+ 'ﮦ' => 'Û',
+ 'ﮧ' => 'Û',
+ 'ﮨ' => 'Û',
+ 'ﮩ' => 'Û',
+ 'ﮪ' => 'ھ',
+ 'ﮫ' => 'ھ',
+ 'ﮬ' => 'ھ',
+ 'ï®' => 'Ú¾',
+ 'ï®®' => 'Û’',
+ 'ﮯ' => 'ے',
+ 'ï®°' => 'Û’Ù”',
+ 'ï®±' => 'Û’Ù”',
+ 'ﯓ' => 'Ú',
+ 'ﯔ' => 'Ú',
+ 'ﯕ' => 'Ú',
+ 'ﯖ' => 'Ú',
+ 'ﯗ' => 'ۇ',
+ 'ﯘ' => 'ۇ',
+ 'ﯙ' => 'ۆ',
+ 'ﯚ' => 'ۆ',
+ 'ﯛ' => 'ۈ',
+ 'ﯜ' => 'ۈ',
+ 'ï¯' => 'Û‡Ù´',
+ 'ﯞ' => 'ۋ',
+ 'ﯟ' => 'ۋ',
+ 'ï¯ ' => 'Û…',
+ 'ﯡ' => 'ۅ',
+ 'ﯢ' => 'ۉ',
+ 'ﯣ' => 'ۉ',
+ 'ﯤ' => 'Û',
+ 'ﯥ' => 'Û',
+ 'ﯦ' => 'Û',
+ 'ﯧ' => 'Û',
+ 'ﯨ' => 'ى',
+ 'ﯩ' => 'ى',
+ 'ﯪ' => 'ئا',
+ 'ﯫ' => 'ئا',
+ 'ﯬ' => 'ئە',
+ 'ï¯' => 'ÙŠÙ”Û•',
+ 'ﯮ' => 'ئو',
+ 'ﯯ' => 'ئو',
+ 'ﯰ' => 'ئۇ',
+ 'ﯱ' => 'ئۇ',
+ 'ﯲ' => 'ئۆ',
+ 'ﯳ' => 'ئۆ',
+ 'ﯴ' => 'ئۈ',
+ 'ﯵ' => 'ئۈ',
+ 'ﯶ' => 'ÙŠÙ”Û',
+ 'ﯷ' => 'ÙŠÙ”Û',
+ 'ﯸ' => 'ÙŠÙ”Û',
+ 'ﯹ' => 'ئى',
+ 'ﯺ' => 'ئى',
+ 'ﯻ' => 'ئى',
+ 'ﯼ' => 'ی',
+ 'ﯽ' => 'ی',
+ 'ﯾ' => 'ی',
+ 'ﯿ' => 'ی',
+ 'ﰀ' => 'ئج',
+ 'ï°' => 'ÙŠÙ”Ø',
+ 'ï°‚' => 'ÙŠÙ”Ù…',
+ 'ï°ƒ' => 'ÙŠÙ”Ù‰',
+ 'ï°„' => 'ÙŠÙ”ÙŠ',
+ 'ﰅ' => 'بج',
+ 'ï°†' => 'بØ',
+ 'ﰇ' => 'بخ',
+ 'ﰈ' => 'بم',
+ 'ﰉ' => 'بى',
+ 'ﰊ' => 'بي',
+ 'ﰋ' => 'تج',
+ 'ï°Œ' => 'تØ',
+ 'ï°' => 'تخ',
+ 'ﰎ' => 'تم',
+ 'ï°' => 'تى',
+ 'ï°' => 'تي',
+ 'ﰑ' => 'ثج',
+ 'ﰒ' => 'ثم',
+ 'ﰓ' => 'ثى',
+ 'ﰔ' => 'ثي',
+ 'ï°•' => 'جØ',
+ 'ﰖ' => 'جم',
+ 'ï°—' => 'Øج',
+ 'ï°˜' => 'ØÙ…',
+ 'ﰙ' => 'خج',
+ 'ï°š' => 'Ø®Ø',
+ 'ﰛ' => 'خم',
+ 'ﰜ' => 'سج',
+ 'ï°' => 'سØ',
+ 'ﰞ' => 'سخ',
+ 'ﰟ' => 'سم',
+ 'ï° ' => 'صØ',
+ 'ﰡ' => 'صم',
+ 'ﰢ' => 'ضج',
+ 'ï°£' => 'ضØ',
+ 'ﰤ' => 'ضخ',
+ 'ﰥ' => 'ضم',
+ 'ï°¦' => 'Ø·Ø',
+ 'ﰧ' => 'طم',
+ 'ﰨ' => 'ظم',
+ 'ﰩ' => 'عج',
+ 'ﰪ' => 'عم',
+ 'ﰫ' => 'غج',
+ 'ﰬ' => 'غم',
+ 'ï°' => 'Ùج',
+ 'ï°®' => 'ÙØ',
+ 'ï°¯' => 'ÙØ®',
+ 'ï°°' => 'ÙÙ…',
+ 'ï°±' => 'ÙÙ‰',
+ 'ï°²' => 'ÙÙŠ',
+ 'ï°³' => 'Ù‚Ø',
+ 'ﰴ' => 'قم',
+ 'ﰵ' => 'قى',
+ 'ﰶ' => 'قي',
+ 'ﰷ' => 'كا',
+ 'ﰸ' => 'كج',
+ 'ï°¹' => 'ÙƒØ',
+ 'ﰺ' => 'كخ',
+ 'ﰻ' => 'كل',
+ 'ﰼ' => 'كم',
+ 'ﰽ' => 'كى',
+ 'ﰾ' => 'كي',
+ 'ﰿ' => 'لج',
+ 'ï±€' => 'Ù„Ø',
+ 'ï±' => 'لخ',
+ 'ﱂ' => 'لم',
+ 'ﱃ' => 'لى',
+ 'ﱄ' => 'لي',
+ 'ﱅ' => 'مج',
+ 'ﱆ' => 'Ù…Ø',
+ 'ﱇ' => 'مخ',
+ 'ﱈ' => 'مم',
+ 'ﱉ' => 'مى',
+ 'ﱊ' => 'مي',
+ 'ﱋ' => 'نج',
+ 'ﱌ' => 'Ù†Ø',
+ 'ï±' => 'نخ',
+ 'ﱎ' => 'نم',
+ 'ï±' => 'نى',
+ 'ï±' => 'ني',
+ 'ﱑ' => 'هج',
+ 'ﱒ' => 'هم',
+ 'ﱓ' => 'هى',
+ 'ﱔ' => 'هي',
+ 'ﱕ' => 'يج',
+ 'ï±–' => 'ÙŠØ',
+ 'ﱗ' => 'يخ',
+ 'ﱘ' => 'يم',
+ 'ﱙ' => 'يى',
+ 'ﱚ' => 'يي',
+ 'ﱛ' => 'ذٰ',
+ 'ﱜ' => 'رٰ',
+ 'ï±' => 'ىٰ',
+ 'ﱞ' => ' ٌّ',
+ 'ﱟ' => ' ÙÙ‘',
+ 'ï± ' => ' ÙŽÙ‘',
+ 'ﱡ' => ' ÙÙ‘',
+ 'ï±¢' => ' ÙÙ‘',
+ 'ﱣ' => ' ّٰ',
+ 'ﱤ' => 'ئر',
+ 'ﱥ' => 'ئز',
+ 'ﱦ' => 'ئم',
+ 'ﱧ' => 'ئن',
+ 'ﱨ' => 'ئى',
+ 'ﱩ' => 'ئي',
+ 'ﱪ' => 'بر',
+ 'ﱫ' => 'بز',
+ 'ﱬ' => 'بم',
+ 'ï±' => 'بن',
+ 'ﱮ' => 'بى',
+ 'ﱯ' => 'بي',
+ 'ﱰ' => 'تر',
+ 'ﱱ' => 'تز',
+ 'ﱲ' => 'تم',
+ 'ﱳ' => 'تن',
+ 'ﱴ' => 'تى',
+ 'ﱵ' => 'تي',
+ 'ﱶ' => 'ثر',
+ 'ﱷ' => 'ثز',
+ 'ﱸ' => 'ثم',
+ 'ﱹ' => 'ثن',
+ 'ﱺ' => 'ثى',
+ 'ﱻ' => 'ثي',
+ 'ï±¼' => 'ÙÙ‰',
+ 'ï±½' => 'ÙÙŠ',
+ 'ﱾ' => 'قى',
+ 'ﱿ' => 'قي',
+ 'ﲀ' => 'كا',
+ 'ï²' => 'كل',
+ 'ﲂ' => 'كم',
+ 'ﲃ' => 'كى',
+ 'ﲄ' => 'كي',
+ 'ﲅ' => 'لم',
+ 'ﲆ' => 'لى',
+ 'ﲇ' => 'لي',
+ 'ﲈ' => 'ما',
+ 'ﲉ' => 'مم',
+ 'ﲊ' => 'نر',
+ 'ﲋ' => 'نز',
+ 'ﲌ' => 'نم',
+ 'ï²' => 'نن',
+ 'ﲎ' => 'نى',
+ 'ï²' => 'ني',
+ 'ï²' => 'ىٰ',
+ 'ﲑ' => 'ير',
+ 'ﲒ' => 'يز',
+ 'ﲓ' => 'يم',
+ 'ﲔ' => 'ين',
+ 'ﲕ' => 'يى',
+ 'ﲖ' => 'يي',
+ 'ﲗ' => 'ئج',
+ 'ﲘ' => 'ÙŠÙ”Ø',
+ 'ﲙ' => 'ئخ',
+ 'ﲚ' => 'ئم',
+ 'ï²›' => 'ÙŠÙ”Ù‡',
+ 'ﲜ' => 'بج',
+ 'ï²' => 'بØ',
+ 'ﲞ' => 'بخ',
+ 'ﲟ' => 'بم',
+ 'ï² ' => 'به',
+ 'ﲡ' => 'تج',
+ 'ï²¢' => 'تØ',
+ 'ﲣ' => 'تخ',
+ 'ﲤ' => 'تم',
+ 'ﲥ' => 'ته',
+ 'ﲦ' => 'ثم',
+ 'ﲧ' => 'جØ',
+ 'ﲨ' => 'جم',
+ 'ﲩ' => 'Øج',
+ 'ﲪ' => 'ØÙ…',
+ 'ﲫ' => 'خج',
+ 'ﲬ' => 'خم',
+ 'ï²' => 'سج',
+ 'ï²®' => 'سØ',
+ 'ﲯ' => 'سخ',
+ 'ﲰ' => 'سم',
+ 'ï²±' => 'صØ',
+ 'ﲲ' => 'صخ',
+ 'ﲳ' => 'صم',
+ 'ﲴ' => 'ضج',
+ 'ï²µ' => 'ضØ',
+ 'ﲶ' => 'ضخ',
+ 'ﲷ' => 'ضم',
+ 'ﲸ' => 'Ø·Ø',
+ 'ﲹ' => 'ظم',
+ 'ﲺ' => 'عج',
+ 'ﲻ' => 'عم',
+ 'ﲼ' => 'غج',
+ 'ﲽ' => 'غم',
+ 'ï²¾' => 'Ùج',
+ 'ﲿ' => 'ÙØ',
+ 'ï³€' => 'ÙØ®',
+ 'ï³' => 'ÙÙ…',
+ 'ﳂ' => 'Ù‚Ø',
+ 'ﳃ' => 'قم',
+ 'ﳄ' => 'كج',
+ 'ï³…' => 'ÙƒØ',
+ 'ﳆ' => 'كخ',
+ 'ﳇ' => 'كل',
+ 'ﳈ' => 'كم',
+ 'ﳉ' => 'لج',
+ 'ﳊ' => 'Ù„Ø',
+ 'ﳋ' => 'لخ',
+ 'ﳌ' => 'لم',
+ 'ï³' => 'له',
+ 'ﳎ' => 'مج',
+ 'ï³' => 'Ù…Ø',
+ 'ï³' => 'مخ',
+ 'ﳑ' => 'مم',
+ 'ﳒ' => 'نج',
+ 'ﳓ' => 'Ù†Ø',
+ 'ﳔ' => 'نخ',
+ 'ﳕ' => 'نم',
+ 'ﳖ' => 'نه',
+ 'ﳗ' => 'هج',
+ 'ﳘ' => 'هم',
+ 'ﳙ' => 'هٰ',
+ 'ﳚ' => 'يج',
+ 'ï³›' => 'ÙŠØ',
+ 'ﳜ' => 'يخ',
+ 'ï³' => 'يم',
+ 'ﳞ' => 'يه',
+ 'ﳟ' => 'ئم',
+ 'ï³ ' => 'ÙŠÙ”Ù‡',
+ 'ﳡ' => 'بم',
+ 'ﳢ' => 'به',
+ 'ﳣ' => 'تم',
+ 'ﳤ' => 'ته',
+ 'ﳥ' => 'ثم',
+ 'ﳦ' => 'ثه',
+ 'ﳧ' => 'سم',
+ 'ﳨ' => 'سه',
+ 'ﳩ' => 'شم',
+ 'ﳪ' => 'شه',
+ 'ﳫ' => 'كل',
+ 'ﳬ' => 'كم',
+ 'ï³' => 'لم',
+ 'ﳮ' => 'نم',
+ 'ﳯ' => 'نه',
+ 'ﳰ' => 'يم',
+ 'ﳱ' => 'يه',
+ 'ï³²' => 'Ù€ÙŽÙ‘',
+ 'ï³³' => 'Ù€ÙÙ‘',
+ 'ï³´' => 'Ù€ÙÙ‘',
+ 'ﳵ' => 'طى',
+ 'ﳶ' => 'طي',
+ 'ﳷ' => 'عى',
+ 'ﳸ' => 'عي',
+ 'ﳹ' => 'غى',
+ 'ﳺ' => 'غي',
+ 'ﳻ' => 'سى',
+ 'ﳼ' => 'سي',
+ 'ﳽ' => 'شى',
+ 'ﳾ' => 'شي',
+ 'ﳿ' => 'ØÙ‰',
+ 'ï´€' => 'ØÙŠ',
+ 'ï´' => 'جى',
+ 'ﴂ' => 'جي',
+ 'ﴃ' => 'خى',
+ 'ﴄ' => 'خي',
+ 'ﴅ' => 'صى',
+ 'ﴆ' => 'صي',
+ 'ﴇ' => 'ضى',
+ 'ﴈ' => 'ضي',
+ 'ﴉ' => 'شج',
+ 'ï´Š' => 'Ø´Ø',
+ 'ﴋ' => 'شخ',
+ 'ﴌ' => 'شم',
+ 'ï´' => 'شر',
+ 'ﴎ' => 'سر',
+ 'ï´' => 'صر',
+ 'ï´' => 'ضر',
+ 'ﴑ' => 'طى',
+ 'ﴒ' => 'طي',
+ 'ﴓ' => 'عى',
+ 'ﴔ' => 'عي',
+ 'ﴕ' => 'غى',
+ 'ﴖ' => 'غي',
+ 'ﴗ' => 'سى',
+ 'ﴘ' => 'سي',
+ 'ﴙ' => 'شى',
+ 'ﴚ' => 'شي',
+ 'ï´›' => 'ØÙ‰',
+ 'ï´œ' => 'ØÙŠ',
+ 'ï´' => 'جى',
+ 'ﴞ' => 'جي',
+ 'ﴟ' => 'خى',
+ 'ï´ ' => 'خي',
+ 'ﴡ' => 'صى',
+ 'ﴢ' => 'صي',
+ 'ﴣ' => 'ضى',
+ 'ﴤ' => 'ضي',
+ 'ﴥ' => 'شج',
+ 'ï´¦' => 'Ø´Ø',
+ 'ﴧ' => 'شخ',
+ 'ﴨ' => 'شم',
+ 'ﴩ' => 'شر',
+ 'ﴪ' => 'سر',
+ 'ﴫ' => 'صر',
+ 'ﴬ' => 'ضر',
+ 'ï´' => 'شج',
+ 'ï´®' => 'Ø´Ø',
+ 'ﴯ' => 'شخ',
+ 'ﴰ' => 'شم',
+ 'ﴱ' => 'سه',
+ 'ﴲ' => 'شه',
+ 'ﴳ' => 'طم',
+ 'ﴴ' => 'سج',
+ 'ï´µ' => 'سØ',
+ 'ﴶ' => 'سخ',
+ 'ﴷ' => 'شج',
+ 'ï´¸' => 'Ø´Ø',
+ 'ﴹ' => 'شخ',
+ 'ﴺ' => 'طم',
+ 'ﴻ' => 'ظم',
+ 'ﴼ' => 'اً',
+ 'ﴽ' => 'اً',
+ 'ïµ' => 'تجم',
+ 'ﵑ' => 'تØج',
+ 'ïµ’' => 'تØج',
+ 'ﵓ' => 'تØÙ…',
+ 'ﵔ' => 'تخم',
+ 'ﵕ' => 'تمج',
+ 'ïµ–' => 'تمØ',
+ 'ﵗ' => 'تمخ',
+ 'ﵘ' => 'جمØ',
+ 'ïµ™' => 'جمØ',
+ 'ﵚ' => 'Øمي',
+ 'ïµ›' => 'Øمى',
+ 'ﵜ' => 'سØج',
+ 'ïµ' => 'سجØ',
+ 'ﵞ' => 'سجى',
+ 'ﵟ' => 'سمØ',
+ 'ïµ ' => 'سمØ',
+ 'ﵡ' => 'سمج',
+ 'ﵢ' => 'سمم',
+ 'ﵣ' => 'سمم',
+ 'ﵤ' => 'صØØ',
+ 'ïµ¥' => 'صØØ',
+ 'ﵦ' => 'صمم',
+ 'ﵧ' => 'Ø´ØÙ…',
+ 'ﵨ' => 'Ø´ØÙ…',
+ 'ﵩ' => 'شجي',
+ 'ﵪ' => 'شمخ',
+ 'ﵫ' => 'شمخ',
+ 'ﵬ' => 'شمم',
+ 'ïµ' => 'شمم',
+ 'ïµ®' => 'ضØÙ‰',
+ 'ﵯ' => 'ضخم',
+ 'ﵰ' => 'ضخم',
+ 'ïµ±' => 'طمØ',
+ 'ïµ²' => 'طمØ',
+ 'ﵳ' => 'طمم',
+ 'ﵴ' => 'طمي',
+ 'ﵵ' => 'عجم',
+ 'ﵶ' => 'عمم',
+ 'ﵷ' => 'عمم',
+ 'ﵸ' => 'عمى',
+ 'ﵹ' => 'غمم',
+ 'ﵺ' => 'غمي',
+ 'ﵻ' => 'غمى',
+ 'ïµ¼' => 'Ùخم',
+ 'ïµ½' => 'Ùخم',
+ 'ïµ¾' => 'قمØ',
+ 'ﵿ' => 'قمم',
+ 'ﶀ' => 'Ù„ØÙ…',
+ 'ï¶' => 'Ù„ØÙŠ',
+ 'ﶂ' => 'Ù„ØÙ‰',
+ 'ﶃ' => 'لجج',
+ 'ﶄ' => 'لجج',
+ 'ﶅ' => 'لخم',
+ 'ﶆ' => 'لخم',
+ 'ﶇ' => 'لمØ',
+ 'ﶈ' => 'لمØ',
+ 'ﶉ' => 'Ù…Øج',
+ 'ﶊ' => 'Ù…ØÙ…',
+ 'ﶋ' => 'Ù…ØÙŠ',
+ 'ﶌ' => 'مجØ',
+ 'ï¶' => 'مجم',
+ 'ﶎ' => 'مخج',
+ 'ï¶' => 'مخم',
+ 'ﶒ' => 'مجخ',
+ 'ﶓ' => 'همج',
+ 'ﶔ' => 'همم',
+ 'ﶕ' => 'Ù†ØÙ…',
+ 'ﶖ' => 'Ù†ØÙ‰',
+ 'ﶗ' => 'نجم',
+ 'ﶘ' => 'نجم',
+ 'ﶙ' => 'نجى',
+ 'ﶚ' => 'نمي',
+ 'ﶛ' => 'نمى',
+ 'ﶜ' => 'يمم',
+ 'ï¶' => 'يمم',
+ 'ﶞ' => 'بخي',
+ 'ﶟ' => 'تجي',
+ 'ï¶ ' => 'تجى',
+ 'ﶡ' => 'تخي',
+ 'ﶢ' => 'تخى',
+ 'ﶣ' => 'تمي',
+ 'ﶤ' => 'تمى',
+ 'ﶥ' => 'جمي',
+ 'ﶦ' => 'جØÙ‰',
+ 'ﶧ' => 'جمى',
+ 'ﶨ' => 'سخى',
+ 'ﶩ' => 'صØÙŠ',
+ 'ﶪ' => 'Ø´ØÙŠ',
+ 'ﶫ' => 'ضØÙŠ',
+ 'ﶬ' => 'لجي',
+ 'ï¶' => 'لمي',
+ 'ﶮ' => 'ÙŠØÙŠ',
+ 'ﶯ' => 'يجي',
+ 'ﶰ' => 'يمي',
+ 'ﶱ' => 'ممي',
+ 'ﶲ' => 'قمي',
+ 'ﶳ' => 'Ù†ØÙŠ',
+ 'ﶴ' => 'قمØ',
+ 'ﶵ' => 'Ù„ØÙ…',
+ 'ﶶ' => 'عمي',
+ 'ﶷ' => 'كمي',
+ 'ﶸ' => 'نجØ',
+ 'ﶹ' => 'مخي',
+ 'ﶺ' => 'لجم',
+ 'ﶻ' => 'كمم',
+ 'ﶼ' => 'لجم',
+ 'ﶽ' => 'نجØ',
+ 'ﶾ' => 'جØÙŠ',
+ 'ﶿ' => 'Øجي',
+ 'ﷀ' => 'مجي',
+ 'ï·' => 'Ùمي',
+ 'ï·‚' => 'بØÙŠ',
+ 'ﷃ' => 'كمم',
+ 'ﷄ' => 'عجم',
+ 'ﷅ' => 'صمم',
+ 'ﷆ' => 'سخي',
+ 'ﷇ' => 'نجي',
+ 'ﷰ' => 'صلے',
+ 'ﷱ' => 'قلے',
+ 'ﷲ' => 'الله',
+ 'ﷳ' => 'اكبر',
+ 'ï·´' => 'Ù…Øمد',
+ 'ﷵ' => 'صلعم',
+ 'ﷶ' => 'رسول',
+ 'ﷷ' => 'عليه',
+ 'ﷸ' => 'وسلم',
+ 'ﷹ' => 'صلى',
+ 'ﷺ' => 'صلى الله عليه وسلم',
+ 'ﷻ' => 'جل جلاله',
+ '﷼' => 'ریال',
+ 'ï¸' => ',',
+ '︑' => 'ã€',
+ '︒' => '。',
+ '︓' => ':',
+ '︔' => ';',
+ '︕' => '!',
+ '︖' => '?',
+ '︗' => '〖',
+ '︘' => '〗',
+ '︙' => '...',
+ '︰' => '..',
+ '︱' => '—',
+ '︲' => '–',
+ '︳' => '_',
+ '︴' => '_',
+ '︵' => '(',
+ '︶' => ')',
+ '︷' => '{',
+ '︸' => '}',
+ '︹' => '〔',
+ '︺' => '〕',
+ '︻' => 'ã€',
+ '︼' => '】',
+ '︽' => '《',
+ '︾' => '》',
+ '︿' => '〈',
+ '﹀' => '〉',
+ 'ï¹' => '「',
+ '﹂' => 'ã€',
+ '﹃' => '『',
+ '﹄' => 'ã€',
+ '﹇' => '[',
+ '﹈' => ']',
+ '﹉' => ' ̅',
+ '﹊' => ' ̅',
+ '﹋' => ' ̅',
+ '﹌' => ' ̅',
+ 'ï¹' => '_',
+ '﹎' => '_',
+ 'ï¹' => '_',
+ 'ï¹' => ',',
+ '﹑' => 'ã€',
+ 'ï¹’' => '.',
+ 'ï¹”' => ';',
+ '﹕' => ':',
+ 'ï¹–' => '?',
+ 'ï¹—' => '!',
+ '﹘' => '—',
+ 'ï¹™' => '(',
+ '﹚' => ')',
+ 'ï¹›' => '{',
+ '﹜' => '}',
+ 'ï¹' => '〔',
+ '﹞' => '〕',
+ '﹟' => '#',
+ 'ï¹ ' => '&',
+ '﹡' => '*',
+ 'ï¹¢' => '+',
+ 'ï¹£' => '-',
+ '﹤' => '<',
+ 'ï¹¥' => '>',
+ '﹦' => '=',
+ '﹨' => '\\',
+ '﹩' => '$',
+ '﹪' => '%',
+ '﹫' => '@',
+ 'ï¹°' => ' Ù‹',
+ 'ﹱ' => 'ـً',
+ 'ﹲ' => ' ٌ',
+ 'ï¹´' => ' Ù',
+ 'ﹶ' => ' َ',
+ 'ï¹·' => 'Ù€ÙŽ',
+ 'ﹸ' => ' Ù',
+ 'ï¹¹' => 'Ù€Ù',
+ 'ﹺ' => ' Ù',
+ 'ï¹»' => 'Ù€Ù',
+ 'ï¹¼' => ' Ù‘',
+ 'ﹽ' => 'ـّ',
+ 'ï¹¾' => ' Ù’',
+ 'ﹿ' => 'ـْ',
+ 'ﺀ' => 'ء',
+ 'ïº' => 'آ',
+ 'ﺂ' => 'آ',
+ 'ﺃ' => 'أ',
+ 'ﺄ' => 'أ',
+ 'ﺅ' => 'ؤ',
+ 'ﺆ' => 'ؤ',
+ 'ﺇ' => 'إ',
+ 'ﺈ' => 'إ',
+ 'ﺉ' => 'ئ',
+ 'ﺊ' => 'ئ',
+ 'ﺋ' => 'ئ',
+ 'ﺌ' => 'ئ',
+ 'ïº' => 'ا',
+ 'ﺎ' => 'ا',
+ 'ïº' => 'ب',
+ 'ïº' => 'ب',
+ 'ﺑ' => 'ب',
+ 'ﺒ' => 'ب',
+ 'ﺓ' => 'ة',
+ 'ﺔ' => 'ة',
+ 'ﺕ' => 'ت',
+ 'ﺖ' => 'ت',
+ 'ﺗ' => 'ت',
+ 'ﺘ' => 'ت',
+ 'ﺙ' => 'ث',
+ 'ﺚ' => 'ث',
+ 'ﺛ' => 'ث',
+ 'ﺜ' => 'ث',
+ 'ïº' => 'ج',
+ 'ﺞ' => 'ج',
+ 'ﺟ' => 'ج',
+ 'ïº ' => 'ج',
+ 'ﺡ' => 'Ø',
+ 'ﺢ' => 'Ø',
+ 'ﺣ' => 'Ø',
+ 'ﺤ' => 'Ø',
+ 'ﺥ' => 'خ',
+ 'ﺦ' => 'خ',
+ 'ﺧ' => 'خ',
+ 'ﺨ' => 'خ',
+ 'ﺩ' => 'د',
+ 'ﺪ' => 'د',
+ 'ﺫ' => 'ذ',
+ 'ﺬ' => 'ذ',
+ 'ïº' => 'ر',
+ 'ﺮ' => 'ر',
+ 'ﺯ' => 'ز',
+ 'ﺰ' => 'ز',
+ 'ﺱ' => 'س',
+ 'ﺲ' => 'س',
+ 'ﺳ' => 'س',
+ 'ﺴ' => 'س',
+ 'ﺵ' => 'ش',
+ 'ﺶ' => 'ش',
+ 'ﺷ' => 'ش',
+ 'ﺸ' => 'ش',
+ 'ﺹ' => 'ص',
+ 'ﺺ' => 'ص',
+ 'ﺻ' => 'ص',
+ 'ﺼ' => 'ص',
+ 'ﺽ' => 'ض',
+ 'ﺾ' => 'ض',
+ 'ﺿ' => 'ض',
+ 'ﻀ' => 'ض',
+ 'ï»' => 'Ø·',
+ 'ﻂ' => 'ط',
+ 'ﻃ' => 'ط',
+ 'ﻄ' => 'ط',
+ 'ﻅ' => 'ظ',
+ 'ﻆ' => 'ظ',
+ 'ﻇ' => 'ظ',
+ 'ﻈ' => 'ظ',
+ 'ﻉ' => 'ع',
+ 'ﻊ' => 'ع',
+ 'ﻋ' => 'ع',
+ 'ﻌ' => 'ع',
+ 'ï»' => 'غ',
+ 'ﻎ' => 'غ',
+ 'ï»' => 'غ',
+ 'ï»' => 'غ',
+ 'ﻑ' => 'Ù',
+ 'ï»’' => 'Ù',
+ 'ﻓ' => 'Ù',
+ 'ï»”' => 'Ù',
+ 'ﻕ' => 'ق',
+ 'ï»–' => 'Ù‚',
+ 'ï»—' => 'Ù‚',
+ 'ﻘ' => 'ق',
+ 'ï»™' => 'Ùƒ',
+ 'ﻚ' => 'ك',
+ 'ï»›' => 'Ùƒ',
+ 'ﻜ' => 'ك',
+ 'ï»' => 'Ù„',
+ 'ﻞ' => 'ل',
+ 'ﻟ' => 'ل',
+ 'ï» ' => 'Ù„',
+ 'ﻡ' => 'م',
+ 'ﻢ' => 'م',
+ 'ﻣ' => 'م',
+ 'ﻤ' => 'م',
+ 'ﻥ' => 'ن',
+ 'ﻦ' => 'ن',
+ 'ﻧ' => 'ن',
+ 'ﻨ' => 'ن',
+ 'ﻩ' => 'ه',
+ 'ﻪ' => 'ه',
+ 'ﻫ' => 'ه',
+ 'ﻬ' => 'ه',
+ 'ï»' => 'Ùˆ',
+ 'ï»®' => 'Ùˆ',
+ 'ﻯ' => 'ى',
+ 'ï»°' => 'Ù‰',
+ 'ï»±' => 'ÙŠ',
+ 'ﻲ' => 'ي',
+ 'ﻳ' => 'ي',
+ 'ï»´' => 'ÙŠ',
+ 'ﻵ' => 'لآ',
+ 'ﻶ' => 'لآ',
+ 'ﻷ' => 'لأ',
+ 'ﻸ' => 'لأ',
+ 'ﻹ' => 'لإ',
+ 'ﻺ' => 'لإ',
+ 'ﻻ' => 'لا',
+ 'ﻼ' => 'لا',
+ 'ï¼' => '!',
+ '"' => '"',
+ '#' => '#',
+ '$' => '$',
+ 'ï¼…' => '%',
+ '&' => '&',
+ ''' => '\'',
+ '(' => '(',
+ ')' => ')',
+ '*' => '*',
+ '+' => '+',
+ ',' => ',',
+ 'ï¼' => '-',
+ '.' => '.',
+ 'ï¼' => '/',
+ 'ï¼' => '0',
+ '1' => '1',
+ 'ï¼’' => '2',
+ '3' => '3',
+ 'ï¼”' => '4',
+ '5' => '5',
+ 'ï¼–' => '6',
+ 'ï¼—' => '7',
+ '8' => '8',
+ 'ï¼™' => '9',
+ ':' => ':',
+ 'ï¼›' => ';',
+ '<' => '<',
+ 'ï¼' => '=',
+ '>' => '>',
+ '?' => '?',
+ 'ï¼ ' => '@',
+ 'A' => 'A',
+ 'ï¼¢' => 'B',
+ 'ï¼£' => 'C',
+ 'D' => 'D',
+ 'ï¼¥' => 'E',
+ 'F' => 'F',
+ 'G' => 'G',
+ 'H' => 'H',
+ 'I' => 'I',
+ 'J' => 'J',
+ 'K' => 'K',
+ 'L' => 'L',
+ 'ï¼' => 'M',
+ 'ï¼®' => 'N',
+ 'O' => 'O',
+ 'ï¼°' => 'P',
+ 'ï¼±' => 'Q',
+ 'ï¼²' => 'R',
+ 'ï¼³' => 'S',
+ 'ï¼´' => 'T',
+ 'ï¼µ' => 'U',
+ 'V' => 'V',
+ 'ï¼·' => 'W',
+ 'X' => 'X',
+ 'ï¼¹' => 'Y',
+ 'Z' => 'Z',
+ 'ï¼»' => '[',
+ 'ï¼¼' => '\\',
+ 'ï¼½' => ']',
+ 'ï¼¾' => '^',
+ '_' => '_',
+ 'ï½€' => '`',
+ 'ï½' => 'a',
+ 'b' => 'b',
+ 'c' => 'c',
+ 'd' => 'd',
+ 'ï½…' => 'e',
+ 'f' => 'f',
+ 'g' => 'g',
+ 'h' => 'h',
+ 'i' => 'i',
+ 'j' => 'j',
+ 'k' => 'k',
+ 'l' => 'l',
+ 'ï½' => 'm',
+ 'n' => 'n',
+ 'ï½' => 'o',
+ 'ï½' => 'p',
+ 'q' => 'q',
+ 'ï½’' => 'r',
+ 's' => 's',
+ 'ï½”' => 't',
+ 'u' => 'u',
+ 'ï½–' => 'v',
+ 'ï½—' => 'w',
+ 'x' => 'x',
+ 'ï½™' => 'y',
+ 'z' => 'z',
+ 'ï½›' => '{',
+ '|' => '|',
+ 'ï½' => '}',
+ '~' => '~',
+ '⦅' => '⦅',
+ 'ï½ ' => '⦆',
+ '。' => '。',
+ '「' => '「',
+ 'ï½£' => 'ã€',
+ '、' => 'ã€',
+ '・' => '・',
+ 'ヲ' => 'ヲ',
+ 'ァ' => 'ァ',
+ 'ィ' => 'ィ',
+ 'ゥ' => 'ゥ',
+ 'ェ' => 'ェ',
+ 'ォ' => 'ォ',
+ 'ャ' => 'ャ',
+ 'ï½' => 'ュ',
+ 'ョ' => 'ョ',
+ 'ッ' => 'ッ',
+ 'ー' => 'ー',
+ 'ï½±' => 'ã‚¢',
+ 'イ' => 'イ',
+ 'ウ' => 'ウ',
+ 'エ' => 'エ',
+ 'オ' => 'オ',
+ 'カ' => 'カ',
+ 'ï½·' => 'ã‚',
+ 'ク' => 'ク',
+ 'ケ' => 'ケ',
+ 'コ' => 'コ',
+ 'サ' => 'サ',
+ 'ï½¼' => 'ã‚·',
+ 'ス' => 'ス',
+ 'ï½¾' => 'ã‚»',
+ 'ソ' => 'ソ',
+ 'ï¾€' => 'ã‚¿',
+ 'ï¾' => 'ãƒ',
+ 'ツ' => 'ツ',
+ 'テ' => 'テ',
+ 'ト' => 'ト',
+ 'ナ' => 'ナ',
+ 'ニ' => 'ニ',
+ 'ヌ' => 'ヌ',
+ 'ネ' => 'ãƒ',
+ 'ノ' => 'ノ',
+ 'ハ' => 'ãƒ',
+ 'ヒ' => 'ヒ',
+ 'フ' => 'フ',
+ 'ï¾' => 'ヘ',
+ 'ホ' => 'ホ',
+ 'ï¾' => 'マ',
+ 'ï¾' => 'ミ',
+ 'ム' => 'ム',
+ 'メ' => 'メ',
+ 'モ' => 'モ',
+ 'ヤ' => 'ヤ',
+ 'ユ' => 'ユ',
+ 'ヨ' => 'ヨ',
+ 'ラ' => 'ラ',
+ 'リ' => 'リ',
+ 'ル' => 'ル',
+ 'レ' => 'レ',
+ 'ï¾›' => 'ãƒ',
+ 'ワ' => 'ワ',
+ 'ï¾' => 'ン',
+ '゙' => '゙',
+ '゚' => '゚',
+ 'ï¾ ' => 'á… ',
+ 'ᄀ' => 'ᄀ',
+ 'ï¾¢' => 'á„',
+ 'ᆪ' => 'ᆪ',
+ 'ᄂ' => 'ᄂ',
+ 'ᆬ' => 'ᆬ',
+ 'ᆭ' => 'á†',
+ 'ᄃ' => 'ᄃ',
+ 'ᄄ' => 'ᄄ',
+ 'ᄅ' => 'ᄅ',
+ 'ᆰ' => 'ᆰ',
+ 'ᆱ' => 'ᆱ',
+ 'ᆲ' => 'ᆲ',
+ 'ï¾' => 'ᆳ',
+ 'ᆴ' => 'ᆴ',
+ 'ᆵ' => 'ᆵ',
+ 'ï¾°' => 'á„š',
+ 'ᄆ' => 'ᄆ',
+ 'ᄇ' => 'ᄇ',
+ 'ᄈ' => 'ᄈ',
+ 'ï¾´' => 'á„¡',
+ 'ᄉ' => 'ᄉ',
+ 'ᄊ' => 'ᄊ',
+ 'ï¾·' => 'á„‹',
+ 'ᄌ' => 'ᄌ',
+ 'ï¾¹' => 'á„',
+ 'ᄎ' => 'ᄎ',
+ 'ï¾»' => 'á„',
+ 'ï¾¼' => 'á„',
+ 'ï¾½' => 'á„‘',
+ 'ï¾¾' => 'á„’',
+ 'ï¿‚' => 'á…¡',
+ 'ᅢ' => 'ᅢ',
+ 'ï¿„' => 'á…£',
+ 'ï¿…' => 'á…¤',
+ 'ᅥ' => 'ᅥ',
+ 'ᅦ' => 'ᅦ',
+ 'ï¿Š' => 'á…§',
+ 'ï¿‹' => 'á…¨',
+ 'ᅩ' => 'ᅩ',
+ 'ï¿' => 'á…ª',
+ 'ï¿Ž' => 'á…«',
+ 'ï¿' => 'á…¬',
+ 'ï¿’' => 'á…',
+ 'ï¿“' => 'á…®',
+ 'ï¿”' => 'á…¯',
+ 'ï¿•' => 'á…°',
+ 'ï¿–' => 'á…±',
+ 'ï¿—' => 'á…²',
+ 'ï¿š' => 'á…³',
+ 'ï¿›' => 'á…´',
+ 'ᅵ' => 'ᅵ',
+ 'ï¿ ' => '¢',
+ '£' => '£',
+ '¬' => '¬',
+ 'ï¿£' => ' Ì„',
+ '¦' => '¦',
+ 'ï¿¥' => 'Â¥',
+ '₩' => '₩',
+ '│' => '│',
+ 'ï¿©' => 'â†',
+ '↑' => '↑',
+ '→' => '→',
+ '↓' => '↓',
+ 'ï¿' => 'â– ',
+ 'ï¿®' => 'â—‹',
+ 'ð€' => 'A',
+ 'ð' => 'B',
+ 'ð‚' => 'C',
+ 'ðƒ' => 'D',
+ 'ð„' => 'E',
+ 'ð…' => 'F',
+ 'ð†' => 'G',
+ 'ð‡' => 'H',
+ 'ðˆ' => 'I',
+ 'ð‰' => 'J',
+ 'ðŠ' => 'K',
+ 'ð‹' => 'L',
+ 'ðŒ' => 'M',
+ 'ð' => 'N',
+ 'ðŽ' => 'O',
+ 'ð' => 'P',
+ 'ð' => 'Q',
+ 'ð‘' => 'R',
+ 'ð’' => 'S',
+ 'ð“' => 'T',
+ 'ð”' => 'U',
+ 'ð•' => 'V',
+ 'ð–' => 'W',
+ 'ð—' => 'X',
+ 'ð˜' => 'Y',
+ 'ð™' => 'Z',
+ 'ðš' => 'a',
+ 'ð›' => 'b',
+ 'ðœ' => 'c',
+ 'ð' => 'd',
+ 'ðž' => 'e',
+ 'ðŸ' => 'f',
+ 'ð ' => 'g',
+ 'ð¡' => 'h',
+ 'ð¢' => 'i',
+ 'ð£' => 'j',
+ 'ð¤' => 'k',
+ 'ð¥' => 'l',
+ 'ð¦' => 'm',
+ 'ð§' => 'n',
+ 'ð¨' => 'o',
+ 'ð©' => 'p',
+ 'ðª' => 'q',
+ 'ð«' => 'r',
+ 'ð¬' => 's',
+ 'ð' => 't',
+ 'ð®' => 'u',
+ 'ð¯' => 'v',
+ 'ð°' => 'w',
+ 'ð±' => 'x',
+ 'ð²' => 'y',
+ 'ð³' => 'z',
+ 'ð´' => 'A',
+ 'ðµ' => 'B',
+ 'ð¶' => 'C',
+ 'ð·' => 'D',
+ 'ð¸' => 'E',
+ 'ð¹' => 'F',
+ 'ðº' => 'G',
+ 'ð»' => 'H',
+ 'ð¼' => 'I',
+ 'ð½' => 'J',
+ 'ð¾' => 'K',
+ 'ð¿' => 'L',
+ 'ð‘€' => 'M',
+ 'ð‘' => 'N',
+ 'ð‘‚' => 'O',
+ 'ð‘ƒ' => 'P',
+ 'ð‘„' => 'Q',
+ 'ð‘…' => 'R',
+ 'ð‘†' => 'S',
+ 'ð‘‡' => 'T',
+ 'ð‘ˆ' => 'U',
+ 'ð‘‰' => 'V',
+ 'ð‘Š' => 'W',
+ 'ð‘‹' => 'X',
+ 'ð‘Œ' => 'Y',
+ 'ð‘' => 'Z',
+ 'ð‘Ž' => 'a',
+ 'ð‘' => 'b',
+ 'ð‘' => 'c',
+ 'ð‘‘' => 'd',
+ 'ð‘’' => 'e',
+ 'ð‘“' => 'f',
+ 'ð‘”' => 'g',
+ 'ð‘–' => 'i',
+ 'ð‘—' => 'j',
+ 'ð‘˜' => 'k',
+ 'ð‘™' => 'l',
+ 'ð‘š' => 'm',
+ 'ð‘›' => 'n',
+ 'ð‘œ' => 'o',
+ 'ð‘' => 'p',
+ 'ð‘ž' => 'q',
+ 'ð‘Ÿ' => 'r',
+ 'ð‘ ' => 's',
+ 'ð‘¡' => 't',
+ 'ð‘¢' => 'u',
+ 'ð‘£' => 'v',
+ 'ð‘¤' => 'w',
+ 'ð‘¥' => 'x',
+ 'ð‘¦' => 'y',
+ 'ð‘§' => 'z',
+ 'ð‘¨' => 'A',
+ 'ð‘©' => 'B',
+ 'ð‘ª' => 'C',
+ 'ð‘«' => 'D',
+ 'ð‘¬' => 'E',
+ 'ð‘' => 'F',
+ 'ð‘®' => 'G',
+ 'ð‘¯' => 'H',
+ 'ð‘°' => 'I',
+ 'ð‘±' => 'J',
+ 'ð‘²' => 'K',
+ 'ð‘³' => 'L',
+ 'ð‘´' => 'M',
+ 'ð‘µ' => 'N',
+ 'ð‘¶' => 'O',
+ 'ð‘·' => 'P',
+ 'ð‘¸' => 'Q',
+ 'ð‘¹' => 'R',
+ 'ð‘º' => 'S',
+ 'ð‘»' => 'T',
+ 'ð‘¼' => 'U',
+ 'ð‘½' => 'V',
+ 'ð‘¾' => 'W',
+ 'ð‘¿' => 'X',
+ 'ð’€' => 'Y',
+ 'ð’' => 'Z',
+ 'ð’‚' => 'a',
+ 'ð’ƒ' => 'b',
+ 'ð’„' => 'c',
+ 'ð’…' => 'd',
+ 'ð’†' => 'e',
+ 'ð’‡' => 'f',
+ 'ð’ˆ' => 'g',
+ 'ð’‰' => 'h',
+ 'ð’Š' => 'i',
+ 'ð’‹' => 'j',
+ 'ð’Œ' => 'k',
+ 'ð’' => 'l',
+ 'ð’Ž' => 'm',
+ 'ð’' => 'n',
+ 'ð’' => 'o',
+ 'ð’‘' => 'p',
+ 'ð’’' => 'q',
+ 'ð’“' => 'r',
+ 'ð’”' => 's',
+ 'ð’•' => 't',
+ 'ð’–' => 'u',
+ 'ð’—' => 'v',
+ 'ð’˜' => 'w',
+ 'ð’™' => 'x',
+ 'ð’š' => 'y',
+ 'ð’›' => 'z',
+ 'ð’œ' => 'A',
+ 'ð’ž' => 'C',
+ 'ð’Ÿ' => 'D',
+ 'ð’¢' => 'G',
+ 'ð’¥' => 'J',
+ 'ð’¦' => 'K',
+ 'ð’©' => 'N',
+ 'ð’ª' => 'O',
+ 'ð’«' => 'P',
+ 'ð’¬' => 'Q',
+ 'ð’®' => 'S',
+ 'ð’¯' => 'T',
+ 'ð’°' => 'U',
+ 'ð’±' => 'V',
+ 'ð’²' => 'W',
+ 'ð’³' => 'X',
+ 'ð’´' => 'Y',
+ 'ð’µ' => 'Z',
+ 'ð’¶' => 'a',
+ 'ð’·' => 'b',
+ 'ð’¸' => 'c',
+ 'ð’¹' => 'd',
+ 'ð’»' => 'f',
+ 'ð’½' => 'h',
+ 'ð’¾' => 'i',
+ 'ð’¿' => 'j',
+ 'ð“€' => 'k',
+ 'ð“' => 'l',
+ 'ð“‚' => 'm',
+ 'ð“ƒ' => 'n',
+ 'ð“…' => 'p',
+ 'ð“†' => 'q',
+ 'ð“‡' => 'r',
+ 'ð“ˆ' => 's',
+ 'ð“‰' => 't',
+ 'ð“Š' => 'u',
+ 'ð“‹' => 'v',
+ 'ð“Œ' => 'w',
+ 'ð“' => 'x',
+ 'ð“Ž' => 'y',
+ 'ð“' => 'z',
+ 'ð“' => 'A',
+ 'ð“‘' => 'B',
+ 'ð“’' => 'C',
+ 'ð““' => 'D',
+ 'ð“”' => 'E',
+ 'ð“•' => 'F',
+ 'ð“–' => 'G',
+ 'ð“—' => 'H',
+ 'ð“˜' => 'I',
+ 'ð“™' => 'J',
+ 'ð“š' => 'K',
+ 'ð“›' => 'L',
+ 'ð“œ' => 'M',
+ 'ð“' => 'N',
+ 'ð“ž' => 'O',
+ 'ð“Ÿ' => 'P',
+ 'ð“ ' => 'Q',
+ 'ð“¡' => 'R',
+ 'ð“¢' => 'S',
+ 'ð“£' => 'T',
+ 'ð“¤' => 'U',
+ 'ð“¥' => 'V',
+ 'ð“¦' => 'W',
+ 'ð“§' => 'X',
+ 'ð“¨' => 'Y',
+ 'ð“©' => 'Z',
+ 'ð“ª' => 'a',
+ 'ð“«' => 'b',
+ 'ð“¬' => 'c',
+ 'ð“' => 'd',
+ 'ð“®' => 'e',
+ 'ð“¯' => 'f',
+ 'ð“°' => 'g',
+ 'ð“±' => 'h',
+ 'ð“²' => 'i',
+ 'ð“³' => 'j',
+ 'ð“´' => 'k',
+ 'ð“µ' => 'l',
+ 'ð“¶' => 'm',
+ 'ð“·' => 'n',
+ 'ð“¸' => 'o',
+ 'ð“¹' => 'p',
+ 'ð“º' => 'q',
+ 'ð“»' => 'r',
+ 'ð“¼' => 's',
+ 'ð“½' => 't',
+ 'ð“¾' => 'u',
+ 'ð“¿' => 'v',
+ 'ð”€' => 'w',
+ 'ð”' => 'x',
+ 'ð”‚' => 'y',
+ 'ð”ƒ' => 'z',
+ 'ð”„' => 'A',
+ 'ð”…' => 'B',
+ 'ð”‡' => 'D',
+ 'ð”ˆ' => 'E',
+ 'ð”‰' => 'F',
+ 'ð”Š' => 'G',
+ 'ð”' => 'J',
+ 'ð”Ž' => 'K',
+ 'ð”' => 'L',
+ 'ð”' => 'M',
+ 'ð”‘' => 'N',
+ 'ð”’' => 'O',
+ 'ð”“' => 'P',
+ 'ð””' => 'Q',
+ 'ð”–' => 'S',
+ 'ð”—' => 'T',
+ 'ð”˜' => 'U',
+ 'ð”™' => 'V',
+ 'ð”š' => 'W',
+ 'ð”›' => 'X',
+ 'ð”œ' => 'Y',
+ 'ð”ž' => 'a',
+ 'ð”Ÿ' => 'b',
+ 'ð” ' => 'c',
+ 'ð”¡' => 'd',
+ 'ð”¢' => 'e',
+ 'ð”£' => 'f',
+ 'ð”¤' => 'g',
+ 'ð”¥' => 'h',
+ 'ð”¦' => 'i',
+ 'ð”§' => 'j',
+ 'ð”¨' => 'k',
+ 'ð”©' => 'l',
+ 'ð”ª' => 'm',
+ 'ð”«' => 'n',
+ 'ð”¬' => 'o',
+ 'ð”' => 'p',
+ 'ð”®' => 'q',
+ 'ð”¯' => 'r',
+ 'ð”°' => 's',
+ 'ð”±' => 't',
+ 'ð”²' => 'u',
+ 'ð”³' => 'v',
+ 'ð”´' => 'w',
+ 'ð”µ' => 'x',
+ 'ð”¶' => 'y',
+ 'ð”·' => 'z',
+ 'ð”¸' => 'A',
+ 'ð”¹' => 'B',
+ 'ð”»' => 'D',
+ 'ð”¼' => 'E',
+ 'ð”½' => 'F',
+ 'ð”¾' => 'G',
+ 'ð•€' => 'I',
+ 'ð•' => 'J',
+ 'ð•‚' => 'K',
+ 'ð•ƒ' => 'L',
+ 'ð•„' => 'M',
+ 'ð•†' => 'O',
+ 'ð•Š' => 'S',
+ 'ð•‹' => 'T',
+ 'ð•Œ' => 'U',
+ 'ð•' => 'V',
+ 'ð•Ž' => 'W',
+ 'ð•' => 'X',
+ 'ð•' => 'Y',
+ 'ð•’' => 'a',
+ 'ð•“' => 'b',
+ 'ð•”' => 'c',
+ 'ð••' => 'd',
+ 'ð•–' => 'e',
+ 'ð•—' => 'f',
+ 'ð•˜' => 'g',
+ 'ð•™' => 'h',
+ 'ð•š' => 'i',
+ 'ð•›' => 'j',
+ 'ð•œ' => 'k',
+ 'ð•' => 'l',
+ 'ð•ž' => 'm',
+ 'ð•Ÿ' => 'n',
+ 'ð• ' => 'o',
+ 'ð•¡' => 'p',
+ 'ð•¢' => 'q',
+ 'ð•£' => 'r',
+ 'ð•¤' => 's',
+ 'ð•¥' => 't',
+ 'ð•¦' => 'u',
+ 'ð•§' => 'v',
+ 'ð•¨' => 'w',
+ 'ð•©' => 'x',
+ 'ð•ª' => 'y',
+ 'ð•«' => 'z',
+ 'ð•¬' => 'A',
+ 'ð•' => 'B',
+ 'ð•®' => 'C',
+ 'ð•¯' => 'D',
+ 'ð•°' => 'E',
+ 'ð•±' => 'F',
+ 'ð•²' => 'G',
+ 'ð•³' => 'H',
+ 'ð•´' => 'I',
+ 'ð•µ' => 'J',
+ 'ð•¶' => 'K',
+ 'ð•·' => 'L',
+ 'ð•¸' => 'M',
+ 'ð•¹' => 'N',
+ 'ð•º' => 'O',
+ 'ð•»' => 'P',
+ 'ð•¼' => 'Q',
+ 'ð•½' => 'R',
+ 'ð•¾' => 'S',
+ 'ð•¿' => 'T',
+ 'ð–€' => 'U',
+ 'ð–' => 'V',
+ 'ð–‚' => 'W',
+ 'ð–ƒ' => 'X',
+ 'ð–„' => 'Y',
+ 'ð–…' => 'Z',
+ 'ð–†' => 'a',
+ 'ð–‡' => 'b',
+ 'ð–ˆ' => 'c',
+ 'ð–‰' => 'd',
+ 'ð–Š' => 'e',
+ 'ð–‹' => 'f',
+ 'ð–Œ' => 'g',
+ 'ð–' => 'h',
+ 'ð–Ž' => 'i',
+ 'ð–' => 'j',
+ 'ð–' => 'k',
+ 'ð–‘' => 'l',
+ 'ð–’' => 'm',
+ 'ð–“' => 'n',
+ 'ð–”' => 'o',
+ 'ð–•' => 'p',
+ 'ð––' => 'q',
+ 'ð–—' => 'r',
+ 'ð–˜' => 's',
+ 'ð–™' => 't',
+ 'ð–š' => 'u',
+ 'ð–›' => 'v',
+ 'ð–œ' => 'w',
+ 'ð–' => 'x',
+ 'ð–ž' => 'y',
+ 'ð–Ÿ' => 'z',
+ 'ð– ' => 'A',
+ 'ð–¡' => 'B',
+ 'ð–¢' => 'C',
+ 'ð–£' => 'D',
+ 'ð–¤' => 'E',
+ 'ð–¥' => 'F',
+ 'ð–¦' => 'G',
+ 'ð–§' => 'H',
+ 'ð–¨' => 'I',
+ 'ð–©' => 'J',
+ 'ð–ª' => 'K',
+ 'ð–«' => 'L',
+ 'ð–¬' => 'M',
+ 'ð–' => 'N',
+ 'ð–®' => 'O',
+ 'ð–¯' => 'P',
+ 'ð–°' => 'Q',
+ 'ð–±' => 'R',
+ 'ð–²' => 'S',
+ 'ð–³' => 'T',
+ 'ð–´' => 'U',
+ 'ð–µ' => 'V',
+ 'ð–¶' => 'W',
+ 'ð–·' => 'X',
+ 'ð–¸' => 'Y',
+ 'ð–¹' => 'Z',
+ 'ð–º' => 'a',
+ 'ð–»' => 'b',
+ 'ð–¼' => 'c',
+ 'ð–½' => 'd',
+ 'ð–¾' => 'e',
+ 'ð–¿' => 'f',
+ 'ð—€' => 'g',
+ 'ð—' => 'h',
+ 'ð—‚' => 'i',
+ 'ð—ƒ' => 'j',
+ 'ð—„' => 'k',
+ 'ð—…' => 'l',
+ 'ð—†' => 'm',
+ 'ð—‡' => 'n',
+ 'ð—ˆ' => 'o',
+ 'ð—‰' => 'p',
+ 'ð—Š' => 'q',
+ 'ð—‹' => 'r',
+ 'ð—Œ' => 's',
+ 'ð—' => 't',
+ 'ð—Ž' => 'u',
+ 'ð—' => 'v',
+ 'ð—' => 'w',
+ 'ð—‘' => 'x',
+ 'ð—’' => 'y',
+ 'ð—“' => 'z',
+ 'ð—”' => 'A',
+ 'ð—•' => 'B',
+ 'ð—–' => 'C',
+ 'ð——' => 'D',
+ 'ð—˜' => 'E',
+ 'ð—™' => 'F',
+ 'ð—š' => 'G',
+ 'ð—›' => 'H',
+ 'ð—œ' => 'I',
+ 'ð—' => 'J',
+ 'ð—ž' => 'K',
+ 'ð—Ÿ' => 'L',
+ 'ð— ' => 'M',
+ 'ð—¡' => 'N',
+ 'ð—¢' => 'O',
+ 'ð—£' => 'P',
+ 'ð—¤' => 'Q',
+ 'ð—¥' => 'R',
+ 'ð—¦' => 'S',
+ 'ð—§' => 'T',
+ 'ð—¨' => 'U',
+ 'ð—©' => 'V',
+ 'ð—ª' => 'W',
+ 'ð—«' => 'X',
+ 'ð—¬' => 'Y',
+ 'ð—' => 'Z',
+ 'ð—®' => 'a',
+ 'ð—¯' => 'b',
+ 'ð—°' => 'c',
+ 'ð—±' => 'd',
+ 'ð—²' => 'e',
+ 'ð—³' => 'f',
+ 'ð—´' => 'g',
+ 'ð—µ' => 'h',
+ 'ð—¶' => 'i',
+ 'ð—·' => 'j',
+ 'ð—¸' => 'k',
+ 'ð—¹' => 'l',
+ 'ð—º' => 'm',
+ 'ð—»' => 'n',
+ 'ð—¼' => 'o',
+ 'ð—½' => 'p',
+ 'ð—¾' => 'q',
+ 'ð—¿' => 'r',
+ 'ð˜€' => 's',
+ 'ð˜' => 't',
+ 'ð˜‚' => 'u',
+ 'ð˜ƒ' => 'v',
+ 'ð˜„' => 'w',
+ 'ð˜…' => 'x',
+ 'ð˜†' => 'y',
+ 'ð˜‡' => 'z',
+ 'ð˜ˆ' => 'A',
+ 'ð˜‰' => 'B',
+ 'ð˜Š' => 'C',
+ 'ð˜‹' => 'D',
+ 'ð˜Œ' => 'E',
+ 'ð˜' => 'F',
+ 'ð˜Ž' => 'G',
+ 'ð˜' => 'H',
+ 'ð˜' => 'I',
+ 'ð˜‘' => 'J',
+ 'ð˜’' => 'K',
+ 'ð˜“' => 'L',
+ 'ð˜”' => 'M',
+ 'ð˜•' => 'N',
+ 'ð˜–' => 'O',
+ 'ð˜—' => 'P',
+ 'ð˜˜' => 'Q',
+ 'ð˜™' => 'R',
+ 'ð˜š' => 'S',
+ 'ð˜›' => 'T',
+ 'ð˜œ' => 'U',
+ 'ð˜' => 'V',
+ 'ð˜ž' => 'W',
+ 'ð˜Ÿ' => 'X',
+ 'ð˜ ' => 'Y',
+ 'ð˜¡' => 'Z',
+ 'ð˜¢' => 'a',
+ 'ð˜£' => 'b',
+ 'ð˜¤' => 'c',
+ 'ð˜¥' => 'd',
+ 'ð˜¦' => 'e',
+ 'ð˜§' => 'f',
+ 'ð˜¨' => 'g',
+ 'ð˜©' => 'h',
+ 'ð˜ª' => 'i',
+ 'ð˜«' => 'j',
+ 'ð˜¬' => 'k',
+ 'ð˜' => 'l',
+ 'ð˜®' => 'm',
+ 'ð˜¯' => 'n',
+ 'ð˜°' => 'o',
+ 'ð˜±' => 'p',
+ 'ð˜²' => 'q',
+ 'ð˜³' => 'r',
+ 'ð˜´' => 's',
+ 'ð˜µ' => 't',
+ 'ð˜¶' => 'u',
+ 'ð˜·' => 'v',
+ 'ð˜¸' => 'w',
+ 'ð˜¹' => 'x',
+ 'ð˜º' => 'y',
+ 'ð˜»' => 'z',
+ 'ð˜¼' => 'A',
+ 'ð˜½' => 'B',
+ 'ð˜¾' => 'C',
+ 'ð˜¿' => 'D',
+ 'ð™€' => 'E',
+ 'ð™' => 'F',
+ 'ð™‚' => 'G',
+ 'ð™ƒ' => 'H',
+ 'ð™„' => 'I',
+ 'ð™…' => 'J',
+ 'ð™†' => 'K',
+ 'ð™‡' => 'L',
+ 'ð™ˆ' => 'M',
+ 'ð™‰' => 'N',
+ 'ð™Š' => 'O',
+ 'ð™‹' => 'P',
+ 'ð™Œ' => 'Q',
+ 'ð™' => 'R',
+ 'ð™Ž' => 'S',
+ 'ð™' => 'T',
+ 'ð™' => 'U',
+ 'ð™‘' => 'V',
+ 'ð™’' => 'W',
+ 'ð™“' => 'X',
+ 'ð™”' => 'Y',
+ 'ð™•' => 'Z',
+ 'ð™–' => 'a',
+ 'ð™—' => 'b',
+ 'ð™˜' => 'c',
+ 'ð™™' => 'd',
+ 'ð™š' => 'e',
+ 'ð™›' => 'f',
+ 'ð™œ' => 'g',
+ 'ð™' => 'h',
+ 'ð™ž' => 'i',
+ 'ð™Ÿ' => 'j',
+ 'ð™ ' => 'k',
+ 'ð™¡' => 'l',
+ 'ð™¢' => 'm',
+ 'ð™£' => 'n',
+ 'ð™¤' => 'o',
+ 'ð™¥' => 'p',
+ 'ð™¦' => 'q',
+ 'ð™§' => 'r',
+ 'ð™¨' => 's',
+ 'ð™©' => 't',
+ 'ð™ª' => 'u',
+ 'ð™«' => 'v',
+ 'ð™¬' => 'w',
+ 'ð™' => 'x',
+ 'ð™®' => 'y',
+ 'ð™¯' => 'z',
+ 'ð™°' => 'A',
+ 'ð™±' => 'B',
+ 'ð™²' => 'C',
+ 'ð™³' => 'D',
+ 'ð™´' => 'E',
+ 'ð™µ' => 'F',
+ 'ð™¶' => 'G',
+ 'ð™·' => 'H',
+ 'ð™¸' => 'I',
+ 'ð™¹' => 'J',
+ 'ð™º' => 'K',
+ 'ð™»' => 'L',
+ 'ð™¼' => 'M',
+ 'ð™½' => 'N',
+ 'ð™¾' => 'O',
+ 'ð™¿' => 'P',
+ 'ðš€' => 'Q',
+ 'ðš' => 'R',
+ 'ðš‚' => 'S',
+ 'ðšƒ' => 'T',
+ 'ðš„' => 'U',
+ 'ðš…' => 'V',
+ 'ðš†' => 'W',
+ 'ðš‡' => 'X',
+ 'ðšˆ' => 'Y',
+ 'ðš‰' => 'Z',
+ 'ðšŠ' => 'a',
+ 'ðš‹' => 'b',
+ 'ðšŒ' => 'c',
+ 'ðš' => 'd',
+ 'ðšŽ' => 'e',
+ 'ðš' => 'f',
+ 'ðš' => 'g',
+ 'ðš‘' => 'h',
+ 'ðš’' => 'i',
+ 'ðš“' => 'j',
+ 'ðš”' => 'k',
+ 'ðš•' => 'l',
+ 'ðš–' => 'm',
+ 'ðš—' => 'n',
+ 'ðš˜' => 'o',
+ 'ðš™' => 'p',
+ 'ðšš' => 'q',
+ 'ðš›' => 'r',
+ 'ðšœ' => 's',
+ 'ðš' => 't',
+ 'ðšž' => 'u',
+ 'ðšŸ' => 'v',
+ 'ðš ' => 'w',
+ 'ðš¡' => 'x',
+ 'ðš¢' => 'y',
+ 'ðš£' => 'z',
+ 'ðš¤' => 'ı',
+ 'ðš¥' => 'È·',
+ 'ðš¨' => 'Α',
+ 'ðš©' => 'Î’',
+ 'ðšª' => 'Γ',
+ 'ðš«' => 'Δ',
+ 'ðš¬' => 'Ε',
+ 'ðš' => 'Ζ',
+ 'ðš®' => 'Η',
+ 'ðš¯' => 'Θ',
+ 'ðš°' => 'Ι',
+ 'ðš±' => 'Κ',
+ 'ðš²' => 'Λ',
+ 'ðš³' => 'Îœ',
+ 'ðš´' => 'Î',
+ 'ðšµ' => 'Ξ',
+ 'ðš¶' => 'Ο',
+ 'ðš·' => 'Î ',
+ 'ðš¸' => 'Ρ',
+ 'ðš¹' => 'Θ',
+ 'ðšº' => 'Σ',
+ 'ðš»' => 'Τ',
+ 'ðš¼' => 'Î¥',
+ 'ðš½' => 'Φ',
+ 'ðš¾' => 'Χ',
+ 'ðš¿' => 'Ψ',
+ 'ð›€' => 'Ω',
+ 'ð›' => '∇',
+ 'ð›‚' => 'α',
+ 'ð›ƒ' => 'β',
+ 'ð›„' => 'γ',
+ 'ð›…' => 'δ',
+ 'ð›†' => 'ε',
+ 'ð›‡' => 'ζ',
+ 'ð›ˆ' => 'η',
+ 'ð›‰' => 'θ',
+ 'ð›Š' => 'ι',
+ 'ð›‹' => 'κ',
+ 'ð›Œ' => 'λ',
+ 'ð›' => 'μ',
+ 'ð›Ž' => 'ν',
+ 'ð›' => 'ξ',
+ 'ð›' => 'ο',
+ 'ð›‘' => 'Ï€',
+ 'ð›’' => 'Ï',
+ 'ð›“' => 'Ï‚',
+ 'ð›”' => 'σ',
+ 'ð›•' => 'Ï„',
+ 'ð›–' => 'Ï…',
+ 'ð›—' => 'φ',
+ 'ð›˜' => 'χ',
+ 'ð›™' => 'ψ',
+ 'ð›š' => 'ω',
+ 'ð››' => '∂',
+ 'ð›œ' => 'ε',
+ 'ð›' => 'θ',
+ 'ð›ž' => 'κ',
+ 'ð›Ÿ' => 'φ',
+ 'ð› ' => 'Ï',
+ 'ð›¡' => 'Ï€',
+ 'ð›¢' => 'Α',
+ 'ð›£' => 'Î’',
+ 'ð›¤' => 'Γ',
+ 'ð›¥' => 'Δ',
+ 'ð›¦' => 'Ε',
+ 'ð›§' => 'Ζ',
+ 'ð›¨' => 'Η',
+ 'ð›©' => 'Θ',
+ 'ð›ª' => 'Ι',
+ 'ð›«' => 'Κ',
+ 'ð›¬' => 'Λ',
+ 'ð›' => 'Îœ',
+ 'ð›®' => 'Î',
+ 'ð›¯' => 'Ξ',
+ 'ð›°' => 'Ο',
+ 'ð›±' => 'Î ',
+ 'ð›²' => 'Ρ',
+ 'ð›³' => 'Θ',
+ 'ð›´' => 'Σ',
+ 'ð›µ' => 'Τ',
+ 'ð›¶' => 'Î¥',
+ 'ð›·' => 'Φ',
+ 'ð›¸' => 'Χ',
+ 'ð›¹' => 'Ψ',
+ 'ð›º' => 'Ω',
+ 'ð›»' => '∇',
+ 'ð›¼' => 'α',
+ 'ð›½' => 'β',
+ 'ð›¾' => 'γ',
+ 'ð›¿' => 'δ',
+ 'ðœ€' => 'ε',
+ 'ðœ' => 'ζ',
+ 'ðœ‚' => 'η',
+ 'ðœƒ' => 'θ',
+ 'ðœ„' => 'ι',
+ 'ðœ…' => 'κ',
+ 'ðœ†' => 'λ',
+ 'ðœ‡' => 'μ',
+ 'ðœˆ' => 'ν',
+ 'ðœ‰' => 'ξ',
+ 'ðœŠ' => 'ο',
+ 'ðœ‹' => 'Ï€',
+ 'ðœŒ' => 'Ï',
+ 'ðœ' => 'Ï‚',
+ 'ðœŽ' => 'σ',
+ 'ðœ' => 'Ï„',
+ 'ðœ' => 'Ï…',
+ 'ðœ‘' => 'φ',
+ 'ðœ’' => 'χ',
+ 'ðœ“' => 'ψ',
+ 'ðœ”' => 'ω',
+ 'ðœ•' => '∂',
+ 'ðœ–' => 'ε',
+ 'ðœ—' => 'θ',
+ 'ðœ˜' => 'κ',
+ 'ðœ™' => 'φ',
+ 'ðœš' => 'Ï',
+ 'ðœ›' => 'Ï€',
+ 'ðœœ' => 'Α',
+ 'ðœ' => 'Î’',
+ 'ðœž' => 'Γ',
+ 'ðœŸ' => 'Δ',
+ 'ðœ ' => 'Ε',
+ 'ðœ¡' => 'Ζ',
+ 'ðœ¢' => 'Η',
+ 'ðœ£' => 'Θ',
+ 'ðœ¤' => 'Ι',
+ 'ðœ¥' => 'Κ',
+ 'ðœ¦' => 'Λ',
+ 'ðœ§' => 'Îœ',
+ 'ðœ¨' => 'Î',
+ 'ðœ©' => 'Ξ',
+ 'ðœª' => 'Ο',
+ 'ðœ«' => 'Î ',
+ 'ðœ¬' => 'Ρ',
+ 'ðœ' => 'Θ',
+ 'ðœ®' => 'Σ',
+ 'ðœ¯' => 'Τ',
+ 'ðœ°' => 'Î¥',
+ 'ðœ±' => 'Φ',
+ 'ðœ²' => 'Χ',
+ 'ðœ³' => 'Ψ',
+ 'ðœ´' => 'Ω',
+ 'ðœµ' => '∇',
+ 'ðœ¶' => 'α',
+ 'ðœ·' => 'β',
+ 'ðœ¸' => 'γ',
+ 'ðœ¹' => 'δ',
+ 'ðœº' => 'ε',
+ 'ðœ»' => 'ζ',
+ 'ðœ¼' => 'η',
+ 'ðœ½' => 'θ',
+ 'ðœ¾' => 'ι',
+ 'ðœ¿' => 'κ',
+ 'ð€' => 'λ',
+ 'ð' => 'μ',
+ 'ð‚' => 'ν',
+ 'ðƒ' => 'ξ',
+ 'ð„' => 'ο',
+ 'ð…' => 'Ï€',
+ 'ð†' => 'Ï',
+ 'ð‡' => 'Ï‚',
+ 'ðˆ' => 'σ',
+ 'ð‰' => 'Ï„',
+ 'ðŠ' => 'Ï…',
+ 'ð‹' => 'φ',
+ 'ðŒ' => 'χ',
+ 'ð' => 'ψ',
+ 'ðŽ' => 'ω',
+ 'ð' => '∂',
+ 'ð' => 'ε',
+ 'ð‘' => 'θ',
+ 'ð’' => 'κ',
+ 'ð“' => 'φ',
+ 'ð”' => 'Ï',
+ 'ð•' => 'Ï€',
+ 'ð–' => 'Α',
+ 'ð—' => 'Î’',
+ 'ð˜' => 'Γ',
+ 'ð™' => 'Δ',
+ 'ðš' => 'Ε',
+ 'ð›' => 'Ζ',
+ 'ðœ' => 'Η',
+ 'ð' => 'Θ',
+ 'ðž' => 'Ι',
+ 'ðŸ' => 'Κ',
+ 'ð ' => 'Λ',
+ 'ð¡' => 'Îœ',
+ 'ð¢' => 'Î',
+ 'ð£' => 'Ξ',
+ 'ð¤' => 'Ο',
+ 'ð¥' => 'Î ',
+ 'ð¦' => 'Ρ',
+ 'ð§' => 'Θ',
+ 'ð¨' => 'Σ',
+ 'ð©' => 'Τ',
+ 'ðª' => 'Î¥',
+ 'ð«' => 'Φ',
+ 'ð¬' => 'Χ',
+ 'ð' => 'Ψ',
+ 'ð®' => 'Ω',
+ 'ð¯' => '∇',
+ 'ð°' => 'α',
+ 'ð±' => 'β',
+ 'ð²' => 'γ',
+ 'ð³' => 'δ',
+ 'ð´' => 'ε',
+ 'ðµ' => 'ζ',
+ 'ð¶' => 'η',
+ 'ð·' => 'θ',
+ 'ð¸' => 'ι',
+ 'ð¹' => 'κ',
+ 'ðº' => 'λ',
+ 'ð»' => 'μ',
+ 'ð¼' => 'ν',
+ 'ð½' => 'ξ',
+ 'ð¾' => 'ο',
+ 'ð¿' => 'Ï€',
+ 'ðž€' => 'Ï',
+ 'ðž' => 'Ï‚',
+ 'ðž‚' => 'σ',
+ 'ðžƒ' => 'Ï„',
+ 'ðž„' => 'Ï…',
+ 'ðž…' => 'φ',
+ 'ðž†' => 'χ',
+ 'ðž‡' => 'ψ',
+ 'ðžˆ' => 'ω',
+ 'ðž‰' => '∂',
+ 'ðžŠ' => 'ε',
+ 'ðž‹' => 'θ',
+ 'ðžŒ' => 'κ',
+ 'ðž' => 'φ',
+ 'ðžŽ' => 'Ï',
+ 'ðž' => 'Ï€',
+ 'ðž' => 'Α',
+ 'ðž‘' => 'Î’',
+ 'ðž’' => 'Γ',
+ 'ðž“' => 'Δ',
+ 'ðž”' => 'Ε',
+ 'ðž•' => 'Ζ',
+ 'ðž–' => 'Η',
+ 'ðž—' => 'Θ',
+ 'ðž˜' => 'Ι',
+ 'ðž™' => 'Κ',
+ 'ðžš' => 'Λ',
+ 'ðž›' => 'Îœ',
+ 'ðžœ' => 'Î',
+ 'ðž' => 'Ξ',
+ 'ðžž' => 'Ο',
+ 'ðžŸ' => 'Î ',
+ 'ðž ' => 'Ρ',
+ 'ðž¡' => 'Θ',
+ 'ðž¢' => 'Σ',
+ 'ðž£' => 'Τ',
+ 'ðž¤' => 'Î¥',
+ 'ðž¥' => 'Φ',
+ 'ðž¦' => 'Χ',
+ 'ðž§' => 'Ψ',
+ 'ðž¨' => 'Ω',
+ 'ðž©' => '∇',
+ 'ðžª' => 'α',
+ 'ðž«' => 'β',
+ 'ðž¬' => 'γ',
+ 'ðž' => 'δ',
+ 'ðž®' => 'ε',
+ 'ðž¯' => 'ζ',
+ 'ðž°' => 'η',
+ 'ðž±' => 'θ',
+ 'ðž²' => 'ι',
+ 'ðž³' => 'κ',
+ 'ðž´' => 'λ',
+ 'ðžµ' => 'μ',
+ 'ðž¶' => 'ν',
+ 'ðž·' => 'ξ',
+ 'ðž¸' => 'ο',
+ 'ðž¹' => 'Ï€',
+ 'ðžº' => 'Ï',
+ 'ðž»' => 'Ï‚',
+ 'ðž¼' => 'σ',
+ 'ðž½' => 'Ï„',
+ 'ðž¾' => 'Ï…',
+ 'ðž¿' => 'φ',
+ 'ðŸ€' => 'χ',
+ 'ðŸ' => 'ψ',
+ 'ðŸ‚' => 'ω',
+ 'ðŸƒ' => '∂',
+ 'ðŸ„' => 'ε',
+ 'ðŸ…' => 'θ',
+ 'ðŸ†' => 'κ',
+ 'ðŸ‡' => 'φ',
+ 'ðŸˆ' => 'Ï',
+ 'ðŸ‰' => 'Ï€',
+ 'ðŸŠ' => 'Ïœ',
+ 'ðŸ‹' => 'Ï',
+ 'ðŸŽ' => '0',
+ 'ðŸ' => '1',
+ 'ðŸ' => '2',
+ 'ðŸ‘' => '3',
+ 'ðŸ’' => '4',
+ 'ðŸ“' => '5',
+ 'ðŸ”' => '6',
+ 'ðŸ•' => '7',
+ 'ðŸ–' => '8',
+ 'ðŸ—' => '9',
+ 'ðŸ˜' => '0',
+ 'ðŸ™' => '1',
+ 'ðŸš' => '2',
+ 'ðŸ›' => '3',
+ 'ðŸœ' => '4',
+ 'ðŸ' => '5',
+ 'ðŸž' => '6',
+ 'ðŸŸ' => '7',
+ 'ðŸ ' => '8',
+ 'ðŸ¡' => '9',
+ 'ðŸ¢' => '0',
+ 'ðŸ£' => '1',
+ 'ðŸ¤' => '2',
+ 'ðŸ¥' => '3',
+ 'ðŸ¦' => '4',
+ 'ðŸ§' => '5',
+ 'ðŸ¨' => '6',
+ 'ðŸ©' => '7',
+ 'ðŸª' => '8',
+ 'ðŸ«' => '9',
+ 'ðŸ¬' => '0',
+ 'ðŸ' => '1',
+ 'ðŸ®' => '2',
+ 'ðŸ¯' => '3',
+ 'ðŸ°' => '4',
+ 'ðŸ±' => '5',
+ 'ðŸ²' => '6',
+ 'ðŸ³' => '7',
+ 'ðŸ´' => '8',
+ 'ðŸµ' => '9',
+ 'ðŸ¶' => '0',
+ 'ðŸ·' => '1',
+ 'ðŸ¸' => '2',
+ 'ðŸ¹' => '3',
+ 'ðŸº' => '4',
+ 'ðŸ»' => '5',
+ 'ðŸ¼' => '6',
+ 'ðŸ½' => '7',
+ 'ðŸ¾' => '8',
+ 'ðŸ¿' => '9',
+ '𞸀' => 'ا',
+ 'ðž¸' => 'ب',
+ '𞸂' => 'ج',
+ '𞸃' => 'د',
+ '𞸅' => 'و',
+ '𞸆' => 'ز',
+ '𞸇' => 'Ø',
+ '𞸈' => 'ط',
+ '𞸉' => 'ي',
+ '𞸊' => 'ك',
+ '𞸋' => 'ل',
+ '𞸌' => 'م',
+ 'ðž¸' => 'Ù†',
+ '𞸎' => 'س',
+ 'ðž¸' => 'ع',
+ 'ðž¸' => 'Ù',
+ '𞸑' => 'ص',
+ '𞸒' => 'ق',
+ '𞸓' => 'ر',
+ '𞸔' => 'ش',
+ '𞸕' => 'ت',
+ '𞸖' => 'ث',
+ '𞸗' => 'خ',
+ '𞸘' => 'ذ',
+ '𞸙' => 'ض',
+ '𞸚' => 'ظ',
+ '𞸛' => 'غ',
+ '𞸜' => 'ٮ',
+ 'ðž¸' => 'Úº',
+ '𞸞' => 'ڡ',
+ '𞸟' => 'ٯ',
+ '𞸡' => 'ب',
+ '𞸢' => 'ج',
+ '𞸤' => 'ه',
+ '𞸧' => 'Ø',
+ '𞸩' => 'ي',
+ '𞸪' => 'ك',
+ '𞸫' => 'ل',
+ '𞸬' => 'م',
+ 'ðž¸' => 'Ù†',
+ '𞸮' => 'س',
+ '𞸯' => 'ع',
+ '𞸰' => 'Ù',
+ '𞸱' => 'ص',
+ '𞸲' => 'ق',
+ '𞸴' => 'ش',
+ '𞸵' => 'ت',
+ '𞸶' => 'ث',
+ '𞸷' => 'خ',
+ '𞸹' => 'ض',
+ '𞸻' => 'غ',
+ '𞹂' => 'ج',
+ '𞹇' => 'Ø',
+ '𞹉' => 'ي',
+ '𞹋' => 'ل',
+ 'ðž¹' => 'Ù†',
+ '𞹎' => 'س',
+ 'ðž¹' => 'ع',
+ '𞹑' => 'ص',
+ 'ðž¹’' => 'Ù‚',
+ 'ðž¹”' => 'Ø´',
+ 'ðž¹—' => 'Ø®',
+ '𞹙' => 'ض',
+ '𞹛' => 'غ',
+ 'ðž¹' => 'Úº',
+ '𞹟' => 'ٯ',
+ '𞹡' => 'ب',
+ '𞹢' => 'ج',
+ '𞹤' => 'ه',
+ '𞹧' => 'Ø',
+ '𞹨' => 'ط',
+ '𞹩' => 'ي',
+ '𞹪' => 'ك',
+ '𞹬' => 'م',
+ 'ðž¹' => 'Ù†',
+ '𞹮' => 'س',
+ '𞹯' => 'ع',
+ 'ðž¹°' => 'Ù',
+ '𞹱' => 'ص',
+ 'ðž¹²' => 'Ù‚',
+ 'ðž¹´' => 'Ø´',
+ '𞹵' => 'ت',
+ '𞹶' => 'ث',
+ 'ðž¹·' => 'Ø®',
+ '𞹹' => 'ض',
+ '𞹺' => 'ظ',
+ '𞹻' => 'غ',
+ 'ðž¹¼' => 'Ù®',
+ 'ðž¹¾' => 'Ú¡',
+ '𞺀' => 'ا',
+ 'ðžº' => 'ب',
+ '𞺂' => 'ج',
+ '𞺃' => 'د',
+ '𞺄' => 'ه',
+ '𞺅' => 'و',
+ '𞺆' => 'ز',
+ '𞺇' => 'Ø',
+ '𞺈' => 'ط',
+ '𞺉' => 'ي',
+ '𞺋' => 'ل',
+ '𞺌' => 'م',
+ 'ðžº' => 'Ù†',
+ '𞺎' => 'س',
+ 'ðžº' => 'ع',
+ 'ðžº' => 'Ù',
+ '𞺑' => 'ص',
+ '𞺒' => 'ق',
+ '𞺓' => 'ر',
+ '𞺔' => 'ش',
+ '𞺕' => 'ت',
+ '𞺖' => 'ث',
+ '𞺗' => 'خ',
+ '𞺘' => 'ذ',
+ '𞺙' => 'ض',
+ '𞺚' => 'ظ',
+ '𞺛' => 'غ',
+ '𞺡' => 'ب',
+ '𞺢' => 'ج',
+ '𞺣' => 'د',
+ '𞺥' => 'و',
+ '𞺦' => 'ز',
+ '𞺧' => 'Ø',
+ '𞺨' => 'ط',
+ '𞺩' => 'ي',
+ '𞺫' => 'ل',
+ '𞺬' => 'م',
+ 'ðžº' => 'Ù†',
+ '𞺮' => 'س',
+ '𞺯' => 'ع',
+ '𞺰' => 'Ù',
+ '𞺱' => 'ص',
+ '𞺲' => 'ق',
+ '𞺳' => 'ر',
+ '𞺴' => 'ش',
+ '𞺵' => 'ت',
+ '𞺶' => 'ث',
+ '𞺷' => 'خ',
+ '𞺸' => 'ذ',
+ '𞺹' => 'ض',
+ '𞺺' => 'ظ',
+ '𞺻' => 'غ',
+ '🄀' => '0.',
+ 'ðŸ„' => '0,',
+ '🄂' => '1,',
+ '🄃' => '2,',
+ '🄄' => '3,',
+ '🄅' => '4,',
+ '🄆' => '5,',
+ '🄇' => '6,',
+ '🄈' => '7,',
+ '🄉' => '8,',
+ '🄊' => '9,',
+ 'ðŸ„' => '(A)',
+ '🄑' => '(B)',
+ '🄒' => '(C)',
+ '🄓' => '(D)',
+ '🄔' => '(E)',
+ '🄕' => '(F)',
+ '🄖' => '(G)',
+ '🄗' => '(H)',
+ '🄘' => '(I)',
+ '🄙' => '(J)',
+ '🄚' => '(K)',
+ '🄛' => '(L)',
+ '🄜' => '(M)',
+ 'ðŸ„' => '(N)',
+ '🄞' => '(O)',
+ '🄟' => '(P)',
+ '🄠' => '(Q)',
+ '🄡' => '(R)',
+ '🄢' => '(S)',
+ '🄣' => '(T)',
+ '🄤' => '(U)',
+ '🄥' => '(V)',
+ '🄦' => '(W)',
+ '🄧' => '(X)',
+ '🄨' => '(Y)',
+ '🄩' => '(Z)',
+ '🄪' => '〔S〕',
+ '🄫' => 'C',
+ '🄬' => 'R',
+ 'ðŸ„' => 'CD',
+ '🄮' => 'WZ',
+ '🄰' => 'A',
+ '🄱' => 'B',
+ '🄲' => 'C',
+ '🄳' => 'D',
+ '🄴' => 'E',
+ '🄵' => 'F',
+ '🄶' => 'G',
+ '🄷' => 'H',
+ '🄸' => 'I',
+ '🄹' => 'J',
+ '🄺' => 'K',
+ '🄻' => 'L',
+ '🄼' => 'M',
+ '🄽' => 'N',
+ '🄾' => 'O',
+ '🄿' => 'P',
+ '🅀' => 'Q',
+ 'ðŸ…' => 'R',
+ '🅂' => 'S',
+ '🅃' => 'T',
+ '🅄' => 'U',
+ '🅅' => 'V',
+ '🅆' => 'W',
+ '🅇' => 'X',
+ '🅈' => 'Y',
+ '🅉' => 'Z',
+ '🅊' => 'HV',
+ '🅋' => 'MV',
+ '🅌' => 'SD',
+ 'ðŸ…' => 'SS',
+ '🅎' => 'PPV',
+ 'ðŸ…' => 'WC',
+ '🅪' => 'MC',
+ '🅫' => 'MD',
+ '🅬' => 'MR',
+ 'ðŸ†' => 'DJ',
+ '🈀' => 'ã»ã‹',
+ 'ðŸˆ' => 'ココ',
+ '🈂' => 'サ',
+ 'ðŸˆ' => '手',
+ '🈑' => 'å—',
+ '🈒' => 'åŒ',
+ '🈓' => 'デ',
+ '🈔' => '二',
+ '🈕' => '多',
+ '🈖' => '解',
+ '🈗' => '天',
+ '🈘' => '交',
+ '🈙' => 'æ˜ ',
+ '🈚' => '無',
+ '🈛' => '料',
+ '🈜' => 'å‰',
+ 'ðŸˆ' => '後',
+ '🈞' => 'å†',
+ '🈟' => '新',
+ '🈠' => 'åˆ',
+ '🈡' => '終',
+ '🈢' => '生',
+ '🈣' => '販',
+ '🈤' => '声',
+ '🈥' => 'å¹',
+ '🈦' => '演',
+ '🈧' => '投',
+ '🈨' => 'æ•',
+ '🈩' => '一',
+ '🈪' => '三',
+ '🈫' => 'éŠ',
+ '🈬' => '左',
+ 'ðŸˆ' => 'ä¸',
+ '🈮' => 'å³',
+ '🈯' => '指',
+ '🈰' => '走',
+ '🈱' => '打',
+ '🈲' => 'ç¦',
+ '🈳' => '空',
+ '🈴' => 'åˆ',
+ '🈵' => '満',
+ '🈶' => '有',
+ '🈷' => '月',
+ '🈸' => '申',
+ '🈹' => '割',
+ '🈺' => '営',
+ '🈻' => 'é…',
+ '🉀' => '〔本〕',
+ 'ðŸ‰' => '〔三〕',
+ '🉂' => '〔二〕',
+ '🉃' => '〔安〕',
+ '🉄' => '〔点〕',
+ '🉅' => '〔打〕',
+ '🉆' => '〔盗〕',
+ '🉇' => '〔å‹ã€•',
+ '🉈' => '〔敗〕',
+ 'ðŸ‰' => 'å¾—',
+ '🉑' => 'å¯',
+ '🯰' => '0',
+ '🯱' => '1',
+ '🯲' => '2',
+ '🯳' => '3',
+ '🯴' => '4',
+ '🯵' => '5',
+ '🯶' => '6',
+ '🯷' => '7',
+ '🯸' => '8',
+ '🯹' => '9',
+);
diff --git a/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/bootstrap.php b/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/bootstrap.php
new file mode 100644
index 00000000..3608e5c0
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/bootstrap.php
@@ -0,0 +1,23 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Intl\Normalizer as p;
+
+if (\PHP_VERSION_ID >= 80000) {
+ return require __DIR__.'/bootstrap80.php';
+}
+
+if (!function_exists('normalizer_is_normalized')) {
+ function normalizer_is_normalized($string, $form = p\Normalizer::FORM_C) { return p\Normalizer::isNormalized($string, $form); }
+}
+if (!function_exists('normalizer_normalize')) {
+ function normalizer_normalize($string, $form = p\Normalizer::FORM_C) { return p\Normalizer::normalize($string, $form); }
+}
diff --git a/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/bootstrap80.php b/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/bootstrap80.php
new file mode 100644
index 00000000..e36d1a94
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/bootstrap80.php
@@ -0,0 +1,19 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Intl\Normalizer as p;
+
+if (!function_exists('normalizer_is_normalized')) {
+ function normalizer_is_normalized(?string $string, ?int $form = p\Normalizer::FORM_C): bool { return p\Normalizer::isNormalized((string) $string, (int) $form); }
+}
+if (!function_exists('normalizer_normalize')) {
+ function normalizer_normalize(?string $string, ?int $form = p\Normalizer::FORM_C): string|false { return p\Normalizer::normalize((string) $string, (int) $form); }
+}
diff --git a/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/composer.json b/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/composer.json
new file mode 100644
index 00000000..393edf70
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-intl-normalizer/composer.json
@@ -0,0 +1,39 @@
+{
+ "name": "symfony/polyfill-intl-normalizer",
+ "type": "library",
+ "description": "Symfony polyfill for intl's Normalizer class and related functions",
+ "keywords": ["polyfill", "shim", "compatibility", "portable", "intl", "normalizer"],
+ "homepage": "https://symfony.com",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "require": {
+ "php": ">=7.1"
+ },
+ "autoload": {
+ "psr-4": { "Symfony\\Polyfill\\Intl\\Normalizer\\": "" },
+ "files": [ "bootstrap.php" ],
+ "classmap": [ "Resources/stubs" ]
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "minimum-stability": "dev",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ }
+}
diff --git a/dev/plugins/email/vendor/symfony/polyfill-mbstring/LICENSE b/dev/plugins/email/vendor/symfony/polyfill-mbstring/LICENSE
new file mode 100644
index 00000000..4cd8bdd3
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-mbstring/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2015-2019 Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/dev/plugins/email/vendor/symfony/polyfill-mbstring/Mbstring.php b/dev/plugins/email/vendor/symfony/polyfill-mbstring/Mbstring.php
new file mode 100644
index 00000000..b5990956
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-mbstring/Mbstring.php
@@ -0,0 +1,870 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Mbstring;
+
+/**
+ * Partial mbstring implementation in PHP, iconv based, UTF-8 centric.
+ *
+ * Implemented:
+ * - mb_chr - Returns a specific character from its Unicode code point
+ * - mb_convert_encoding - Convert character encoding
+ * - mb_convert_variables - Convert character code in variable(s)
+ * - mb_decode_mimeheader - Decode string in MIME header field
+ * - mb_encode_mimeheader - Encode string for MIME header XXX NATIVE IMPLEMENTATION IS REALLY BUGGED
+ * - mb_decode_numericentity - Decode HTML numeric string reference to character
+ * - mb_encode_numericentity - Encode character to HTML numeric string reference
+ * - mb_convert_case - Perform case folding on a string
+ * - mb_detect_encoding - Detect character encoding
+ * - mb_get_info - Get internal settings of mbstring
+ * - mb_http_input - Detect HTTP input character encoding
+ * - mb_http_output - Set/Get HTTP output character encoding
+ * - mb_internal_encoding - Set/Get internal character encoding
+ * - mb_list_encodings - Returns an array of all supported encodings
+ * - mb_ord - Returns the Unicode code point of a character
+ * - mb_output_handler - Callback function converts character encoding in output buffer
+ * - mb_scrub - Replaces ill-formed byte sequences with substitute characters
+ * - mb_strlen - Get string length
+ * - mb_strpos - Find position of first occurrence of string in a string
+ * - mb_strrpos - Find position of last occurrence of a string in a string
+ * - mb_str_split - Convert a string to an array
+ * - mb_strtolower - Make a string lowercase
+ * - mb_strtoupper - Make a string uppercase
+ * - mb_substitute_character - Set/Get substitution character
+ * - mb_substr - Get part of string
+ * - mb_stripos - Finds position of first occurrence of a string within another, case insensitive
+ * - mb_stristr - Finds first occurrence of a string within another, case insensitive
+ * - mb_strrchr - Finds the last occurrence of a character in a string within another
+ * - mb_strrichr - Finds the last occurrence of a character in a string within another, case insensitive
+ * - mb_strripos - Finds position of last occurrence of a string within another, case insensitive
+ * - mb_strstr - Finds first occurrence of a string within another
+ * - mb_strwidth - Return width of string
+ * - mb_substr_count - Count the number of substring occurrences
+ *
+ * Not implemented:
+ * - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more)
+ * - mb_ereg_* - Regular expression with multibyte support
+ * - mb_parse_str - Parse GET/POST/COOKIE data and set global variable
+ * - mb_preferred_mime_name - Get MIME charset string
+ * - mb_regex_encoding - Returns current encoding for multibyte regex as string
+ * - mb_regex_set_options - Set/Get the default options for mbregex functions
+ * - mb_send_mail - Send encoded mail
+ * - mb_split - Split multibyte string using regular expression
+ * - mb_strcut - Get part of string
+ * - mb_strimwidth - Get truncated string with specified width
+ *
+ * @author Nicolas Grekas
+ *
+ * @internal
+ */
+final class Mbstring
+{
+ public const MB_CASE_FOLD = \PHP_INT_MAX;
+
+ private const CASE_FOLD = [
+ ['µ', 'ſ', "\xCD\x85", 'ς', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"],
+ ['μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'Ï€', 'κ', 'Ï', 'ε', "\xE1\xB9\xA1", 'ι'],
+ ];
+
+ private static $encodingList = ['ASCII', 'UTF-8'];
+ private static $language = 'neutral';
+ private static $internalEncoding = 'UTF-8';
+
+ public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null)
+ {
+ if (\is_array($fromEncoding) || false !== strpos($fromEncoding, ',')) {
+ $fromEncoding = self::mb_detect_encoding($s, $fromEncoding);
+ } else {
+ $fromEncoding = self::getEncoding($fromEncoding);
+ }
+
+ $toEncoding = self::getEncoding($toEncoding);
+
+ if ('BASE64' === $fromEncoding) {
+ $s = base64_decode($s);
+ $fromEncoding = $toEncoding;
+ }
+
+ if ('BASE64' === $toEncoding) {
+ return base64_encode($s);
+ }
+
+ if ('HTML-ENTITIES' === $toEncoding || 'HTML' === $toEncoding) {
+ if ('HTML-ENTITIES' === $fromEncoding || 'HTML' === $fromEncoding) {
+ $fromEncoding = 'Windows-1252';
+ }
+ if ('UTF-8' !== $fromEncoding) {
+ $s = \iconv($fromEncoding, 'UTF-8//IGNORE', $s);
+ }
+
+ return preg_replace_callback('/[\x80-\xFF]+/', [__CLASS__, 'html_encoding_callback'], $s);
+ }
+
+ if ('HTML-ENTITIES' === $fromEncoding) {
+ $s = html_entity_decode($s, \ENT_COMPAT, 'UTF-8');
+ $fromEncoding = 'UTF-8';
+ }
+
+ return \iconv($fromEncoding, $toEncoding.'//IGNORE', $s);
+ }
+
+ public static function mb_convert_variables($toEncoding, $fromEncoding, &...$vars)
+ {
+ $ok = true;
+ array_walk_recursive($vars, function (&$v) use (&$ok, $toEncoding, $fromEncoding) {
+ if (false === $v = self::mb_convert_encoding($v, $toEncoding, $fromEncoding)) {
+ $ok = false;
+ }
+ });
+
+ return $ok ? $fromEncoding : false;
+ }
+
+ public static function mb_decode_mimeheader($s)
+ {
+ return \iconv_mime_decode($s, 2, self::$internalEncoding);
+ }
+
+ public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null)
+ {
+ trigger_error('mb_encode_mimeheader() is bugged. Please use iconv_mime_encode() instead', \E_USER_WARNING);
+ }
+
+ public static function mb_decode_numericentity($s, $convmap, $encoding = null)
+ {
+ if (null !== $s && !is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) {
+ trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING);
+
+ return null;
+ }
+
+ if (!\is_array($convmap) || (80000 > \PHP_VERSION_ID && !$convmap)) {
+ return false;
+ }
+
+ if (null !== $encoding && !is_scalar($encoding)) {
+ trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING);
+
+ return ''; // Instead of null (cf. mb_encode_numericentity).
+ }
+
+ $s = (string) $s;
+ if ('' === $s) {
+ return '';
+ }
+
+ $encoding = self::getEncoding($encoding);
+
+ if ('UTF-8' === $encoding) {
+ $encoding = null;
+ if (!preg_match('//u', $s)) {
+ $s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s);
+ }
+ } else {
+ $s = \iconv($encoding, 'UTF-8//IGNORE', $s);
+ }
+
+ $cnt = floor(\count($convmap) / 4) * 4;
+
+ for ($i = 0; $i < $cnt; $i += 4) {
+ // collector_decode_htmlnumericentity ignores $convmap[$i + 3]
+ $convmap[$i] += $convmap[$i + 2];
+ $convmap[$i + 1] += $convmap[$i + 2];
+ }
+
+ $s = preg_replace_callback('/(?:0*([0-9]+)|x0*([0-9a-fA-F]+))(?!&);?/', function (array $m) use ($cnt, $convmap) {
+ $c = isset($m[2]) ? (int) hexdec($m[2]) : $m[1];
+ for ($i = 0; $i < $cnt; $i += 4) {
+ if ($c >= $convmap[$i] && $c <= $convmap[$i + 1]) {
+ return self::mb_chr($c - $convmap[$i + 2]);
+ }
+ }
+
+ return $m[0];
+ }, $s);
+
+ if (null === $encoding) {
+ return $s;
+ }
+
+ return \iconv('UTF-8', $encoding.'//IGNORE', $s);
+ }
+
+ public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false)
+ {
+ if (null !== $s && !is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) {
+ trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING);
+
+ return null;
+ }
+
+ if (!\is_array($convmap) || (80000 > \PHP_VERSION_ID && !$convmap)) {
+ return false;
+ }
+
+ if (null !== $encoding && !is_scalar($encoding)) {
+ trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING);
+
+ return null; // Instead of '' (cf. mb_decode_numericentity).
+ }
+
+ if (null !== $is_hex && !is_scalar($is_hex)) {
+ trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', \E_USER_WARNING);
+
+ return null;
+ }
+
+ $s = (string) $s;
+ if ('' === $s) {
+ return '';
+ }
+
+ $encoding = self::getEncoding($encoding);
+
+ if ('UTF-8' === $encoding) {
+ $encoding = null;
+ if (!preg_match('//u', $s)) {
+ $s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s);
+ }
+ } else {
+ $s = \iconv($encoding, 'UTF-8//IGNORE', $s);
+ }
+
+ static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4];
+
+ $cnt = floor(\count($convmap) / 4) * 4;
+ $i = 0;
+ $len = \strlen($s);
+ $result = '';
+
+ while ($i < $len) {
+ $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"];
+ $uchr = substr($s, $i, $ulen);
+ $i += $ulen;
+ $c = self::mb_ord($uchr);
+
+ for ($j = 0; $j < $cnt; $j += 4) {
+ if ($c >= $convmap[$j] && $c <= $convmap[$j + 1]) {
+ $cOffset = ($c + $convmap[$j + 2]) & $convmap[$j + 3];
+ $result .= $is_hex ? sprintf('%X;', $cOffset) : ''.$cOffset.';';
+ continue 2;
+ }
+ }
+ $result .= $uchr;
+ }
+
+ if (null === $encoding) {
+ return $result;
+ }
+
+ return \iconv('UTF-8', $encoding.'//IGNORE', $result);
+ }
+
+ public static function mb_convert_case($s, $mode, $encoding = null)
+ {
+ $s = (string) $s;
+ if ('' === $s) {
+ return '';
+ }
+
+ $encoding = self::getEncoding($encoding);
+
+ if ('UTF-8' === $encoding) {
+ $encoding = null;
+ if (!preg_match('//u', $s)) {
+ $s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s);
+ }
+ } else {
+ $s = \iconv($encoding, 'UTF-8//IGNORE', $s);
+ }
+
+ if (\MB_CASE_TITLE == $mode) {
+ static $titleRegexp = null;
+ if (null === $titleRegexp) {
+ $titleRegexp = self::getData('titleCaseRegexp');
+ }
+ $s = preg_replace_callback($titleRegexp, [__CLASS__, 'title_case'], $s);
+ } else {
+ if (\MB_CASE_UPPER == $mode) {
+ static $upper = null;
+ if (null === $upper) {
+ $upper = self::getData('upperCase');
+ }
+ $map = $upper;
+ } else {
+ if (self::MB_CASE_FOLD === $mode) {
+ $s = str_replace(self::CASE_FOLD[0], self::CASE_FOLD[1], $s);
+ }
+
+ static $lower = null;
+ if (null === $lower) {
+ $lower = self::getData('lowerCase');
+ }
+ $map = $lower;
+ }
+
+ static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4];
+
+ $i = 0;
+ $len = \strlen($s);
+
+ while ($i < $len) {
+ $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"];
+ $uchr = substr($s, $i, $ulen);
+ $i += $ulen;
+
+ if (isset($map[$uchr])) {
+ $uchr = $map[$uchr];
+ $nlen = \strlen($uchr);
+
+ if ($nlen == $ulen) {
+ $nlen = $i;
+ do {
+ $s[--$nlen] = $uchr[--$ulen];
+ } while ($ulen);
+ } else {
+ $s = substr_replace($s, $uchr, $i - $ulen, $ulen);
+ $len += $nlen - $ulen;
+ $i += $nlen - $ulen;
+ }
+ }
+ }
+ }
+
+ if (null === $encoding) {
+ return $s;
+ }
+
+ return \iconv('UTF-8', $encoding.'//IGNORE', $s);
+ }
+
+ public static function mb_internal_encoding($encoding = null)
+ {
+ if (null === $encoding) {
+ return self::$internalEncoding;
+ }
+
+ $normalizedEncoding = self::getEncoding($encoding);
+
+ if ('UTF-8' === $normalizedEncoding || false !== @\iconv($normalizedEncoding, $normalizedEncoding, ' ')) {
+ self::$internalEncoding = $normalizedEncoding;
+
+ return true;
+ }
+
+ if (80000 > \PHP_VERSION_ID) {
+ return false;
+ }
+
+ throw new \ValueError(sprintf('Argument #1 ($encoding) must be a valid encoding, "%s" given', $encoding));
+ }
+
+ public static function mb_language($lang = null)
+ {
+ if (null === $lang) {
+ return self::$language;
+ }
+
+ switch ($normalizedLang = strtolower($lang)) {
+ case 'uni':
+ case 'neutral':
+ self::$language = $normalizedLang;
+
+ return true;
+ }
+
+ if (80000 > \PHP_VERSION_ID) {
+ return false;
+ }
+
+ throw new \ValueError(sprintf('Argument #1 ($language) must be a valid language, "%s" given', $lang));
+ }
+
+ public static function mb_list_encodings()
+ {
+ return ['UTF-8'];
+ }
+
+ public static function mb_encoding_aliases($encoding)
+ {
+ switch (strtoupper($encoding)) {
+ case 'UTF8':
+ case 'UTF-8':
+ return ['utf8'];
+ }
+
+ return false;
+ }
+
+ public static function mb_check_encoding($var = null, $encoding = null)
+ {
+ if (null === $encoding) {
+ if (null === $var) {
+ return false;
+ }
+ $encoding = self::$internalEncoding;
+ }
+
+ return self::mb_detect_encoding($var, [$encoding]) || false !== @\iconv($encoding, $encoding, $var);
+ }
+
+ public static function mb_detect_encoding($str, $encodingList = null, $strict = false)
+ {
+ if (null === $encodingList) {
+ $encodingList = self::$encodingList;
+ } else {
+ if (!\is_array($encodingList)) {
+ $encodingList = array_map('trim', explode(',', $encodingList));
+ }
+ $encodingList = array_map('strtoupper', $encodingList);
+ }
+
+ foreach ($encodingList as $enc) {
+ switch ($enc) {
+ case 'ASCII':
+ if (!preg_match('/[\x80-\xFF]/', $str)) {
+ return $enc;
+ }
+ break;
+
+ case 'UTF8':
+ case 'UTF-8':
+ if (preg_match('//u', $str)) {
+ return 'UTF-8';
+ }
+ break;
+
+ default:
+ if (0 === strncmp($enc, 'ISO-8859-', 9)) {
+ return $enc;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ public static function mb_detect_order($encodingList = null)
+ {
+ if (null === $encodingList) {
+ return self::$encodingList;
+ }
+
+ if (!\is_array($encodingList)) {
+ $encodingList = array_map('trim', explode(',', $encodingList));
+ }
+ $encodingList = array_map('strtoupper', $encodingList);
+
+ foreach ($encodingList as $enc) {
+ switch ($enc) {
+ default:
+ if (strncmp($enc, 'ISO-8859-', 9)) {
+ return false;
+ }
+ // no break
+ case 'ASCII':
+ case 'UTF8':
+ case 'UTF-8':
+ }
+ }
+
+ self::$encodingList = $encodingList;
+
+ return true;
+ }
+
+ public static function mb_strlen($s, $encoding = null)
+ {
+ $encoding = self::getEncoding($encoding);
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
+ return \strlen($s);
+ }
+
+ return @\iconv_strlen($s, $encoding);
+ }
+
+ public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null)
+ {
+ $encoding = self::getEncoding($encoding);
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
+ return strpos($haystack, $needle, $offset);
+ }
+
+ $needle = (string) $needle;
+ if ('' === $needle) {
+ if (80000 > \PHP_VERSION_ID) {
+ trigger_error(__METHOD__.': Empty delimiter', \E_USER_WARNING);
+
+ return false;
+ }
+
+ return 0;
+ }
+
+ return \iconv_strpos($haystack, $needle, $offset, $encoding);
+ }
+
+ public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null)
+ {
+ $encoding = self::getEncoding($encoding);
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
+ return strrpos($haystack, $needle, $offset);
+ }
+
+ if ($offset != (int) $offset) {
+ $offset = 0;
+ } elseif ($offset = (int) $offset) {
+ if ($offset < 0) {
+ if (0 > $offset += self::mb_strlen($needle)) {
+ $haystack = self::mb_substr($haystack, 0, $offset, $encoding);
+ }
+ $offset = 0;
+ } else {
+ $haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding);
+ }
+ }
+
+ $pos = '' !== $needle || 80000 > \PHP_VERSION_ID
+ ? \iconv_strrpos($haystack, $needle, $encoding)
+ : self::mb_strlen($haystack, $encoding);
+
+ return false !== $pos ? $offset + $pos : false;
+ }
+
+ public static function mb_str_split($string, $split_length = 1, $encoding = null)
+ {
+ if (null !== $string && !is_scalar($string) && !(\is_object($string) && method_exists($string, '__toString'))) {
+ trigger_error('mb_str_split() expects parameter 1 to be string, '.\gettype($string).' given', \E_USER_WARNING);
+
+ return null;
+ }
+
+ if (1 > $split_length = (int) $split_length) {
+ if (80000 > \PHP_VERSION_ID) {
+ trigger_error('The length of each segment must be greater than zero', \E_USER_WARNING);
+ return false;
+ }
+
+ throw new \ValueError('Argument #2 ($length) must be greater than 0');
+ }
+
+ if (null === $encoding) {
+ $encoding = mb_internal_encoding();
+ }
+
+ if ('UTF-8' === $encoding = self::getEncoding($encoding)) {
+ $rx = '/(';
+ while (65535 < $split_length) {
+ $rx .= '.{65535}';
+ $split_length -= 65535;
+ }
+ $rx .= '.{'.$split_length.'})/us';
+
+ return preg_split($rx, $string, null, \PREG_SPLIT_DELIM_CAPTURE | \PREG_SPLIT_NO_EMPTY);
+ }
+
+ $result = [];
+ $length = mb_strlen($string, $encoding);
+
+ for ($i = 0; $i < $length; $i += $split_length) {
+ $result[] = mb_substr($string, $i, $split_length, $encoding);
+ }
+
+ return $result;
+ }
+
+ public static function mb_strtolower($s, $encoding = null)
+ {
+ return self::mb_convert_case($s, \MB_CASE_LOWER, $encoding);
+ }
+
+ public static function mb_strtoupper($s, $encoding = null)
+ {
+ return self::mb_convert_case($s, \MB_CASE_UPPER, $encoding);
+ }
+
+ public static function mb_substitute_character($c = null)
+ {
+ if (null === $c) {
+ return 'none';
+ }
+ if (0 === strcasecmp($c, 'none')) {
+ return true;
+ }
+ if (80000 > \PHP_VERSION_ID) {
+ return false;
+ }
+
+ throw new \ValueError('Argument #1 ($substitute_character) must be "none", "long", "entity" or a valid codepoint');
+ }
+
+ public static function mb_substr($s, $start, $length = null, $encoding = null)
+ {
+ $encoding = self::getEncoding($encoding);
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
+ return (string) substr($s, $start, null === $length ? 2147483647 : $length);
+ }
+
+ if ($start < 0) {
+ $start = \iconv_strlen($s, $encoding) + $start;
+ if ($start < 0) {
+ $start = 0;
+ }
+ }
+
+ if (null === $length) {
+ $length = 2147483647;
+ } elseif ($length < 0) {
+ $length = \iconv_strlen($s, $encoding) + $length - $start;
+ if ($length < 0) {
+ return '';
+ }
+ }
+
+ return (string) \iconv_substr($s, $start, $length, $encoding);
+ }
+
+ public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null)
+ {
+ $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding);
+ $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding);
+
+ return self::mb_strpos($haystack, $needle, $offset, $encoding);
+ }
+
+ public static function mb_stristr($haystack, $needle, $part = false, $encoding = null)
+ {
+ $pos = self::mb_stripos($haystack, $needle, 0, $encoding);
+
+ return self::getSubpart($pos, $part, $haystack, $encoding);
+ }
+
+ public static function mb_strrchr($haystack, $needle, $part = false, $encoding = null)
+ {
+ $encoding = self::getEncoding($encoding);
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
+ $pos = strrpos($haystack, $needle);
+ } else {
+ $needle = self::mb_substr($needle, 0, 1, $encoding);
+ $pos = \iconv_strrpos($haystack, $needle, $encoding);
+ }
+
+ return self::getSubpart($pos, $part, $haystack, $encoding);
+ }
+
+ public static function mb_strrichr($haystack, $needle, $part = false, $encoding = null)
+ {
+ $needle = self::mb_substr($needle, 0, 1, $encoding);
+ $pos = self::mb_strripos($haystack, $needle, $encoding);
+
+ return self::getSubpart($pos, $part, $haystack, $encoding);
+ }
+
+ public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null)
+ {
+ $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding);
+ $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding);
+
+ return self::mb_strrpos($haystack, $needle, $offset, $encoding);
+ }
+
+ public static function mb_strstr($haystack, $needle, $part = false, $encoding = null)
+ {
+ $pos = strpos($haystack, $needle);
+ if (false === $pos) {
+ return false;
+ }
+ if ($part) {
+ return substr($haystack, 0, $pos);
+ }
+
+ return substr($haystack, $pos);
+ }
+
+ public static function mb_get_info($type = 'all')
+ {
+ $info = [
+ 'internal_encoding' => self::$internalEncoding,
+ 'http_output' => 'pass',
+ 'http_output_conv_mimetypes' => '^(text/|application/xhtml\+xml)',
+ 'func_overload' => 0,
+ 'func_overload_list' => 'no overload',
+ 'mail_charset' => 'UTF-8',
+ 'mail_header_encoding' => 'BASE64',
+ 'mail_body_encoding' => 'BASE64',
+ 'illegal_chars' => 0,
+ 'encoding_translation' => 'Off',
+ 'language' => self::$language,
+ 'detect_order' => self::$encodingList,
+ 'substitute_character' => 'none',
+ 'strict_detection' => 'Off',
+ ];
+
+ if ('all' === $type) {
+ return $info;
+ }
+ if (isset($info[$type])) {
+ return $info[$type];
+ }
+
+ return false;
+ }
+
+ public static function mb_http_input($type = '')
+ {
+ return false;
+ }
+
+ public static function mb_http_output($encoding = null)
+ {
+ return null !== $encoding ? 'pass' === $encoding : 'pass';
+ }
+
+ public static function mb_strwidth($s, $encoding = null)
+ {
+ $encoding = self::getEncoding($encoding);
+
+ if ('UTF-8' !== $encoding) {
+ $s = \iconv($encoding, 'UTF-8//IGNORE', $s);
+ }
+
+ $s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide);
+
+ return ($wide << 1) + \iconv_strlen($s, 'UTF-8');
+ }
+
+ public static function mb_substr_count($haystack, $needle, $encoding = null)
+ {
+ return substr_count($haystack, $needle);
+ }
+
+ public static function mb_output_handler($contents, $status)
+ {
+ return $contents;
+ }
+
+ public static function mb_chr($code, $encoding = null)
+ {
+ if (0x80 > $code %= 0x200000) {
+ $s = \chr($code);
+ } elseif (0x800 > $code) {
+ $s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F);
+ } elseif (0x10000 > $code) {
+ $s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F);
+ } else {
+ $s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F);
+ }
+
+ if ('UTF-8' !== $encoding = self::getEncoding($encoding)) {
+ $s = mb_convert_encoding($s, $encoding, 'UTF-8');
+ }
+
+ return $s;
+ }
+
+ public static function mb_ord($s, $encoding = null)
+ {
+ if ('UTF-8' !== $encoding = self::getEncoding($encoding)) {
+ $s = mb_convert_encoding($s, 'UTF-8', $encoding);
+ }
+
+ if (1 === \strlen($s)) {
+ return \ord($s);
+ }
+
+ $code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0;
+ if (0xF0 <= $code) {
+ return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80;
+ }
+ if (0xE0 <= $code) {
+ return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80;
+ }
+ if (0xC0 <= $code) {
+ return (($code - 0xC0) << 6) + $s[2] - 0x80;
+ }
+
+ return $code;
+ }
+
+ private static function getSubpart($pos, $part, $haystack, $encoding)
+ {
+ if (false === $pos) {
+ return false;
+ }
+ if ($part) {
+ return self::mb_substr($haystack, 0, $pos, $encoding);
+ }
+
+ return self::mb_substr($haystack, $pos, null, $encoding);
+ }
+
+ private static function html_encoding_callback(array $m)
+ {
+ $i = 1;
+ $entities = '';
+ $m = unpack('C*', htmlentities($m[0], \ENT_COMPAT, 'UTF-8'));
+
+ while (isset($m[$i])) {
+ if (0x80 > $m[$i]) {
+ $entities .= \chr($m[$i++]);
+ continue;
+ }
+ if (0xF0 <= $m[$i]) {
+ $c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
+ } elseif (0xE0 <= $m[$i]) {
+ $c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
+ } else {
+ $c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80;
+ }
+
+ $entities .= ''.$c.';';
+ }
+
+ return $entities;
+ }
+
+ private static function title_case(array $s)
+ {
+ return self::mb_convert_case($s[1], \MB_CASE_UPPER, 'UTF-8').self::mb_convert_case($s[2], \MB_CASE_LOWER, 'UTF-8');
+ }
+
+ private static function getData($file)
+ {
+ if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) {
+ return require $file;
+ }
+
+ return false;
+ }
+
+ private static function getEncoding($encoding)
+ {
+ if (null === $encoding) {
+ return self::$internalEncoding;
+ }
+
+ if ('UTF-8' === $encoding) {
+ return 'UTF-8';
+ }
+
+ $encoding = strtoupper($encoding);
+
+ if ('8BIT' === $encoding || 'BINARY' === $encoding) {
+ return 'CP850';
+ }
+
+ if ('UTF8' === $encoding) {
+ return 'UTF-8';
+ }
+
+ return $encoding;
+ }
+}
diff --git a/dev/plugins/email/vendor/symfony/polyfill-mbstring/README.md b/dev/plugins/email/vendor/symfony/polyfill-mbstring/README.md
new file mode 100644
index 00000000..4efb599d
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-mbstring/README.md
@@ -0,0 +1,13 @@
+Symfony Polyfill / Mbstring
+===========================
+
+This component provides a partial, native PHP implementation for the
+[Mbstring](https://php.net/mbstring) extension.
+
+More information can be found in the
+[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md).
+
+License
+=======
+
+This library is released under the [MIT license](LICENSE).
diff --git a/dev/plugins/email/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php b/dev/plugins/email/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php
new file mode 100644
index 00000000..fac60b08
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php
@@ -0,0 +1,1397 @@
+ 'a',
+ 'B' => 'b',
+ 'C' => 'c',
+ 'D' => 'd',
+ 'E' => 'e',
+ 'F' => 'f',
+ 'G' => 'g',
+ 'H' => 'h',
+ 'I' => 'i',
+ 'J' => 'j',
+ 'K' => 'k',
+ 'L' => 'l',
+ 'M' => 'm',
+ 'N' => 'n',
+ 'O' => 'o',
+ 'P' => 'p',
+ 'Q' => 'q',
+ 'R' => 'r',
+ 'S' => 's',
+ 'T' => 't',
+ 'U' => 'u',
+ 'V' => 'v',
+ 'W' => 'w',
+ 'X' => 'x',
+ 'Y' => 'y',
+ 'Z' => 'z',
+ 'À' => 'à ',
+ 'Ã' => 'á',
+ 'Â' => 'â',
+ 'Ã' => 'ã',
+ 'Ä' => 'ä',
+ 'Ã…' => 'Ã¥',
+ 'Æ' => 'æ',
+ 'Ç' => 'ç',
+ 'È' => 'è',
+ 'É' => 'é',
+ 'Ê' => 'ê',
+ 'Ë' => 'ë',
+ 'Ì' => 'ì',
+ 'Ã' => 'Ã',
+ 'Î' => 'î',
+ 'Ã' => 'ï',
+ 'Ã' => 'ð',
+ 'Ñ' => 'ñ',
+ 'Ò' => 'ò',
+ 'Ó' => 'ó',
+ 'Ô' => 'ô',
+ 'Õ' => 'õ',
+ 'Ö' => 'ö',
+ 'Ø' => 'ø',
+ 'Ù' => 'ù',
+ 'Ú' => 'ú',
+ 'Û' => 'û',
+ 'Ü' => 'ü',
+ 'Ã' => 'ý',
+ 'Þ' => 'þ',
+ 'Ä€' => 'Ä',
+ 'Ă' => 'ă',
+ 'Ä„' => 'Ä…',
+ 'Ć' => 'ć',
+ 'Ĉ' => 'ĉ',
+ 'ÄŠ' => 'Ä‹',
+ 'ÄŒ' => 'Ä',
+ 'ÄŽ' => 'Ä',
+ 'Ä' => 'Ä‘',
+ 'Ä’' => 'Ä“',
+ 'Ä”' => 'Ä•',
+ 'Ä–' => 'Ä—',
+ 'Ę' => 'ę',
+ 'Äš' => 'Ä›',
+ 'Äœ' => 'Ä',
+ 'Äž' => 'ÄŸ',
+ 'Ä ' => 'Ä¡',
+ 'Ä¢' => 'Ä£',
+ 'Ĥ' => 'ĥ',
+ 'Ħ' => 'ħ',
+ 'Ĩ' => 'ĩ',
+ 'Ī' => 'ī',
+ 'Ĭ' => 'Ä',
+ 'Į' => 'į',
+ 'İ' => 'i̇',
+ 'IJ' => 'ij',
+ 'Ĵ' => 'ĵ',
+ 'Ķ' => 'ķ',
+ 'Ĺ' => 'ĺ',
+ 'Ļ' => 'ļ',
+ 'Ľ' => 'ľ',
+ 'Ä¿' => 'Å€',
+ 'Å' => 'Å‚',
+ 'Ń' => 'ń',
+ 'Ņ' => 'ņ',
+ 'Ň' => 'ň',
+ 'ÅŠ' => 'Å‹',
+ 'ÅŒ' => 'Å',
+ 'ÅŽ' => 'Å',
+ 'Å' => 'Å‘',
+ 'Å’' => 'Å“',
+ 'Å”' => 'Å•',
+ 'Å–' => 'Å—',
+ 'Ř' => 'ř',
+ 'Åš' => 'Å›',
+ 'Åœ' => 'Å',
+ 'Åž' => 'ÅŸ',
+ 'Å ' => 'Å¡',
+ 'Å¢' => 'Å£',
+ 'Ť' => 'ť',
+ 'Ŧ' => 'ŧ',
+ 'Ũ' => 'ũ',
+ 'Ū' => 'ū',
+ 'Ŭ' => 'Å',
+ 'Ů' => 'ů',
+ 'Ű' => 'ű',
+ 'Ų' => 'ų',
+ 'Ŵ' => 'ŵ',
+ 'Ŷ' => 'ŷ',
+ 'Ÿ' => 'ÿ',
+ 'Ź' => 'ź',
+ 'Ż' => 'ż',
+ 'Ž' => 'ž',
+ 'Æ' => 'É“',
+ 'Ƃ' => 'ƃ',
+ 'Æ„' => 'Æ…',
+ 'Ɔ' => 'ɔ',
+ 'Ƈ' => 'ƈ',
+ 'Ɖ' => 'ɖ',
+ 'ÆŠ' => 'É—',
+ 'Ƌ' => 'ƌ',
+ 'ÆŽ' => 'Ç',
+ 'Æ' => 'É™',
+ 'Æ' => 'É›',
+ 'Æ‘' => 'Æ’',
+ 'Æ“' => 'É ',
+ 'Æ”' => 'É£',
+ 'Æ–' => 'É©',
+ 'Ɨ' => 'ɨ',
+ 'Ƙ' => 'ƙ',
+ 'Ɯ' => 'ɯ',
+ 'Æ' => 'ɲ',
+ 'Ɵ' => 'ɵ',
+ 'Æ ' => 'Æ¡',
+ 'Æ¢' => 'Æ£',
+ 'Ƥ' => 'ƥ',
+ 'Ʀ' => 'ʀ',
+ 'Ƨ' => 'ƨ',
+ 'Ʃ' => 'ʃ',
+ 'Ƭ' => 'Æ',
+ 'Ʈ' => 'ʈ',
+ 'Ư' => 'ư',
+ 'Ʊ' => 'ʊ',
+ 'Ʋ' => 'ʋ',
+ 'Ƴ' => 'ƴ',
+ 'Ƶ' => 'ƶ',
+ 'Æ·' => 'Ê’',
+ 'Ƹ' => 'ƹ',
+ 'Ƽ' => 'ƽ',
+ 'DŽ' => 'dž',
+ 'Dž' => 'dž',
+ 'LJ' => 'lj',
+ 'Lj' => 'lj',
+ 'NJ' => 'nj',
+ 'Nj' => 'nj',
+ 'Ç' => 'ÇŽ',
+ 'Ç' => 'Ç',
+ 'Ç‘' => 'Ç’',
+ 'Ç“' => 'Ç”',
+ 'Ç•' => 'Ç–',
+ 'Ǘ' => 'ǘ',
+ 'Ç™' => 'Çš',
+ 'Ǜ' => 'ǜ',
+ 'Çž' => 'ÇŸ',
+ 'Ç ' => 'Ç¡',
+ 'Ç¢' => 'Ç£',
+ 'Ǥ' => 'ǥ',
+ 'Ǧ' => 'ǧ',
+ 'Ǩ' => 'ǩ',
+ 'Ǫ' => 'ǫ',
+ 'Ǭ' => 'Ç',
+ 'Ǯ' => 'ǯ',
+ 'DZ' => 'dz',
+ 'Dz' => 'dz',
+ 'Ǵ' => 'ǵ',
+ 'Ƕ' => 'ƕ',
+ 'Ç·' => 'Æ¿',
+ 'Ǹ' => 'ǹ',
+ 'Ǻ' => 'ǻ',
+ 'Ǽ' => 'ǽ',
+ 'Ǿ' => 'ǿ',
+ 'È€' => 'È',
+ 'Ȃ' => 'ȃ',
+ 'È„' => 'È…',
+ 'Ȇ' => 'ȇ',
+ 'Ȉ' => 'ȉ',
+ 'ÈŠ' => 'È‹',
+ 'ÈŒ' => 'È',
+ 'ÈŽ' => 'È',
+ 'È' => 'È‘',
+ 'È’' => 'È“',
+ 'È”' => 'È•',
+ 'È–' => 'È—',
+ 'Ș' => 'ș',
+ 'Èš' => 'È›',
+ 'Èœ' => 'È',
+ 'Èž' => 'ÈŸ',
+ 'È ' => 'Æž',
+ 'È¢' => 'È£',
+ 'Ȥ' => 'ȥ',
+ 'Ȧ' => 'ȧ',
+ 'Ȩ' => 'ȩ',
+ 'Ȫ' => 'ȫ',
+ 'Ȭ' => 'È',
+ 'Ȯ' => 'ȯ',
+ 'Ȱ' => 'ȱ',
+ 'Ȳ' => 'ȳ',
+ 'Ⱥ' => 'ⱥ',
+ 'Ȼ' => 'ȼ',
+ 'Ƚ' => 'ƚ',
+ 'Ⱦ' => 'ⱦ',
+ 'É' => 'É‚',
+ 'Ƀ' => 'ƀ',
+ 'Ʉ' => 'ʉ',
+ 'Ʌ' => 'ʌ',
+ 'Ɇ' => 'ɇ',
+ 'Ɉ' => 'ɉ',
+ 'ÉŠ' => 'É‹',
+ 'ÉŒ' => 'É',
+ 'ÉŽ' => 'É',
+ 'Ͱ' => 'ͱ',
+ 'Ͳ' => 'ͳ',
+ 'Ͷ' => 'ͷ',
+ 'Ϳ' => 'ϳ',
+ 'Ά' => 'ά',
+ 'Έ' => 'Î',
+ 'Ή' => 'ή',
+ 'Ί' => 'ί',
+ 'Ό' => 'ό',
+ 'ÎŽ' => 'Ï',
+ 'Î' => 'ÏŽ',
+ 'Α' => 'α',
+ 'Β' => 'β',
+ 'Γ' => 'γ',
+ 'Δ' => 'δ',
+ 'Ε' => 'ε',
+ 'Ζ' => 'ζ',
+ 'Η' => 'η',
+ 'Θ' => 'θ',
+ 'Ι' => 'ι',
+ 'Κ' => 'κ',
+ 'Λ' => 'λ',
+ 'Μ' => 'μ',
+ 'Î' => 'ν',
+ 'Ξ' => 'ξ',
+ 'Ο' => 'ο',
+ 'Î ' => 'Ï€',
+ 'Ρ' => 'Ï',
+ 'Σ' => 'σ',
+ 'Τ' => 'τ',
+ 'Î¥' => 'Ï…',
+ 'Φ' => 'φ',
+ 'Χ' => 'χ',
+ 'Ψ' => 'ψ',
+ 'Ω' => 'ω',
+ 'Ϊ' => 'ϊ',
+ 'Ϋ' => 'ϋ',
+ 'Ï' => 'Ï—',
+ 'Ϙ' => 'ϙ',
+ 'Ïš' => 'Ï›',
+ 'Ïœ' => 'Ï',
+ 'Ïž' => 'ÏŸ',
+ 'Ï ' => 'Ï¡',
+ 'Ï¢' => 'Ï£',
+ 'Ϥ' => 'ϥ',
+ 'Ϧ' => 'ϧ',
+ 'Ϩ' => 'ϩ',
+ 'Ϫ' => 'ϫ',
+ 'Ϭ' => 'Ï',
+ 'Ϯ' => 'ϯ',
+ 'ϴ' => 'θ',
+ 'Ϸ' => 'ϸ',
+ 'Ϲ' => 'ϲ',
+ 'Ϻ' => 'ϻ',
+ 'Ͻ' => 'ͻ',
+ 'Ͼ' => 'ͼ',
+ 'Ͽ' => 'ͽ',
+ 'Ѐ' => 'Ñ',
+ 'Ð' => 'Ñ‘',
+ 'Ђ' => 'ђ',
+ 'Ѓ' => 'ѓ',
+ 'Є' => 'є',
+ 'Ð…' => 'Ñ•',
+ 'І' => 'і',
+ 'Ї' => 'ї',
+ 'Ј' => 'ј',
+ 'Љ' => 'љ',
+ 'Њ' => 'њ',
+ 'Ћ' => 'ћ',
+ 'Ќ' => 'ќ',
+ 'Ð' => 'Ñ',
+ 'ÐŽ' => 'Ñž',
+ 'Ð' => 'ÑŸ',
+ 'Ð' => 'а',
+ 'Б' => 'б',
+ 'В' => 'в',
+ 'Г' => 'г',
+ 'Д' => 'д',
+ 'Е' => 'е',
+ 'Ж' => 'ж',
+ 'З' => 'з',
+ 'И' => 'и',
+ 'Й' => 'й',
+ 'К' => 'к',
+ 'Л' => 'л',
+ 'М' => 'м',
+ 'Ð' => 'н',
+ 'О' => 'о',
+ 'П' => 'п',
+ 'Ð ' => 'Ñ€',
+ 'С' => 'Ñ',
+ 'Т' => 'т',
+ 'У' => 'у',
+ 'Ф' => 'ф',
+ 'Ð¥' => 'Ñ…',
+ 'Ц' => 'ц',
+ 'Ч' => 'ч',
+ 'Ш' => 'ш',
+ 'Щ' => 'щ',
+ 'Ъ' => 'ъ',
+ 'Ы' => 'ы',
+ 'Ь' => 'ь',
+ 'Ð' => 'Ñ',
+ 'Ю' => 'ю',
+ 'Я' => 'Ñ',
+ 'Ñ ' => 'Ñ¡',
+ 'Ñ¢' => 'Ñ£',
+ 'Ѥ' => 'ѥ',
+ 'Ѧ' => 'ѧ',
+ 'Ѩ' => 'ѩ',
+ 'Ѫ' => 'ѫ',
+ 'Ѭ' => 'Ñ',
+ 'Ѯ' => 'ѯ',
+ 'Ѱ' => 'ѱ',
+ 'Ѳ' => 'ѳ',
+ 'Ѵ' => 'ѵ',
+ 'Ѷ' => 'ѷ',
+ 'Ѹ' => 'ѹ',
+ 'Ѻ' => 'ѻ',
+ 'Ѽ' => 'ѽ',
+ 'Ѿ' => 'ѿ',
+ 'Ò€' => 'Ò',
+ 'ÒŠ' => 'Ò‹',
+ 'ÒŒ' => 'Ò',
+ 'ÒŽ' => 'Ò',
+ 'Ò' => 'Ò‘',
+ 'Ò’' => 'Ò“',
+ 'Ò”' => 'Ò•',
+ 'Ò–' => 'Ò—',
+ 'Ò˜' => 'Ò™',
+ 'Òš' => 'Ò›',
+ 'Òœ' => 'Ò',
+ 'Òž' => 'ÒŸ',
+ 'Ò ' => 'Ò¡',
+ 'Ò¢' => 'Ò£',
+ 'Ò¤' => 'Ò¥',
+ 'Ò¦' => 'Ò§',
+ 'Ò¨' => 'Ò©',
+ 'Òª' => 'Ò«',
+ 'Ò¬' => 'Ò',
+ 'Ò®' => 'Ò¯',
+ 'Ò°' => 'Ò±',
+ 'Ò²' => 'Ò³',
+ 'Ò´' => 'Òµ',
+ 'Ò¶' => 'Ò·',
+ 'Ò¸' => 'Ò¹',
+ 'Òº' => 'Ò»',
+ 'Ò¼' => 'Ò½',
+ 'Ò¾' => 'Ò¿',
+ 'Ó€' => 'Ó',
+ 'Ó' => 'Ó‚',
+ 'Óƒ' => 'Ó„',
+ 'Ó…' => 'Ó†',
+ 'Ó‡' => 'Óˆ',
+ 'Ó‰' => 'ÓŠ',
+ 'Ӌ' => 'ӌ',
+ 'Ó' => 'ÓŽ',
+ 'Ó' => 'Ó‘',
+ 'Ó’' => 'Ó“',
+ 'Ó”' => 'Ó•',
+ 'Ó–' => 'Ó—',
+ 'Ó˜' => 'Ó™',
+ 'Óš' => 'Ó›',
+ 'Óœ' => 'Ó',
+ 'Óž' => 'ÓŸ',
+ 'Ó ' => 'Ó¡',
+ 'Ó¢' => 'Ó£',
+ 'Ó¤' => 'Ó¥',
+ 'Ó¦' => 'Ó§',
+ 'Ó¨' => 'Ó©',
+ 'Óª' => 'Ó«',
+ 'Ó¬' => 'Ó',
+ 'Ó®' => 'Ó¯',
+ 'Ó°' => 'Ó±',
+ 'Ó²' => 'Ó³',
+ 'Ó´' => 'Óµ',
+ 'Ó¶' => 'Ó·',
+ 'Ó¸' => 'Ó¹',
+ 'Óº' => 'Ó»',
+ 'Ó¼' => 'Ó½',
+ 'Ó¾' => 'Ó¿',
+ 'Ô€' => 'Ô',
+ 'Ô‚' => 'Ôƒ',
+ 'Ô„' => 'Ô…',
+ 'Ô†' => 'Ô‡',
+ 'Ôˆ' => 'Ô‰',
+ 'ÔŠ' => 'Ô‹',
+ 'ÔŒ' => 'Ô',
+ 'ÔŽ' => 'Ô',
+ 'Ô' => 'Ô‘',
+ 'Ô’' => 'Ô“',
+ 'Ô”' => 'Ô•',
+ 'Ô–' => 'Ô—',
+ 'Ô˜' => 'Ô™',
+ 'Ôš' => 'Ô›',
+ 'Ôœ' => 'Ô',
+ 'Ôž' => 'ÔŸ',
+ 'Ô ' => 'Ô¡',
+ 'Ô¢' => 'Ô£',
+ 'Ô¤' => 'Ô¥',
+ 'Ô¦' => 'Ô§',
+ 'Ô¨' => 'Ô©',
+ 'Ôª' => 'Ô«',
+ 'Ô¬' => 'Ô',
+ 'Ô®' => 'Ô¯',
+ 'Ô±' => 'Õ¡',
+ 'Ô²' => 'Õ¢',
+ 'Ô³' => 'Õ£',
+ 'Ô´' => 'Õ¤',
+ 'Ôµ' => 'Õ¥',
+ 'Ô¶' => 'Õ¦',
+ 'Ô·' => 'Õ§',
+ 'Ô¸' => 'Õ¨',
+ 'Ô¹' => 'Õ©',
+ 'Ôº' => 'Õª',
+ 'Ô»' => 'Õ«',
+ 'Ô¼' => 'Õ¬',
+ 'Ô½' => 'Õ',
+ 'Ô¾' => 'Õ®',
+ 'Ô¿' => 'Õ¯',
+ 'Õ€' => 'Õ°',
+ 'Õ' => 'Õ±',
+ 'Õ‚' => 'Õ²',
+ 'Õƒ' => 'Õ³',
+ 'Õ„' => 'Õ´',
+ 'Õ…' => 'Õµ',
+ 'Õ†' => 'Õ¶',
+ 'Õ‡' => 'Õ·',
+ 'Õˆ' => 'Õ¸',
+ 'Õ‰' => 'Õ¹',
+ 'ÕŠ' => 'Õº',
+ 'Õ‹' => 'Õ»',
+ 'Ռ' => 'ռ',
+ 'Õ' => 'Õ½',
+ 'ÕŽ' => 'Õ¾',
+ 'Õ' => 'Õ¿',
+ 'Õ' => 'Ö€',
+ 'Õ‘' => 'Ö',
+ 'Õ’' => 'Ö‚',
+ 'Õ“' => 'Öƒ',
+ 'Õ”' => 'Ö„',
+ 'Õ•' => 'Ö…',
+ 'Õ–' => 'Ö†',
+ 'á‚ ' => 'â´€',
+ 'á‚¡' => 'â´',
+ 'á‚¢' => 'â´‚',
+ 'á‚£' => 'â´ƒ',
+ 'Ⴄ' => 'ⴄ',
+ 'á‚¥' => 'â´…',
+ 'Ⴆ' => 'ⴆ',
+ 'Ⴇ' => 'ⴇ',
+ 'Ⴈ' => 'ⴈ',
+ 'á‚©' => 'â´‰',
+ 'Ⴊ' => 'ⴊ',
+ 'á‚«' => 'â´‹',
+ 'Ⴌ' => 'ⴌ',
+ 'á‚' => 'â´',
+ 'á‚®' => 'â´Ž',
+ 'Ⴏ' => 'â´',
+ 'á‚°' => 'â´',
+ 'Ⴑ' => 'ⴑ',
+ 'Ⴒ' => 'ⴒ',
+ 'Ⴓ' => 'ⴓ',
+ 'á‚´' => 'â´”',
+ 'Ⴕ' => 'ⴕ',
+ 'Ⴖ' => 'ⴖ',
+ 'á‚·' => 'â´—',
+ 'Ⴘ' => 'ⴘ',
+ 'Ⴙ' => 'ⴙ',
+ 'Ⴚ' => 'ⴚ',
+ 'á‚»' => 'â´›',
+ 'Ⴜ' => 'ⴜ',
+ 'Ⴝ' => 'â´',
+ 'Ⴞ' => 'ⴞ',
+ 'á‚¿' => 'â´Ÿ',
+ 'Ⴠ' => 'ⴠ',
+ 'áƒ' => 'â´¡',
+ 'Ⴢ' => 'ⴢ',
+ 'Ⴣ' => 'ⴣ',
+ 'Ⴤ' => 'ⴤ',
+ 'Ⴥ' => 'ⴥ',
+ 'Ⴧ' => 'ⴧ',
+ 'áƒ' => 'â´',
+ 'Ꭰ' => 'ê°',
+ 'Ꭱ' => 'ê±',
+ 'Ꭲ' => 'ê²',
+ 'Ꭳ' => 'ê³',
+ 'Ꭴ' => 'ê´',
+ 'Ꭵ' => 'êµ',
+ 'Ꭶ' => 'ê¶',
+ 'Ꭷ' => 'ê·',
+ 'Ꭸ' => 'ê¸',
+ 'Ꭹ' => 'ê¹',
+ 'Ꭺ' => 'êº',
+ 'Ꭻ' => 'ê»',
+ 'Ꭼ' => 'ê¼',
+ 'áŽ' => 'ê½',
+ 'Ꭾ' => 'ê¾',
+ 'Ꭿ' => 'ê¿',
+ 'Ꮀ' => 'ꮀ',
+ 'Ꮁ' => 'ê®',
+ 'Ꮂ' => 'ꮂ',
+ 'Ꮃ' => 'ꮃ',
+ 'Ꮄ' => 'ꮄ',
+ 'Ꮅ' => 'ꮅ',
+ 'Ꮆ' => 'ꮆ',
+ 'Ꮇ' => 'ꮇ',
+ 'Ꮈ' => 'ꮈ',
+ 'Ꮉ' => 'ꮉ',
+ 'Ꮊ' => 'ꮊ',
+ 'Ꮋ' => 'ꮋ',
+ 'Ꮌ' => 'ꮌ',
+ 'Ꮍ' => 'ê®',
+ 'Ꮎ' => 'ꮎ',
+ 'Ꮏ' => 'ê®',
+ 'á€' => 'ê®',
+ 'á' => 'ꮑ',
+ 'á‚' => 'ê®’',
+ 'áƒ' => 'ꮓ',
+ 'á„' => 'ê®”',
+ 'á…' => 'ꮕ',
+ 'á†' => 'ê®–',
+ 'á‡' => 'ê®—',
+ 'áˆ' => 'ꮘ',
+ 'á‰' => 'ê®™',
+ 'áŠ' => 'ꮚ',
+ 'á‹' => 'ê®›',
+ 'áŒ' => 'ꮜ',
+ 'á' => 'ê®',
+ 'áŽ' => 'ꮞ',
+ 'á' => 'ꮟ',
+ 'á' => 'ê® ',
+ 'á‘' => 'ꮡ',
+ 'á’' => 'ꮢ',
+ 'á“' => 'ꮣ',
+ 'á”' => 'ꮤ',
+ 'á•' => 'ꮥ',
+ 'á–' => 'ꮦ',
+ 'á—' => 'ꮧ',
+ 'á˜' => 'ꮨ',
+ 'á™' => 'ꮩ',
+ 'áš' => 'ꮪ',
+ 'á›' => 'ꮫ',
+ 'áœ' => 'ꮬ',
+ 'á' => 'ê®',
+ 'áž' => 'ê®®',
+ 'áŸ' => 'ꮯ',
+ 'á ' => 'ê®°',
+ 'á¡' => 'ê®±',
+ 'á¢' => 'ꮲ',
+ 'á£' => 'ꮳ',
+ 'á¤' => 'ê®´',
+ 'á¥' => 'ꮵ',
+ 'á¦' => 'ꮶ',
+ 'á§' => 'ê®·',
+ 'á¨' => 'ꮸ',
+ 'á©' => 'ꮹ',
+ 'áª' => 'ꮺ',
+ 'á«' => 'ê®»',
+ 'á¬' => 'ꮼ',
+ 'á' => 'ꮽ',
+ 'á®' => 'ꮾ',
+ 'á¯' => 'ꮿ',
+ 'á°' => 'á¸',
+ 'á±' => 'á¹',
+ 'á²' => 'áº',
+ 'á³' => 'á»',
+ 'á´' => 'á¼',
+ 'áµ' => 'á½',
+ 'á²' => 'áƒ',
+ 'Ბ' => 'ბ',
+ 'Გ' => 'გ',
+ 'Დ' => 'დ',
+ 'Ე' => 'ე',
+ 'Ვ' => 'ვ',
+ 'Ზ' => 'ზ',
+ 'Თ' => 'თ',
+ 'Ი' => 'ი',
+ 'Კ' => 'კ',
+ 'Ლ' => 'ლ',
+ 'Მ' => 'მ',
+ 'Ნ' => 'ნ',
+ 'á²' => 'áƒ',
+ 'Პ' => 'პ',
+ 'Ჟ' => 'ჟ',
+ 'Რ' => 'რ',
+ 'Ს' => 'ს',
+ 'Ტ' => 'ტ',
+ 'Უ' => 'უ',
+ 'Ფ' => 'ფ',
+ 'Ქ' => 'ქ',
+ 'Ღ' => 'ღ',
+ 'Ყ' => 'ყ',
+ 'Შ' => 'შ',
+ 'Ჩ' => 'ჩ',
+ 'Ც' => 'ც',
+ 'Ძ' => 'ძ',
+ 'Წ' => 'წ',
+ 'á²' => 'áƒ',
+ 'Ხ' => 'ხ',
+ 'Ჯ' => 'ჯ',
+ 'Ჰ' => 'ჰ',
+ 'Ჱ' => 'ჱ',
+ 'Ჲ' => 'ჲ',
+ 'Ჳ' => 'ჳ',
+ 'Ჴ' => 'ჴ',
+ 'Ჵ' => 'ჵ',
+ 'Ჶ' => 'ჶ',
+ 'Ჷ' => 'ჷ',
+ 'Ჸ' => 'ჸ',
+ 'Ჹ' => 'ჹ',
+ 'Ჺ' => 'ჺ',
+ 'Ჽ' => 'ჽ',
+ 'Ჾ' => 'ჾ',
+ 'Ჿ' => 'ჿ',
+ 'Ḁ' => 'á¸',
+ 'Ḃ' => 'ḃ',
+ 'Ḅ' => 'ḅ',
+ 'Ḇ' => 'ḇ',
+ 'Ḉ' => 'ḉ',
+ 'Ḋ' => 'ḋ',
+ 'Ḍ' => 'á¸',
+ 'Ḏ' => 'á¸',
+ 'á¸' => 'ḑ',
+ 'Ḓ' => 'ḓ',
+ 'Ḕ' => 'ḕ',
+ 'Ḗ' => 'ḗ',
+ 'Ḙ' => 'ḙ',
+ 'Ḛ' => 'ḛ',
+ 'Ḝ' => 'á¸',
+ 'Ḟ' => 'ḟ',
+ 'Ḡ' => 'ḡ',
+ 'Ḣ' => 'ḣ',
+ 'Ḥ' => 'ḥ',
+ 'Ḧ' => 'ḧ',
+ 'Ḩ' => 'ḩ',
+ 'Ḫ' => 'ḫ',
+ 'Ḭ' => 'á¸',
+ 'Ḯ' => 'ḯ',
+ 'Ḱ' => 'ḱ',
+ 'Ḳ' => 'ḳ',
+ 'Ḵ' => 'ḵ',
+ 'Ḷ' => 'ḷ',
+ 'Ḹ' => 'ḹ',
+ 'Ḻ' => 'ḻ',
+ 'Ḽ' => 'ḽ',
+ 'Ḿ' => 'ḿ',
+ 'á¹€' => 'á¹',
+ 'Ṃ' => 'ṃ',
+ 'Ṅ' => 'ṅ',
+ 'Ṇ' => 'ṇ',
+ 'Ṉ' => 'ṉ',
+ 'Ṋ' => 'ṋ',
+ 'Ṍ' => 'á¹',
+ 'Ṏ' => 'á¹',
+ 'á¹' => 'ṑ',
+ 'Ṓ' => 'ṓ',
+ 'Ṕ' => 'ṕ',
+ 'á¹–' => 'á¹—',
+ 'Ṙ' => 'ṙ',
+ 'Ṛ' => 'ṛ',
+ 'Ṝ' => 'á¹',
+ 'Ṟ' => 'ṟ',
+ 'Ṡ' => 'ṡ',
+ 'á¹¢' => 'á¹£',
+ 'Ṥ' => 'ṥ',
+ 'Ṧ' => 'ṧ',
+ 'Ṩ' => 'ṩ',
+ 'Ṫ' => 'ṫ',
+ 'Ṭ' => 'á¹',
+ 'Ṯ' => 'ṯ',
+ 'á¹°' => 'á¹±',
+ 'á¹²' => 'á¹³',
+ 'á¹´' => 'á¹µ',
+ 'Ṷ' => 'ṷ',
+ 'Ṹ' => 'ṹ',
+ 'Ṻ' => 'ṻ',
+ 'á¹¼' => 'á¹½',
+ 'Ṿ' => 'ṿ',
+ 'Ẁ' => 'áº',
+ 'Ẃ' => 'ẃ',
+ 'Ẅ' => 'ẅ',
+ 'Ẇ' => 'ẇ',
+ 'Ẉ' => 'ẉ',
+ 'Ẋ' => 'ẋ',
+ 'Ẍ' => 'áº',
+ 'Ẏ' => 'áº',
+ 'áº' => 'ẑ',
+ 'Ẓ' => 'ẓ',
+ 'Ẕ' => 'ẕ',
+ 'ẞ' => 'ß',
+ 'Ạ' => 'ạ',
+ 'Ả' => 'ả',
+ 'Ấ' => 'ấ',
+ 'Ầ' => 'ầ',
+ 'Ẩ' => 'ẩ',
+ 'Ẫ' => 'ẫ',
+ 'Ậ' => 'áº',
+ 'Ắ' => 'ắ',
+ 'Ằ' => 'ằ',
+ 'Ẳ' => 'ẳ',
+ 'Ẵ' => 'ẵ',
+ 'Ặ' => 'ặ',
+ 'Ẹ' => 'ẹ',
+ 'Ẻ' => 'ẻ',
+ 'Ẽ' => 'ẽ',
+ 'Ế' => 'ế',
+ 'Ề' => 'á»',
+ 'Ể' => 'ể',
+ 'Ễ' => 'ễ',
+ 'Ệ' => 'ệ',
+ 'Ỉ' => 'ỉ',
+ 'Ị' => 'ị',
+ 'Ọ' => 'á»',
+ 'Ỏ' => 'á»',
+ 'á»' => 'ố',
+ 'Ồ' => 'ồ',
+ 'Ổ' => 'ổ',
+ 'á»–' => 'á»—',
+ 'Ộ' => 'ộ',
+ 'Ớ' => 'ớ',
+ 'Ờ' => 'á»',
+ 'Ở' => 'ở',
+ 'Ỡ' => 'ỡ',
+ 'Ợ' => 'ợ',
+ 'Ụ' => 'ụ',
+ 'Ủ' => 'ủ',
+ 'Ứ' => 'ứ',
+ 'Ừ' => 'ừ',
+ 'Ử' => 'á»',
+ 'Ữ' => 'ữ',
+ 'á»°' => 'á»±',
+ 'Ỳ' => 'ỳ',
+ 'Ỵ' => 'ỵ',
+ 'Ỷ' => 'ỷ',
+ 'Ỹ' => 'ỹ',
+ 'Ỻ' => 'ỻ',
+ 'Ỽ' => 'ỽ',
+ 'Ỿ' => 'ỿ',
+ 'Ἀ' => 'ἀ',
+ 'Ἁ' => 'á¼',
+ 'Ἂ' => 'ἂ',
+ 'Ἃ' => 'ἃ',
+ 'Ἄ' => 'ἄ',
+ 'á¼' => 'á¼…',
+ 'Ἆ' => 'ἆ',
+ 'á¼' => 'ἇ',
+ 'Ἐ' => 'á¼',
+ 'Ἑ' => 'ἑ',
+ 'Ἒ' => 'ἒ',
+ 'Ἓ' => 'ἓ',
+ 'Ἔ' => 'ἔ',
+ 'á¼' => 'ἕ',
+ 'Ἠ' => 'ἠ',
+ 'Ἡ' => 'ἡ',
+ 'Ἢ' => 'ἢ',
+ 'Ἣ' => 'ἣ',
+ 'Ἤ' => 'ἤ',
+ 'á¼' => 'á¼¥',
+ 'Ἦ' => 'ἦ',
+ 'Ἧ' => 'ἧ',
+ 'Ἰ' => 'ἰ',
+ 'á¼¹' => 'á¼±',
+ 'Ἲ' => 'ἲ',
+ 'á¼»' => 'á¼³',
+ 'á¼¼' => 'á¼´',
+ 'á¼½' => 'á¼µ',
+ 'Ἶ' => 'ἶ',
+ 'Ἷ' => 'ἷ',
+ 'Ὀ' => 'ὀ',
+ 'Ὁ' => 'á½',
+ 'Ὂ' => 'ὂ',
+ 'Ὃ' => 'ὃ',
+ 'Ὄ' => 'ὄ',
+ 'á½' => 'á½…',
+ 'Ὑ' => 'ὑ',
+ 'Ὓ' => 'ὓ',
+ 'á½' => 'ὕ',
+ 'Ὗ' => 'ὗ',
+ 'Ὠ' => 'ὠ',
+ 'Ὡ' => 'ὡ',
+ 'Ὢ' => 'ὢ',
+ 'Ὣ' => 'ὣ',
+ 'Ὤ' => 'ὤ',
+ 'á½' => 'á½¥',
+ 'Ὦ' => 'ὦ',
+ 'Ὧ' => 'ὧ',
+ 'ᾈ' => 'ᾀ',
+ 'ᾉ' => 'á¾',
+ 'ᾊ' => 'ᾂ',
+ 'ᾋ' => 'ᾃ',
+ 'ᾌ' => 'ᾄ',
+ 'á¾' => 'á¾…',
+ 'ᾎ' => 'ᾆ',
+ 'á¾' => 'ᾇ',
+ 'ᾘ' => 'á¾',
+ 'ᾙ' => 'ᾑ',
+ 'ᾚ' => 'ᾒ',
+ 'ᾛ' => 'ᾓ',
+ 'ᾜ' => 'ᾔ',
+ 'á¾' => 'ᾕ',
+ 'ᾞ' => 'ᾖ',
+ 'ᾟ' => 'ᾗ',
+ 'ᾨ' => 'ᾠ',
+ 'ᾩ' => 'ᾡ',
+ 'ᾪ' => 'ᾢ',
+ 'ᾫ' => 'ᾣ',
+ 'ᾬ' => 'ᾤ',
+ 'á¾' => 'á¾¥',
+ 'ᾮ' => 'ᾦ',
+ 'ᾯ' => 'ᾧ',
+ 'Ᾰ' => 'ᾰ',
+ 'á¾¹' => 'á¾±',
+ 'Ὰ' => 'ὰ',
+ 'á¾»' => 'á½±',
+ 'á¾¼' => 'á¾³',
+ 'Ὲ' => 'ὲ',
+ 'Έ' => 'έ',
+ 'á¿Š' => 'á½´',
+ 'á¿‹' => 'á½µ',
+ 'ῌ' => 'ῃ',
+ 'Ῐ' => 'á¿',
+ 'á¿™' => 'á¿‘',
+ 'Ὶ' => 'ὶ',
+ 'á¿›' => 'á½·',
+ 'Ῠ' => 'ῠ',
+ 'á¿©' => 'á¿¡',
+ 'Ὺ' => 'ὺ',
+ 'á¿«' => 'á½»',
+ 'Ῥ' => 'ῥ',
+ 'Ὸ' => 'ὸ',
+ 'Ό' => 'ό',
+ 'Ὼ' => 'ὼ',
+ 'á¿»' => 'á½½',
+ 'ῼ' => 'ῳ',
+ 'Ω' => 'ω',
+ 'K' => 'k',
+ 'â„«' => 'Ã¥',
+ 'Ⅎ' => 'ⅎ',
+ 'â… ' => 'â…°',
+ 'â…¡' => 'â…±',
+ 'â…¢' => 'â…²',
+ 'â…£' => 'â…³',
+ 'â…¤' => 'â…´',
+ 'â…¥' => 'â…µ',
+ 'â…¦' => 'â…¶',
+ 'â…§' => 'â…·',
+ 'â…¨' => 'â…¸',
+ 'â…©' => 'â…¹',
+ 'â…ª' => 'â…º',
+ 'â…«' => 'â…»',
+ 'â…¬' => 'â…¼',
+ 'â…' => 'â…½',
+ 'â…®' => 'â…¾',
+ 'â…¯' => 'â…¿',
+ 'Ↄ' => 'ↄ',
+ 'â’¶' => 'â“',
+ 'â’·' => 'â“‘',
+ 'â’¸' => 'â“’',
+ 'â’¹' => 'â““',
+ 'â’º' => 'â“”',
+ 'â’»' => 'â“•',
+ 'â’¼' => 'â“–',
+ 'â’½' => 'â“—',
+ 'Ⓘ' => 'ⓘ',
+ 'â’¿' => 'â“™',
+ 'â“€' => 'â“š',
+ 'â“' => 'â“›',
+ 'Ⓜ' => 'ⓜ',
+ 'Ⓝ' => 'â“',
+ 'â“„' => 'â“ž',
+ 'â“…' => 'â“Ÿ',
+ 'Ⓠ' => 'ⓠ',
+ 'Ⓡ' => 'ⓡ',
+ 'Ⓢ' => 'ⓢ',
+ 'Ⓣ' => 'ⓣ',
+ 'Ⓤ' => 'ⓤ',
+ 'â“‹' => 'â“¥',
+ 'Ⓦ' => 'ⓦ',
+ 'â“' => 'ⓧ',
+ 'Ⓨ' => 'ⓨ',
+ 'â“' => 'â“©',
+ 'â°€' => 'â°°',
+ 'â°' => 'â°±',
+ 'â°‚' => 'â°²',
+ 'â°ƒ' => 'â°³',
+ 'â°„' => 'â°´',
+ 'â°…' => 'â°µ',
+ 'â°†' => 'â°¶',
+ 'â°‡' => 'â°·',
+ 'â°ˆ' => 'â°¸',
+ 'â°‰' => 'â°¹',
+ 'â°Š' => 'â°º',
+ 'â°‹' => 'â°»',
+ 'Ⰼ' => 'ⰼ',
+ 'â°' => 'â°½',
+ 'â°Ž' => 'â°¾',
+ 'â°' => 'â°¿',
+ 'â°' => 'â±€',
+ 'â°‘' => 'â±',
+ 'Ⱂ' => 'ⱂ',
+ 'Ⱃ' => 'ⱃ',
+ 'Ⱄ' => 'ⱄ',
+ 'â°•' => 'â±…',
+ 'Ⱆ' => 'ⱆ',
+ 'Ⱇ' => 'ⱇ',
+ 'Ⱈ' => 'ⱈ',
+ 'Ⱉ' => 'ⱉ',
+ 'Ⱊ' => 'ⱊ',
+ 'Ⱋ' => 'ⱋ',
+ 'Ⱌ' => 'ⱌ',
+ 'â°' => 'â±',
+ 'Ⱎ' => 'ⱎ',
+ 'â°Ÿ' => 'â±',
+ 'â° ' => 'â±',
+ 'Ⱑ' => 'ⱑ',
+ 'â°¢' => 'â±’',
+ 'Ⱓ' => 'ⱓ',
+ 'â°¤' => 'â±”',
+ 'Ⱕ' => 'ⱕ',
+ 'â°¦' => 'â±–',
+ 'â°§' => 'â±—',
+ 'Ⱘ' => 'ⱘ',
+ 'â°©' => 'â±™',
+ 'Ⱚ' => 'ⱚ',
+ 'â°«' => 'â±›',
+ 'Ⱜ' => 'ⱜ',
+ 'â°' => 'â±',
+ 'Ⱞ' => 'ⱞ',
+ 'Ⱡ' => 'ⱡ',
+ 'â±¢' => 'É«',
+ 'â±£' => 'áµ½',
+ 'Ɽ' => 'ɽ',
+ 'Ⱨ' => 'ⱨ',
+ 'Ⱪ' => 'ⱪ',
+ 'Ⱬ' => 'ⱬ',
+ 'â±' => 'É‘',
+ 'Ɱ' => 'ɱ',
+ 'Ɐ' => 'É',
+ 'â±°' => 'É’',
+ 'â±²' => 'â±³',
+ 'Ⱶ' => 'ⱶ',
+ 'â±¾' => 'È¿',
+ 'Ɀ' => 'ɀ',
+ 'â²€' => 'â²',
+ 'Ⲃ' => 'ⲃ',
+ 'Ⲅ' => 'ⲅ',
+ 'Ⲇ' => 'ⲇ',
+ 'Ⲉ' => 'ⲉ',
+ 'Ⲋ' => 'ⲋ',
+ 'Ⲍ' => 'â²',
+ 'Ⲏ' => 'â²',
+ 'â²' => 'ⲑ',
+ 'Ⲓ' => 'ⲓ',
+ 'Ⲕ' => 'ⲕ',
+ 'â²–' => 'â²—',
+ 'Ⲙ' => 'ⲙ',
+ 'Ⲛ' => 'ⲛ',
+ 'Ⲝ' => 'â²',
+ 'Ⲟ' => 'ⲟ',
+ 'Ⲡ' => 'ⲡ',
+ 'â²¢' => 'â²£',
+ 'Ⲥ' => 'ⲥ',
+ 'Ⲧ' => 'ⲧ',
+ 'Ⲩ' => 'ⲩ',
+ 'Ⲫ' => 'ⲫ',
+ 'Ⲭ' => 'â²',
+ 'Ⲯ' => 'ⲯ',
+ 'â²°' => 'â²±',
+ 'â²²' => 'â²³',
+ 'â²´' => 'â²µ',
+ 'Ⲷ' => 'ⲷ',
+ 'Ⲹ' => 'ⲹ',
+ 'Ⲻ' => 'ⲻ',
+ 'â²¼' => 'â²½',
+ 'Ⲿ' => 'ⲿ',
+ 'â³€' => 'â³',
+ 'Ⳃ' => 'ⳃ',
+ 'Ⳅ' => 'ⳅ',
+ 'Ⳇ' => 'ⳇ',
+ 'Ⳉ' => 'ⳉ',
+ 'Ⳋ' => 'ⳋ',
+ 'Ⳍ' => 'â³',
+ 'Ⳏ' => 'â³',
+ 'â³' => 'ⳑ',
+ 'Ⳓ' => 'ⳓ',
+ 'Ⳕ' => 'ⳕ',
+ 'â³–' => 'â³—',
+ 'Ⳙ' => 'ⳙ',
+ 'Ⳛ' => 'ⳛ',
+ 'Ⳝ' => 'â³',
+ 'Ⳟ' => 'ⳟ',
+ 'Ⳡ' => 'ⳡ',
+ 'â³¢' => 'â³£',
+ 'Ⳬ' => 'ⳬ',
+ 'â³' => 'â³®',
+ 'â³²' => 'â³³',
+ 'Ꙁ' => 'ê™',
+ 'Ꙃ' => 'ꙃ',
+ 'Ꙅ' => 'ꙅ',
+ 'Ꙇ' => 'ꙇ',
+ 'Ꙉ' => 'ꙉ',
+ 'Ꙋ' => 'ꙋ',
+ 'Ꙍ' => 'ê™',
+ 'Ꙏ' => 'ê™',
+ 'ê™' => 'ꙑ',
+ 'Ꙓ' => 'ꙓ',
+ 'Ꙕ' => 'ꙕ',
+ 'ê™–' => 'ê™—',
+ 'Ꙙ' => 'ꙙ',
+ 'Ꙛ' => 'ꙛ',
+ 'Ꙝ' => 'ê™',
+ 'Ꙟ' => 'ꙟ',
+ 'ê™ ' => 'ꙡ',
+ 'Ꙣ' => 'ꙣ',
+ 'Ꙥ' => 'ꙥ',
+ 'Ꙧ' => 'ꙧ',
+ 'Ꙩ' => 'ꙩ',
+ 'Ꙫ' => 'ꙫ',
+ 'Ꙭ' => 'ê™',
+ 'Ꚁ' => 'êš',
+ 'Ꚃ' => 'ꚃ',
+ 'êš„' => 'êš…',
+ 'Ꚇ' => 'ꚇ',
+ 'Ꚉ' => 'ꚉ',
+ 'Ꚋ' => 'ꚋ',
+ 'Ꚍ' => 'êš',
+ 'Ꚏ' => 'êš',
+ 'êš' => 'êš‘',
+ 'êš’' => 'êš“',
+ 'êš”' => 'êš•',
+ 'êš–' => 'êš—',
+ 'Ꚙ' => 'ꚙ',
+ 'êšš' => 'êš›',
+ 'Ꜣ' => 'ꜣ',
+ 'Ꜥ' => 'ꜥ',
+ 'Ꜧ' => 'ꜧ',
+ 'Ꜩ' => 'ꜩ',
+ 'Ꜫ' => 'ꜫ',
+ 'Ꜭ' => 'êœ',
+ 'Ꜯ' => 'ꜯ',
+ 'Ꜳ' => 'ꜳ',
+ 'Ꜵ' => 'ꜵ',
+ 'Ꜷ' => 'ꜷ',
+ 'Ꜹ' => 'ꜹ',
+ 'Ꜻ' => 'ꜻ',
+ 'Ꜽ' => 'ꜽ',
+ 'Ꜿ' => 'ꜿ',
+ 'ê€' => 'ê',
+ 'ê‚' => 'êƒ',
+ 'ê„' => 'ê…',
+ 'ê†' => 'ê‡',
+ 'êˆ' => 'ê‰',
+ 'êŠ' => 'ê‹',
+ 'êŒ' => 'ê',
+ 'êŽ' => 'ê',
+ 'ê' => 'ê‘',
+ 'ê’' => 'ê“',
+ 'ê”' => 'ê•',
+ 'ê–' => 'ê—',
+ 'ê˜' => 'ê™',
+ 'êš' => 'ê›',
+ 'êœ' => 'ê',
+ 'êž' => 'êŸ',
+ 'ê ' => 'ê¡',
+ 'ê¢' => 'ê£',
+ 'ê¤' => 'ê¥',
+ 'ê¦' => 'ê§',
+ 'ê¨' => 'ê©',
+ 'êª' => 'ê«',
+ 'ê¬' => 'ê',
+ 'ê®' => 'ê¯',
+ 'ê¹' => 'êº',
+ 'ê»' => 'ê¼',
+ 'ê½' => 'áµ¹',
+ 'ê¾' => 'ê¿',
+ 'Ꞁ' => 'êž',
+ 'Ꞃ' => 'ꞃ',
+ 'êž„' => 'êž…',
+ 'Ꞇ' => 'ꞇ',
+ 'Ꞌ' => 'ꞌ',
+ 'êž' => 'É¥',
+ 'êž' => 'êž‘',
+ 'êž’' => 'êž“',
+ 'êž–' => 'êž—',
+ 'Ꞙ' => 'ꞙ',
+ 'êžš' => 'êž›',
+ 'êžœ' => 'êž',
+ 'Ꞟ' => 'ꞟ',
+ 'êž ' => 'êž¡',
+ 'Ꞣ' => 'ꞣ',
+ 'Ꞥ' => 'ꞥ',
+ 'Ꞧ' => 'ꞧ',
+ 'Ꞩ' => 'ꞩ',
+ 'Ɦ' => 'ɦ',
+ 'Ɜ' => 'ɜ',
+ 'Ɡ' => 'ɡ',
+ 'êž' => 'ɬ',
+ 'Ɪ' => 'ɪ',
+ 'êž°' => 'Êž',
+ 'Ʇ' => 'ʇ',
+ 'êž²' => 'Ê',
+ 'êž³' => 'ê“',
+ 'êž´' => 'êžµ',
+ 'Ꞷ' => 'ꞷ',
+ 'Ꞹ' => 'ꞹ',
+ 'Ꞻ' => 'ꞻ',
+ 'êž¼' => 'êž½',
+ 'êž¾' => 'êž¿',
+ 'Ꟃ' => 'ꟃ',
+ 'Ꞔ' => 'ꞔ',
+ 'Ʂ' => 'ʂ',
+ 'Ᶎ' => 'ᶎ',
+ 'Ꟈ' => 'ꟈ',
+ 'Ꟊ' => 'ꟊ',
+ 'Ꟶ' => 'ꟶ',
+ 'A' => 'ï½',
+ 'B' => 'b',
+ 'C' => 'c',
+ 'D' => 'd',
+ 'ï¼¥' => 'ï½…',
+ 'F' => 'f',
+ 'G' => 'g',
+ 'H' => 'h',
+ 'I' => 'i',
+ 'J' => 'j',
+ 'K' => 'k',
+ 'L' => 'l',
+ 'ï¼' => 'ï½',
+ 'N' => 'n',
+ 'O' => 'ï½',
+ 'ï¼°' => 'ï½',
+ 'Q' => 'q',
+ 'ï¼²' => 'ï½’',
+ 'S' => 's',
+ 'ï¼´' => 'ï½”',
+ 'U' => 'u',
+ 'V' => 'v',
+ 'ï¼·' => 'ï½—',
+ 'X' => 'x',
+ 'ï¼¹' => 'ï½™',
+ 'Z' => 'z',
+ 'ð€' => 'ð¨',
+ 'ð' => 'ð©',
+ 'ð‚' => 'ðª',
+ 'ðƒ' => 'ð«',
+ 'ð„' => 'ð¬',
+ 'ð…' => 'ð',
+ 'ð†' => 'ð®',
+ 'ð‡' => 'ð¯',
+ 'ðˆ' => 'ð°',
+ 'ð‰' => 'ð±',
+ 'ðŠ' => 'ð²',
+ 'ð‹' => 'ð³',
+ 'ðŒ' => 'ð´',
+ 'ð' => 'ðµ',
+ 'ðŽ' => 'ð¶',
+ 'ð' => 'ð·',
+ 'ð' => 'ð¸',
+ 'ð‘' => 'ð¹',
+ 'ð’' => 'ðº',
+ 'ð“' => 'ð»',
+ 'ð”' => 'ð¼',
+ 'ð•' => 'ð½',
+ 'ð–' => 'ð¾',
+ 'ð—' => 'ð¿',
+ 'ð˜' => 'ð‘€',
+ 'ð™' => 'ð‘',
+ 'ðš' => 'ð‘‚',
+ 'ð›' => 'ð‘ƒ',
+ 'ðœ' => 'ð‘„',
+ 'ð' => 'ð‘…',
+ 'ðž' => 'ð‘†',
+ 'ðŸ' => 'ð‘‡',
+ 'ð ' => 'ð‘ˆ',
+ 'ð¡' => 'ð‘‰',
+ 'ð¢' => 'ð‘Š',
+ 'ð£' => 'ð‘‹',
+ 'ð¤' => 'ð‘Œ',
+ 'ð¥' => 'ð‘',
+ 'ð¦' => 'ð‘Ž',
+ 'ð§' => 'ð‘',
+ 'ð’°' => 'ð“˜',
+ 'ð’±' => 'ð“™',
+ 'ð’²' => 'ð“š',
+ 'ð’³' => 'ð“›',
+ 'ð’´' => 'ð“œ',
+ 'ð’µ' => 'ð“',
+ 'ð’¶' => 'ð“ž',
+ 'ð’·' => 'ð“Ÿ',
+ 'ð’¸' => 'ð“ ',
+ 'ð’¹' => 'ð“¡',
+ 'ð’º' => 'ð“¢',
+ 'ð’»' => 'ð“£',
+ 'ð’¼' => 'ð“¤',
+ 'ð’½' => 'ð“¥',
+ 'ð’¾' => 'ð“¦',
+ 'ð’¿' => 'ð“§',
+ 'ð“€' => 'ð“¨',
+ 'ð“' => 'ð“©',
+ 'ð“‚' => 'ð“ª',
+ 'ð“ƒ' => 'ð“«',
+ 'ð“„' => 'ð“¬',
+ 'ð“…' => 'ð“',
+ 'ð“†' => 'ð“®',
+ 'ð“‡' => 'ð“¯',
+ 'ð“ˆ' => 'ð“°',
+ 'ð“‰' => 'ð“±',
+ 'ð“Š' => 'ð“²',
+ 'ð“‹' => 'ð“³',
+ 'ð“Œ' => 'ð“´',
+ 'ð“' => 'ð“µ',
+ 'ð“Ž' => 'ð“¶',
+ 'ð“' => 'ð“·',
+ 'ð“' => 'ð“¸',
+ 'ð“‘' => 'ð“¹',
+ 'ð“’' => 'ð“º',
+ 'ð““' => 'ð“»',
+ 'ð²€' => 'ð³€',
+ 'ð²' => 'ð³',
+ 'ð²‚' => 'ð³‚',
+ 'ð²ƒ' => 'ð³ƒ',
+ 'ð²„' => 'ð³„',
+ 'ð²…' => 'ð³…',
+ 'ð²†' => 'ð³†',
+ 'ð²‡' => 'ð³‡',
+ 'ð²ˆ' => 'ð³ˆ',
+ 'ð²‰' => 'ð³‰',
+ 'ð²Š' => 'ð³Š',
+ 'ð²‹' => 'ð³‹',
+ 'ð²Œ' => 'ð³Œ',
+ 'ð²' => 'ð³',
+ 'ð²Ž' => 'ð³Ž',
+ 'ð²' => 'ð³',
+ 'ð²' => 'ð³',
+ 'ð²‘' => 'ð³‘',
+ 'ð²’' => 'ð³’',
+ 'ð²“' => 'ð³“',
+ 'ð²”' => 'ð³”',
+ 'ð²•' => 'ð³•',
+ 'ð²–' => 'ð³–',
+ 'ð²—' => 'ð³—',
+ 'ð²˜' => 'ð³˜',
+ 'ð²™' => 'ð³™',
+ 'ð²š' => 'ð³š',
+ 'ð²›' => 'ð³›',
+ 'ð²œ' => 'ð³œ',
+ 'ð²' => 'ð³',
+ 'ð²ž' => 'ð³ž',
+ 'ð²Ÿ' => 'ð³Ÿ',
+ 'ð² ' => 'ð³ ',
+ 'ð²¡' => 'ð³¡',
+ 'ð²¢' => 'ð³¢',
+ 'ð²£' => 'ð³£',
+ 'ð²¤' => 'ð³¤',
+ 'ð²¥' => 'ð³¥',
+ 'ð²¦' => 'ð³¦',
+ 'ð²§' => 'ð³§',
+ 'ð²¨' => 'ð³¨',
+ 'ð²©' => 'ð³©',
+ 'ð²ª' => 'ð³ª',
+ 'ð²«' => 'ð³«',
+ 'ð²¬' => 'ð³¬',
+ 'ð²' => 'ð³',
+ 'ð²®' => 'ð³®',
+ 'ð²¯' => 'ð³¯',
+ 'ð²°' => 'ð³°',
+ 'ð²±' => 'ð³±',
+ 'ð²²' => 'ð³²',
+ 'ð‘¢ ' => 'ð‘£€',
+ '𑢡' => 'ð‘£',
+ '𑢢' => '𑣂',
+ '𑢣' => '𑣃',
+ '𑢤' => '𑣄',
+ 'ð‘¢¥' => 'ð‘£…',
+ '𑢦' => '𑣆',
+ '𑢧' => '𑣇',
+ '𑢨' => '𑣈',
+ '𑢩' => '𑣉',
+ '𑢪' => '𑣊',
+ '𑢫' => '𑣋',
+ '𑢬' => '𑣌',
+ 'ð‘¢' => 'ð‘£',
+ '𑢮' => '𑣎',
+ '𑢯' => 'ð‘£',
+ 'ð‘¢°' => 'ð‘£',
+ '𑢱' => '𑣑',
+ 'ð‘¢²' => 'ð‘£’',
+ '𑢳' => '𑣓',
+ 'ð‘¢´' => 'ð‘£”',
+ '𑢵' => '𑣕',
+ '𑢶' => '𑣖',
+ 'ð‘¢·' => 'ð‘£—',
+ '𑢸' => '𑣘',
+ 'ð‘¢¹' => 'ð‘£™',
+ '𑢺' => '𑣚',
+ 'ð‘¢»' => 'ð‘£›',
+ '𑢼' => '𑣜',
+ 'ð‘¢½' => 'ð‘£',
+ '𑢾' => '𑣞',
+ '𑢿' => '𑣟',
+ 'ð–¹€' => 'ð–¹ ',
+ 'ð–¹' => '𖹡',
+ '𖹂' => '𖹢',
+ '𖹃' => '𖹣',
+ '𖹄' => '𖹤',
+ 'ð–¹…' => 'ð–¹¥',
+ '𖹆' => '𖹦',
+ '𖹇' => '𖹧',
+ '𖹈' => '𖹨',
+ '𖹉' => '𖹩',
+ '𖹊' => '𖹪',
+ '𖹋' => '𖹫',
+ '𖹌' => '𖹬',
+ 'ð–¹' => 'ð–¹',
+ '𖹎' => '𖹮',
+ 'ð–¹' => '𖹯',
+ 'ð–¹' => 'ð–¹°',
+ '𖹑' => '𖹱',
+ 'ð–¹’' => 'ð–¹²',
+ '𖹓' => '𖹳',
+ 'ð–¹”' => 'ð–¹´',
+ '𖹕' => '𖹵',
+ '𖹖' => '𖹶',
+ 'ð–¹—' => 'ð–¹·',
+ '𖹘' => '𖹸',
+ 'ð–¹™' => 'ð–¹¹',
+ '𖹚' => '𖹺',
+ 'ð–¹›' => 'ð–¹»',
+ '𖹜' => '𖹼',
+ 'ð–¹' => 'ð–¹½',
+ '𖹞' => '𖹾',
+ '𖹟' => '𖹿',
+ '𞤀' => '𞤢',
+ 'ðž¤' => '𞤣',
+ '𞤂' => '𞤤',
+ '𞤃' => '𞤥',
+ '𞤄' => '𞤦',
+ '𞤅' => '𞤧',
+ '𞤆' => '𞤨',
+ '𞤇' => '𞤩',
+ '𞤈' => '𞤪',
+ '𞤉' => '𞤫',
+ '𞤊' => '𞤬',
+ '𞤋' => 'ðž¤',
+ '𞤌' => '𞤮',
+ 'ðž¤' => '𞤯',
+ '𞤎' => '𞤰',
+ 'ðž¤' => '𞤱',
+ 'ðž¤' => '𞤲',
+ '𞤑' => '𞤳',
+ '𞤒' => '𞤴',
+ '𞤓' => '𞤵',
+ '𞤔' => '𞤶',
+ '𞤕' => '𞤷',
+ '𞤖' => '𞤸',
+ '𞤗' => '𞤹',
+ '𞤘' => '𞤺',
+ '𞤙' => '𞤻',
+ '𞤚' => '𞤼',
+ '𞤛' => '𞤽',
+ '𞤜' => '𞤾',
+ 'ðž¤' => '𞤿',
+ '𞤞' => '𞥀',
+ '𞤟' => 'ðž¥',
+ '𞤠' => '𞥂',
+ '𞤡' => '𞥃',
+);
diff --git a/dev/plugins/email/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php b/dev/plugins/email/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php
new file mode 100644
index 00000000..2a8f6e73
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php
@@ -0,0 +1,5 @@
+ 'A',
+ 'b' => 'B',
+ 'c' => 'C',
+ 'd' => 'D',
+ 'e' => 'E',
+ 'f' => 'F',
+ 'g' => 'G',
+ 'h' => 'H',
+ 'i' => 'I',
+ 'j' => 'J',
+ 'k' => 'K',
+ 'l' => 'L',
+ 'm' => 'M',
+ 'n' => 'N',
+ 'o' => 'O',
+ 'p' => 'P',
+ 'q' => 'Q',
+ 'r' => 'R',
+ 's' => 'S',
+ 't' => 'T',
+ 'u' => 'U',
+ 'v' => 'V',
+ 'w' => 'W',
+ 'x' => 'X',
+ 'y' => 'Y',
+ 'z' => 'Z',
+ 'µ' => 'Μ',
+ 'à ' => 'À',
+ 'á' => 'Ã',
+ 'â' => 'Â',
+ 'ã' => 'Ã',
+ 'ä' => 'Ä',
+ 'Ã¥' => 'Ã…',
+ 'æ' => 'Æ',
+ 'ç' => 'Ç',
+ 'è' => 'È',
+ 'é' => 'É',
+ 'ê' => 'Ê',
+ 'ë' => 'Ë',
+ 'ì' => 'Ì',
+ 'Ã' => 'Ã',
+ 'î' => 'Î',
+ 'ï' => 'Ã',
+ 'ð' => 'Ã',
+ 'ñ' => 'Ñ',
+ 'ò' => 'Ò',
+ 'ó' => 'Ó',
+ 'ô' => 'Ô',
+ 'õ' => 'Õ',
+ 'ö' => 'Ö',
+ 'ø' => 'Ø',
+ 'ù' => 'Ù',
+ 'ú' => 'Ú',
+ 'û' => 'Û',
+ 'ü' => 'Ü',
+ 'ý' => 'Ã',
+ 'þ' => 'Þ',
+ 'ÿ' => 'Ÿ',
+ 'Ä' => 'Ä€',
+ 'ă' => 'Ă',
+ 'Ä…' => 'Ä„',
+ 'ć' => 'Ć',
+ 'ĉ' => 'Ĉ',
+ 'Ä‹' => 'ÄŠ',
+ 'Ä' => 'ÄŒ',
+ 'Ä' => 'ÄŽ',
+ 'Ä‘' => 'Ä',
+ 'Ä“' => 'Ä’',
+ 'Ä•' => 'Ä”',
+ 'Ä—' => 'Ä–',
+ 'ę' => 'Ę',
+ 'Ä›' => 'Äš',
+ 'Ä' => 'Äœ',
+ 'ÄŸ' => 'Äž',
+ 'Ä¡' => 'Ä ',
+ 'Ä£' => 'Ä¢',
+ 'ĥ' => 'Ĥ',
+ 'ħ' => 'Ħ',
+ 'ĩ' => 'Ĩ',
+ 'ī' => 'Ī',
+ 'Ä' => 'Ĭ',
+ 'į' => 'Į',
+ 'ı' => 'I',
+ 'ij' => 'IJ',
+ 'ĵ' => 'Ĵ',
+ 'ķ' => 'Ķ',
+ 'ĺ' => 'Ĺ',
+ 'ļ' => 'Ļ',
+ 'ľ' => 'Ľ',
+ 'Å€' => 'Ä¿',
+ 'Å‚' => 'Å',
+ 'ń' => 'Ń',
+ 'ņ' => 'Ņ',
+ 'ň' => 'Ň',
+ 'Å‹' => 'ÅŠ',
+ 'Å' => 'ÅŒ',
+ 'Å' => 'ÅŽ',
+ 'Å‘' => 'Å',
+ 'Å“' => 'Å’',
+ 'Å•' => 'Å”',
+ 'Å—' => 'Å–',
+ 'ř' => 'Ř',
+ 'Å›' => 'Åš',
+ 'Å' => 'Åœ',
+ 'ÅŸ' => 'Åž',
+ 'Å¡' => 'Å ',
+ 'Å£' => 'Å¢',
+ 'ť' => 'Ť',
+ 'ŧ' => 'Ŧ',
+ 'ũ' => 'Ũ',
+ 'ū' => 'Ū',
+ 'Å' => 'Ŭ',
+ 'ů' => 'Ů',
+ 'ű' => 'Ű',
+ 'ų' => 'Ų',
+ 'ŵ' => 'Ŵ',
+ 'ŷ' => 'Ŷ',
+ 'ź' => 'Ź',
+ 'ż' => 'Ż',
+ 'ž' => 'Ž',
+ 'Å¿' => 'S',
+ 'ƀ' => 'Ƀ',
+ 'ƃ' => 'Ƃ',
+ 'Æ…' => 'Æ„',
+ 'ƈ' => 'Ƈ',
+ 'ƌ' => 'Ƌ',
+ 'Æ’' => 'Æ‘',
+ 'ƕ' => 'Ƕ',
+ 'ƙ' => 'Ƙ',
+ 'ƚ' => 'Ƚ',
+ 'Æž' => 'È ',
+ 'Æ¡' => 'Æ ',
+ 'Æ£' => 'Æ¢',
+ 'ƥ' => 'Ƥ',
+ 'ƨ' => 'Ƨ',
+ 'Æ' => 'Ƭ',
+ 'ư' => 'Ư',
+ 'ƴ' => 'Ƴ',
+ 'ƶ' => 'Ƶ',
+ 'ƹ' => 'Ƹ',
+ 'ƽ' => 'Ƽ',
+ 'Æ¿' => 'Ç·',
+ 'Ç…' => 'Ç„',
+ 'dž' => 'DŽ',
+ 'Lj' => 'LJ',
+ 'lj' => 'LJ',
+ 'Ç‹' => 'ÇŠ',
+ 'nj' => 'NJ',
+ 'ÇŽ' => 'Ç',
+ 'Ç' => 'Ç',
+ 'Ç’' => 'Ç‘',
+ 'Ç”' => 'Ç“',
+ 'Ç–' => 'Ç•',
+ 'ǘ' => 'Ǘ',
+ 'Çš' => 'Ç™',
+ 'ǜ' => 'Ǜ',
+ 'Ç' => 'ÆŽ',
+ 'ÇŸ' => 'Çž',
+ 'Ç¡' => 'Ç ',
+ 'Ç£' => 'Ç¢',
+ 'ǥ' => 'Ǥ',
+ 'ǧ' => 'Ǧ',
+ 'ǩ' => 'Ǩ',
+ 'ǫ' => 'Ǫ',
+ 'Ç' => 'Ǭ',
+ 'ǯ' => 'Ǯ',
+ 'Dz' => 'DZ',
+ 'dz' => 'DZ',
+ 'ǵ' => 'Ǵ',
+ 'ǹ' => 'Ǹ',
+ 'ǻ' => 'Ǻ',
+ 'ǽ' => 'Ǽ',
+ 'ǿ' => 'Ǿ',
+ 'È' => 'È€',
+ 'ȃ' => 'Ȃ',
+ 'È…' => 'È„',
+ 'ȇ' => 'Ȇ',
+ 'ȉ' => 'Ȉ',
+ 'È‹' => 'ÈŠ',
+ 'È' => 'ÈŒ',
+ 'È' => 'ÈŽ',
+ 'È‘' => 'È',
+ 'È“' => 'È’',
+ 'È•' => 'È”',
+ 'È—' => 'È–',
+ 'ș' => 'Ș',
+ 'È›' => 'Èš',
+ 'È' => 'Èœ',
+ 'ÈŸ' => 'Èž',
+ 'È£' => 'È¢',
+ 'ȥ' => 'Ȥ',
+ 'ȧ' => 'Ȧ',
+ 'ȩ' => 'Ȩ',
+ 'ȫ' => 'Ȫ',
+ 'È' => 'Ȭ',
+ 'ȯ' => 'Ȯ',
+ 'ȱ' => 'Ȱ',
+ 'ȳ' => 'Ȳ',
+ 'ȼ' => 'Ȼ',
+ 'È¿' => 'â±¾',
+ 'ɀ' => 'Ɀ',
+ 'É‚' => 'É',
+ 'ɇ' => 'Ɇ',
+ 'ɉ' => 'Ɉ',
+ 'É‹' => 'ÉŠ',
+ 'É' => 'ÉŒ',
+ 'É' => 'ÉŽ',
+ 'É' => 'Ɐ',
+ 'É‘' => 'â±',
+ 'É’' => 'â±°',
+ 'É“' => 'Æ',
+ 'ɔ' => 'Ɔ',
+ 'ɖ' => 'Ɖ',
+ 'É—' => 'ÆŠ',
+ 'É™' => 'Æ',
+ 'É›' => 'Æ',
+ 'ɜ' => 'Ɜ',
+ 'É ' => 'Æ“',
+ 'ɡ' => 'Ɡ',
+ 'É£' => 'Æ”',
+ 'É¥' => 'êž',
+ 'ɦ' => 'Ɦ',
+ 'ɨ' => 'Ɨ',
+ 'É©' => 'Æ–',
+ 'ɪ' => 'Ɪ',
+ 'É«' => 'â±¢',
+ 'ɬ' => 'êž',
+ 'ɯ' => 'Ɯ',
+ 'ɱ' => 'Ɱ',
+ 'ɲ' => 'Æ',
+ 'ɵ' => 'Ɵ',
+ 'ɽ' => 'Ɽ',
+ 'ʀ' => 'Ʀ',
+ 'ʂ' => 'Ʂ',
+ 'ʃ' => 'Ʃ',
+ 'ʇ' => 'Ʇ',
+ 'ʈ' => 'Ʈ',
+ 'ʉ' => 'Ʉ',
+ 'ʊ' => 'Ʊ',
+ 'ʋ' => 'Ʋ',
+ 'ʌ' => 'Ʌ',
+ 'Ê’' => 'Æ·',
+ 'Ê' => 'êž²',
+ 'Êž' => 'êž°',
+ 'ͅ' => 'Ι',
+ 'ͱ' => 'Ͱ',
+ 'ͳ' => 'Ͳ',
+ 'ͷ' => 'Ͷ',
+ 'ͻ' => 'Ͻ',
+ 'ͼ' => 'Ͼ',
+ 'ͽ' => 'Ͽ',
+ 'ά' => 'Ά',
+ 'Î' => 'Έ',
+ 'ή' => 'Ή',
+ 'ί' => 'Ί',
+ 'α' => 'Α',
+ 'β' => 'Β',
+ 'γ' => 'Γ',
+ 'δ' => 'Δ',
+ 'ε' => 'Ε',
+ 'ζ' => 'Ζ',
+ 'η' => 'Η',
+ 'θ' => 'Θ',
+ 'ι' => 'Ι',
+ 'κ' => 'Κ',
+ 'λ' => 'Λ',
+ 'μ' => 'Μ',
+ 'ν' => 'Î',
+ 'ξ' => 'Ξ',
+ 'ο' => 'Ο',
+ 'Ï€' => 'Î ',
+ 'Ï' => 'Ρ',
+ 'ς' => 'Σ',
+ 'σ' => 'Σ',
+ 'τ' => 'Τ',
+ 'Ï…' => 'Î¥',
+ 'φ' => 'Φ',
+ 'χ' => 'Χ',
+ 'ψ' => 'Ψ',
+ 'ω' => 'Ω',
+ 'ϊ' => 'Ϊ',
+ 'ϋ' => 'Ϋ',
+ 'ό' => 'Ό',
+ 'Ï' => 'ÎŽ',
+ 'ÏŽ' => 'Î',
+ 'Ï' => 'Î’',
+ 'ϑ' => 'Θ',
+ 'ϕ' => 'Φ',
+ 'Ï–' => 'Î ',
+ 'Ï—' => 'Ï',
+ 'ϙ' => 'Ϙ',
+ 'Ï›' => 'Ïš',
+ 'Ï' => 'Ïœ',
+ 'ÏŸ' => 'Ïž',
+ 'Ï¡' => 'Ï ',
+ 'Ï£' => 'Ï¢',
+ 'ϥ' => 'Ϥ',
+ 'ϧ' => 'Ϧ',
+ 'ϩ' => 'Ϩ',
+ 'ϫ' => 'Ϫ',
+ 'Ï' => 'Ϭ',
+ 'ϯ' => 'Ϯ',
+ 'ϰ' => 'Κ',
+ 'ϱ' => 'Ρ',
+ 'ϲ' => 'Ϲ',
+ 'ϳ' => 'Ϳ',
+ 'ϵ' => 'Ε',
+ 'ϸ' => 'Ϸ',
+ 'ϻ' => 'Ϻ',
+ 'а' => 'Ð',
+ 'б' => 'Б',
+ 'в' => 'В',
+ 'г' => 'Г',
+ 'д' => 'Д',
+ 'е' => 'Е',
+ 'ж' => 'Ж',
+ 'з' => 'З',
+ 'и' => 'И',
+ 'й' => 'Й',
+ 'к' => 'К',
+ 'л' => 'Л',
+ 'м' => 'М',
+ 'н' => 'Ð',
+ 'о' => 'О',
+ 'п' => 'П',
+ 'Ñ€' => 'Ð ',
+ 'Ñ' => 'С',
+ 'т' => 'Т',
+ 'у' => 'У',
+ 'ф' => 'Ф',
+ 'Ñ…' => 'Ð¥',
+ 'ц' => 'Ц',
+ 'ч' => 'Ч',
+ 'ш' => 'Ш',
+ 'щ' => 'Щ',
+ 'ъ' => 'Ъ',
+ 'ы' => 'Ы',
+ 'ь' => 'Ь',
+ 'Ñ' => 'Ð',
+ 'ю' => 'Ю',
+ 'Ñ' => 'Я',
+ 'Ñ' => 'Ѐ',
+ 'Ñ‘' => 'Ð',
+ 'ђ' => 'Ђ',
+ 'ѓ' => 'Ѓ',
+ 'є' => 'Є',
+ 'Ñ•' => 'Ð…',
+ 'і' => 'І',
+ 'ї' => 'Ї',
+ 'ј' => 'Ј',
+ 'љ' => 'Љ',
+ 'њ' => 'Њ',
+ 'ћ' => 'Ћ',
+ 'ќ' => 'Ќ',
+ 'Ñ' => 'Ð',
+ 'Ñž' => 'ÐŽ',
+ 'ÑŸ' => 'Ð',
+ 'Ñ¡' => 'Ñ ',
+ 'Ñ£' => 'Ñ¢',
+ 'ѥ' => 'Ѥ',
+ 'ѧ' => 'Ѧ',
+ 'ѩ' => 'Ѩ',
+ 'ѫ' => 'Ѫ',
+ 'Ñ' => 'Ѭ',
+ 'ѯ' => 'Ѯ',
+ 'ѱ' => 'Ѱ',
+ 'ѳ' => 'Ѳ',
+ 'ѵ' => 'Ѵ',
+ 'ѷ' => 'Ѷ',
+ 'ѹ' => 'Ѹ',
+ 'ѻ' => 'Ѻ',
+ 'ѽ' => 'Ѽ',
+ 'ѿ' => 'Ѿ',
+ 'Ò' => 'Ò€',
+ 'Ò‹' => 'ÒŠ',
+ 'Ò' => 'ÒŒ',
+ 'Ò' => 'ÒŽ',
+ 'Ò‘' => 'Ò',
+ 'Ò“' => 'Ò’',
+ 'Ò•' => 'Ò”',
+ 'Ò—' => 'Ò–',
+ 'Ò™' => 'Ò˜',
+ 'Ò›' => 'Òš',
+ 'Ò' => 'Òœ',
+ 'ÒŸ' => 'Òž',
+ 'Ò¡' => 'Ò ',
+ 'Ò£' => 'Ò¢',
+ 'Ò¥' => 'Ò¤',
+ 'Ò§' => 'Ò¦',
+ 'Ò©' => 'Ò¨',
+ 'Ò«' => 'Òª',
+ 'Ò' => 'Ò¬',
+ 'Ò¯' => 'Ò®',
+ 'Ò±' => 'Ò°',
+ 'Ò³' => 'Ò²',
+ 'Òµ' => 'Ò´',
+ 'Ò·' => 'Ò¶',
+ 'Ò¹' => 'Ò¸',
+ 'Ò»' => 'Òº',
+ 'Ò½' => 'Ò¼',
+ 'Ò¿' => 'Ò¾',
+ 'Ó‚' => 'Ó',
+ 'Ó„' => 'Óƒ',
+ 'Ó†' => 'Ó…',
+ 'Óˆ' => 'Ó‡',
+ 'ÓŠ' => 'Ó‰',
+ 'ӌ' => 'Ӌ',
+ 'ÓŽ' => 'Ó',
+ 'Ó' => 'Ó€',
+ 'Ó‘' => 'Ó',
+ 'Ó“' => 'Ó’',
+ 'Ó•' => 'Ó”',
+ 'Ó—' => 'Ó–',
+ 'Ó™' => 'Ó˜',
+ 'Ó›' => 'Óš',
+ 'Ó' => 'Óœ',
+ 'ÓŸ' => 'Óž',
+ 'Ó¡' => 'Ó ',
+ 'Ó£' => 'Ó¢',
+ 'Ó¥' => 'Ó¤',
+ 'Ó§' => 'Ó¦',
+ 'Ó©' => 'Ó¨',
+ 'Ó«' => 'Óª',
+ 'Ó' => 'Ó¬',
+ 'Ó¯' => 'Ó®',
+ 'Ó±' => 'Ó°',
+ 'Ó³' => 'Ó²',
+ 'Óµ' => 'Ó´',
+ 'Ó·' => 'Ó¶',
+ 'Ó¹' => 'Ó¸',
+ 'Ó»' => 'Óº',
+ 'Ó½' => 'Ó¼',
+ 'Ó¿' => 'Ó¾',
+ 'Ô' => 'Ô€',
+ 'Ôƒ' => 'Ô‚',
+ 'Ô…' => 'Ô„',
+ 'Ô‡' => 'Ô†',
+ 'Ô‰' => 'Ôˆ',
+ 'Ô‹' => 'ÔŠ',
+ 'Ô' => 'ÔŒ',
+ 'Ô' => 'ÔŽ',
+ 'Ô‘' => 'Ô',
+ 'Ô“' => 'Ô’',
+ 'Ô•' => 'Ô”',
+ 'Ô—' => 'Ô–',
+ 'Ô™' => 'Ô˜',
+ 'Ô›' => 'Ôš',
+ 'Ô' => 'Ôœ',
+ 'ÔŸ' => 'Ôž',
+ 'Ô¡' => 'Ô ',
+ 'Ô£' => 'Ô¢',
+ 'Ô¥' => 'Ô¤',
+ 'Ô§' => 'Ô¦',
+ 'Ô©' => 'Ô¨',
+ 'Ô«' => 'Ôª',
+ 'Ô' => 'Ô¬',
+ 'Ô¯' => 'Ô®',
+ 'Õ¡' => 'Ô±',
+ 'Õ¢' => 'Ô²',
+ 'Õ£' => 'Ô³',
+ 'Õ¤' => 'Ô´',
+ 'Õ¥' => 'Ôµ',
+ 'Õ¦' => 'Ô¶',
+ 'Õ§' => 'Ô·',
+ 'Õ¨' => 'Ô¸',
+ 'Õ©' => 'Ô¹',
+ 'Õª' => 'Ôº',
+ 'Õ«' => 'Ô»',
+ 'Õ¬' => 'Ô¼',
+ 'Õ' => 'Ô½',
+ 'Õ®' => 'Ô¾',
+ 'Õ¯' => 'Ô¿',
+ 'Õ°' => 'Õ€',
+ 'Õ±' => 'Õ',
+ 'Õ²' => 'Õ‚',
+ 'Õ³' => 'Õƒ',
+ 'Õ´' => 'Õ„',
+ 'Õµ' => 'Õ…',
+ 'Õ¶' => 'Õ†',
+ 'Õ·' => 'Õ‡',
+ 'Õ¸' => 'Õˆ',
+ 'Õ¹' => 'Õ‰',
+ 'Õº' => 'ÕŠ',
+ 'Õ»' => 'Õ‹',
+ 'ռ' => 'Ռ',
+ 'Õ½' => 'Õ',
+ 'Õ¾' => 'ÕŽ',
+ 'Õ¿' => 'Õ',
+ 'Ö€' => 'Õ',
+ 'Ö' => 'Õ‘',
+ 'Ö‚' => 'Õ’',
+ 'Öƒ' => 'Õ“',
+ 'Ö„' => 'Õ”',
+ 'Ö…' => 'Õ•',
+ 'Ö†' => 'Õ–',
+ 'áƒ' => 'á²',
+ 'ბ' => 'Ბ',
+ 'გ' => 'Გ',
+ 'დ' => 'Დ',
+ 'ე' => 'Ე',
+ 'ვ' => 'Ვ',
+ 'ზ' => 'Ზ',
+ 'თ' => 'Თ',
+ 'ი' => 'Ი',
+ 'კ' => 'Კ',
+ 'ლ' => 'Ლ',
+ 'მ' => 'Მ',
+ 'ნ' => 'Ნ',
+ 'áƒ' => 'á²',
+ 'პ' => 'Პ',
+ 'ჟ' => 'Ჟ',
+ 'რ' => 'Რ',
+ 'ს' => 'Ს',
+ 'ტ' => 'Ტ',
+ 'უ' => 'Უ',
+ 'ფ' => 'Ფ',
+ 'ქ' => 'Ქ',
+ 'ღ' => 'Ღ',
+ 'ყ' => 'Ყ',
+ 'შ' => 'Შ',
+ 'ჩ' => 'Ჩ',
+ 'ც' => 'Ც',
+ 'ძ' => 'Ძ',
+ 'წ' => 'Წ',
+ 'áƒ' => 'á²',
+ 'ხ' => 'Ხ',
+ 'ჯ' => 'Ჯ',
+ 'ჰ' => 'Ჰ',
+ 'ჱ' => 'Ჱ',
+ 'ჲ' => 'Ჲ',
+ 'ჳ' => 'Ჳ',
+ 'ჴ' => 'Ჴ',
+ 'ჵ' => 'Ჵ',
+ 'ჶ' => 'Ჶ',
+ 'ჷ' => 'Ჷ',
+ 'ჸ' => 'Ჸ',
+ 'ჹ' => 'Ჹ',
+ 'ჺ' => 'Ჺ',
+ 'ჽ' => 'Ჽ',
+ 'ჾ' => 'Ჾ',
+ 'ჿ' => 'Ჿ',
+ 'á¸' => 'á°',
+ 'á¹' => 'á±',
+ 'áº' => 'á²',
+ 'á»' => 'á³',
+ 'á¼' => 'á´',
+ 'á½' => 'áµ',
+ 'á²€' => 'Ð’',
+ 'á²' => 'Д',
+ 'ᲂ' => 'О',
+ 'ᲃ' => 'С',
+ 'ᲄ' => 'Т',
+ 'ᲅ' => 'Т',
+ 'ᲆ' => 'Ъ',
+ 'ᲇ' => 'Ѣ',
+ 'ᲈ' => 'Ꙋ',
+ 'áµ¹' => 'ê½',
+ 'áµ½' => 'â±£',
+ 'ᶎ' => 'Ᶎ',
+ 'á¸' => 'Ḁ',
+ 'ḃ' => 'Ḃ',
+ 'ḅ' => 'Ḅ',
+ 'ḇ' => 'Ḇ',
+ 'ḉ' => 'Ḉ',
+ 'ḋ' => 'Ḋ',
+ 'á¸' => 'Ḍ',
+ 'á¸' => 'Ḏ',
+ 'ḑ' => 'á¸',
+ 'ḓ' => 'Ḓ',
+ 'ḕ' => 'Ḕ',
+ 'ḗ' => 'Ḗ',
+ 'ḙ' => 'Ḙ',
+ 'ḛ' => 'Ḛ',
+ 'á¸' => 'Ḝ',
+ 'ḟ' => 'Ḟ',
+ 'ḡ' => 'Ḡ',
+ 'ḣ' => 'Ḣ',
+ 'ḥ' => 'Ḥ',
+ 'ḧ' => 'Ḧ',
+ 'ḩ' => 'Ḩ',
+ 'ḫ' => 'Ḫ',
+ 'á¸' => 'Ḭ',
+ 'ḯ' => 'Ḯ',
+ 'ḱ' => 'Ḱ',
+ 'ḳ' => 'Ḳ',
+ 'ḵ' => 'Ḵ',
+ 'ḷ' => 'Ḷ',
+ 'ḹ' => 'Ḹ',
+ 'ḻ' => 'Ḻ',
+ 'ḽ' => 'Ḽ',
+ 'ḿ' => 'Ḿ',
+ 'á¹' => 'á¹€',
+ 'ṃ' => 'Ṃ',
+ 'ṅ' => 'Ṅ',
+ 'ṇ' => 'Ṇ',
+ 'ṉ' => 'Ṉ',
+ 'ṋ' => 'Ṋ',
+ 'á¹' => 'Ṍ',
+ 'á¹' => 'Ṏ',
+ 'ṑ' => 'á¹',
+ 'ṓ' => 'Ṓ',
+ 'ṕ' => 'Ṕ',
+ 'á¹—' => 'á¹–',
+ 'ṙ' => 'Ṙ',
+ 'ṛ' => 'Ṛ',
+ 'á¹' => 'Ṝ',
+ 'ṟ' => 'Ṟ',
+ 'ṡ' => 'Ṡ',
+ 'á¹£' => 'á¹¢',
+ 'ṥ' => 'Ṥ',
+ 'ṧ' => 'Ṧ',
+ 'ṩ' => 'Ṩ',
+ 'ṫ' => 'Ṫ',
+ 'á¹' => 'Ṭ',
+ 'ṯ' => 'Ṯ',
+ 'á¹±' => 'á¹°',
+ 'á¹³' => 'á¹²',
+ 'á¹µ' => 'á¹´',
+ 'ṷ' => 'Ṷ',
+ 'ṹ' => 'Ṹ',
+ 'ṻ' => 'Ṻ',
+ 'á¹½' => 'á¹¼',
+ 'ṿ' => 'Ṿ',
+ 'áº' => 'Ẁ',
+ 'ẃ' => 'Ẃ',
+ 'ẅ' => 'Ẅ',
+ 'ẇ' => 'Ẇ',
+ 'ẉ' => 'Ẉ',
+ 'ẋ' => 'Ẋ',
+ 'áº' => 'Ẍ',
+ 'áº' => 'Ẏ',
+ 'ẑ' => 'áº',
+ 'ẓ' => 'Ẓ',
+ 'ẕ' => 'Ẕ',
+ 'ẛ' => 'Ṡ',
+ 'ạ' => 'Ạ',
+ 'ả' => 'Ả',
+ 'ấ' => 'Ấ',
+ 'ầ' => 'Ầ',
+ 'ẩ' => 'Ẩ',
+ 'ẫ' => 'Ẫ',
+ 'áº' => 'Ậ',
+ 'ắ' => 'Ắ',
+ 'ằ' => 'Ằ',
+ 'ẳ' => 'Ẳ',
+ 'ẵ' => 'Ẵ',
+ 'ặ' => 'Ặ',
+ 'ẹ' => 'Ẹ',
+ 'ẻ' => 'Ẻ',
+ 'ẽ' => 'Ẽ',
+ 'ế' => 'Ế',
+ 'á»' => 'Ề',
+ 'ể' => 'Ể',
+ 'ễ' => 'Ễ',
+ 'ệ' => 'Ệ',
+ 'ỉ' => 'Ỉ',
+ 'ị' => 'Ị',
+ 'á»' => 'Ọ',
+ 'á»' => 'Ỏ',
+ 'ố' => 'á»',
+ 'ồ' => 'Ồ',
+ 'ổ' => 'Ổ',
+ 'á»—' => 'á»–',
+ 'ộ' => 'Ộ',
+ 'ớ' => 'Ớ',
+ 'á»' => 'Ờ',
+ 'ở' => 'Ở',
+ 'ỡ' => 'Ỡ',
+ 'ợ' => 'Ợ',
+ 'ụ' => 'Ụ',
+ 'ủ' => 'Ủ',
+ 'ứ' => 'Ứ',
+ 'ừ' => 'Ừ',
+ 'á»' => 'Ử',
+ 'ữ' => 'Ữ',
+ 'á»±' => 'á»°',
+ 'ỳ' => 'Ỳ',
+ 'ỵ' => 'Ỵ',
+ 'ỷ' => 'Ỷ',
+ 'ỹ' => 'Ỹ',
+ 'ỻ' => 'Ỻ',
+ 'ỽ' => 'Ỽ',
+ 'ỿ' => 'Ỿ',
+ 'ἀ' => 'Ἀ',
+ 'á¼' => 'Ἁ',
+ 'ἂ' => 'Ἂ',
+ 'ἃ' => 'Ἃ',
+ 'ἄ' => 'Ἄ',
+ 'á¼…' => 'á¼',
+ 'ἆ' => 'Ἆ',
+ 'ἇ' => 'á¼',
+ 'á¼' => 'Ἐ',
+ 'ἑ' => 'Ἑ',
+ 'ἒ' => 'Ἒ',
+ 'ἓ' => 'Ἓ',
+ 'ἔ' => 'Ἔ',
+ 'ἕ' => 'á¼',
+ 'ἠ' => 'Ἠ',
+ 'ἡ' => 'Ἡ',
+ 'ἢ' => 'Ἢ',
+ 'ἣ' => 'Ἣ',
+ 'ἤ' => 'Ἤ',
+ 'á¼¥' => 'á¼',
+ 'ἦ' => 'Ἦ',
+ 'ἧ' => 'Ἧ',
+ 'ἰ' => 'Ἰ',
+ 'á¼±' => 'á¼¹',
+ 'ἲ' => 'Ἲ',
+ 'á¼³' => 'á¼»',
+ 'á¼´' => 'á¼¼',
+ 'á¼µ' => 'á¼½',
+ 'ἶ' => 'Ἶ',
+ 'ἷ' => 'Ἷ',
+ 'ὀ' => 'Ὀ',
+ 'á½' => 'Ὁ',
+ 'ὂ' => 'Ὂ',
+ 'ὃ' => 'Ὃ',
+ 'ὄ' => 'Ὄ',
+ 'á½…' => 'á½',
+ 'ὑ' => 'Ὑ',
+ 'ὓ' => 'Ὓ',
+ 'ὕ' => 'á½',
+ 'ὗ' => 'Ὗ',
+ 'ὠ' => 'Ὠ',
+ 'ὡ' => 'Ὡ',
+ 'ὢ' => 'Ὢ',
+ 'ὣ' => 'Ὣ',
+ 'ὤ' => 'Ὤ',
+ 'á½¥' => 'á½',
+ 'ὦ' => 'Ὦ',
+ 'ὧ' => 'Ὧ',
+ 'ὰ' => 'Ὰ',
+ 'á½±' => 'á¾»',
+ 'ὲ' => 'Ὲ',
+ 'έ' => 'Έ',
+ 'á½´' => 'á¿Š',
+ 'á½µ' => 'á¿‹',
+ 'ὶ' => 'Ὶ',
+ 'á½·' => 'á¿›',
+ 'ὸ' => 'Ὸ',
+ 'ό' => 'Ό',
+ 'ὺ' => 'Ὺ',
+ 'á½»' => 'á¿«',
+ 'ὼ' => 'Ὼ',
+ 'á½½' => 'á¿»',
+ 'ᾀ' => 'ἈΙ',
+ 'á¾' => 'ἉΙ',
+ 'ᾂ' => 'ἊΙ',
+ 'ᾃ' => 'ἋΙ',
+ 'ᾄ' => 'ἌΙ',
+ 'á¾…' => 'á¼Î™',
+ 'ᾆ' => 'ἎΙ',
+ 'ᾇ' => 'á¼Î™',
+ 'á¾' => 'ἨΙ',
+ 'ᾑ' => 'ἩΙ',
+ 'ᾒ' => 'ἪΙ',
+ 'ᾓ' => 'ἫΙ',
+ 'ᾔ' => 'ἬΙ',
+ 'ᾕ' => 'á¼Î™',
+ 'ᾖ' => 'ἮΙ',
+ 'ᾗ' => 'ἯΙ',
+ 'ᾠ' => 'ὨΙ',
+ 'ᾡ' => 'ὩΙ',
+ 'ᾢ' => 'ὪΙ',
+ 'ᾣ' => 'ὫΙ',
+ 'ᾤ' => 'ὬΙ',
+ 'á¾¥' => 'á½Î™',
+ 'ᾦ' => 'ὮΙ',
+ 'ᾧ' => 'ὯΙ',
+ 'ᾰ' => 'Ᾰ',
+ 'á¾±' => 'á¾¹',
+ 'ᾳ' => 'ΑΙ',
+ 'ι' => 'Ι',
+ 'ῃ' => 'ΗΙ',
+ 'á¿' => 'Ῐ',
+ 'á¿‘' => 'á¿™',
+ 'ῠ' => 'Ῠ',
+ 'á¿¡' => 'á¿©',
+ 'ῥ' => 'Ῥ',
+ 'ῳ' => 'ΩΙ',
+ 'ⅎ' => 'Ⅎ',
+ 'â…°' => 'â… ',
+ 'â…±' => 'â…¡',
+ 'â…²' => 'â…¢',
+ 'â…³' => 'â…£',
+ 'â…´' => 'â…¤',
+ 'â…µ' => 'â…¥',
+ 'â…¶' => 'â…¦',
+ 'â…·' => 'â…§',
+ 'â…¸' => 'â…¨',
+ 'â…¹' => 'â…©',
+ 'â…º' => 'â…ª',
+ 'â…»' => 'â…«',
+ 'â…¼' => 'â…¬',
+ 'â…½' => 'â…',
+ 'â…¾' => 'â…®',
+ 'â…¿' => 'â…¯',
+ 'ↄ' => 'Ↄ',
+ 'â“' => 'â’¶',
+ 'â“‘' => 'â’·',
+ 'â“’' => 'â’¸',
+ 'â““' => 'â’¹',
+ 'â“”' => 'â’º',
+ 'â“•' => 'â’»',
+ 'â“–' => 'â’¼',
+ 'â“—' => 'â’½',
+ 'ⓘ' => 'Ⓘ',
+ 'â“™' => 'â’¿',
+ 'â“š' => 'â“€',
+ 'â“›' => 'â“',
+ 'ⓜ' => 'Ⓜ',
+ 'â“' => 'Ⓝ',
+ 'â“ž' => 'â“„',
+ 'â“Ÿ' => 'â“…',
+ 'ⓠ' => 'Ⓠ',
+ 'ⓡ' => 'Ⓡ',
+ 'ⓢ' => 'Ⓢ',
+ 'ⓣ' => 'Ⓣ',
+ 'ⓤ' => 'Ⓤ',
+ 'â“¥' => 'â“‹',
+ 'ⓦ' => 'Ⓦ',
+ 'ⓧ' => 'â“',
+ 'ⓨ' => 'Ⓨ',
+ 'â“©' => 'â“',
+ 'â°°' => 'â°€',
+ 'â°±' => 'â°',
+ 'â°²' => 'â°‚',
+ 'â°³' => 'â°ƒ',
+ 'â°´' => 'â°„',
+ 'â°µ' => 'â°…',
+ 'â°¶' => 'â°†',
+ 'â°·' => 'â°‡',
+ 'â°¸' => 'â°ˆ',
+ 'â°¹' => 'â°‰',
+ 'â°º' => 'â°Š',
+ 'â°»' => 'â°‹',
+ 'ⰼ' => 'Ⰼ',
+ 'â°½' => 'â°',
+ 'â°¾' => 'â°Ž',
+ 'â°¿' => 'â°',
+ 'â±€' => 'â°',
+ 'â±' => 'â°‘',
+ 'ⱂ' => 'Ⱂ',
+ 'ⱃ' => 'Ⱃ',
+ 'ⱄ' => 'Ⱄ',
+ 'â±…' => 'â°•',
+ 'ⱆ' => 'Ⱆ',
+ 'ⱇ' => 'Ⱇ',
+ 'ⱈ' => 'Ⱈ',
+ 'ⱉ' => 'Ⱉ',
+ 'ⱊ' => 'Ⱊ',
+ 'ⱋ' => 'Ⱋ',
+ 'ⱌ' => 'Ⱌ',
+ 'â±' => 'â°',
+ 'ⱎ' => 'Ⱎ',
+ 'â±' => 'â°Ÿ',
+ 'â±' => 'â° ',
+ 'ⱑ' => 'Ⱑ',
+ 'â±’' => 'â°¢',
+ 'ⱓ' => 'Ⱓ',
+ 'â±”' => 'â°¤',
+ 'ⱕ' => 'Ⱕ',
+ 'â±–' => 'â°¦',
+ 'â±—' => 'â°§',
+ 'ⱘ' => 'Ⱘ',
+ 'â±™' => 'â°©',
+ 'ⱚ' => 'Ⱚ',
+ 'â±›' => 'â°«',
+ 'ⱜ' => 'Ⱜ',
+ 'â±' => 'â°',
+ 'ⱞ' => 'Ⱞ',
+ 'ⱡ' => 'Ⱡ',
+ 'ⱥ' => 'Ⱥ',
+ 'ⱦ' => 'Ⱦ',
+ 'ⱨ' => 'Ⱨ',
+ 'ⱪ' => 'Ⱪ',
+ 'ⱬ' => 'Ⱬ',
+ 'â±³' => 'â±²',
+ 'ⱶ' => 'Ⱶ',
+ 'â²' => 'â²€',
+ 'ⲃ' => 'Ⲃ',
+ 'ⲅ' => 'Ⲅ',
+ 'ⲇ' => 'Ⲇ',
+ 'ⲉ' => 'Ⲉ',
+ 'ⲋ' => 'Ⲋ',
+ 'â²' => 'Ⲍ',
+ 'â²' => 'Ⲏ',
+ 'ⲑ' => 'â²',
+ 'ⲓ' => 'Ⲓ',
+ 'ⲕ' => 'Ⲕ',
+ 'â²—' => 'â²–',
+ 'ⲙ' => 'Ⲙ',
+ 'ⲛ' => 'Ⲛ',
+ 'â²' => 'Ⲝ',
+ 'ⲟ' => 'Ⲟ',
+ 'ⲡ' => 'Ⲡ',
+ 'â²£' => 'â²¢',
+ 'ⲥ' => 'Ⲥ',
+ 'ⲧ' => 'Ⲧ',
+ 'ⲩ' => 'Ⲩ',
+ 'ⲫ' => 'Ⲫ',
+ 'â²' => 'Ⲭ',
+ 'ⲯ' => 'Ⲯ',
+ 'â²±' => 'â²°',
+ 'â²³' => 'â²²',
+ 'â²µ' => 'â²´',
+ 'ⲷ' => 'Ⲷ',
+ 'ⲹ' => 'Ⲹ',
+ 'ⲻ' => 'Ⲻ',
+ 'â²½' => 'â²¼',
+ 'ⲿ' => 'Ⲿ',
+ 'â³' => 'â³€',
+ 'ⳃ' => 'Ⳃ',
+ 'ⳅ' => 'Ⳅ',
+ 'ⳇ' => 'Ⳇ',
+ 'ⳉ' => 'Ⳉ',
+ 'ⳋ' => 'Ⳋ',
+ 'â³' => 'Ⳍ',
+ 'â³' => 'Ⳏ',
+ 'ⳑ' => 'â³',
+ 'ⳓ' => 'Ⳓ',
+ 'ⳕ' => 'Ⳕ',
+ 'â³—' => 'â³–',
+ 'ⳙ' => 'Ⳙ',
+ 'ⳛ' => 'Ⳛ',
+ 'â³' => 'Ⳝ',
+ 'ⳟ' => 'Ⳟ',
+ 'ⳡ' => 'Ⳡ',
+ 'â³£' => 'â³¢',
+ 'ⳬ' => 'Ⳬ',
+ 'â³®' => 'â³',
+ 'â³³' => 'â³²',
+ 'â´€' => 'á‚ ',
+ 'â´' => 'á‚¡',
+ 'â´‚' => 'á‚¢',
+ 'â´ƒ' => 'á‚£',
+ 'ⴄ' => 'Ⴄ',
+ 'â´…' => 'á‚¥',
+ 'ⴆ' => 'Ⴆ',
+ 'ⴇ' => 'Ⴇ',
+ 'ⴈ' => 'Ⴈ',
+ 'â´‰' => 'á‚©',
+ 'ⴊ' => 'Ⴊ',
+ 'â´‹' => 'á‚«',
+ 'ⴌ' => 'Ⴌ',
+ 'â´' => 'á‚',
+ 'â´Ž' => 'á‚®',
+ 'â´' => 'Ⴏ',
+ 'â´' => 'á‚°',
+ 'ⴑ' => 'Ⴑ',
+ 'ⴒ' => 'Ⴒ',
+ 'ⴓ' => 'Ⴓ',
+ 'â´”' => 'á‚´',
+ 'ⴕ' => 'Ⴕ',
+ 'ⴖ' => 'Ⴖ',
+ 'â´—' => 'á‚·',
+ 'ⴘ' => 'Ⴘ',
+ 'ⴙ' => 'Ⴙ',
+ 'ⴚ' => 'Ⴚ',
+ 'â´›' => 'á‚»',
+ 'ⴜ' => 'Ⴜ',
+ 'â´' => 'Ⴝ',
+ 'ⴞ' => 'Ⴞ',
+ 'â´Ÿ' => 'á‚¿',
+ 'ⴠ' => 'Ⴠ',
+ 'â´¡' => 'áƒ',
+ 'ⴢ' => 'Ⴢ',
+ 'ⴣ' => 'Ⴣ',
+ 'ⴤ' => 'Ⴤ',
+ 'ⴥ' => 'Ⴥ',
+ 'ⴧ' => 'Ⴧ',
+ 'â´' => 'áƒ',
+ 'ê™' => 'Ꙁ',
+ 'ꙃ' => 'Ꙃ',
+ 'ꙅ' => 'Ꙅ',
+ 'ꙇ' => 'Ꙇ',
+ 'ꙉ' => 'Ꙉ',
+ 'ꙋ' => 'Ꙋ',
+ 'ê™' => 'Ꙍ',
+ 'ê™' => 'Ꙏ',
+ 'ꙑ' => 'ê™',
+ 'ꙓ' => 'Ꙓ',
+ 'ꙕ' => 'Ꙕ',
+ 'ê™—' => 'ê™–',
+ 'ꙙ' => 'Ꙙ',
+ 'ꙛ' => 'Ꙛ',
+ 'ê™' => 'Ꙝ',
+ 'ꙟ' => 'Ꙟ',
+ 'ꙡ' => 'ê™ ',
+ 'ꙣ' => 'Ꙣ',
+ 'ꙥ' => 'Ꙥ',
+ 'ꙧ' => 'Ꙧ',
+ 'ꙩ' => 'Ꙩ',
+ 'ꙫ' => 'Ꙫ',
+ 'ê™' => 'Ꙭ',
+ 'êš' => 'Ꚁ',
+ 'ꚃ' => 'Ꚃ',
+ 'êš…' => 'êš„',
+ 'ꚇ' => 'Ꚇ',
+ 'ꚉ' => 'Ꚉ',
+ 'ꚋ' => 'Ꚋ',
+ 'êš' => 'Ꚍ',
+ 'êš' => 'Ꚏ',
+ 'êš‘' => 'êš',
+ 'êš“' => 'êš’',
+ 'êš•' => 'êš”',
+ 'êš—' => 'êš–',
+ 'ꚙ' => 'Ꚙ',
+ 'êš›' => 'êšš',
+ 'ꜣ' => 'Ꜣ',
+ 'ꜥ' => 'Ꜥ',
+ 'ꜧ' => 'Ꜧ',
+ 'ꜩ' => 'Ꜩ',
+ 'ꜫ' => 'Ꜫ',
+ 'êœ' => 'Ꜭ',
+ 'ꜯ' => 'Ꜯ',
+ 'ꜳ' => 'Ꜳ',
+ 'ꜵ' => 'Ꜵ',
+ 'ꜷ' => 'Ꜷ',
+ 'ꜹ' => 'Ꜹ',
+ 'ꜻ' => 'Ꜻ',
+ 'ꜽ' => 'Ꜽ',
+ 'ꜿ' => 'Ꜿ',
+ 'ê' => 'ê€',
+ 'êƒ' => 'ê‚',
+ 'ê…' => 'ê„',
+ 'ê‡' => 'ê†',
+ 'ê‰' => 'êˆ',
+ 'ê‹' => 'êŠ',
+ 'ê' => 'êŒ',
+ 'ê' => 'êŽ',
+ 'ê‘' => 'ê',
+ 'ê“' => 'ê’',
+ 'ê•' => 'ê”',
+ 'ê—' => 'ê–',
+ 'ê™' => 'ê˜',
+ 'ê›' => 'êš',
+ 'ê' => 'êœ',
+ 'êŸ' => 'êž',
+ 'ê¡' => 'ê ',
+ 'ê£' => 'ê¢',
+ 'ê¥' => 'ê¤',
+ 'ê§' => 'ê¦',
+ 'ê©' => 'ê¨',
+ 'ê«' => 'êª',
+ 'ê' => 'ê¬',
+ 'ê¯' => 'ê®',
+ 'êº' => 'ê¹',
+ 'ê¼' => 'ê»',
+ 'ê¿' => 'ê¾',
+ 'êž' => 'Ꞁ',
+ 'ꞃ' => 'Ꞃ',
+ 'êž…' => 'êž„',
+ 'ꞇ' => 'Ꞇ',
+ 'ꞌ' => 'Ꞌ',
+ 'êž‘' => 'êž',
+ 'êž“' => 'êž’',
+ 'ꞔ' => 'Ꞔ',
+ 'êž—' => 'êž–',
+ 'ꞙ' => 'Ꞙ',
+ 'êž›' => 'êžš',
+ 'êž' => 'êžœ',
+ 'ꞟ' => 'Ꞟ',
+ 'êž¡' => 'êž ',
+ 'ꞣ' => 'Ꞣ',
+ 'ꞥ' => 'Ꞥ',
+ 'ꞧ' => 'Ꞧ',
+ 'ꞩ' => 'Ꞩ',
+ 'êžµ' => 'êž´',
+ 'ꞷ' => 'Ꞷ',
+ 'ꞹ' => 'Ꞹ',
+ 'ꞻ' => 'Ꞻ',
+ 'êž½' => 'êž¼',
+ 'êž¿' => 'êž¾',
+ 'ꟃ' => 'Ꟃ',
+ 'ꟈ' => 'Ꟈ',
+ 'ꟊ' => 'Ꟊ',
+ 'ꟶ' => 'Ꟶ',
+ 'ê“' => 'êž³',
+ 'ê°' => 'Ꭰ',
+ 'ê±' => 'Ꭱ',
+ 'ê²' => 'Ꭲ',
+ 'ê³' => 'Ꭳ',
+ 'ê´' => 'Ꭴ',
+ 'êµ' => 'Ꭵ',
+ 'ê¶' => 'Ꭶ',
+ 'ê·' => 'Ꭷ',
+ 'ê¸' => 'Ꭸ',
+ 'ê¹' => 'Ꭹ',
+ 'êº' => 'Ꭺ',
+ 'ê»' => 'Ꭻ',
+ 'ê¼' => 'Ꭼ',
+ 'ê½' => 'áŽ',
+ 'ê¾' => 'Ꭾ',
+ 'ê¿' => 'Ꭿ',
+ 'ꮀ' => 'Ꮀ',
+ 'ê®' => 'Ꮁ',
+ 'ꮂ' => 'Ꮂ',
+ 'ꮃ' => 'Ꮃ',
+ 'ꮄ' => 'Ꮄ',
+ 'ꮅ' => 'Ꮅ',
+ 'ꮆ' => 'Ꮆ',
+ 'ꮇ' => 'Ꮇ',
+ 'ꮈ' => 'Ꮈ',
+ 'ꮉ' => 'Ꮉ',
+ 'ꮊ' => 'Ꮊ',
+ 'ꮋ' => 'Ꮋ',
+ 'ꮌ' => 'Ꮌ',
+ 'ê®' => 'Ꮍ',
+ 'ꮎ' => 'Ꮎ',
+ 'ê®' => 'Ꮏ',
+ 'ê®' => 'á€',
+ 'ꮑ' => 'á',
+ 'ê®’' => 'á‚',
+ 'ꮓ' => 'áƒ',
+ 'ê®”' => 'á„',
+ 'ꮕ' => 'á…',
+ 'ê®–' => 'á†',
+ 'ê®—' => 'á‡',
+ 'ꮘ' => 'áˆ',
+ 'ê®™' => 'á‰',
+ 'ꮚ' => 'áŠ',
+ 'ê®›' => 'á‹',
+ 'ꮜ' => 'áŒ',
+ 'ê®' => 'á',
+ 'ꮞ' => 'áŽ',
+ 'ꮟ' => 'á',
+ 'ê® ' => 'á',
+ 'ꮡ' => 'á‘',
+ 'ꮢ' => 'á’',
+ 'ꮣ' => 'á“',
+ 'ꮤ' => 'á”',
+ 'ꮥ' => 'á•',
+ 'ꮦ' => 'á–',
+ 'ꮧ' => 'á—',
+ 'ꮨ' => 'á˜',
+ 'ꮩ' => 'á™',
+ 'ꮪ' => 'áš',
+ 'ꮫ' => 'á›',
+ 'ꮬ' => 'áœ',
+ 'ê®' => 'á',
+ 'ê®®' => 'áž',
+ 'ꮯ' => 'áŸ',
+ 'ê®°' => 'á ',
+ 'ê®±' => 'á¡',
+ 'ꮲ' => 'á¢',
+ 'ꮳ' => 'á£',
+ 'ê®´' => 'á¤',
+ 'ꮵ' => 'á¥',
+ 'ꮶ' => 'á¦',
+ 'ê®·' => 'á§',
+ 'ꮸ' => 'á¨',
+ 'ꮹ' => 'á©',
+ 'ꮺ' => 'áª',
+ 'ê®»' => 'á«',
+ 'ꮼ' => 'á¬',
+ 'ꮽ' => 'á',
+ 'ꮾ' => 'á®',
+ 'ꮿ' => 'á¯',
+ 'ï½' => 'A',
+ 'b' => 'B',
+ 'c' => 'C',
+ 'd' => 'D',
+ 'ï½…' => 'ï¼¥',
+ 'f' => 'F',
+ 'g' => 'G',
+ 'h' => 'H',
+ 'i' => 'I',
+ 'j' => 'J',
+ 'k' => 'K',
+ 'l' => 'L',
+ 'ï½' => 'ï¼',
+ 'n' => 'N',
+ 'ï½' => 'O',
+ 'ï½' => 'ï¼°',
+ 'q' => 'Q',
+ 'ï½’' => 'ï¼²',
+ 's' => 'S',
+ 'ï½”' => 'ï¼´',
+ 'u' => 'U',
+ 'v' => 'V',
+ 'ï½—' => 'ï¼·',
+ 'x' => 'X',
+ 'ï½™' => 'ï¼¹',
+ 'z' => 'Z',
+ 'ð¨' => 'ð€',
+ 'ð©' => 'ð',
+ 'ðª' => 'ð‚',
+ 'ð«' => 'ðƒ',
+ 'ð¬' => 'ð„',
+ 'ð' => 'ð…',
+ 'ð®' => 'ð†',
+ 'ð¯' => 'ð‡',
+ 'ð°' => 'ðˆ',
+ 'ð±' => 'ð‰',
+ 'ð²' => 'ðŠ',
+ 'ð³' => 'ð‹',
+ 'ð´' => 'ðŒ',
+ 'ðµ' => 'ð',
+ 'ð¶' => 'ðŽ',
+ 'ð·' => 'ð',
+ 'ð¸' => 'ð',
+ 'ð¹' => 'ð‘',
+ 'ðº' => 'ð’',
+ 'ð»' => 'ð“',
+ 'ð¼' => 'ð”',
+ 'ð½' => 'ð•',
+ 'ð¾' => 'ð–',
+ 'ð¿' => 'ð—',
+ 'ð‘€' => 'ð˜',
+ 'ð‘' => 'ð™',
+ 'ð‘‚' => 'ðš',
+ 'ð‘ƒ' => 'ð›',
+ 'ð‘„' => 'ðœ',
+ 'ð‘…' => 'ð',
+ 'ð‘†' => 'ðž',
+ 'ð‘‡' => 'ðŸ',
+ 'ð‘ˆ' => 'ð ',
+ 'ð‘‰' => 'ð¡',
+ 'ð‘Š' => 'ð¢',
+ 'ð‘‹' => 'ð£',
+ 'ð‘Œ' => 'ð¤',
+ 'ð‘' => 'ð¥',
+ 'ð‘Ž' => 'ð¦',
+ 'ð‘' => 'ð§',
+ 'ð“˜' => 'ð’°',
+ 'ð“™' => 'ð’±',
+ 'ð“š' => 'ð’²',
+ 'ð“›' => 'ð’³',
+ 'ð“œ' => 'ð’´',
+ 'ð“' => 'ð’µ',
+ 'ð“ž' => 'ð’¶',
+ 'ð“Ÿ' => 'ð’·',
+ 'ð“ ' => 'ð’¸',
+ 'ð“¡' => 'ð’¹',
+ 'ð“¢' => 'ð’º',
+ 'ð“£' => 'ð’»',
+ 'ð“¤' => 'ð’¼',
+ 'ð“¥' => 'ð’½',
+ 'ð“¦' => 'ð’¾',
+ 'ð“§' => 'ð’¿',
+ 'ð“¨' => 'ð“€',
+ 'ð“©' => 'ð“',
+ 'ð“ª' => 'ð“‚',
+ 'ð“«' => 'ð“ƒ',
+ 'ð“¬' => 'ð“„',
+ 'ð“' => 'ð“…',
+ 'ð“®' => 'ð“†',
+ 'ð“¯' => 'ð“‡',
+ 'ð“°' => 'ð“ˆ',
+ 'ð“±' => 'ð“‰',
+ 'ð“²' => 'ð“Š',
+ 'ð“³' => 'ð“‹',
+ 'ð“´' => 'ð“Œ',
+ 'ð“µ' => 'ð“',
+ 'ð“¶' => 'ð“Ž',
+ 'ð“·' => 'ð“',
+ 'ð“¸' => 'ð“',
+ 'ð“¹' => 'ð“‘',
+ 'ð“º' => 'ð“’',
+ 'ð“»' => 'ð““',
+ 'ð³€' => 'ð²€',
+ 'ð³' => 'ð²',
+ 'ð³‚' => 'ð²‚',
+ 'ð³ƒ' => 'ð²ƒ',
+ 'ð³„' => 'ð²„',
+ 'ð³…' => 'ð²…',
+ 'ð³†' => 'ð²†',
+ 'ð³‡' => 'ð²‡',
+ 'ð³ˆ' => 'ð²ˆ',
+ 'ð³‰' => 'ð²‰',
+ 'ð³Š' => 'ð²Š',
+ 'ð³‹' => 'ð²‹',
+ 'ð³Œ' => 'ð²Œ',
+ 'ð³' => 'ð²',
+ 'ð³Ž' => 'ð²Ž',
+ 'ð³' => 'ð²',
+ 'ð³' => 'ð²',
+ 'ð³‘' => 'ð²‘',
+ 'ð³’' => 'ð²’',
+ 'ð³“' => 'ð²“',
+ 'ð³”' => 'ð²”',
+ 'ð³•' => 'ð²•',
+ 'ð³–' => 'ð²–',
+ 'ð³—' => 'ð²—',
+ 'ð³˜' => 'ð²˜',
+ 'ð³™' => 'ð²™',
+ 'ð³š' => 'ð²š',
+ 'ð³›' => 'ð²›',
+ 'ð³œ' => 'ð²œ',
+ 'ð³' => 'ð²',
+ 'ð³ž' => 'ð²ž',
+ 'ð³Ÿ' => 'ð²Ÿ',
+ 'ð³ ' => 'ð² ',
+ 'ð³¡' => 'ð²¡',
+ 'ð³¢' => 'ð²¢',
+ 'ð³£' => 'ð²£',
+ 'ð³¤' => 'ð²¤',
+ 'ð³¥' => 'ð²¥',
+ 'ð³¦' => 'ð²¦',
+ 'ð³§' => 'ð²§',
+ 'ð³¨' => 'ð²¨',
+ 'ð³©' => 'ð²©',
+ 'ð³ª' => 'ð²ª',
+ 'ð³«' => 'ð²«',
+ 'ð³¬' => 'ð²¬',
+ 'ð³' => 'ð²',
+ 'ð³®' => 'ð²®',
+ 'ð³¯' => 'ð²¯',
+ 'ð³°' => 'ð²°',
+ 'ð³±' => 'ð²±',
+ 'ð³²' => 'ð²²',
+ 'ð‘£€' => 'ð‘¢ ',
+ 'ð‘£' => '𑢡',
+ '𑣂' => '𑢢',
+ '𑣃' => '𑢣',
+ '𑣄' => '𑢤',
+ 'ð‘£…' => 'ð‘¢¥',
+ '𑣆' => '𑢦',
+ '𑣇' => '𑢧',
+ '𑣈' => '𑢨',
+ '𑣉' => '𑢩',
+ '𑣊' => '𑢪',
+ '𑣋' => '𑢫',
+ '𑣌' => '𑢬',
+ 'ð‘£' => 'ð‘¢',
+ '𑣎' => '𑢮',
+ 'ð‘£' => '𑢯',
+ 'ð‘£' => 'ð‘¢°',
+ '𑣑' => '𑢱',
+ 'ð‘£’' => 'ð‘¢²',
+ '𑣓' => '𑢳',
+ 'ð‘£”' => 'ð‘¢´',
+ '𑣕' => '𑢵',
+ '𑣖' => '𑢶',
+ 'ð‘£—' => 'ð‘¢·',
+ '𑣘' => '𑢸',
+ 'ð‘£™' => 'ð‘¢¹',
+ '𑣚' => '𑢺',
+ 'ð‘£›' => 'ð‘¢»',
+ '𑣜' => '𑢼',
+ 'ð‘£' => 'ð‘¢½',
+ '𑣞' => '𑢾',
+ '𑣟' => '𑢿',
+ 'ð–¹ ' => 'ð–¹€',
+ '𖹡' => 'ð–¹',
+ '𖹢' => '𖹂',
+ '𖹣' => '𖹃',
+ '𖹤' => '𖹄',
+ 'ð–¹¥' => 'ð–¹…',
+ '𖹦' => '𖹆',
+ '𖹧' => '𖹇',
+ '𖹨' => '𖹈',
+ '𖹩' => '𖹉',
+ '𖹪' => '𖹊',
+ '𖹫' => '𖹋',
+ '𖹬' => '𖹌',
+ 'ð–¹' => 'ð–¹',
+ '𖹮' => '𖹎',
+ '𖹯' => 'ð–¹',
+ 'ð–¹°' => 'ð–¹',
+ '𖹱' => '𖹑',
+ 'ð–¹²' => 'ð–¹’',
+ '𖹳' => '𖹓',
+ 'ð–¹´' => 'ð–¹”',
+ '𖹵' => '𖹕',
+ '𖹶' => '𖹖',
+ 'ð–¹·' => 'ð–¹—',
+ '𖹸' => '𖹘',
+ 'ð–¹¹' => 'ð–¹™',
+ '𖹺' => '𖹚',
+ 'ð–¹»' => 'ð–¹›',
+ '𖹼' => '𖹜',
+ 'ð–¹½' => 'ð–¹',
+ '𖹾' => '𖹞',
+ '𖹿' => '𖹟',
+ '𞤢' => '𞤀',
+ '𞤣' => 'ðž¤',
+ '𞤤' => '𞤂',
+ '𞤥' => '𞤃',
+ '𞤦' => '𞤄',
+ '𞤧' => '𞤅',
+ '𞤨' => '𞤆',
+ '𞤩' => '𞤇',
+ '𞤪' => '𞤈',
+ '𞤫' => '𞤉',
+ '𞤬' => '𞤊',
+ 'ðž¤' => '𞤋',
+ '𞤮' => '𞤌',
+ '𞤯' => 'ðž¤',
+ '𞤰' => '𞤎',
+ '𞤱' => 'ðž¤',
+ '𞤲' => 'ðž¤',
+ '𞤳' => '𞤑',
+ '𞤴' => '𞤒',
+ '𞤵' => '𞤓',
+ '𞤶' => '𞤔',
+ '𞤷' => '𞤕',
+ '𞤸' => '𞤖',
+ '𞤹' => '𞤗',
+ '𞤺' => '𞤘',
+ '𞤻' => '𞤙',
+ '𞤼' => '𞤚',
+ '𞤽' => '𞤛',
+ '𞤾' => '𞤜',
+ '𞤿' => 'ðž¤',
+ '𞥀' => '𞤞',
+ 'ðž¥' => '𞤟',
+ '𞥂' => '𞤠',
+ '𞥃' => '𞤡',
+ 'ß' => 'SS',
+ 'ff' => 'FF',
+ 'ï¬' => 'FI',
+ 'fl' => 'FL',
+ 'ffi' => 'FFI',
+ 'ffl' => 'FFL',
+ 'ſt' => 'ST',
+ 'st' => 'ST',
+ 'Ö‡' => 'ÔµÕ’',
+ 'ﬓ' => 'ՄՆ',
+ 'ﬔ' => 'ՄԵ',
+ 'ﬕ' => 'ՄԻ',
+ 'ﬖ' => 'ՎՆ',
+ 'ﬗ' => 'ՄԽ',
+ 'ʼn' => 'ʼN',
+ 'Î' => 'ΪÌ',
+ 'ΰ' => 'ΫÌ',
+ 'ǰ' => 'J̌',
+ 'ẖ' => 'H̱',
+ 'ẗ' => 'T̈',
+ 'ẘ' => 'W̊',
+ 'ẙ' => 'Y̊',
+ 'ẚ' => 'Aʾ',
+ 'á½' => 'Υ̓',
+ 'ὒ' => 'Υ̓̀',
+ 'á½”' => 'Υ̓Ì',
+ 'ὖ' => 'Υ̓͂',
+ 'ᾶ' => 'Α͂',
+ 'ῆ' => 'Η͂',
+ 'ῒ' => 'Ϊ̀',
+ 'á¿“' => 'ΪÌ',
+ 'ῖ' => 'Ι͂',
+ 'ῗ' => 'Ϊ͂',
+ 'ῢ' => 'Ϋ̀',
+ 'á¿£' => 'ΫÌ',
+ 'ῤ' => 'Ρ̓',
+ 'ῦ' => 'Υ͂',
+ 'ῧ' => 'Ϋ͂',
+ 'ῶ' => 'Ω͂',
+ 'ᾈ' => 'ἈΙ',
+ 'ᾉ' => 'ἉΙ',
+ 'ᾊ' => 'ἊΙ',
+ 'ᾋ' => 'ἋΙ',
+ 'ᾌ' => 'ἌΙ',
+ 'á¾' => 'á¼Î™',
+ 'ᾎ' => 'ἎΙ',
+ 'á¾' => 'á¼Î™',
+ 'ᾘ' => 'ἨΙ',
+ 'ᾙ' => 'ἩΙ',
+ 'ᾚ' => 'ἪΙ',
+ 'ᾛ' => 'ἫΙ',
+ 'ᾜ' => 'ἬΙ',
+ 'á¾' => 'á¼Î™',
+ 'ᾞ' => 'ἮΙ',
+ 'ᾟ' => 'ἯΙ',
+ 'ᾨ' => 'ὨΙ',
+ 'ᾩ' => 'ὩΙ',
+ 'ᾪ' => 'ὪΙ',
+ 'ᾫ' => 'ὫΙ',
+ 'ᾬ' => 'ὬΙ',
+ 'á¾' => 'á½Î™',
+ 'ᾮ' => 'ὮΙ',
+ 'ᾯ' => 'ὯΙ',
+ 'ᾼ' => 'ΑΙ',
+ 'ῌ' => 'ΗΙ',
+ 'ῼ' => 'ΩΙ',
+ 'ᾲ' => 'ᾺΙ',
+ 'ᾴ' => 'ΆΙ',
+ 'ῂ' => 'ῊΙ',
+ 'ῄ' => 'ΉΙ',
+ 'ῲ' => 'ῺΙ',
+ 'á¿´' => 'ÎΙ',
+ 'ᾷ' => 'Α͂Ι',
+ 'ῇ' => 'Η͂Ι',
+ 'ῷ' => 'Ω͂Ι',
+);
diff --git a/dev/plugins/email/vendor/symfony/polyfill-mbstring/bootstrap.php b/dev/plugins/email/vendor/symfony/polyfill-mbstring/bootstrap.php
new file mode 100644
index 00000000..1fedd1f7
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-mbstring/bootstrap.php
@@ -0,0 +1,147 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Mbstring as p;
+
+if (\PHP_VERSION_ID >= 80000) {
+ return require __DIR__.'/bootstrap80.php';
+}
+
+if (!function_exists('mb_convert_encoding')) {
+ function mb_convert_encoding($string, $to_encoding, $from_encoding = null) { return p\Mbstring::mb_convert_encoding($string, $to_encoding, $from_encoding); }
+}
+if (!function_exists('mb_decode_mimeheader')) {
+ function mb_decode_mimeheader($string) { return p\Mbstring::mb_decode_mimeheader($string); }
+}
+if (!function_exists('mb_encode_mimeheader')) {
+ function mb_encode_mimeheader($string, $charset = null, $transfer_encoding = null, $newline = "\r\n", $indent = 0) { return p\Mbstring::mb_encode_mimeheader($string, $charset, $transfer_encoding, $newline, $indent); }
+}
+if (!function_exists('mb_decode_numericentity')) {
+ function mb_decode_numericentity($string, $map, $encoding = null) { return p\Mbstring::mb_decode_numericentity($string, $map, $encoding); }
+}
+if (!function_exists('mb_encode_numericentity')) {
+ function mb_encode_numericentity($string, $map, $encoding = null, $hex = false) { return p\Mbstring::mb_encode_numericentity($string, $map, $encoding, $hex); }
+}
+if (!function_exists('mb_convert_case')) {
+ function mb_convert_case($string, $mode, $encoding = null) { return p\Mbstring::mb_convert_case($string, $mode, $encoding); }
+}
+if (!function_exists('mb_internal_encoding')) {
+ function mb_internal_encoding($encoding = null) { return p\Mbstring::mb_internal_encoding($encoding); }
+}
+if (!function_exists('mb_language')) {
+ function mb_language($language = null) { return p\Mbstring::mb_language($language); }
+}
+if (!function_exists('mb_list_encodings')) {
+ function mb_list_encodings() { return p\Mbstring::mb_list_encodings(); }
+}
+if (!function_exists('mb_encoding_aliases')) {
+ function mb_encoding_aliases($encoding) { return p\Mbstring::mb_encoding_aliases($encoding); }
+}
+if (!function_exists('mb_check_encoding')) {
+ function mb_check_encoding($value = null, $encoding = null) { return p\Mbstring::mb_check_encoding($value, $encoding); }
+}
+if (!function_exists('mb_detect_encoding')) {
+ function mb_detect_encoding($string, $encodings = null, $strict = false) { return p\Mbstring::mb_detect_encoding($string, $encodings, $strict); }
+}
+if (!function_exists('mb_detect_order')) {
+ function mb_detect_order($encoding = null) { return p\Mbstring::mb_detect_order($encoding); }
+}
+if (!function_exists('mb_parse_str')) {
+ function mb_parse_str($string, &$result = []) { parse_str($string, $result); return (bool) $result; }
+}
+if (!function_exists('mb_strlen')) {
+ function mb_strlen($string, $encoding = null) { return p\Mbstring::mb_strlen($string, $encoding); }
+}
+if (!function_exists('mb_strpos')) {
+ function mb_strpos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strpos($haystack, $needle, $offset, $encoding); }
+}
+if (!function_exists('mb_strtolower')) {
+ function mb_strtolower($string, $encoding = null) { return p\Mbstring::mb_strtolower($string, $encoding); }
+}
+if (!function_exists('mb_strtoupper')) {
+ function mb_strtoupper($string, $encoding = null) { return p\Mbstring::mb_strtoupper($string, $encoding); }
+}
+if (!function_exists('mb_substitute_character')) {
+ function mb_substitute_character($substitute_character = null) { return p\Mbstring::mb_substitute_character($substitute_character); }
+}
+if (!function_exists('mb_substr')) {
+ function mb_substr($string, $start, $length = 2147483647, $encoding = null) { return p\Mbstring::mb_substr($string, $start, $length, $encoding); }
+}
+if (!function_exists('mb_stripos')) {
+ function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_stripos($haystack, $needle, $offset, $encoding); }
+}
+if (!function_exists('mb_stristr')) {
+ function mb_stristr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_stristr($haystack, $needle, $before_needle, $encoding); }
+}
+if (!function_exists('mb_strrchr')) {
+ function mb_strrchr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strrchr($haystack, $needle, $before_needle, $encoding); }
+}
+if (!function_exists('mb_strrichr')) {
+ function mb_strrichr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strrichr($haystack, $needle, $before_needle, $encoding); }
+}
+if (!function_exists('mb_strripos')) {
+ function mb_strripos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strripos($haystack, $needle, $offset, $encoding); }
+}
+if (!function_exists('mb_strrpos')) {
+ function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strrpos($haystack, $needle, $offset, $encoding); }
+}
+if (!function_exists('mb_strstr')) {
+ function mb_strstr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strstr($haystack, $needle, $before_needle, $encoding); }
+}
+if (!function_exists('mb_get_info')) {
+ function mb_get_info($type = 'all') { return p\Mbstring::mb_get_info($type); }
+}
+if (!function_exists('mb_http_output')) {
+ function mb_http_output($encoding = null) { return p\Mbstring::mb_http_output($encoding); }
+}
+if (!function_exists('mb_strwidth')) {
+ function mb_strwidth($string, $encoding = null) { return p\Mbstring::mb_strwidth($string, $encoding); }
+}
+if (!function_exists('mb_substr_count')) {
+ function mb_substr_count($haystack, $needle, $encoding = null) { return p\Mbstring::mb_substr_count($haystack, $needle, $encoding); }
+}
+if (!function_exists('mb_output_handler')) {
+ function mb_output_handler($string, $status) { return p\Mbstring::mb_output_handler($string, $status); }
+}
+if (!function_exists('mb_http_input')) {
+ function mb_http_input($type = null) { return p\Mbstring::mb_http_input($type); }
+}
+
+if (!function_exists('mb_convert_variables')) {
+ function mb_convert_variables($to_encoding, $from_encoding, &...$vars) { return p\Mbstring::mb_convert_variables($to_encoding, $from_encoding, ...$vars); }
+}
+
+if (!function_exists('mb_ord')) {
+ function mb_ord($string, $encoding = null) { return p\Mbstring::mb_ord($string, $encoding); }
+}
+if (!function_exists('mb_chr')) {
+ function mb_chr($codepoint, $encoding = null) { return p\Mbstring::mb_chr($codepoint, $encoding); }
+}
+if (!function_exists('mb_scrub')) {
+ function mb_scrub($string, $encoding = null) { $encoding = null === $encoding ? mb_internal_encoding() : $encoding; return mb_convert_encoding($string, $encoding, $encoding); }
+}
+if (!function_exists('mb_str_split')) {
+ function mb_str_split($string, $length = 1, $encoding = null) { return p\Mbstring::mb_str_split($string, $length, $encoding); }
+}
+
+if (extension_loaded('mbstring')) {
+ return;
+}
+
+if (!defined('MB_CASE_UPPER')) {
+ define('MB_CASE_UPPER', 0);
+}
+if (!defined('MB_CASE_LOWER')) {
+ define('MB_CASE_LOWER', 1);
+}
+if (!defined('MB_CASE_TITLE')) {
+ define('MB_CASE_TITLE', 2);
+}
diff --git a/dev/plugins/email/vendor/symfony/polyfill-mbstring/bootstrap80.php b/dev/plugins/email/vendor/symfony/polyfill-mbstring/bootstrap80.php
new file mode 100644
index 00000000..82f5ac4d
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-mbstring/bootstrap80.php
@@ -0,0 +1,143 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Mbstring as p;
+
+if (!function_exists('mb_convert_encoding')) {
+ function mb_convert_encoding(array|string|null $string, ?string $to_encoding, array|string|null $from_encoding = null): array|string|false { return p\Mbstring::mb_convert_encoding($string ?? '', (string) $to_encoding, $from_encoding); }
+}
+if (!function_exists('mb_decode_mimeheader')) {
+ function mb_decode_mimeheader(?string $string): string { return p\Mbstring::mb_decode_mimeheader((string) $string); }
+}
+if (!function_exists('mb_encode_mimeheader')) {
+ function mb_encode_mimeheader(?string $string, ?string $charset = null, ?string $transfer_encoding = null, ?string $newline = "\r\n", ?int $indent = 0): string { return p\Mbstring::mb_encode_mimeheader((string) $string, $charset, $transfer_encoding, (string) $newline, (int) $indent); }
+}
+if (!function_exists('mb_decode_numericentity')) {
+ function mb_decode_numericentity(?string $string, array $map, ?string $encoding = null): string { return p\Mbstring::mb_decode_numericentity((string) $string, $map, $encoding); }
+}
+if (!function_exists('mb_encode_numericentity')) {
+ function mb_encode_numericentity(?string $string, array $map, ?string $encoding = null, ?bool $hex = false): string { return p\Mbstring::mb_encode_numericentity((string) $string, $map, $encoding, (bool) $hex); }
+}
+if (!function_exists('mb_convert_case')) {
+ function mb_convert_case(?string $string, ?int $mode, ?string $encoding = null): string { return p\Mbstring::mb_convert_case((string) $string, (int) $mode, $encoding); }
+}
+if (!function_exists('mb_internal_encoding')) {
+ function mb_internal_encoding(?string $encoding = null): string|bool { return p\Mbstring::mb_internal_encoding($encoding); }
+}
+if (!function_exists('mb_language')) {
+ function mb_language(?string $language = null): string|bool { return p\Mbstring::mb_language($language); }
+}
+if (!function_exists('mb_list_encodings')) {
+ function mb_list_encodings(): array { return p\Mbstring::mb_list_encodings(); }
+}
+if (!function_exists('mb_encoding_aliases')) {
+ function mb_encoding_aliases(?string $encoding): array { return p\Mbstring::mb_encoding_aliases((string) $encoding); }
+}
+if (!function_exists('mb_check_encoding')) {
+ function mb_check_encoding(array|string|null $value = null, ?string $encoding = null): bool { return p\Mbstring::mb_check_encoding($value, $encoding); }
+}
+if (!function_exists('mb_detect_encoding')) {
+ function mb_detect_encoding(?string $string, array|string|null $encodings = null, ?bool $strict = false): string|false { return p\Mbstring::mb_detect_encoding((string) $string, $encodings, (bool) $strict); }
+}
+if (!function_exists('mb_detect_order')) {
+ function mb_detect_order(array|string|null $encoding = null): array|bool { return p\Mbstring::mb_detect_order($encoding); }
+}
+if (!function_exists('mb_parse_str')) {
+ function mb_parse_str(?string $string, &$result = []): bool { parse_str((string) $string, $result); return (bool) $result; }
+}
+if (!function_exists('mb_strlen')) {
+ function mb_strlen(?string $string, ?string $encoding = null): int { return p\Mbstring::mb_strlen((string) $string, $encoding); }
+}
+if (!function_exists('mb_strpos')) {
+ function mb_strpos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strpos((string) $haystack, (string) $needle, (int) $offset, $encoding); }
+}
+if (!function_exists('mb_strtolower')) {
+ function mb_strtolower(?string $string, ?string $encoding = null): string { return p\Mbstring::mb_strtolower((string) $string, $encoding); }
+}
+if (!function_exists('mb_strtoupper')) {
+ function mb_strtoupper(?string $string, ?string $encoding = null): string { return p\Mbstring::mb_strtoupper((string) $string, $encoding); }
+}
+if (!function_exists('mb_substitute_character')) {
+ function mb_substitute_character(string|int|null $substitute_character = null): string|int|bool { return p\Mbstring::mb_substitute_character($substitute_character); }
+}
+if (!function_exists('mb_substr')) {
+ function mb_substr(?string $string, ?int $start, ?int $length = null, ?string $encoding = null): string { return p\Mbstring::mb_substr((string) $string, (int) $start, $length, $encoding); }
+}
+if (!function_exists('mb_stripos')) {
+ function mb_stripos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_stripos((string) $haystack, (string) $needle, (int) $offset, $encoding); }
+}
+if (!function_exists('mb_stristr')) {
+ function mb_stristr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_stristr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); }
+}
+if (!function_exists('mb_strrchr')) {
+ function mb_strrchr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strrchr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); }
+}
+if (!function_exists('mb_strrichr')) {
+ function mb_strrichr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strrichr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); }
+}
+if (!function_exists('mb_strripos')) {
+ function mb_strripos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strripos((string) $haystack, (string) $needle, (int) $offset, $encoding); }
+}
+if (!function_exists('mb_strrpos')) {
+ function mb_strrpos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strrpos((string) $haystack, (string) $needle, (int) $offset, $encoding); }
+}
+if (!function_exists('mb_strstr')) {
+ function mb_strstr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strstr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); }
+}
+if (!function_exists('mb_get_info')) {
+ function mb_get_info(?string $type = 'all'): array|string|int|false { return p\Mbstring::mb_get_info((string) $type); }
+}
+if (!function_exists('mb_http_output')) {
+ function mb_http_output(?string $encoding = null): string|bool { return p\Mbstring::mb_http_output($encoding); }
+}
+if (!function_exists('mb_strwidth')) {
+ function mb_strwidth(?string $string, ?string $encoding = null): int { return p\Mbstring::mb_strwidth((string) $string, $encoding); }
+}
+if (!function_exists('mb_substr_count')) {
+ function mb_substr_count(?string $haystack, ?string $needle, ?string $encoding = null): int { return p\Mbstring::mb_substr_count((string) $haystack, (string) $needle, $encoding); }
+}
+if (!function_exists('mb_output_handler')) {
+ function mb_output_handler(?string $string, ?int $status): string { return p\Mbstring::mb_output_handler((string) $string, (int) $status); }
+}
+if (!function_exists('mb_http_input')) {
+ function mb_http_input(?string $type = null): array|string|false { return p\Mbstring::mb_http_input($type); }
+}
+
+if (!function_exists('mb_convert_variables')) {
+ function mb_convert_variables(?string $to_encoding, array|string|null $from_encoding, mixed &$var, mixed &...$vars): string|false { return p\Mbstring::mb_convert_variables((string) $to_encoding, $from_encoding ?? '', $var, ...$vars); }
+}
+
+if (!function_exists('mb_ord')) {
+ function mb_ord(?string $string, ?string $encoding = null): int|false { return p\Mbstring::mb_ord((string) $string, $encoding); }
+}
+if (!function_exists('mb_chr')) {
+ function mb_chr(?int $codepoint, ?string $encoding = null): string|false { return p\Mbstring::mb_chr((int) $codepoint, $encoding); }
+}
+if (!function_exists('mb_scrub')) {
+ function mb_scrub(?string $string, ?string $encoding = null): string { $encoding ??= mb_internal_encoding(); return mb_convert_encoding((string) $string, $encoding, $encoding); }
+}
+if (!function_exists('mb_str_split')) {
+ function mb_str_split(?string $string, ?int $length = 1, ?string $encoding = null): array { return p\Mbstring::mb_str_split((string) $string, (int) $length, $encoding); }
+}
+
+if (extension_loaded('mbstring')) {
+ return;
+}
+
+if (!defined('MB_CASE_UPPER')) {
+ define('MB_CASE_UPPER', 0);
+}
+if (!defined('MB_CASE_LOWER')) {
+ define('MB_CASE_LOWER', 1);
+}
+if (!defined('MB_CASE_TITLE')) {
+ define('MB_CASE_TITLE', 2);
+}
diff --git a/dev/plugins/email/vendor/symfony/polyfill-mbstring/composer.json b/dev/plugins/email/vendor/symfony/polyfill-mbstring/composer.json
new file mode 100644
index 00000000..2ed7a743
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-mbstring/composer.json
@@ -0,0 +1,38 @@
+{
+ "name": "symfony/polyfill-mbstring",
+ "type": "library",
+ "description": "Symfony polyfill for the Mbstring extension",
+ "keywords": ["polyfill", "shim", "compatibility", "portable", "mbstring"],
+ "homepage": "https://symfony.com",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "require": {
+ "php": ">=7.1"
+ },
+ "autoload": {
+ "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" },
+ "files": [ "bootstrap.php" ]
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "minimum-stability": "dev",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.23-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ }
+}
diff --git a/dev/plugins/email/vendor/symfony/polyfill-php72/LICENSE b/dev/plugins/email/vendor/symfony/polyfill-php72/LICENSE
new file mode 100644
index 00000000..4cd8bdd3
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-php72/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2015-2019 Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/dev/plugins/email/vendor/symfony/polyfill-php72/Php72.php b/dev/plugins/email/vendor/symfony/polyfill-php72/Php72.php
new file mode 100644
index 00000000..5e20d5bf
--- /dev/null
+++ b/dev/plugins/email/vendor/symfony/polyfill-php72/Php72.php
@@ -0,0 +1,217 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Php72;
+
+/**
+ * @author Nicolas Grekas
+ * @author Dariusz Rumiński {{ page.content|raw }}
+ {{ 'PLUGIN_FLEX_OBJECTS.ERROR.PAGE_NOT_EXIST'|tu }}
+
+ {{ 'PLUGIN_FLEX_OBJECTS.ERROR.PAGE_FORBIDDEN'|tu }}
+
+ {{ 'PLUGIN_FLEX_OBJECTS.ERROR.PAGE_NOT_EXIST'|tu }}
+
+ {{ 'PLUGIN_FLEX_OBJECTS.ERROR.PAGE_NOT_EXIST'|tu }}
+ {{ 'PLUGIN_FLEX_OBJECTS.ERROR.BLUEPRINT_NO_LIST'|tu( target, null )|raw }}
+ {{ 'PLUGIN_FLEX_OBJECTS.ERROR.PAGE_NOT_EXIST'|tu }}
+
+ {{ directory.description }}
+
+ {{ e.message }}
+ {{ 'PLUGIN_ERROR.ERROR'|t }} {{ header.http_response_code }}
+
+
to
)
+ if (($html = $document->saveXML($node, LIBXML_NOEMPTYTAG)) !== false) {
+ $content .= $html;
+ }
+ }
+
+ // Fix formatting for self-closing tags in HTML5 and removing
+ // encapsulated (uncommented) CDATA blocks in ` tag at the bottom with this code:
+
+ ```html
+
+ ```
+
+# File Upload
+
+To upload files you can use the `file` form field. [The standard features apply](https://learn.getgrav.org/forms/blueprints/how-to-add-file-upload), and you can simply edit your custom blueprint with a field definition similar to:
+
+```
+ item_image:
+ type: file
+ label: Item Image
+ random_name: true
+ destination: 'user/data/flex-objects/files'
+ multiple: true
+```
+
+> In order to fully take advantage of image uploads, you should always be using `FolderStorage`, meaning that the objects get saved to individual folders together with the images. Other storage layers may or may not support media.
+
+# Advanced
+
+You can radically alter the structure of the `contacts.json` data file by making major edits to the `contacts.yaml` blueprint file. However, it's best to start with an empty `contacts.json` if you are making wholesale changes or you will have data conflicts. Best to create your blueprint first. Reloading a **New Entry** until the form looks correct, then try saving, and check to make sure the stored `user/data/flex-objects/contacts.json` file looks correct.
+
+Then you will need to make more widespread changes to the site Twig templates. You might need to adjust the number of columns and the field names. You will also need to pay attention to the JavaScript initialization in each template.
+
+# Features
+
+Here are the main benefits of using Flex objects:
+
+* CRUD is automatically handled for you by Flex Objects plugin
+* Objects can be stored using many different strategies, including single file, file per object or folder per object; using yaml, json etc.
+* Flex types can be easily extended by custom PHP collection and object classes
+* Both Flex objects and collections know how to render themselves: `echo $object->render($layout, $context)` or `{% render object layout: layout with context %}`
+* You can easily create custom layouts for your objects and collections to be used in different pages
+* Both Flex objects and collections support serialization and `json_encode()`
+* Flex objects support Grav `Medium` objects with few lines of code
+* Flex objects can have relations to other Flex objects with few lines of code defining the relation
+* Flex directories support indexes which allow searching objects without loading all of them
+* Efficient caching for indexes, searches, objects and rendered output
+
+# Limitations and future improvements
+
+Right now there are a few limitations:
+
+* Frontend only has a basic routing for the individual pages (you need to do the advanced routing manually by yourself)
+* Administration needs more features like filtering, bulk updates etc
+* It would be nice to have an easy way to display Flex admin in other admin plugins (it is already possible, but not easy)
+* Optional database storage layer would be nice to have
+* We need general collection functions to do simple filtering, like: "display all published items" without custom PHP code
+
+### Notes:
+
+1. You can actually use pretty much any folder under the `user/` folder of Grav. Simply edit the **Extra Admin Twig Path** option in the `flex-objects.yaml` file. It defaults to `theme://admin/templates` which means it uses the default theme's `admin/templates/` folder if it exists.
+2. You can use any path for front end Twig templates also, if you don't want to put them in your theme, you can add an entry in the **Extra Site Twig Path** option of the `flex-objects.yaml` configuration and point to another location.
+
+# Tricks and tips
+
+* You can enable and disable directories from **Plugins** > **Flex Objects**
+ * New Flex Directories can be registered by simply creating a new blueprint file in `user/blueprints/flex-objects` folder
+ * You can also add types from your plugins by hooking into `onFlexInit` event (see `AccountsServiceProvider` in Grav)
+* To properly create your own custom types, you need at least the object blueprint and the template files for collections and objects
+* Use `flex-objects.md` page to create entry point for your own directory
+ * In page header you can use nested `flex.directory` variable to define the directory (or do it in admin)
+ * In Admin you can just select the directory under the page title
+
+
+# Parameters supported by Flex page type:
+
+```
+---
+title: 'Flex Directories'
+flex:
+ directories:
+ layout: default
+ list:
+ - accounts
+ - contacts
+---
+```
+
+`directories.layout`: uses template file `templates/flex-objects/directories/[LAYOUT].html.twig`
+`directories.list`: list of flex directories displayed in this page
diff --git a/dev/plugins/flex-objects/admin/templates/flex-objects.html.twig b/dev/plugins/flex-objects/admin/templates/flex-objects.html.twig
new file mode 100644
index 00000000..74ee1ca4
--- /dev/null
+++ b/dev/plugins/flex-objects/admin/templates/flex-objects.html.twig
@@ -0,0 +1,30 @@
+{%- set user = admin.user -%}
+{%- set route = controller.route -%}
+{%- set type = directory.config('admin.template') ?? target -%}
+
+{# Set action from ?preview=1 #}
+{%- if key and uri.currentUri().queryParam('preview') %}
+ {% set action = 'preview' %}
+{% endif -%}
+
+{%- set template -%}
+ {%- if action == 'add' -%}
+ edit
+ {%- elseif action == 'delete' -%}
+ list
+ {%- else -%}
+ {{- action ?: task ?: 'types' -}}
+ {%- endif -%}
+{%- endset -%}
+
+{%- set separator = config.system.param_sep -%}
+{%- set view_config = directory.config('admin.views.' ~ template) ?? directory.config('admin.' ~ template) ?? [] -%}
+
+{%- include target ? [
+ 'flex-objects/types/' ~ type ~ '/' ~ template ~ '.html.twig',
+ 'flex-objects/types/default/' ~ template ~ '.html.twig',
+ 'flex-objects/layouts/404.html.twig'
+ ] : [
+ 'flex-objects/types/default/' ~ template ~ '.html.twig',
+ 'flex-objects/layouts/404.html.twig'
+ ] -%}
diff --git a/dev/plugins/flex-objects/admin/templates/flex-objects.json.twig b/dev/plugins/flex-objects/admin/templates/flex-objects.json.twig
new file mode 100644
index 00000000..c5b85dc9
--- /dev/null
+++ b/dev/plugins/flex-objects/admin/templates/flex-objects.json.twig
@@ -0,0 +1 @@
+{{- admin.json_response|json_encode|raw -}}
\ No newline at end of file
diff --git a/dev/plugins/flex-objects/admin/templates/flex-objects/layouts/404.html.twig b/dev/plugins/flex-objects/admin/templates/flex-objects/layouts/404.html.twig
new file mode 100644
index 00000000..6101c817
--- /dev/null
+++ b/dev/plugins/flex-objects/admin/templates/flex-objects/layouts/404.html.twig
@@ -0,0 +1 @@
+{{ 'PLUGIN_FLEX_OBJECTS.ERROR.LAYOUT_NOT_FOUND'|tu(template, null) }}
diff --git a/dev/plugins/flex-objects/admin/templates/flex-objects/layouts/accounts/partials/top.html.twig b/dev/plugins/flex-objects/admin/templates/flex-objects/layouts/accounts/partials/top.html.twig
new file mode 100644
index 00000000..46b1ef6f
--- /dev/null
+++ b/dev/plugins/flex-objects/admin/templates/flex-objects/layouts/accounts/partials/top.html.twig
@@ -0,0 +1,25 @@
+{% set active_html = 'class="active"' %}
+{% set is_configure = route.gravParam('') is same as('configure') %}
+{% set authorize = directory.config('admin.views.configure.authorize') ?? directory.config('admin.configure.authorize') ?? 'admin.super' %}
+
+{% if allowed %}
+{{ 'PLUGIN_ADMIN.ERROR'|tu }} 404
+ {{ 'PLUGIN_ADMIN.ERROR'|tu }} 403
+ {{ 'PLUGIN_ADMIN.ERROR'|tu }} 404
+ {{ 'PLUGIN_ADMIN.ERROR'|tu }} 404
+
+
+ {{ 'PLUGIN_ADMIN.ERROR'|tu }} 404
+
+ {% if allowed %}
+
+ {{ title }}
+ {% else %}
+
+ {{ 'PLUGIN_ADMIN.ERROR'|tu }}
+ Â {% endif %}
+
+ {% endblock titlebar_title %}
+
+{% endblock %}
diff --git a/dev/plugins/flex-objects/admin/templates/flex-objects/types/default/titlebar/edit.html.twig b/dev/plugins/flex-objects/admin/templates/flex-objects/types/default/titlebar/edit.html.twig
new file mode 100644
index 00000000..b209e44b
--- /dev/null
+++ b/dev/plugins/flex-objects/admin/templates/flex-objects/types/default/titlebar/edit.html.twig
@@ -0,0 +1,46 @@
+{% block titlebar %}
+ {% block titlebar_button_bar %}
+
+ {% endblock titlebar_button_bar %}
+
+ {% block titlebar_title %}
+
+ {% if allowed %}
+
+ {{ not object.exists ? '[' ~ 'PLUGIN_FLEX_OBJECTS.NEW'|tu|upper ~ ']' }} {{ title|tu }}
+ {% else %}
+
+ {{ 'PLUGIN_ADMIN.ERROR'|tu }}
+ {% endif %}
+
+ {% endblock titlebar_title %}
+
+{% endblock %}
diff --git a/dev/plugins/flex-objects/admin/templates/flex-objects/types/default/titlebar/list.html.twig b/dev/plugins/flex-objects/admin/templates/flex-objects/types/default/titlebar/list.html.twig
new file mode 100644
index 00000000..03a01889
--- /dev/null
+++ b/dev/plugins/flex-objects/admin/templates/flex-objects/types/default/titlebar/list.html.twig
@@ -0,0 +1,48 @@
+{% block titlebar %}
+ {% block titlebar_button_bar %}
+
+ {% endblock titlebar_button_bar %}
+
+ {% block titlebar_title %}
+
+ {% if allowed %}
+
+ {{ directory ? title|tu : 'Error' }}
+ {% else %}
+
+ {{ 'PLUGIN_ADMIN.ERROR'|tu }}
+ Â {% endif %}
+
+ {% endblock titlebar_title %}
+{% endblock %}
diff --git a/dev/plugins/flex-objects/admin/templates/flex-objects/types/default/titlebar/preview.html.twig b/dev/plugins/flex-objects/admin/templates/flex-objects/types/default/titlebar/preview.html.twig
new file mode 100644
index 00000000..6b7bad73
--- /dev/null
+++ b/dev/plugins/flex-objects/admin/templates/flex-objects/types/default/titlebar/preview.html.twig
@@ -0,0 +1,30 @@
+{% block titlebar %}
+ {% block titlebar_button_bar %}
+
+ {% endblock titlebar_button_bar %}
+
+ {% block titlebar_title %}
+
+ {% if allowed %}
+
+ {{ "PLUGIN_ADMIN.PREVIEW"|tu }}: {{ not object.exists ? '[' ~ 'PLUGIN_FLEX_OBJECTS.NEW'|tu|upper ~ ']' }} {{ title }}
+ {% else %}
+
+ {{ 'PLUGIN_ADMIN.ERROR'|tu }}
+ {% endif %}
+
+ {% endblock titlebar_title %}
+
+{% endblock %}
diff --git a/dev/plugins/flex-objects/admin/templates/flex-objects/types/default/titlebar/types.html.twig b/dev/plugins/flex-objects/admin/templates/flex-objects/types/default/titlebar/types.html.twig
new file mode 100644
index 00000000..97789de7
--- /dev/null
+++ b/dev/plugins/flex-objects/admin/templates/flex-objects/types/default/titlebar/types.html.twig
@@ -0,0 +1,22 @@
+{% block titlebar %}
+ {% block titlebar_button_bar %}
+
+ {% endblock titlebar_button_bar %}
+
+ {% block titlebar_title %}
+
+
+ {{ "PLUGIN_FLEX_OBJECTS.TITLE"|tu }}
+
+ {% endblock titlebar_title %}
+{% endblock %}
diff --git a/dev/plugins/flex-objects/admin/templates/flex-objects/types/default/types.html.twig b/dev/plugins/flex-objects/admin/templates/flex-objects/types/default/types.html.twig
new file mode 100644
index 00000000..88b1ab23
--- /dev/null
+++ b/dev/plugins/flex-objects/admin/templates/flex-objects/types/default/types.html.twig
@@ -0,0 +1,46 @@
+{% extends 'partials/base.html.twig' %}
+{% use 'flex-objects/types/default/titlebar/types.html.twig' %}
+
+{% set flex = grav['flex_objects'] %}
+
+{# These variables can be overridden from the main template file #}
+{% set back_route = back_route ?? ('/' ~ route.getRoute(1, -1)) %}
+{% set configure_route = '/plugins/flex-objects' %}
+
+{% block body %}
+ {% set back_url = admin_route(back_route) %}
+ {% set configure_url = configure_route ? admin_route(configure_route) : null %}
+
+ {{ parent() }}
+{% endblock body %}
+
+{% block content %}
+
+ {{ 'PLUGIN_FLEX_OBJECTS.TYPES_TITLE'|tu }}
+
+ {{ directory.title|tu }} {{ collection.isAuthorized('list', 'admin', user).count }}
+ {{ 'PLUGIN_FLEX_OBJECTS.ERROR.BAD_DIRECTORY'|tu }} '{{ name }}'
+ ');
+ const createItem = this.config.createItem || this.createItem;
+ const items = data.map((item) => createItem.call(this, item));
+
+ const fragments = items.reduce((fragment, current) => {
+ fragment.appendChild(current[0] || current);
+
+ return fragment;
+ }, document.createDocumentFragment());
+
+ list.append(fragments).addClass(this.config.className.list);
+
+ return list;
+ }
+
+ createItem(item) {
+ const listItem = $('');
+ const listItemClasses = [this.config.className.item];
+ const link = $(``);
+ const createItemContent = this.config.createItemContent || this.createItemContent;
+ const fragment = createItemContent.call(this, item);
+ link.append(fragment)
+ .attr('href', '')
+ .attr('tabindex', -1);
+
+ if (item.url) {
+ link.attr('href', item.url);
+ listItemClasses.push(item.className);
+ }
+
+ if (item[this.config.childKey]) {
+ listItemClasses.push(this.config.className[this.config.childKey]);
+ }
+
+ listItem.addClass(listItemClasses.join(' '));
+ listItem.append(link)
+ .attr('data-fjs-item', item[this.config.itemKey]);
+
+ listItem[0]._item = item;
+
+ return listItem;
+ }
+
+ updatePathBar() {
+ if (!this.config.pathBar) { return false; }
+
+ const activeItems = this.container.find(`.${this.config.className.active}`);
+ let itemKeys = '';
+ this.pathBar.empty();
+ activeItems.each((index, activeItem) => {
+ const item = activeItem._item;
+ const isLast = (index + 1) === activeItems.length;
+ itemKeys += `/${item[this.config.itemKey]}`;
+ this.pathBar.append(`
+
+ `);
+ });
+ }
+
+ getIcon(type) {
+ switch (type) {
+ case 'root':
+ return 'fa-sitemap';
+ case 'file':
+ return 'fa-file-o';
+ case 'dir':
+ default:
+ return 'fa-folder';
+ }
+ }
+
+ isInView(element, container, partial) {
+ if (!element.length || !container.length) {
+ return true;
+ }
+
+ const containerHeight = container.height();
+ const elementTop = $(element).offset().top - container.offset().top;
+ const elementBottom = elementTop + $(element).height();
+
+ const isTotal = (elementTop >= 0 && elementBottom <= containerHeight);
+ const isPartial = ((elementTop < 0 && elementBottom > 0) || (elementTop > 0 && elementTop <= container.height())) && partial;
+
+ return isTotal || isPartial;
+ }
+
+ scrollToView(element, container) {
+ const top = parseInt(container.getBoundingClientRect().top, 10);
+ const bot = parseInt(container.getBoundingClientRect().bottom, 10);
+
+ const now_top = parseInt(element.getBoundingClientRect().top, 10);
+ const now_bot = parseInt(element.getBoundingClientRect().bottom, 10);
+
+ let scroll_by = 0;
+ if (now_top < top) {
+ scroll_by = -(top - now_top);
+ } else if (now_bot > bot) {
+ scroll_by = now_bot - bot;
+ }
+
+ if (scroll_by !== 0) {
+ container.scrollTop += scroll_by;
+ }
+ }
+}
+
+export default Finder;
diff --git a/dev/plugins/flex-objects/app/utils/get-filters.js b/dev/plugins/flex-objects/app/utils/get-filters.js
new file mode 100644
index 00000000..b1e8ca7e
--- /dev/null
+++ b/dev/plugins/flex-objects/app/utils/get-filters.js
@@ -0,0 +1,34 @@
+export default () => {
+ const inputs = document.querySelectorAll('#pages-filters input[name]');
+ const filters = {};
+ const trackMulti = [];
+
+ inputs.forEach((filter) => {
+ if (filter.type === 'checkbox') {
+ if (filter.indeterminate || filter.checked) {
+ if (filter.name.match(/\[]$/)) {
+ const name = filter.name.replace(/\[]$/, '');
+ if (!filters[name]) {
+ filters[name] = [];
+ }
+
+ if (!trackMulti.includes(name)) {
+ trackMulti.push(name);
+ }
+
+ filters[name].push(filter.value);
+ } else {
+ filters[filter.name] = filter.value;
+ }
+ }
+ } else if (filter.value) {
+ filters[filter.name] = filter.value;
+ }
+ });
+
+ trackMulti.forEach((multi) => {
+ filters[multi] = filters[multi].join(',');
+ });
+
+ return filters;
+};
diff --git a/dev/plugins/flex-objects/app/utils/indeterminate.js b/dev/plugins/flex-objects/app/utils/indeterminate.js
new file mode 100644
index 00000000..a83ce391
--- /dev/null
+++ b/dev/plugins/flex-objects/app/utils/indeterminate.js
@@ -0,0 +1,44 @@
+document.addEventListener('click', (event) => {
+ const wrapper = event.target.closest('.checkboxes.indeterminate');
+ if (wrapper) {
+ event.preventDefault();
+ const checkbox = wrapper.querySelector('input[type="checkbox"]:not([disabled])');
+ const checkStatus = wrapper.dataset._checkStatus;
+ wrapper.classList.remove('status-checked', 'status-unchecked', 'status-indeterminate');
+
+ switch (checkStatus) {
+ // checked, going indeterminate
+ case '1':
+ wrapper.dataset._checkStatus = '2';
+ checkbox.indeterminate = true;
+ checkbox.checked = false;
+ checkbox.value = 0;
+ wrapper.classList.add('status-indeterminate');
+ break;
+
+ // indeterminate, going unchecked
+ case '2':
+ wrapper.dataset._checkStatus = '0';
+ checkbox.indeterminate = false;
+ checkbox.checked = false;
+ checkbox.value = '';
+ wrapper.classList.add('status-unchecked');
+ break;
+
+ // unchecked, going checked
+ case '0':
+ default:
+ wrapper.dataset._checkStatus = '1';
+ checkbox.indeterminate = false;
+ checkbox.checked = true;
+ checkbox.value = 1;
+ wrapper.classList.add('status-checked');
+ break;
+ }
+
+ const input = new CustomEvent('input', { detail: { target: checkbox }});
+ document.dispatchEvent(input);
+ }
+});
+
+(document.querySelectorAll('input[type="checkbox"][indeterminate="true"]') || []).forEach((input) => { input.indeterminate = true; });
diff --git a/dev/plugins/flex-objects/assets/flex-objects-directory.png b/dev/plugins/flex-objects/assets/flex-objects-directory.png
new file mode 100644
index 00000000..2a5534e3
Binary files /dev/null and b/dev/plugins/flex-objects/assets/flex-objects-directory.png differ
diff --git a/dev/plugins/flex-objects/assets/flex-objects-edit.png b/dev/plugins/flex-objects/assets/flex-objects-edit.png
new file mode 100644
index 00000000..adac81ef
Binary files /dev/null and b/dev/plugins/flex-objects/assets/flex-objects-edit.png differ
diff --git a/dev/plugins/flex-objects/assets/flex-objects-list.png b/dev/plugins/flex-objects/assets/flex-objects-list.png
new file mode 100644
index 00000000..1dcfba4d
Binary files /dev/null and b/dev/plugins/flex-objects/assets/flex-objects-list.png differ
diff --git a/dev/plugins/flex-objects/assets/flex-objects-options.png b/dev/plugins/flex-objects/assets/flex-objects-options.png
new file mode 100644
index 00000000..2b72e6a5
Binary files /dev/null and b/dev/plugins/flex-objects/assets/flex-objects-options.png differ
diff --git a/dev/plugins/flex-objects/assets/flex-objects-site.png b/dev/plugins/flex-objects/assets/flex-objects-site.png
new file mode 100644
index 00000000..7c0e1836
Binary files /dev/null and b/dev/plugins/flex-objects/assets/flex-objects-site.png differ
diff --git a/dev/plugins/flex-objects/blueprints.yaml b/dev/plugins/flex-objects/blueprints.yaml
new file mode 100644
index 00000000..c99fbb3f
--- /dev/null
+++ b/dev/plugins/flex-objects/blueprints.yaml
@@ -0,0 +1,55 @@
+name: Flex Objects
+slug: flex-objects
+type: plugin
+version: 1.2.0
+description: Flex Objects plugin allows you to manage Flex Objects in Grav Admin.
+icon: list-alt
+author:
+ name: Trilby Media
+ email: hello@trilby.media
+homepage: https://github.com/trilbymedia/grav-plugin-flex-objects
+keywords: grav, plugin, crud, directory
+bugs: https://github.com/trilbymedia/grav-plugin-flex-objects/issues
+docs: https://github.com/trilbymedia/grav-plugin-flex-objects/blob/develop/README.md
+license: MIT
+
+dependencies:
+ - { name: grav, version: '>=1.7.32' }
+ - { name: form, version: '>=6.0.0' }
+
+form:
+ validation: loose
+ fields:
+ enabled:
+ type: toggle
+ label: PLUGIN_ADMIN.PLUGIN_STATUS
+ highlight: 1
+ default: 0
+ options:
+ 1: PLUGIN_ADMIN.ENABLED
+ 0: PLUGIN_ADMIN.DISABLED
+ validate:
+ type: bool
+ built_in_css:
+ type: toggle
+ label: PLUGIN_FLEX_OBJECTS.USE_BUILT_IN_CSS
+ highlight: 1
+ default: 1
+ options:
+ 1: PLUGIN_ADMIN.ENABLED
+ 0: PLUGIN_ADMIN.DISABLED
+ validate:
+ type: bool
+ extra_admin_twig_path:
+ type: text
+ label: PLUGIN_FLEX_OBJECTS.EXTRA_ADMIN_TWIG_PATH
+ validate:
+ required: true
+
+ directories:
+ type: flex-objects
+ label: PLUGIN_FLEX_OBJECTS.DIRECTORIES
+ array: true
+ ignore_empty: true
+ validate:
+ type: array
diff --git a/dev/plugins/flex-objects/blueprints/flex-objects.yaml b/dev/plugins/flex-objects/blueprints/flex-objects.yaml
new file mode 100644
index 00000000..965ed3ec
--- /dev/null
+++ b/dev/plugins/flex-objects/blueprints/flex-objects.yaml
@@ -0,0 +1,16 @@
+type: flex-objects
+
+form:
+ fields:
+
+ # Don't mess with this stuff below unless you know what you are doing
+ tools_section:
+ type: section
+ field_classes: overlay bottom
+
+ fields:
+ _post_entries_save:
+ label: PLUGIN_FLEX_OBJECTS.AFTER_SAVE
+ type: save-redirect
+ default: create-new
+
diff --git a/dev/plugins/flex-objects/blueprints/flex-objects/contacts.yaml b/dev/plugins/flex-objects/blueprints/flex-objects/contacts.yaml
new file mode 100644
index 00000000..4b1395c1
--- /dev/null
+++ b/dev/plugins/flex-objects/blueprints/flex-objects/contacts.yaml
@@ -0,0 +1,158 @@
+title: Contacts
+description: Simple contact directory with tags.
+type: flex-objects
+
+# Flex Configuration
+config:
+ # Administration Configuration
+ admin:
+ # Admin router (optional)
+ router:
+ path: '/contacts'
+
+ # Admin menu (optional)
+ menu:
+ list:
+ route: '/contacts'
+ title: Contacts
+ icon: fa-address-card-o
+ # Authorization to collection admin
+ authorize: ['admin.contacts.list', 'admin.super']
+ # Priority -10 .. 10 (highest goes up)
+ priority: 2
+
+ # Admin template type / folder
+ template: default
+
+ # Permissions
+ permissions:
+ # Primary permissions
+ admin.contacts:
+ type: crudpl
+ label: Contacts
+
+ # List view
+ list:
+ title: name
+ fields:
+ published:
+ field:
+ type: toggle
+ label: Publ
+ width: 8
+ last_name:
+ link: edit
+ first_name:
+ link: edit
+ email:
+ website:
+ tags:
+
+ # Edit View
+ edit:
+ title:
+ template: '{{ object.last_name ?? ''Last'' }}, {{ object.first_name ?? ''First Name'' }}'
+
+ # Preview View
+ preview:
+ enabled: false
+ route:
+ #template: '/plugins/flex-objects/directory:contacts'
+
+ # Data Export
+ export:
+ enabled: true
+ method: 'jsonSerialize'
+ formatter:
+ class: 'Grav\Framework\File\Formatter\YamlFormatter'
+ filename: 'contacts'
+
+ # Site Configuration
+ site:
+ templates:
+ collection:
+ # Lookup for the template layout files for collections of objects
+ paths:
+ - 'flex/{TYPE}/collection/{LAYOUT}{EXT}'
+ object:
+ # Lookup for the template layout files for objects
+ paths:
+ - 'flex/{TYPE}/object/{LAYOUT}{EXT}'
+ defaults:
+ # Default template {TYPE}; overridden by filename of this blueprint if template folder exists
+ type: contacts
+ # Default template {LAYOUT}; can be overridden in render calls (usually Twig in templates)
+ layout: default
+
+ # Data Configuration
+ data:
+ # Object class to be used, allowing custom methods for the object
+ object: 'Grav\Common\Flex\Types\Generic\GenericObject'
+ # Collection class to be used, allowing custom methods for the collections
+ collection: 'Grav\Common\Flex\Types\Generic\GenericCollection'
+ # Index class to be used, works as a quick database-like lookup index
+ index: 'Grav\Common\Flex\Types\Generic\GenericIndex'
+ storage:
+ # Storage class, use single file storage (does not support images and assets)
+ class: 'Grav\Framework\Flex\Storage\SimpleStorage'
+ options:
+ formatter:
+ # File formatter class, in this case the file is stored in markdown
+ class: 'Grav\Framework\File\Formatter\JsonFormatter'
+ # JSON file where all the objects will be stored
+ folder: user-data://flex-objects/contacts.json
+ search:
+ # Search options
+ options:
+ contains: 1
+ # Fields to be searched
+ fields:
+ - last_name
+ - first_name
+ - email
+
+form:
+ validation: loose
+
+ fields:
+ published:
+ type: toggle
+ label: Published
+ highlight: 1
+ default: 1
+ options:
+ 1: PLUGIN_ADMIN.YES
+ 0: PLUGIN_ADMIN.NO
+ validate:
+ type: bool
+ required: true
+
+ last_name:
+ type: text
+ label: Last Name
+ validate:
+ required: true
+
+ first_name:
+ type: text
+ label: First Name
+ validate:
+ required: true
+
+ email:
+ type: email
+ label: Email Address
+ validate:
+ required: true
+
+ website:
+ type: url
+ label: Website URL
+
+ tags:
+ type: selectize
+ size: large
+ label: Tags
+ classes: fancy
+ validate:
+ type: commalist
diff --git a/dev/plugins/flex-objects/blueprints/flex-objects/pages.yaml b/dev/plugins/flex-objects/blueprints/flex-objects/pages.yaml
new file mode 100644
index 00000000..3fc4fe61
--- /dev/null
+++ b/dev/plugins/flex-objects/blueprints/flex-objects/pages.yaml
@@ -0,0 +1,22 @@
+title: Pages (Admin)
+description: Manage your Grav Pages in the new Flex Pages admin. This allows you to use Flex Pages only in Admin plugin, while still using the old pages in the frontend.
+type: flex-objects
+
+extends@:
+ type: pages
+ context: blueprints://flex
+
+form:
+ fields:
+ lang:
+ type: hidden
+ value: ''
+
+ tabs:
+ fields:
+ security:
+ type: tab
+ title: PLUGIN_ADMIN.SECURITY
+ import@:
+ type: partials/security
+ context: blueprints://pages
diff --git a/dev/plugins/flex-objects/blueprints/flex-objects/user-accounts.yaml b/dev/plugins/flex-objects/blueprints/flex-objects/user-accounts.yaml
new file mode 100644
index 00000000..87671073
--- /dev/null
+++ b/dev/plugins/flex-objects/blueprints/flex-objects/user-accounts.yaml
@@ -0,0 +1,7 @@
+title: User Accounts (Admin)
+description: Manage your User Accounts in the new Flex Accounts admin. This allows you to use Flex Accounts only in Admin plugin, while still using the old users in the frontend.
+type: flex-objects
+
+extends@:
+ type: user-accounts
+ context: blueprints://flex
diff --git a/dev/plugins/flex-objects/blueprints/flex-objects/user-groups.yaml b/dev/plugins/flex-objects/blueprints/flex-objects/user-groups.yaml
new file mode 100644
index 00000000..896e0958
--- /dev/null
+++ b/dev/plugins/flex-objects/blueprints/flex-objects/user-groups.yaml
@@ -0,0 +1,7 @@
+title: User Groups (Admin)
+description: Manage your User Groups in the new Flex admin.
+type: flex-objects
+
+extends@:
+ type: user-groups
+ context: blueprints://flex
diff --git a/dev/plugins/flex-objects/classes/Admin/AdminController.php b/dev/plugins/flex-objects/classes/Admin/AdminController.php
new file mode 100644
index 00000000..24eac6ed
--- /dev/null
+++ b/dev/plugins/flex-objects/classes/Admin/AdminController.php
@@ -0,0 +1,1916 @@
+target;
+ $directory = $this->getDirectory($type);
+ if (!$directory) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ $object = $this->getObject();
+ $key = $this->id;
+
+ if ($object && $object->exists()) {
+ $event = new Event(
+ [
+ 'type' => $type,
+ 'key' => $key,
+ 'admin' => $this->admin,
+ 'flex' => $this->getFlex(),
+ 'directory' => $directory,
+ 'object' => $object,
+ 'data' => $this->data,
+ 'redirect' => $this->redirect
+ ]
+ );
+
+ try {
+ $this->grav->fireEvent('onFlexTask' . ucfirst($this->task), $event);
+ } catch (Exception $e) {
+ /** @var Debugger $debugger */
+ $debugger = $this->grav['debugger'];
+ $debugger->addException($e);
+ $this->admin->setMessage($e->getMessage(), 'error');
+ }
+
+ $redirect = $event['redirect'];
+ if ($redirect) {
+ $this->setRedirect($redirect);
+ }
+
+ return $event->isPropagationStopped();
+ }
+
+ return false;
+ }
+
+ /**
+ * Default action, onFlexAction[NAME] event.
+ *
+ * @return bool
+ */
+ public function actionDefault(): bool
+ {
+ $type = $this->target;
+ $directory = $this->getDirectory($type);
+ if (!$directory) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ $object = $this->getObject();
+ $key = $this->id;
+
+ if ($object && $object->exists()) {
+ $event = new Event(
+ [
+ 'type' => $type,
+ 'key' => $key,
+ 'admin' => $this->admin,
+ 'flex' => $this->getFlex(),
+ 'directory' => $directory,
+ 'object' => $object,
+ 'redirect' => $this->redirect
+ ]
+ );
+
+ try {
+ $this->grav->fireEvent('onFlexAction' . ucfirst($this->action), $event);
+ } catch (Exception $e) {
+ /** @var Debugger $debugger */
+ $debugger = $this->grav['debugger'];
+ $debugger->addException($e);
+ $this->admin->setMessage($e->getMessage(), 'error');
+ }
+
+ $redirect = $event['redirect'];
+ if ($redirect) {
+ $this->setRedirect($redirect);
+ }
+
+ return $event->isPropagationStopped();
+ }
+
+ return false;
+ }
+
+ /**
+ * Get datatable for list view.
+ *
+ * @return void
+ */
+ public function actionList(): void
+ {
+ $directory = $this->getDirectory();
+ if (!$directory) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ // Check authorization.
+ if (!$directory->isAuthorized('list', 'admin', $this->user)) {
+ throw new RuntimeException($this->admin::translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK') . ' list.', 403);
+ }
+
+ /** @var Uri $uri */
+ $uri = $this->grav['uri'];
+ if ($uri->extension() === 'json') {
+ $options = [
+ 'collection' => $this->getCollection(),
+ 'url' => $uri->path(),
+ 'page' => $uri->query('page'),
+ 'limit' => $uri->query('per_page'),
+ 'sort' => $uri->query('sort'),
+ 'search' => $uri->query('filter'),
+ 'filters' => $uri->query('filters'),
+ ];
+
+ $table = $this->getFlex()->getDataTable($directory, $options);
+
+ $response = $this->createJsonResponse($table->jsonSerialize());
+
+ $this->close($response);
+ }
+ }
+
+ /**
+ * Alias for Export action.
+ *
+ * @return void
+ */
+ public function actionCsv(): void
+ {
+ $this->actionExport();
+ }
+
+ /**
+ * Export action. Defaults to CVS export.
+ *
+ * @return void
+ */
+ public function actionExport(): void
+ {
+ $collection = $this->getCollection();
+ if (!$collection) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ // Check authorization.
+ $directory = $collection->getFlexDirectory();
+ $authorized = is_callable([$collection, 'isAuthorized'])
+ ? $collection->isAuthorized('read', 'admin', $this->user)
+ : $directory->isAuthorized('read', 'admin', $this->user);
+
+ if (!$authorized) {
+ throw new RuntimeException($this->admin::translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK') . ' read.', 403);
+ }
+
+ $config = $collection->getFlexDirectory()->getConfig('admin.views.export') ?? $collection->getFlexDirectory()->getConfig('admin.export') ?? false;
+ if (!$config || empty($config['enabled'])) {
+ throw new RuntimeException($this->admin::translate('Not Found'), 404);
+ }
+
+ $queryParams = $this->getRequest()->getQueryParams();
+ $type = $queryParams['type'] ?? null;
+ if ($type) {
+ $config = $config['options'][$type] ?? null;
+ if (!$config) {
+ throw new RuntimeException($this->admin::translate('Not Found'), 404);
+ }
+ }
+
+ $defaultFormatter = CsvFormatter::class;
+ $class = trim($config['formatter']['class'] ?? $defaultFormatter, '\\');
+ $method = $config['method'] ?? ($class === $defaultFormatter ? 'csvSerialize' : 'jsonSerialize');
+ if (!class_exists($class)) {
+ throw new RuntimeException($this->admin::translate('Formatter Not Found'), 404);
+ }
+ /** @var FileFormatterInterface $formatter */
+ $formatter = new $class($config['formatter']['options'] ?? []);
+ $filename = ($config['filename'] ?? 'export') . $formatter->getDefaultFileExtension();
+
+ if (method_exists($collection, $method)) {
+ $list = $type ? $collection->{$method}($type) : $collection->{$method}();
+ } else {
+ $list = [];
+
+ /** @var ObjectInterface $object */
+ foreach ($collection as $object) {
+ if (method_exists($object, $method)) {
+ $data = $object->{$method}();
+ if ($data) {
+ $list[] = $data;
+ }
+ } else {
+ $list[] = $object->jsonSerialize();
+ }
+ }
+ }
+
+ $response = new Response(
+ 200,
+ [
+ 'Content-Type' => $formatter->getMimeType(),
+ 'Content-Disposition' => 'inline; filename="' . $filename . '"',
+ 'Expires' => 'Mon, 26 Jul 1997 05:00:00 GMT',
+ 'Last-Modified' => gmdate('D, d M Y H:i:s') . ' GMT',
+ 'Cache-Control' => 'no-store, no-cache, must-revalidate',
+ 'Pragma' => 'no-cache',
+ ],
+ $formatter->encode($list)
+ );
+
+ $this->close($response);
+ }
+
+ /**
+ * Delete object from directory.
+ *
+ * @return ObjectInterface|bool
+ */
+ public function taskDelete()
+ {
+ $directory = $this->getDirectory();
+ if (!$directory) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ $object = null;
+ try {
+ $object = $this->getObject();
+ if ($object && $object->exists()) {
+ $authorized = $object instanceof FlexAuthorizeInterface
+ ? $object->isAuthorized('delete', 'admin', $this->user)
+ : $directory->isAuthorized('delete', 'admin', $this->user);
+
+ if (!$authorized) {
+ throw new RuntimeException($this->admin::translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK') . ' delete.', 403);
+ }
+
+ $object->delete();
+
+ $this->admin->setMessage($this->admin::translate('PLUGIN_FLEX_OBJECTS.CONTROLLER.TASK_DELETE_SUCCESS'));
+ if ($this->currentRoute->withoutGravParams()->getRoute() === $this->referrerRoute->getRoute()) {
+ $redirect = dirname($this->currentRoute->withoutGravParams()->toString(true));
+ } else {
+ $redirect = $this->referrerRoute->toString(true);
+ }
+
+ $this->setRedirect($redirect);
+
+ $this->grav->fireEvent('onFlexAfterDelete', new Event(['type' => 'flex', 'object' => $object]));
+ }
+ } catch (RuntimeException $e) {
+ $this->admin->setMessage($this->admin::translate(['PLUGIN_FLEX_OBJECTS.CONTROLLER.TASK_DELETE_FAILURE', $e->getMessage()]), 'error');
+
+ $this->setRedirect($this->referrerRoute->toString(true), 302);
+ }
+
+ return $object !== null;
+ }
+
+ /**
+ * Create a new empty folder (from modal).
+ *
+ * TODO: Move pages specific logic
+ *
+ * @return void
+ */
+ public function taskSaveNewFolder(): void
+ {
+ $directory = $this->getDirectory();
+ if (!$directory) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ $collection = $directory->getIndex();
+ if (!($collection instanceof PageCollection || $collection instanceof PageIndex)) {
+ throw new RuntimeException('Task saveNewFolder works only for pages', 400);
+ }
+
+ $data = $this->data;
+ $route = trim($data['route'] ?? '', '/');
+
+ // TODO: Folder name needs to be validated! However we test against /="' as they are dangerous characters.
+ $folder = mb_strtolower($data['folder'] ?? '');
+ if ($folder === '' || preg_match('![="\']!u', $folder) !== 0) {
+ throw new RuntimeException('Creating folder failed, bad folder name', 400);
+ }
+
+ $parent = $route ? $directory->getObject($route) : $collection->getRoot();
+ if (!$parent instanceof PageObject) {
+ throw new RuntimeException('Creating folder failed, bad parent route', 400);
+ }
+
+ if (!$parent->isAuthorized('create', 'admin', $this->user)) {
+ throw new RuntimeException($this->admin::translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK') . ' create.', 403);
+ }
+
+ $path = $parent->getFlexDirectory()->getStorageFolder($parent->getStorageKey());
+ if (!$path) {
+ throw new RuntimeException('Creating folder failed, bad parent storage path', 400);
+ }
+
+ // Ordering
+ $orders = $parent->children()->visible()->getProperty('order');
+ $maxOrder = 0;
+ foreach ($orders as $order) {
+ $maxOrder = max($maxOrder, (int)$order);
+ }
+
+ $orderOfNewFolder = $maxOrder ? sprintf('%02d.', $maxOrder+1) : '';
+ $new_path = $path . '/' . $orderOfNewFolder . $folder;
+
+ /** @var UniformResourceLocator $locator */
+ $locator = $this->grav['locator'];
+ if ($locator->isStream($new_path)) {
+ $new_path = $locator->findResource($new_path, true, true);
+ } else {
+ $new_path = GRAV_ROOT . '/' . $new_path;
+ }
+
+ Folder::create($new_path);
+ Cache::clearCache('invalidate');
+ $directory->getCache('index')->clear();
+
+ $this->grav->fireEvent('onAdminAfterSaveAs', new Event(['path' => $new_path]));
+
+ $this->admin->setMessage($this->admin::translate('PLUGIN_FLEX_OBJECTS.CONTROLLER.TASK_NEW_FOLDER_SUCCESS'));
+
+ $this->setRedirect($this->referrerRoute->toString(true));
+ }
+
+ /**
+ * Create a new object (from modal).
+ *
+ * TODO: Move pages specific logic
+ *
+ * @return void
+ */
+ public function taskContinue(): void
+ {
+ $directory = $this->getDirectory();
+ if (!$directory) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ if ($directory->getObject() instanceof PageInterface) {
+ $this->continuePages($directory);
+ } else {
+ $this->continue($directory);
+ }
+ }
+
+ protected function continue(FlexDirectoryInterface $directory): void
+ {
+ $config = $directory->getConfig('admin');
+ $supported = !empty($config['modals']['add']);
+ if (!$supported) {
+ throw new RuntimeException('Task continue is not supported by the type', 400);
+ }
+
+ $authorized = $directory->isAuthorized('create', 'admin', $this->user);
+ if (!$authorized) {
+ $this->setRedirect($this->referrerRoute->toString(true));
+
+ throw new RuntimeException($this->admin::translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK') . ' add.', 403);
+ }
+
+ $this->object = $directory->createObject($this->data, '');
+
+ // Reset form, we are starting from scratch.
+ /** @var FlexForm $form */
+ $form = $this->object->getForm('', ['reset' => true]);
+
+ /** @var FlexFormFlash $flash */
+ $flash = $form->getFlash();
+ $flash->setUrl($this->getFlex()->adminRoute($this->object));
+ $flash->save(true);
+
+ $this->setRedirect($flash->getUrl());
+ }
+
+ /**
+ * Create a new page (from modal).
+ *
+ * TODO: Move pages specific logic
+ *
+ * @return void
+ */
+ protected function continuePages(FlexDirectoryInterface $directory): void
+ {
+
+ $this->data['route'] = '/' . trim($this->data['route'] ?? '', '/');
+ $route = trim($this->data['route'], '/');
+
+ if ($route) {
+ $parent = $directory->getObject($route);
+ } else {
+ // Use root page or fail back to directory auth.
+ $index = $directory->getIndex();
+ $parent = $index->getRoot() ?? $directory;
+ }
+ $authorized = $parent instanceof FlexAuthorizeInterface
+ ? $parent->isAuthorized('create', 'admin', $this->user)
+ : $directory->isAuthorized('create', 'admin', $this->user);
+
+ if (!$authorized) {
+ $this->setRedirect($this->referrerRoute->toString(true));
+
+ throw new RuntimeException($this->admin::translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK') . ' add.', 403);
+ }
+
+ $folder = $this->data['folder'] ?? null;
+ $title = $this->data['title'] ?? null;
+ if ($title) {
+ $this->data['header']['title'] = $this->data['title'];
+ unset($this->data['title']);
+ }
+ if (null !== $folder && 0 === strpos($folder, '@slugify-')) {
+ $folder = \Grav\Plugin\Admin\Utils::slug($this->data[substr($folder, 9)] ?? '');
+ }
+ if (!$folder) {
+ $folder = \Grav\Plugin\Admin\Utils::slug($title) ?: '';
+ }
+ $folder = ltrim($folder, '_');
+ if ($folder === '' || mb_strpos($folder, '/') !== false) {
+ throw new RuntimeException('Creating page failed: bad folder name', 400);
+ }
+
+ if (!isset($this->data['name'])) {
+ // Get default child type.
+ $this->data['name'] = $parent->header()->child_type ?? $parent->getBlueprint()->child_type ?? 'default';
+ }
+ if (strpos($this->data['name'], 'modular/') === 0) {
+ $this->data['header']['body_classes'] = 'modular';
+ $folder = '_' . $folder;
+ }
+ $this->data['folder'] = $folder;
+
+ unset($this->data['blueprint']);
+ $key = trim("{$route}/{$folder}", '/');
+ if ($directory->getObject($key)) {
+ throw new RuntimeException("Page '/{$key}' already exists!", 403);
+ }
+
+ $max = 0;
+ if (isset($this->data['visible'])) {
+ $auto = $this->data['visible'] === '';
+ $visible = (bool)($this->data['visible'] ?? false);
+ unset($this->data['visible']);
+
+ // Empty string on visible means auto.
+ if ($auto || $visible) {
+ $children = $parent ? $parent->children()->visible() : [];
+ $max = $auto ? 0 : 1;
+ foreach ($children as $child) {
+ $max = max($max, (int)$child->order());
+ }
+ }
+
+ $this->data['order'] = $max ? $max + 1 : false;
+ }
+
+ $this->data['lang'] = $this->getLanguage();
+
+ $header = $this->data['header'] ?? [];
+ $this->grav->fireEvent('onAdminCreatePageFrontmatter', new Event(['header' => &$header,
+ 'data' => $this->data]));
+
+ $formatter = new YamlFormatter();
+ $this->data['frontmatter'] = $formatter->encode($header);
+ $this->data['header'] = $header;
+
+ $this->object = $directory->createObject($this->data, $key);
+
+ // Reset form, we are starting from scratch.
+ /** @var FlexForm $form */
+ $form = $this->object->getForm('', ['reset' => true]);
+
+ /** @var FlexFormFlash $flash */
+ $flash = $form->getFlash();
+ $flash->setUrl($this->getFlex()->adminRoute($this->object));
+ $flash->save(true);
+
+ // Store the name and route of a page, to be used pre-filled defaults of the form in the future
+ $this->admin->session()->lastPageName = $this->data['name'] ?? '';
+ $this->admin->session()->lastPageRoute = $this->data['route'] ?? '';
+
+ $this->setRedirect($flash->getUrl());
+ }
+
+ /**
+ * Save page as a new copy.
+ *
+ * Route: /pages
+ *
+ * @return bool True if the action was performed.
+ * @throws RuntimeException
+ */
+ protected function taskCopy(): bool
+ {
+ try {
+ $directory = $this->getDirectory();
+ if (!$directory) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ $object = $this->getObject();
+ if (!$object || !$object->exists() || !is_callable([$object, 'createCopy'])) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ // Pages are a special case.
+ $parent = $object instanceof PageInterface ? $object->parent() : $object;
+ $authorized = $parent instanceof FlexAuthorizeInterface
+ ? $parent->isAuthorized('create', 'admin', $this->user)
+ : $directory->isAuthorized('create', 'admin', $this->user);
+
+ if (!$authorized || !$parent) {
+ throw new RuntimeException($this->admin::translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK') . ' copy.',
+ 403);
+ }
+
+ if ($object instanceof PageInterface && is_array($this->data)) {
+ $data = $this->data;
+ $blueprints = $this->admin->blueprints('admin/pages/move');
+ $blueprints->validate($data);
+ $data = $blueprints->filter($data, true, true);
+ // Hack for pages
+ $data['name'] = $data['name'] ?? $object->template();
+ $data['ordering'] = (int)$object->order() > 0;
+ $data['order'] = null;
+ if (isset($data['title'])) {
+ $data['header']['title'] = $data['title'];
+ unset($data['title']);
+ }
+
+ $object->order(false);
+ $object->update($data);
+ }
+
+ $object = $object->createCopy();
+
+ $this->admin->setMessage($this->admin::translate('PLUGIN_FLEX_OBJECTS.CONTROLLER.TASK_COPY_SUCCESS'));
+
+ $this->setRedirect($this->getFlex()->adminRoute($object));
+
+ } catch (RuntimeException $e) {
+ $this->admin->setMessage($this->admin::translate(['PLUGIN_FLEX_OBJECTS.CONTROLLER.TASK_COPY_FAILURE', $e->getMessage()]), 'error');
+ $this->setRedirect($this->referrerRoute->toString(true), 302);
+ }
+
+ return true;
+ }
+
+ /**
+ * $data['route'] = $this->grav['uri']->param('route');
+ * $data['sortby'] = $this->grav['uri']->param('sortby', null);
+ * $data['filters'] = $this->grav['uri']->param('filters', null);
+ * $data['page'] $this->grav['uri']->param('page', true);
+ * $data['base'] = $this->grav['uri']->param('base');
+ * $initial = (bool) $this->grav['uri']->param('initial');
+ *
+ * @return ResponseInterface
+ * @throws RequestException
+ * @TODO: Move pages specific logic
+ */
+ protected function actionGetLevelListing(): ResponseInterface
+ {
+ /** @var PageInterface|FlexObjectInterface $object */
+ $object = $this->getObject($this->id ?? '');
+
+ if (!$object || !method_exists($object, 'getLevelListing')) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ $request = $this->getRequest();
+ $data = $request->getParsedBody();
+
+ if (!isset($data['field'])) {
+ throw new RequestException($request, 'Bad Request', 400);
+ }
+
+ // Base64 decode the route
+ $data['route'] = isset($data['route']) ? base64_decode($data['route']) : null;
+ $data['filters'] = json_decode($data['filters'] ?? '{}', true, 512, JSON_THROW_ON_ERROR) + ['type' => ['root', 'dir']];
+
+ $initial = $data['initial'] ?? null;
+ if ($initial) {
+ $data['leaf_route'] = $data['route'];
+ $data['route'] = null;
+ $data['level'] = 1;
+ }
+
+ [$status, $message, $response,$route] = $object->getLevelListing($data);
+
+ $json = [
+ 'status' => $status,
+ 'message' => $this->admin::translate($message ?? 'PLUGIN_ADMIN.NO_ROUTE_PROVIDED'),
+ 'route' => $route,
+ 'initial' => (bool)$initial,
+ 'data' => array_values($response)
+ ];
+
+ return $this->createJsonResponse($json, 200);
+ }
+
+ /**
+ * $data['route'] = $this->grav['uri']->param('route');
+ * $data['sortby'] = $this->grav['uri']->param('sortby', null);
+ * $data['filters'] = $this->grav['uri']->param('filters', null);
+ * $data['page'] $this->grav['uri']->param('page', true);
+ * $data['base'] = $this->grav['uri']->param('base');
+ * $initial = (bool) $this->grav['uri']->param('initial');
+ *
+ * @return ResponseInterface
+ * @throws RequestException
+ * @TODO: Move pages specific logic
+ */
+ protected function actionListLevel(): ResponseInterface
+ {
+ try {
+ /** @var PageInterface|FlexObjectInterface $object */
+ $object = $this->getObject('');
+
+ if (!$object || !method_exists($object, 'getLevelListing')) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ $directory = $object->getFlexDirectory();
+ if (!$directory->isAuthorized('list', 'admin', $this->user)) {
+ throw new RuntimeException($this->admin::translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK') . ' getLevelListing.',
+ 403);
+ }
+
+ $request = $this->getRequest();
+ $data = $request->getParsedBody();
+
+ // Base64 decode the route
+ $data['route'] = isset($data['route']) ? base64_decode($data['route']) : null;
+ $data['filters'] = ($data['filters'] ?? []) + ['type' => ['dir']];
+ $data['lang'] = $this->getLanguage();
+
+ // Display root if permitted.
+ $action = $directory->getConfig('admin.views.configure.authorize') ?? $directory->getConfig('admin.configure.authorize') ?? 'admin.super';
+ if ($this->user->authorize($action)) {
+ $data['filters']['type'][] = 'root';
+ }
+
+ $initial = $data['initial'] ?? null;
+ if ($initial) {
+ $data['leaf_route'] = $data['route'];
+ $data['route'] = null;
+ $data['level'] = 1;
+ }
+
+ [$status, $message, $response, $route] = $object->getLevelListing($data);
+
+ $json = [
+ 'status' => $status,
+ 'message' => $this->admin::translate($message ?? 'PLUGIN_ADMIN.NO_ROUTE_PROVIDED'),
+ 'route' => $route,
+ 'initial' => (bool)$initial,
+ 'data' => array_values($response)
+ ];
+ } catch (Exception $e) {
+ return $this->createErrorResponse($e);
+ }
+
+ return $this->createJsonResponse($json, 200);
+ }
+
+ /**
+ * @return ResponseInterface
+ */
+ public function taskReset(): ResponseInterface
+ {
+ $key = $this->id;
+
+ $object = $this->getObject($key);
+ if (!$object) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ /** @var FlexForm $form */
+ $form = $this->getForm($object);
+ $form->getFlash()->delete();
+
+ return $this->createRedirectResponse($this->referrerRoute->toString(true));
+ }
+
+ /**
+ * @return bool
+ */
+ public function taskSaveas(): bool
+ {
+ return $this->taskSave();
+ }
+
+ /**
+ * @return bool
+ */
+ public function taskSave(): bool
+ {
+ $directory = $this->getDirectory();
+ if (!$directory) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ $key = $this->id;
+
+ try {
+ $object = $this->getObject($key);
+ if (!$object) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ $authorized = $object instanceof FlexAuthorizeInterface
+ ? $object->isAuthorized('save', 'admin', $this->user)
+ : $directory->isAuthorized($object->exists() ? 'update' : 'create', 'admin', $this->user);
+
+ if (!$authorized) {
+ throw new RuntimeException($this->admin::translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK') . ' save.',
+ 403);
+ }
+
+ /** @var ServerRequestInterface $request */
+ $request = $this->grav['request'];
+
+ /** @var FlexForm $form */
+ $form = $this->getForm($object);
+
+ $callable = function (array $data, array $files, FlexObject $object) use ($form) {
+ if (method_exists($object, 'storeOriginal')) {
+ $object->storeOriginal();
+ }
+ $object->update($data, $files);
+
+ // Support for expert mode.
+ if (str_ends_with($form->getId(), '-raw') && isset($data['frontmatter']) && is_callable([$object, 'frontmatter'])) {
+ if (!$this->user->authorize('admin.super')) {
+ throw new RuntimeException($this->admin::translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK') . ' save raw.',
+ 403);
+ }
+ $object->frontmatter($data['frontmatter']);
+ unset($data['frontmatter']);
+ }
+
+ if (is_callable([$object, 'check'])) {
+ $object->check($this->user);
+ }
+
+ $object->save();
+ };
+
+ $form->setSubmitMethod($callable);
+ $form->handleRequest($request);
+ $error = $form->getError();
+ $errors = $form->getErrors();
+ if ($errors) {
+ if ($error) {
+ $this->admin->setMessage($error, 'error');
+ }
+
+ foreach ($errors as $field => $list) {
+ foreach ((array)$list as $message) {
+ $this->admin->setMessage($message, 'error');
+ }
+ }
+ throw new RuntimeException('Form validation failed, please check your input');
+ }
+ if ($error) {
+ throw new RuntimeException($error);
+ }
+
+ $object = $form->getObject();
+ $objectKey = $object->getKey();
+
+ $this->admin->setMessage($this->admin::translate('PLUGIN_FLEX_OBJECTS.CONTROLLER.TASK_SAVE_SUCCESS'));
+
+ // Set route to point to the current page.
+ if (!$this->redirect) {
+ $postAction = $request->getParsedBody()['_post_entries_save'] ?? 'edit';
+ if ($postAction === 'create-new') {
+ // Create another.
+ $route = $this->referrerRoute->withGravParam('action', null)->withGravParam('', 'add');
+ } elseif ($postAction === 'list') {
+ // Back to listing.
+ $route = $this->currentRoute;
+
+ // Remove :add action.
+ $actionAdd = $key === '' || $route->getGravParam('action') === 'add' || $route->getGravParam('') === 'add';
+ if ($actionAdd) {
+ $route = $route->withGravParam('action', null)->withGravParam('', null);
+ }
+
+ $len = ($key === '' ? 0 : -1) - \substr_count($key, '/');
+ if ($len) {
+ $route = $route->withRoute($route->getRoute(0, $len));
+ }
+ } else {
+ // Back to edit.
+ $route = $this->currentRoute;
+ $isRoot = $object instanceof PageInterface && $object->root();
+ $hasKeyChanged = !$isRoot && $key !== $objectKey;
+
+ // Remove :add action.
+ $actionAdd = $key === '' || $route->getGravParam('action') === 'add' || $route->getGravParam('') === 'add';
+ if ($actionAdd) {
+ $route = $route->withGravParam('action', null)->withGravParam('', null);
+ }
+
+ if ($hasKeyChanged) {
+ if ($key === '') {
+ // Append new key.
+ $path = $route->getRoute() . '/' . $objectKey;
+ } elseif ($objectKey === '') {
+ // Remove old key.
+ $path = preg_replace('|/' . preg_quote($key, '|') . '$|u', '/', $route->getRoute());
+ } else {
+ // Replace old key with new key.
+ $path = preg_replace('|/' . preg_quote($key, '|') . '$|u', '/' . $objectKey, $route->getRoute());
+ }
+ $route = $route->withRoute($path);
+ }
+
+ // Make sure we're using the correct language.
+ $lang = null;
+ if ($object instanceof FlexTranslateInterface) {
+ $lang = $object->getLanguage();
+ $route = $route->withLanguage($lang);
+ }
+ }
+
+ $this->setRedirect($route->toString(true));
+ }
+
+ $this->grav->fireEvent('onFlexAfterSave', new Event(['type' => 'flex', 'object' => $object]));
+ } catch (RuntimeException $e) {
+ $this->admin->setMessage($this->admin::translate(['PLUGIN_FLEX_OBJECTS.CONTROLLER.TASK_SAVE_FAILURE', $e->getMessage()]), 'error');
+
+ if (isset($object, $form)) {
+ $data = $form->getData();
+ if (null !== $data) {
+ $flash = $form->getFlash();
+ $flash->setObject($object);
+ if ($data instanceof Data) {
+ $flash->setData($data->toArray());
+ }
+ $flash->save();
+ }
+ }
+
+ // $this->setRedirect($this->referrerRoute->withQueryParam('uid', $flash->getUniqueId())->toString(true), 302);
+ $this->setRedirect($this->referrerRoute->toString(true), 302);
+ }
+
+ return true;
+ }
+
+ /**
+ * @return bool
+ */
+ public function taskConfigure(): bool
+ {
+ $directory = $this->getDirectory();
+ if (!$directory) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ try {
+ $config = $directory->getConfig('admin.views.configure.authorize') ?? $directory->getConfig('admin.configure.authorize') ?? 'admin.super';
+ if (!$this->user->authorize($config)) {
+ throw new RuntimeException($this->admin::translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK') . ' configure.', 403);
+ }
+
+ /** @var ServerRequestInterface $request */
+ $request = $this->grav['request'];
+
+ /** @var FlexForm $form */
+ $form = $this->getDirectoryForm();
+ $form->handleRequest($request);
+ $error = $form->getError();
+ $errors = $form->getErrors();
+ if ($errors) {
+ if ($error) {
+ $this->admin->setMessage($error, 'error');
+ }
+
+ foreach ($errors as $field => $list) {
+ foreach ((array)$list as $message) {
+ $this->admin->setMessage($message, 'error');
+ }
+ }
+ throw new RuntimeException('Form validation failed, please check your input');
+ }
+ if ($error) {
+ throw new RuntimeException($error);
+ }
+
+ $this->admin->setMessage($this->admin::translate('PLUGIN_FLEX_OBJECTS.CONTROLLER.TASK_CONFIGURE_SUCCESS'));
+
+ if (!$this->redirect) {
+ $this->referrerRoute = $this->currentRoute;
+
+ $this->setRedirect($this->referrerRoute->toString(true));
+ }
+ } catch (RuntimeException $e) {
+ $this->admin->setMessage($this->admin::translate(['PLUGIN_FLEX_OBJECTS.CONTROLLER.TASK_CONFIGURE_FAILURE', $e->getMessage()]), 'error');
+ $this->setRedirect($this->referrerRoute->toString(true), 302);
+ }
+
+ return true;
+ }
+
+ /**
+ * @return bool
+ */
+ public function taskMediaList(): bool
+ {
+ $directory = $this->getDirectory();
+ if (!$directory) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ try {
+ $response = $this->forwardMediaTask('action', 'media.list');
+
+ $this->admin->json_response = json_decode($response->getBody(), false, 512, JSON_THROW_ON_ERROR);
+ } catch (Exception $e) {
+ die($e->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * @return bool
+ */
+ public function taskMediaUpload(): bool
+ {
+ $directory = $this->getDirectory();
+ if (!$directory) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ try {
+ $response = $this->forwardMediaTask('task', 'media.upload');
+
+ $this->admin->json_response = json_decode($response->getBody(), false, 512, JSON_THROW_ON_ERROR);
+ } catch (Exception $e) {
+ die($e->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * @return bool
+ */
+ public function taskMediaDelete(): bool
+ {
+ $directory = $this->getDirectory();
+ if (!$directory) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ try {
+ $response = $this->forwardMediaTask('task', 'media.delete');
+
+ $this->admin->json_response = json_decode($response->getBody(), false, 512, JSON_THROW_ON_ERROR);
+ } catch (Exception $e) {
+ die($e->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * @return bool
+ */
+ public function taskListmedia(): bool
+ {
+ return $this->taskMediaList();
+ }
+
+ /**
+ * @return bool
+ */
+ public function taskAddmedia(): bool
+ {
+ $directory = $this->getDirectory();
+ if (!$directory) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ try {
+ $response = $this->forwardMediaTask('task', 'media.copy');
+
+ $this->admin->json_response = json_decode($response->getBody(), false, 512, JSON_THROW_ON_ERROR);
+ } catch (Exception $e) {
+ die($e->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * @return bool
+ */
+ public function taskDelmedia(): bool
+ {
+ $directory = $this->getDirectory();
+ if (!$directory) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ try {
+ $response = $this->forwardMediaTask('task', 'media.remove');
+
+ $this->admin->json_response = json_decode($response->getBody(), false, 512, JSON_THROW_ON_ERROR);
+ } catch (Exception $e) {
+ die($e->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * @return bool
+ * @deprecated Do not use
+ */
+ public function taskFilesUpload(): bool
+ {
+ throw new RuntimeException('Task filesUpload should not be called!');
+ }
+
+ /**
+ * @param string|null $filename
+ * @return bool
+ * @deprecated Do not use
+ */
+ public function taskRemoveMedia($filename = null): bool
+ {
+ throw new RuntimeException('Task removeMedia should not be called!');
+ }
+
+ /**
+ * @return bool
+ */
+ public function taskGetFilesInFolder(): bool
+ {
+ $directory = $this->getDirectory();
+ if (!$directory) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ try {
+ $response = $this->forwardMediaTask('action', 'media.picker');
+
+ $this->admin->json_response = json_decode($response->getBody(), false, 512, JSON_THROW_ON_ERROR);
+ } catch (Exception $e) {
+ $this->admin->json_response = ['success' => false, 'error' => $e->getMessage()];
+ }
+
+ return true;
+ }
+
+ /**
+ * @param string $type
+ * @param string $name
+ * @return ResponseInterface
+ */
+ protected function forwardMediaTask(string $type, string $name): ResponseInterface
+ {
+ $route = Uri::getCurrentRoute()->withGravParam('task', null)->withGravParam($type, $name);
+ $object = $this->getObject();
+
+ /** @var ServerRequest $request */
+ $request = $this->grav['request'];
+ $request = $request
+ ->withAttribute('type', $this->target)
+ ->withAttribute('key', $this->id)
+ ->withAttribute('storage_key', $object && $object->exists() ? $object->getStorageKey() : null)
+ ->withAttribute('route', $route)
+ ->withAttribute('forwarded', true)
+ ->withAttribute('object', $object);
+
+ $controller = new MediaController();
+ $controller->setUser($this->user);
+
+ return $controller->handle($request);
+ }
+
+ /**
+ * @return Flex
+ */
+ protected function getFlex(): Flex
+ {
+ return Grav::instance()['flex_objects'];
+ }
+
+ public static function getInstance(): ?AdminController
+ {
+ return self::$instance;
+ }
+
+ /**
+ * AdminController constructor.
+ */
+ public function __construct()
+ {
+ self::$instance = $this;
+
+ $this->grav = Grav::instance();
+ $this->admin = $this->grav['admin'];
+ $this->user = $this->admin->user;
+
+ $this->active = false;
+
+ // Controller can only be run in admin.
+ if (!Utils::isAdminPlugin()) {
+ return;
+ }
+
+ [, $location, $target] = $this->grav['admin']->getRouteDetails();
+ if (!$location) {
+ return;
+ }
+ $target = \is_string($target) ? urldecode($target) : null;
+
+ /** @var Uri $uri */
+ $uri = $this->grav['uri'];
+ $routeObject = $uri::getCurrentRoute();
+ $routeObject->withExtension('');
+
+ $routes = $this->getAdminRoutes();
+
+ // Match route to the flex directory.
+ $path = '/' . ($target ? $location . '/' . $target : $location) . '/';
+ $test = $routes[$path] ?? null;
+
+ $directory = null;
+ if ($test) {
+ $directory = $test['directory'];
+ $location = trim($path, '/');
+ $target = '';
+ } else {
+ krsort($routes);
+ foreach ($routes as $route => $test) {
+ if (strpos($path, $route) === 0) {
+ $directory = $test['directory'];
+ $location = trim($route, '/');
+ $target = trim(substr($path, strlen($route)), '/');
+ break;
+ }
+ $test = null;
+ }
+ }
+
+ if ($directory) {
+ // Redirect aliases.
+ if (isset($test['redirect'])) {
+ $route = $test['redirect'];
+ // If directory route starts with alias and path continues, stop.
+ if ($target && strpos($route, $location) === 0) {
+ // We are not in a directory.
+ return;
+ }
+ $redirect = '/' . $route . ($target ? '/' . $target : '');
+ $this->setRedirect($redirect, 302);
+ $this->redirect();
+ } elseif (isset($test['action'])) {
+ $routeObject = $routeObject->withGravParam('', $test['action']);
+ }
+
+ $id = $target;
+ $target = $directory->getFlexType();
+ } else {
+ // We are not in a directory.
+ if ($location !== 'flex-objects') {
+ return;
+ }
+ $array = explode('/', $target, 2);
+ $target = array_shift($array) ?: null;
+ $id = array_shift($array) ?: null;
+ }
+
+ // Post
+ $post = $_POST;
+ if (isset($post['data'])) {
+ $this->data = $this->getPost($post['data']);
+ unset($post['data']);
+ }
+
+ // Task
+ $task = $this->grav['task'];
+ if ($task) {
+ $this->task = $task;
+ }
+
+ $this->post = $this->getPost($post);
+ $this->location = 'flex-objects';
+ $this->target = $target;
+ $this->id = $this->post['id'] ?? $id;
+ $this->action = $this->post['action'] ?? $uri->param('action', null) ?? $uri->param('', null) ?? $routeObject->getGravParam('');
+ $this->active = true;
+ $this->currentRoute = $uri::getCurrentRoute();
+ $this->route = $routeObject;
+
+ $base = $this->grav['pages']->base();
+ if ($base) {
+ // Fix referrer for sub-folder multi-site setups.
+ $referrer = preg_replace('`^' . $base . '`', '', $uri->referrer());
+ } else {
+ $referrer = $uri->referrer();
+ }
+ $this->referrerRoute = $referrer ? RouteFactory::createFromString($referrer) : $this->currentRoute;
+ }
+
+ public function getInfo(): array
+ {
+ if (!$this->isActive()) {
+ return [];
+ }
+
+ $class = AdminController::class;
+ return [
+ 'controller' => [
+ 'name' => $this->location,
+ 'instance' => [$class, 'getInstance']
+ ],
+ 'location' => $this->location,
+ 'type' => $this->target,
+ 'key' => $this->id,
+ 'action' => $this->action,
+ 'task' => $this->task
+ ];
+ }
+
+ /**
+ * Performs a task or action on a post or target.
+ *
+ * @return ResponseInterface|bool|null
+ */
+ public function execute()
+ {
+ if (!$this->user->authorize('admin.login')) {
+ // TODO: improve
+ return false;
+ }
+
+ $params = [];
+
+ $event = new Event(
+ [
+ 'type' => &$this->target,
+ 'key' => &$this->id,
+ 'directory' => &$this->directory,
+ 'collection' => &$this->collection,
+ 'object' => &$this->object
+ ]
+ );
+ $this->grav->fireEvent("flex.{$this->target}.admin.route", $event);
+
+ if ($this->isFormSubmit()) {
+ $form = $this->getForm();
+ $this->nonce_name = $form->getNonceName();
+ $this->nonce_action = $form->getNonceAction();
+ }
+
+ // Handle Task & Action
+ if ($this->task) {
+ // validate nonce
+ if (!$this->validateNonce()) {
+ $e = new RequestException($this->getRequest(), 'Page Expired', 400);
+
+ $this->close($this->createErrorResponse($e));
+ }
+ $method = $this->task_prefix . ucfirst(str_replace('.', '', $this->task));
+
+ if (!method_exists($this, $method)) {
+ $method = $this->task_prefix . 'Default';
+ }
+
+ } elseif ($this->target) {
+ if (!$this->action) {
+ if ($this->id) {
+ $this->action = 'edit';
+ $params[] = $this->id;
+ } else {
+ $this->action = 'list';
+ }
+ }
+ $method = 'action' . ucfirst(strtolower(str_replace('.', '', $this->action)));
+
+ if (!method_exists($this, $method)) {
+ $method = $this->action_prefix . 'Default';
+ }
+ } else {
+ return null;
+ }
+
+ if (!method_exists($this, $method)) {
+ return null;
+ }
+
+ try {
+ $response = $this->{$method}(...$params);
+ } catch (RequestException $e) {
+ $response = $this->createErrorResponse($e);
+ } catch (RuntimeException $e) {
+ // If task fails to run, redirect back to the previous page and display the error message.
+ if ($this->task && !$this->redirect) {
+ $this->setRedirect($this->referrerRoute->toString(true));
+ }
+ $response = null;
+ $this->setMessage($e->getMessage(), 'error');
+ }
+
+ if ($response instanceof ResponseInterface) {
+ $this->close($response);
+ }
+
+ // Grab redirect parameter.
+ $redirect = $this->post['_redirect'] ?? null;
+ unset($this->post['_redirect']);
+
+ // Redirect if requested.
+ if ($redirect) {
+ $this->setRedirect($redirect);
+ }
+
+ return $response;
+ }
+
+ /**
+ * @return bool
+ */
+ public function isFormSubmit(): bool
+ {
+ return (bool)($this->post['__form-name__'] ?? null);
+ }
+
+ /**
+ * @param FlexObjectInterface|null $object
+ * @return FlexFormInterface
+ */
+ public function getForm(FlexObjectInterface $object = null): FlexFormInterface
+ {
+ $object = $object ?? $this->getObject();
+ if (!$object) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ $formName = $this->post['__form-name__'] ?? '';
+ $name = '';
+ $uniqueId = null;
+
+ // Get the form name. This defines the blueprint which is being used.
+ if (strpos($formName, '-')) {
+ $parts = explode('-', $formName);
+ $prefix = $parts[0] ?? '';
+ $type = $parts[1] ?? '';
+ if ($prefix === 'flex' && $type === $object->getFlexType()) {
+ $name = $parts[2] ?? '';
+ if ($name === 'object') {
+ $name = '';
+ }
+ $uniqueId = $this->post['__unique_form_id__'] ?? null;
+ }
+ }
+
+ $options = [
+ 'unique_id' => $uniqueId,
+ ];
+
+ return $object->getForm($name, $options);
+ }
+
+ /**
+ * @param FlexDirectoryInterface|null $directory
+ * @return FlexFormInterface
+ */
+ public function getDirectoryForm(FlexDirectoryInterface $directory = null): FlexFormInterface
+ {
+ $directory = $directory ?? $this->getDirectory();
+ if (!$directory) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ $formName = $this->post['__form-name__'] ?? '';
+ $name = '';
+ $uniqueId = null;
+
+ // Get the form name. This defines the blueprint which is being used.
+ if (strpos($formName, '-')) {
+ $parts = explode('-', $formName);
+ $prefix = $parts[0] ?? '';
+ $type = $parts[1] ?? '';
+ if ($prefix === 'flex_conf' && $type === $directory->getFlexType()) {
+ $name = $parts[2] ?? '';
+ $uniqueId = $this->post['__unique_form_id__'] ?? null;
+ }
+ }
+
+ $options = [
+ 'unique_id' => $uniqueId,
+ ];
+
+ return $directory->getDirectoryForm($name, $options);
+ }
+
+ /**
+ * @param string|null $key
+ * @return FlexObjectInterface|null
+ */
+ public function getObject(string $key = null): ?FlexObjectInterface
+ {
+ if (null === $this->object) {
+ $key = $key ?? $this->id;
+ $object = false;
+
+ $directory = $this->getDirectory();
+ if ($directory) {
+ // FIXME: hack for pages.
+ if ($key === '_root') {
+ $index = $directory->getIndex();
+ if ($index instanceof PageIndex) {
+ $object = $index->getRoot();
+ }
+ } elseif (null !== $key) {
+ $object = $directory->getObject($key) ?? $directory->createObject([], $key);
+ } elseif ($this->action === 'add') {
+ $object = $directory->createObject([], '');
+ }
+
+ if ($object instanceof FlexTranslateInterface && $this->isMultilang()) {
+ $language = $this->getLanguage();
+ if ($object->hasTranslation($language)) {
+ $object = $object->getTranslation($language);
+ } elseif (!in_array('', $object->getLanguages(true), true)) {
+ $object->language($language);
+ }
+ }
+
+ if (is_callable([$object, 'refresh'])) {
+ $object->refresh();
+ }
+
+ // Get updated object via form.
+ $this->object = $object ? $object->getForm()->getObject() : false;
+ }
+ }
+
+ return $this->object ?: null;
+ }
+
+ /**
+ * @param string|null $type
+ * @return FlexDirectoryInterface|null
+ */
+ public function getDirectory(string $type = null): ?FlexDirectoryInterface
+ {
+ $type = $type ?? $this->target;
+
+ if ($type && null === $this->directory) {
+ $this->directory = Grav::instance()['flex_objects']->getDirectory($type);
+ }
+
+ return $this->directory;
+ }
+
+ /**
+ * @return FlexCollectionInterface|null
+ */
+ public function getCollection(): ?FlexCollectionInterface
+ {
+ if (null === $this->collection) {
+ $directory = $this->getDirectory();
+
+ $this->collection = $directory ? $directory->getCollection() : null;
+ }
+
+ return $this->collection;
+ }
+
+ /**
+ * @param string $msg
+ * @param string $type
+ * @return void
+ */
+ public function setMessage(string $msg, string $type = 'info'): void
+ {
+ /** @var Message $messages */
+ $messages = $this->grav['messages'];
+ $messages->add($msg, $type);
+ }
+
+ /**
+ * @return bool
+ */
+ public function isActive(): bool
+ {
+ return (bool) $this->active;
+ }
+
+ /**
+ * @param string $location
+ * @return void
+ */
+ public function setLocation(string $location): void
+ {
+ $this->location = $location;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getLocation(): ?string
+ {
+ return $this->location;
+ }
+
+ /**
+ * @param string $action
+ * @return void
+ */
+ public function setAction(string $action): void
+ {
+ $this->action = $action;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getAction(): ?string
+ {
+ return $this->action;
+ }
+
+ /**
+ * @param string $task
+ * @return void
+ */
+ public function setTask(string $task): void
+ {
+ $this->task = $task;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getTask(): ?string
+ {
+ return $this->task;
+ }
+
+ /**
+ * @param string $target
+ * @return void
+ */
+ public function setTarget(string $target): void
+ {
+ $this->target = $target;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getTarget(): ?string
+ {
+ return $this->target;
+ }
+
+ /**
+ * @param string $id
+ * @return void
+ */
+ public function setId(string $id): void
+ {
+ $this->id = $id;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getId(): ?string
+ {
+ return $this->id;
+ }
+
+ /**
+ * Sets the page redirect.
+ *
+ * @param string $path The path to redirect to
+ * @param int $code The HTTP redirect code
+ * @return void
+ */
+ public function setRedirect(string $path, int $code = 303): void
+ {
+ $this->redirect = $path;
+ $this->redirectCode = (int)$code;
+ }
+
+ /**
+ * Redirect to the route stored in $this->redirect
+ *
+ * @return void
+ */
+ public function redirect(): void
+ {
+ $this->admin->redirect($this->redirect, $this->redirectCode);
+ }
+
+ /**
+ * @return array
+ */
+ public function getAdminRoutes(): array
+ {
+ if (null === $this->adminRoutes) {
+ $routes = [];
+ /** @var FlexDirectoryInterface $directory */
+ foreach ($this->getFlex()->getDirectories() as $directory) {
+ $config = $directory->getConfig('admin');
+ if (!$directory->isEnabled() || !empty($config['disabled'])) {
+ continue;
+ }
+
+ // Alias under flex-objects (always exists, but can be redirected).
+ $routes["/flex-objects/{$directory->getFlexType()}/"] = ['directory' => $directory];
+
+ $route = $config['router']['path'] ?? $config['menu']['list']['route'] ?? null;
+ if ($route) {
+ $routes[$route . '/'] = ['directory' => $directory];
+ }
+
+ $redirects = (array)($config['router']['redirects'] ?? null);
+ foreach ($redirects as $redirectFrom => $redirectTo) {
+ $redirectFrom .= '/';
+ if (!isset($routes[$redirectFrom])) {
+ $routes[$redirectFrom] = ['directory' => $directory, 'redirect' => $redirectTo];
+ }
+ }
+
+ $actions = (array)($config['router']['actions'] ?? null);
+ foreach ($actions as $name => $action) {
+ if (is_array($action)) {
+ $path = $action['path'] ?? null;
+ } else {
+ $path = $action;
+ }
+ if ($path !== null) {
+ $routes[$path . '/'] = ['directory' => $directory, 'action' => $name];
+ }
+ }
+ }
+
+ $this->adminRoutes = $routes;
+ }
+
+ return $this->adminRoutes;
+ }
+
+ /**
+ * Return true if multilang is active
+ *
+ * @return bool True if multilang is active
+ */
+ protected function isMultilang(): bool
+ {
+ /** @var Language $language */
+ $language = $this->grav['language'];
+
+ return $language->enabled();
+ }
+
+ protected function validateNonce(): bool
+ {
+ $nonce_action = $this->nonce_action;
+ $nonce = $this->post[$this->nonce_name] ?? $this->grav['uri']->param($this->nonce_name) ?? $this->grav['uri']->query($this->nonce_name);
+
+ if (!$nonce) {
+ $nonce = $this->post['admin-nonce'] ?? $this->grav['uri']->param('admin-nonce') ?? $this->grav['uri']->query('admin-nonce');
+ $nonce_action = 'admin-form';
+ }
+
+ return $nonce && Utils::verifyNonce($nonce, $nonce_action);
+ }
+
+ /**
+ * Prepare and return POST data.
+ *
+ * @param array $post
+ * @return array
+ */
+ protected function getPost(array $post): array
+ {
+ unset($post['task']);
+
+ // Decode JSON encoded fields and merge them to data.
+ if (isset($post['_json'])) {
+ $post = array_replace_recursive($post, $this->jsonDecode($post['_json']));
+ unset($post['_json']);
+ }
+
+ $post = $this->cleanDataKeys($post);
+
+ return $post;
+ }
+
+ /**
+ * @param ResponseInterface $response
+ * @return never-return
+ */
+ protected function close(ResponseInterface $response): void
+ {
+ $this->grav->close($response);
+ }
+
+ /**
+ * Recursively JSON decode data.
+ *
+ * @param array $data
+ * @return array
+ */
+ protected function jsonDecode(array $data)
+ {
+ foreach ($data as &$value) {
+ if (is_array($value)) {
+ $value = $this->jsonDecode($value);
+ } else {
+ $value = json_decode($value, true, 512, JSON_THROW_ON_ERROR);
+ }
+ }
+
+ return $data;
+ }
+
+ /**
+ * @param array $source
+ * @return array
+ */
+ protected function cleanDataKeys($source = []): array
+ {
+ $out = [];
+
+ if (is_array($source)) {
+ foreach ($source as $key => $value) {
+ $key = str_replace(['%5B', '%5D'], ['[', ']'], $key);
+ if (is_array($value)) {
+ $out[$key] = $this->cleanDataKeys($value);
+ } else {
+ $out[$key] = $value;
+ }
+ }
+ }
+
+ return $out;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLanguage(): string
+ {
+ return $this->admin->language ?? '';
+ }
+
+ /**
+ * @return Config
+ */
+ protected function getConfig(): Config
+ {
+ return $this->grav['config'];
+ }
+
+ /**
+ * @return ServerRequestInterface
+ */
+ protected function getRequest(): ServerRequestInterface
+ {
+ return $this->grav['request'];
+ }
+}
diff --git a/dev/plugins/flex-objects/classes/Controllers/AbstractController.php b/dev/plugins/flex-objects/classes/Controllers/AbstractController.php
new file mode 100644
index 00000000..300fd19f
--- /dev/null
+++ b/dev/plugins/flex-objects/classes/Controllers/AbstractController.php
@@ -0,0 +1,359 @@
+getAttributes();
+ $this->request = $request;
+ $this->grav = $attributes['grav'] ?? Grav::instance();
+ $this->type = $attributes['type'] ?? null;
+ $this->key = $attributes['key'] ?? null;
+ if ($this->type) {
+ $this->directory = $this->getFlex()->getDirectory($this->type);
+ $this->object = $attributes['object'] ?? null;
+ if (!$this->object && $this->key && $this->directory) {
+ $this->object = $this->directory->getObject($this->key) ?? $this->directory->createObject([], $this->key ?? '');
+ if (is_callable([$this->object, 'refresh'])) {
+ $this->object->refresh();
+ }
+ }
+ }
+
+ /** @var Route $route */
+ $route = $attributes['route'];
+ $post = $this->getPost();
+
+ if ($this->isFormSubmit()) {
+ $form = $this->getForm();
+ $this->nonce_name = $attributes['nonce_name'] ?? $form->getNonceName();
+ $this->nonce_action = $attributes['nonce_action'] ?? $form->getNonceAction();
+ }
+
+ try {
+ $task = $request->getAttribute('task') ?? $post['task'] ?? $route->getParam('task');
+ if ($task) {
+ if (empty($attributes['forwarded'])) {
+ $this->checkNonce($task);
+ }
+ $type = 'task';
+ $command = $task;
+ } else {
+ $type = 'action';
+ $command = $request->getAttribute('action') ?? $post['action'] ?? $route->getParam('action') ?? 'display';
+ }
+ $command = strtolower($command);
+
+ $event = new Event(
+ [
+ 'controller' => $this,
+ 'response' => null
+ ]
+ );
+
+ $this->grav->fireEvent("flex.{$this->type}.{$type}.{$command}", $event);
+
+ $response = $event['response'];
+ if (!$response) {
+ /** @var Inflector $inflector */
+ $inflector = $this->grav['inflector'];
+ $method = $type . $inflector::camelize($command);
+ if ($method && method_exists($this, $method)) {
+ $response = $this->{$method}($request);
+ } else {
+ throw new NotFoundException($request);
+ }
+ }
+ } catch (\Exception $e) {
+ $response = $this->createErrorResponse($e);
+ }
+
+ if ($response instanceof Response) {
+ return $response;
+ }
+
+ return $this->createJsonResponse($response);
+ }
+
+ /**
+ * @return ServerRequestInterface
+ */
+ public function getRequest(): ServerRequestInterface
+ {
+ return $this->request;
+ }
+
+ /**
+ * @param string|null $name
+ * @param mixed $default
+ * @return mixed
+ */
+ public function getPost(string $name = null, $default = null)
+ {
+ $body = $this->request->getParsedBody();
+
+ if ($name) {
+ return $body[$name] ?? $default;
+ }
+
+ return $body;
+ }
+
+ /**
+ * @return bool
+ */
+ public function isFormSubmit(): bool
+ {
+ return (bool)$this->getPost('__form-name__');
+ }
+
+ /**
+ * @param string|null $type
+ * @return FlexForm
+ */
+ public function getForm(string $type = null): FlexFormInterface
+ {
+ $object = $this->getObject();
+ if (!$object) {
+ throw new \RuntimeException('Not Found', 404);
+ }
+
+ $formName = $this->getPost('__form-name__');
+ if ($formName) {
+ /** @var Forms $forms */
+ $forms = $this->getGrav()['forms'];
+ $form = $forms->getActiveForm();
+ if ($form instanceof FlexForm && $form->getName() === $formName && $form->getObject()->getFlexKey() === $object->getFlexKey()) {
+ return $form;
+ }
+ }
+
+ return $object->getForm($type ?? 'edit');
+ }
+
+ /**
+ * @param FlexObjectInterface $object
+ * @param string $type
+ * @return FlexFormFlash
+ */
+ protected function getFormFlash(FlexObjectInterface $object, string $type = '')
+ {
+ /** @var Uri $uri */
+ $uri = $this->grav['uri'];
+ $url = $uri->url;
+
+ $formName = $this->getPost('__form-name__');
+ if (!$formName) {
+ $form = $object->getForm($type);
+ $formName = $form->getName();
+ $uniqueId = $form->getUniqueId();
+ } else {
+ $uniqueId = $this->getPost('__unique_form_id__') ?: $formName ?: sha1($url);
+ }
+
+ /** @var Session $session */
+ $session = $this->grav['session'];
+
+ $config = [
+ 'session_id' => $session->getId(),
+ 'unique_id' => $uniqueId,
+ 'form_name' => $formName,
+ ];
+ $flash = new FlexFormFlash($config);
+ if (!$flash->exists()) {
+ $flash->setUrl($url)->setUser($this->grav['user']);
+ }
+
+ return $flash;
+ }
+
+ /**
+ * @return Grav
+ */
+ public function getGrav(): Grav
+ {
+ return $this->grav;
+ }
+
+ /**
+ * @return Session
+ */
+ public function getSession(): Session
+ {
+ return $this->grav['session'];
+ }
+
+ /**
+ * @return Flex
+ */
+ public function getFlex(): Flex
+ {
+ return $this->grav['flex_objects'];
+ }
+
+ /**
+ * @return string
+ */
+ public function getDirectoryType(): string
+ {
+ return $this->type;
+ }
+
+ /**
+ * @return string
+ */
+ public function getObjectKey(): string
+ {
+ return $this->key;
+ }
+
+ /**
+ * @return FlexDirectory|null
+ */
+ public function getDirectory(): ?FlexDirectory
+ {
+ return $this->directory;
+ }
+
+ /**
+ * @return FlexObjectInterface|null
+ */
+ public function getObject(): ?FlexObjectInterface
+ {
+ return $this->object;
+ }
+
+ /**
+ * @param string $string
+ * @return string
+ */
+ public function translate(string $string): string
+ {
+ /** @var Language $language */
+ $language = $this->grav['language'];
+
+ return $language->translate($string);
+ }
+
+ /**
+ * @param string $message
+ * @param string $type
+ * @return $this
+ */
+ public function setMessage(string $message, string $type = 'info'): self
+ {
+ /** @var Message $messages */
+ $messages = $this->grav['messages'];
+ $messages->add($message, $type);
+
+ return $this;
+ }
+
+ /**
+ * @param UserInterface $user
+ * @return void
+ */
+ public function setUser(UserInterface $user): void
+ {
+ $this->user = $user;
+ }
+
+ /**
+ * @return Config
+ */
+ protected function getConfig(): Config
+ {
+ return $this->grav['config'];
+ }
+
+ /**
+ * @param string $task
+ * @return void
+ * @throws PageExpiredException
+ */
+ protected function checkNonce(string $task): void
+ {
+ $nonce = null;
+
+ if (in_array(strtoupper($this->request->getMethod()), ['POST', 'PUT', 'PATCH', 'DELETE'])) {
+ $nonce = $this->getPost($this->nonce_name);
+ }
+
+ if (!$nonce) {
+ $nonce = $this->grav['uri']->param($this->nonce_name);
+ }
+
+ if (!$nonce) {
+ $nonce = $this->grav['uri']->query($this->nonce_name);
+ }
+
+ if (!$nonce || !Utils::verifyNonce($nonce, $this->nonce_action)) {
+ throw new PageExpiredException($this->request);
+ }
+ }
+}
diff --git a/dev/plugins/flex-objects/classes/Controllers/MediaController.php b/dev/plugins/flex-objects/classes/Controllers/MediaController.php
new file mode 100644
index 00000000..0c7f8444
--- /dev/null
+++ b/dev/plugins/flex-objects/classes/Controllers/MediaController.php
@@ -0,0 +1,541 @@
+checkAuthorization('media.create');
+
+ $object = $this->getObject();
+ if (null === $object) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ if (!method_exists($object, 'checkUploadedMediaFile')) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ // Get updated object from Form Flash.
+ $flash = $this->getFormFlash($object);
+ if ($flash->exists()) {
+ $object = $flash->getObject() ?? $object;
+ $object->update([], $flash->getFilesByFields());
+ }
+
+ // Get field for the uploaded media.
+ $field = $this->getPost('name', 'undefined');
+ if ($field === 'undefined') {
+ $field = null;
+ }
+
+ $request = $this->getRequest();
+ $files = $request->getUploadedFiles();
+ if ($field && isset($files['data'])) {
+ $files = $files['data'];
+ $parts = explode('.', $field);
+ $last = array_pop($parts);
+ foreach ($parts as $name) {
+ if (!is_array($files[$name])) {
+ throw new RuntimeException($this->translate('PLUGIN_ADMIN.INVALID_PARAMETERS'), 400);
+ }
+ $files = $files[$name];
+ }
+ $file = $files[$last] ?? null;
+
+ } else {
+ // Legacy call with name being the filename instead of field name.
+ $file = $files['file'] ?? null;
+ $field = null;
+ }
+
+ /** @var UploadedFileInterface $file */
+ if (is_array($file)) {
+ $file = reset($file);
+ }
+
+ if (!$file instanceof UploadedFileInterface) {
+ throw new RuntimeException($this->translate('PLUGIN_ADMIN.INVALID_PARAMETERS'), 400);
+ }
+
+ $filename = $file->getClientFilename();
+
+ $object->checkUploadedMediaFile($file, $filename, $field);
+
+ try {
+ // TODO: This only merges main level data, but is good for ordering (for now).
+ $data = $flash->getData() ?? [];
+ $data = array_replace($data, (array)$this->getPost('data'));
+
+ $crop = $this->getPost('crop');
+ if (is_string($crop)) {
+ $crop = json_decode($crop, true, 512, JSON_THROW_ON_ERROR);
+ }
+
+ $flash->setData($data);
+ $flash->addUploadedFile($file, $field, $crop);
+ $flash->save();
+ } catch (Exception $e) {
+ throw new RuntimeException($e->getMessage(), $e->getCode(), $e);
+ }
+
+ // Include exif metadata into the response if configured to do so
+ $metadata = [];
+ $include_metadata = $this->grav['config']->get('system.media.auto_metadata_exif', false);
+ if ($include_metadata) {
+ $medium = MediumFactory::fromUploadedFile($file);
+
+ $media = $object->getMedia();
+ $media->add($filename, $medium);
+
+ $basename = str_replace(['@3x', '@2x'], '', Utils::pathinfo($filename, PATHINFO_BASENAME));
+ if (isset($media[$basename])) {
+ $metadata = $media[$basename]->metadata() ?: [];
+ }
+ }
+
+ $response = [
+ 'code' => 200,
+ 'status' => 'success',
+ 'message' => $this->translate('PLUGIN_ADMIN.FILE_UPLOADED_SUCCESSFULLY'),
+ 'filename' => htmlspecialchars($filename, ENT_QUOTES | ENT_HTML5, 'UTF-8'),
+ 'metadata' => $metadata
+ ];
+
+ return $this->createJsonResponse($response);
+ }
+
+ public function taskMediaUploadMeta(): ResponseInterface
+ {
+ $this->checkAuthorization('media.create');
+
+ $object = $this->getObject();
+ if (null === $object) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ if (!method_exists($object, 'checkUploadedMediaFile')) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ // Get updated object from Form Flash.
+ $flash = $this->getFormFlash($object);
+ if ($flash->exists()) {
+ $object = $flash->getObject() ?? $object;
+ $object->update([], $flash->getFilesByFields());
+ }
+
+ // Get field and data for the uploaded media.
+ $field = $this->getPost('field');
+ $data = $this->getPost('data');
+ $filename = Utils::basename($data['name']);
+
+ $response = [
+ 'code' => 200,
+ 'status' => 'success',
+ 'message' => $this->translate('PLUGIN_ADMIN.FILE_UPLOADED_SUCCESSFULLY'),
+ 'field' => $field,
+ 'filename' => $filename,
+ 'metadata' => $data
+ ];
+
+ return $this->createJsonResponse($response);
+ }
+
+ /**
+ * @return ResponseInterface
+ */
+ public function taskMediaDelete(): ResponseInterface
+ {
+ $this->checkAuthorization('media.delete');
+
+ /** @var FlexObjectInterface|null $object */
+ $object = $this->getObject();
+ if (!$object) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ $filename = $this->getPost('filename');
+
+ // Handle bad filenames.
+ if (!Utils::checkFilename($filename)) {
+ throw new RuntimeException($this->translate('PLUGIN_ADMIN.NO_FILE_FOUND'), 400);
+ }
+
+ try {
+ $field = $this->getPost('name');
+ $flash = $this->getFormFlash($object);
+ $flash->removeFile($filename, $field);
+ $flash->save();
+ } catch (Exception $e) {
+ throw new RuntimeException($e->getMessage(), $e->getCode(), $e);
+ }
+
+ $response = [
+ 'code' => 200,
+ 'status' => 'success',
+ 'message' => $this->translate('PLUGIN_ADMIN.FILE_DELETED') . ': ' . htmlspecialchars($filename, ENT_QUOTES | ENT_HTML5, 'UTF-8')
+ ];
+
+ return $this->createJsonResponse($response);
+ }
+
+ /**
+ * Used in pagemedia field.
+ *
+ * @return ResponseInterface
+ */
+ public function taskMediaCopy(): ResponseInterface
+ {
+ $this->checkAuthorization('media.create');
+
+ /** @var FlexObjectInterface|null $object */
+ $object = $this->getObject();
+ if (!$object) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ if (!method_exists($object, 'uploadMediaFile')) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ $request = $this->getRequest();
+ $files = $request->getUploadedFiles();
+
+ $file = $files['file'] ?? null;
+ if (!$file instanceof UploadedFileInterface) {
+ throw new RuntimeException($this->translate('PLUGIN_ADMIN.INVALID_PARAMETERS'), 400);
+ }
+
+ $post = $request->getParsedBody();
+ $filename = $post['name'] ?? $file->getClientFilename();
+
+ // Upload media right away.
+ $object->uploadMediaFile($file, $filename);
+
+ // Include exif metadata into the response if configured to do so
+ $metadata = [];
+ $include_metadata = $this->grav['config']->get('system.media.auto_metadata_exif', false);
+ if ($include_metadata) {
+ $basename = str_replace(['@3x', '@2x'], '', Utils::pathinfo($filename, PATHINFO_BASENAME));
+ $media = $object->getMedia();
+ if (isset($media[$basename])) {
+ $metadata = $media[$basename]->metadata() ?: [];
+ }
+ }
+
+ if ($object instanceof PageInterface) {
+ // Backwards compatibility to existing plugins.
+ // DEPRECATED: page
+ $this->grav->fireEvent('onAdminAfterAddMedia', new Event(['object' => $object, 'page' => $object]));
+ }
+
+ $response = [
+ 'code' => 200,
+ 'status' => 'success',
+ 'message' => $this->translate('PLUGIN_ADMIN.FILE_UPLOADED_SUCCESSFULLY'),
+ 'filename' => htmlspecialchars($filename, ENT_QUOTES | ENT_HTML5, 'UTF-8'),
+ 'metadata' => $metadata
+ ];
+
+ return $this->createJsonResponse($response);
+ }
+
+
+ /**
+ * Used in pagemedia field.
+ *
+ * @return ResponseInterface
+ */
+ public function taskMediaRemove(): ResponseInterface
+ {
+ $this->checkAuthorization('media.delete');
+
+ /** @var FlexObjectInterface|null $object */
+ $object = $this->getObject();
+ if (!$object) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ if (!method_exists($object, 'deleteMediaFile')) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ $filename = $this->getPost('filename');
+
+ // Handle bad filenames.
+ if (!Utils::checkFilename($filename)) {
+ throw new RuntimeException($this->translate('PLUGIN_ADMIN.NO_FILE_FOUND'), 400);
+ }
+
+ $object->deleteMediaFile($filename);
+
+ if ($object instanceof PageInterface) {
+ // Backwards compatibility to existing plugins.
+ // DEPRECATED: page
+ $this->grav->fireEvent('onAdminAfterDelMedia', new Event(['object' => $object, 'page' => $object, 'media' => $object->getMedia(), 'filename' => $filename]));
+ }
+
+ $response = [
+ 'code' => 200,
+ 'status' => 'success',
+ 'message' => $this->translate('PLUGIN_ADMIN.FILE_DELETED') . ': ' . htmlspecialchars($filename, ENT_QUOTES | ENT_HTML5, 'UTF-8')
+ ];
+
+ return $this->createJsonResponse($response);
+ }
+
+ /**
+ * @return ResponseInterface
+ */
+ public function actionMediaList(): ResponseInterface
+ {
+ $this->checkAuthorization('media.list');
+
+ /** @var MediaInterface|FlexObjectInterface $object */
+ $object = $this->getObject();
+ if (!$object) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ // Get updated object from Form Flash.
+ $flash = $this->getFormFlash($object);
+ if ($flash->exists()) {
+ $object = $flash->getObject() ?? $object;
+ $object->update([], $flash->getFilesByFields());
+ }
+
+ $media = $object->getMedia();
+ $media_list = [];
+
+ /**
+ * @var string $name
+ * @var Medium $medium
+ */
+ foreach ($media->all() as $name => $medium) {
+ $media_list[$name] = [
+ 'url' => $medium->display($medium->get('extension') === 'svg' ? 'source' : 'thumbnail')->cropZoom(400, 300)->url(),
+ 'size' => $medium->get('size'),
+ 'metadata' => $medium->metadata() ?: [],
+ 'original' => $medium->higherQualityAlternative()->get('filename')
+ ];
+ }
+
+ $response = [
+ 'code' => 200,
+ 'status' => 'success',
+ 'results' => $media_list
+ ];
+
+ return $this->createJsonResponse($response);
+ }
+
+ /**
+ * Used by the filepicker field to get a list of files in a folder.
+ *
+ * @return ResponseInterface
+ */
+ protected function actionMediaPicker(): ResponseInterface
+ {
+ $this->checkAuthorization('media.list');
+
+ /** @var FlexObject $object */
+ $object = $this->getObject();
+ if (!$object || !\is_callable([$object, 'getFieldSettings'])) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ // Get updated object from Form Flash.
+ $flash = $this->getFormFlash($object);
+ if ($flash->exists()) {
+ $object = $flash->getObject() ?? $object;
+ $object->update([], $flash->getFilesByFields());
+ }
+
+ $name = $this->getPost('name');
+ $settings = $name ? $object->getFieldSettings($name) : null;
+ if (empty($settings['media_picker_field'])) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ $media = $object->getMediaField($name);
+
+ $available_files = [];
+ $metadata = [];
+ $thumbs = [];
+
+ /**
+ * @var string $name
+ * @var Medium $medium
+ */
+ foreach ($media->all() as $name => $medium) {
+ $available_files[] = $name;
+
+ if (isset($settings['include_metadata'])) {
+ $img_metadata = $medium->metadata();
+ if ($img_metadata) {
+ $metadata[$name] = $img_metadata;
+ }
+ }
+
+ }
+
+ // Peak in the flashObject for optimistic filepicker updates
+ $pending_files = [];
+ $sessionField = base64_encode($this->grav['uri']->url());
+ $flash = $this->getSession()->getFlashObject('files-upload');
+ $folder = $media->getPath() ?: null;
+
+ if ($flash && isset($flash[$sessionField])) {
+ foreach ($flash[$sessionField] as $field => $data) {
+ foreach ($data as $file) {
+ $test = \dirname($file['path']);
+ if ($test === $folder) {
+ $pending_files[] = $file['name'];
+ }
+ }
+ }
+ }
+
+ $this->getSession()->setFlashObject('files-upload', $flash);
+
+ // Handle Accepted file types
+ // Accept can only be file extensions (.pdf|.jpg)
+ if (isset($settings['accept'])) {
+ $available_files = array_filter($available_files, function ($file) use ($settings) {
+ return $this->filterAcceptedFiles($file, $settings);
+ });
+
+ $pending_files = array_filter($pending_files, function ($file) use ($settings) {
+ return $this->filterAcceptedFiles($file, $settings);
+ });
+ }
+
+ if (isset($settings['deny'])) {
+ $available_files = array_filter($available_files, function ($file) use ($settings) {
+ return $this->filterDeniedFiles($file, $settings);
+ });
+
+ $pending_files = array_filter($pending_files, function ($file) use ($settings) {
+ return $this->filterDeniedFiles($file, $settings);
+ });
+ }
+
+ // Generate thumbs if needed
+ if (isset($settings['preview_images']) && $settings['preview_images'] === true) {
+ foreach ($available_files as $filename) {
+ $thumbs[$filename] = $media[$filename]->zoomCrop(100,100)->url();
+ }
+ }
+
+ $response = [
+ 'code' => 200,
+ 'status' => 'success',
+ 'files' => array_values($available_files),
+ 'pending' => array_values($pending_files),
+ 'folder' => $folder,
+ 'metadata' => $metadata,
+ 'thumbs' => $thumbs
+ ];
+
+ return $this->createJsonResponse($response);
+ }
+
+ /**
+ * @param string $file
+ * @param array $settings
+ * @return false|int
+ */
+ protected function filterAcceptedFiles(string $file, array $settings)
+ {
+ $valid = false;
+
+ foreach ((array)$settings['accept'] as $type) {
+ $find = str_replace('*', '.*', $type);
+ $valid |= preg_match('#' . $find . '$#i', $file);
+ }
+
+ return $valid;
+ }
+
+ /**
+ * @param string $file
+ * @param array $settings
+ * @return false|int
+ */
+ protected function filterDeniedFiles(string $file, array $settings)
+ {
+ $valid = true;
+
+ foreach ((array)$settings['deny'] as $type) {
+ $find = str_replace('*', '.*', $type);
+ $valid = !preg_match('#' . $find . '$#i', $file);
+ }
+
+ return $valid;
+ }
+
+ /**
+ * @param string $action
+ * @return void
+ * @throws LogicException
+ * @throws RuntimeException
+ */
+ protected function checkAuthorization(string $action): void
+ {
+ $object = $this->getObject();
+ if (!$object) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ // If object does not have ACL support ignore ACL checks.
+ if (!$object instanceof FlexAuthorizeInterface) {
+ return;
+ }
+
+ switch ($action) {
+ case 'media.list':
+ $action = 'read';
+ break;
+
+ case 'media.create':
+ case 'media.delete':
+ $action = $object->exists() ? 'update' : 'create';
+ break;
+
+ default:
+ throw new LogicException(sprintf('Unsupported authorize action %s', $action), 500);
+ }
+
+ if (!$object->isAuthorized($action, null, $this->user)) {
+ throw new RuntimeException('Forbidden', 403);
+ }
+ }
+}
diff --git a/dev/plugins/flex-objects/classes/Controllers/ObjectController.php b/dev/plugins/flex-objects/classes/Controllers/ObjectController.php
new file mode 100644
index 00000000..0e70b6f9
--- /dev/null
+++ b/dev/plugins/flex-objects/classes/Controllers/ObjectController.php
@@ -0,0 +1,515 @@
+getForm();
+ $object = $form->getObject();
+
+ return $object->exists() ? $this->taskUpdate($request) : $this->taskCreate($request);
+ }
+
+ /**
+ * Create object.
+ *
+ * Task fails if object exists.
+ *
+ * @param ServerRequestInterface $request
+ * @return ResponseInterface
+ */
+ public function taskCreate(ServerRequestInterface $request): ResponseInterface
+ {
+ $this->checkAuthorization('create');
+
+ $form = $this->getForm();
+ $callable = function (array $data, array $files, FlexObject $object) {
+ if (method_exists($object, 'storeOriginal')) {
+ $object->storeOriginal();
+ }
+ $object->update($data, $files);
+ if (\is_callable([$object, 'check'])) {
+ $object->check($this->user);
+ }
+
+ $event = new FlexTaskEvent($this, $object, 'create');
+ $this->grav->dispatchEvent($event);
+
+ $object->save();
+ };
+
+ $form->setSubmitMethod($callable);
+ $form->handleRequest($request);
+ if (!$form->isValid()) {
+ $error = $form->getError();
+ if ($error) {
+ $this->setMessage($error, 'error');
+ }
+ $errors = $form->getErrors();
+ foreach ($errors as $field) {
+ foreach ($field as $error) {
+ $this->setMessage($error, 'error');
+ }
+ }
+
+ $data = $form->getData();
+ if (null !== $data) {
+ $object = $form->getObject();
+ $flash = $form->getFlash();
+ $flash->setObject($object);
+ $flash->setData($data->toArray());
+ $flash->save();
+ }
+
+ return $this->createDisplayResponse();
+ }
+
+ // FIXME: make it conditional
+ $grav = $this->grav;
+ $grav->fireEvent('gitsync');
+
+ $this->object = $form->getObject();
+ $event = new Event(
+ [
+ 'task' => 'create',
+ 'controller' => $this,
+ 'object' => $this->object,
+ 'response' => null,
+ 'message' => null,
+ ]
+ );
+
+ $this->grav->fireEvent("flex.{$this->type}.task.create.after", $event);
+
+ $this->setMessage($event['message'] ?? $this->translate('PLUGIN_FLEX_OBJECTS.STATE.CREATED_SUCCESSFULLY'), 'info');
+
+ if ($event['response']) {
+ return $event['response'];
+ }
+
+
+ $redirect = $request->getAttribute('redirect', (string)$request->getUri());
+
+ return $this->createRedirectResponse($redirect, 303);
+ }
+
+ /**
+ * Update object.
+ *
+ * Task fails if object does not exist.
+ *
+ * @param ServerRequestInterface $request
+ * @return ResponseInterface
+ */
+ public function taskUpdate(ServerRequestInterface $request): ResponseInterface
+ {
+ $this->checkAuthorization('update');
+
+ $form = $this->getForm();
+ $callable = function (array $data, array $files, FlexObject $object) {
+ if (method_exists($object, 'storeOriginal')) {
+ $object->storeOriginal();
+ }
+ $object->update($data, $files);
+ if (\is_callable([$object, 'check'])) {
+ $object->check($this->user);
+ }
+
+ $event = new FlexTaskEvent($this, $object, 'update');
+ $this->grav->dispatchEvent($event);
+
+ $object->save();
+ };
+
+ $form->setSubmitMethod($callable);
+ $form->handleRequest($request);
+ if (!$form->isValid()) {
+ $error = $form->getError();
+ if ($error) {
+ $this->setMessage($error, 'error');
+ }
+ $errors = $form->getErrors();
+ foreach ($errors as $field) {
+ foreach ($field as $error) {
+ $this->setMessage($error, 'error');
+ }
+ }
+
+ $data = $form->getData();
+ if (null !== $data) {
+ $object = $form->getObject();
+ $flash = $form->getFlash();
+ $flash->setObject($object);
+ $flash->setData($data->toArray());
+ $flash->save();
+ }
+
+ return $this->createDisplayResponse();
+ }
+
+ // FIXME: make it conditional
+ $grav = $this->grav;
+ $grav->fireEvent('gitsync');
+
+ $this->object = $form->getObject();
+ $event = new Event(
+ [
+ 'task' => 'update',
+ 'controller' => $this,
+ 'object' => $this->object,
+ 'response' => null,
+ 'message' => null,
+ ]
+ );
+
+ $this->grav->fireEvent("flex.{$this->type}.task.update.after", $event);
+
+ $this->setMessage($event['message'] ?? $this->translate('PLUGIN_FLEX_OBJECTS.STATE.UPDATED_SUCCESSFULLY'), 'info');
+
+ if ($event['response']) {
+ return $event['response'];
+ }
+
+ $redirect = $request->getAttribute('redirect', (string)$request->getUri()->getPath());
+
+ return $this->createRedirectResponse($redirect, 303);
+ }
+
+ /**
+ * Delete object.
+ *
+ * @param ServerRequestInterface $request
+ * @return ResponseInterface
+ */
+ public function taskDelete(ServerRequestInterface $request): ResponseInterface
+ {
+ $this->checkAuthorization('delete');
+
+ $object = $this->getObject();
+ if (!$object) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ $event = new FlexTaskEvent($this, $object, 'delete');
+ $this->grav->dispatchEvent($event);
+
+ $object->delete();
+
+ // FIXME: make it conditional
+ $grav = $this->grav;
+ $grav->fireEvent('gitsync');
+
+ $event = new Event(
+ [
+ 'task' => 'delete',
+ 'controller' => $this,
+ 'object' => $object,
+ 'response' => null,
+ 'message' => null,
+ ]
+ );
+
+ $this->grav->fireEvent("flex.{$this->type}.task.delete.after", $event);
+
+ $this->setMessage($this->translate($event['message'] ?? 'PLUGIN_FLEX_OBJECTS.STATE.DELETED_SUCCESSFULLY'), 'info');
+
+ if ($event['response']) {
+ return $event['response'];
+ }
+
+ $redirect = $request->getAttribute('redirect', (string)$request->getUri()->getPath());
+
+ return $this->createRedirectResponse($redirect, 303);
+ }
+
+ /**
+ * Reset form to original values.
+ *
+ * @param ServerRequestInterface $request
+ * @return ResponseInterface
+ */
+ public function taskReset(ServerRequestInterface $request): ResponseInterface
+ {
+ $this->checkAuthorization('save');
+
+ $flash = $this->getForm()->getFlash();
+ $flash->delete();
+
+ $redirect = $request->getAttribute('redirect', (string)$request->getUri()->getPath());
+
+ return $this->createRedirectResponse($redirect, 303);
+ }
+
+ /**
+ * Preview object.
+ *
+ * Takes a form input and converts it to visible presentation of the object.
+ *
+ * @param ServerRequestInterface $request
+ * @return ResponseInterface
+ */
+ public function taskPreview(ServerRequestInterface $request): ResponseInterface
+ {
+ $this->checkAuthorization('save');
+
+ /** @var FlexForm $form */
+ $form = $this->getForm('edit');
+ $form->setRequest($request);
+ if (!$form->validate()) {
+ $error = $form->getError();
+ if ($error) {
+ $this->setMessage($error, 'error');
+ }
+ $errors = $form->getErrors();
+ foreach ($errors as $field) {
+ foreach ($field as $error) {
+ $this->setMessage($error, 'error');
+ }
+ }
+
+ return $this->createRedirectResponse((string)$request->getUri(), 303);
+ }
+
+ $this->object = $form->updateObject();
+
+ return $this->actionDisplayPreview();
+ }
+
+ /**
+ * @param ServerRequestInterface $request
+ * @return ResponseInterface
+ */
+ public function taskMediaList(ServerRequestInterface $request): ResponseInterface
+ {
+ $directory = $this->getDirectory();
+ if (!$directory) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ return $this->forwardMediaTask('action', 'media.list');
+ }
+
+ /**
+ * @param ServerRequestInterface $request
+ * @return ResponseInterface
+ */
+ public function taskMediaUpload(ServerRequestInterface $request): ResponseInterface
+ {
+ $directory = $this->getDirectory();
+ if (!$directory) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ return $this->forwardMediaTask('task', 'media.upload');
+ }
+
+ /**
+ * @param ServerRequestInterface $request
+ * @return ResponseInterface
+ */
+ public function taskMediaDelete(ServerRequestInterface $request): ResponseInterface
+ {
+ $directory = $this->getDirectory();
+ if (!$directory) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ return $this->forwardMediaTask('task', 'media.delete');
+ }
+
+ /**
+ * @param ServerRequestInterface $request
+ * @return ResponseInterface
+ */
+ public function taskGetFilesInFolder(ServerRequestInterface $request): ResponseInterface
+ {
+ $directory = $this->getDirectory();
+ if (!$directory) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ return $this->forwardMediaTask('action', 'media.picker');
+ }
+
+ /**
+ * @param ServerRequestInterface $request
+ * @return ResponseInterface
+ * @deprecated Do not use
+ */
+ public function taskFilesUpload(ServerRequestInterface $request): ResponseInterface
+ {
+ /** @var Route $route */
+ $route = $this->grav['route'];
+ if ($route->getParam('task') === 'media.upload') {
+ return $this->taskMediaUpload($request);
+ }
+
+ throw new RuntimeException('Task filesUpload should not be called, please update form plugin!', 400);
+ }
+
+ /**
+ * @param ServerRequestInterface $request
+ * @return ResponseInterface
+ * @deprecated Do not use
+ */
+ public function taskRemoveMedia(ServerRequestInterface $request): ResponseInterface
+ {
+ /** @var Route $route */
+ $route = $this->grav['route'];
+ if ($route->getParam('task') === 'media.delete') {
+ return $this->taskMediaDelete($request);
+ }
+
+ throw new RuntimeException('Task removeMedia should not be called, please update form plugin!', 400);
+ }
+
+ /**
+ * Display object preview.
+ *
+ * @return ResponseInterface
+ */
+ public function actionDisplayPreview(): ResponseInterface
+ {
+ $this->checkAuthorization('save');
+ $this->checkAuthorization('read');
+
+ $object = $this->getObject();
+ if (!$object) {
+ throw new RuntimeException('No object found!', 404);
+ }
+
+ $grav = Grav::instance();
+
+ $grav['twig']->init();
+ $grav['theme'];
+ $content = [
+ 'code' => 200,
+ 'id' => $object->getKey(),
+ 'exists' => $object->exists(),
+ 'html' => (string)$object->render('preview', ['nocache' => []])
+ ];
+
+ $accept = $this->getAccept(['application/json', 'text/html']);
+ if ($accept === 'text/html') {
+ return $this->createHtmlResponse($content['html']);
+ }
+ if ($accept === 'application/json') {
+ return $this->createJsonResponse($content);
+ }
+
+ throw new RuntimeException('Not found', 404);
+ }
+
+ /**
+ * @param string $action
+ * @param string|null $scope
+ * @return void
+ * @throws RuntimeException
+ */
+ public function checkAuthorization(string $action, string $scope = null): void
+ {
+ $object = $this->getObject();
+
+ if (!$object) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ if ($object instanceof FlexAuthorizeInterface) {
+ if (!$object->isAuthorized($action, $scope, $this->user)) {
+ throw new RuntimeException('Forbidden', 403);
+ }
+ }
+ }
+
+
+ /**
+ * @param string[] $actions
+ * @return void
+ * @throws RuntimeException
+ */
+ public function checkAuthorizations(array $actions): void
+ {
+ $object = $this->getObject();
+
+ if (!$object) {
+ throw new RuntimeException('Not Found', 404);
+ }
+
+ if ($object instanceof FlexAuthorizeInterface) {
+ $test = false;
+ foreach ($actions as $action) {
+ $test |= $object->isAuthorized($action, null, $this->user);
+ }
+
+ if (!$test) {
+ throw new RuntimeException('Forbidden', 403);
+ }
+ }
+ }
+
+ /**
+ * @param string $type
+ * @param string $name
+ * @return ResponseInterface
+ */
+ protected function forwardMediaTask(string $type, string $name): ResponseInterface
+ {
+ /** @var Route $route */
+ $route = $this->grav['route']->withGravParam('task', null)->withGravParam($type, $name);
+ $object = $this->getObject();
+
+ /** @var ServerRequest $request */
+ $request = $this->grav['request'];
+ $request = $request
+ ->withAttribute($type, $name)
+ ->withAttribute('type', $this->type)
+ ->withAttribute('key', $this->key)
+ ->withAttribute('storage_key', $object && $object->exists() ? $object->getStorageKey() : null)
+ ->withAttribute('route', $route)
+ ->withAttribute('forwarded', true)
+ ->withAttribute('object', $object);
+
+ $controller = new MediaController();
+ if ($this->user) {
+ $controller->setUser($this->user);
+ }
+
+ return $controller->handle($request);
+ }
+}
diff --git a/dev/plugins/flex-objects/classes/Events/FlexTaskEvent.php b/dev/plugins/flex-objects/classes/Events/FlexTaskEvent.php
new file mode 100644
index 00000000..d0cf6179
--- /dev/null
+++ b/dev/plugins/flex-objects/classes/Events/FlexTaskEvent.php
@@ -0,0 +1,84 @@
+task = $task;
+ $this->type = $controller->getDirectoryType();
+ $this->key = $controller->getObjectKey();
+ $this->object = $object;
+ $this->controller = $controller;
+ }
+
+ /**
+ * @return AbstractController
+ */
+ public function getController(): AbstractController
+ {
+ return $this->controller;
+ }
+
+ /**
+ * @return FlexDirectoryInterface
+ */
+ public function getDirectory(): FlexDirectoryInterface
+ {
+ return $this->getController()->getDirectory();
+ }
+
+ /**
+ * @return FlexObjectInterface
+ * @phpstan-return T
+ */
+ public function getModifiedObject(): FlexObjectInterface
+ {
+ return $this->object;
+ }
+
+ /**
+ * @return FlexObjectInterface
+ * @phpstan-return T
+ */
+ public function getOriginalObject(): FlexObjectInterface
+ {
+ return $this->controller->getObject();
+ }
+
+ /**
+ * @return FlexCollectionInterface
+ * @phpstan-return C
+ */
+ public function getCollection(): FlexCollectionInterface
+ {
+ return $this->getController()->getDirectory()->getCollection();
+ }
+}
diff --git a/dev/plugins/flex-objects/classes/Flex.php b/dev/plugins/flex-objects/classes/Flex.php
new file mode 100644
index 00000000..0914e887
--- /dev/null
+++ b/dev/plugins/flex-objects/classes/Flex.php
@@ -0,0 +1,444 @@
+ 'blueprints://flex-objects/grav-pages.yaml',
+ 'blueprints://flex-objects/user-accounts.yaml' => 'blueprints://flex-objects/grav-accounts.yaml',
+ 'blueprints://flex-objects/user-groups.yaml' => 'blueprints://flex-objects/grav-user-groups.yaml'
+ ];
+
+ return $newToOld ? $map : array_flip($map);
+ }
+
+ /**
+ * Flex constructor.
+ * @param FlexInterface $flex
+ * @param array $types
+ */
+ public function __construct(FlexInterface $flex, array $types)
+ {
+ $this->flex = $flex;
+ $this->managed = [];
+
+ $legacy = static::getLegacyBlueprintMap(false);
+ foreach ($types as $blueprint) {
+ // Backwards compatibility to v1.0.0-rc.3
+ $blueprint = $legacy[$blueprint] ?? $blueprint;
+
+ $type = Utils::basename((string)$blueprint, '.yaml');
+ if ($type) {
+ $this->managed[] = $type;
+ }
+ }
+ }
+
+ /**
+ * @param string $type
+ * @param string $blueprint
+ * @param array $config
+ * @return $this
+ */
+ public function addDirectoryType(string $type, string $blueprint, array $config = [])
+ {
+ $this->flex->addDirectoryType($type, $blueprint, $config);
+
+ return $this;
+ }
+
+ /**
+ * @param FlexDirectory $directory
+ * @return $this
+ */
+ public function addDirectory(FlexDirectory $directory)
+ {
+ $this->flex->addDirectory($directory);
+
+ return $this;
+ }
+
+ /**
+ * @param string $type
+ * @return bool
+ */
+ public function hasDirectory(string $type): bool
+ {
+ return $this->flex->hasDirectory($type);
+ }
+
+ /**
+ * @param string[]|null $types
+ * @param bool $keepMissing
+ * @return array
"+u(e.message+"",!0)+"
";throw e}}f.exec=f,m.options=m.setOptions=function(e){return d(m.defaults,e),m},m.getDefaults=function(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:new r,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tables:!0,xhtml:!1}},m.defaults=m.getDefaults(),m.Parser=p,m.parser=p.parse,m.Renderer=r,m.TextRenderer=s,m.Lexer=a,m.lexer=a.lex,m.InlineLexer=h,m.inlineLexer=h.output,m.Slugger=t,m.parse=m,"undefined"!=typeof module&&"object"==typeof exports?module.exports=m:"function"==typeof define&&define.amd?define(function(){return m}):e.marked=m}(this||("undefined"!=typeof window?window:global));
\ No newline at end of file
diff --git a/dev/plugins/presentation/node_modules/reveal.js/plugin/math/math.js b/dev/plugins/presentation/node_modules/reveal.js/plugin/math/math.js
new file mode 100644
index 00000000..d76c9dda
--- /dev/null
+++ b/dev/plugins/presentation/node_modules/reveal.js/plugin/math/math.js
@@ -0,0 +1,92 @@
+/**
+ * A plugin which enables rendering of math equations inside
+ * of reveal.js slides. Essentially a thin wrapper for MathJax.
+ *
+ * @author Hakim El Hattab
+ */
+var RevealMath = window.RevealMath || (function(){
+
+ var options = Reveal.getConfig().math || {};
+ var mathjax = options.mathjax || 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js';
+ var config = options.config || 'TeX-AMS_HTML-full';
+ var url = mathjax + '?config=' + config;
+
+ var defaultOptions = {
+ messageStyle: 'none',
+ tex2jax: {
+ inlineMath: [ [ '$', '$' ], [ '\\(', '\\)' ] ],
+ skipTags: [ 'script', 'noscript', 'style', 'textarea', 'pre' ]
+ },
+ skipStartupTypeset: true
+ };
+
+ function defaults( options, defaultOptions ) {
+
+ for ( var i in defaultOptions ) {
+ if ( !options.hasOwnProperty( i ) ) {
+ options[i] = defaultOptions[i];
+ }
+ }
+
+ }
+
+ function loadScript( url, callback ) {
+
+ var head = document.querySelector( 'head' );
+ var script = document.createElement( 'script' );
+ script.type = 'text/javascript';
+ script.src = url;
+
+ // Wrapper for callback to make sure it only fires once
+ var finish = function() {
+ if( typeof callback === 'function' ) {
+ callback.call();
+ callback = null;
+ }
+ }
+
+ script.onload = finish;
+
+ // IE
+ script.onreadystatechange = function() {
+ if ( this.readyState === 'loaded' ) {
+ finish();
+ }
+ }
+
+ // Normal browsers
+ head.appendChild( script );
+
+ }
+
+ return {
+ init: function() {
+
+ defaults( options, defaultOptions );
+ defaults( options.tex2jax, defaultOptions.tex2jax );
+ options.mathjax = options.config = null;
+
+ loadScript( url, function() {
+
+ MathJax.Hub.Config( options );
+
+ // Typeset followed by an immediate reveal.js layout since
+ // the typesetting process could affect slide height
+ MathJax.Hub.Queue( [ 'Typeset', MathJax.Hub ] );
+ MathJax.Hub.Queue( Reveal.layout );
+
+ // Reprocess equations in slides when they turn visible
+ Reveal.addEventListener( 'slidechanged', function( event ) {
+
+ MathJax.Hub.Queue( [ 'Typeset', MathJax.Hub, event.currentSlide ] );
+
+ } );
+
+ } );
+
+ }
+ }
+
+})();
+
+Reveal.registerPlugin( 'math', RevealMath );
diff --git a/dev/plugins/presentation/node_modules/reveal.js/plugin/multiplex/client.js b/dev/plugins/presentation/node_modules/reveal.js/plugin/multiplex/client.js
new file mode 100644
index 00000000..3ffd1e03
--- /dev/null
+++ b/dev/plugins/presentation/node_modules/reveal.js/plugin/multiplex/client.js
@@ -0,0 +1,13 @@
+(function() {
+ var multiplex = Reveal.getConfig().multiplex;
+ var socketId = multiplex.id;
+ var socket = io.connect(multiplex.url);
+
+ socket.on(multiplex.id, function(data) {
+ // ignore data from sockets that aren't ours
+ if (data.socketId !== socketId) { return; }
+ if( window.location.host === 'localhost:1947' ) return;
+
+ Reveal.setState(data.state);
+ });
+}());
diff --git a/dev/plugins/presentation/node_modules/reveal.js/plugin/multiplex/index.js b/dev/plugins/presentation/node_modules/reveal.js/plugin/multiplex/index.js
new file mode 100644
index 00000000..8195f046
--- /dev/null
+++ b/dev/plugins/presentation/node_modules/reveal.js/plugin/multiplex/index.js
@@ -0,0 +1,64 @@
+var http = require('http');
+var express = require('express');
+var fs = require('fs');
+var io = require('socket.io');
+var crypto = require('crypto');
+
+var app = express();
+var staticDir = express.static;
+var server = http.createServer(app);
+
+io = io(server);
+
+var opts = {
+ port: process.env.PORT || 1948,
+ baseDir : __dirname + '/../../'
+};
+
+io.on( 'connection', function( socket ) {
+ socket.on('multiplex-statechanged', function(data) {
+ if (typeof data.secret == 'undefined' || data.secret == null || data.secret === '') return;
+ if (createHash(data.secret) === data.socketId) {
+ data.secret = null;
+ socket.broadcast.emit(data.socketId, data);
+ };
+ });
+});
+
+[ 'css', 'js', 'plugin', 'lib' ].forEach(function(dir) {
+ app.use('/' + dir, staticDir(opts.baseDir + dir));
+});
+
+app.get("/", function(req, res) {
+ res.writeHead(200, {'Content-Type': 'text/html'});
+
+ var stream = fs.createReadStream(opts.baseDir + '/index.html');
+ stream.on('error', function( error ) {
+ res.write('reveal.js multiplex server.
Generate token');
+ res.end();
+ });
+ stream.on('readable', function() {
+ stream.pipe(res);
+ });
+});
+
+app.get("/token", function(req,res) {
+ var ts = new Date().getTime();
+ var rand = Math.floor(Math.random()*9999999);
+ var secret = ts.toString() + rand.toString();
+ res.send({secret: secret, socketId: createHash(secret)});
+});
+
+var createHash = function(secret) {
+ var cipher = crypto.createCipher('blowfish', secret);
+ return(cipher.final('hex'));
+};
+
+// Actually listen
+server.listen( opts.port || null );
+
+var brown = '\033[33m',
+ green = '\033[32m',
+ reset = '\033[0m';
+
+console.log( brown + "reveal.js:" + reset + " Multiplex running on port " + green + opts.port + reset );
\ No newline at end of file
diff --git a/dev/plugins/presentation/node_modules/reveal.js/plugin/multiplex/master.js b/dev/plugins/presentation/node_modules/reveal.js/plugin/multiplex/master.js
new file mode 100644
index 00000000..7f4bf451
--- /dev/null
+++ b/dev/plugins/presentation/node_modules/reveal.js/plugin/multiplex/master.js
@@ -0,0 +1,34 @@
+(function() {
+
+ // Don't emit events from inside of notes windows
+ if ( window.location.search.match( /receiver/gi ) ) { return; }
+
+ var multiplex = Reveal.getConfig().multiplex;
+
+ var socket = io.connect( multiplex.url );
+
+ function post() {
+
+ var messageData = {
+ state: Reveal.getState(),
+ secret: multiplex.secret,
+ socketId: multiplex.id
+ };
+
+ socket.emit( 'multiplex-statechanged', messageData );
+
+ };
+
+ // post once the page is loaded, so the client follows also on "open URL".
+ window.addEventListener( 'load', post );
+
+ // Monitor events that trigger a change in state
+ Reveal.addEventListener( 'slidechanged', post );
+ Reveal.addEventListener( 'fragmentshown', post );
+ Reveal.addEventListener( 'fragmenthidden', post );
+ Reveal.addEventListener( 'overviewhidden', post );
+ Reveal.addEventListener( 'overviewshown', post );
+ Reveal.addEventListener( 'paused', post );
+ Reveal.addEventListener( 'resumed', post );
+
+}());
diff --git a/dev/plugins/presentation/node_modules/reveal.js/plugin/notes-server/client.js b/dev/plugins/presentation/node_modules/reveal.js/plugin/notes-server/client.js
new file mode 100644
index 00000000..00b277ba
--- /dev/null
+++ b/dev/plugins/presentation/node_modules/reveal.js/plugin/notes-server/client.js
@@ -0,0 +1,65 @@
+(function() {
+
+ // don't emit events from inside the previews themselves
+ if( window.location.search.match( /receiver/gi ) ) { return; }
+
+ var socket = io.connect( window.location.origin ),
+ socketId = Math.random().toString().slice( 2 );
+
+ console.log( 'View slide notes at ' + window.location.origin + '/notes/' + socketId );
+
+ window.open( window.location.origin + '/notes/' + socketId, 'notes-' + socketId );
+
+ /**
+ * Posts the current slide data to the notes window
+ */
+ function post() {
+
+ var slideElement = Reveal.getCurrentSlide(),
+ notesElement = slideElement.querySelector( 'aside.notes' );
+
+ var messageData = {
+ notes: '',
+ markdown: false,
+ socketId: socketId,
+ state: Reveal.getState()
+ };
+
+ // Look for notes defined in a slide attribute
+ if( slideElement.hasAttribute( 'data-notes' ) ) {
+ messageData.notes = slideElement.getAttribute( 'data-notes' );
+ }
+
+ // Look for notes defined in an aside element
+ if( notesElement ) {
+ messageData.notes = notesElement.innerHTML;
+ messageData.markdown = typeof notesElement.getAttribute( 'data-markdown' ) === 'string';
+ }
+
+ socket.emit( 'statechanged', messageData );
+
+ }
+
+ // When a new notes window connects, post our current state
+ socket.on( 'new-subscriber', function( data ) {
+ post();
+ } );
+
+ // When the state changes from inside of the speaker view
+ socket.on( 'statechanged-speaker', function( data ) {
+ Reveal.setState( data.state );
+ } );
+
+ // Monitor events that trigger a change in state
+ Reveal.addEventListener( 'slidechanged', post );
+ Reveal.addEventListener( 'fragmentshown', post );
+ Reveal.addEventListener( 'fragmenthidden', post );
+ Reveal.addEventListener( 'overviewhidden', post );
+ Reveal.addEventListener( 'overviewshown', post );
+ Reveal.addEventListener( 'paused', post );
+ Reveal.addEventListener( 'resumed', post );
+
+ // Post the initial state
+ post();
+
+}());
diff --git a/dev/plugins/presentation/node_modules/reveal.js/plugin/notes-server/index.js b/dev/plugins/presentation/node_modules/reveal.js/plugin/notes-server/index.js
new file mode 100644
index 00000000..b95f0718
--- /dev/null
+++ b/dev/plugins/presentation/node_modules/reveal.js/plugin/notes-server/index.js
@@ -0,0 +1,69 @@
+var http = require('http');
+var express = require('express');
+var fs = require('fs');
+var io = require('socket.io');
+var Mustache = require('mustache');
+
+var app = express();
+var staticDir = express.static;
+var server = http.createServer(app);
+
+io = io(server);
+
+var opts = {
+ port : 1947,
+ baseDir : __dirname + '/../../'
+};
+
+io.on( 'connection', function( socket ) {
+
+ socket.on( 'new-subscriber', function( data ) {
+ socket.broadcast.emit( 'new-subscriber', data );
+ });
+
+ socket.on( 'statechanged', function( data ) {
+ delete data.state.overview;
+ socket.broadcast.emit( 'statechanged', data );
+ });
+
+ socket.on( 'statechanged-speaker', function( data ) {
+ delete data.state.overview;
+ socket.broadcast.emit( 'statechanged-speaker', data );
+ });
+
+});
+
+[ 'css', 'js', 'images', 'plugin', 'lib' ].forEach( function( dir ) {
+ app.use( '/' + dir, staticDir( opts.baseDir + dir ) );
+});
+
+app.get('/', function( req, res ) {
+
+ res.writeHead( 200, { 'Content-Type': 'text/html' } );
+ fs.createReadStream( opts.baseDir + '/index.html' ).pipe( res );
+
+});
+
+app.get( '/notes/:socketId', function( req, res ) {
+
+ fs.readFile( opts.baseDir + 'plugin/notes-server/notes.html', function( err, data ) {
+ res.send( Mustache.to_html( data.toString(), {
+ socketId : req.params.socketId
+ }));
+ });
+
+});
+
+// Actually listen
+server.listen( opts.port || null );
+
+var brown = '\033[33m',
+ green = '\033[32m',
+ reset = '\033[0m';
+
+var slidesLocation = 'http://localhost' + ( opts.port ? ( ':' + opts.port ) : '' );
+
+console.log( brown + 'reveal.js - Speaker Notes' + reset );
+console.log( '1. Open the slides at ' + green + slidesLocation + reset );
+console.log( '2. Click on the link in your JS console to go to the notes page' );
+console.log( '3. Advance through your slides and your notes will advance automatically' );
diff --git a/dev/plugins/presentation/node_modules/reveal.js/plugin/notes/notes.js b/dev/plugins/presentation/node_modules/reveal.js/plugin/notes/notes.js
new file mode 100644
index 00000000..3d5eac4b
--- /dev/null
+++ b/dev/plugins/presentation/node_modules/reveal.js/plugin/notes/notes.js
@@ -0,0 +1,178 @@
+/**
+ * Handles opening of and synchronization with the reveal.js
+ * notes window.
+ *
+ * Handshake process:
+ * 1. This window posts 'connect' to notes window
+ * - Includes URL of presentation to show
+ * 2. Notes window responds with 'connected' when it is available
+ * 3. This window proceeds to send the current presentation state
+ * to the notes window
+ */
+var RevealNotes = (function() {
+
+ var notesPopup = null;
+
+ function openNotes( notesFilePath ) {
+
+ if (notesPopup && !notesPopup.closed) {
+ notesPopup.focus();
+ return;
+ }
+
+ if( !notesFilePath ) {
+ var jsFileLocation = document.querySelector('script[src$="notes.js"]').src; // this js file path
+ jsFileLocation = jsFileLocation.replace(/notes\.js(\?.*)?$/, ''); // the js folder path
+ notesFilePath = jsFileLocation + 'notes.html';
+ }
+
+ notesPopup = window.open( notesFilePath, 'reveal.js - Notes', 'width=1100,height=700' );
+
+ if( !notesPopup ) {
+ alert( 'Speaker view popup failed to open. Please make sure popups are allowed and reopen the speaker view.' );
+ return;
+ }
+
+ /**
+ * Connect to the notes window through a postmessage handshake.
+ * Using postmessage enables us to work in situations where the
+ * origins differ, such as a presentation being opened from the
+ * file system.
+ */
+ function connect() {
+ // Keep trying to connect until we get a 'connected' message back
+ var connectInterval = setInterval( function() {
+ notesPopup.postMessage( JSON.stringify( {
+ namespace: 'reveal-notes',
+ type: 'connect',
+ url: window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search,
+ state: Reveal.getState()
+ } ), '*' );
+ }, 500 );
+
+ window.addEventListener( 'message', function( event ) {
+ var data = JSON.parse( event.data );
+ if( data && data.namespace === 'reveal-notes' && data.type === 'connected' ) {
+ clearInterval( connectInterval );
+ onConnected();
+ }
+ if( data && data.namespace === 'reveal-notes' && data.type === 'call' ) {
+ callRevealApi( data.methodName, data.arguments, data.callId );
+ }
+ } );
+ }
+
+ /**
+ * Calls the specified Reveal.js method with the provided argument
+ * and then pushes the result to the notes frame.
+ */
+ function callRevealApi( methodName, methodArguments, callId ) {
+
+ var result = Reveal[methodName].apply( Reveal, methodArguments );
+ notesPopup.postMessage( JSON.stringify( {
+ namespace: 'reveal-notes',
+ type: 'return',
+ result: result,
+ callId: callId
+ } ), '*' );
+
+ }
+
+ /**
+ * Posts the current slide data to the notes window
+ */
+ function post( event ) {
+
+ var slideElement = Reveal.getCurrentSlide(),
+ notesElement = slideElement.querySelector( 'aside.notes' ),
+ fragmentElement = slideElement.querySelector( '.current-fragment' );
+
+ var messageData = {
+ namespace: 'reveal-notes',
+ type: 'state',
+ notes: '',
+ markdown: false,
+ whitespace: 'normal',
+ state: Reveal.getState()
+ };
+
+ // Look for notes defined in a slide attribute
+ if( slideElement.hasAttribute( 'data-notes' ) ) {
+ messageData.notes = slideElement.getAttribute( 'data-notes' );
+ messageData.whitespace = 'pre-wrap';
+ }
+
+ // Look for notes defined in a fragment
+ if( fragmentElement ) {
+ var fragmentNotes = fragmentElement.querySelector( 'aside.notes' );
+ if( fragmentNotes ) {
+ notesElement = fragmentNotes;
+ }
+ else if( fragmentElement.hasAttribute( 'data-notes' ) ) {
+ messageData.notes = fragmentElement.getAttribute( 'data-notes' );
+ messageData.whitespace = 'pre-wrap';
+
+ // In case there are slide notes
+ notesElement = null;
+ }
+ }
+
+ // Look for notes defined in an aside element
+ if( notesElement ) {
+ messageData.notes = notesElement.innerHTML;
+ messageData.markdown = typeof notesElement.getAttribute( 'data-markdown' ) === 'string';
+ }
+
+ notesPopup.postMessage( JSON.stringify( messageData ), '*' );
+
+ }
+
+ /**
+ * Called once we have established a connection to the notes
+ * window.
+ */
+ function onConnected() {
+
+ // Monitor events that trigger a change in state
+ Reveal.addEventListener( 'slidechanged', post );
+ Reveal.addEventListener( 'fragmentshown', post );
+ Reveal.addEventListener( 'fragmenthidden', post );
+ Reveal.addEventListener( 'overviewhidden', post );
+ Reveal.addEventListener( 'overviewshown', post );
+ Reveal.addEventListener( 'paused', post );
+ Reveal.addEventListener( 'resumed', post );
+
+ // Post the initial state
+ post();
+
+ }
+
+ connect();
+
+ }
+
+ return {
+ init: function() {
+
+ if( !/receiver/i.test( window.location.search ) ) {
+
+ // If the there's a 'notes' query set, open directly
+ if( window.location.search.match( /(\?|\&)notes/gi ) !== null ) {
+ openNotes();
+ }
+
+ // Open the notes when the 's' key is hit
+ Reveal.addKeyBinding({keyCode: 83, key: 'S', description: 'Speaker notes view'}, function() {
+ openNotes();
+ } );
+
+ }
+
+ },
+
+ open: openNotes
+ };
+
+})();
+
+Reveal.registerPlugin( 'notes', RevealNotes );
diff --git a/dev/plugins/presentation/node_modules/reveal.js/plugin/print-pdf/print-pdf.js b/dev/plugins/presentation/node_modules/reveal.js/plugin/print-pdf/print-pdf.js
new file mode 100644
index 00000000..f62aedc8
--- /dev/null
+++ b/dev/plugins/presentation/node_modules/reveal.js/plugin/print-pdf/print-pdf.js
@@ -0,0 +1,67 @@
+/**
+ * phantomjs script for printing presentations to PDF.
+ *
+ * Example:
+ * phantomjs print-pdf.js "http://revealjs.com?print-pdf" reveal-demo.pdf
+ *
+ * @author Manuel Bieh (https://github.com/manuelbieh)
+ * @author Hakim El Hattab (https://github.com/hakimel)
+ * @author Manuel Riezebosch (https://github.com/riezebosch)
+ */
+
+// html2pdf.js
+var system = require( 'system' );
+
+var probePage = new WebPage();
+var printPage = new WebPage();
+
+var inputFile = system.args[1] || 'index.html?print-pdf';
+var outputFile = system.args[2] || 'slides.pdf';
+
+if( outputFile.match( /\.pdf$/gi ) === null ) {
+ outputFile += '.pdf';
+}
+
+console.log( 'Export PDF: Reading reveal.js config [1/4]' );
+
+probePage.open( inputFile, function( status ) {
+
+ console.log( 'Export PDF: Preparing print layout [2/4]' );
+
+ var config = probePage.evaluate( function() {
+ return Reveal.getConfig();
+ } );
+
+ if( config ) {
+
+ printPage.paperSize = {
+ width: Math.floor( config.width * ( 1 + config.margin ) ),
+ height: Math.floor( config.height * ( 1 + config.margin ) ),
+ border: 0
+ };
+
+ printPage.open( inputFile, function( status ) {
+ console.log( 'Export PDF: Preparing pdf [3/4]')
+ printPage.evaluate( function() {
+ Reveal.isReady() ? window.callPhantom() : Reveal.addEventListener( 'pdf-ready', window.callPhantom );
+ } );
+ } );
+
+ printPage.onCallback = function( data ) {
+ // For some reason we need to "jump the queue" for syntax highlighting to work.
+ // See: http://stackoverflow.com/a/3580132/129269
+ setTimeout( function() {
+ console.log( 'Export PDF: Writing file [4/4]' );
+ printPage.render( outputFile );
+ console.log( 'Export PDF: Finished successfully!' );
+ phantom.exit();
+ }, 0 );
+ };
+ }
+ else {
+
+ console.log( 'Export PDF: Unable to read reveal.js config. Make sure the input address points to a reveal.js page.' );
+ phantom.exit( 1 );
+
+ }
+} );
diff --git a/dev/plugins/presentation/node_modules/reveal.js/plugin/search/search.js b/dev/plugins/presentation/node_modules/reveal.js/plugin/search/search.js
new file mode 100644
index 00000000..21c03671
--- /dev/null
+++ b/dev/plugins/presentation/node_modules/reveal.js/plugin/search/search.js
@@ -0,0 +1,206 @@
+/*
+ * Handles finding a text string anywhere in the slides and showing the next occurrence to the user
+ * by navigatating to that slide and highlighting it.
+ *
+ * By Jon Snyder
" : "\n";
+ } else {
+ return this.HTML ? " " : " ";
+ }
+ },
+
+ // Extra can be a number, shortcut for increasing-calling-decreasing
+ indent: function indent(extra) {
+ if (!this.multiline) {
+ return "";
+ }
+ var chr = this.indentChar;
+ if (this.HTML) {
+ chr = chr.replace(/\t/g, " ").replace(/ /g, " ");
+ }
+ return new Array(this.depth + (extra || 0)).join(chr);
+ },
+ up: function up(a) {
+ this.depth += a || 1;
+ },
+ down: function down(a) {
+ this.depth -= a || 1;
+ },
+ setParser: function setParser(name, parser) {
+ this.parsers[name] = parser;
+ },
+
+ // The next 3 are exposed so you can use them
+ quote: quote,
+ literal: literal,
+ join: join,
+ depth: 1,
+ maxDepth: config.maxDepth,
+
+ // This is the list of parsers, to modify them, use dump.setParser
+ parsers: {
+ window: "[Window]",
+ document: "[Document]",
+ error: function error(_error) {
+ return "Error(\"" + _error.message + "\")";
+ },
+ unknown: "[Unknown]",
+ "null": "null",
+ "undefined": "undefined",
+ "function": function _function(fn) {
+ var ret = "function",
+
+
+ // Functions never have name in IE
+ name = "name" in fn ? fn.name : (reName.exec(fn) || [])[1];
+
+ if (name) {
+ ret += " " + name;
+ }
+ ret += "(";
+
+ ret = [ret, dump.parse(fn, "functionArgs"), "){"].join("");
+ return join(ret, dump.parse(fn, "functionCode"), "}");
+ },
+ array: array,
+ nodelist: array,
+ "arguments": array,
+ object: function object(map, stack) {
+ var keys,
+ key,
+ val,
+ i,
+ nonEnumerableProperties,
+ ret = [];
+
+ if (dump.maxDepth && dump.depth > dump.maxDepth) {
+ return "[object Object]";
+ }
+
+ dump.up();
+ keys = [];
+ for (key in map) {
+ keys.push(key);
+ }
+
+ // Some properties are not always enumerable on Error objects.
+ nonEnumerableProperties = ["message", "name"];
+ for (i in nonEnumerableProperties) {
+ key = nonEnumerableProperties[i];
+ if (key in map && !inArray(key, keys)) {
+ keys.push(key);
+ }
+ }
+ keys.sort();
+ for (i = 0; i < keys.length; i++) {
+ key = keys[i];
+ val = map[key];
+ ret.push(dump.parse(key, "key") + ": " + dump.parse(val, undefined, stack));
+ }
+ dump.down();
+ return join("{", ret, "}");
+ },
+ node: function node(_node) {
+ var len,
+ i,
+ val,
+ open = dump.HTML ? "<" : "<",
+ close = dump.HTML ? ">" : ">",
+ tag = _node.nodeName.toLowerCase(),
+ ret = open + tag,
+ attrs = _node.attributes;
+
+ if (attrs) {
+ for (i = 0, len = attrs.length; i < len; i++) {
+ val = attrs[i].nodeValue;
+
+ // IE6 includes all attributes in .attributes, even ones not explicitly
+ // set. Those have values like undefined, null, 0, false, "" or
+ // "inherit".
+ if (val && val !== "inherit") {
+ ret += " " + attrs[i].nodeName + "=" + dump.parse(val, "attribute");
+ }
+ }
+ }
+ ret += close;
+
+ // Show content of TextNode or CDATASection
+ if (_node.nodeType === 3 || _node.nodeType === 4) {
+ ret += _node.nodeValue;
+ }
+
+ return ret + open + "/" + tag + close;
+ },
+
+ // Function calls it internally, it's the arguments part of the function
+ functionArgs: function functionArgs(fn) {
+ var args,
+ l = fn.length;
+
+ if (!l) {
+ return "";
+ }
+
+ args = new Array(l);
+ while (l--) {
+
+ // 97 is 'a'
+ args[l] = String.fromCharCode(97 + l);
+ }
+ return " " + args.join(", ") + " ";
+ },
+
+ // Object calls it internally, the key part of an item in a map
+ key: quote,
+
+ // Function calls it internally, it's the content of the function
+ functionCode: "[code]",
+
+ // Node calls it internally, it's a html attribute value
+ attribute: quote,
+ string: quote,
+ date: quote,
+ regexp: literal,
+ number: literal,
+ "boolean": literal,
+ symbol: function symbol(sym) {
+ return sym.toString();
+ }
+ },
+
+ // If true, entities are escaped ( <, >, \t, space and \n )
+ HTML: false,
+
+ // Indentation unit
+ indentChar: " ",
+
+ // If true, items in a collection, are separated by a \n, else just a space.
+ multiline: true
+ };
+
+ return dump;
+ })();
+
+ var LISTENERS = Object.create(null);
+ var SUPPORTED_EVENTS = ["runStart", "suiteStart", "testStart", "assertion", "testEnd", "suiteEnd", "runEnd"];
+
+ /**
+ * Emits an event with the specified data to all currently registered listeners.
+ * Callbacks will fire in the order in which they are registered (FIFO). This
+ * function is not exposed publicly; it is used by QUnit internals to emit
+ * logging events.
+ *
+ * @private
+ * @method emit
+ * @param {String} eventName
+ * @param {Object} data
+ * @return {Void}
+ */
+ function emit(eventName, data) {
+ if (objectType(eventName) !== "string") {
+ throw new TypeError("eventName must be a string when emitting an event");
+ }
+
+ // Clone the callbacks in case one of them registers a new callback
+ var originalCallbacks = LISTENERS[eventName];
+ var callbacks = originalCallbacks ? [].concat(toConsumableArray(originalCallbacks)) : [];
+
+ for (var i = 0; i < callbacks.length; i++) {
+ callbacks[i](data);
+ }
+ }
+
+ /**
+ * Registers a callback as a listener to the specified event.
+ *
+ * @public
+ * @method on
+ * @param {String} eventName
+ * @param {Function} callback
+ * @return {Void}
+ */
+ function on(eventName, callback) {
+ if (objectType(eventName) !== "string") {
+ throw new TypeError("eventName must be a string when registering a listener");
+ } else if (!inArray(eventName, SUPPORTED_EVENTS)) {
+ var events = SUPPORTED_EVENTS.join(", ");
+ throw new Error("\"" + eventName + "\" is not a valid event; must be one of: " + events + ".");
+ } else if (objectType(callback) !== "function") {
+ throw new TypeError("callback must be a function when registering a listener");
+ }
+
+ if (!LISTENERS[eventName]) {
+ LISTENERS[eventName] = [];
+ }
+
+ // Don't register the same callback more than once
+ if (!inArray(callback, LISTENERS[eventName])) {
+ LISTENERS[eventName].push(callback);
+ }
+ }
+
+ // Register logging callbacks
+ function registerLoggingCallbacks(obj) {
+ var i,
+ l,
+ key,
+ callbackNames = ["begin", "done", "log", "testStart", "testDone", "moduleStart", "moduleDone"];
+
+ function registerLoggingCallback(key) {
+ var loggingCallback = function loggingCallback(callback) {
+ if (objectType(callback) !== "function") {
+ throw new Error("QUnit logging methods require a callback function as their first parameters.");
+ }
+
+ config.callbacks[key].push(callback);
+ };
+
+ return loggingCallback;
+ }
+
+ for (i = 0, l = callbackNames.length; i < l; i++) {
+ key = callbackNames[i];
+
+ // Initialize key collection of logging callback
+ if (objectType(config.callbacks[key]) === "undefined") {
+ config.callbacks[key] = [];
+ }
+
+ obj[key] = registerLoggingCallback(key);
+ }
+ }
+
+ function runLoggingCallbacks(key, args) {
+ var i, l, callbacks;
+
+ callbacks = config.callbacks[key];
+ for (i = 0, l = callbacks.length; i < l; i++) {
+ callbacks[i](args);
+ }
+ }
+
+ // Doesn't support IE9, it will return undefined on these browsers
+ // See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
+ var fileName = (sourceFromStacktrace(0) || "").replace(/(:\d+)+\)?/, "").replace(/.+\//, "");
+
+ function extractStacktrace(e, offset) {
+ offset = offset === undefined ? 4 : offset;
+
+ var stack, include, i;
+
+ if (e && e.stack) {
+ stack = e.stack.split("\n");
+ if (/^error$/i.test(stack[0])) {
+ stack.shift();
+ }
+ if (fileName) {
+ include = [];
+ for (i = offset; i < stack.length; i++) {
+ if (stack[i].indexOf(fileName) !== -1) {
+ break;
+ }
+ include.push(stack[i]);
+ }
+ if (include.length) {
+ return include.join("\n");
+ }
+ }
+ return stack[offset];
+ }
+ }
+
+ function sourceFromStacktrace(offset) {
+ var error = new Error();
+
+ // Support: Safari <=7 only, IE <=10 - 11 only
+ // Not all browsers generate the `stack` property for `new Error()`, see also #636
+ if (!error.stack) {
+ try {
+ throw error;
+ } catch (err) {
+ error = err;
+ }
+ }
+
+ return extractStacktrace(error, offset);
+ }
+
+ var priorityCount = 0;
+ var unitSampler = void 0;
+
+ /**
+ * Advances the ProcessingQueue to the next item if it is ready.
+ * @param {Boolean} last
+ */
+ function advance() {
+ var start = now();
+ config.depth = (config.depth || 0) + 1;
+
+ while (config.queue.length && !config.blocking) {
+ var elapsedTime = now() - start;
+
+ if (!defined.setTimeout || config.updateRate <= 0 || elapsedTime < config.updateRate) {
+ if (priorityCount > 0) {
+ priorityCount--;
+ }
+
+ config.queue.shift()();
+ } else {
+ setTimeout(advance);
+ break;
+ }
+ }
+
+ config.depth--;
+
+ if (!config.blocking && !config.queue.length && config.depth === 0) {
+ done();
+ }
+ }
+
+ function addToQueueImmediate(callback) {
+ if (objectType(callback) === "array") {
+ while (callback.length) {
+ addToQueueImmediate(callback.pop());
+ }
+
+ return;
+ }
+
+ config.queue.unshift(callback);
+ priorityCount++;
+ }
+
+ /**
+ * Adds a function to the ProcessingQueue for execution.
+ * @param {Function|Array} callback
+ * @param {Boolean} priority
+ * @param {String} seed
+ */
+ function addToQueue(callback, prioritize, seed) {
+ if (prioritize) {
+ config.queue.splice(priorityCount++, 0, callback);
+ } else if (seed) {
+ if (!unitSampler) {
+ unitSampler = unitSamplerGenerator(seed);
+ }
+
+ // Insert into a random position after all prioritized items
+ var index = Math.floor(unitSampler() * (config.queue.length - priorityCount + 1));
+ config.queue.splice(priorityCount + index, 0, callback);
+ } else {
+ config.queue.push(callback);
+ }
+ }
+
+ /**
+ * Creates a seeded "sample" generator which is used for randomizing tests.
+ */
+ function unitSamplerGenerator(seed) {
+
+ // 32-bit xorshift, requires only a nonzero seed
+ // http://excamera.com/sphinx/article-xorshift.html
+ var sample = parseInt(generateHash(seed), 16) || -1;
+ return function () {
+ sample ^= sample << 13;
+ sample ^= sample >>> 17;
+ sample ^= sample << 5;
+
+ // ECMAScript has no unsigned number type
+ if (sample < 0) {
+ sample += 0x100000000;
+ }
+
+ return sample / 0x100000000;
+ };
+ }
+
+ /**
+ * This function is called when the ProcessingQueue is done processing all
+ * items. It handles emitting the final run events.
+ */
+ function done() {
+ var storage = config.storage;
+
+ ProcessingQueue.finished = true;
+
+ var runtime = now() - config.started;
+ var passed = config.stats.all - config.stats.bad;
+
+ emit("runEnd", globalSuite.end(true));
+ runLoggingCallbacks("done", {
+ passed: passed,
+ failed: config.stats.bad,
+ total: config.stats.all,
+ runtime: runtime
+ });
+
+ // Clear own storage items if all tests passed
+ if (storage && config.stats.bad === 0) {
+ for (var i = storage.length - 1; i >= 0; i--) {
+ var key = storage.key(i);
+
+ if (key.indexOf("qunit-test-") === 0) {
+ storage.removeItem(key);
+ }
+ }
+ }
+ }
+
+ var ProcessingQueue = {
+ finished: false,
+ add: addToQueue,
+ addImmediate: addToQueueImmediate,
+ advance: advance
+ };
+
+ var TestReport = function () {
+ function TestReport(name, suite, options) {
+ classCallCheck(this, TestReport);
+
+ this.name = name;
+ this.suiteName = suite.name;
+ this.fullName = suite.fullName.concat(name);
+ this.runtime = 0;
+ this.assertions = [];
+
+ this.skipped = !!options.skip;
+ this.todo = !!options.todo;
+
+ this.valid = options.valid;
+
+ this._startTime = 0;
+ this._endTime = 0;
+
+ suite.pushTest(this);
+ }
+
+ createClass(TestReport, [{
+ key: "start",
+ value: function start(recordTime) {
+ if (recordTime) {
+ this._startTime = Date.now();
+ }
+
+ return {
+ name: this.name,
+ suiteName: this.suiteName,
+ fullName: this.fullName.slice()
+ };
+ }
+ }, {
+ key: "end",
+ value: function end(recordTime) {
+ if (recordTime) {
+ this._endTime = Date.now();
+ }
+
+ return extend(this.start(), {
+ runtime: this.getRuntime(),
+ status: this.getStatus(),
+ errors: this.getFailedAssertions(),
+ assertions: this.getAssertions()
+ });
+ }
+ }, {
+ key: "pushAssertion",
+ value: function pushAssertion(assertion) {
+ this.assertions.push(assertion);
+ }
+ }, {
+ key: "getRuntime",
+ value: function getRuntime() {
+ return this._endTime - this._startTime;
+ }
+ }, {
+ key: "getStatus",
+ value: function getStatus() {
+ if (this.skipped) {
+ return "skipped";
+ }
+
+ var testPassed = this.getFailedAssertions().length > 0 ? this.todo : !this.todo;
+
+ if (!testPassed) {
+ return "failed";
+ } else if (this.todo) {
+ return "todo";
+ } else {
+ return "passed";
+ }
+ }
+ }, {
+ key: "getFailedAssertions",
+ value: function getFailedAssertions() {
+ return this.assertions.filter(function (assertion) {
+ return !assertion.passed;
+ });
+ }
+ }, {
+ key: "getAssertions",
+ value: function getAssertions() {
+ return this.assertions.slice();
+ }
+
+ // Remove actual and expected values from assertions. This is to prevent
+ // leaking memory throughout a test suite.
+
+ }, {
+ key: "slimAssertions",
+ value: function slimAssertions() {
+ this.assertions = this.assertions.map(function (assertion) {
+ delete assertion.actual;
+ delete assertion.expected;
+ return assertion;
+ });
+ }
+ }]);
+ return TestReport;
+ }();
+
+ var focused$1 = false;
+
+ function Test(settings) {
+ var i, l;
+
+ ++Test.count;
+
+ this.expected = null;
+ this.assertions = [];
+ this.semaphore = 0;
+ this.module = config.currentModule;
+ this.stack = sourceFromStacktrace(3);
+ this.steps = [];
+ this.timeout = undefined;
+
+ // If a module is skipped, all its tests and the tests of the child suites
+ // should be treated as skipped even if they are defined as `only` or `todo`.
+ // As for `todo` module, all its tests will be treated as `todo` except for
+ // tests defined as `skip` which will be left intact.
+ //
+ // So, if a test is defined as `todo` and is inside a skipped module, we should
+ // then treat that test as if was defined as `skip`.
+ if (this.module.skip) {
+ settings.skip = true;
+ settings.todo = false;
+
+ // Skipped tests should be left intact
+ } else if (this.module.todo && !settings.skip) {
+ settings.todo = true;
+ }
+
+ extend(this, settings);
+
+ this.testReport = new TestReport(settings.testName, this.module.suiteReport, {
+ todo: settings.todo,
+ skip: settings.skip,
+ valid: this.valid()
+ });
+
+ // Register unique strings
+ for (i = 0, l = this.module.tests; i < l.length; i++) {
+ if (this.module.tests[i].name === this.testName) {
+ this.testName += " ";
+ }
+ }
+
+ this.testId = generateHash(this.module.name, this.testName);
+
+ this.module.tests.push({
+ name: this.testName,
+ testId: this.testId,
+ skip: !!settings.skip
+ });
+
+ if (settings.skip) {
+
+ // Skipped tests will fully ignore any sent callback
+ this.callback = function () {};
+ this.async = false;
+ this.expected = 0;
+ } else {
+ if (typeof this.callback !== "function") {
+ var method = this.todo ? "todo" : "test";
+
+ // eslint-disable-next-line max-len
+ throw new TypeError("You must provide a function as a test callback to QUnit." + method + "(\"" + settings.testName + "\")");
+ }
+
+ this.assert = new Assert(this);
+ }
+ }
+
+ Test.count = 0;
+
+ function getNotStartedModules(startModule) {
+ var module = startModule,
+ modules = [];
+
+ while (module && module.testsRun === 0) {
+ modules.push(module);
+ module = module.parentModule;
+ }
+
+ return modules;
+ }
+
+ Test.prototype = {
+ before: function before() {
+ var i,
+ startModule,
+ module = this.module,
+ notStartedModules = getNotStartedModules(module);
+
+ for (i = notStartedModules.length - 1; i >= 0; i--) {
+ startModule = notStartedModules[i];
+ startModule.stats = { all: 0, bad: 0, started: now() };
+ emit("suiteStart", startModule.suiteReport.start(true));
+ runLoggingCallbacks("moduleStart", {
+ name: startModule.name,
+ tests: startModule.tests
+ });
+ }
+
+ config.current = this;
+
+ this.testEnvironment = extend({}, module.testEnvironment);
+
+ this.started = now();
+ emit("testStart", this.testReport.start(true));
+ runLoggingCallbacks("testStart", {
+ name: this.testName,
+ module: module.name,
+ testId: this.testId,
+ previousFailure: this.previousFailure
+ });
+
+ if (!config.pollution) {
+ saveGlobal();
+ }
+ },
+
+ run: function run() {
+ var promise;
+
+ config.current = this;
+
+ this.callbackStarted = now();
+
+ if (config.notrycatch) {
+ runTest(this);
+ return;
+ }
+
+ try {
+ runTest(this);
+ } catch (e) {
+ this.pushFailure("Died on test #" + (this.assertions.length + 1) + " " + this.stack + ": " + (e.message || e), extractStacktrace(e, 0));
+
+ // Else next test will carry the responsibility
+ saveGlobal();
+
+ // Restart the tests if they're blocking
+ if (config.blocking) {
+ internalRecover(this);
+ }
+ }
+
+ function runTest(test) {
+ promise = test.callback.call(test.testEnvironment, test.assert);
+ test.resolvePromise(promise);
+
+ // If the test has a "lock" on it, but the timeout is 0, then we push a
+ // failure as the test should be synchronous.
+ if (test.timeout === 0 && test.semaphore !== 0) {
+ pushFailure("Test did not finish synchronously even though assert.timeout( 0 ) was used.", sourceFromStacktrace(2));
+ }
+ }
+ },
+
+ after: function after() {
+ checkPollution();
+ },
+
+ queueHook: function queueHook(hook, hookName, hookOwner) {
+ var _this = this;
+
+ var callHook = function callHook() {
+ var promise = hook.call(_this.testEnvironment, _this.assert);
+ _this.resolvePromise(promise, hookName);
+ };
+
+ var runHook = function runHook() {
+ if (hookName === "before") {
+ if (hookOwner.unskippedTestsRun !== 0) {
+ return;
+ }
+
+ _this.preserveEnvironment = true;
+ }
+
+ if (hookName === "after" && hookOwner.unskippedTestsRun !== numberOfUnskippedTests(hookOwner) - 1 && config.queue.length > 2) {
+ return;
+ }
+
+ config.current = _this;
+ if (config.notrycatch) {
+ callHook();
+ return;
+ }
+ try {
+ callHook();
+ } catch (error) {
+ _this.pushFailure(hookName + " failed on " + _this.testName + ": " + (error.message || error), extractStacktrace(error, 0));
+ }
+ };
+
+ return runHook;
+ },
+
+
+ // Currently only used for module level hooks, can be used to add global level ones
+ hooks: function hooks(handler) {
+ var hooks = [];
+
+ function processHooks(test, module) {
+ if (module.parentModule) {
+ processHooks(test, module.parentModule);
+ }
+
+ if (module.hooks[handler].length) {
+ for (var i = 0; i < module.hooks[handler].length; i++) {
+ hooks.push(test.queueHook(module.hooks[handler][i], handler, module));
+ }
+ }
+ }
+
+ // Hooks are ignored on skipped tests
+ if (!this.skip) {
+ processHooks(this, this.module);
+ }
+
+ return hooks;
+ },
+
+
+ finish: function finish() {
+ config.current = this;
+ if (config.requireExpects && this.expected === null) {
+ this.pushFailure("Expected number of assertions to be defined, but expect() was " + "not called.", this.stack);
+ } else if (this.expected !== null && this.expected !== this.assertions.length) {
+ this.pushFailure("Expected " + this.expected + " assertions, but " + this.assertions.length + " were run", this.stack);
+ } else if (this.expected === null && !this.assertions.length) {
+ this.pushFailure("Expected at least one assertion, but none were run - call " + "expect(0) to accept zero assertions.", this.stack);
+ }
+
+ var i,
+ module = this.module,
+ moduleName = module.name,
+ testName = this.testName,
+ skipped = !!this.skip,
+ todo = !!this.todo,
+ bad = 0,
+ storage = config.storage;
+
+ this.runtime = now() - this.started;
+
+ config.stats.all += this.assertions.length;
+ module.stats.all += this.assertions.length;
+
+ for (i = 0; i < this.assertions.length; i++) {
+ if (!this.assertions[i].result) {
+ bad++;
+ config.stats.bad++;
+ module.stats.bad++;
+ }
+ }
+
+ notifyTestsRan(module, skipped);
+
+ // Store result when possible
+ if (storage) {
+ if (bad) {
+ storage.setItem("qunit-test-" + moduleName + "-" + testName, bad);
+ } else {
+ storage.removeItem("qunit-test-" + moduleName + "-" + testName);
+ }
+ }
+
+ // After emitting the js-reporters event we cleanup the assertion data to
+ // avoid leaking it. It is not used by the legacy testDone callbacks.
+ emit("testEnd", this.testReport.end(true));
+ this.testReport.slimAssertions();
+
+ runLoggingCallbacks("testDone", {
+ name: testName,
+ module: moduleName,
+ skipped: skipped,
+ todo: todo,
+ failed: bad,
+ passed: this.assertions.length - bad,
+ total: this.assertions.length,
+ runtime: skipped ? 0 : this.runtime,
+
+ // HTML Reporter use
+ assertions: this.assertions,
+ testId: this.testId,
+
+ // Source of Test
+ source: this.stack
+ });
+
+ if (module.testsRun === numberOfTests(module)) {
+ logSuiteEnd(module);
+
+ // Check if the parent modules, iteratively, are done. If that the case,
+ // we emit the `suiteEnd` event and trigger `moduleDone` callback.
+ var parent = module.parentModule;
+ while (parent && parent.testsRun === numberOfTests(parent)) {
+ logSuiteEnd(parent);
+ parent = parent.parentModule;
+ }
+ }
+
+ config.current = undefined;
+
+ function logSuiteEnd(module) {
+ emit("suiteEnd", module.suiteReport.end(true));
+ runLoggingCallbacks("moduleDone", {
+ name: module.name,
+ tests: module.tests,
+ failed: module.stats.bad,
+ passed: module.stats.all - module.stats.bad,
+ total: module.stats.all,
+ runtime: now() - module.stats.started
+ });
+ }
+ },
+
+ preserveTestEnvironment: function preserveTestEnvironment() {
+ if (this.preserveEnvironment) {
+ this.module.testEnvironment = this.testEnvironment;
+ this.testEnvironment = extend({}, this.module.testEnvironment);
+ }
+ },
+
+ queue: function queue() {
+ var test = this;
+
+ if (!this.valid()) {
+ return;
+ }
+
+ function runTest() {
+
+ // Each of these can by async
+ ProcessingQueue.addImmediate([function () {
+ test.before();
+ }, test.hooks("before"), function () {
+ test.preserveTestEnvironment();
+ }, test.hooks("beforeEach"), function () {
+ test.run();
+ }, test.hooks("afterEach").reverse(), test.hooks("after").reverse(), function () {
+ test.after();
+ }, function () {
+ test.finish();
+ }]);
+ }
+
+ var previousFailCount = config.storage && +config.storage.getItem("qunit-test-" + this.module.name + "-" + this.testName);
+
+ // Prioritize previously failed tests, detected from storage
+ var prioritize = config.reorder && !!previousFailCount;
+
+ this.previousFailure = !!previousFailCount;
+
+ ProcessingQueue.add(runTest, prioritize, config.seed);
+
+ // If the queue has already finished, we manually process the new test
+ if (ProcessingQueue.finished) {
+ ProcessingQueue.advance();
+ }
+ },
+
+
+ pushResult: function pushResult(resultInfo) {
+ if (this !== config.current) {
+ throw new Error("Assertion occurred after test had finished.");
+ }
+
+ // Destructure of resultInfo = { result, actual, expected, message, negative }
+ var source,
+ details = {
+ module: this.module.name,
+ name: this.testName,
+ result: resultInfo.result,
+ message: resultInfo.message,
+ actual: resultInfo.actual,
+ testId: this.testId,
+ negative: resultInfo.negative || false,
+ runtime: now() - this.started,
+ todo: !!this.todo
+ };
+
+ if (hasOwn.call(resultInfo, "expected")) {
+ details.expected = resultInfo.expected;
+ }
+
+ if (!resultInfo.result) {
+ source = resultInfo.source || sourceFromStacktrace();
+
+ if (source) {
+ details.source = source;
+ }
+ }
+
+ this.logAssertion(details);
+
+ this.assertions.push({
+ result: !!resultInfo.result,
+ message: resultInfo.message
+ });
+ },
+
+ pushFailure: function pushFailure(message, source, actual) {
+ if (!(this instanceof Test)) {
+ throw new Error("pushFailure() assertion outside test context, was " + sourceFromStacktrace(2));
+ }
+
+ this.pushResult({
+ result: false,
+ message: message || "error",
+ actual: actual || null,
+ source: source
+ });
+ },
+
+ /**
+ * Log assertion details using both the old QUnit.log interface and
+ * QUnit.on( "assertion" ) interface.
+ *
+ * @private
+ */
+ logAssertion: function logAssertion(details) {
+ runLoggingCallbacks("log", details);
+
+ var assertion = {
+ passed: details.result,
+ actual: details.actual,
+ expected: details.expected,
+ message: details.message,
+ stack: details.source,
+ todo: details.todo
+ };
+ this.testReport.pushAssertion(assertion);
+ emit("assertion", assertion);
+ },
+
+
+ resolvePromise: function resolvePromise(promise, phase) {
+ var then,
+ resume,
+ message,
+ test = this;
+ if (promise != null) {
+ then = promise.then;
+ if (objectType(then) === "function") {
+ resume = internalStop(test);
+ if (config.notrycatch) {
+ then.call(promise, function () {
+ resume();
+ });
+ } else {
+ then.call(promise, function () {
+ resume();
+ }, function (error) {
+ message = "Promise rejected " + (!phase ? "during" : phase.replace(/Each$/, "")) + " \"" + test.testName + "\": " + (error && error.message || error);
+ test.pushFailure(message, extractStacktrace(error, 0));
+
+ // Else next test will carry the responsibility
+ saveGlobal();
+
+ // Unblock
+ resume();
+ });
+ }
+ }
+ }
+ },
+
+ valid: function valid() {
+ var filter = config.filter,
+ regexFilter = /^(!?)\/([\w\W]*)\/(i?$)/.exec(filter),
+ module = config.module && config.module.toLowerCase(),
+ fullName = this.module.name + ": " + this.testName;
+
+ function moduleChainNameMatch(testModule) {
+ var testModuleName = testModule.name ? testModule.name.toLowerCase() : null;
+ if (testModuleName === module) {
+ return true;
+ } else if (testModule.parentModule) {
+ return moduleChainNameMatch(testModule.parentModule);
+ } else {
+ return false;
+ }
+ }
+
+ function moduleChainIdMatch(testModule) {
+ return inArray(testModule.moduleId, config.moduleId) || testModule.parentModule && moduleChainIdMatch(testModule.parentModule);
+ }
+
+ // Internally-generated tests are always valid
+ if (this.callback && this.callback.validTest) {
+ return true;
+ }
+
+ if (config.moduleId && config.moduleId.length > 0 && !moduleChainIdMatch(this.module)) {
+
+ return false;
+ }
+
+ if (config.testId && config.testId.length > 0 && !inArray(this.testId, config.testId)) {
+
+ return false;
+ }
+
+ if (module && !moduleChainNameMatch(this.module)) {
+ return false;
+ }
+
+ if (!filter) {
+ return true;
+ }
+
+ return regexFilter ? this.regexFilter(!!regexFilter[1], regexFilter[2], regexFilter[3], fullName) : this.stringFilter(filter, fullName);
+ },
+
+ regexFilter: function regexFilter(exclude, pattern, flags, fullName) {
+ var regex = new RegExp(pattern, flags);
+ var match = regex.test(fullName);
+
+ return match !== exclude;
+ },
+
+ stringFilter: function stringFilter(filter, fullName) {
+ filter = filter.toLowerCase();
+ fullName = fullName.toLowerCase();
+
+ var include = filter.charAt(0) !== "!";
+ if (!include) {
+ filter = filter.slice(1);
+ }
+
+ // If the filter matches, we need to honour include
+ if (fullName.indexOf(filter) !== -1) {
+ return include;
+ }
+
+ // Otherwise, do the opposite
+ return !include;
+ }
+ };
+
+ function pushFailure() {
+ if (!config.current) {
+ throw new Error("pushFailure() assertion outside test context, in " + sourceFromStacktrace(2));
+ }
+
+ // Gets current test obj
+ var currentTest = config.current;
+
+ return currentTest.pushFailure.apply(currentTest, arguments);
+ }
+
+ function saveGlobal() {
+ config.pollution = [];
+
+ if (config.noglobals) {
+ for (var key in global$1) {
+ if (hasOwn.call(global$1, key)) {
+
+ // In Opera sometimes DOM element ids show up here, ignore them
+ if (/^qunit-test-output/.test(key)) {
+ continue;
+ }
+ config.pollution.push(key);
+ }
+ }
+ }
+ }
+
+ function checkPollution() {
+ var newGlobals,
+ deletedGlobals,
+ old = config.pollution;
+
+ saveGlobal();
+
+ newGlobals = diff(config.pollution, old);
+ if (newGlobals.length > 0) {
+ pushFailure("Introduced global variable(s): " + newGlobals.join(", "));
+ }
+
+ deletedGlobals = diff(old, config.pollution);
+ if (deletedGlobals.length > 0) {
+ pushFailure("Deleted global variable(s): " + deletedGlobals.join(", "));
+ }
+ }
+
+ // Will be exposed as QUnit.test
+ function test(testName, callback) {
+ if (focused$1) {
+ return;
+ }
+
+ var newTest = new Test({
+ testName: testName,
+ callback: callback
+ });
+
+ newTest.queue();
+ }
+
+ function todo(testName, callback) {
+ if (focused$1) {
+ return;
+ }
+
+ var newTest = new Test({
+ testName: testName,
+ callback: callback,
+ todo: true
+ });
+
+ newTest.queue();
+ }
+
+ // Will be exposed as QUnit.skip
+ function skip(testName) {
+ if (focused$1) {
+ return;
+ }
+
+ var test = new Test({
+ testName: testName,
+ skip: true
+ });
+
+ test.queue();
+ }
+
+ // Will be exposed as QUnit.only
+ function only(testName, callback) {
+ if (focused$1) {
+ return;
+ }
+
+ config.queue.length = 0;
+ focused$1 = true;
+
+ var newTest = new Test({
+ testName: testName,
+ callback: callback
+ });
+
+ newTest.queue();
+ }
+
+ // Put a hold on processing and return a function that will release it.
+ function internalStop(test) {
+ test.semaphore += 1;
+ config.blocking = true;
+
+ // Set a recovery timeout, if so configured.
+ if (defined.setTimeout) {
+ var timeoutDuration = void 0;
+
+ if (typeof test.timeout === "number") {
+ timeoutDuration = test.timeout;
+ } else if (typeof config.testTimeout === "number") {
+ timeoutDuration = config.testTimeout;
+ }
+
+ if (typeof timeoutDuration === "number" && timeoutDuration > 0) {
+ clearTimeout(config.timeout);
+ config.timeout = setTimeout(function () {
+ pushFailure("Test took longer than " + timeoutDuration + "ms; test timed out.", sourceFromStacktrace(2));
+ internalRecover(test);
+ }, timeoutDuration);
+ }
+ }
+
+ var released = false;
+ return function resume() {
+ if (released) {
+ return;
+ }
+
+ released = true;
+ test.semaphore -= 1;
+ internalStart(test);
+ };
+ }
+
+ // Forcefully release all processing holds.
+ function internalRecover(test) {
+ test.semaphore = 0;
+ internalStart(test);
+ }
+
+ // Release a processing hold, scheduling a resumption attempt if no holds remain.
+ function internalStart(test) {
+
+ // If semaphore is non-numeric, throw error
+ if (isNaN(test.semaphore)) {
+ test.semaphore = 0;
+
+ pushFailure("Invalid value on test.semaphore", sourceFromStacktrace(2));
+ return;
+ }
+
+ // Don't start until equal number of stop-calls
+ if (test.semaphore > 0) {
+ return;
+ }
+
+ // Throw an Error if start is called more often than stop
+ if (test.semaphore < 0) {
+ test.semaphore = 0;
+
+ pushFailure("Tried to restart test while already started (test's semaphore was 0 already)", sourceFromStacktrace(2));
+ return;
+ }
+
+ // Add a slight delay to allow more assertions etc.
+ if (defined.setTimeout) {
+ if (config.timeout) {
+ clearTimeout(config.timeout);
+ }
+ config.timeout = setTimeout(function () {
+ if (test.semaphore > 0) {
+ return;
+ }
+
+ if (config.timeout) {
+ clearTimeout(config.timeout);
+ }
+
+ begin();
+ });
+ } else {
+ begin();
+ }
+ }
+
+ function collectTests(module) {
+ var tests = [].concat(module.tests);
+ var modules = [].concat(toConsumableArray(module.childModules));
+
+ // Do a breadth-first traversal of the child modules
+ while (modules.length) {
+ var nextModule = modules.shift();
+ tests.push.apply(tests, nextModule.tests);
+ modules.push.apply(modules, toConsumableArray(nextModule.childModules));
+ }
+
+ return tests;
+ }
+
+ function numberOfTests(module) {
+ return collectTests(module).length;
+ }
+
+ function numberOfUnskippedTests(module) {
+ return collectTests(module).filter(function (test) {
+ return !test.skip;
+ }).length;
+ }
+
+ function notifyTestsRan(module, skipped) {
+ module.testsRun++;
+ if (!skipped) {
+ module.unskippedTestsRun++;
+ }
+ while (module = module.parentModule) {
+ module.testsRun++;
+ if (!skipped) {
+ module.unskippedTestsRun++;
+ }
+ }
+ }
+
+ /**
+ * Returns a function that proxies to the given method name on the globals
+ * console object. The proxy will also detect if the console doesn't exist and
+ * will appropriately no-op. This allows support for IE9, which doesn't have a
+ * console if the developer tools are not open.
+ */
+ function consoleProxy(method) {
+ return function () {
+ if (console) {
+ console[method].apply(console, arguments);
+ }
+ };
+ }
+
+ var Logger = {
+ warn: consoleProxy("warn")
+ };
+
+ var Assert = function () {
+ function Assert(testContext) {
+ classCallCheck(this, Assert);
+
+ this.test = testContext;
+ }
+
+ // Assert helpers
+
+ createClass(Assert, [{
+ key: "timeout",
+ value: function timeout(duration) {
+ if (typeof duration !== "number") {
+ throw new Error("You must pass a number as the duration to assert.timeout");
+ }
+
+ this.test.timeout = duration;
+ }
+
+ // Documents a "step", which is a string value, in a test as a passing assertion
+
+ }, {
+ key: "step",
+ value: function step(message) {
+ var result = !!message;
+
+ this.test.steps.push(message);
+
+ return this.pushResult({
+ result: result,
+ message: message || "You must provide a message to assert.step"
+ });
+ }
+
+ // Verifies the steps in a test match a given array of string values
+
+ }, {
+ key: "verifySteps",
+ value: function verifySteps(steps, message) {
+ this.deepEqual(this.test.steps, steps, message);
+ this.test.steps.length = 0;
+ }
+
+ // Specify the number of expected assertions to guarantee that failed test
+ // (no assertions are run at all) don't slip through.
+
+ }, {
+ key: "expect",
+ value: function expect(asserts) {
+ if (arguments.length === 1) {
+ this.test.expected = asserts;
+ } else {
+ return this.test.expected;
+ }
+ }
+
+ // Put a hold on processing and return a function that will release it a maximum of once.
+
+ }, {
+ key: "async",
+ value: function async(count) {
+ var test$$1 = this.test;
+
+ var popped = false,
+ acceptCallCount = count;
+
+ if (typeof acceptCallCount === "undefined") {
+ acceptCallCount = 1;
+ }
+
+ var resume = internalStop(test$$1);
+
+ return function done() {
+ if (config.current !== test$$1) {
+ throw Error("assert.async callback called after test finished.");
+ }
+
+ if (popped) {
+ test$$1.pushFailure("Too many calls to the `assert.async` callback", sourceFromStacktrace(2));
+ return;
+ }
+
+ acceptCallCount -= 1;
+ if (acceptCallCount > 0) {
+ return;
+ }
+
+ popped = true;
+ resume();
+ };
+ }
+
+ // Exports test.push() to the user API
+ // Alias of pushResult.
+
+ }, {
+ key: "push",
+ value: function push(result, actual, expected, message, negative) {
+ Logger.warn("assert.push is deprecated and will be removed in QUnit 3.0." + " Please use assert.pushResult instead (https://api.qunitjs.com/assert/pushResult).");
+
+ var currentAssert = this instanceof Assert ? this : config.current.assert;
+ return currentAssert.pushResult({
+ result: result,
+ actual: actual,
+ expected: expected,
+ message: message,
+ negative: negative
+ });
+ }
+ }, {
+ key: "pushResult",
+ value: function pushResult(resultInfo) {
+
+ // Destructure of resultInfo = { result, actual, expected, message, negative }
+ var assert = this;
+ var currentTest = assert instanceof Assert && assert.test || config.current;
+
+ // Backwards compatibility fix.
+ // Allows the direct use of global exported assertions and QUnit.assert.*
+ // Although, it's use is not recommended as it can leak assertions
+ // to other tests from async tests, because we only get a reference to the current test,
+ // not exactly the test where assertion were intended to be called.
+ if (!currentTest) {
+ throw new Error("assertion outside test context, in " + sourceFromStacktrace(2));
+ }
+
+ if (!(assert instanceof Assert)) {
+ assert = currentTest.assert;
+ }
+
+ return assert.test.pushResult(resultInfo);
+ }
+ }, {
+ key: "ok",
+ value: function ok(result, message) {
+ if (!message) {
+ message = result ? "okay" : "failed, expected argument to be truthy, was: " + dump.parse(result);
+ }
+
+ this.pushResult({
+ result: !!result,
+ actual: result,
+ expected: true,
+ message: message
+ });
+ }
+ }, {
+ key: "notOk",
+ value: function notOk(result, message) {
+ if (!message) {
+ message = !result ? "okay" : "failed, expected argument to be falsy, was: " + dump.parse(result);
+ }
+
+ this.pushResult({
+ result: !result,
+ actual: result,
+ expected: false,
+ message: message
+ });
+ }
+ }, {
+ key: "equal",
+ value: function equal(actual, expected, message) {
+
+ // eslint-disable-next-line eqeqeq
+ var result = expected == actual;
+
+ this.pushResult({
+ result: result,
+ actual: actual,
+ expected: expected,
+ message: message
+ });
+ }
+ }, {
+ key: "notEqual",
+ value: function notEqual(actual, expected, message) {
+
+ // eslint-disable-next-line eqeqeq
+ var result = expected != actual;
+
+ this.pushResult({
+ result: result,
+ actual: actual,
+ expected: expected,
+ message: message,
+ negative: true
+ });
+ }
+ }, {
+ key: "propEqual",
+ value: function propEqual(actual, expected, message) {
+ actual = objectValues(actual);
+ expected = objectValues(expected);
+
+ this.pushResult({
+ result: equiv(actual, expected),
+ actual: actual,
+ expected: expected,
+ message: message
+ });
+ }
+ }, {
+ key: "notPropEqual",
+ value: function notPropEqual(actual, expected, message) {
+ actual = objectValues(actual);
+ expected = objectValues(expected);
+
+ this.pushResult({
+ result: !equiv(actual, expected),
+ actual: actual,
+ expected: expected,
+ message: message,
+ negative: true
+ });
+ }
+ }, {
+ key: "deepEqual",
+ value: function deepEqual(actual, expected, message) {
+ this.pushResult({
+ result: equiv(actual, expected),
+ actual: actual,
+ expected: expected,
+ message: message
+ });
+ }
+ }, {
+ key: "notDeepEqual",
+ value: function notDeepEqual(actual, expected, message) {
+ this.pushResult({
+ result: !equiv(actual, expected),
+ actual: actual,
+ expected: expected,
+ message: message,
+ negative: true
+ });
+ }
+ }, {
+ key: "strictEqual",
+ value: function strictEqual(actual, expected, message) {
+ this.pushResult({
+ result: expected === actual,
+ actual: actual,
+ expected: expected,
+ message: message
+ });
+ }
+ }, {
+ key: "notStrictEqual",
+ value: function notStrictEqual(actual, expected, message) {
+ this.pushResult({
+ result: expected !== actual,
+ actual: actual,
+ expected: expected,
+ message: message,
+ negative: true
+ });
+ }
+ }, {
+ key: "throws",
+ value: function throws(block, expected, message) {
+ var actual = void 0,
+ result = false;
+
+ var currentTest = this instanceof Assert && this.test || config.current;
+
+ // 'expected' is optional unless doing string comparison
+ if (objectType(expected) === "string") {
+ if (message == null) {
+ message = expected;
+ expected = null;
+ } else {
+ throw new Error("throws/raises does not accept a string value for the expected argument.\n" + "Use a non-string object value (e.g. regExp) instead if it's necessary.");
+ }
+ }
+
+ currentTest.ignoreGlobalErrors = true;
+ try {
+ block.call(currentTest.testEnvironment);
+ } catch (e) {
+ actual = e;
+ }
+ currentTest.ignoreGlobalErrors = false;
+
+ if (actual) {
+ var expectedType = objectType(expected);
+
+ // We don't want to validate thrown error
+ if (!expected) {
+ result = true;
+ expected = null;
+
+ // Expected is a regexp
+ } else if (expectedType === "regexp") {
+ result = expected.test(errorString(actual));
+
+ // Expected is a constructor, maybe an Error constructor
+ } else if (expectedType === "function" && actual instanceof expected) {
+ result = true;
+
+ // Expected is an Error object
+ } else if (expectedType === "object") {
+ result = actual instanceof expected.constructor && actual.name === expected.name && actual.message === expected.message;
+
+ // Expected is a validation function which returns true if validation passed
+ } else if (expectedType === "function" && expected.call({}, actual) === true) {
+ expected = null;
+ result = true;
+ }
+ }
+
+ currentTest.assert.pushResult({
+ result: result,
+ actual: actual,
+ expected: expected,
+ message: message
+ });
+ }
+ }, {
+ key: "rejects",
+ value: function rejects(promise, expected, message) {
+ var result = false;
+
+ var currentTest = this instanceof Assert && this.test || config.current;
+
+ // 'expected' is optional unless doing string comparison
+ if (objectType(expected) === "string") {
+ if (message === undefined) {
+ message = expected;
+ expected = undefined;
+ } else {
+ message = "assert.rejects does not accept a string value for the expected " + "argument.\nUse a non-string object value (e.g. validator function) instead " + "if necessary.";
+
+ currentTest.assert.pushResult({
+ result: false,
+ message: message
+ });
+
+ return;
+ }
+ }
+
+ var then = promise && promise.then;
+ if (objectType(then) !== "function") {
+ var _message = "The value provided to `assert.rejects` in " + "\"" + currentTest.testName + "\" was not a promise.";
+
+ currentTest.assert.pushResult({
+ result: false,
+ message: _message,
+ actual: promise
+ });
+
+ return;
+ }
+
+ var done = this.async();
+
+ return then.call(promise, function handleFulfillment() {
+ var message = "The promise returned by the `assert.rejects` callback in " + "\"" + currentTest.testName + "\" did not reject.";
+
+ currentTest.assert.pushResult({
+ result: false,
+ message: message,
+ actual: promise
+ });
+
+ done();
+ }, function handleRejection(actual) {
+ if (actual) {
+ var expectedType = objectType(expected);
+
+ // We don't want to validate
+ if (expected === undefined) {
+ result = true;
+ expected = null;
+
+ // Expected is a regexp
+ } else if (expectedType === "regexp") {
+ result = expected.test(errorString(actual));
+
+ // Expected is a constructor, maybe an Error constructor
+ } else if (expectedType === "function" && actual instanceof expected) {
+ result = true;
+
+ // Expected is an Error object
+ } else if (expectedType === "object") {
+ result = actual instanceof expected.constructor && actual.name === expected.name && actual.message === expected.message;
+
+ // Expected is a validation function which returns true if validation passed
+ } else {
+ if (expectedType === "function") {
+ result = expected.call({}, actual) === true;
+ expected = null;
+
+ // Expected is some other invalid type
+ } else {
+ result = false;
+ message = "invalid expected value provided to `assert.rejects` " + "callback in \"" + currentTest.testName + "\": " + expectedType + ".";
+ }
+ }
+ }
+
+ currentTest.assert.pushResult({
+ result: result,
+ actual: actual,
+ expected: expected,
+ message: message
+ });
+
+ done();
+ });
+ }
+ }]);
+ return Assert;
+ }();
+
+ // Provide an alternative to assert.throws(), for environments that consider throws a reserved word
+ // Known to us are: Closure Compiler, Narwhal
+ // eslint-disable-next-line dot-notation
+
+
+ Assert.prototype.raises = Assert.prototype["throws"];
+
+ /**
+ * Converts an error into a simple string for comparisons.
+ *
+ * @param {Error} error
+ * @return {String}
+ */
+ function errorString(error) {
+ var resultErrorString = error.toString();
+
+ if (resultErrorString.substring(0, 7) === "[object") {
+ var name = error.name ? error.name.toString() : "Error";
+ var message = error.message ? error.message.toString() : "";
+
+ if (name && message) {
+ return name + ": " + message;
+ } else if (name) {
+ return name;
+ } else if (message) {
+ return message;
+ } else {
+ return "Error";
+ }
+ } else {
+ return resultErrorString;
+ }
+ }
+
+ /* global module, exports, define */
+ function exportQUnit(QUnit) {
+
+ if (defined.document) {
+
+ // QUnit may be defined when it is preconfigured but then only QUnit and QUnit.config may be defined.
+ if (window.QUnit && window.QUnit.version) {
+ throw new Error("QUnit has already been defined.");
+ }
+
+ window.QUnit = QUnit;
+ }
+
+ // For nodejs
+ if (typeof module !== "undefined" && module && module.exports) {
+ module.exports = QUnit;
+
+ // For consistency with CommonJS environments' exports
+ module.exports.QUnit = QUnit;
+ }
+
+ // For CommonJS with exports, but without module.exports, like Rhino
+ if (typeof exports !== "undefined" && exports) {
+ exports.QUnit = QUnit;
+ }
+
+ if (typeof define === "function" && define.amd) {
+ define(function () {
+ return QUnit;
+ });
+ QUnit.config.autostart = false;
+ }
+
+ // For Web/Service Workers
+ if (self$1 && self$1.WorkerGlobalScope && self$1 instanceof self$1.WorkerGlobalScope) {
+ self$1.QUnit = QUnit;
+ }
+ }
+
+ var SuiteReport = function () {
+ function SuiteReport(name, parentSuite) {
+ classCallCheck(this, SuiteReport);
+
+ this.name = name;
+ this.fullName = parentSuite ? parentSuite.fullName.concat(name) : [];
+
+ this.tests = [];
+ this.childSuites = [];
+
+ if (parentSuite) {
+ parentSuite.pushChildSuite(this);
+ }
+ }
+
+ createClass(SuiteReport, [{
+ key: "start",
+ value: function start(recordTime) {
+ if (recordTime) {
+ this._startTime = Date.now();
+ }
+
+ return {
+ name: this.name,
+ fullName: this.fullName.slice(),
+ tests: this.tests.map(function (test) {
+ return test.start();
+ }),
+ childSuites: this.childSuites.map(function (suite) {
+ return suite.start();
+ }),
+ testCounts: {
+ total: this.getTestCounts().total
+ }
+ };
+ }
+ }, {
+ key: "end",
+ value: function end(recordTime) {
+ if (recordTime) {
+ this._endTime = Date.now();
+ }
+
+ return {
+ name: this.name,
+ fullName: this.fullName.slice(),
+ tests: this.tests.map(function (test) {
+ return test.end();
+ }),
+ childSuites: this.childSuites.map(function (suite) {
+ return suite.end();
+ }),
+ testCounts: this.getTestCounts(),
+ runtime: this.getRuntime(),
+ status: this.getStatus()
+ };
+ }
+ }, {
+ key: "pushChildSuite",
+ value: function pushChildSuite(suite) {
+ this.childSuites.push(suite);
+ }
+ }, {
+ key: "pushTest",
+ value: function pushTest(test) {
+ this.tests.push(test);
+ }
+ }, {
+ key: "getRuntime",
+ value: function getRuntime() {
+ return this._endTime - this._startTime;
+ }
+ }, {
+ key: "getTestCounts",
+ value: function getTestCounts() {
+ var counts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { passed: 0, failed: 0, skipped: 0, todo: 0, total: 0 };
+
+ counts = this.tests.reduce(function (counts, test) {
+ if (test.valid) {
+ counts[test.getStatus()]++;
+ counts.total++;
+ }
+
+ return counts;
+ }, counts);
+
+ return this.childSuites.reduce(function (counts, suite) {
+ return suite.getTestCounts(counts);
+ }, counts);
+ }
+ }, {
+ key: "getStatus",
+ value: function getStatus() {
+ var _getTestCounts = this.getTestCounts(),
+ total = _getTestCounts.total,
+ failed = _getTestCounts.failed,
+ skipped = _getTestCounts.skipped,
+ todo = _getTestCounts.todo;
+
+ if (failed) {
+ return "failed";
+ } else {
+ if (skipped === total) {
+ return "skipped";
+ } else if (todo === total) {
+ return "todo";
+ } else {
+ return "passed";
+ }
+ }
+ }
+ }]);
+ return SuiteReport;
+ }();
+
+ // Handle an unhandled exception. By convention, returns true if further
+ // error handling should be suppressed and false otherwise.
+ // In this case, we will only suppress further error handling if the
+ // "ignoreGlobalErrors" configuration option is enabled.
+ function onError(error) {
+ for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+ args[_key - 1] = arguments[_key];
+ }
+
+ if (config.current) {
+ if (config.current.ignoreGlobalErrors) {
+ return true;
+ }
+ pushFailure.apply(undefined, [error.message, error.fileName + ":" + error.lineNumber].concat(args));
+ } else {
+ test("global failure", extend(function () {
+ pushFailure.apply(undefined, [error.message, error.fileName + ":" + error.lineNumber].concat(args));
+ }, { validTest: true }));
+ }
+
+ return false;
+ }
+
+ // Handle an unhandled rejection
+ function onUnhandledRejection(reason) {
+ var resultInfo = {
+ result: false,
+ message: reason.message || "error",
+ actual: reason,
+ source: reason.stack || sourceFromStacktrace(3)
+ };
+
+ var currentTest = config.current;
+ if (currentTest) {
+ currentTest.assert.pushResult(resultInfo);
+ } else {
+ test("global failure", extend(function (assert) {
+ assert.pushResult(resultInfo);
+ }, { validTest: true }));
+ }
+ }
+
+ var focused = false;
+ var QUnit = {};
+ var globalSuite = new SuiteReport();
+
+ // The initial "currentModule" represents the global (or top-level) module that
+ // is not explicitly defined by the user, therefore we add the "globalSuite" to
+ // it since each module has a suiteReport associated with it.
+ config.currentModule.suiteReport = globalSuite;
+
+ var moduleStack = [];
+ var globalStartCalled = false;
+ var runStarted = false;
+
+ // Figure out if we're running the tests from a server or not
+ QUnit.isLocal = !(defined.document && window.location.protocol !== "file:");
+
+ // Expose the current QUnit version
+ QUnit.version = "2.5.0";
+
+ function createModule(name, testEnvironment, modifiers) {
+ var parentModule = moduleStack.length ? moduleStack.slice(-1)[0] : null;
+ var moduleName = parentModule !== null ? [parentModule.name, name].join(" > ") : name;
+ var parentSuite = parentModule ? parentModule.suiteReport : globalSuite;
+
+ var skip$$1 = parentModule !== null && parentModule.skip || modifiers.skip;
+ var todo$$1 = parentModule !== null && parentModule.todo || modifiers.todo;
+
+ var module = {
+ name: moduleName,
+ parentModule: parentModule,
+ tests: [],
+ moduleId: generateHash(moduleName),
+ testsRun: 0,
+ unskippedTestsRun: 0,
+ childModules: [],
+ suiteReport: new SuiteReport(name, parentSuite),
+
+ // Pass along `skip` and `todo` properties from parent module, in case
+ // there is one, to childs. And use own otherwise.
+ // This property will be used to mark own tests and tests of child suites
+ // as either `skipped` or `todo`.
+ skip: skip$$1,
+ todo: skip$$1 ? false : todo$$1
+ };
+
+ var env = {};
+ if (parentModule) {
+ parentModule.childModules.push(module);
+ extend(env, parentModule.testEnvironment);
+ }
+ extend(env, testEnvironment);
+ module.testEnvironment = env;
+
+ config.modules.push(module);
+ return module;
+ }
+
+ function processModule(name, options, executeNow) {
+ var modifiers = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
+
+ var module = createModule(name, options, modifiers);
+
+ // Move any hooks to a 'hooks' object
+ var testEnvironment = module.testEnvironment;
+ var hooks = module.hooks = {};
+
+ setHookFromEnvironment(hooks, testEnvironment, "before");
+ setHookFromEnvironment(hooks, testEnvironment, "beforeEach");
+ setHookFromEnvironment(hooks, testEnvironment, "afterEach");
+ setHookFromEnvironment(hooks, testEnvironment, "after");
+
+ function setHookFromEnvironment(hooks, environment, name) {
+ var potentialHook = environment[name];
+ hooks[name] = typeof potentialHook === "function" ? [potentialHook] : [];
+ delete environment[name];
+ }
+
+ var moduleFns = {
+ before: setHookFunction(module, "before"),
+ beforeEach: setHookFunction(module, "beforeEach"),
+ afterEach: setHookFunction(module, "afterEach"),
+ after: setHookFunction(module, "after")
+ };
+
+ var currentModule = config.currentModule;
+ if (objectType(executeNow) === "function") {
+ moduleStack.push(module);
+ config.currentModule = module;
+ executeNow.call(module.testEnvironment, moduleFns);
+ moduleStack.pop();
+ module = module.parentModule || currentModule;
+ }
+
+ config.currentModule = module;
+ }
+
+ // TODO: extract this to a new file alongside its related functions
+ function module$1(name, options, executeNow) {
+ if (focused) {
+ return;
+ }
+
+ if (arguments.length === 2) {
+ if (objectType(options) === "function") {
+ executeNow = options;
+ options = undefined;
+ }
+ }
+
+ processModule(name, options, executeNow);
+ }
+
+ module$1.only = function () {
+ if (focused) {
+ return;
+ }
+
+ config.modules.length = 0;
+ config.queue.length = 0;
+
+ module$1.apply(undefined, arguments);
+
+ focused = true;
+ };
+
+ module$1.skip = function (name, options, executeNow) {
+ if (focused) {
+ return;
+ }
+
+ if (arguments.length === 2) {
+ if (objectType(options) === "function") {
+ executeNow = options;
+ options = undefined;
+ }
+ }
+
+ processModule(name, options, executeNow, { skip: true });
+ };
+
+ module$1.todo = function (name, options, executeNow) {
+ if (focused) {
+ return;
+ }
+
+ if (arguments.length === 2) {
+ if (objectType(options) === "function") {
+ executeNow = options;
+ options = undefined;
+ }
+ }
+
+ processModule(name, options, executeNow, { todo: true });
+ };
+
+ extend(QUnit, {
+ on: on,
+
+ module: module$1,
+
+ test: test,
+
+ todo: todo,
+
+ skip: skip,
+
+ only: only,
+
+ start: function start(count) {
+ var globalStartAlreadyCalled = globalStartCalled;
+
+ if (!config.current) {
+ globalStartCalled = true;
+
+ if (runStarted) {
+ throw new Error("Called start() while test already started running");
+ } else if (globalStartAlreadyCalled || count > 1) {
+ throw new Error("Called start() outside of a test context too many times");
+ } else if (config.autostart) {
+ throw new Error("Called start() outside of a test context when " + "QUnit.config.autostart was true");
+ } else if (!config.pageLoaded) {
+
+ // The page isn't completely loaded yet, so we set autostart and then
+ // load if we're in Node or wait for the browser's load event.
+ config.autostart = true;
+
+ // Starts from Node even if .load was not previously called. We still return
+ // early otherwise we'll wind up "beginning" twice.
+ if (!defined.document) {
+ QUnit.load();
+ }
+
+ return;
+ }
+ } else {
+ throw new Error("QUnit.start cannot be called inside a test context.");
+ }
+
+ scheduleBegin();
+ },
+
+ config: config,
+
+ is: is,
+
+ objectType: objectType,
+
+ extend: extend,
+
+ load: function load() {
+ config.pageLoaded = true;
+
+ // Initialize the configuration options
+ extend(config, {
+ stats: { all: 0, bad: 0 },
+ started: 0,
+ updateRate: 1000,
+ autostart: true,
+ filter: ""
+ }, true);
+
+ if (!runStarted) {
+ config.blocking = false;
+
+ if (config.autostart) {
+ scheduleBegin();
+ }
+ }
+ },
+
+ stack: function stack(offset) {
+ offset = (offset || 0) + 2;
+ return sourceFromStacktrace(offset);
+ },
+
+ onError: onError,
+
+ onUnhandledRejection: onUnhandledRejection
+ });
+
+ QUnit.pushFailure = pushFailure;
+ QUnit.assert = Assert.prototype;
+ QUnit.equiv = equiv;
+ QUnit.dump = dump;
+
+ registerLoggingCallbacks(QUnit);
+
+ function scheduleBegin() {
+
+ runStarted = true;
+
+ // Add a slight delay to allow definition of more modules and tests.
+ if (defined.setTimeout) {
+ setTimeout(function () {
+ begin();
+ });
+ } else {
+ begin();
+ }
+ }
+
+ function begin() {
+ var i,
+ l,
+ modulesLog = [];
+
+ // If the test run hasn't officially begun yet
+ if (!config.started) {
+
+ // Record the time of the test run's beginning
+ config.started = now();
+
+ // Delete the loose unnamed module if unused.
+ if (config.modules[0].name === "" && config.modules[0].tests.length === 0) {
+ config.modules.shift();
+ }
+
+ // Avoid unnecessary information by not logging modules' test environments
+ for (i = 0, l = config.modules.length; i < l; i++) {
+ modulesLog.push({
+ name: config.modules[i].name,
+ tests: config.modules[i].tests
+ });
+ }
+
+ // The test run is officially beginning now
+ emit("runStart", globalSuite.start(true));
+ runLoggingCallbacks("begin", {
+ totalTests: Test.count,
+ modules: modulesLog
+ });
+ }
+
+ config.blocking = false;
+ ProcessingQueue.advance();
+ }
+
+ function setHookFunction(module, hookName) {
+ return function setHook(callback) {
+ module.hooks[hookName].push(callback);
+ };
+ }
+
+ exportQUnit(QUnit);
+
+ (function () {
+
+ if (typeof window === "undefined" || typeof document === "undefined") {
+ return;
+ }
+
+ var config = QUnit.config,
+ hasOwn = Object.prototype.hasOwnProperty;
+
+ // Stores fixture HTML for resetting later
+ function storeFixture() {
+
+ // Avoid overwriting user-defined values
+ if (hasOwn.call(config, "fixture")) {
+ return;
+ }
+
+ var fixture = document.getElementById("qunit-fixture");
+ if (fixture) {
+ config.fixture = fixture.innerHTML;
+ }
+ }
+
+ QUnit.begin(storeFixture);
+
+ // Resets the fixture DOM element if available.
+ function resetFixture() {
+ if (config.fixture == null) {
+ return;
+ }
+
+ var fixture = document.getElementById("qunit-fixture");
+ if (fixture) {
+ fixture.innerHTML = config.fixture;
+ }
+ }
+
+ QUnit.testStart(resetFixture);
+ })();
+
+ (function () {
+
+ // Only interact with URLs via window.location
+ var location = typeof window !== "undefined" && window.location;
+ if (!location) {
+ return;
+ }
+
+ var urlParams = getUrlParams();
+
+ QUnit.urlParams = urlParams;
+
+ // Match module/test by inclusion in an array
+ QUnit.config.moduleId = [].concat(urlParams.moduleId || []);
+ QUnit.config.testId = [].concat(urlParams.testId || []);
+
+ // Exact case-insensitive match of the module name
+ QUnit.config.module = urlParams.module;
+
+ // Regular expression or case-insenstive substring match against "moduleName: testName"
+ QUnit.config.filter = urlParams.filter;
+
+ // Test order randomization
+ if (urlParams.seed === true) {
+
+ // Generate a random seed if the option is specified without a value
+ QUnit.config.seed = Math.random().toString(36).slice(2);
+ } else if (urlParams.seed) {
+ QUnit.config.seed = urlParams.seed;
+ }
+
+ // Add URL-parameter-mapped config values with UI form rendering data
+ QUnit.config.urlConfig.push({
+ id: "hidepassed",
+ label: "Hide passed tests",
+ tooltip: "Only show tests and assertions that fail. Stored as query-strings."
+ }, {
+ id: "noglobals",
+ label: "Check for Globals",
+ tooltip: "Enabling this will test if any test introduces new properties on the " + "global object (`window` in Browsers). Stored as query-strings."
+ }, {
+ id: "notrycatch",
+ label: "No try-catch",
+ tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging " + "exceptions in IE reasonable. Stored as query-strings."
+ });
+
+ QUnit.begin(function () {
+ var i,
+ option,
+ urlConfig = QUnit.config.urlConfig;
+
+ for (i = 0; i < urlConfig.length; i++) {
+
+ // Options can be either strings or objects with nonempty "id" properties
+ option = QUnit.config.urlConfig[i];
+ if (typeof option !== "string") {
+ option = option.id;
+ }
+
+ if (QUnit.config[option] === undefined) {
+ QUnit.config[option] = urlParams[option];
+ }
+ }
+ });
+
+ function getUrlParams() {
+ var i, param, name, value;
+ var urlParams = Object.create(null);
+ var params = location.search.slice(1).split("&");
+ var length = params.length;
+
+ for (i = 0; i < length; i++) {
+ if (params[i]) {
+ param = params[i].split("=");
+ name = decodeQueryParam(param[0]);
+
+ // Allow just a key to turn on a flag, e.g., test.html?noglobals
+ value = param.length === 1 || decodeQueryParam(param.slice(1).join("="));
+ if (name in urlParams) {
+ urlParams[name] = [].concat(urlParams[name], value);
+ } else {
+ urlParams[name] = value;
+ }
+ }
+ }
+
+ return urlParams;
+ }
+
+ function decodeQueryParam(param) {
+ return decodeURIComponent(param.replace(/\+/g, "%20"));
+ }
+ })();
+
+ var stats = {
+ passedTests: 0,
+ failedTests: 0,
+ skippedTests: 0,
+ todoTests: 0
+ };
+
+ // Escape text for attribute or text content.
+ function escapeText(s) {
+ if (!s) {
+ return "";
+ }
+ s = s + "";
+
+ // Both single quotes and double quotes (for attributes)
+ return s.replace(/['"<>&]/g, function (s) {
+ switch (s) {
+ case "'":
+ return "'";
+ case "\"":
+ return """;
+ case "<":
+ return "<";
+ case ">":
+ return ">";
+ case "&":
+ return "&";
+ }
+ });
+ }
+
+ (function () {
+
+ // Don't load the HTML Reporter on non-browser environments
+ if (typeof window === "undefined" || !window.document) {
+ return;
+ }
+
+ var config = QUnit.config,
+ document$$1 = window.document,
+ collapseNext = false,
+ hasOwn = Object.prototype.hasOwnProperty,
+ unfilteredUrl = setUrl({ filter: undefined, module: undefined,
+ moduleId: undefined, testId: undefined }),
+ modulesList = [];
+
+ function addEvent(elem, type, fn) {
+ elem.addEventListener(type, fn, false);
+ }
+
+ function removeEvent(elem, type, fn) {
+ elem.removeEventListener(type, fn, false);
+ }
+
+ function addEvents(elems, type, fn) {
+ var i = elems.length;
+ while (i--) {
+ addEvent(elems[i], type, fn);
+ }
+ }
+
+ function hasClass(elem, name) {
+ return (" " + elem.className + " ").indexOf(" " + name + " ") >= 0;
+ }
+
+ function addClass(elem, name) {
+ if (!hasClass(elem, name)) {
+ elem.className += (elem.className ? " " : "") + name;
+ }
+ }
+
+ function toggleClass(elem, name, force) {
+ if (force || typeof force === "undefined" && !hasClass(elem, name)) {
+ addClass(elem, name);
+ } else {
+ removeClass(elem, name);
+ }
+ }
+
+ function removeClass(elem, name) {
+ var set = " " + elem.className + " ";
+
+ // Class name may appear multiple times
+ while (set.indexOf(" " + name + " ") >= 0) {
+ set = set.replace(" " + name + " ", " ");
+ }
+
+ // Trim for prettiness
+ elem.className = typeof set.trim === "function" ? set.trim() : set.replace(/^\s+|\s+$/g, "");
+ }
+
+ function id(name) {
+ return document$$1.getElementById && document$$1.getElementById(name);
+ }
+
+ function abortTests() {
+ var abortButton = id("qunit-abort-tests-button");
+ if (abortButton) {
+ abortButton.disabled = true;
+ abortButton.innerHTML = "Aborting...";
+ }
+ QUnit.config.queue.length = 0;
+ return false;
+ }
+
+ function interceptNavigation(ev) {
+ applyUrlParams();
+
+ if (ev && ev.preventDefault) {
+ ev.preventDefault();
+ }
+
+ return false;
+ }
+
+ function getUrlConfigHtml() {
+ var i,
+ j,
+ val,
+ escaped,
+ escapedTooltip,
+ selection = false,
+ urlConfig = config.urlConfig,
+ urlConfigHtml = "";
+
+ for (i = 0; i < urlConfig.length; i++) {
+
+ // Options can be either strings or objects with nonempty "id" properties
+ val = config.urlConfig[i];
+ if (typeof val === "string") {
+ val = {
+ id: val,
+ label: val
+ };
+ }
+
+ escaped = escapeText(val.id);
+ escapedTooltip = escapeText(val.tooltip);
+
+ if (!val.value || typeof val.value === "string") {
+ urlConfigHtml += "";
+ } else {
+ urlConfigHtml += "";
+ }
+ }
+
+ return urlConfigHtml;
+ }
+
+ // Handle "click" events on toolbar checkboxes and "change" for select menus.
+ // Updates the URL with the new state of `config.urlConfig` values.
+ function toolbarChanged() {
+ var updatedUrl,
+ value,
+ tests,
+ field = this,
+ params = {};
+
+ // Detect if field is a select menu or a checkbox
+ if ("selectedIndex" in field) {
+ value = field.options[field.selectedIndex].value || undefined;
+ } else {
+ value = field.checked ? field.defaultValue || true : undefined;
+ }
+
+ params[field.name] = value;
+ updatedUrl = setUrl(params);
+
+ // Check if we can apply the change without a page refresh
+ if ("hidepassed" === field.name && "replaceState" in window.history) {
+ QUnit.urlParams[field.name] = value;
+ config[field.name] = value || false;
+ tests = id("qunit-tests");
+ if (tests) {
+ toggleClass(tests, "hidepass", value || false);
+ }
+ window.history.replaceState(null, "", updatedUrl);
+ } else {
+ window.location = updatedUrl;
+ }
+ }
+
+ function setUrl(params) {
+ var key,
+ arrValue,
+ i,
+ querystring = "?",
+ location = window.location;
+
+ params = QUnit.extend(QUnit.extend({}, QUnit.urlParams), params);
+
+ for (key in params) {
+
+ // Skip inherited or undefined properties
+ if (hasOwn.call(params, key) && params[key] !== undefined) {
+
+ // Output a parameter for each value of this key
+ // (but usually just one)
+ arrValue = [].concat(params[key]);
+ for (i = 0; i < arrValue.length; i++) {
+ querystring += encodeURIComponent(key);
+ if (arrValue[i] !== true) {
+ querystring += "=" + encodeURIComponent(arrValue[i]);
+ }
+ querystring += "&";
+ }
+ }
+ }
+ return location.protocol + "//" + location.host + location.pathname + querystring.slice(0, -1);
+ }
+
+ function applyUrlParams() {
+ var i,
+ selectedModules = [],
+ modulesList = id("qunit-modulefilter-dropdown-list").getElementsByTagName("input"),
+ filter = id("qunit-filter-input").value;
+
+ for (i = 0; i < modulesList.length; i++) {
+ if (modulesList[i].checked) {
+ selectedModules.push(modulesList[i].value);
+ }
+ }
+
+ window.location = setUrl({
+ filter: filter === "" ? undefined : filter,
+ moduleId: selectedModules.length === 0 ? undefined : selectedModules,
+
+ // Remove module and testId filter
+ module: undefined,
+ testId: undefined
+ });
+ }
+
+ function toolbarUrlConfigContainer() {
+ var urlConfigContainer = document$$1.createElement("span");
+
+ urlConfigContainer.innerHTML = getUrlConfigHtml();
+ addClass(urlConfigContainer, "qunit-url-config");
+
+ addEvents(urlConfigContainer.getElementsByTagName("input"), "change", toolbarChanged);
+ addEvents(urlConfigContainer.getElementsByTagName("select"), "change", toolbarChanged);
+
+ return urlConfigContainer;
+ }
+
+ function abortTestsButton() {
+ var button = document$$1.createElement("button");
+ button.id = "qunit-abort-tests-button";
+ button.innerHTML = "Abort";
+ addEvent(button, "click", abortTests);
+ return button;
+ }
+
+ function toolbarLooseFilter() {
+ var filter = document$$1.createElement("form"),
+ label = document$$1.createElement("label"),
+ input = document$$1.createElement("input"),
+ button = document$$1.createElement("button");
+
+ addClass(filter, "qunit-filter");
+
+ label.innerHTML = "Filter: ";
+
+ input.type = "text";
+ input.value = config.filter || "";
+ input.name = "filter";
+ input.id = "qunit-filter-input";
+
+ button.innerHTML = "Go";
+
+ label.appendChild(input);
+
+ filter.appendChild(label);
+ filter.appendChild(document$$1.createTextNode(" "));
+ filter.appendChild(button);
+ addEvent(filter, "submit", interceptNavigation);
+
+ return filter;
+ }
+
+ function moduleListHtml() {
+ var i,
+ checked,
+ html = "";
+
+ for (i = 0; i < config.modules.length; i++) {
+ if (config.modules[i].name !== "") {
+ checked = config.moduleId.indexOf(config.modules[i].moduleId) > -1;
+ html += "";
+ }
+ }
+
+ return html;
+ }
+
+ function toolbarModuleFilter() {
+ var allCheckbox,
+ commit,
+ reset,
+ moduleFilter = document$$1.createElement("form"),
+ label = document$$1.createElement("label"),
+ moduleSearch = document$$1.createElement("input"),
+ dropDown = document$$1.createElement("div"),
+ actions = document$$1.createElement("span"),
+ dropDownList = document$$1.createElement("ul"),
+ dirty = false;
+
+ moduleSearch.id = "qunit-modulefilter-search";
+ addEvent(moduleSearch, "input", searchInput);
+ addEvent(moduleSearch, "input", searchFocus);
+ addEvent(moduleSearch, "focus", searchFocus);
+ addEvent(moduleSearch, "click", searchFocus);
+
+ label.id = "qunit-modulefilter-search-container";
+ label.innerHTML = "Module: ";
+ label.appendChild(moduleSearch);
+
+ actions.id = "qunit-modulefilter-actions";
+ actions.innerHTML = "" + "" + "";
+ allCheckbox = actions.lastChild.firstChild;
+ commit = actions.firstChild;
+ reset = commit.nextSibling;
+ addEvent(commit, "click", applyUrlParams);
+
+ dropDownList.id = "qunit-modulefilter-dropdown-list";
+ dropDownList.innerHTML = moduleListHtml();
+
+ dropDown.id = "qunit-modulefilter-dropdown";
+ dropDown.style.display = "none";
+ dropDown.appendChild(actions);
+ dropDown.appendChild(dropDownList);
+ addEvent(dropDown, "change", selectionChange);
+ selectionChange();
+
+ moduleFilter.id = "qunit-modulefilter";
+ moduleFilter.appendChild(label);
+ moduleFilter.appendChild(dropDown);
+ addEvent(moduleFilter, "submit", interceptNavigation);
+ addEvent(moduleFilter, "reset", function () {
+
+ // Let the reset happen, then update styles
+ window.setTimeout(selectionChange);
+ });
+
+ // Enables show/hide for the dropdown
+ function searchFocus() {
+ if (dropDown.style.display !== "none") {
+ return;
+ }
+
+ dropDown.style.display = "block";
+ addEvent(document$$1, "click", hideHandler);
+ addEvent(document$$1, "keydown", hideHandler);
+
+ // Hide on Escape keydown or outside-container click
+ function hideHandler(e) {
+ var inContainer = moduleFilter.contains(e.target);
+
+ if (e.keyCode === 27 || !inContainer) {
+ if (e.keyCode === 27 && inContainer) {
+ moduleSearch.focus();
+ }
+ dropDown.style.display = "none";
+ removeEvent(document$$1, "click", hideHandler);
+ removeEvent(document$$1, "keydown", hideHandler);
+ moduleSearch.value = "";
+ searchInput();
+ }
+ }
+ }
+
+ // Processes module search box input
+ function searchInput() {
+ var i,
+ item,
+ searchText = moduleSearch.value.toLowerCase(),
+ listItems = dropDownList.children;
+
+ for (i = 0; i < listItems.length; i++) {
+ item = listItems[i];
+ if (!searchText || item.textContent.toLowerCase().indexOf(searchText) > -1) {
+ item.style.display = "";
+ } else {
+ item.style.display = "none";
+ }
+ }
+ }
+
+ // Processes selection changes
+ function selectionChange(evt) {
+ var i,
+ item,
+ checkbox = evt && evt.target || allCheckbox,
+ modulesList = dropDownList.getElementsByTagName("input"),
+ selectedNames = [];
+
+ toggleClass(checkbox.parentNode, "checked", checkbox.checked);
+
+ dirty = false;
+ if (checkbox.checked && checkbox !== allCheckbox) {
+ allCheckbox.checked = false;
+ removeClass(allCheckbox.parentNode, "checked");
+ }
+ for (i = 0; i < modulesList.length; i++) {
+ item = modulesList[i];
+ if (!evt) {
+ toggleClass(item.parentNode, "checked", item.checked);
+ } else if (checkbox === allCheckbox && checkbox.checked) {
+ item.checked = false;
+ removeClass(item.parentNode, "checked");
+ }
+ dirty = dirty || item.checked !== item.defaultChecked;
+ if (item.checked) {
+ selectedNames.push(item.parentNode.textContent);
+ }
+ }
+
+ commit.style.display = reset.style.display = dirty ? "" : "none";
+ moduleSearch.placeholder = selectedNames.join(", ") || allCheckbox.parentNode.textContent;
+ moduleSearch.title = "Type to filter list. Current selection:\n" + (selectedNames.join("\n") || allCheckbox.parentNode.textContent);
+ }
+
+ return moduleFilter;
+ }
+
+ function appendToolbar() {
+ var toolbar = id("qunit-testrunner-toolbar");
+
+ if (toolbar) {
+ toolbar.appendChild(toolbarUrlConfigContainer());
+ toolbar.appendChild(toolbarModuleFilter());
+ toolbar.appendChild(toolbarLooseFilter());
+ toolbar.appendChild(document$$1.createElement("div")).className = "clearfix";
+ }
+ }
+
+ function appendHeader() {
+ var header = id("qunit-header");
+
+ if (header) {
+ header.innerHTML = "" + header.innerHTML + " ";
+ }
+ }
+
+ function appendBanner() {
+ var banner = id("qunit-banner");
+
+ if (banner) {
+ banner.className = "";
+ }
+ }
+
+ function appendTestResults() {
+ var tests = id("qunit-tests"),
+ result = id("qunit-testresult"),
+ controls;
+
+ if (result) {
+ result.parentNode.removeChild(result);
+ }
+
+ if (tests) {
+ tests.innerHTML = "";
+ result = document$$1.createElement("p");
+ result.id = "qunit-testresult";
+ result.className = "result";
+ tests.parentNode.insertBefore(result, tests);
+ result.innerHTML = "
" + escapeText(document$$1.title) + "
" + "" + "" + appendFilteredTest() + "" + "";
+ }
+
+ appendHeader();
+ appendBanner();
+ appendTestResults();
+ appendUserAgent();
+ appendToolbar();
+ }
+
+ function appendTestsList(modules) {
+ var i, l, x, z, test, moduleObj;
+
+ for (i = 0, l = modules.length; i < l; i++) {
+ moduleObj = modules[i];
+
+ for (x = 0, z = moduleObj.tests.length; x < z; x++) {
+ test = moduleObj.tests[x];
+
+ appendTest(test.name, test.testId, moduleObj.name);
+ }
+ }
+ }
+
+ function appendTest(name, testId, moduleName) {
+ var title,
+ rerunTrigger,
+ testBlock,
+ assertList,
+ tests = id("qunit-tests");
+
+ if (!tests) {
+ return;
+ }
+
+ title = document$$1.createElement("strong");
+ title.innerHTML = getNameHtml(name, moduleName);
+
+ rerunTrigger = document$$1.createElement("a");
+ rerunTrigger.innerHTML = "Rerun";
+ rerunTrigger.href = setUrl({ testId: testId });
+
+ testBlock = document$$1.createElement("li");
+ testBlock.appendChild(title);
+ testBlock.appendChild(rerunTrigger);
+ testBlock.id = "qunit-test-output-" + testId;
+
+ assertList = document$$1.createElement("ol");
+ assertList.className = "qunit-assert-list";
+
+ testBlock.appendChild(assertList);
+
+ tests.appendChild(testBlock);
+ }
+
+ // HTML Reporter initialization and load
+ QUnit.begin(function (details) {
+ var i, moduleObj, tests;
+
+ // Sort modules by name for the picker
+ for (i = 0; i < details.modules.length; i++) {
+ moduleObj = details.modules[i];
+ if (moduleObj.name) {
+ modulesList.push(moduleObj.name);
+ }
+ }
+ modulesList.sort(function (a, b) {
+ return a.localeCompare(b);
+ });
+
+ // Initialize QUnit elements
+ appendInterface();
+ appendTestsList(details.modules);
+ tests = id("qunit-tests");
+ if (tests && config.hidepassed) {
+ addClass(tests, "hidepass");
+ }
+ });
+
+ QUnit.done(function (details) {
+ var banner = id("qunit-banner"),
+ tests = id("qunit-tests"),
+ abortButton = id("qunit-abort-tests-button"),
+ totalTests = stats.passedTests + stats.skippedTests + stats.todoTests + stats.failedTests,
+ html = [totalTests, " tests completed in ", details.runtime, " milliseconds, with ", stats.failedTests, " failed, ", stats.skippedTests, " skipped, and ", stats.todoTests, " todo.
", "", details.passed, " assertions of ", details.total, " passed, ", details.failed, " failed."].join(""),
+ test,
+ assertLi,
+ assertList;
+
+ // Update remaing tests to aborted
+ if (abortButton && abortButton.disabled) {
+ html = "Tests aborted after " + details.runtime + " milliseconds.";
+
+ for (var i = 0; i < tests.children.length; i++) {
+ test = tests.children[i];
+ if (test.className === "" || test.className === "running") {
+ test.className = "aborted";
+ assertList = test.getElementsByTagName("ol")[0];
+ assertLi = document$$1.createElement("li");
+ assertLi.className = "fail";
+ assertLi.innerHTML = "Test aborted.";
+ assertList.appendChild(assertLi);
+ }
+ }
+ }
+
+ if (banner && (!abortButton || abortButton.disabled === false)) {
+ banner.className = stats.failedTests ? "qunit-fail" : "qunit-pass";
+ }
+
+ if (abortButton) {
+ abortButton.parentNode.removeChild(abortButton);
+ }
+
+ if (tests) {
+ id("qunit-testresult-display").innerHTML = html;
+ }
+
+ if (config.altertitle && document$$1.title) {
+
+ // Show ✖ for good, ✔ for bad suite result in title
+ // use escape sequences in case file gets loaded with non-utf-8
+ // charset
+ document$$1.title = [stats.failedTests ? "\u2716" : "\u2714", document$$1.title.replace(/^[\u2714\u2716] /i, "")].join(" ");
+ }
+
+ // Scroll back to top to show results
+ if (config.scrolltop && window.scrollTo) {
+ window.scrollTo(0, 0);
+ }
+ });
+
+ function getNameHtml(name, module) {
+ var nameHtml = "";
+
+ if (module) {
+ nameHtml = "" + escapeText(module) + ": ";
+ }
+
+ nameHtml += "" + escapeText(name) + "";
+
+ return nameHtml;
+ }
+
+ QUnit.testStart(function (details) {
+ var running, testBlock, bad;
+
+ testBlock = id("qunit-test-output-" + details.testId);
+ if (testBlock) {
+ testBlock.className = "running";
+ } else {
+
+ // Report later registered tests
+ appendTest(details.name, details.testId, details.module);
+ }
+
+ running = id("qunit-testresult-display");
+ if (running) {
+ bad = QUnit.config.reorder && details.previousFailure;
+
+ running.innerHTML = [bad ? "Rerunning previously failed test:
" : "Running:
", getNameHtml(details.name, details.module)].join("");
+ }
+ });
+
+ function stripHtml(string) {
+
+ // Strip tags, html entity and whitespaces
+ return string.replace(/<\/?[^>]+(>|$)/g, "").replace(/\"/g, "").replace(/\s+/g, "");
+ }
+
+ QUnit.log(function (details) {
+ var assertList,
+ assertLi,
+ message,
+ expected,
+ actual,
+ diff,
+ showDiff = false,
+ testItem = id("qunit-test-output-" + details.testId);
+
+ if (!testItem) {
+ return;
+ }
+
+ message = escapeText(details.message) || (details.result ? "okay" : "failed");
+ message = " ";
+ message += "@ " + details.runtime + " ms";
+
+ // The pushFailure doesn't provide details.expected
+ // when it calls, it's implicit to also not show expected and diff stuff
+ // Also, we need to check details.expected existence, as it can exist and be undefined
+ if (!details.result && hasOwn.call(details, "expected")) {
+ if (details.negative) {
+ expected = "NOT " + QUnit.dump.parse(details.expected);
+ } else {
+ expected = QUnit.dump.parse(details.expected);
+ }
+
+ actual = QUnit.dump.parse(details.actual);
+ message += "
";
+
+ // This occurs when pushFailure is set and we have an extracted stack trace
+ } else if (!details.result && details.source) {
+ message += " ";
+
+ if (actual !== expected) {
+
+ message += "Expected: " + escapeText(expected) + "
";
+
+ if (typeof details.actual === "number" && typeof details.expected === "number") {
+ if (!isNaN(details.actual) && !isNaN(details.expected)) {
+ showDiff = true;
+ diff = details.actual - details.expected;
+ diff = (diff > 0 ? "+" : "") + diff;
+ }
+ } else if (typeof details.actual !== "boolean" && typeof details.expected !== "boolean") {
+ diff = QUnit.diff(expected, actual);
+
+ // don't show diff if there is zero overlap
+ showDiff = stripHtml(diff).length !== stripHtml(expected).length + stripHtml(actual).length;
+ }
+
+ if (showDiff) {
+ message += "Result: " + escapeText(actual) + "
";
+ }
+ } else if (expected.indexOf("[object Array]") !== -1 || expected.indexOf("[object Object]") !== -1) {
+ message += " ";
+ } else {
+ message += " ";
+ }
+
+ if (details.source) {
+ message += "Diff: " + diff + "
";
+ }
+
+ message += "Source: " + escapeText(details.source) + "
" + "
";
+ }
+
+ assertList = testItem.getElementsByTagName("ol")[0];
+
+ assertLi = document$$1.createElement("li");
+ assertLi.className = details.result ? "pass" : "fail";
+ assertLi.innerHTML = message;
+ assertList.appendChild(assertLi);
+ });
+
+ QUnit.testDone(function (details) {
+ var testTitle,
+ time,
+ testItem,
+ assertList,
+ good,
+ bad,
+ testCounts,
+ skipped,
+ sourceName,
+ tests = id("qunit-tests");
+
+ if (!tests) {
+ return;
+ }
+
+ testItem = id("qunit-test-output-" + details.testId);
+
+ assertList = testItem.getElementsByTagName("ol")[0];
+
+ good = details.passed;
+ bad = details.failed;
+
+ // This test passed if it has no unexpected failed assertions
+ var testPassed = details.failed > 0 ? details.todo : !details.todo;
+
+ if (testPassed) {
+
+ // Collapse the passing tests
+ addClass(assertList, "qunit-collapsed");
+ } else if (config.collapse) {
+ if (!collapseNext) {
+
+ // Skip collapsing the first failing test
+ collapseNext = true;
+ } else {
+
+ // Collapse remaining tests
+ addClass(assertList, "qunit-collapsed");
+ }
+ }
+
+ // The testItem.firstChild is the test name
+ testTitle = testItem.firstChild;
+
+ testCounts = bad ? "" + bad + ", " + "" + good + ", " : "";
+
+ testTitle.innerHTML += " (" + testCounts + details.assertions.length + ")";
+
+ if (details.skipped) {
+ stats.skippedTests++;
+
+ testItem.className = "skipped";
+ skipped = document$$1.createElement("em");
+ skipped.className = "qunit-skipped-label";
+ skipped.innerHTML = "skipped";
+ testItem.insertBefore(skipped, testTitle);
+ } else {
+ addEvent(testTitle, "click", function () {
+ toggleClass(assertList, "qunit-collapsed");
+ });
+
+ testItem.className = testPassed ? "pass" : "fail";
+
+ if (details.todo) {
+ var todoLabel = document$$1.createElement("em");
+ todoLabel.className = "qunit-todo-label";
+ todoLabel.innerHTML = "todo";
+ testItem.className += " todo";
+ testItem.insertBefore(todoLabel, testTitle);
+ }
+
+ time = document$$1.createElement("span");
+ time.className = "runtime";
+ time.innerHTML = details.runtime + " ms";
+ testItem.insertBefore(time, assertList);
+
+ if (!testPassed) {
+ stats.failedTests++;
+ } else if (details.todo) {
+ stats.todoTests++;
+ } else {
+ stats.passedTests++;
+ }
+ }
+
+ // Show the source of the test when showing assertions
+ if (details.source) {
+ sourceName = document$$1.createElement("p");
+ sourceName.innerHTML = "Source: " + details.source;
+ addClass(sourceName, "qunit-source");
+ if (testPassed) {
+ addClass(sourceName, "qunit-collapsed");
+ }
+ addEvent(testTitle, "click", function () {
+ toggleClass(sourceName, "qunit-collapsed");
+ });
+ testItem.appendChild(sourceName);
+ }
+ });
+
+ // Avoid readyState issue with phantomjs
+ // Ref: #818
+ var notPhantom = function (p) {
+ return !(p && p.version && p.version.major > 0);
+ }(window.phantom);
+
+ if (notPhantom && document$$1.readyState === "complete") {
+ QUnit.load();
+ } else {
+ addEvent(window, "load", QUnit.load);
+ }
+
+ // Wrap window.onerror. We will call the original window.onerror to see if
+ // the existing handler fully handles the error; if not, we will call the
+ // QUnit.onError function.
+ var originalWindowOnError = window.onerror;
+
+ // Cover uncaught exceptions
+ // Returning true will suppress the default browser handler,
+ // returning false will let it run.
+ window.onerror = function (message, fileName, lineNumber) {
+ var ret = false;
+ if (originalWindowOnError) {
+ for (var _len = arguments.length, args = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
+ args[_key - 3] = arguments[_key];
+ }
+
+ ret = originalWindowOnError.call.apply(originalWindowOnError, [this, message, fileName, lineNumber].concat(args));
+ }
+
+ // Treat return value as window.onerror itself does,
+ // Only do our handling if not suppressed.
+ if (ret !== true) {
+ var error = {
+ message: message,
+ fileName: fileName,
+ lineNumber: lineNumber
+ };
+
+ ret = QUnit.onError(error);
+ }
+
+ return ret;
+ };
+
+ // Listen for unhandled rejections, and call QUnit.onUnhandledRejection
+ window.addEventListener("unhandledrejection", function (event) {
+ QUnit.onUnhandledRejection(event.reason);
+ });
+ })();
+
+ /*
+ * This file is a modified version of google-diff-match-patch's JavaScript implementation
+ * (https://code.google.com/p/google-diff-match-patch/source/browse/trunk/javascript/diff_match_patch_uncompressed.js),
+ * modifications are licensed as more fully set forth in LICENSE.txt.
+ *
+ * The original source of google-diff-match-patch is attributable and licensed as follows:
+ *
+ * Copyright 2006 Google Inc.
+ * https://code.google.com/p/google-diff-match-patch/
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * More Info:
+ * https://code.google.com/p/google-diff-match-patch/
+ *
+ * Usage: QUnit.diff(expected, actual)
+ *
+ */
+ QUnit.diff = function () {
+ function DiffMatchPatch() {}
+
+ // DIFF FUNCTIONS
+
+ /**
+ * The data structure representing a diff is an array of tuples:
+ * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]
+ * which means: delete 'Hello', add 'Goodbye' and keep ' world.'
+ */
+ var DIFF_DELETE = -1,
+ DIFF_INSERT = 1,
+ DIFF_EQUAL = 0;
+
+ /**
+ * Find the differences between two texts. Simplifies the problem by stripping
+ * any common prefix or suffix off the texts before diffing.
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {boolean=} optChecklines Optional speedup flag. If present and false,
+ * then don't run a line-level diff first to identify the changed areas.
+ * Defaults to true, which does a faster, slightly less optimal diff.
+ * @return {!Array.} Array of diff tuples.
+ */
+ DiffMatchPatch.prototype.DiffMain = function (text1, text2, optChecklines) {
+ var deadline, checklines, commonlength, commonprefix, commonsuffix, diffs;
+
+ // The diff must be complete in up to 1 second.
+ deadline = new Date().getTime() + 1000;
+
+ // Check for null inputs.
+ if (text1 === null || text2 === null) {
+ throw new Error("Null input. (DiffMain)");
+ }
+
+ // Check for equality (speedup).
+ if (text1 === text2) {
+ if (text1) {
+ return [[DIFF_EQUAL, text1]];
+ }
+ return [];
+ }
+
+ if (typeof optChecklines === "undefined") {
+ optChecklines = true;
+ }
+
+ checklines = optChecklines;
+
+ // Trim off common prefix (speedup).
+ commonlength = this.diffCommonPrefix(text1, text2);
+ commonprefix = text1.substring(0, commonlength);
+ text1 = text1.substring(commonlength);
+ text2 = text2.substring(commonlength);
+
+ // Trim off common suffix (speedup).
+ commonlength = this.diffCommonSuffix(text1, text2);
+ commonsuffix = text1.substring(text1.length - commonlength);
+ text1 = text1.substring(0, text1.length - commonlength);
+ text2 = text2.substring(0, text2.length - commonlength);
+
+ // Compute the diff on the middle block.
+ diffs = this.diffCompute(text1, text2, checklines, deadline);
+
+ // Restore the prefix and suffix.
+ if (commonprefix) {
+ diffs.unshift([DIFF_EQUAL, commonprefix]);
+ }
+ if (commonsuffix) {
+ diffs.push([DIFF_EQUAL, commonsuffix]);
+ }
+ this.diffCleanupMerge(diffs);
+ return diffs;
+ };
+
+ /**
+ * Reduce the number of edits by eliminating operationally trivial equalities.
+ * @param {!Array.} diffs Array of diff tuples.
+ */
+ DiffMatchPatch.prototype.diffCleanupEfficiency = function (diffs) {
+ var changes, equalities, equalitiesLength, lastequality, pointer, preIns, preDel, postIns, postDel;
+ changes = false;
+ equalities = []; // Stack of indices where equalities are found.
+ equalitiesLength = 0; // Keeping our own length var is faster in JS.
+ /** @type {?string} */
+ lastequality = null;
+
+ // Always equal to diffs[equalities[equalitiesLength - 1]][1]
+ pointer = 0; // Index of current position.
+
+ // Is there an insertion operation before the last equality.
+ preIns = false;
+
+ // Is there a deletion operation before the last equality.
+ preDel = false;
+
+ // Is there an insertion operation after the last equality.
+ postIns = false;
+
+ // Is there a deletion operation after the last equality.
+ postDel = false;
+ while (pointer < diffs.length) {
+
+ // Equality found.
+ if (diffs[pointer][0] === DIFF_EQUAL) {
+ if (diffs[pointer][1].length < 4 && (postIns || postDel)) {
+
+ // Candidate found.
+ equalities[equalitiesLength++] = pointer;
+ preIns = postIns;
+ preDel = postDel;
+ lastequality = diffs[pointer][1];
+ } else {
+
+ // Not a candidate, and can never become one.
+ equalitiesLength = 0;
+ lastequality = null;
+ }
+ postIns = postDel = false;
+
+ // An insertion or deletion.
+ } else {
+
+ if (diffs[pointer][0] === DIFF_DELETE) {
+ postDel = true;
+ } else {
+ postIns = true;
+ }
+
+ /*
+ * Five types to be split:
+ * A " + "Source: " + escapeText(details.source) + "
BXYCD
+ * AXCD
+ * ABXC
+ * AXCD
+ * ABXC
+ */
+ if (lastequality && (preIns && preDel && postIns && postDel || lastequality.length < 2 && preIns + preDel + postIns + postDel === 3)) {
+
+ // Duplicate record.
+ diffs.splice(equalities[equalitiesLength - 1], 0, [DIFF_DELETE, lastequality]);
+
+ // Change second copy to insert.
+ diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;
+ equalitiesLength--; // Throw away the equality we just deleted;
+ lastequality = null;
+ if (preIns && preDel) {
+
+ // No changes made which could affect previous entry, keep going.
+ postIns = postDel = true;
+ equalitiesLength = 0;
+ } else {
+ equalitiesLength--; // Throw away the previous equality.
+ pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;
+ postIns = postDel = false;
+ }
+ changes = true;
+ }
+ }
+ pointer++;
+ }
+
+ if (changes) {
+ this.diffCleanupMerge(diffs);
+ }
+ };
+
+ /**
+ * Convert a diff array into a pretty HTML report.
+ * @param {!Array.} diffs Array of diff tuples.
+ * @param {integer} string to be beautified.
+ * @return {string} HTML representation.
+ */
+ DiffMatchPatch.prototype.diffPrettyHtml = function (diffs) {
+ var op,
+ data,
+ x,
+ html = [];
+ for (x = 0; x < diffs.length; x++) {
+ op = diffs[x][0]; // Operation (insert, delete, equal)
+ data = diffs[x][1]; // Text of change.
+ switch (op) {
+ case DIFF_INSERT:
+ html[x] = "" + escapeText(data) + "";
+ break;
+ case DIFF_DELETE:
+ html[x] = "" + escapeText(data) + "";
+ break;
+ case DIFF_EQUAL:
+ html[x] = "" + escapeText(data) + "";
+ break;
+ }
+ }
+ return html.join("");
+ };
+
+ /**
+ * Determine the common prefix of two strings.
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ * @return {number} The number of characters common to the start of each
+ * string.
+ */
+ DiffMatchPatch.prototype.diffCommonPrefix = function (text1, text2) {
+ var pointermid, pointermax, pointermin, pointerstart;
+
+ // Quick check for common null cases.
+ if (!text1 || !text2 || text1.charAt(0) !== text2.charAt(0)) {
+ return 0;
+ }
+
+ // Binary search.
+ // Performance analysis: https://neil.fraser.name/news/2007/10/09/
+ pointermin = 0;
+ pointermax = Math.min(text1.length, text2.length);
+ pointermid = pointermax;
+ pointerstart = 0;
+ while (pointermin < pointermid) {
+ if (text1.substring(pointerstart, pointermid) === text2.substring(pointerstart, pointermid)) {
+ pointermin = pointermid;
+ pointerstart = pointermin;
+ } else {
+ pointermax = pointermid;
+ }
+ pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);
+ }
+ return pointermid;
+ };
+
+ /**
+ * Determine the common suffix of two strings.
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ * @return {number} The number of characters common to the end of each string.
+ */
+ DiffMatchPatch.prototype.diffCommonSuffix = function (text1, text2) {
+ var pointermid, pointermax, pointermin, pointerend;
+
+ // Quick check for common null cases.
+ if (!text1 || !text2 || text1.charAt(text1.length - 1) !== text2.charAt(text2.length - 1)) {
+ return 0;
+ }
+
+ // Binary search.
+ // Performance analysis: https://neil.fraser.name/news/2007/10/09/
+ pointermin = 0;
+ pointermax = Math.min(text1.length, text2.length);
+ pointermid = pointermax;
+ pointerend = 0;
+ while (pointermin < pointermid) {
+ if (text1.substring(text1.length - pointermid, text1.length - pointerend) === text2.substring(text2.length - pointermid, text2.length - pointerend)) {
+ pointermin = pointermid;
+ pointerend = pointermin;
+ } else {
+ pointermax = pointermid;
+ }
+ pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);
+ }
+ return pointermid;
+ };
+
+ /**
+ * Find the differences between two texts. Assumes that the texts do not
+ * have any common prefix or suffix.
+ * @param {string} text1 Old string to be diffed.
+ * @param {string} text2 New string to be diffed.
+ * @param {boolean} checklines Speedup flag. If false, then don't run a
+ * line-level diff first to identify the changed areas.
+ * If true, then run a faster, slightly less optimal diff.
+ * @param {number} deadline Time when the diff should be complete by.
+ * @return {!Array.} Array of diff tuples.
+ * @private
+ */
+ DiffMatchPatch.prototype.diffCompute = function (text1, text2, checklines, deadline) {
+ var diffs, longtext, shorttext, i, hm, text1A, text2A, text1B, text2B, midCommon, diffsA, diffsB;
+
+ if (!text1) {
+
+ // Just add some text (speedup).
+ return [[DIFF_INSERT, text2]];
+ }
+
+ if (!text2) {
+
+ // Just delete some text (speedup).
+ return [[DIFF_DELETE, text1]];
+ }
+
+ longtext = text1.length > text2.length ? text1 : text2;
+ shorttext = text1.length > text2.length ? text2 : text1;
+ i = longtext.indexOf(shorttext);
+ if (i !== -1) {
+
+ // Shorter text is inside the longer text (speedup).
+ diffs = [[DIFF_INSERT, longtext.substring(0, i)], [DIFF_EQUAL, shorttext], [DIFF_INSERT, longtext.substring(i + shorttext.length)]];
+
+ // Swap insertions for deletions if diff is reversed.
+ if (text1.length > text2.length) {
+ diffs[0][0] = diffs[2][0] = DIFF_DELETE;
+ }
+ return diffs;
+ }
+
+ if (shorttext.length === 1) {
+
+ // Single character string.
+ // After the previous speedup, the character can't be an equality.
+ return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];
+ }
+
+ // Check to see if the problem can be split in two.
+ hm = this.diffHalfMatch(text1, text2);
+ if (hm) {
+
+ // A half-match was found, sort out the return data.
+ text1A = hm[0];
+ text1B = hm[1];
+ text2A = hm[2];
+ text2B = hm[3];
+ midCommon = hm[4];
+
+ // Send both pairs off for separate processing.
+ diffsA = this.DiffMain(text1A, text2A, checklines, deadline);
+ diffsB = this.DiffMain(text1B, text2B, checklines, deadline);
+
+ // Merge the results.
+ return diffsA.concat([[DIFF_EQUAL, midCommon]], diffsB);
+ }
+
+ if (checklines && text1.length > 100 && text2.length > 100) {
+ return this.diffLineMode(text1, text2, deadline);
+ }
+
+ return this.diffBisect(text1, text2, deadline);
+ };
+
+ /**
+ * Do the two texts share a substring which is at least half the length of the
+ * longer text?
+ * This speedup can produce non-minimal diffs.
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ * @return {Array.abcxxxxxxdef
+ // -> abcxxxdef
+ // e.g: xxxabcdefxxx
+ // -> defxxxabc
+ // Only extract an overlap if it is as big as the edit ahead or behind it.
+ pointer = 1;
+ while (pointer < diffs.length) {
+ if (diffs[pointer - 1][0] === DIFF_DELETE && diffs[pointer][0] === DIFF_INSERT) {
+ deletion = diffs[pointer - 1][1];
+ insertion = diffs[pointer][1];
+ overlapLength1 = this.diffCommonOverlap(deletion, insertion);
+ overlapLength2 = this.diffCommonOverlap(insertion, deletion);
+ if (overlapLength1 >= overlapLength2) {
+ if (overlapLength1 >= deletion.length / 2 || overlapLength1 >= insertion.length / 2) {
+
+ // Overlap found. Insert an equality and trim the surrounding edits.
+ diffs.splice(pointer, 0, [DIFF_EQUAL, insertion.substring(0, overlapLength1)]);
+ diffs[pointer - 1][1] = deletion.substring(0, deletion.length - overlapLength1);
+ diffs[pointer + 1][1] = insertion.substring(overlapLength1);
+ pointer++;
+ }
+ } else {
+ if (overlapLength2 >= deletion.length / 2 || overlapLength2 >= insertion.length / 2) {
+
+ // Reverse overlap found.
+ // Insert an equality and swap and trim the surrounding edits.
+ diffs.splice(pointer, 0, [DIFF_EQUAL, deletion.substring(0, overlapLength2)]);
+
+ diffs[pointer - 1][0] = DIFF_INSERT;
+ diffs[pointer - 1][1] = insertion.substring(0, insertion.length - overlapLength2);
+ diffs[pointer + 1][0] = DIFF_DELETE;
+ diffs[pointer + 1][1] = deletion.substring(overlapLength2);
+ pointer++;
+ }
+ }
+ pointer++;
+ }
+ pointer++;
+ }
+ };
+
+ /**
+ * Determine if the suffix of one string is the prefix of another.
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ * @return {number} The number of characters common to the end of the first
+ * string and the start of the second string.
+ * @private
+ */
+ DiffMatchPatch.prototype.diffCommonOverlap = function (text1, text2) {
+ var text1Length, text2Length, textLength, best, length, pattern, found;
+
+ // Cache the text lengths to prevent multiple calls.
+ text1Length = text1.length;
+ text2Length = text2.length;
+
+ // Eliminate the null case.
+ if (text1Length === 0 || text2Length === 0) {
+ return 0;
+ }
+
+ // Truncate the longer string.
+ if (text1Length > text2Length) {
+ text1 = text1.substring(text1Length - text2Length);
+ } else if (text1Length < text2Length) {
+ text2 = text2.substring(0, text1Length);
+ }
+ textLength = Math.min(text1Length, text2Length);
+
+ // Quick check for the worst case.
+ if (text1 === text2) {
+ return textLength;
+ }
+
+ // Start by looking for a single character match
+ // and increase length until no match is found.
+ // Performance analysis: https://neil.fraser.name/news/2010/11/04/
+ best = 0;
+ length = 1;
+ while (true) {
+ pattern = text1.substring(textLength - length);
+ found = text2.indexOf(pattern);
+ if (found === -1) {
+ return best;
+ }
+ length += found;
+ if (found === 0 || text1.substring(textLength - length) === text2.substring(0, length)) {
+ best = length;
+ length++;
+ }
+ }
+ };
+
+ /**
+ * Split two texts into an array of strings. Reduce the texts to a string of
+ * hashes where each Unicode character represents one line.
+ * @param {string} text1 First string.
+ * @param {string} text2 Second string.
+ * @return {{chars1: string, chars2: string, lineArray: !Array.