diff options
| author | Sam Varshavchik | 2017-03-06 19:51:02 -0500 |
|---|---|---|
| committer | Sam Varshavchik | 2017-03-06 19:51:02 -0500 |
| commit | f25724f8807dddededb347e4740bfed93fda7bf5 (patch) | |
| tree | f91dab87d22a2363fb95eca8071d9b72be1ea0cb | |
| parent | 7b444198abbc9d46d1ae191f3153b959a13b11a1 (diff) | |
| download | courier-libs-f25724f8807dddededb347e4740bfed93fda7bf5.tar.bz2 | |
courier-unicode: C++11 update.
* Migrate to C++11: remove unicode_char, use char32_t. Replace
std::vector<unicode_char> with std::u32string.
| -rw-r--r-- | unicode/ChangeLog | 5 | ||||
| -rw-r--r-- | unicode/Makefile.am | 4 | ||||
| -rw-r--r-- | unicode/book.xml | 161 | ||||
| -rw-r--r-- | unicode/configure.ac | 17 | ||||
| -rw-r--r-- | unicode/courier-unicode.h.in | 176 | ||||
| -rw-r--r-- | unicode/eastasianwidth.h | 2 | ||||
| -rw-r--r-- | unicode/enttest.c | 2 | ||||
| -rw-r--r-- | unicode/linebreaktab_internal.h | 2 | ||||
| -rw-r--r-- | unicode/linebreaktest.C | 22 | ||||
| -rw-r--r-- | unicode/mkeastasianwidth.pl | 2 | ||||
| -rw-r--r-- | unicode/mkultcase.pl | 2 | ||||
| -rw-r--r-- | unicode/unicode.c | 38 | ||||
| -rw-r--r-- | unicode/unicode_categories.c | 20 | ||||
| -rw-r--r-- | unicode/unicode_graphemebreak.c | 2 | ||||
| -rw-r--r-- | unicode/unicode_htmlent.c | 6 | ||||
| -rw-r--r-- | unicode/unicode_linebreak.c | 14 | ||||
| -rw-r--r-- | unicode/unicode_scripts.c | 2 | ||||
| -rw-r--r-- | unicode/unicode_tablookup.c | 4 | ||||
| -rw-r--r-- | unicode/unicode_ultcase.c | 14 | ||||
| -rw-r--r-- | unicode/unicode_ultcasetab.c | 776 | ||||
| -rw-r--r-- | unicode/unicode_wcwidth.c | 4 | ||||
| -rw-r--r-- | unicode/unicode_wordbreak.c | 6 | ||||
| -rw-r--r-- | unicode/unicodebuf.c | 12 | ||||
| -rw-r--r-- | unicode/unicodecpp.C | 54 | ||||
| -rw-r--r-- | unicode/unicodetest.c | 2 | ||||
| -rw-r--r-- | unicode/wordbreaktest.C | 4 |
26 files changed, 702 insertions, 651 deletions
diff --git a/unicode/ChangeLog b/unicode/ChangeLog index 68d0427..95f525f 100644 --- a/unicode/ChangeLog +++ b/unicode/ChangeLog @@ -1,3 +1,8 @@ +2017-03-06 Sam Varshavchik <mrsam@courier-mta.com> + + * Migrate to C++11: remove unicode_char, use char32_t. Replace + std::vector<unicode_char> with std::u32string. + 1.5 2016-02-19 Sam Varshavchik <mrsam@courier-mta.com> diff --git a/unicode/Makefile.am b/unicode/Makefile.am index 0618602..d2232eb 100644 --- a/unicode/Makefile.am +++ b/unicode/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2000-2014 Double Precision, Inc. See COPYING for +# Copyright 2000-2017 Double Precision, Inc. See COPYING for # distribution information. @@ -77,7 +77,7 @@ libcourier_unicode_la_SOURCES=\ categoriestab.h \ unicode_categories.c -libcourier_unicode_la_LDFLAGS=-version-info 3:0:0 +libcourier_unicode_la_LDFLAGS=-version-info 4:0:0 EXTRA_DIST=$(noinst_SCRIPTS) $(man_MANS) $(PACKAGE).spec \ packaging/freebsd10/pkg-descr diff --git a/unicode/book.xml b/unicode/book.xml index b9a7000..abd4115 100644 --- a/unicode/book.xml +++ b/unicode/book.xml @@ -100,6 +100,15 @@ See COPYING for distribution information. <para> To use the library, <quote>#include <courier-unicode.h></quote> and link with <literal>-lcourier-unicode</literal>. + The C++ compiler must have C++11 support. Minimum usable version of + gcc appears to be gcc 4.4 with the <literal>-std=c++0x</literal> flag. + Current versions of gcc use C++11, or higher, by default and do not + require extra flags. Like with all C++ code, the same compiler, and flags, + must be used to build code that uses this library that was used to + build the library itself. + </para> + + <para> The starting point is <link linkend="courier-unicode"> <citerefentry> @@ -158,6 +167,16 @@ See COPYING for distribution information. characters, in addition to unicode characters, with modified-UTF7. </para> + + <para> + The C++ compiler must have C++11 support. Minimum usable version of + gcc appears to be gcc 4.4 with the <literal>-std=c++0x</literal> + flag. Current versions of gcc use C++11, or higher, by default and + do not require extra flags. Consult the packaging documentation + for the Courier Unicode Library for information on any + compiler flags that are needed to build software that links + with this library. + </para> </refsect1> <refsect1> <title>SEE ALSO</title> @@ -302,7 +321,7 @@ See COPYING for distribution information. <funcprototype> <funcdef>unicode_convert_handle_t <function>unicode_convert_tou_init</function></funcdef> <paramdef>const char *<parameter>src_chset</parameter></paramdef> - <paramdef>unicode_char **<parameter>ucptr_ret</parameter></paramdef> + <paramdef>char32_t **<parameter>ucptr_ret</parameter></paramdef> <paramdef>size_t *<parameter>ucsize_ret</parameter></paramdef> <paramdef>int <parameter>nullterminate</parameter></paramdef> </funcprototype> @@ -318,7 +337,7 @@ See COPYING for distribution information. <funcprototype> <funcdef>int <function>unicode_convert_uc</function></funcdef> <paramdef>unicode_convert_handle_t <parameter>handle</parameter></paramdef> - <paramdef>const unicode_char *<parameter>text</parameter></paramdef> + <paramdef>const char32_t *<parameter>text</parameter></paramdef> <paramdef>size_t <parameter>cnt</parameter></paramdef> </funcprototype> @@ -349,14 +368,14 @@ See COPYING for distribution information. <paramdef>const char *<parameter>text</parameter></paramdef> <paramdef>size_t <parameter>text_l</parameter></paramdef> <paramdef>const char *<parameter>charset</parameter></paramdef> - <paramdef>unicode_char **<parameter>uc</parameter></paramdef> + <paramdef>char32_t **<parameter>uc</parameter></paramdef> <paramdef>size_t *<parameter>ucsize</parameter></paramdef> <paramdef>int *<parameter>error</parameter></paramdef> </funcprototype> <funcprototype> <funcdef>int <function>unicode_convert_fromu_tobuf</function></funcdef> - <paramdef>const unicode_char *<parameter>utext</parameter></paramdef> + <paramdef>const char32_t *<parameter>utext</parameter></paramdef> <paramdef>size_t <parameter>utext_l</parameter></paramdef> <paramdef>const char *<parameter>charset</parameter></paramdef> <paramdef>char **<parameter>c</parameter></paramdef> @@ -374,13 +393,13 @@ See COPYING for distribution information. <para> <varname>unicode_u_ucs4_native</varname>[] contains the string <quote>UCS-4BE</quote> or <quote>UCS-4LE</quote>, - matching the native <classname>unicode_char</classname> endianness. + matching the native <classname>char32_t</classname> endianness. </para> <para> <varname>unicode_u_ucs2_native</varname>[] contains the string <quote>UCS-2BE</quote> or <quote>UCS-2LE</quote>, - matching the native <classname>unicode_char</classname> endianness. + matching the native <classname>char32_t</classname> endianness. </para> <para> @@ -520,26 +539,26 @@ See COPYING for distribution information. <para> <function>unicode_convert_tou_init</function>() - converts character text into a <classname>unicode_char</classname> + converts character text into a <classname>char32_t</classname> buffer. It works just like <function>unicode_convert_tocbuf_init</function>(), except that only the source character set gets specified and the output - buffer is a <classname>unicode_char</classname> buffer. + buffer is a <classname>char32_t</classname> buffer. <parameter>nullterminate</parameter> terminates the converted unicode characters with a <literal>U+0000</literal>. </para> <para> <function>unicode_convert_fromu_init</function>() - converts <classname>unicode_char</classname>s to the output + converts <classname>char32_t</classname>s to the output character set, and also works like <function>unicode_convert_tocbuf_init</function>(). Additionally, in this case, <function>unicode_convert_uc</function>() works just like <function>unicode_convert</function>() except that the input sequence is a - <classname>unicode_char</classname> sequence, and the + <classname>char32_t</classname> sequence, and the count parameter is th enumber of unicode characters. </para> </refsect2> @@ -680,7 +699,7 @@ See COPYING for distribution information. <funcsynopsis> <funcsynopsisinfo>#include <courier-unicode.h></funcsynopsisinfo> <funcprototype> - <funcdef>unicode_char <function>unicode_html40ent_lookup</function></funcdef> + <funcdef>char32_t <function>unicode_html40ent_lookup</function></funcdef> <paramdef>const char *<parameter>entity</parameter></paramdef> </funcprototype> </funcsynopsis> @@ -751,52 +770,52 @@ See COPYING for distribution information. <funcsynopsisinfo>#include <courier-unicode.h></funcsynopsisinfo> <funcprototype> <funcdef>uint32_t <function>unicode_category_lookup</function></funcdef> - <paramdef>unicode_char <parameter>c</parameter></paramdef> + <paramdef>char32_t <parameter>c</parameter></paramdef> </funcprototype> <funcprototype> <funcdef>int <function>unicode_isalnum</function></funcdef> - <paramdef>unicode_char <parameter>c</parameter></paramdef> + <paramdef>char32_t <parameter>c</parameter></paramdef> </funcprototype> <funcprototype> <funcdef>int <function>unicode_isalpha</function></funcdef> - <paramdef>unicode_char <parameter>c</parameter></paramdef> + <paramdef>char32_t <parameter>c</parameter></paramdef> </funcprototype> <funcprototype> <funcdef>int <function>unicode_isblank</function></funcdef> - <paramdef>unicode_char <parameter>c</parameter></paramdef> + <paramdef>char32_t <parameter>c</parameter></paramdef> </funcprototype> <funcprototype> <funcdef>int <function>unicode_isdigit</function></funcdef> - <paramdef>unicode_char <parameter>c</parameter></paramdef> + <paramdef>char32_t <parameter>c</parameter></paramdef> </funcprototype> <funcprototype> <funcdef>int <function>unicode_isgraph</function></funcdef> - <paramdef>unicode_char <parameter>c</parameter></paramdef> + <paramdef>char32_t <parameter>c</parameter></paramdef> </funcprototype> <funcprototype> <funcdef>int <function>unicode_islower</function></funcdef> - <paramdef>unicode_char <parameter>c</parameter></paramdef> + <paramdef>char32_t <parameter>c</parameter></paramdef> </funcprototype> <funcprototype> <funcdef>int <function>unicode_ispunct</function></funcdef> - <paramdef>unicode_char <parameter>c</parameter></paramdef> + <paramdef>char32_t <parameter>c</parameter></paramdef> </funcprototype> <funcprototype> <funcdef>int <function>unicode_isspace</function></funcdef> - <paramdef>unicode_char <parameter>c</parameter></paramdef> + <paramdef>char32_t <parameter>c</parameter></paramdef> </funcprototype> <funcprototype> <funcdef>int <function>unicode_isupper</function></funcdef> - <paramdef>unicode_char <parameter>c</parameter></paramdef> + <paramdef>char32_t <parameter>c</parameter></paramdef> </funcprototype> </funcsynopsis> </refsynopsisdiv> @@ -973,8 +992,8 @@ See COPYING for distribution information. <funcsynopsisinfo>#include <courier-unicode.h></funcsynopsisinfo> <funcprototype> <funcdef>int <function>unicode_grapheme_break</function></funcdef> - <paramdef>unicode_char <parameter>a</parameter></paramdef> - <paramdef>unicode_char <parameter>b</parameter></paramdef> + <paramdef>char32_t <parameter>a</parameter></paramdef> + <paramdef>char32_t <parameter>b</parameter></paramdef> </funcprototype> </funcsynopsis> </refsynopsisdiv> @@ -1027,7 +1046,7 @@ See COPYING for distribution information. <funcsynopsisinfo>#include <courier-unicode.h></funcsynopsisinfo> <funcprototype> <funcdef>unicode_script_t <function>unicode_script</function></funcdef> - <paramdef>unicode_char <parameter>ch</parameter></paramdef> + <paramdef>char32_t <parameter>ch</parameter></paramdef> </funcprototype> </funcsynopsis> </refsynopsisdiv> @@ -1096,13 +1115,13 @@ See COPYING for distribution information. <funcprototype> <funcdef>int <function>unicode_lb_next</function></funcdef> <paramdef>unicode_lb_info_t <parameter>lb</parameter></paramdef> - <paramdef>unicode_char <parameter>c</parameter></paramdef> + <paramdef>char32_t <parameter>c</parameter></paramdef> </funcprototype> <funcprototype> <funcdef>int <function>unicode_lb_next_cnt</function></funcdef> <paramdef>unicode_lb_info_t <parameter>lb</parameter></paramdef> - <paramdef>const unicode_char *<parameter>cptr</parameter></paramdef> + <paramdef>const char32_t *<parameter>cptr</parameter></paramdef> <paramdef>size_t <parameter>cnt</parameter></paramdef> </funcprototype> @@ -1115,7 +1134,7 @@ See COPYING for distribution information. <funcsynopsis> <funcprototype> <funcdef>unicode_lbc_info_t <function>unicode_lbc_init</function></funcdef> - <paramdef>int (*<parameter>cb_func</parameter>)(int, unicode_char, void *)</paramdef> + <paramdef>int (*<parameter>cb_func</parameter>)(int, char32_t, void *)</paramdef> <paramdef>void *<parameter>cb_arg</parameter></paramdef> </funcprototype> @@ -1128,13 +1147,13 @@ See COPYING for distribution information. <funcprototype> <funcdef>int <function>unicode_lbc_next</function></funcdef> <paramdef>unicode_lb_info_t <parameter>lb</parameter></paramdef> - <paramdef>unicode_char <parameter>c</parameter></paramdef> + <paramdef>char32_t <parameter>c</parameter></paramdef> </funcprototype> <funcprototype> <funcdef>int <function>unicode_lbc_next_cnt</function></funcdef> <paramdef>unicode_lb_info_t <parameter>lb</parameter></paramdef> - <paramdef>const unicode_char *<parameter>cptr</parameter></paramdef> + <paramdef>const char32_t *<parameter>cptr</parameter></paramdef> <paramdef>size_t <parameter>cnt</parameter></paramdef> </funcprototype> @@ -1414,13 +1433,13 @@ See COPYING for distribution information. <funcprototype> <funcdef>int <function>unicode_wb_next</function></funcdef> <paramdef>unicode_wb_info_t <parameter>wb</parameter></paramdef> - <paramdef>unicode_char <parameter>c</parameter></paramdef> + <paramdef>char32_t <parameter>c</parameter></paramdef> </funcprototype> <funcprototype> <funcdef>int <function>unicode_wb_next_cnt</function></funcdef> <paramdef>unicode_wb_info_t <parameter>wb</parameter></paramdef> - <paramdef>const unicode_char *<parameter>cptr</parameter></paramdef> + <paramdef>const char32_t *<parameter>cptr</parameter></paramdef> <paramdef>size_t <parameter>cnt</parameter></paramdef> </funcprototype> @@ -1437,7 +1456,7 @@ See COPYING for distribution information. <funcprototype> <funcdef>int <function>unicode_wbscan_next</function></funcdef> <paramdef>unicode_wbscan_info_t <parameter>wbs</parameter></paramdef> - <paramdef>unicode_char <parameter>c</parameter></paramdef> + <paramdef>char32_t <parameter>c</parameter></paramdef> </funcprototype> <funcprototype> @@ -1616,20 +1635,20 @@ See COPYING for distribution information. <funcsynopsis> <funcsynopsisinfo>#include <courier-unicode.h></funcsynopsisinfo> <funcprototype> - <funcdef>unicode_char <function>unicode_uc</function></funcdef> - <paramdef>unicode_char <parameter>c</parameter></paramdef> + <funcdef>char32_t <function>unicode_uc</function></funcdef> + <paramdef>char32_t <parameter>c</parameter></paramdef> </funcprototype> </funcsynopsis> <funcsynopsis> <funcprototype> - <funcdef>unicode_char <function>unicode_lc</function></funcdef> - <paramdef>unicode_char <parameter>c</parameter></paramdef> + <funcdef>char32_t <function>unicode_lc</function></funcdef> + <paramdef>char32_t <parameter>c</parameter></paramdef> </funcprototype> </funcsynopsis> <funcsynopsis> <funcprototype> - <funcdef>unicode_char <function>unicode_tc</function></funcdef> - <paramdef>unicode_char <parameter>c</parameter></paramdef> + <funcdef>char32_t <function>unicode_tc</function></funcdef> + <paramdef>char32_t <parameter>c</parameter></paramdef> </funcprototype> </funcsynopsis> <funcsynopsis> @@ -1637,8 +1656,8 @@ See COPYING for distribution information. <funcdef>char *<function>unicode_convert_tocase</function></funcdef> <paramdef>const char *<parameter>str</parameter></paramdef> <paramdef>const char *<parameter>charset</parameter></paramdef> - <paramdef>unicode_char (*<parameter>first_char_func</parameter>)(uncode_char)</paramdef> - <paramdef>unicode_char (*<parameter>char_func</parameter>)(uncode_char)</paramdef> + <paramdef>char32_t (*<parameter>first_char_func</parameter>)(uncode_char)</paramdef> + <paramdef>char32_t (*<parameter>char_func</parameter>)(uncode_char)</paramdef> </funcprototype> </funcsynopsis> </refsynopsisdiv> @@ -1754,13 +1773,13 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo> <funcprototype> <funcdef>std::string <function>unicode::iconvert::convert</function></funcdef> - <paramdef>const std::vector<unicode_char> &<parameter>text</parameter></paramdef> + <paramdef>const std::vector<char32_t> &<parameter>text</parameter></paramdef> <paramdef>const std::string &<parameter>dstcharset</parameter></paramdef> </funcprototype> <funcprototype> <funcdef>std::string <function>unicode::iconvert::convert</function></funcdef> - <paramdef>const std::vector<unicode_char> &<parameter>text</parameter></paramdef> + <paramdef>const std::vector<char32_t> &<parameter>text</parameter></paramdef> <paramdef>const std::string &<parameter>dstcharset</parameter></paramdef> <paramdef>bool &<parameter>errflag</parameter></paramdef> </funcprototype> @@ -1769,7 +1788,7 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo> <funcdef>bool <function>unicode::iconvert::convert</function></funcdef> <paramdef>const std::string &<parameter>text</parameter></paramdef> <paramdef>const std::string &<parameter>charset</parameter></paramdef> - <paramdef>std::vector<unicode_char> &<parameter>text</parameter></paramdef> + <paramdef>std::vector<char32_t> &<parameter>text</parameter></paramdef> </funcprototype> </funcsynopsis> </refsynopsisdiv> @@ -1875,8 +1894,8 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo> <funcdef>std::string <function>unicode::iconvert::convert_tocase</function></funcdef> <paramdef>const std::string &<parameter>text</parameter></paramdef> <paramdef>const std::string &<parameter>charset</parameter></paramdef> - <paramdef>unicode_char (*<parameter>first_char_func</parameter>)(unicode_char)</paramdef> - <paramdef>unicode_char (*<parameter>char_func</parameter>)(unicode_char)</paramdef> + <paramdef>char32_t (*<parameter>first_char_func</parameter>)(char32_t)</paramdef> + <paramdef>char32_t (*<parameter>char_func</parameter>)(char32_t)</paramdef> </funcprototype> <funcprototype> @@ -1884,8 +1903,8 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo> <paramdef>const std::string &<parameter>text</parameter></paramdef> <paramdef>const std::string &<parameter>charset</parameter></paramdef> <paramdef>bool &<parameter>err</parameter></paramdef> - <paramdef>unicode_char (*<parameter>first_char_func</parameter>)(unicode_char)</paramdef> - <paramdef>unicode_char (*<parameter>char_func</parameter>)(unicode_char)</paramdef> + <paramdef>char32_t (*<parameter>first_char_func</parameter>)(char32_t)</paramdef> + <paramdef>char32_t (*<parameter>char_func</parameter>)(char32_t)</paramdef> </funcprototype> </funcsynopsis> </refsynopsisdiv> @@ -1981,7 +2000,7 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo> <funcprototype> <funcdef>std::pair<std::string, bool> <function>unicode::iconvert::fromu::convert</function></funcdef> - <paramdef>const std::vector<unicode_char> &<parameter>text</parameter></paramdef> + <paramdef>const std::u32string &<parameter>text</parameter></paramdef> <paramdef>const std::string &<parameter>charset</parameter></paramdef> </funcprototype> </funcsynopsis> @@ -1995,7 +2014,7 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo> text in the given character set. <parameter>beg_iter</parameter> and <parameter>end_iter</parameter> define an input sequence of - <classname>unicode_char</classname>s. + <classname>char32_t</classname>s. They get converted to unicode characters. <parameter>output_iter</parameter> is an output iterator that <function>convert</function>() @@ -2013,7 +2032,7 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo> into a <classname>std::string</classname>, instead of using an output iterator. Finally, a single - <classname>std::vector<unicode_char></classname> + <classname>std::u32string</classname> specifies the character string, instead of a beginning and an ending iterator. </para> @@ -2072,11 +2091,11 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo> <paramdef>input_iter_t <parameter>beg_iter</parameter></paramdef> <paramdef>input_iter_t <parameter>end_iter</parameter></paramdef> <paramdef>const std::string &<parameter>charset</parameter></paramdef> - <paramdef>std::vector<unicode_char> &<parameter>out_buf</parameter></paramdef> + <paramdef>std::u32string &<parameter>out_buf</parameter></paramdef> </funcprototype> <funcprototype> - <funcdef>std::pair<std::vector<unicode_char>, bool> <function>convert</function></funcdef> + <funcdef>std::pair<std::u32string, bool> <function>convert</function></funcdef> <paramdef>const std::string &<parameter>text</parameter></paramdef> <paramdef>const std::string &<parameter>charset</parameter></paramdef> </funcprototype> @@ -2095,7 +2114,7 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo> character set. They get converted to unicode characters. <parameter>output_iter</parameter> is an output iterator that <function>convert</function>() - iterates over <classname>unicode_char</classname>s. + iterates over <classname>char32_t</classname>s. <function>convert</function>() returns the value of the output iterator after iterating over the converted character sequence. <parameter>errflag</parameter>, passed by reference, gets set to @@ -2108,7 +2127,7 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo> <para> An overloaded <function>convert</function>() puts the unicode character sequence into a vector of - <classname>unicode_char</classname>s, instead of an output + <classname>char32_t</classname>s, instead of an output sequence, and returned the error flag. Finally, a single <classname>std::string</classname> specifies the character string, instead of a beginning and an @@ -2173,8 +2192,8 @@ public: } }; -unicode_char c; -std::vector<unicode_char> buf; +char32_t c; +std::u32string buf; linebreak compute_linebreak; @@ -2198,7 +2217,7 @@ public: using unicode::linebreak_callback_base::operator<<; using unicode::linebreak_callback_base::operator(); - int callback(int linebreak_code, unicode_char ch) + int callback(int linebreak_code, char32_t ch) { // ... } @@ -2206,9 +2225,9 @@ public: // ... -std::vector<unicode_char> buf; +std::u32string buf; -typedef unicode::linebreak_iter<std::vector<unicode_char>::const_iterator> iter_t; +typedef unicode::linebreak_iter<std::u32string::const_iterator> iter_t; iter_t beg_iter(buf.begin(), buf.end()), end_iter; @@ -2220,13 +2239,13 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator<std::vector<int> // ... -typedef unicode::linebreakc_iter<std::vector<unicode_char>::const_iterator> iter_t; +typedef unicode::linebreakc_iter<std::u32string::const_iterator> iter_t; iter_t beg_iter(buf.begin(), buf.end()), end_iter; beg_iter.set_opts(UNICODE_LB_OPT_SYBREAK); -std::vector<std::pair<int, unicode_char>> linebreaks; +std::vector<std::pair<int, char32_t>> linebreaks; std::copy(beg_iter, end_iter, std::back_insert_iterator<std::vector<int>>(linebreaks));</programlisting> </refsynopsisdiv> @@ -2301,13 +2320,13 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator<std::vector<int> The template parameter is an input iterator over <classname>unicode</classname> chars. The constructor's parameters are a beginning and an ending iterator value for a sequence of - <classname>unicode_char</classname>. This constructs the beginning + <classname>char32_t</classname>. This constructs the beginning iterator value for a sequence of <classname>int</classname>s consisting of line-break values (<literal>UNICODE_LB_MANDATORY</literal>, <literal>UNICODE_LB_NONE</literal>, or <literal>UNICODE_LB_ALLOWED</literal>) corresponding to each - <classname>unicode_char</classname> in the underlying sequence. + <classname>char32_t</classname> in the underlying sequence. The default constructor creates the ending iterator value for the sequence. </para> @@ -2321,7 +2340,7 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator<std::vector<int> The <classname>linebreakc_iter</classname> template implements a similar input iterator, with the difference that it ends up iterating over a <classname>std::pair</classname> of line-breaking values and - the corresponding <classname>unicode_char</classname> from the + the corresponding <classname>char32_t</classname> from the underlying input sequence. </para> </refsect1> @@ -2375,8 +2394,8 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator<std::vector<int> </funcprototype> <funcprototype> - <funcdef>std::vector<unicode_char> <function>unicode::tolower</function></funcdef> - <paramdef>const std::vector<unicode_char> &<parameter>u</parameter></paramdef> + <funcdef>std::u32string <function>unicode::tolower</function></funcdef> + <paramdef>const std::u32string &<parameter>u</parameter></paramdef> </funcprototype> <funcprototype> @@ -2391,8 +2410,8 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator<std::vector<int> </funcprototype> <funcprototype> - <funcdef>std::vector<unicode_char> <function>unicode::toupper</function></funcdef> - <paramdef>const std::vector<unicode_char> &<parameter>u</parameter></paramdef> + <funcdef>std::u32string <function>unicode::toupper</function></funcdef> + <paramdef>const std::u32string &<parameter>u</parameter></paramdef> </funcprototype> </funcsynopsis> </refsynopsisdiv> @@ -2419,7 +2438,7 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator<std::vector<int> <para> Passing a - <classname>const std::vector<unicode_char> &</classname> + <classname>const std::u32string &</classname> directly also converts it accordingly, returning the converted unicode string. </para> @@ -2477,8 +2496,8 @@ public: } }; -unicode_char c; -std::vector<unicode_char> buf; +char32_t c; +std::u32string buf; wordbreak compute_wordbreak; diff --git a/unicode/configure.ac b/unicode/configure.ac index 079f461..7d71cf8 100644 --- a/unicode/configure.ac +++ b/unicode/configure.ac @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT([courier-unicode], [1.5], [courier-users@lists.sourceforge.net]) +AC_INIT([courier-unicode], [1.5.20170306], [courier-users@lists.sourceforge.net]) >confdefs.h # Kill PACKAGE_ macros @@ -54,6 +54,21 @@ else AC_SUBST(LANGINFO_L,0) fi + +AC_TRY_COMPILE([ +#include <uchar.h> +],[ +char32_t c=0; +], +[ +HAVE_UCHAR_H=1 +], +[ +HAVE_UCHAR_H=0 +]) + +AC_SUBST(HAVE_UCHAR_H) + AM_CONDITIONAL(UPDATE_UNICODE, test -f ${srcdir}/UnicodeData.txt) AC_SYS_LARGEFILE diff --git a/unicode/courier-unicode.h.in b/unicode/courier-unicode.h.in index 9b58f5c..ac12d25 100644 --- a/unicode/courier-unicode.h.in +++ b/unicode/courier-unicode.h.in @@ -2,7 +2,7 @@ #define courier_unicode_h /* -** Copyright 2000-2015 Double Precision, Inc. +** Copyright 2000-2017 Double Precision, Inc. ** See COPYING for distribution information. ** */ @@ -26,7 +26,19 @@ extern "C" { #include <sys/types.h> #include <locale.h> -typedef uint32_t unicode_char; +#ifdef __cplusplus + +#else + +#if @HAVE_UCHAR_H@ + +#include <uchar.h> + +#else + +typedef uint32_t char32_t; +#endif +#endif /* ** The system default character set, from the locale. @@ -46,9 +58,9 @@ extern const char *unicode_locale_chset_l(locale_t l); /* Unicode upper/lower/title case conversion functions */ -extern unicode_char unicode_uc(unicode_char); -extern unicode_char unicode_lc(unicode_char); -extern unicode_char unicode_tc(unicode_char); +extern char32_t unicode_uc(char32_t); +extern char32_t unicode_lc(char32_t); +extern char32_t unicode_tc(char32_t); /* ** Look up HTML 4.0/XHTML entity. @@ -58,7 +70,7 @@ extern unicode_char unicode_tc(unicode_char); ** Returns the unicode entity value, or 0 if no such entity is defined. */ -unicode_char unicode_html40ent_lookup(const char *n); +char32_t unicode_html40ent_lookup(const char *n); /* ** @@ -75,19 +87,19 @@ unicode_char unicode_html40ent_lookup(const char *n); ** shown on a text console. */ -extern int unicode_wcwidth(unicode_char c); -extern size_t unicode_wcwidth_str(const unicode_char *c); +extern int unicode_wcwidth(char32_t c); +extern size_t unicode_wcwidth_str(const char32_t *c); /* Internal unicode table lookup functions */ -extern uint8_t unicode_tab_lookup(unicode_char ch, +extern uint8_t unicode_tab_lookup(char32_t ch, const size_t *unicode_indextab, size_t unicode_indextab_sizeof, const uint8_t (*unicode_rangetab)[2], const uint8_t *unicode_classtab, uint8_t uclass); -extern uint32_t unicode_tab32_lookup(unicode_char ch, +extern uint32_t unicode_tab32_lookup(char32_t ch, const size_t *unicode_indextab, size_t unicode_indextab_sizeof, const uint8_t (*unicode_rangetab)[2], @@ -108,63 +120,63 @@ extern uint32_t unicode_tab32_lookup(unicode_char ch, #include <courier-unicode-categories-tab.h> -uint32_t unicode_category_lookup(unicode_char); +uint32_t unicode_category_lookup(char32_t); /* ** Return non-0 for TAB, and all UNICODE_CATEGORY_2_SPACE. */ -extern int unicode_isblank(unicode_char ch); +extern int unicode_isblank(char32_t ch); /* ** The unicode-ish isspace(). In addition to return non-0 for ** unicode_isblank(), this also returns non-0 for unicode characters ** with linebreaking properties of BK, CR, LF, NL, and SP. */ -extern int unicode_isspace(unicode_char ch); +extern int unicode_isspace(char32_t ch); /* ** Return non-0 for all UNICODE_CATEGORY_1_LETTER */ -extern int unicode_isalpha(unicode_char ch); +extern int unicode_isalpha(char32_t ch); /* ** Return non-0 for all UNICODE_CATEGORY_1_NUMBER | UNICODE_CATEGORY_2_DIGIT, ** only (no third categories). */ -extern int unicode_isdigit(unicode_char ch); +extern int unicode_isdigit(char32_t ch); /* ** Return non-0 for all unicode_isalpha() or unicode_isdigit(). */ -extern int unicode_isalnum(unicode_char ch); +extern int unicode_isalnum(char32_t ch); /* ** Returns non-0 for all codepoints above SPACE which are not ** unicode_isspace(). */ -extern int unicode_isgraph(unicode_char ch); +extern int unicode_isgraph(char32_t ch); /* ** Return non-0 for all UNICODE_CATEGORY_1_PUNCTUATION. */ -extern int unicode_ispunct(unicode_char ch); +extern int unicode_ispunct(char32_t ch); /* ** Return non-0 for all unicode_isalpha() for which the character is ** equal to unicode_lc() of itself. */ -extern int unicode_islower(unicode_char ch); +extern int unicode_islower(char32_t ch); /* ** Return non-0 for all unicode_isalpha() for which the character is ** equal to unicode_uc() of itself. */ -extern int unicode_isupper(unicode_char ch); +extern int unicode_isupper(char32_t ch); /* ** Implementation of grapheme cluster boundary rules, as per @@ -175,7 +187,7 @@ extern int unicode_isupper(unicode_char ch); ** characters. */ -int unicode_grapheme_break(unicode_char a, unicode_char b); +int unicode_grapheme_break(char32_t a, char32_t b); typedef enum { @@ -188,7 +200,7 @@ typedef enum { ** http://www.unicode.org/reports/tr24/tr24-24.html */ -unicode_script_t unicode_script(unicode_char a); +unicode_script_t unicode_script(char32_t a); /* ** Implementation of line break rules, as per @@ -251,7 +263,7 @@ extern unicode_lb_info_t unicode_lb_init(int (*cb_func)(int, void *), ** it returned 0. */ -extern int unicode_lb_next(unicode_lb_info_t i, unicode_char ch); +extern int unicode_lb_next(unicode_lb_info_t i, char32_t ch); /* ** Convenience function that invokes unicode_lb_next() with a list of @@ -260,7 +272,7 @@ extern int unicode_lb_next(unicode_lb_info_t i, unicode_char ch); */ extern int unicode_lb_next_cnt(unicode_lb_info_t i, - const unicode_char *chars, + const char32_t *chars, size_t cnt); /* @@ -292,12 +304,12 @@ struct unicode_lbc_info; typedef struct unicode_lbc_info *unicode_lbc_info_t; -extern unicode_lbc_info_t unicode_lbc_init(int (*cb_func)(int, unicode_char, +extern unicode_lbc_info_t unicode_lbc_init(int (*cb_func)(int, char32_t, void *), void *cb_arg); -extern int unicode_lbc_next(unicode_lbc_info_t i, unicode_char ch); +extern int unicode_lbc_next(unicode_lbc_info_t i, char32_t ch); extern int unicode_lbc_next_cnt(unicode_lbc_info_t i, - const unicode_char *chars, + const char32_t *chars, size_t cnt); extern int unicode_lbc_end(unicode_lbc_info_t i); @@ -399,7 +411,7 @@ extern unicode_wb_info_t unicode_wb_init(int (*cb_func)(int, void *), ** it returned 0. */ -extern int unicode_wb_next(unicode_wb_info_t i, unicode_char ch); +extern int unicode_wb_next(unicode_wb_info_t i, char32_t ch); /* ** Convenience function that invokes unicode_wb_next() with a list of @@ -408,7 +420,7 @@ extern int unicode_wb_next(unicode_wb_info_t i, unicode_char ch); */ extern int unicode_wb_next_cnt(unicode_wb_info_t i, - const unicode_char *chars, + const char32_t *chars, size_t cnt); /* @@ -448,7 +460,7 @@ typedef struct unicode_wbscan_info *unicode_wbscan_info_t; unicode_wbscan_info_t unicode_wbscan_init(); -int unicode_wbscan_next(unicode_wbscan_info_t i, unicode_char ch); +int unicode_wbscan_next(unicode_wbscan_info_t i, char32_t ch); size_t unicode_wbscan_end(unicode_wbscan_info_t i); @@ -457,7 +469,7 @@ size_t unicode_wbscan_end(unicode_wbscan_info_t i); */ struct unicode_buf { - unicode_char *ptr; /* The unicode characters */ + char32_t *ptr; /* The unicode characters */ size_t size, /* Buffer size */ len, /* How many characters in ptr are initialized */ max; /* Maximum size the buffer can grow to */ @@ -519,7 +531,7 @@ void unicode_buf_deinit(struct unicode_buf *p); */ int unicode_buf_append(struct unicode_buf *p, /* The buffer */ - const unicode_char *uc, /* Characters to append */ + const char32_t *uc, /* Characters to append */ size_t l); /* How many of them */ /* @@ -681,12 +693,12 @@ unicode_convert_tocbuf_init(/* Convert from this chset */ /* -** Specialization: convert some character text to a unicode_char array. +** Specialization: convert some character text to a char32_t array. ** -** This is like unicode_convert_tocbuf_init(), but converts to a unicode_char +** This is like unicode_convert_tocbuf_init(), but converts to a char32_t ** array. ** -** The returned *ucsize_ret is initialized with the number of unicode_chars, +** The returned *ucsize_ret is initialized with the number of char32_ts, ** rather than the byte count. ** ** In all other ways, this function behaves identically to @@ -698,7 +710,7 @@ unicode_convert_tou_init(/* Convert from this chset */ const char *src_chset, /* malloc()ed buffer pointer, on exit. */ - unicode_char **ucptr_ret, + char32_t **ucptr_ret, /* size of the malloc()ed buffer, upon exit */ size_t *ucsize_ret, @@ -708,7 +720,7 @@ unicode_convert_tou_init(/* Convert from this chset */ ); /* -** Specialization: convert a unicode_char array to some character text. +** Specialization: convert a char32_t array to some character text. ** ** This is the opposite of unicode_convert_tou_init(). Call this to ** initialize the conversion handle, then use unicode_convert_uc() @@ -733,7 +745,7 @@ int unicode_convert_uc(/* The conversion handle */ unicode_convert_handle_t handle, /* Text to convert */ - const unicode_char *text, + const char32_t *text, /* Number of bytes to convert */ size_t cnt); @@ -858,7 +870,7 @@ int unicode_convert_tou_tobuf(/* Character text to convert */ ** If this function returns 0, this gets ** initialized */ - unicode_char **uc, + char32_t **uc, /* ** Size of the allocated buffer @@ -884,7 +896,7 @@ int unicode_convert_tou_tobuf(/* Character text to convert */ */ int unicode_convert_fromu_tobuf(/* Unicode array to convert to a char str */ - const unicode_char *utext, + const char32_t *utext, /* ** Size of the unicode array. @@ -944,22 +956,22 @@ char *unicode_convert_tocase( /* String to convert */ ** str: unicode_uc, unicode_lc, or unicode_tc: */ - unicode_char (*first_char_func)(unicode_char), + char32_t (*first_char_func)(char32_t), /* ** Conversion of the second and the remaining ** character in str. If NULL, same as ** first_char_func. */ - unicode_char (*char_func)(unicode_char)); + char32_t (*char_func)(char32_t)); -/* Either UCS-4BE or UCS-4LE, matching the native unicode_char endianness */ +/* Either UCS-4BE or UCS-4LE, matching the native char32_t endianness */ extern const char unicode_u_ucs4_native[]; -/* Either UCS-2BE or UCS-2LE, matching the native unicode_char endianness */ +/* Either UCS-2BE or UCS-2LE, matching the native char32_t endianness */ extern const char unicode_u_ucs2_native[]; @@ -980,7 +992,7 @@ extern const char unicode_u_ucs2_native[]; #ifdef __cplusplus } -extern size_t unicode_wcwidth(const std::vector<unicode_char> &uc); +extern size_t unicode_wcwidth(const std::u32string &uc); namespace unicode { @@ -1025,7 +1037,7 @@ class iconvert { bool operator()(const char *, size_t); - bool operator()(const unicode_char *, size_t); + bool operator()(const char32_t *, size_t); /* ** Get the results here. If the subclass returns a non-0 @@ -1074,13 +1086,13 @@ class iconvert { /* Convert from unicode to a charset */ - static std::string convert(const std::vector<unicode_char> &uc, + static std::string convert(const std::u32string &uc, const std::string &dstcharset, bool &errflag); /* Convert from unicode to a charset */ - static std::string convert(const std::vector<unicode_char> &uc, + static std::string convert(const std::u32string &uc, const std::string &dstcharset) { bool dummy; @@ -1092,7 +1104,7 @@ class iconvert { static bool convert(const std::string &text, const std::string &charset, - std::vector<unicode_char> &uc); + std::u32string &uc); /* Convert to upper/lower/title case */ @@ -1105,10 +1117,10 @@ class iconvert { const std::string &charset, /* First character: unicode_uc, unicode_lc, or unicode_tc */ - unicode_char (*first_char_func)(unicode_char), + char32_t (*first_char_func)(char32_t), /* If not NULL, second and subsequent chars */ - unicode_char (*char_func)(unicode_char) + char32_t (*char_func)(char32_t) =NULL) { bool dummy; @@ -1131,10 +1143,10 @@ class iconvert { bool &err, /* First character: unicode_uc, unicode_lc, or unicode_tc */ - unicode_char (*first_char_func)(unicode_char), + char32_t (*first_char_func)(char32_t), /* If not NULL, second and subsequent chars */ - unicode_char (*char_func)(unicode_char) + char32_t (*char_func)(char32_t) =NULL); private: bool end(bool *); @@ -1144,14 +1156,14 @@ class iconvert { class fromu; }; -/* Convert output of iconvert to unicode_chars. */ +/* Convert output of iconvert to char32_ts. */ class iconvert::tou : public iconvert { public: bool begin(const std::string &chset); - virtual int converted(const unicode_char *, size_t); + virtual int converted(const char32_t *, size_t); using iconvert::operator(); private: @@ -1172,12 +1184,12 @@ class iconvert::tou : public iconvert { static bool convert(input_iter_t from_iter, input_iter_t to_iter, const std::string &chset, - std::vector<unicode_char> &out_buf) + std::u32string &out_buf) { bool flag; out_buf.clear(); - std::back_insert_iterator<std::vector<unicode_char> > + std::back_insert_iterator<std::u32string > insert_iter(out_buf); convert(from_iter, to_iter, chset, flag, insert_iter); @@ -1185,7 +1197,7 @@ class iconvert::tou : public iconvert { return flag; } - static std::pair<std::vector<unicode_char>, bool> + static std::pair<std::u32string, bool> convert(const std::string &str, const std::string &chset); }; @@ -1206,7 +1218,7 @@ class iconvert::tou::to_iter_class : public iconvert::tou { operator iter_t() const { return iter; } private: - int converted(const unicode_char *ptr, size_t cnt) + int converted(const char32_t *ptr, size_t cnt) { while (cnt) { @@ -1253,7 +1265,7 @@ template<typename input_iter_t, return out; } -/* Convert output of iconvert from unicode_chars. */ +/* Convert output of iconvert from char32_ts. */ class iconvert::fromu : public iconvert { @@ -1288,7 +1300,7 @@ class iconvert::fromu : public iconvert { } static std::pair<std::string, bool> - convert(const std::vector<unicode_char> &ubuf, + convert(const std::u32string &ubuf, const std::string &chset); }; @@ -1337,7 +1349,7 @@ template<typename input_iter_t, if (!out.begin(chset)) return out; - std::vector<unicode_char> string; + std::u32string string; while (from_iter != to_iter) { @@ -1362,14 +1374,14 @@ template<typename input_iter_t, */ extern "C" int linebreak_trampoline(int value, void *ptr); -extern "C" int linebreakc_trampoline(int value, unicode_char ch, +extern "C" int linebreakc_trampoline(int value, char32_t ch, void *ptr); /* ** Subclass linebreak_callback_base, implement operator()(int). ** ** Use operator<< or operator()(iterator, iterator) to feed -** unicode_chars into the linebreaking algorithm. The subclass receives +** char32_ts into the linebreaking algorithm. The subclass receives ** UNICODE_LB values, as they become available. */ @@ -1403,7 +1415,7 @@ class linebreak_callback_base { friend int linebreak_trampoline(int, void *); - linebreak_callback_base &operator<<(unicode_char uc); + linebreak_callback_base &operator<<(char32_t uc); template<typename iter_type> linebreak_callback_base &operator()(iter_type beg_iter, @@ -1438,7 +1450,7 @@ class linebreak_callback_save_buf : public linebreak_callback_base { }; /* -** Convert an input iterator sequence over unicode_chars into +** Convert an input iterator sequence over char32_ts into ** an input iterator sequence over linebreak values. */ @@ -1590,9 +1602,9 @@ class linebreakc_callback_base { void set_opts(int opts); - friend int linebreakc_trampoline(int, unicode_char, void *); + friend int linebreakc_trampoline(int, char32_t, void *); - linebreakc_callback_base &operator<<(unicode_char uc); + linebreakc_callback_base &operator<<(char32_t uc); template<typename iter_type> linebreakc_callback_base &operator()(iter_type beg_iter, @@ -1604,19 +1616,19 @@ class linebreakc_callback_base { } linebreakc_callback_base &operator<<(const - std::vector<unicode_char> + std::u32string &vec) { return operator()(vec.begin(), vec.end()); } private: - virtual int callback(int, unicode_char); + virtual int callback(int, char32_t); }; class linebreakc_callback_save_buf : public linebreakc_callback_base { public: - std::list<std::pair<int, unicode_char> > lb_buf; + std::list<std::pair<int, char32_t> > lb_buf; linebreakc_callback_save_buf(); ~linebreakc_callback_save_buf(); @@ -1624,20 +1636,20 @@ class linebreakc_callback_save_buf : public linebreakc_callback_base { using linebreakc_callback_base::operator<<; using linebreakc_callback_base::operator(); private: - int callback(int, unicode_char); + int callback(int, char32_t); }; /* -** Convert an input iterator sequence over unicode_chars into -** an input iterator sequence over std::pair<int, unicode_char>, +** Convert an input iterator sequence over char32_ts into +** an input iterator sequence over std::pair<int, char32_t>, ** the original unicode character, and the linebreaking value before ** the character. */ template<typename input_t> class linebreakc_iter : public std::iterator<std::input_iterator_tag, - std::pair<int, unicode_char>, void> + std::pair<int, char32_t>, void> { mutable input_t iter_value, end_iter_value; @@ -1723,7 +1735,7 @@ template<typename input_t> class linebreakc_iter fill(); return buf == NULL ? std::make_pair(UNICODE_LB_MANDATORY, - (unicode_char)0): + (char32_t)0): buf->lb_buf.front(); } @@ -1748,7 +1760,7 @@ template<typename input_t> class linebreakc_iter ** Subclass wordbreak_callback_base, implement operator()(int). ** ** Use operator<< or operator()(iterator, iterator) to feed -** unicode_chars into the wordbreaking algorithm. The subclass receives +** char32_ts into the wordbreaking algorithm. The subclass receives ** word flags, as they become available. */ @@ -1782,7 +1794,7 @@ class wordbreak_callback_base { friend int wordbreak_trampoline(int, void *); - wordbreak_callback_base &operator<<(unicode_char uc); + wordbreak_callback_base &operator<<(char32_t uc); template<typename iter_type> wordbreak_callback_base &operator()(iter_type beg_iter, @@ -1794,7 +1806,7 @@ class wordbreak_callback_base { } wordbreak_callback_base &operator<<(const - std::vector<unicode_char> + std::u32string &vec) { return operator()(vec.begin(), vec.end()); @@ -1828,7 +1840,7 @@ class wordbreakscan { wordbreakscan(); ~wordbreakscan(); - bool operator<<(unicode_char uc); + bool operator<<(char32_t uc); size_t finish(); }; @@ -1853,11 +1865,11 @@ std::string toupper(const std::string &string, //! Convert unicode to lowercase -std::vector<unicode_char> tolower(const std::vector<unicode_char> &u); +std::u32string tolower(const std::u32string &u); //! Convert unicode to uppercase -std::vector<unicode_char> toupper(const std::vector<unicode_char> &u); +std::u32string toupper(const std::u32string &u); #if 0 { diff --git a/unicode/eastasianwidth.h b/unicode/eastasianwidth.h index 03eb91e..456b04b 100644 --- a/unicode/eastasianwidth.h +++ b/unicode/eastasianwidth.h @@ -1,4 +1,4 @@ -static const unicode_char unicode_wcwidth_tab[][2]={ +static const char32_t unicode_wcwidth_tab[][2]={ {0x1100, 0x115f}, {0x2329, 0x232a}, {0x2e80, 0x2e99}, diff --git a/unicode/enttest.c b/unicode/enttest.c index aa9f208..8db070a 100644 --- a/unicode/enttest.c +++ b/unicode/enttest.c @@ -8,7 +8,7 @@ struct i { size_t n_start; size_t n_size; - unicode_char v; + char32_t v; }; #include "unicode_htmlent.h" diff --git a/unicode/linebreaktab_internal.h b/unicode/linebreaktab_internal.h index 2f6c165..56beed0 100644 --- a/unicode/linebreaktab_internal.h +++ b/unicode/linebreaktab_internal.h @@ -46,6 +46,6 @@ #define UNICODE_LB_RI 0x49 #define UNICODE_LB_SA 0x4A -extern int unicode_lb_lookup(unicode_char ch); +extern int unicode_lb_lookup(char32_t ch); #endif diff --git a/unicode/linebreaktest.C b/unicode/linebreaktest.C index 46bbfee..effd7f4 100644 --- a/unicode/linebreaktest.C +++ b/unicode/linebreaktest.C @@ -59,7 +59,7 @@ static void testsuite() words.push_back(std::string(p, b)); } - std::vector<unicode_char> ubuf; + std::u32string ubuf; std::vector<int> status; while (1) @@ -90,7 +90,7 @@ static void testsuite() std::istringstream i(words.front()); - unicode_char uc; + uint32_t uc; i >> std::hex >> uc; @@ -110,7 +110,7 @@ static void testsuite() std::vector<int> computed_status; - typedef std::vector<unicode_char>::const_iterator ubuf_iter; + typedef std::u32string::const_iterator ubuf_iter; typedef unicode::linebreak_iter<ubuf_iter> lb_iter; std::copy(lb_iter(ubuf.begin(), ubuf.end()), lb_iter(), @@ -138,18 +138,18 @@ static void testsuite() static void testlinebreakc() { - static unicode_char str[]={'$', '(', 0x0300, 0x0301, 0x0302, 0x0303, + static char32_t str[]={'$', '(', 0x0300, 0x0301, 0x0302, 0x0303, 0x0304, 0x0305, 0x0306, 0x0307, '1', '.', '2', ' ', 'A'}; - typedef std::vector<std::pair<int, unicode_char> > linebreakvec_t; + typedef std::vector<std::pair<int, char32_t> > linebreakvec_t; linebreakvec_t linebreakvec; - std::copy(unicode::linebreakc_iter<unicode_char *>(str, + std::copy(unicode::linebreakc_iter<char32_t *>(str, str + sizeof(str) /sizeof(str[0])), - unicode::linebreakc_iter<unicode_char *>(), + unicode::linebreakc_iter<char32_t *>(), std::back_insert_iterator<linebreakvec_t> (linebreakvec)); @@ -179,7 +179,7 @@ int main(int argc, char **argv) std::string convteststr="0000000000000000000000000000000\xe3\x82\xa2"; - std::pair<std::vector<unicode_char>, bool> uc; + std::pair<std::u32string, bool> uc; uc=unicode::iconvert::tou::convert(convteststr, "utf-8"); @@ -189,11 +189,11 @@ int main(int argc, char **argv) exit(1); } - std::vector<unicode_char>::iterator e(uc.first.end()), + std::u32string::iterator e(uc.first.end()), b(std::find_if(uc.first.begin(), e, - std::not1(std::bind2nd(std::equal_to<unicode_char> + std::not1(std::bind2nd(std::equal_to<char32_t> (), - unicode_char('0'))))); + char32_t('0'))))); if (b == e || *b++ != 0x30A2 || b != e) { diff --git a/unicode/mkeastasianwidth.pl b/unicode/mkeastasianwidth.pl index 0ddf800..d34f064 100644 --- a/unicode/mkeastasianwidth.pl +++ b/unicode/mkeastasianwidth.pl @@ -9,7 +9,7 @@ my $fh=new IO::File "<EastAsianWidth.txt"; my $pb=-1; my $pe=-1; -print "static const unicode_char unicode_wcwidth_tab[][2]={\n"; +print "static const char32_t unicode_wcwidth_tab[][2]={\n"; sub full($$) { my $b=hex(shift); diff --git a/unicode/mkultcase.pl b/unicode/mkultcase.pl index 2a2632a..93a08d1 100644 --- a/unicode/mkultcase.pl +++ b/unicode/mkultcase.pl @@ -75,7 +75,7 @@ print "const unsigned unicode_case_hash=$tabsize;\n"; print "/* unicode_case_maxbucket=" . ($maxcnt+2) . "*/\n"; -print "const unicode_char unicode_case_tab[][4]={\n"; +print "const char32_t unicode_case_tab[][4]={\n"; my $idx=0; diff --git a/unicode/unicode.c b/unicode/unicode.c index 462ca2b..71e6439 100644 --- a/unicode/unicode.c +++ b/unicode/unicode.c @@ -1300,15 +1300,15 @@ char *unicode_convert_tobuf(const char *text, /*****************************************************************************/ /* -** Convert text to unicode_chars. Same basic approach as +** Convert text to char32_ts. Same basic approach as ** unicode_convert_tocbuf_init(). The output character set gets specified ** as UCS-4, the final output size is divided by 4, and the output buffer gets -** typed as a unicode_char array. +** typed as a char32_t array. */ struct unicode_convert_buf { struct unicode_convert_buf *next; - unicode_char *fragment; + char32_t *fragment; size_t fragment_size; size_t max_fragment_size; }; @@ -1316,7 +1316,7 @@ struct unicode_convert_buf { struct unicode_convert_tou { struct unicode_convert_hdr hdr; - unicode_char **ucptr_ret; + char32_t **ucptr_ret; size_t *ucsize_ret; int errflag; size_t tot_size; @@ -1332,7 +1332,7 @@ static int deinit_tounicode(void *ptr, int *errptr); unicode_convert_handle_t unicode_convert_tou_init(const char *src_chset, - unicode_char **ucptr_ret, + char32_t **ucptr_ret, size_t *ucsize_ret, int nullterminate ) @@ -1381,7 +1381,7 @@ unicode_convert_fromu_init(const char *dst_chset, } int unicode_convert_uc(unicode_convert_handle_t handle, - const unicode_char *text, + const char32_t *text, size_t cnt) { return unicode_convert(handle, (const char *)text, @@ -1397,9 +1397,9 @@ static int save_unicode(const char *text, size_t cnt, void *ptr) struct unicode_convert_buf *fragment; size_t tot_size; - cnt /= sizeof(unicode_char); + cnt /= sizeof(char32_t); - tot_size=p->tot_size + cnt*sizeof(unicode_char); + tot_size=p->tot_size + cnt*sizeof(char32_t); /* Keep track of the total size saved */ if (p->tail) @@ -1412,10 +1412,10 @@ static int save_unicode(const char *text, size_t cnt, void *ptr) if (n) { memcpy(p->tail->fragment+p->tail->fragment_size, - text, n*sizeof(unicode_char)); + text, n*sizeof(char32_t)); cnt -= n; - text += n*sizeof(unicode_char); + text += n*sizeof(char32_t); p->tail->fragment_size += n; } } @@ -1428,7 +1428,7 @@ static int save_unicode(const char *text, size_t cnt, void *ptr) cnt_alloc=16; if ((fragment=malloc(sizeof(struct unicode_convert_buf) - +cnt_alloc*sizeof(unicode_char))) + +cnt_alloc*sizeof(char32_t))) == NULL) { p->errflag=1; @@ -1436,10 +1436,10 @@ static int save_unicode(const char *text, size_t cnt, void *ptr) } fragment->next=NULL; - fragment->fragment=(unicode_char *)(fragment+1); + fragment->fragment=(char32_t *)(fragment+1); fragment->max_fragment_size=cnt_alloc; fragment->fragment_size=cnt; - memcpy(fragment->fragment, text, cnt*sizeof(unicode_char)); + memcpy(fragment->fragment, text, cnt*sizeof(char32_t)); *(p->last)=fragment; p->last=&fragment->next; @@ -1480,7 +1480,7 @@ static int deinit_tounicode(void *ptr, int *errptr) if (rc == 0 && p->nullterminate) { - unicode_char zero=0; + char32_t zero=0; rc=save_unicode( (const char *)&zero, sizeof(zero), p->hdr.ptr); @@ -1526,7 +1526,7 @@ static int deinit_tounicode(void *ptr, int *errptr) int unicode_convert_tou_tobuf(const char *text, size_t text_l, const char *charset, - unicode_char **uc, + char32_t **uc, size_t *ucsize, int *err) { @@ -1547,7 +1547,7 @@ int unicode_convert_tou_tobuf(const char *text, return 0; } -int unicode_convert_fromu_tobuf(const unicode_char *utext, +int unicode_convert_fromu_tobuf(const char32_t *utext, size_t utext_l, const char *charset, char **c, @@ -1579,10 +1579,10 @@ int unicode_convert_fromu_tobuf(const unicode_char *utext, char *unicode_convert_tocase(const char *str, const char *charset, - unicode_char (*first_char_func)(unicode_char), - unicode_char (*char_func)(unicode_char)) + char32_t (*first_char_func)(char32_t), + char32_t (*char_func)(char32_t)) { - unicode_char *uc; + char32_t *uc; size_t ucsize; size_t i; int err; diff --git a/unicode/unicode_categories.c b/unicode/unicode_categories.c index bdbdbe1..5e57e40 100644 --- a/unicode/unicode_categories.c +++ b/unicode/unicode_categories.c @@ -9,7 +9,7 @@ #include "categoriestab.h" #include "linebreaktab_internal.h" -uint32_t unicode_category_lookup(unicode_char ch) +uint32_t unicode_category_lookup(char32_t ch) { return unicode_tab32_lookup(ch, unicode_indextab, @@ -20,7 +20,7 @@ uint32_t unicode_category_lookup(unicode_char ch) 0); } -int unicode_isspace(unicode_char ch) +int unicode_isspace(char32_t ch) { switch (unicode_lb_lookup(ch)) { case UNICODE_LB_BK: @@ -34,7 +34,7 @@ int unicode_isspace(unicode_char ch) return unicode_isblank(ch); } -int unicode_isblank(unicode_char ch) +int unicode_isblank(char32_t ch) { if (ch == 9) return 1; @@ -45,40 +45,40 @@ int unicode_isblank(unicode_char ch) return 0; } -int unicode_isalpha(unicode_char ch) +int unicode_isalpha(char32_t ch) { return (unicode_category_lookup(ch) & UNICODE_CATEGORY_1) == UNICODE_CATEGORY_1_LETTER; } -int unicode_isdigit(unicode_char ch) +int unicode_isdigit(char32_t ch) { return unicode_category_lookup(ch) == (UNICODE_CATEGORY_1_NUMBER | UNICODE_CATEGORY_2_DIGIT); } -int unicode_isalnum(unicode_char ch) +int unicode_isalnum(char32_t ch) { return unicode_isalpha(ch) || unicode_isdigit(ch); } -int unicode_isgraph(unicode_char ch) +int unicode_isgraph(char32_t ch) { return (ch >= ' ' && !unicode_isspace(ch)); } -int unicode_ispunct(unicode_char ch) +int unicode_ispunct(char32_t ch) { return (unicode_category_lookup(ch) & UNICODE_CATEGORY_1) == UNICODE_CATEGORY_1_PUNCTUATION; } -int unicode_islower(unicode_char ch) +int unicode_islower(char32_t ch) { return unicode_isalpha(ch) && ch == unicode_lc(ch); } -int unicode_isupper(unicode_char ch) +int unicode_isupper(char32_t ch) { return unicode_isalpha(ch) && ch == unicode_uc(ch); } diff --git a/unicode/unicode_graphemebreak.c b/unicode/unicode_graphemebreak.c index 7df3164..926bfb1 100644 --- a/unicode/unicode_graphemebreak.c +++ b/unicode/unicode_graphemebreak.c @@ -26,7 +26,7 @@ #include "graphemebreaktab.h" -int unicode_grapheme_break(unicode_char a, unicode_char b) +int unicode_grapheme_break(char32_t a, char32_t b) { uint8_t ac=unicode_tab_lookup(a, unicode_indextab, sizeof(unicode_indextab)/sizeof(unicode_indextab[0]), diff --git a/unicode/unicode_htmlent.c b/unicode/unicode_htmlent.c index b1111ce..5472db8 100644 --- a/unicode/unicode_htmlent.c +++ b/unicode/unicode_htmlent.c @@ -12,7 +12,7 @@ struct i { size_t n_start; size_t n_size; - unicode_char v; + char32_t v; }; #include "unicode_htmlent.h" @@ -42,14 +42,14 @@ static int compar(const void *key, const void *obj) return 0; } -unicode_char unicode_html40ent_lookup(const char *n) +char32_t unicode_html40ent_lookup(const char *n) { const struct i *ptr; if (*n == '#') { const char *p=n; - unicode_char uc; + char32_t uc; char *endptr; ++p; diff --git a/unicode/unicode_linebreak.c b/unicode/unicode_linebreak.c index 85421fd..a843c6c 100644 --- a/unicode/unicode_linebreak.c +++ b/unicode/unicode_linebreak.c @@ -91,7 +91,7 @@ static int end_def(unicode_lb_info_t i) #define RESULT(x) (*i->cb_func)((x), i->cb_arg) int unicode_lb_next_cnt(unicode_lb_info_t i, - const unicode_char *chars, + const char32_t *chars, size_t cnt) { while (cnt) @@ -107,7 +107,7 @@ int unicode_lb_next_cnt(unicode_lb_info_t i, return 0; } -int unicode_lb_lookup(unicode_char ch) +int unicode_lb_lookup(char32_t ch) { return unicode_tab_lookup(ch, unicode_indextab, @@ -119,7 +119,7 @@ int unicode_lb_lookup(unicode_char ch) } int unicode_lb_next(unicode_lb_info_t i, - unicode_char ch) + char32_t ch) { return (*i->next_handler)(i, (i->opts & UNICODE_LB_OPT_DASHWJ) && (ch == 0x2012 || ch == 0x2013) @@ -596,7 +596,7 @@ struct unicode_lbc_info { size_t buf_ptr; - int (*cb_func)(int, unicode_char, void *); + int (*cb_func)(int, char32_t, void *); void *cb_arg; }; @@ -614,7 +614,7 @@ static int unicode_lbc_callback(int value, void *ptr) h->cb_arg); } -unicode_lbc_info_t unicode_lbc_init(int (*cb_func)(int, unicode_char, void *), +unicode_lbc_info_t unicode_lbc_init(int (*cb_func)(int, char32_t, void *), void *cb_arg) { unicode_lbc_info_t h= @@ -641,7 +641,7 @@ void unicode_lbc_set_opts(unicode_lbc_info_t i, int opts) } int unicode_lbc_next_cnt(unicode_lbc_info_t i, - const unicode_char *chars, + const char32_t *chars, size_t cnt) { while (cnt) @@ -657,7 +657,7 @@ int unicode_lbc_next_cnt(unicode_lbc_info_t i, return 0; } -int unicode_lbc_next(unicode_lbc_info_t i, unicode_char ch) +int unicode_lbc_next(unicode_lbc_info_t i, char32_t ch) { if (i->buf_ptr >= unicode_buf_len(&i->buf)) { diff --git a/unicode/unicode_scripts.c b/unicode/unicode_scripts.c index 6d52b40..713846b 100644 --- a/unicode/unicode_scripts.c +++ b/unicode/unicode_scripts.c @@ -8,7 +8,7 @@ #include "courier-unicode.h" #include "scriptstab.h" -unicode_script_t unicode_script(unicode_char a) +unicode_script_t unicode_script(char32_t a) { return unicode_tab_lookup(a, unicode_indextab, sizeof(unicode_indextab) diff --git a/unicode/unicode_tablookup.c b/unicode/unicode_tablookup.c index 067aa5d..1f04652 100644 --- a/unicode/unicode_tablookup.c +++ b/unicode/unicode_tablookup.c @@ -9,7 +9,7 @@ #define BLOCK_SIZE 256 -uint8_t unicode_tab_lookup(unicode_char ch, +uint8_t unicode_tab_lookup(char32_t ch, const size_t *unicode_indextab, size_t unicode_indextab_sizeof, const uint8_t (*unicode_rangetab)[2], @@ -48,7 +48,7 @@ uint8_t unicode_tab_lookup(unicode_char ch, return uclass; } -uint32_t unicode_tab32_lookup(unicode_char ch, +uint32_t unicode_tab32_lookup(char32_t ch, const size_t *unicode_indextab, size_t unicode_indextab_sizeof, const uint8_t (*unicode_rangetab)[2], diff --git a/unicode/unicode_ultcase.c b/unicode/unicode_ultcase.c index 44da797..3ddd9e3 100644 --- a/unicode/unicode_ultcase.c +++ b/unicode/unicode_ultcase.c @@ -8,16 +8,16 @@ #include "courier-unicode.h" extern const unsigned unicode_case_hash; -extern const unicode_char unicode_case_tab[][4]; +extern const char32_t unicode_case_tab[][4]; extern const unsigned unicode_case_offset[]; -static unsigned find_case(unicode_char c) +static unsigned find_case(char32_t c) { unsigned idx= c % unicode_case_hash; unsigned i=unicode_case_offset[idx]; - unicode_char uc; + char32_t uc; --i; @@ -31,24 +31,24 @@ static unsigned find_case(unicode_char c) return (0); } -unicode_char unicode_uc(unicode_char c) +char32_t unicode_uc(char32_t c) { unsigned i=find_case(c); return (unicode_case_tab[i][0] != c ? c:unicode_case_tab[i][1]); } -unicode_char unicode_lc(unicode_char c) +char32_t unicode_lc(char32_t c) { unsigned i=find_case(c); return (unicode_case_tab[i][0] != c ? c:unicode_case_tab[i][2]); } -unicode_char unicode_tc(unicode_char c) +char32_t unicode_tc(char32_t c) { unsigned i; - unicode_char oc=c; + char32_t oc=c; c=unicode_lc(c); i=find_case(c); diff --git a/unicode/unicode_ultcasetab.c b/unicode/unicode_ultcasetab.c index 747f9c6..5b8fee2 100644 --- a/unicode/unicode_ultcasetab.c +++ b/unicode/unicode_ultcasetab.c @@ -8,7 +8,7 @@ const unsigned unicode_case_hash=2048; /* unicode_case_maxbucket=6*/ -const unicode_char unicode_case_tab[][4]={ +const char32_t unicode_case_tab[][4]={ {0x0041,0x0041,0x0061,0x0041},{0x0042,0x0042,0x0062,0x0042},{0x0043,0x0043,0x0063,0x0043},{0x0044,0x0044,0x0064,0x0044}, {0x0045,0x0045,0x0065,0x0045},{0x0046,0x0046,0x0066,0x0046},{0x0047,0x0047,0x0067,0x0047},{0x0048,0x0048,0x0068,0x0048}, {0x0049,0x0049,0x0069,0x0049},{0x004a,0x004a,0x006a,0x004a},{0x004b,0x004b,0x006b,0x004b},{0x004c,0x004c,0x006c,0x004c}, @@ -22,39 +22,39 @@ const unicode_char unicode_case_tab[][4]={ {0x006f,0x004f,0x006f,0x004f},{0x0070,0x0050,0x0070,0x0050},{0x0071,0x0051,0x0071,0x0051},{0x0072,0x0052,0x0072,0x0052}, {0x0073,0x0053,0x0073,0x0053},{0x0074,0x0054,0x0074,0x0054},{0x0075,0x0055,0x0075,0x0055},{0x0076,0x0056,0x0076,0x0056}, {0x0077,0x0057,0x0077,0x0057},{0x0078,0x0058,0x0078,0x0058},{0x0079,0x0059,0x0079,0x0059},{0x007a,0x005a,0x007a,0x005a}, -{0x118a0,0x118a0,0x118c0,0x118a0},{0x10a0,0x10a0,0x2d00,0x10a0},{0x10a1,0x10a1,0x2d01,0x10a1},{0x118a1,0x118a1,0x118c1,0x118a1}, -{0x10a2,0x10a2,0x2d02,0x10a2},{0x118a2,0x118a2,0x118c2,0x118a2},{0x118a3,0x118a3,0x118c3,0x118a3},{0x10a3,0x10a3,0x2d03,0x10a3}, -{0x10a4,0x10a4,0x2d04,0x10a4},{0x118a4,0x118a4,0x118c4,0x118a4},{0x10a5,0x10a5,0x2d05,0x10a5},{0x118a5,0x118a5,0x118c5,0x118a5}, -{0x118a6,0x118a6,0x118c6,0x118a6},{0x10a6,0x10a6,0x2d06,0x10a6},{0x10a7,0x10a7,0x2d07,0x10a7},{0x118a7,0x118a7,0x118c7,0x118a7}, -{0x118a8,0x118a8,0x118c8,0x118a8},{0x10a8,0x10a8,0x2d08,0x10a8},{0x10a9,0x10a9,0x2d09,0x10a9},{0x118a9,0x118a9,0x118c9,0x118a9}, +{0x10a0,0x10a0,0x2d00,0x10a0},{0x118a0,0x118a0,0x118c0,0x118a0},{0x118a1,0x118a1,0x118c1,0x118a1},{0x10a1,0x10a1,0x2d01,0x10a1}, +{0x118a2,0x118a2,0x118c2,0x118a2},{0x10a2,0x10a2,0x2d02,0x10a2},{0x118a3,0x118a3,0x118c3,0x118a3},{0x10a3,0x10a3,0x2d03,0x10a3}, +{0x118a4,0x118a4,0x118c4,0x118a4},{0x10a4,0x10a4,0x2d04,0x10a4},{0x118a5,0x118a5,0x118c5,0x118a5},{0x10a5,0x10a5,0x2d05,0x10a5}, +{0x118a6,0x118a6,0x118c6,0x118a6},{0x10a6,0x10a6,0x2d06,0x10a6},{0x118a7,0x118a7,0x118c7,0x118a7},{0x10a7,0x10a7,0x2d07,0x10a7}, +{0x10a8,0x10a8,0x2d08,0x10a8},{0x118a8,0x118a8,0x118c8,0x118a8},{0x118a9,0x118a9,0x118c9,0x118a9},{0x10a9,0x10a9,0x2d09,0x10a9}, {0x10aa,0x10aa,0x2d0a,0x10aa},{0x118aa,0x118aa,0x118ca,0x118aa},{0x118ab,0x118ab,0x118cb,0x118ab},{0x10ab,0x10ab,0x2d0b,0x10ab}, -{0x118ac,0x118ac,0x118cc,0x118ac},{0x10ac,0x10ac,0x2d0c,0x10ac},{0x118ad,0x118ad,0x118cd,0x118ad},{0x10ad,0x10ad,0x2d0d,0x10ad}, -{0x10ae,0x10ae,0x2d0e,0x10ae},{0x118ae,0x118ae,0x118ce,0x118ae},{0x118af,0x118af,0x118cf,0x118af},{0x10af,0x10af,0x2d0f,0x10af}, -{0x118b0,0x118b0,0x118d0,0x118b0},{0x10b0,0x10b0,0x2d10,0x10b0},{0x10b1,0x10b1,0x2d11,0x10b1},{0x118b1,0x118b1,0x118d1,0x118b1}, +{0x10ac,0x10ac,0x2d0c,0x10ac},{0x118ac,0x118ac,0x118cc,0x118ac},{0x10ad,0x10ad,0x2d0d,0x10ad},{0x118ad,0x118ad,0x118cd,0x118ad}, +{0x118ae,0x118ae,0x118ce,0x118ae},{0x10ae,0x10ae,0x2d0e,0x10ae},{0x10af,0x10af,0x2d0f,0x10af},{0x118af,0x118af,0x118cf,0x118af}, +{0x10b0,0x10b0,0x2d10,0x10b0},{0x118b0,0x118b0,0x118d0,0x118b0},{0x10b1,0x10b1,0x2d11,0x10b1},{0x118b1,0x118b1,0x118d1,0x118b1}, {0x10b2,0x10b2,0x2d12,0x10b2},{0x118b2,0x118b2,0x118d2,0x118b2},{0x10b3,0x10b3,0x2d13,0x10b3},{0x118b3,0x118b3,0x118d3,0x118b3}, -{0x118b4,0x118b4,0x118d4,0x118b4},{0x10b4,0x10b4,0x2d14,0x10b4},{0x118b5,0x118b5,0x118d5,0x118b5},{0x00b5,0x039c,0x00b5,0x039c}, -{0x10b5,0x10b5,0x2d15,0x10b5},{0x118b6,0x118b6,0x118d6,0x118b6},{0x10b6,0x10b6,0x2d16,0x10b6},{0x118b7,0x118b7,0x118d7,0x118b7}, -{0x10b7,0x10b7,0x2d17,0x10b7},{0x118b8,0x118b8,0x118d8,0x118b8},{0x10b8,0x10b8,0x2d18,0x10b8},{0x10b9,0x10b9,0x2d19,0x10b9}, -{0x118b9,0x118b9,0x118d9,0x118b9},{0x10ba,0x10ba,0x2d1a,0x10ba},{0x118ba,0x118ba,0x118da,0x118ba},{0x118bb,0x118bb,0x118db,0x118bb}, -{0x10bb,0x10bb,0x2d1b,0x10bb},{0x118bc,0x118bc,0x118dc,0x118bc},{0x10bc,0x10bc,0x2d1c,0x10bc},{0x118bd,0x118bd,0x118dd,0x118bd}, -{0x10bd,0x10bd,0x2d1d,0x10bd},{0x118be,0x118be,0x118de,0x118be},{0x10be,0x10be,0x2d1e,0x10be},{0x10bf,0x10bf,0x2d1f,0x10bf}, -{0x118bf,0x118bf,0x118df,0x118bf},{0x00c0,0x00c0,0x00e0,0x00c0},{0x10c0,0x10c0,0x2d20,0x10c0},{0x118c0,0x118a0,0x118c0,0x118a0}, -{0x10c1,0x10c1,0x2d21,0x10c1},{0x00c1,0x00c1,0x00e1,0x00c1},{0x118c1,0x118a1,0x118c1,0x118a1},{0x118c2,0x118a2,0x118c2,0x118a2}, -{0x10c2,0x10c2,0x2d22,0x10c2},{0x00c2,0x00c2,0x00e2,0x00c2},{0x118c3,0x118a3,0x118c3,0x118a3},{0x10c3,0x10c3,0x2d23,0x10c3}, -{0x00c3,0x00c3,0x00e3,0x00c3},{0x118c4,0x118a4,0x118c4,0x118a4},{0x10c4,0x10c4,0x2d24,0x10c4},{0x00c4,0x00c4,0x00e4,0x00c4}, -{0x10c5,0x10c5,0x2d25,0x10c5},{0x118c5,0x118a5,0x118c5,0x118a5},{0x00c5,0x00c5,0x00e5,0x00c5},{0x00c6,0x00c6,0x00e6,0x00c6}, +{0x10b4,0x10b4,0x2d14,0x10b4},{0x118b4,0x118b4,0x118d4,0x118b4},{0x118b5,0x118b5,0x118d5,0x118b5},{0x00b5,0x039c,0x00b5,0x039c}, +{0x10b5,0x10b5,0x2d15,0x10b5},{0x10b6,0x10b6,0x2d16,0x10b6},{0x118b6,0x118b6,0x118d6,0x118b6},{0x10b7,0x10b7,0x2d17,0x10b7}, +{0x118b7,0x118b7,0x118d7,0x118b7},{0x118b8,0x118b8,0x118d8,0x118b8},{0x10b8,0x10b8,0x2d18,0x10b8},{0x118b9,0x118b9,0x118d9,0x118b9}, +{0x10b9,0x10b9,0x2d19,0x10b9},{0x118ba,0x118ba,0x118da,0x118ba},{0x10ba,0x10ba,0x2d1a,0x10ba},{0x118bb,0x118bb,0x118db,0x118bb}, +{0x10bb,0x10bb,0x2d1b,0x10bb},{0x10bc,0x10bc,0x2d1c,0x10bc},{0x118bc,0x118bc,0x118dc,0x118bc},{0x118bd,0x118bd,0x118dd,0x118bd}, +{0x10bd,0x10bd,0x2d1d,0x10bd},{0x118be,0x118be,0x118de,0x118be},{0x10be,0x10be,0x2d1e,0x10be},{0x118bf,0x118bf,0x118df,0x118bf}, +{0x10bf,0x10bf,0x2d1f,0x10bf},{0x10c0,0x10c0,0x2d20,0x10c0},{0x118c0,0x118a0,0x118c0,0x118a0},{0x00c0,0x00c0,0x00e0,0x00c0}, +{0x00c1,0x00c1,0x00e1,0x00c1},{0x10c1,0x10c1,0x2d21,0x10c1},{0x118c1,0x118a1,0x118c1,0x118a1},{0x118c2,0x118a2,0x118c2,0x118a2}, +{0x00c2,0x00c2,0x00e2,0x00c2},{0x10c2,0x10c2,0x2d22,0x10c2},{0x10c3,0x10c3,0x2d23,0x10c3},{0x118c3,0x118a3,0x118c3,0x118a3}, +{0x00c3,0x00c3,0x00e3,0x00c3},{0x10c4,0x10c4,0x2d24,0x10c4},{0x118c4,0x118a4,0x118c4,0x118a4},{0x00c4,0x00c4,0x00e4,0x00c4}, +{0x118c5,0x118a5,0x118c5,0x118a5},{0x10c5,0x10c5,0x2d25,0x10c5},{0x00c5,0x00c5,0x00e5,0x00c5},{0x00c6,0x00c6,0x00e6,0x00c6}, {0x118c6,0x118a6,0x118c6,0x118a6},{0x10c7,0x10c7,0x2d27,0x10c7},{0x118c7,0x118a7,0x118c7,0x118a7},{0x00c7,0x00c7,0x00e7,0x00c7}, -{0x00c8,0x00c8,0x00e8,0x00c8},{0x118c8,0x118a8,0x118c8,0x118a8},{0x118c9,0x118a9,0x118c9,0x118a9},{0x00c9,0x00c9,0x00e9,0x00c9}, -{0x118ca,0x118aa,0x118ca,0x118aa},{0x00ca,0x00ca,0x00ea,0x00ca},{0x00cb,0x00cb,0x00eb,0x00cb},{0x118cb,0x118ab,0x118cb,0x118ab}, -{0x00cc,0x00cc,0x00ec,0x00cc},{0x118cc,0x118ac,0x118cc,0x118ac},{0x00cd,0x00cd,0x00ed,0x00cd},{0x118cd,0x118ad,0x118cd,0x118ad}, -{0x10cd,0x10cd,0x2d2d,0x10cd},{0x00ce,0x00ce,0x00ee,0x00ce},{0x118ce,0x118ae,0x118ce,0x118ae},{0x118cf,0x118af,0x118cf,0x118af}, -{0x00cf,0x00cf,0x00ef,0x00cf},{0x00d0,0x00d0,0x00f0,0x00d0},{0x118d0,0x118b0,0x118d0,0x118b0},{0x00d1,0x00d1,0x00f1,0x00d1}, -{0x118d1,0x118b1,0x118d1,0x118b1},{0x118d2,0x118b2,0x118d2,0x118b2},{0x00d2,0x00d2,0x00f2,0x00d2},{0x00d3,0x00d3,0x00f3,0x00d3}, -{0x118d3,0x118b3,0x118d3,0x118b3},{0x118d4,0x118b4,0x118d4,0x118b4},{0x00d4,0x00d4,0x00f4,0x00d4},{0x00d5,0x00d5,0x00f5,0x00d5}, -{0x118d5,0x118b5,0x118d5,0x118b5},{0x00d6,0x00d6,0x00f6,0x00d6},{0x118d6,0x118b6,0x118d6,0x118b6},{0x118d7,0x118b7,0x118d7,0x118b7}, +{0x118c8,0x118a8,0x118c8,0x118a8},{0x00c8,0x00c8,0x00e8,0x00c8},{0x118c9,0x118a9,0x118c9,0x118a9},{0x00c9,0x00c9,0x00e9,0x00c9}, +{0x00ca,0x00ca,0x00ea,0x00ca},{0x118ca,0x118aa,0x118ca,0x118aa},{0x00cb,0x00cb,0x00eb,0x00cb},{0x118cb,0x118ab,0x118cb,0x118ab}, +{0x118cc,0x118ac,0x118cc,0x118ac},{0x00cc,0x00cc,0x00ec,0x00cc},{0x118cd,0x118ad,0x118cd,0x118ad},{0x10cd,0x10cd,0x2d2d,0x10cd}, +{0x00cd,0x00cd,0x00ed,0x00cd},{0x00ce,0x00ce,0x00ee,0x00ce},{0x118ce,0x118ae,0x118ce,0x118ae},{0x00cf,0x00cf,0x00ef,0x00cf}, +{0x118cf,0x118af,0x118cf,0x118af},{0x118d0,0x118b0,0x118d0,0x118b0},{0x00d0,0x00d0,0x00f0,0x00d0},{0x00d1,0x00d1,0x00f1,0x00d1}, +{0x118d1,0x118b1,0x118d1,0x118b1},{0x00d2,0x00d2,0x00f2,0x00d2},{0x118d2,0x118b2,0x118d2,0x118b2},{0x00d3,0x00d3,0x00f3,0x00d3}, +{0x118d3,0x118b3,0x118d3,0x118b3},{0x118d4,0x118b4,0x118d4,0x118b4},{0x00d4,0x00d4,0x00f4,0x00d4},{0x118d5,0x118b5,0x118d5,0x118b5}, +{0x00d5,0x00d5,0x00f5,0x00d5},{0x00d6,0x00d6,0x00f6,0x00d6},{0x118d6,0x118b6,0x118d6,0x118b6},{0x118d7,0x118b7,0x118d7,0x118b7}, {0x00d8,0x00d8,0x00f8,0x00d8},{0x118d8,0x118b8,0x118d8,0x118b8},{0x118d9,0x118b9,0x118d9,0x118b9},{0x00d9,0x00d9,0x00f9,0x00d9}, -{0x118da,0x118ba,0x118da,0x118ba},{0x00da,0x00da,0x00fa,0x00da},{0x118db,0x118bb,0x118db,0x118bb},{0x00db,0x00db,0x00fb,0x00db}, -{0x00dc,0x00dc,0x00fc,0x00dc},{0x118dc,0x118bc,0x118dc,0x118bc},{0x00dd,0x00dd,0x00fd,0x00dd},{0x118dd,0x118bd,0x118dd,0x118bd}, +{0x00da,0x00da,0x00fa,0x00da},{0x118da,0x118ba,0x118da,0x118ba},{0x00db,0x00db,0x00fb,0x00db},{0x118db,0x118bb,0x118db,0x118bb}, +{0x118dc,0x118bc,0x118dc,0x118bc},{0x00dc,0x00dc,0x00fc,0x00dc},{0x118dd,0x118bd,0x118dd,0x118bd},{0x00dd,0x00dd,0x00fd,0x00dd}, {0x00de,0x00de,0x00fe,0x00de},{0x118de,0x118be,0x118de,0x118be},{0x118df,0x118bf,0x118df,0x118bf},{0x00e0,0x00c0,0x00e0,0x00c0}, {0x00e1,0x00c1,0x00e1,0x00c1},{0x00e2,0x00c2,0x00e2,0x00c2},{0x00e3,0x00c3,0x00e3,0x00c3},{0x00e4,0x00c4,0x00e4,0x00c4}, {0x00e5,0x00c5,0x00e5,0x00c5},{0x00e6,0x00c6,0x00e6,0x00c6},{0x00e7,0x00c7,0x00e7,0x00c7},{0x00e8,0x00c8,0x00e8,0x00c8}, @@ -73,9 +73,9 @@ const unicode_char unicode_case_tab[][4]={ {0x011a,0x011a,0x011b,0x011a},{0x011b,0x011a,0x011b,0x011a},{0x011c,0x011c,0x011d,0x011c},{0x011d,0x011c,0x011d,0x011c}, {0x011e,0x011e,0x011f,0x011e},{0x011f,0x011e,0x011f,0x011e},{0x0120,0x0120,0x0121,0x0120},{0x0121,0x0120,0x0121,0x0120}, {0x0122,0x0122,0x0123,0x0122},{0x0123,0x0122,0x0123,0x0122},{0x0124,0x0124,0x0125,0x0124},{0x0125,0x0124,0x0125,0x0124}, -{0x0126,0x0126,0x0127,0x0126},{0x2126,0x2126,0x03c9,0x2126},{0x0127,0x0126,0x0127,0x0126},{0x0128,0x0128,0x0129,0x0128}, -{0x0129,0x0128,0x0129,0x0128},{0x012a,0x012a,0x012b,0x012a},{0x212a,0x212a,0x006b,0x212a},{0x012b,0x012a,0x012b,0x012a}, -{0x212b,0x212b,0x00e5,0x212b},{0x012c,0x012c,0x012d,0x012c},{0x012d,0x012c,0x012d,0x012c},{0x012e,0x012e,0x012f,0x012e}, +{0x2126,0x2126,0x03c9,0x2126},{0x0126,0x0126,0x0127,0x0126},{0x0127,0x0126,0x0127,0x0126},{0x0128,0x0128,0x0129,0x0128}, +{0x0129,0x0128,0x0129,0x0128},{0x012a,0x012a,0x012b,0x012a},{0x212a,0x212a,0x006b,0x212a},{0x212b,0x212b,0x00e5,0x212b}, +{0x012b,0x012a,0x012b,0x012a},{0x012c,0x012c,0x012d,0x012c},{0x012d,0x012c,0x012d,0x012c},{0x012e,0x012e,0x012f,0x012e}, {0x012f,0x012e,0x012f,0x012e},{0x0130,0x0130,0x0069,0x0130},{0x0131,0x0049,0x0131,0x0049},{0x2132,0x2132,0x214e,0x2132}, {0x0132,0x0132,0x0133,0x0132},{0x0133,0x0132,0x0133,0x0132},{0x0134,0x0134,0x0135,0x0134},{0x0135,0x0134,0x0135,0x0134}, {0x0136,0x0136,0x0137,0x0136},{0x0137,0x0136,0x0137,0x0136},{0x0139,0x0139,0x013a,0x0139},{0x013a,0x0139,0x013a,0x0139}, @@ -88,24 +88,24 @@ const unicode_char unicode_case_tab[][4]={ {0x0153,0x0152,0x0153,0x0152},{0x0154,0x0154,0x0155,0x0154},{0x0155,0x0154,0x0155,0x0154},{0x0156,0x0156,0x0157,0x0156}, {0x0157,0x0156,0x0157,0x0156},{0x0158,0x0158,0x0159,0x0158},{0x0159,0x0158,0x0159,0x0158},{0x015a,0x015a,0x015b,0x015a}, {0x015b,0x015a,0x015b,0x015a},{0x015c,0x015c,0x015d,0x015c},{0x015d,0x015c,0x015d,0x015c},{0x015e,0x015e,0x015f,0x015e}, -{0x015f,0x015e,0x015f,0x015e},{0x0160,0x0160,0x0161,0x0160},{0x2160,0x2160,0x2170,0x2160},{0x2161,0x2161,0x2171,0x2161}, -{0x0161,0x0160,0x0161,0x0160},{0x0162,0x0162,0x0163,0x0162},{0x2162,0x2162,0x2172,0x2162},{0x0163,0x0162,0x0163,0x0162}, -{0x2163,0x2163,0x2173,0x2163},{0x2164,0x2164,0x2174,0x2164},{0x0164,0x0164,0x0165,0x0164},{0x2165,0x2165,0x2175,0x2165}, -{0x0165,0x0164,0x0165,0x0164},{0x2166,0x2166,0x2176,0x2166},{0x0166,0x0166,0x0167,0x0166},{0x2167,0x2167,0x2177,0x2167}, +{0x015f,0x015e,0x015f,0x015e},{0x2160,0x2160,0x2170,0x2160},{0x0160,0x0160,0x0161,0x0160},{0x0161,0x0160,0x0161,0x0160}, +{0x2161,0x2161,0x2171,0x2161},{0x2162,0x2162,0x2172,0x2162},{0x0162,0x0162,0x0163,0x0162},{0x0163,0x0162,0x0163,0x0162}, +{0x2163,0x2163,0x2173,0x2163},{0x2164,0x2164,0x2174,0x2164},{0x0164,0x0164,0x0165,0x0164},{0x0165,0x0164,0x0165,0x0164}, +{0x2165,0x2165,0x2175,0x2165},{0x0166,0x0166,0x0167,0x0166},{0x2166,0x2166,0x2176,0x2166},{0x2167,0x2167,0x2177,0x2167}, {0x0167,0x0166,0x0167,0x0166},{0x0168,0x0168,0x0169,0x0168},{0x2168,0x2168,0x2178,0x2168},{0x2169,0x2169,0x2179,0x2169}, -{0x0169,0x0168,0x0169,0x0168},{0x216a,0x216a,0x217a,0x216a},{0x016a,0x016a,0x016b,0x016a},{0x016b,0x016a,0x016b,0x016a}, -{0x216b,0x216b,0x217b,0x216b},{0x216c,0x216c,0x217c,0x216c},{0x016c,0x016c,0x016d,0x016c},{0x216d,0x216d,0x217d,0x216d}, +{0x0169,0x0168,0x0169,0x0168},{0x016a,0x016a,0x016b,0x016a},{0x216a,0x216a,0x217a,0x216a},{0x016b,0x016a,0x016b,0x016a}, +{0x216b,0x216b,0x217b,0x216b},{0x016c,0x016c,0x016d,0x016c},{0x216c,0x216c,0x217c,0x216c},{0x216d,0x216d,0x217d,0x216d}, {0x016d,0x016c,0x016d,0x016c},{0x216e,0x216e,0x217e,0x216e},{0x016e,0x016e,0x016f,0x016e},{0x016f,0x016e,0x016f,0x016e}, -{0x216f,0x216f,0x217f,0x216f},{0x2170,0x2160,0x2170,0x2160},{0x0170,0x0170,0x0171,0x0170},{0x2171,0x2161,0x2171,0x2161}, -{0x0171,0x0170,0x0171,0x0170},{0x2172,0x2162,0x2172,0x2162},{0x0172,0x0172,0x0173,0x0172},{0x0173,0x0172,0x0173,0x0172}, -{0x2173,0x2163,0x2173,0x2163},{0x2174,0x2164,0x2174,0x2164},{0x0174,0x0174,0x0175,0x0174},{0x0175,0x0174,0x0175,0x0174}, -{0x2175,0x2165,0x2175,0x2165},{0x2176,0x2166,0x2176,0x2166},{0x0176,0x0176,0x0177,0x0176},{0x0177,0x0176,0x0177,0x0176}, -{0x2177,0x2167,0x2177,0x2167},{0x2178,0x2168,0x2178,0x2168},{0x0178,0x0178,0x00ff,0x0178},{0x2179,0x2169,0x2179,0x2169}, -{0x0179,0x0179,0x017a,0x0179},{0x017a,0x0179,0x017a,0x0179},{0x217a,0x216a,0x217a,0x216a},{0x217b,0x216b,0x217b,0x216b}, -{0x017b,0x017b,0x017c,0x017b},{0x017c,0x017b,0x017c,0x017b},{0x217c,0x216c,0x217c,0x216c},{0x017d,0x017d,0x017e,0x017d}, -{0x217d,0x216d,0x217d,0x216d},{0x217e,0x216e,0x217e,0x216e},{0x017e,0x017d,0x017e,0x017d},{0x217f,0x216f,0x217f,0x216f}, -{0x017f,0x0053,0x017f,0x0053},{0x0180,0x0243,0x0180,0x0243},{0x0181,0x0181,0x0253,0x0181},{0x0182,0x0182,0x0183,0x0182}, -{0x0183,0x0182,0x0183,0x0182},{0x2183,0x2183,0x2184,0x2183},{0x2184,0x2183,0x2184,0x2183},{0x0184,0x0184,0x0185,0x0184}, +{0x216f,0x216f,0x217f,0x216f},{0x0170,0x0170,0x0171,0x0170},{0x2170,0x2160,0x2170,0x2160},{0x0171,0x0170,0x0171,0x0170}, +{0x2171,0x2161,0x2171,0x2161},{0x2172,0x2162,0x2172,0x2162},{0x0172,0x0172,0x0173,0x0172},{0x0173,0x0172,0x0173,0x0172}, +{0x2173,0x2163,0x2173,0x2163},{0x0174,0x0174,0x0175,0x0174},{0x2174,0x2164,0x2174,0x2164},{0x2175,0x2165,0x2175,0x2165}, +{0x0175,0x0174,0x0175,0x0174},{0x2176,0x2166,0x2176,0x2166},{0x0176,0x0176,0x0177,0x0176},{0x2177,0x2167,0x2177,0x2167}, +{0x0177,0x0176,0x0177,0x0176},{0x2178,0x2168,0x2178,0x2168},{0x0178,0x0178,0x00ff,0x0178},{0x0179,0x0179,0x017a,0x0179}, +{0x2179,0x2169,0x2179,0x2169},{0x217a,0x216a,0x217a,0x216a},{0x017a,0x0179,0x017a,0x0179},{0x217b,0x216b,0x217b,0x216b}, +{0x017b,0x017b,0x017c,0x017b},{0x217c,0x216c,0x217c,0x216c},{0x017c,0x017b,0x017c,0x017b},{0x017d,0x017d,0x017e,0x017d}, +{0x217d,0x216d,0x217d,0x216d},{0x017e,0x017d,0x017e,0x017d},{0x217e,0x216e,0x217e,0x216e},{0x017f,0x0053,0x017f,0x0053}, +{0x217f,0x216f,0x217f,0x216f},{0x0180,0x0243,0x0180,0x0243},{0x0181,0x0181,0x0253,0x0181},{0x0182,0x0182,0x0183,0x0182}, +{0x2183,0x2183,0x2184,0x2183},{0x0183,0x0182,0x0183,0x0182},{0x2184,0x2183,0x2184,0x2183},{0x0184,0x0184,0x0185,0x0184}, {0x0185,0x0184,0x0185,0x0184},{0x0186,0x0186,0x0254,0x0186},{0x0187,0x0187,0x0188,0x0187},{0x0188,0x0187,0x0188,0x0187}, {0x0189,0x0189,0x0256,0x0189},{0x018a,0x018a,0x0257,0x018a},{0x018b,0x018b,0x018c,0x018b},{0x018c,0x018b,0x018c,0x018b}, {0x018e,0x018e,0x01dd,0x018e},{0x018f,0x018f,0x0259,0x018f},{0x0190,0x0190,0x025b,0x0190},{0x0191,0x0191,0x0192,0x0191}, @@ -161,278 +161,278 @@ const unicode_char unicode_case_tab[][4]={ {0x0280,0x01a6,0x0280,0x01a6},{0x0283,0x01a9,0x0283,0x01a9},{0x0287,0xa7b1,0x0287,0xa7b1},{0x0288,0x01ae,0x0288,0x01ae}, {0x0289,0x0244,0x0289,0x0244},{0x028a,0x01b1,0x028a,0x01b1},{0x028b,0x01b2,0x028b,0x01b2},{0x028c,0x0245,0x028c,0x0245}, {0x0292,0x01b7,0x0292,0x01b7},{0x029d,0xa7b2,0x029d,0xa7b2},{0x029e,0xa7b0,0x029e,0xa7b0},{0x0345,0x0399,0x0345,0x0399}, -{0xab53,0xa7b3,0xab53,0xa7b3},{0xab70,0x13a0,0xab70,0x13a0},{0x0370,0x0370,0x0371,0x0370},{0xab71,0x13a1,0xab71,0x13a1}, -{0x0371,0x0370,0x0371,0x0370},{0xab72,0x13a2,0xab72,0x13a2},{0x0372,0x0372,0x0373,0x0372},{0xab73,0x13a3,0xab73,0x13a3}, -{0x0373,0x0372,0x0373,0x0372},{0xab74,0x13a4,0xab74,0x13a4},{0xab75,0x13a5,0xab75,0x13a5},{0x0376,0x0376,0x0377,0x0376}, -{0xab76,0x13a6,0xab76,0x13a6},{0x0377,0x0376,0x0377,0x0376},{0xab77,0x13a7,0xab77,0x13a7},{0xab78,0x13a8,0xab78,0x13a8}, +{0xab53,0xa7b3,0xab53,0xa7b3},{0x0370,0x0370,0x0371,0x0370},{0xab70,0x13a0,0xab70,0x13a0},{0x0371,0x0370,0x0371,0x0370}, +{0xab71,0x13a1,0xab71,0x13a1},{0xab72,0x13a2,0xab72,0x13a2},{0x0372,0x0372,0x0373,0x0372},{0xab73,0x13a3,0xab73,0x13a3}, +{0x0373,0x0372,0x0373,0x0372},{0xab74,0x13a4,0xab74,0x13a4},{0xab75,0x13a5,0xab75,0x13a5},{0xab76,0x13a6,0xab76,0x13a6}, +{0x0376,0x0376,0x0377,0x0376},{0x0377,0x0376,0x0377,0x0376},{0xab77,0x13a7,0xab77,0x13a7},{0xab78,0x13a8,0xab78,0x13a8}, {0xab79,0x13a9,0xab79,0x13a9},{0xab7a,0x13aa,0xab7a,0x13aa},{0xab7b,0x13ab,0xab7b,0x13ab},{0x037b,0x03fd,0x037b,0x03fd}, -{0x037c,0x03fe,0x037c,0x03fe},{0xab7c,0x13ac,0xab7c,0x13ac},{0xab7d,0x13ad,0xab7d,0x13ad},{0x037d,0x03ff,0x037d,0x03ff}, -{0xab7e,0x13ae,0xab7e,0x13ae},{0xab7f,0x13af,0xab7f,0x13af},{0x037f,0x037f,0x03f3,0x037f},{0xab80,0x13b0,0xab80,0x13b0}, +{0xab7c,0x13ac,0xab7c,0x13ac},{0x037c,0x03fe,0x037c,0x03fe},{0x037d,0x03ff,0x037d,0x03ff},{0xab7d,0x13ad,0xab7d,0x13ad}, +{0xab7e,0x13ae,0xab7e,0x13ae},{0x037f,0x037f,0x03f3,0x037f},{0xab7f,0x13af,0xab7f,0x13af},{0xab80,0x13b0,0xab80,0x13b0}, {0xab81,0x13b1,0xab81,0x13b1},{0xab82,0x13b2,0xab82,0x13b2},{0xab83,0x13b3,0xab83,0x13b3},{0xab84,0x13b4,0xab84,0x13b4}, -{0xab85,0x13b5,0xab85,0x13b5},{0xab86,0x13b6,0xab86,0x13b6},{0x0386,0x0386,0x03ac,0x0386},{0xab87,0x13b7,0xab87,0x13b7}, -{0x0388,0x0388,0x03ad,0x0388},{0xab88,0x13b8,0xab88,0x13b8},{0xab89,0x13b9,0xab89,0x13b9},{0x0389,0x0389,0x03ae,0x0389}, -{0x038a,0x038a,0x03af,0x038a},{0xab8a,0x13ba,0xab8a,0x13ba},{0xab8b,0x13bb,0xab8b,0x13bb},{0xab8c,0x13bc,0xab8c,0x13bc}, -{0x038c,0x038c,0x03cc,0x038c},{0xab8d,0x13bd,0xab8d,0x13bd},{0x038e,0x038e,0x03cd,0x038e},{0xab8e,0x13be,0xab8e,0x13be}, -{0x038f,0x038f,0x03ce,0x038f},{0xab8f,0x13bf,0xab8f,0x13bf},{0xab90,0x13c0,0xab90,0x13c0},{0x0391,0x0391,0x03b1,0x0391}, -{0xab91,0x13c1,0xab91,0x13c1},{0xab92,0x13c2,0xab92,0x13c2},{0x0392,0x0392,0x03b2,0x0392},{0xab93,0x13c3,0xab93,0x13c3}, -{0x0393,0x0393,0x03b3,0x0393},{0x0394,0x0394,0x03b4,0x0394},{0xab94,0x13c4,0xab94,0x13c4},{0x0395,0x0395,0x03b5,0x0395}, -{0xab95,0x13c5,0xab95,0x13c5},{0xab96,0x13c6,0xab96,0x13c6},{0x0396,0x0396,0x03b6,0x0396},{0x0397,0x0397,0x03b7,0x0397}, -{0xab97,0x13c7,0xab97,0x13c7},{0x0398,0x0398,0x03b8,0x0398},{0xab98,0x13c8,0xab98,0x13c8},{0xab99,0x13c9,0xab99,0x13c9}, +{0xab85,0x13b5,0xab85,0x13b5},{0x0386,0x0386,0x03ac,0x0386},{0xab86,0x13b6,0xab86,0x13b6},{0xab87,0x13b7,0xab87,0x13b7}, +{0xab88,0x13b8,0xab88,0x13b8},{0x0388,0x0388,0x03ad,0x0388},{0x0389,0x0389,0x03ae,0x0389},{0xab89,0x13b9,0xab89,0x13b9}, +{0x038a,0x038a,0x03af,0x038a},{0xab8a,0x13ba,0xab8a,0x13ba},{0xab8b,0x13bb,0xab8b,0x13bb},{0x038c,0x038c,0x03cc,0x038c}, +{0xab8c,0x13bc,0xab8c,0x13bc},{0xab8d,0x13bd,0xab8d,0x13bd},{0x038e,0x038e,0x03cd,0x038e},{0xab8e,0x13be,0xab8e,0x13be}, +{0xab8f,0x13bf,0xab8f,0x13bf},{0x038f,0x038f,0x03ce,0x038f},{0xab90,0x13c0,0xab90,0x13c0},{0x0391,0x0391,0x03b1,0x0391}, +{0xab91,0x13c1,0xab91,0x13c1},{0x0392,0x0392,0x03b2,0x0392},{0xab92,0x13c2,0xab92,0x13c2},{0xab93,0x13c3,0xab93,0x13c3}, +{0x0393,0x0393,0x03b3,0x0393},{0xab94,0x13c4,0xab94,0x13c4},{0x0394,0x0394,0x03b4,0x0394},{0x0395,0x0395,0x03b5,0x0395}, +{0xab95,0x13c5,0xab95,0x13c5},{0x0396,0x0396,0x03b6,0x0396},{0xab96,0x13c6,0xab96,0x13c6},{0x0397,0x0397,0x03b7,0x0397}, +{0xab97,0x13c7,0xab97,0x13c7},{0xab98,0x13c8,0xab98,0x13c8},{0x0398,0x0398,0x03b8,0x0398},{0xab99,0x13c9,0xab99,0x13c9}, {0x0399,0x0399,0x03b9,0x0399},{0x039a,0x039a,0x03ba,0x039a},{0xab9a,0x13ca,0xab9a,0x13ca},{0x039b,0x039b,0x03bb,0x039b}, -{0xab9b,0x13cb,0xab9b,0x13cb},{0x039c,0x039c,0x03bc,0x039c},{0xab9c,0x13cc,0xab9c,0x13cc},{0xab9d,0x13cd,0xab9d,0x13cd}, -{0x039d,0x039d,0x03bd,0x039d},{0x039e,0x039e,0x03be,0x039e},{0xab9e,0x13ce,0xab9e,0x13ce},{0x039f,0x039f,0x03bf,0x039f}, -{0xab9f,0x13cf,0xab9f,0x13cf},{0xaba0,0x13d0,0xaba0,0x13d0},{0x03a0,0x03a0,0x03c0,0x03a0},{0x13a0,0x13a0,0xab70,0x13a0}, -{0xaba1,0x13d1,0xaba1,0x13d1},{0x13a1,0x13a1,0xab71,0x13a1},{0x03a1,0x03a1,0x03c1,0x03a1},{0x13a2,0x13a2,0xab72,0x13a2}, -{0xaba2,0x13d2,0xaba2,0x13d2},{0xaba3,0x13d3,0xaba3,0x13d3},{0x13a3,0x13a3,0xab73,0x13a3},{0x03a3,0x03a3,0x03c3,0x03a3}, +{0xab9b,0x13cb,0xab9b,0x13cb},{0xab9c,0x13cc,0xab9c,0x13cc},{0x039c,0x039c,0x03bc,0x039c},{0xab9d,0x13cd,0xab9d,0x13cd}, +{0x039d,0x039d,0x03bd,0x039d},{0xab9e,0x13ce,0xab9e,0x13ce},{0x039e,0x039e,0x03be,0x039e},{0x039f,0x039f,0x03bf,0x039f}, +{0xab9f,0x13cf,0xab9f,0x13cf},{0x13a0,0x13a0,0xab70,0x13a0},{0x03a0,0x03a0,0x03c0,0x03a0},{0xaba0,0x13d0,0xaba0,0x13d0}, +{0x03a1,0x03a1,0x03c1,0x03a1},{0x13a1,0x13a1,0xab71,0x13a1},{0xaba1,0x13d1,0xaba1,0x13d1},{0x13a2,0x13a2,0xab72,0x13a2}, +{0xaba2,0x13d2,0xaba2,0x13d2},{0x03a3,0x03a3,0x03c3,0x03a3},{0x13a3,0x13a3,0xab73,0x13a3},{0xaba3,0x13d3,0xaba3,0x13d3}, {0x03a4,0x03a4,0x03c4,0x03a4},{0x13a4,0x13a4,0xab74,0x13a4},{0xaba4,0x13d4,0xaba4,0x13d4},{0xaba5,0x13d5,0xaba5,0x13d5}, -{0x13a5,0x13a5,0xab75,0x13a5},{0x03a5,0x03a5,0x03c5,0x03a5},{0x03a6,0x03a6,0x03c6,0x03a6},{0xaba6,0x13d6,0xaba6,0x13d6}, -{0x13a6,0x13a6,0xab76,0x13a6},{0xaba7,0x13d7,0xaba7,0x13d7},{0x13a7,0x13a7,0xab77,0x13a7},{0x03a7,0x03a7,0x03c7,0x03a7}, -{0x03a8,0x03a8,0x03c8,0x03a8},{0x13a8,0x13a8,0xab78,0x13a8},{0xaba8,0x13d8,0xaba8,0x13d8},{0x13a9,0x13a9,0xab79,0x13a9}, -{0xaba9,0x13d9,0xaba9,0x13d9},{0x03a9,0x03a9,0x03c9,0x03a9},{0x13aa,0x13aa,0xab7a,0x13aa},{0x03aa,0x03aa,0x03ca,0x03aa}, -{0xabaa,0x13da,0xabaa,0x13da},{0x13ab,0x13ab,0xab7b,0x13ab},{0xabab,0x13db,0xabab,0x13db},{0x03ab,0x03ab,0x03cb,0x03ab}, -{0xabac,0x13dc,0xabac,0x13dc},{0x13ac,0x13ac,0xab7c,0x13ac},{0x03ac,0x0386,0x03ac,0x0386},{0x13ad,0x13ad,0xab7d,0x13ad}, -{0x03ad,0x0388,0x03ad,0x0388},{0xabad,0x13dd,0xabad,0x13dd},{0x03ae,0x0389,0x03ae,0x0389},{0x13ae,0x13ae,0xab7e,0x13ae}, -{0xabae,0x13de,0xabae,0x13de},{0xabaf,0x13df,0xabaf,0x13df},{0x03af,0x038a,0x03af,0x038a},{0x13af,0x13af,0xab7f,0x13af}, -{0xabb0,0x13e0,0xabb0,0x13e0},{0x13b0,0x13b0,0xab80,0x13b0},{0xabb1,0x13e1,0xabb1,0x13e1},{0x13b1,0x13b1,0xab81,0x13b1}, -{0x03b1,0x0391,0x03b1,0x0391},{0x13b2,0x13b2,0xab82,0x13b2},{0x03b2,0x0392,0x03b2,0x0392},{0xabb2,0x13e2,0xabb2,0x13e2}, -{0xabb3,0x13e3,0xabb3,0x13e3},{0x03b3,0x0393,0x03b3,0x0393},{0x13b3,0x13b3,0xab83,0x13b3},{0xabb4,0x13e4,0xabb4,0x13e4}, -{0x03b4,0x0394,0x03b4,0x0394},{0x13b4,0x13b4,0xab84,0x13b4},{0xabb5,0x13e5,0xabb5,0x13e5},{0x13b5,0x13b5,0xab85,0x13b5}, -{0x03b5,0x0395,0x03b5,0x0395},{0x03b6,0x0396,0x03b6,0x0396},{0xabb6,0x13e6,0xabb6,0x13e6},{0x13b6,0x13b6,0xab86,0x13b6}, -{0xabb7,0x13e7,0xabb7,0x13e7},{0x03b7,0x0397,0x03b7,0x0397},{0x13b7,0x13b7,0xab87,0x13b7},{0x03b8,0x0398,0x03b8,0x0398}, -{0x13b8,0x13b8,0xab88,0x13b8},{0xabb8,0x13e8,0xabb8,0x13e8},{0x03b9,0x0399,0x03b9,0x0399},{0x13b9,0x13b9,0xab89,0x13b9}, -{0xabb9,0x13e9,0xabb9,0x13e9},{0x03ba,0x039a,0x03ba,0x039a},{0x13ba,0x13ba,0xab8a,0x13ba},{0xabba,0x13ea,0xabba,0x13ea}, -{0x03bb,0x039b,0x03bb,0x039b},{0xabbb,0x13eb,0xabbb,0x13eb},{0x13bb,0x13bb,0xab8b,0x13bb},{0x03bc,0x039c,0x03bc,0x039c}, -{0x13bc,0x13bc,0xab8c,0x13bc},{0xabbc,0x13ec,0xabbc,0x13ec},{0x03bd,0x039d,0x03bd,0x039d},{0xabbd,0x13ed,0xabbd,0x13ed}, -{0x13bd,0x13bd,0xab8d,0x13bd},{0x13be,0x13be,0xab8e,0x13be},{0x03be,0x039e,0x03be,0x039e},{0xabbe,0x13ee,0xabbe,0x13ee}, -{0x03bf,0x039f,0x03bf,0x039f},{0x13bf,0x13bf,0xab8f,0x13bf},{0xabbf,0x13ef,0xabbf,0x13ef},{0x03c0,0x03a0,0x03c0,0x03a0}, -{0x13c0,0x13c0,0xab90,0x13c0},{0x13c1,0x13c1,0xab91,0x13c1},{0x03c1,0x03a1,0x03c1,0x03a1},{0x13c2,0x13c2,0xab92,0x13c2}, -{0x03c2,0x03a3,0x03c2,0x03a3},{0x03c3,0x03a3,0x03c3,0x03a3},{0x13c3,0x13c3,0xab93,0x13c3},{0x03c4,0x03a4,0x03c4,0x03a4}, -{0x13c4,0x13c4,0xab94,0x13c4},{0x03c5,0x03a5,0x03c5,0x03a5},{0x13c5,0x13c5,0xab95,0x13c5},{0x13c6,0x13c6,0xab96,0x13c6}, -{0x03c6,0x03a6,0x03c6,0x03a6},{0x03c7,0x03a7,0x03c7,0x03a7},{0x13c7,0x13c7,0xab97,0x13c7},{0x03c8,0x03a8,0x03c8,0x03a8}, -{0x13c8,0x13c8,0xab98,0x13c8},{0x03c9,0x03a9,0x03c9,0x03a9},{0x13c9,0x13c9,0xab99,0x13c9},{0x03ca,0x03aa,0x03ca,0x03aa}, -{0x13ca,0x13ca,0xab9a,0x13ca},{0x03cb,0x03ab,0x03cb,0x03ab},{0x13cb,0x13cb,0xab9b,0x13cb},{0x13cc,0x13cc,0xab9c,0x13cc}, -{0x03cc,0x038c,0x03cc,0x038c},{0x03cd,0x038e,0x03cd,0x038e},{0x13cd,0x13cd,0xab9d,0x13cd},{0x13ce,0x13ce,0xab9e,0x13ce}, -{0x03ce,0x038f,0x03ce,0x038f},{0x03cf,0x03cf,0x03d7,0x03cf},{0x13cf,0x13cf,0xab9f,0x13cf},{0x13d0,0x13d0,0xaba0,0x13d0}, -{0x03d0,0x0392,0x03d0,0x0392},{0x13d1,0x13d1,0xaba1,0x13d1},{0x03d1,0x0398,0x03d1,0x0398},{0x13d2,0x13d2,0xaba2,0x13d2}, -{0x13d3,0x13d3,0xaba3,0x13d3},{0x13d4,0x13d4,0xaba4,0x13d4},{0x13d5,0x13d5,0xaba5,0x13d5},{0x03d5,0x03a6,0x03d5,0x03a6}, -{0x13d6,0x13d6,0xaba6,0x13d6},{0x03d6,0x03a0,0x03d6,0x03a0},{0x03d7,0x03cf,0x03d7,0x03cf},{0x13d7,0x13d7,0xaba7,0x13d7}, -{0x03d8,0x03d8,0x03d9,0x03d8},{0x13d8,0x13d8,0xaba8,0x13d8},{0x03d9,0x03d8,0x03d9,0x03d8},{0x13d9,0x13d9,0xaba9,0x13d9}, -{0x13da,0x13da,0xabaa,0x13da},{0x03da,0x03da,0x03db,0x03da},{0x13db,0x13db,0xabab,0x13db},{0x03db,0x03da,0x03db,0x03da}, +{0x13a5,0x13a5,0xab75,0x13a5},{0x03a5,0x03a5,0x03c5,0x03a5},{0xaba6,0x13d6,0xaba6,0x13d6},{0x13a6,0x13a6,0xab76,0x13a6}, +{0x03a6,0x03a6,0x03c6,0x03a6},{0x13a7,0x13a7,0xab77,0x13a7},{0xaba7,0x13d7,0xaba7,0x13d7},{0x03a7,0x03a7,0x03c7,0x03a7}, +{0xaba8,0x13d8,0xaba8,0x13d8},{0x13a8,0x13a8,0xab78,0x13a8},{0x03a8,0x03a8,0x03c8,0x03a8},{0xaba9,0x13d9,0xaba9,0x13d9}, +{0x03a9,0x03a9,0x03c9,0x03a9},{0x13a9,0x13a9,0xab79,0x13a9},{0x13aa,0x13aa,0xab7a,0x13aa},{0xabaa,0x13da,0xabaa,0x13da}, +{0x03aa,0x03aa,0x03ca,0x03aa},{0x13ab,0x13ab,0xab7b,0x13ab},{0xabab,0x13db,0xabab,0x13db},{0x03ab,0x03ab,0x03cb,0x03ab}, +{0xabac,0x13dc,0xabac,0x13dc},{0x13ac,0x13ac,0xab7c,0x13ac},{0x03ac,0x0386,0x03ac,0x0386},{0x03ad,0x0388,0x03ad,0x0388}, +{0x13ad,0x13ad,0xab7d,0x13ad},{0xabad,0x13dd,0xabad,0x13dd},{0xabae,0x13de,0xabae,0x13de},{0x03ae,0x0389,0x03ae,0x0389}, +{0x13ae,0x13ae,0xab7e,0x13ae},{0x13af,0x13af,0xab7f,0x13af},{0xabaf,0x13df,0xabaf,0x13df},{0x03af,0x038a,0x03af,0x038a}, +{0x13b0,0x13b0,0xab80,0x13b0},{0xabb0,0x13e0,0xabb0,0x13e0},{0x13b1,0x13b1,0xab81,0x13b1},{0x03b1,0x0391,0x03b1,0x0391}, +{0xabb1,0x13e1,0xabb1,0x13e1},{0x13b2,0x13b2,0xab82,0x13b2},{0xabb2,0x13e2,0xabb2,0x13e2},{0x03b2,0x0392,0x03b2,0x0392}, +{0x03b3,0x0393,0x03b3,0x0393},{0xabb3,0x13e3,0xabb3,0x13e3},{0x13b3,0x13b3,0xab83,0x13b3},{0x13b4,0x13b4,0xab84,0x13b4}, +{0xabb4,0x13e4,0xabb4,0x13e4},{0x03b4,0x0394,0x03b4,0x0394},{0x13b5,0x13b5,0xab85,0x13b5},{0x03b5,0x0395,0x03b5,0x0395}, +{0xabb5,0x13e5,0xabb5,0x13e5},{0x13b6,0x13b6,0xab86,0x13b6},{0xabb6,0x13e6,0xabb6,0x13e6},{0x03b6,0x0396,0x03b6,0x0396}, +{0x03b7,0x0397,0x03b7,0x0397},{0xabb7,0x13e7,0xabb7,0x13e7},{0x13b7,0x13b7,0xab87,0x13b7},{0x03b8,0x0398,0x03b8,0x0398}, +{0x13b8,0x13b8,0xab88,0x13b8},{0xabb8,0x13e8,0xabb8,0x13e8},{0xabb9,0x13e9,0xabb9,0x13e9},{0x13b9,0x13b9,0xab89,0x13b9}, +{0x03b9,0x0399,0x03b9,0x0399},{0x03ba,0x039a,0x03ba,0x039a},{0x13ba,0x13ba,0xab8a,0x13ba},{0xabba,0x13ea,0xabba,0x13ea}, +{0xabbb,0x13eb,0xabbb,0x13eb},{0x03bb,0x039b,0x03bb,0x039b},{0x13bb,0x13bb,0xab8b,0x13bb},{0xabbc,0x13ec,0xabbc,0x13ec}, +{0x13bc,0x13bc,0xab8c,0x13bc},{0x03bc,0x039c,0x03bc,0x039c},{0x03bd,0x039d,0x03bd,0x039d},{0x13bd,0x13bd,0xab8d,0x13bd}, +{0xabbd,0x13ed,0xabbd,0x13ed},{0x03be,0x039e,0x03be,0x039e},{0x13be,0x13be,0xab8e,0x13be},{0xabbe,0x13ee,0xabbe,0x13ee}, +{0x13bf,0x13bf,0xab8f,0x13bf},{0x03bf,0x039f,0x03bf,0x039f},{0xabbf,0x13ef,0xabbf,0x13ef},{0x13c0,0x13c0,0xab90,0x13c0}, +{0x03c0,0x03a0,0x03c0,0x03a0},{0x13c1,0x13c1,0xab91,0x13c1},{0x03c1,0x03a1,0x03c1,0x03a1},{0x13c2,0x13c2,0xab92,0x13c2}, +{0x03c2,0x03a3,0x03c2,0x03a3},{0x13c3,0x13c3,0xab93,0x13c3},{0x03c3,0x03a3,0x03c3,0x03a3},{0x03c4,0x03a4,0x03c4,0x03a4}, +{0x13c4,0x13c4,0xab94,0x13c4},{0x13c5,0x13c5,0xab95,0x13c5},{0x03c5,0x03a5,0x03c5,0x03a5},{0x03c6,0x03a6,0x03c6,0x03a6}, +{0x13c6,0x13c6,0xab96,0x13c6},{0x03c7,0x03a7,0x03c7,0x03a7},{0x13c7,0x13c7,0xab97,0x13c7},{0x13c8,0x13c8,0xab98,0x13c8}, +{0x03c8,0x03a8,0x03c8,0x03a8},{0x03c9,0x03a9,0x03c9,0x03a9},{0x13c9,0x13c9,0xab99,0x13c9},{0x13ca,0x13ca,0xab9a,0x13ca}, +{0x03ca,0x03aa,0x03ca,0x03aa},{0x13cb,0x13cb,0xab9b,0x13cb},{0x03cb,0x03ab,0x03cb,0x03ab},{0x13cc,0x13cc,0xab9c,0x13cc}, +{0x03cc,0x038c,0x03cc,0x038c},{0x13cd,0x13cd,0xab9d,0x13cd},{0x03cd,0x038e,0x03cd,0x038e},{0x03ce,0x038f,0x03ce,0x038f}, +{0x13ce,0x13ce,0xab9e,0x13ce},{0x03cf,0x03cf,0x03d7,0x03cf},{0x13cf,0x13cf,0xab9f,0x13cf},{0x03d0,0x0392,0x03d0,0x0392}, +{0x13d0,0x13d0,0xaba0,0x13d0},{0x13d1,0x13d1,0xaba1,0x13d1},{0x03d1,0x0398,0x03d1,0x0398},{0x13d2,0x13d2,0xaba2,0x13d2}, +{0x13d3,0x13d3,0xaba3,0x13d3},{0x13d4,0x13d4,0xaba4,0x13d4},{0x03d5,0x03a6,0x03d5,0x03a6},{0x13d5,0x13d5,0xaba5,0x13d5}, +{0x03d6,0x03a0,0x03d6,0x03a0},{0x13d6,0x13d6,0xaba6,0x13d6},{0x13d7,0x13d7,0xaba7,0x13d7},{0x03d7,0x03cf,0x03d7,0x03cf}, +{0x03d8,0x03d8,0x03d9,0x03d8},{0x13d8,0x13d8,0xaba8,0x13d8},{0x13d9,0x13d9,0xaba9,0x13d9},{0x03d9,0x03d8,0x03d9,0x03d8}, +{0x03da,0x03da,0x03db,0x03da},{0x13da,0x13da,0xabaa,0x13da},{0x13db,0x13db,0xabab,0x13db},{0x03db,0x03da,0x03db,0x03da}, {0x13dc,0x13dc,0xabac,0x13dc},{0x03dc,0x03dc,0x03dd,0x03dc},{0x03dd,0x03dc,0x03dd,0x03dc},{0x13dd,0x13dd,0xabad,0x13dd}, -{0x03de,0x03de,0x03df,0x03de},{0x13de,0x13de,0xabae,0x13de},{0x13df,0x13df,0xabaf,0x13df},{0x03df,0x03de,0x03df,0x03de}, +{0x13de,0x13de,0xabae,0x13de},{0x03de,0x03de,0x03df,0x03de},{0x03df,0x03de,0x03df,0x03de},{0x13df,0x13df,0xabaf,0x13df}, {0x03e0,0x03e0,0x03e1,0x03e0},{0x13e0,0x13e0,0xabb0,0x13e0},{0x03e1,0x03e0,0x03e1,0x03e0},{0x13e1,0x13e1,0xabb1,0x13e1}, -{0x13e2,0x13e2,0xabb2,0x13e2},{0x03e2,0x03e2,0x03e3,0x03e2},{0x03e3,0x03e2,0x03e3,0x03e2},{0x13e3,0x13e3,0xabb3,0x13e3}, -{0x13e4,0x13e4,0xabb4,0x13e4},{0x03e4,0x03e4,0x03e5,0x03e4},{0x03e5,0x03e4,0x03e5,0x03e4},{0x13e5,0x13e5,0xabb5,0x13e5}, -{0x03e6,0x03e6,0x03e7,0x03e6},{0x13e6,0x13e6,0xabb6,0x13e6},{0x13e7,0x13e7,0xabb7,0x13e7},{0x03e7,0x03e6,0x03e7,0x03e6}, -{0x13e8,0x13e8,0xabb8,0x13e8},{0x03e8,0x03e8,0x03e9,0x03e8},{0x03e9,0x03e8,0x03e9,0x03e8},{0x13e9,0x13e9,0xabb9,0x13e9}, -{0x13ea,0x13ea,0xabba,0x13ea},{0x03ea,0x03ea,0x03eb,0x03ea},{0x13eb,0x13eb,0xabbb,0x13eb},{0x03eb,0x03ea,0x03eb,0x03ea}, -{0x03ec,0x03ec,0x03ed,0x03ec},{0x13ec,0x13ec,0xabbc,0x13ec},{0x03ed,0x03ec,0x03ed,0x03ec},{0x13ed,0x13ed,0xabbd,0x13ed}, -{0x03ee,0x03ee,0x03ef,0x03ee},{0x13ee,0x13ee,0xabbe,0x13ee},{0x13ef,0x13ef,0xabbf,0x13ef},{0x03ef,0x03ee,0x03ef,0x03ee}, -{0x03f0,0x039a,0x03f0,0x039a},{0x13f0,0x13f0,0x13f8,0x13f0},{0x13f1,0x13f1,0x13f9,0x13f1},{0x03f1,0x03a1,0x03f1,0x03a1}, -{0x13f2,0x13f2,0x13fa,0x13f2},{0x03f2,0x03f9,0x03f2,0x03f9},{0x13f3,0x13f3,0x13fb,0x13f3},{0x03f3,0x037f,0x03f3,0x037f}, -{0x03f4,0x03f4,0x03b8,0x03f4},{0x13f4,0x13f4,0x13fc,0x13f4},{0x13f5,0x13f5,0x13fd,0x13f5},{0x03f5,0x0395,0x03f5,0x0395}, +{0x03e2,0x03e2,0x03e3,0x03e2},{0x13e2,0x13e2,0xabb2,0x13e2},{0x03e3,0x03e2,0x03e3,0x03e2},{0x13e3,0x13e3,0xabb3,0x13e3}, +{0x13e4,0x13e4,0xabb4,0x13e4},{0x03e4,0x03e4,0x03e5,0x03e4},{0x13e5,0x13e5,0xabb5,0x13e5},{0x03e5,0x03e4,0x03e5,0x03e4}, +{0x13e6,0x13e6,0xabb6,0x13e6},{0x03e6,0x03e6,0x03e7,0x03e6},{0x13e7,0x13e7,0xabb7,0x13e7},{0x03e7,0x03e6,0x03e7,0x03e6}, +{0x03e8,0x03e8,0x03e9,0x03e8},{0x13e8,0x13e8,0xabb8,0x13e8},{0x03e9,0x03e8,0x03e9,0x03e8},{0x13e9,0x13e9,0xabb9,0x13e9}, +{0x03ea,0x03ea,0x03eb,0x03ea},{0x13ea,0x13ea,0xabba,0x13ea},{0x13eb,0x13eb,0xabbb,0x13eb},{0x03eb,0x03ea,0x03eb,0x03ea}, +{0x03ec,0x03ec,0x03ed,0x03ec},{0x13ec,0x13ec,0xabbc,0x13ec},{0x13ed,0x13ed,0xabbd,0x13ed},{0x03ed,0x03ec,0x03ed,0x03ec}, +{0x13ee,0x13ee,0xabbe,0x13ee},{0x03ee,0x03ee,0x03ef,0x03ee},{0x13ef,0x13ef,0xabbf,0x13ef},{0x03ef,0x03ee,0x03ef,0x03ee}, +{0x13f0,0x13f0,0x13f8,0x13f0},{0x03f0,0x039a,0x03f0,0x039a},{0x13f1,0x13f1,0x13f9,0x13f1},{0x03f1,0x03a1,0x03f1,0x03a1}, +{0x03f2,0x03f9,0x03f2,0x03f9},{0x13f2,0x13f2,0x13fa,0x13f2},{0x13f3,0x13f3,0x13fb,0x13f3},{0x03f3,0x037f,0x03f3,0x037f}, +{0x03f4,0x03f4,0x03b8,0x03f4},{0x13f4,0x13f4,0x13fc,0x13f4},{0x03f5,0x0395,0x03f5,0x0395},{0x13f5,0x13f5,0x13fd,0x13f5}, {0x03f7,0x03f7,0x03f8,0x03f7},{0x03f8,0x03f7,0x03f8,0x03f7},{0x13f8,0x13f0,0x13f8,0x13f0},{0x03f9,0x03f9,0x03f2,0x03f9}, -{0x13f9,0x13f1,0x13f9,0x13f1},{0x03fa,0x03fa,0x03fb,0x03fa},{0x13fa,0x13f2,0x13fa,0x13f2},{0x13fb,0x13f3,0x13fb,0x13f3}, +{0x13f9,0x13f1,0x13f9,0x13f1},{0x13fa,0x13f2,0x13fa,0x13f2},{0x03fa,0x03fa,0x03fb,0x03fa},{0x13fb,0x13f3,0x13fb,0x13f3}, {0x03fb,0x03fa,0x03fb,0x03fa},{0x13fc,0x13f4,0x13fc,0x13f4},{0x03fd,0x03fd,0x037b,0x03fd},{0x13fd,0x13f5,0x13fd,0x13f5}, -{0x03fe,0x03fe,0x037c,0x03fe},{0x03ff,0x03ff,0x037d,0x03ff},{0x2c00,0x2c00,0x2c30,0x2c00},{0x10400,0x10400,0x10428,0x10400}, -{0x0400,0x0400,0x0450,0x0400},{0x2c01,0x2c01,0x2c31,0x2c01},{0x0401,0x0401,0x0451,0x0401},{0x10401,0x10401,0x10429,0x10401}, -{0x0402,0x0402,0x0452,0x0402},{0x2c02,0x2c02,0x2c32,0x2c02},{0x10402,0x10402,0x1042a,0x10402},{0x10403,0x10403,0x1042b,0x10403}, -{0x2c03,0x2c03,0x2c33,0x2c03},{0x0403,0x0403,0x0453,0x0403},{0x10404,0x10404,0x1042c,0x10404},{0x2c04,0x2c04,0x2c34,0x2c04}, -{0x0404,0x0404,0x0454,0x0404},{0x10405,0x10405,0x1042d,0x10405},{0x2c05,0x2c05,0x2c35,0x2c05},{0x0405,0x0405,0x0455,0x0405}, -{0x0406,0x0406,0x0456,0x0406},{0x2c06,0x2c06,0x2c36,0x2c06},{0x10406,0x10406,0x1042e,0x10406},{0x2c07,0x2c07,0x2c37,0x2c07}, -{0x0407,0x0407,0x0457,0x0407},{0x10407,0x10407,0x1042f,0x10407},{0x10408,0x10408,0x10430,0x10408},{0x0408,0x0408,0x0458,0x0408}, -{0x2c08,0x2c08,0x2c38,0x2c08},{0x2c09,0x2c09,0x2c39,0x2c09},{0x10409,0x10409,0x10431,0x10409},{0x0409,0x0409,0x0459,0x0409}, -{0x2c0a,0x2c0a,0x2c3a,0x2c0a},{0x040a,0x040a,0x045a,0x040a},{0x1040a,0x1040a,0x10432,0x1040a},{0x1040b,0x1040b,0x10433,0x1040b}, -{0x2c0b,0x2c0b,0x2c3b,0x2c0b},{0x040b,0x040b,0x045b,0x040b},{0x1040c,0x1040c,0x10434,0x1040c},{0x040c,0x040c,0x045c,0x040c}, -{0x2c0c,0x2c0c,0x2c3c,0x2c0c},{0x040d,0x040d,0x045d,0x040d},{0x2c0d,0x2c0d,0x2c3d,0x2c0d},{0x1040d,0x1040d,0x10435,0x1040d}, -{0x1040e,0x1040e,0x10436,0x1040e},{0x040e,0x040e,0x045e,0x040e},{0x2c0e,0x2c0e,0x2c3e,0x2c0e},{0x2c0f,0x2c0f,0x2c3f,0x2c0f}, -{0x1040f,0x1040f,0x10437,0x1040f},{0x040f,0x040f,0x045f,0x040f},{0x0410,0x0410,0x0430,0x0410},{0x2c10,0x2c10,0x2c40,0x2c10}, +{0x03fe,0x03fe,0x037c,0x03fe},{0x03ff,0x03ff,0x037d,0x03ff},{0x0400,0x0400,0x0450,0x0400},{0x2c00,0x2c00,0x2c30,0x2c00}, +{0x10400,0x10400,0x10428,0x10400},{0x0401,0x0401,0x0451,0x0401},{0x10401,0x10401,0x10429,0x10401},{0x2c01,0x2c01,0x2c31,0x2c01}, +{0x0402,0x0402,0x0452,0x0402},{0x10402,0x10402,0x1042a,0x10402},{0x2c02,0x2c02,0x2c32,0x2c02},{0x10403,0x10403,0x1042b,0x10403}, +{0x0403,0x0403,0x0453,0x0403},{0x2c03,0x2c03,0x2c33,0x2c03},{0x0404,0x0404,0x0454,0x0404},{0x2c04,0x2c04,0x2c34,0x2c04}, +{0x10404,0x10404,0x1042c,0x10404},{0x0405,0x0405,0x0455,0x0405},{0x10405,0x10405,0x1042d,0x10405},{0x2c05,0x2c05,0x2c35,0x2c05}, +{0x10406,0x10406,0x1042e,0x10406},{0x0406,0x0406,0x0456,0x0406},{0x2c06,0x2c06,0x2c36,0x2c06},{0x0407,0x0407,0x0457,0x0407}, +{0x2c07,0x2c07,0x2c37,0x2c07},{0x10407,0x10407,0x1042f,0x10407},{0x0408,0x0408,0x0458,0x0408},{0x2c08,0x2c08,0x2c38,0x2c08}, +{0x10408,0x10408,0x10430,0x10408},{0x2c09,0x2c09,0x2c39,0x2c09},{0x0409,0x0409,0x0459,0x0409},{0x10409,0x10409,0x10431,0x10409}, +{0x1040a,0x1040a,0x10432,0x1040a},{0x040a,0x040a,0x045a,0x040a},{0x2c0a,0x2c0a,0x2c3a,0x2c0a},{0x1040b,0x1040b,0x10433,0x1040b}, +{0x040b,0x040b,0x045b,0x040b},{0x2c0b,0x2c0b,0x2c3b,0x2c0b},{0x040c,0x040c,0x045c,0x040c},{0x2c0c,0x2c0c,0x2c3c,0x2c0c}, +{0x1040c,0x1040c,0x10434,0x1040c},{0x040d,0x040d,0x045d,0x040d},{0x1040d,0x1040d,0x10435,0x1040d},{0x2c0d,0x2c0d,0x2c3d,0x2c0d}, +{0x040e,0x040e,0x045e,0x040e},{0x2c0e,0x2c0e,0x2c3e,0x2c0e},{0x1040e,0x1040e,0x10436,0x1040e},{0x2c0f,0x2c0f,0x2c3f,0x2c0f}, +{0x1040f,0x1040f,0x10437,0x1040f},{0x040f,0x040f,0x045f,0x040f},{0x2c10,0x2c10,0x2c40,0x2c10},{0x0410,0x0410,0x0430,0x0410}, {0x10410,0x10410,0x10438,0x10410},{0x2c11,0x2c11,0x2c41,0x2c11},{0x10411,0x10411,0x10439,0x10411},{0x0411,0x0411,0x0431,0x0411}, -{0x10412,0x10412,0x1043a,0x10412},{0x2c12,0x2c12,0x2c42,0x2c12},{0x0412,0x0412,0x0432,0x0412},{0x0413,0x0413,0x0433,0x0413}, -{0x10413,0x10413,0x1043b,0x10413},{0x2c13,0x2c13,0x2c43,0x2c13},{0x2c14,0x2c14,0x2c44,0x2c14},{0x10414,0x10414,0x1043c,0x10414}, -{0x0414,0x0414,0x0434,0x0414},{0x10415,0x10415,0x1043d,0x10415},{0x0415,0x0415,0x0435,0x0415},{0x2c15,0x2c15,0x2c45,0x2c15}, -{0x2c16,0x2c16,0x2c46,0x2c16},{0x0416,0x0416,0x0436,0x0416},{0x10416,0x10416,0x1043e,0x10416},{0x0417,0x0417,0x0437,0x0417}, -{0x10417,0x10417,0x1043f,0x10417},{0x2c17,0x2c17,0x2c47,0x2c17},{0x2c18,0x2c18,0x2c48,0x2c18},{0x0418,0x0418,0x0438,0x0418}, -{0x10418,0x10418,0x10440,0x10418},{0x10419,0x10419,0x10441,0x10419},{0x0419,0x0419,0x0439,0x0419},{0x2c19,0x2c19,0x2c49,0x2c19}, -{0x1041a,0x1041a,0x10442,0x1041a},{0x041a,0x041a,0x043a,0x041a},{0x2c1a,0x2c1a,0x2c4a,0x2c1a},{0x2c1b,0x2c1b,0x2c4b,0x2c1b}, -{0x1041b,0x1041b,0x10443,0x1041b},{0x041b,0x041b,0x043b,0x041b},{0x2c1c,0x2c1c,0x2c4c,0x2c1c},{0x1041c,0x1041c,0x10444,0x1041c}, -{0x041c,0x041c,0x043c,0x041c},{0x041d,0x041d,0x043d,0x041d},{0x2c1d,0x2c1d,0x2c4d,0x2c1d},{0x1041d,0x1041d,0x10445,0x1041d}, -{0x041e,0x041e,0x043e,0x041e},{0x1041e,0x1041e,0x10446,0x1041e},{0x2c1e,0x2c1e,0x2c4e,0x2c1e},{0x1041f,0x1041f,0x10447,0x1041f}, -{0x041f,0x041f,0x043f,0x041f},{0x2c1f,0x2c1f,0x2c4f,0x2c1f},{0x2c20,0x2c20,0x2c50,0x2c20},{0x10420,0x10420,0x10448,0x10420}, -{0x0420,0x0420,0x0440,0x0420},{0x2c21,0x2c21,0x2c51,0x2c21},{0x10421,0x10421,0x10449,0x10421},{0x0421,0x0421,0x0441,0x0421}, -{0x10422,0x10422,0x1044a,0x10422},{0x2c22,0x2c22,0x2c52,0x2c22},{0x0422,0x0422,0x0442,0x0422},{0x2c23,0x2c23,0x2c53,0x2c23}, -{0x0423,0x0423,0x0443,0x0423},{0x10423,0x10423,0x1044b,0x10423},{0x0424,0x0424,0x0444,0x0424},{0x2c24,0x2c24,0x2c54,0x2c24}, -{0x10424,0x10424,0x1044c,0x10424},{0x2c25,0x2c25,0x2c55,0x2c25},{0x0425,0x0425,0x0445,0x0425},{0x10425,0x10425,0x1044d,0x10425}, -{0x0426,0x0426,0x0446,0x0426},{0x2c26,0x2c26,0x2c56,0x2c26},{0x10426,0x10426,0x1044e,0x10426},{0x10427,0x10427,0x1044f,0x10427}, -{0x0427,0x0427,0x0447,0x0427},{0x2c27,0x2c27,0x2c57,0x2c27},{0x10428,0x10400,0x10428,0x10400},{0x0428,0x0428,0x0448,0x0428}, -{0x2c28,0x2c28,0x2c58,0x2c28},{0x2c29,0x2c29,0x2c59,0x2c29},{0x10429,0x10401,0x10429,0x10401},{0x0429,0x0429,0x0449,0x0429}, -{0x1042a,0x10402,0x1042a,0x10402},{0x2c2a,0x2c2a,0x2c5a,0x2c2a},{0x042a,0x042a,0x044a,0x042a},{0x042b,0x042b,0x044b,0x042b}, -{0x2c2b,0x2c2b,0x2c5b,0x2c2b},{0x1042b,0x10403,0x1042b,0x10403},{0x2c2c,0x2c2c,0x2c5c,0x2c2c},{0x042c,0x042c,0x044c,0x042c}, -{0x1042c,0x10404,0x1042c,0x10404},{0x2c2d,0x2c2d,0x2c5d,0x2c2d},{0x042d,0x042d,0x044d,0x042d},{0x1042d,0x10405,0x1042d,0x10405}, -{0x1042e,0x10406,0x1042e,0x10406},{0x042e,0x042e,0x044e,0x042e},{0x2c2e,0x2c2e,0x2c5e,0x2c2e},{0x1042f,0x10407,0x1042f,0x10407}, +{0x2c12,0x2c12,0x2c42,0x2c12},{0x10412,0x10412,0x1043a,0x10412},{0x0412,0x0412,0x0432,0x0412},{0x10413,0x10413,0x1043b,0x10413}, +{0x2c13,0x2c13,0x2c43,0x2c13},{0x0413,0x0413,0x0433,0x0413},{0x10414,0x10414,0x1043c,0x10414},{0x2c14,0x2c14,0x2c44,0x2c14}, +{0x0414,0x0414,0x0434,0x0414},{0x0415,0x0415,0x0435,0x0415},{0x2c15,0x2c15,0x2c45,0x2c15},{0x10415,0x10415,0x1043d,0x10415}, +{0x10416,0x10416,0x1043e,0x10416},{0x2c16,0x2c16,0x2c46,0x2c16},{0x0416,0x0416,0x0436,0x0416},{0x2c17,0x2c17,0x2c47,0x2c17}, +{0x10417,0x10417,0x1043f,0x10417},{0x0417,0x0417,0x0437,0x0417},{0x10418,0x10418,0x10440,0x10418},{0x0418,0x0418,0x0438,0x0418}, +{0x2c18,0x2c18,0x2c48,0x2c18},{0x2c19,0x2c19,0x2c49,0x2c19},{0x10419,0x10419,0x10441,0x10419},{0x0419,0x0419,0x0439,0x0419}, +{0x041a,0x041a,0x043a,0x041a},{0x2c1a,0x2c1a,0x2c4a,0x2c1a},{0x1041a,0x1041a,0x10442,0x1041a},{0x1041b,0x1041b,0x10443,0x1041b}, +{0x2c1b,0x2c1b,0x2c4b,0x2c1b},{0x041b,0x041b,0x043b,0x041b},{0x041c,0x041c,0x043c,0x041c},{0x2c1c,0x2c1c,0x2c4c,0x2c1c}, +{0x1041c,0x1041c,0x10444,0x1041c},{0x041d,0x041d,0x043d,0x041d},{0x1041d,0x1041d,0x10445,0x1041d},{0x2c1d,0x2c1d,0x2c4d,0x2c1d}, +{0x041e,0x041e,0x043e,0x041e},{0x1041e,0x1041e,0x10446,0x1041e},{0x2c1e,0x2c1e,0x2c4e,0x2c1e},{0x2c1f,0x2c1f,0x2c4f,0x2c1f}, +{0x1041f,0x1041f,0x10447,0x1041f},{0x041f,0x041f,0x043f,0x041f},{0x0420,0x0420,0x0440,0x0420},{0x10420,0x10420,0x10448,0x10420}, +{0x2c20,0x2c20,0x2c50,0x2c20},{0x10421,0x10421,0x10449,0x10421},{0x0421,0x0421,0x0441,0x0421},{0x2c21,0x2c21,0x2c51,0x2c21}, +{0x0422,0x0422,0x0442,0x0422},{0x2c22,0x2c22,0x2c52,0x2c22},{0x10422,0x10422,0x1044a,0x10422},{0x10423,0x10423,0x1044b,0x10423}, +{0x2c23,0x2c23,0x2c53,0x2c23},{0x0423,0x0423,0x0443,0x0423},{0x2c24,0x2c24,0x2c54,0x2c24},{0x0424,0x0424,0x0444,0x0424}, +{0x10424,0x10424,0x1044c,0x10424},{0x10425,0x10425,0x1044d,0x10425},{0x2c25,0x2c25,0x2c55,0x2c25},{0x0425,0x0425,0x0445,0x0425}, +{0x10426,0x10426,0x1044e,0x10426},{0x0426,0x0426,0x0446,0x0426},{0x2c26,0x2c26,0x2c56,0x2c26},{0x0427,0x0427,0x0447,0x0427}, +{0x10427,0x10427,0x1044f,0x10427},{0x2c27,0x2c27,0x2c57,0x2c27},{0x2c28,0x2c28,0x2c58,0x2c28},{0x0428,0x0428,0x0448,0x0428}, +{0x10428,0x10400,0x10428,0x10400},{0x0429,0x0429,0x0449,0x0429},{0x2c29,0x2c29,0x2c59,0x2c29},{0x10429,0x10401,0x10429,0x10401}, +{0x042a,0x042a,0x044a,0x042a},{0x1042a,0x10402,0x1042a,0x10402},{0x2c2a,0x2c2a,0x2c5a,0x2c2a},{0x1042b,0x10403,0x1042b,0x10403}, +{0x042b,0x042b,0x044b,0x042b},{0x2c2b,0x2c2b,0x2c5b,0x2c2b},{0x042c,0x042c,0x044c,0x042c},{0x1042c,0x10404,0x1042c,0x10404}, +{0x2c2c,0x2c2c,0x2c5c,0x2c2c},{0x042d,0x042d,0x044d,0x042d},{0x2c2d,0x2c2d,0x2c5d,0x2c2d},{0x1042d,0x10405,0x1042d,0x10405}, +{0x042e,0x042e,0x044e,0x042e},{0x1042e,0x10406,0x1042e,0x10406},{0x2c2e,0x2c2e,0x2c5e,0x2c2e},{0x1042f,0x10407,0x1042f,0x10407}, {0x042f,0x042f,0x044f,0x042f},{0x2c30,0x2c00,0x2c30,0x2c00},{0x10430,0x10408,0x10430,0x10408},{0x0430,0x0410,0x0430,0x0410}, -{0x10431,0x10409,0x10431,0x10409},{0x0431,0x0411,0x0431,0x0411},{0x2c31,0x2c01,0x2c31,0x2c01},{0x0432,0x0412,0x0432,0x0412}, +{0x10431,0x10409,0x10431,0x10409},{0x2c31,0x2c01,0x2c31,0x2c01},{0x0431,0x0411,0x0431,0x0411},{0x0432,0x0412,0x0432,0x0412}, {0x10432,0x1040a,0x10432,0x1040a},{0x2c32,0x2c02,0x2c32,0x2c02},{0x0433,0x0413,0x0433,0x0413},{0x10433,0x1040b,0x10433,0x1040b}, -{0x2c33,0x2c03,0x2c33,0x2c03},{0x0434,0x0414,0x0434,0x0414},{0x2c34,0x2c04,0x2c34,0x2c04},{0x10434,0x1040c,0x10434,0x1040c}, -{0x10435,0x1040d,0x10435,0x1040d},{0x0435,0x0415,0x0435,0x0415},{0x2c35,0x2c05,0x2c35,0x2c05},{0x10436,0x1040e,0x10436,0x1040e}, -{0x2c36,0x2c06,0x2c36,0x2c06},{0x0436,0x0416,0x0436,0x0416},{0x10437,0x1040f,0x10437,0x1040f},{0x0437,0x0417,0x0437,0x0417}, -{0x2c37,0x2c07,0x2c37,0x2c07},{0x0438,0x0418,0x0438,0x0418},{0x2c38,0x2c08,0x2c38,0x2c08},{0x10438,0x10410,0x10438,0x10410}, -{0x2c39,0x2c09,0x2c39,0x2c09},{0x10439,0x10411,0x10439,0x10411},{0x0439,0x0419,0x0439,0x0419},{0x043a,0x041a,0x043a,0x041a}, -{0x1043a,0x10412,0x1043a,0x10412},{0x2c3a,0x2c0a,0x2c3a,0x2c0a},{0x1043b,0x10413,0x1043b,0x10413},{0x043b,0x041b,0x043b,0x041b}, -{0x2c3b,0x2c0b,0x2c3b,0x2c0b},{0x1043c,0x10414,0x1043c,0x10414},{0x2c3c,0x2c0c,0x2c3c,0x2c0c},{0x043c,0x041c,0x043c,0x041c}, -{0x043d,0x041d,0x043d,0x041d},{0x1043d,0x10415,0x1043d,0x10415},{0x2c3d,0x2c0d,0x2c3d,0x2c0d},{0x2c3e,0x2c0e,0x2c3e,0x2c0e}, -{0x043e,0x041e,0x043e,0x041e},{0x1043e,0x10416,0x1043e,0x10416},{0x2c3f,0x2c0f,0x2c3f,0x2c0f},{0x1043f,0x10417,0x1043f,0x10417}, -{0x043f,0x041f,0x043f,0x041f},{0x10440,0x10418,0x10440,0x10418},{0x2c40,0x2c10,0x2c40,0x2c10},{0x0440,0x0420,0x0440,0x0420}, -{0x2c41,0x2c11,0x2c41,0x2c11},{0x10441,0x10419,0x10441,0x10419},{0x0441,0x0421,0x0441,0x0421},{0x10442,0x1041a,0x10442,0x1041a}, -{0x2c42,0x2c12,0x2c42,0x2c12},{0x0442,0x0422,0x0442,0x0422},{0x0443,0x0423,0x0443,0x0423},{0x2c43,0x2c13,0x2c43,0x2c13}, +{0x2c33,0x2c03,0x2c33,0x2c03},{0x10434,0x1040c,0x10434,0x1040c},{0x0434,0x0414,0x0434,0x0414},{0x2c34,0x2c04,0x2c34,0x2c04}, +{0x10435,0x1040d,0x10435,0x1040d},{0x2c35,0x2c05,0x2c35,0x2c05},{0x0435,0x0415,0x0435,0x0415},{0x2c36,0x2c06,0x2c36,0x2c06}, +{0x0436,0x0416,0x0436,0x0416},{0x10436,0x1040e,0x10436,0x1040e},{0x2c37,0x2c07,0x2c37,0x2c07},{0x10437,0x1040f,0x10437,0x1040f}, +{0x0437,0x0417,0x0437,0x0417},{0x2c38,0x2c08,0x2c38,0x2c08},{0x10438,0x10410,0x10438,0x10410},{0x0438,0x0418,0x0438,0x0418}, +{0x2c39,0x2c09,0x2c39,0x2c09},{0x0439,0x0419,0x0439,0x0419},{0x10439,0x10411,0x10439,0x10411},{0x1043a,0x10412,0x1043a,0x10412}, +{0x2c3a,0x2c0a,0x2c3a,0x2c0a},{0x043a,0x041a,0x043a,0x041a},{0x2c3b,0x2c0b,0x2c3b,0x2c0b},{0x1043b,0x10413,0x1043b,0x10413}, +{0x043b,0x041b,0x043b,0x041b},{0x043c,0x041c,0x043c,0x041c},{0x2c3c,0x2c0c,0x2c3c,0x2c0c},{0x1043c,0x10414,0x1043c,0x10414}, +{0x043d,0x041d,0x043d,0x041d},{0x2c3d,0x2c0d,0x2c3d,0x2c0d},{0x1043d,0x10415,0x1043d,0x10415},{0x043e,0x041e,0x043e,0x041e}, +{0x2c3e,0x2c0e,0x2c3e,0x2c0e},{0x1043e,0x10416,0x1043e,0x10416},{0x2c3f,0x2c0f,0x2c3f,0x2c0f},{0x043f,0x041f,0x043f,0x041f}, +{0x1043f,0x10417,0x1043f,0x10417},{0x10440,0x10418,0x10440,0x10418},{0x0440,0x0420,0x0440,0x0420},{0x2c40,0x2c10,0x2c40,0x2c10}, +{0x10441,0x10419,0x10441,0x10419},{0x2c41,0x2c11,0x2c41,0x2c11},{0x0441,0x0421,0x0441,0x0421},{0x2c42,0x2c12,0x2c42,0x2c12}, +{0x10442,0x1041a,0x10442,0x1041a},{0x0442,0x0422,0x0442,0x0422},{0x0443,0x0423,0x0443,0x0423},{0x2c43,0x2c13,0x2c43,0x2c13}, {0x10443,0x1041b,0x10443,0x1041b},{0x0444,0x0424,0x0444,0x0424},{0x2c44,0x2c14,0x2c44,0x2c14},{0x10444,0x1041c,0x10444,0x1041c}, -{0x2c45,0x2c15,0x2c45,0x2c15},{0x10445,0x1041d,0x10445,0x1041d},{0x0445,0x0425,0x0445,0x0425},{0x2c46,0x2c16,0x2c46,0x2c16}, -{0x0446,0x0426,0x0446,0x0426},{0x10446,0x1041e,0x10446,0x1041e},{0x10447,0x1041f,0x10447,0x1041f},{0x2c47,0x2c17,0x2c47,0x2c17}, -{0x0447,0x0427,0x0447,0x0427},{0x10448,0x10420,0x10448,0x10420},{0x0448,0x0428,0x0448,0x0428},{0x2c48,0x2c18,0x2c48,0x2c18}, -{0x10449,0x10421,0x10449,0x10421},{0x2c49,0x2c19,0x2c49,0x2c19},{0x0449,0x0429,0x0449,0x0429},{0x2c4a,0x2c1a,0x2c4a,0x2c1a}, -{0x044a,0x042a,0x044a,0x042a},{0x1044a,0x10422,0x1044a,0x10422},{0x1044b,0x10423,0x1044b,0x10423},{0x2c4b,0x2c1b,0x2c4b,0x2c1b}, -{0x044b,0x042b,0x044b,0x042b},{0x1044c,0x10424,0x1044c,0x10424},{0x044c,0x042c,0x044c,0x042c},{0x2c4c,0x2c1c,0x2c4c,0x2c1c}, -{0x2c4d,0x2c1d,0x2c4d,0x2c1d},{0x044d,0x042d,0x044d,0x042d},{0x1044d,0x10425,0x1044d,0x10425},{0x2c4e,0x2c1e,0x2c4e,0x2c1e}, -{0x1044e,0x10426,0x1044e,0x10426},{0x044e,0x042e,0x044e,0x042e},{0x1044f,0x10427,0x1044f,0x10427},{0x044f,0x042f,0x044f,0x042f}, +{0x2c45,0x2c15,0x2c45,0x2c15},{0x10445,0x1041d,0x10445,0x1041d},{0x0445,0x0425,0x0445,0x0425},{0x10446,0x1041e,0x10446,0x1041e}, +{0x0446,0x0426,0x0446,0x0426},{0x2c46,0x2c16,0x2c46,0x2c16},{0x2c47,0x2c17,0x2c47,0x2c17},{0x10447,0x1041f,0x10447,0x1041f}, +{0x0447,0x0427,0x0447,0x0427},{0x0448,0x0428,0x0448,0x0428},{0x2c48,0x2c18,0x2c48,0x2c18},{0x10448,0x10420,0x10448,0x10420}, +{0x2c49,0x2c19,0x2c49,0x2c19},{0x0449,0x0429,0x0449,0x0429},{0x10449,0x10421,0x10449,0x10421},{0x2c4a,0x2c1a,0x2c4a,0x2c1a}, +{0x044a,0x042a,0x044a,0x042a},{0x1044a,0x10422,0x1044a,0x10422},{0x1044b,0x10423,0x1044b,0x10423},{0x044b,0x042b,0x044b,0x042b}, +{0x2c4b,0x2c1b,0x2c4b,0x2c1b},{0x1044c,0x10424,0x1044c,0x10424},{0x044c,0x042c,0x044c,0x042c},{0x2c4c,0x2c1c,0x2c4c,0x2c1c}, +{0x2c4d,0x2c1d,0x2c4d,0x2c1d},{0x1044d,0x10425,0x1044d,0x10425},{0x044d,0x042d,0x044d,0x042d},{0x2c4e,0x2c1e,0x2c4e,0x2c1e}, +{0x044e,0x042e,0x044e,0x042e},{0x1044e,0x10426,0x1044e,0x10426},{0x1044f,0x10427,0x1044f,0x10427},{0x044f,0x042f,0x044f,0x042f}, {0x2c4f,0x2c1f,0x2c4f,0x2c1f},{0x0450,0x0400,0x0450,0x0400},{0x2c50,0x2c20,0x2c50,0x2c20},{0x2c51,0x2c21,0x2c51,0x2c21}, -{0x0451,0x0401,0x0451,0x0401},{0x2c52,0x2c22,0x2c52,0x2c22},{0x0452,0x0402,0x0452,0x0402},{0x2c53,0x2c23,0x2c53,0x2c23}, -{0x0453,0x0403,0x0453,0x0403},{0x0454,0x0404,0x0454,0x0404},{0x2c54,0x2c24,0x2c54,0x2c24},{0x2c55,0x2c25,0x2c55,0x2c25}, -{0x0455,0x0405,0x0455,0x0405},{0x0456,0x0406,0x0456,0x0406},{0x2c56,0x2c26,0x2c56,0x2c26},{0x0457,0x0407,0x0457,0x0407}, -{0x2c57,0x2c27,0x2c57,0x2c27},{0x2c58,0x2c28,0x2c58,0x2c28},{0x0458,0x0408,0x0458,0x0408},{0x2c59,0x2c29,0x2c59,0x2c29}, -{0x0459,0x0409,0x0459,0x0409},{0x045a,0x040a,0x045a,0x040a},{0x2c5a,0x2c2a,0x2c5a,0x2c2a},{0x045b,0x040b,0x045b,0x040b}, -{0x2c5b,0x2c2b,0x2c5b,0x2c2b},{0x2c5c,0x2c2c,0x2c5c,0x2c2c},{0x045c,0x040c,0x045c,0x040c},{0x045d,0x040d,0x045d,0x040d}, -{0x2c5d,0x2c2d,0x2c5d,0x2c2d},{0x2c5e,0x2c2e,0x2c5e,0x2c2e},{0x045e,0x040e,0x045e,0x040e},{0x045f,0x040f,0x045f,0x040f}, -{0x0460,0x0460,0x0461,0x0460},{0x2c60,0x2c60,0x2c61,0x2c60},{0x0461,0x0460,0x0461,0x0460},{0x2c61,0x2c60,0x2c61,0x2c60}, -{0x0462,0x0462,0x0463,0x0462},{0x2c62,0x2c62,0x026b,0x2c62},{0x0463,0x0462,0x0463,0x0462},{0x2c63,0x2c63,0x1d7d,0x2c63}, -{0x0464,0x0464,0x0465,0x0464},{0x2c64,0x2c64,0x027d,0x2c64},{0x0465,0x0464,0x0465,0x0464},{0x2c65,0x023a,0x2c65,0x023a}, +{0x0451,0x0401,0x0451,0x0401},{0x0452,0x0402,0x0452,0x0402},{0x2c52,0x2c22,0x2c52,0x2c22},{0x2c53,0x2c23,0x2c53,0x2c23}, +{0x0453,0x0403,0x0453,0x0403},{0x2c54,0x2c24,0x2c54,0x2c24},{0x0454,0x0404,0x0454,0x0404},{0x0455,0x0405,0x0455,0x0405}, +{0x2c55,0x2c25,0x2c55,0x2c25},{0x0456,0x0406,0x0456,0x0406},{0x2c56,0x2c26,0x2c56,0x2c26},{0x0457,0x0407,0x0457,0x0407}, +{0x2c57,0x2c27,0x2c57,0x2c27},{0x2c58,0x2c28,0x2c58,0x2c28},{0x0458,0x0408,0x0458,0x0408},{0x0459,0x0409,0x0459,0x0409}, +{0x2c59,0x2c29,0x2c59,0x2c29},{0x2c5a,0x2c2a,0x2c5a,0x2c2a},{0x045a,0x040a,0x045a,0x040a},{0x045b,0x040b,0x045b,0x040b}, +{0x2c5b,0x2c2b,0x2c5b,0x2c2b},{0x2c5c,0x2c2c,0x2c5c,0x2c2c},{0x045c,0x040c,0x045c,0x040c},{0x2c5d,0x2c2d,0x2c5d,0x2c2d}, +{0x045d,0x040d,0x045d,0x040d},{0x045e,0x040e,0x045e,0x040e},{0x2c5e,0x2c2e,0x2c5e,0x2c2e},{0x045f,0x040f,0x045f,0x040f}, +{0x2c60,0x2c60,0x2c61,0x2c60},{0x0460,0x0460,0x0461,0x0460},{0x2c61,0x2c60,0x2c61,0x2c60},{0x0461,0x0460,0x0461,0x0460}, +{0x2c62,0x2c62,0x026b,0x2c62},{0x0462,0x0462,0x0463,0x0462},{0x0463,0x0462,0x0463,0x0462},{0x2c63,0x2c63,0x1d7d,0x2c63}, +{0x2c64,0x2c64,0x027d,0x2c64},{0x0464,0x0464,0x0465,0x0464},{0x0465,0x0464,0x0465,0x0464},{0x2c65,0x023a,0x2c65,0x023a}, {0x2c66,0x023e,0x2c66,0x023e},{0x0466,0x0466,0x0467,0x0466},{0x0467,0x0466,0x0467,0x0466},{0x2c67,0x2c67,0x2c68,0x2c67}, {0x2c68,0x2c67,0x2c68,0x2c67},{0x0468,0x0468,0x0469,0x0468},{0x0469,0x0468,0x0469,0x0468},{0x2c69,0x2c69,0x2c6a,0x2c69}, -{0x046a,0x046a,0x046b,0x046a},{0x2c6a,0x2c69,0x2c6a,0x2c69},{0x2c6b,0x2c6b,0x2c6c,0x2c6b},{0x046b,0x046a,0x046b,0x046a}, -{0x2c6c,0x2c6b,0x2c6c,0x2c6b},{0x046c,0x046c,0x046d,0x046c},{0x046d,0x046c,0x046d,0x046c},{0x2c6d,0x2c6d,0x0251,0x2c6d}, +{0x2c6a,0x2c69,0x2c6a,0x2c69},{0x046a,0x046a,0x046b,0x046a},{0x046b,0x046a,0x046b,0x046a},{0x2c6b,0x2c6b,0x2c6c,0x2c6b}, +{0x2c6c,0x2c6b,0x2c6c,0x2c6b},{0x046c,0x046c,0x046d,0x046c},{0x2c6d,0x2c6d,0x0251,0x2c6d},{0x046d,0x046c,0x046d,0x046c}, {0x2c6e,0x2c6e,0x0271,0x2c6e},{0x046e,0x046e,0x046f,0x046e},{0x046f,0x046e,0x046f,0x046e},{0x2c6f,0x2c6f,0x0250,0x2c6f}, -{0x2c70,0x2c70,0x0252,0x2c70},{0x0470,0x0470,0x0471,0x0470},{0x0471,0x0470,0x0471,0x0470},{0x0472,0x0472,0x0473,0x0472}, -{0x2c72,0x2c72,0x2c73,0x2c72},{0x2c73,0x2c72,0x2c73,0x2c72},{0x0473,0x0472,0x0473,0x0472},{0x0474,0x0474,0x0475,0x0474}, -{0x0475,0x0474,0x0475,0x0474},{0x2c75,0x2c75,0x2c76,0x2c75},{0x2c76,0x2c75,0x2c76,0x2c75},{0x0476,0x0476,0x0477,0x0476}, +{0x2c70,0x2c70,0x0252,0x2c70},{0x0470,0x0470,0x0471,0x0470},{0x0471,0x0470,0x0471,0x0470},{0x2c72,0x2c72,0x2c73,0x2c72}, +{0x0472,0x0472,0x0473,0x0472},{0x2c73,0x2c72,0x2c73,0x2c72},{0x0473,0x0472,0x0473,0x0472},{0x0474,0x0474,0x0475,0x0474}, +{0x2c75,0x2c75,0x2c76,0x2c75},{0x0475,0x0474,0x0475,0x0474},{0x0476,0x0476,0x0477,0x0476},{0x2c76,0x2c75,0x2c76,0x2c75}, {0x0477,0x0476,0x0477,0x0476},{0x0478,0x0478,0x0479,0x0478},{0x0479,0x0478,0x0479,0x0478},{0x047a,0x047a,0x047b,0x047a}, -{0x047b,0x047a,0x047b,0x047a},{0x047c,0x047c,0x047d,0x047c},{0x047d,0x047c,0x047d,0x047c},{0x047e,0x047e,0x047f,0x047e}, -{0x2c7e,0x2c7e,0x023f,0x2c7e},{0x047f,0x047e,0x047f,0x047e},{0x2c7f,0x2c7f,0x0240,0x2c7f},{0x10c80,0x10c80,0x10cc0,0x10c80}, -{0x2c80,0x2c80,0x2c81,0x2c80},{0x0480,0x0480,0x0481,0x0480},{0x2c81,0x2c80,0x2c81,0x2c80},{0x10c81,0x10c81,0x10cc1,0x10c81}, -{0x0481,0x0480,0x0481,0x0480},{0x2c82,0x2c82,0x2c83,0x2c82},{0x10c82,0x10c82,0x10cc2,0x10c82},{0x2c83,0x2c82,0x2c83,0x2c82}, -{0x10c83,0x10c83,0x10cc3,0x10c83},{0x10c84,0x10c84,0x10cc4,0x10c84},{0x2c84,0x2c84,0x2c85,0x2c84},{0x10c85,0x10c85,0x10cc5,0x10c85}, -{0x2c85,0x2c84,0x2c85,0x2c84},{0x10c86,0x10c86,0x10cc6,0x10c86},{0x2c86,0x2c86,0x2c87,0x2c86},{0x10c87,0x10c87,0x10cc7,0x10c87}, -{0x2c87,0x2c86,0x2c87,0x2c86},{0x2c88,0x2c88,0x2c89,0x2c88},{0x10c88,0x10c88,0x10cc8,0x10c88},{0x10c89,0x10c89,0x10cc9,0x10c89}, -{0x2c89,0x2c88,0x2c89,0x2c88},{0x2c8a,0x2c8a,0x2c8b,0x2c8a},{0x10c8a,0x10c8a,0x10cca,0x10c8a},{0x048a,0x048a,0x048b,0x048a}, +{0x047b,0x047a,0x047b,0x047a},{0x047c,0x047c,0x047d,0x047c},{0x047d,0x047c,0x047d,0x047c},{0x2c7e,0x2c7e,0x023f,0x2c7e}, +{0x047e,0x047e,0x047f,0x047e},{0x047f,0x047e,0x047f,0x047e},{0x2c7f,0x2c7f,0x0240,0x2c7f},{0x10c80,0x10c80,0x10cc0,0x10c80}, +{0x2c80,0x2c80,0x2c81,0x2c80},{0x0480,0x0480,0x0481,0x0480},{0x2c81,0x2c80,0x2c81,0x2c80},{0x0481,0x0480,0x0481,0x0480}, +{0x10c81,0x10c81,0x10cc1,0x10c81},{0x10c82,0x10c82,0x10cc2,0x10c82},{0x2c82,0x2c82,0x2c83,0x2c82},{0x2c83,0x2c82,0x2c83,0x2c82}, +{0x10c83,0x10c83,0x10cc3,0x10c83},{0x2c84,0x2c84,0x2c85,0x2c84},{0x10c84,0x10c84,0x10cc4,0x10c84},{0x2c85,0x2c84,0x2c85,0x2c84}, +{0x10c85,0x10c85,0x10cc5,0x10c85},{0x10c86,0x10c86,0x10cc6,0x10c86},{0x2c86,0x2c86,0x2c87,0x2c86},{0x2c87,0x2c86,0x2c87,0x2c86}, +{0x10c87,0x10c87,0x10cc7,0x10c87},{0x10c88,0x10c88,0x10cc8,0x10c88},{0x2c88,0x2c88,0x2c89,0x2c88},{0x2c89,0x2c88,0x2c89,0x2c88}, +{0x10c89,0x10c89,0x10cc9,0x10c89},{0x048a,0x048a,0x048b,0x048a},{0x2c8a,0x2c8a,0x2c8b,0x2c8a},{0x10c8a,0x10c8a,0x10cca,0x10c8a}, {0x10c8b,0x10c8b,0x10ccb,0x10c8b},{0x048b,0x048a,0x048b,0x048a},{0x2c8b,0x2c8a,0x2c8b,0x2c8a},{0x048c,0x048c,0x048d,0x048c}, -{0x2c8c,0x2c8c,0x2c8d,0x2c8c},{0x10c8c,0x10c8c,0x10ccc,0x10c8c},{0x048d,0x048c,0x048d,0x048c},{0x10c8d,0x10c8d,0x10ccd,0x10c8d}, -{0x2c8d,0x2c8c,0x2c8d,0x2c8c},{0x2c8e,0x2c8e,0x2c8f,0x2c8e},{0x048e,0x048e,0x048f,0x048e},{0x10c8e,0x10c8e,0x10cce,0x10c8e}, -{0x10c8f,0x10c8f,0x10ccf,0x10c8f},{0x2c8f,0x2c8e,0x2c8f,0x2c8e},{0x048f,0x048e,0x048f,0x048e},{0x2c90,0x2c90,0x2c91,0x2c90}, -{0x0490,0x0490,0x0491,0x0490},{0x10c90,0x10c90,0x10cd0,0x10c90},{0x10c91,0x10c91,0x10cd1,0x10c91},{0x2c91,0x2c90,0x2c91,0x2c90}, -{0x0491,0x0490,0x0491,0x0490},{0x10c92,0x10c92,0x10cd2,0x10c92},{0x2c92,0x2c92,0x2c93,0x2c92},{0x0492,0x0492,0x0493,0x0492}, -{0x0493,0x0492,0x0493,0x0492},{0x10c93,0x10c93,0x10cd3,0x10c93},{0x2c93,0x2c92,0x2c93,0x2c92},{0x2c94,0x2c94,0x2c95,0x2c94}, -{0x0494,0x0494,0x0495,0x0494},{0x10c94,0x10c94,0x10cd4,0x10c94},{0x0495,0x0494,0x0495,0x0494},{0x2c95,0x2c94,0x2c95,0x2c94}, +{0x2c8c,0x2c8c,0x2c8d,0x2c8c},{0x10c8c,0x10c8c,0x10ccc,0x10c8c},{0x2c8d,0x2c8c,0x2c8d,0x2c8c},{0x10c8d,0x10c8d,0x10ccd,0x10c8d}, +{0x048d,0x048c,0x048d,0x048c},{0x048e,0x048e,0x048f,0x048e},{0x2c8e,0x2c8e,0x2c8f,0x2c8e},{0x10c8e,0x10c8e,0x10cce,0x10c8e}, +{0x2c8f,0x2c8e,0x2c8f,0x2c8e},{0x10c8f,0x10c8f,0x10ccf,0x10c8f},{0x048f,0x048e,0x048f,0x048e},{0x10c90,0x10c90,0x10cd0,0x10c90}, +{0x0490,0x0490,0x0491,0x0490},{0x2c90,0x2c90,0x2c91,0x2c90},{0x0491,0x0490,0x0491,0x0490},{0x2c91,0x2c90,0x2c91,0x2c90}, +{0x10c91,0x10c91,0x10cd1,0x10c91},{0x0492,0x0492,0x0493,0x0492},{0x2c92,0x2c92,0x2c93,0x2c92},{0x10c92,0x10c92,0x10cd2,0x10c92}, +{0x10c93,0x10c93,0x10cd3,0x10c93},{0x2c93,0x2c92,0x2c93,0x2c92},{0x0493,0x0492,0x0493,0x0492},{0x10c94,0x10c94,0x10cd4,0x10c94}, +{0x2c94,0x2c94,0x2c95,0x2c94},{0x0494,0x0494,0x0495,0x0494},{0x0495,0x0494,0x0495,0x0494},{0x2c95,0x2c94,0x2c95,0x2c94}, {0x10c95,0x10c95,0x10cd5,0x10c95},{0x0496,0x0496,0x0497,0x0496},{0x10c96,0x10c96,0x10cd6,0x10c96},{0x2c96,0x2c96,0x2c97,0x2c96}, -{0x0497,0x0496,0x0497,0x0496},{0x2c97,0x2c96,0x2c97,0x2c96},{0x10c97,0x10c97,0x10cd7,0x10c97},{0x2c98,0x2c98,0x2c99,0x2c98}, -{0x0498,0x0498,0x0499,0x0498},{0x10c98,0x10c98,0x10cd8,0x10c98},{0x10c99,0x10c99,0x10cd9,0x10c99},{0x2c99,0x2c98,0x2c99,0x2c98}, -{0x0499,0x0498,0x0499,0x0498},{0x2c9a,0x2c9a,0x2c9b,0x2c9a},{0x10c9a,0x10c9a,0x10cda,0x10c9a},{0x049a,0x049a,0x049b,0x049a}, -{0x2c9b,0x2c9a,0x2c9b,0x2c9a},{0x049b,0x049a,0x049b,0x049a},{0x10c9b,0x10c9b,0x10cdb,0x10c9b},{0x10c9c,0x10c9c,0x10cdc,0x10c9c}, -{0x2c9c,0x2c9c,0x2c9d,0x2c9c},{0x049c,0x049c,0x049d,0x049c},{0x2c9d,0x2c9c,0x2c9d,0x2c9c},{0x049d,0x049c,0x049d,0x049c}, -{0x10c9d,0x10c9d,0x10cdd,0x10c9d},{0x2c9e,0x2c9e,0x2c9f,0x2c9e},{0x10c9e,0x10c9e,0x10cde,0x10c9e},{0x049e,0x049e,0x049f,0x049e}, -{0x049f,0x049e,0x049f,0x049e},{0x2c9f,0x2c9e,0x2c9f,0x2c9e},{0x10c9f,0x10c9f,0x10cdf,0x10c9f},{0x10ca0,0x10ca0,0x10ce0,0x10ca0}, -{0x2ca0,0x2ca0,0x2ca1,0x2ca0},{0x04a0,0x04a0,0x04a1,0x04a0},{0x10ca1,0x10ca1,0x10ce1,0x10ca1},{0x2ca1,0x2ca0,0x2ca1,0x2ca0}, -{0x04a1,0x04a0,0x04a1,0x04a0},{0x04a2,0x04a2,0x04a3,0x04a2},{0x2ca2,0x2ca2,0x2ca3,0x2ca2},{0x10ca2,0x10ca2,0x10ce2,0x10ca2}, -{0x2ca3,0x2ca2,0x2ca3,0x2ca2},{0x10ca3,0x10ca3,0x10ce3,0x10ca3},{0x04a3,0x04a2,0x04a3,0x04a2},{0x2ca4,0x2ca4,0x2ca5,0x2ca4}, -{0x04a4,0x04a4,0x04a5,0x04a4},{0x10ca4,0x10ca4,0x10ce4,0x10ca4},{0x2ca5,0x2ca4,0x2ca5,0x2ca4},{0x10ca5,0x10ca5,0x10ce5,0x10ca5}, -{0x04a5,0x04a4,0x04a5,0x04a4},{0x04a6,0x04a6,0x04a7,0x04a6},{0x2ca6,0x2ca6,0x2ca7,0x2ca6},{0x10ca6,0x10ca6,0x10ce6,0x10ca6}, -{0x10ca7,0x10ca7,0x10ce7,0x10ca7},{0x2ca7,0x2ca6,0x2ca7,0x2ca6},{0x04a7,0x04a6,0x04a7,0x04a6},{0x2ca8,0x2ca8,0x2ca9,0x2ca8}, -{0x10ca8,0x10ca8,0x10ce8,0x10ca8},{0x04a8,0x04a8,0x04a9,0x04a8},{0x2ca9,0x2ca8,0x2ca9,0x2ca8},{0x04a9,0x04a8,0x04a9,0x04a8}, -{0x10ca9,0x10ca9,0x10ce9,0x10ca9},{0x04aa,0x04aa,0x04ab,0x04aa},{0x2caa,0x2caa,0x2cab,0x2caa},{0x10caa,0x10caa,0x10cea,0x10caa}, -{0x2cab,0x2caa,0x2cab,0x2caa},{0x04ab,0x04aa,0x04ab,0x04aa},{0x10cab,0x10cab,0x10ceb,0x10cab},{0x2cac,0x2cac,0x2cad,0x2cac}, -{0x04ac,0x04ac,0x04ad,0x04ac},{0x10cac,0x10cac,0x10cec,0x10cac},{0x04ad,0x04ac,0x04ad,0x04ac},{0x2cad,0x2cac,0x2cad,0x2cac}, -{0x10cad,0x10cad,0x10ced,0x10cad},{0x10cae,0x10cae,0x10cee,0x10cae},{0x04ae,0x04ae,0x04af,0x04ae},{0x2cae,0x2cae,0x2caf,0x2cae}, -{0x04af,0x04ae,0x04af,0x04ae},{0x10caf,0x10caf,0x10cef,0x10caf},{0x2caf,0x2cae,0x2caf,0x2cae},{0x2cb0,0x2cb0,0x2cb1,0x2cb0}, -{0x10cb0,0x10cb0,0x10cf0,0x10cb0},{0x04b0,0x04b0,0x04b1,0x04b0},{0x2cb1,0x2cb0,0x2cb1,0x2cb0},{0x10cb1,0x10cb1,0x10cf1,0x10cb1}, -{0x04b1,0x04b0,0x04b1,0x04b0},{0x2cb2,0x2cb2,0x2cb3,0x2cb2},{0x04b2,0x04b2,0x04b3,0x04b2},{0x10cb2,0x10cb2,0x10cf2,0x10cb2}, +{0x0497,0x0496,0x0497,0x0496},{0x2c97,0x2c96,0x2c97,0x2c96},{0x10c97,0x10c97,0x10cd7,0x10c97},{0x0498,0x0498,0x0499,0x0498}, +{0x10c98,0x10c98,0x10cd8,0x10c98},{0x2c98,0x2c98,0x2c99,0x2c98},{0x2c99,0x2c98,0x2c99,0x2c98},{0x10c99,0x10c99,0x10cd9,0x10c99}, +{0x0499,0x0498,0x0499,0x0498},{0x049a,0x049a,0x049b,0x049a},{0x2c9a,0x2c9a,0x2c9b,0x2c9a},{0x10c9a,0x10c9a,0x10cda,0x10c9a}, +{0x10c9b,0x10c9b,0x10cdb,0x10c9b},{0x049b,0x049a,0x049b,0x049a},{0x2c9b,0x2c9a,0x2c9b,0x2c9a},{0x049c,0x049c,0x049d,0x049c}, +{0x10c9c,0x10c9c,0x10cdc,0x10c9c},{0x2c9c,0x2c9c,0x2c9d,0x2c9c},{0x2c9d,0x2c9c,0x2c9d,0x2c9c},{0x049d,0x049c,0x049d,0x049c}, +{0x10c9d,0x10c9d,0x10cdd,0x10c9d},{0x049e,0x049e,0x049f,0x049e},{0x2c9e,0x2c9e,0x2c9f,0x2c9e},{0x10c9e,0x10c9e,0x10cde,0x10c9e}, +{0x049f,0x049e,0x049f,0x049e},{0x2c9f,0x2c9e,0x2c9f,0x2c9e},{0x10c9f,0x10c9f,0x10cdf,0x10c9f},{0x04a0,0x04a0,0x04a1,0x04a0}, +{0x10ca0,0x10ca0,0x10ce0,0x10ca0},{0x2ca0,0x2ca0,0x2ca1,0x2ca0},{0x2ca1,0x2ca0,0x2ca1,0x2ca0},{0x10ca1,0x10ca1,0x10ce1,0x10ca1}, +{0x04a1,0x04a0,0x04a1,0x04a0},{0x2ca2,0x2ca2,0x2ca3,0x2ca2},{0x10ca2,0x10ca2,0x10ce2,0x10ca2},{0x04a2,0x04a2,0x04a3,0x04a2}, +{0x04a3,0x04a2,0x04a3,0x04a2},{0x10ca3,0x10ca3,0x10ce3,0x10ca3},{0x2ca3,0x2ca2,0x2ca3,0x2ca2},{0x10ca4,0x10ca4,0x10ce4,0x10ca4}, +{0x04a4,0x04a4,0x04a5,0x04a4},{0x2ca4,0x2ca4,0x2ca5,0x2ca4},{0x10ca5,0x10ca5,0x10ce5,0x10ca5},{0x2ca5,0x2ca4,0x2ca5,0x2ca4}, +{0x04a5,0x04a4,0x04a5,0x04a4},{0x10ca6,0x10ca6,0x10ce6,0x10ca6},{0x2ca6,0x2ca6,0x2ca7,0x2ca6},{0x04a6,0x04a6,0x04a7,0x04a6}, +{0x10ca7,0x10ca7,0x10ce7,0x10ca7},{0x2ca7,0x2ca6,0x2ca7,0x2ca6},{0x04a7,0x04a6,0x04a7,0x04a6},{0x04a8,0x04a8,0x04a9,0x04a8}, +{0x2ca8,0x2ca8,0x2ca9,0x2ca8},{0x10ca8,0x10ca8,0x10ce8,0x10ca8},{0x04a9,0x04a8,0x04a9,0x04a8},{0x10ca9,0x10ca9,0x10ce9,0x10ca9}, +{0x2ca9,0x2ca8,0x2ca9,0x2ca8},{0x2caa,0x2caa,0x2cab,0x2caa},{0x10caa,0x10caa,0x10cea,0x10caa},{0x04aa,0x04aa,0x04ab,0x04aa}, +{0x04ab,0x04aa,0x04ab,0x04aa},{0x2cab,0x2caa,0x2cab,0x2caa},{0x10cab,0x10cab,0x10ceb,0x10cab},{0x10cac,0x10cac,0x10cec,0x10cac}, +{0x04ac,0x04ac,0x04ad,0x04ac},{0x2cac,0x2cac,0x2cad,0x2cac},{0x04ad,0x04ac,0x04ad,0x04ac},{0x2cad,0x2cac,0x2cad,0x2cac}, +{0x10cad,0x10cad,0x10ced,0x10cad},{0x2cae,0x2cae,0x2caf,0x2cae},{0x10cae,0x10cae,0x10cee,0x10cae},{0x04ae,0x04ae,0x04af,0x04ae}, +{0x04af,0x04ae,0x04af,0x04ae},{0x2caf,0x2cae,0x2caf,0x2cae},{0x10caf,0x10caf,0x10cef,0x10caf},{0x2cb0,0x2cb0,0x2cb1,0x2cb0}, +{0x04b0,0x04b0,0x04b1,0x04b0},{0x10cb0,0x10cb0,0x10cf0,0x10cb0},{0x04b1,0x04b0,0x04b1,0x04b0},{0x2cb1,0x2cb0,0x2cb1,0x2cb0}, +{0x10cb1,0x10cb1,0x10cf1,0x10cb1},{0x2cb2,0x2cb2,0x2cb3,0x2cb2},{0x10cb2,0x10cb2,0x10cf2,0x10cb2},{0x04b2,0x04b2,0x04b3,0x04b2}, {0x04b3,0x04b2,0x04b3,0x04b2},{0x2cb3,0x2cb2,0x2cb3,0x2cb2},{0x04b4,0x04b4,0x04b5,0x04b4},{0x2cb4,0x2cb4,0x2cb5,0x2cb4}, -{0x04b5,0x04b4,0x04b5,0x04b4},{0x2cb5,0x2cb4,0x2cb5,0x2cb4},{0x04b6,0x04b6,0x04b7,0x04b6},{0x24b6,0x24b6,0x24d0,0x24b6}, -{0x2cb6,0x2cb6,0x2cb7,0x2cb6},{0x04b7,0x04b6,0x04b7,0x04b6},{0x24b7,0x24b7,0x24d1,0x24b7},{0x2cb7,0x2cb6,0x2cb7,0x2cb6}, -{0x24b8,0x24b8,0x24d2,0x24b8},{0x04b8,0x04b8,0x04b9,0x04b8},{0x2cb8,0x2cb8,0x2cb9,0x2cb8},{0x04b9,0x04b8,0x04b9,0x04b8}, -{0x24b9,0x24b9,0x24d3,0x24b9},{0x2cb9,0x2cb8,0x2cb9,0x2cb8},{0x2cba,0x2cba,0x2cbb,0x2cba},{0x24ba,0x24ba,0x24d4,0x24ba}, -{0x04ba,0x04ba,0x04bb,0x04ba},{0x2cbb,0x2cba,0x2cbb,0x2cba},{0x24bb,0x24bb,0x24d5,0x24bb},{0x04bb,0x04ba,0x04bb,0x04ba}, -{0x2cbc,0x2cbc,0x2cbd,0x2cbc},{0x24bc,0x24bc,0x24d6,0x24bc},{0x04bc,0x04bc,0x04bd,0x04bc},{0x04bd,0x04bc,0x04bd,0x04bc}, -{0x24bd,0x24bd,0x24d7,0x24bd},{0x2cbd,0x2cbc,0x2cbd,0x2cbc},{0x04be,0x04be,0x04bf,0x04be},{0x24be,0x24be,0x24d8,0x24be}, -{0x2cbe,0x2cbe,0x2cbf,0x2cbe},{0x24bf,0x24bf,0x24d9,0x24bf},{0x04bf,0x04be,0x04bf,0x04be},{0x2cbf,0x2cbe,0x2cbf,0x2cbe}, -{0x10cc0,0x10c80,0x10cc0,0x10c80},{0x2cc0,0x2cc0,0x2cc1,0x2cc0},{0x04c0,0x04c0,0x04cf,0x04c0},{0x24c0,0x24c0,0x24da,0x24c0}, -{0x04c1,0x04c1,0x04c2,0x04c1},{0x24c1,0x24c1,0x24db,0x24c1},{0x10cc1,0x10c81,0x10cc1,0x10c81},{0x2cc1,0x2cc0,0x2cc1,0x2cc0}, -{0x10cc2,0x10c82,0x10cc2,0x10c82},{0x24c2,0x24c2,0x24dc,0x24c2},{0x2cc2,0x2cc2,0x2cc3,0x2cc2},{0x04c2,0x04c1,0x04c2,0x04c1}, -{0x10cc3,0x10c83,0x10cc3,0x10c83},{0x04c3,0x04c3,0x04c4,0x04c3},{0x24c3,0x24c3,0x24dd,0x24c3},{0x2cc3,0x2cc2,0x2cc3,0x2cc2}, -{0x10cc4,0x10c84,0x10cc4,0x10c84},{0x2cc4,0x2cc4,0x2cc5,0x2cc4},{0x24c4,0x24c4,0x24de,0x24c4},{0x04c4,0x04c3,0x04c4,0x04c3}, -{0x10cc5,0x10c85,0x10cc5,0x10c85},{0x2cc5,0x2cc4,0x2cc5,0x2cc4},{0x24c5,0x24c5,0x24df,0x24c5},{0x04c5,0x04c5,0x04c6,0x04c5}, -{0x24c6,0x24c6,0x24e0,0x24c6},{0x2cc6,0x2cc6,0x2cc7,0x2cc6},{0x10cc6,0x10c86,0x10cc6,0x10c86},{0x04c6,0x04c5,0x04c6,0x04c5}, +{0x2cb5,0x2cb4,0x2cb5,0x2cb4},{0x04b5,0x04b4,0x04b5,0x04b4},{0x04b6,0x04b6,0x04b7,0x04b6},{0x2cb6,0x2cb6,0x2cb7,0x2cb6}, +{0x24b6,0x24b6,0x24d0,0x24b6},{0x04b7,0x04b6,0x04b7,0x04b6},{0x2cb7,0x2cb6,0x2cb7,0x2cb6},{0x24b7,0x24b7,0x24d1,0x24b7}, +{0x04b8,0x04b8,0x04b9,0x04b8},{0x2cb8,0x2cb8,0x2cb9,0x2cb8},{0x24b8,0x24b8,0x24d2,0x24b8},{0x24b9,0x24b9,0x24d3,0x24b9}, +{0x04b9,0x04b8,0x04b9,0x04b8},{0x2cb9,0x2cb8,0x2cb9,0x2cb8},{0x04ba,0x04ba,0x04bb,0x04ba},{0x24ba,0x24ba,0x24d4,0x24ba}, +{0x2cba,0x2cba,0x2cbb,0x2cba},{0x24bb,0x24bb,0x24d5,0x24bb},{0x2cbb,0x2cba,0x2cbb,0x2cba},{0x04bb,0x04ba,0x04bb,0x04ba}, +{0x04bc,0x04bc,0x04bd,0x04bc},{0x2cbc,0x2cbc,0x2cbd,0x2cbc},{0x24bc,0x24bc,0x24d6,0x24bc},{0x04bd,0x04bc,0x04bd,0x04bc}, +{0x24bd,0x24bd,0x24d7,0x24bd},{0x2cbd,0x2cbc,0x2cbd,0x2cbc},{0x2cbe,0x2cbe,0x2cbf,0x2cbe},{0x04be,0x04be,0x04bf,0x04be}, +{0x24be,0x24be,0x24d8,0x24be},{0x2cbf,0x2cbe,0x2cbf,0x2cbe},{0x04bf,0x04be,0x04bf,0x04be},{0x24bf,0x24bf,0x24d9,0x24bf}, +{0x10cc0,0x10c80,0x10cc0,0x10c80},{0x2cc0,0x2cc0,0x2cc1,0x2cc0},{0x24c0,0x24c0,0x24da,0x24c0},{0x04c0,0x04c0,0x04cf,0x04c0}, +{0x10cc1,0x10c81,0x10cc1,0x10c81},{0x04c1,0x04c1,0x04c2,0x04c1},{0x24c1,0x24c1,0x24db,0x24c1},{0x2cc1,0x2cc0,0x2cc1,0x2cc0}, +{0x2cc2,0x2cc2,0x2cc3,0x2cc2},{0x10cc2,0x10c82,0x10cc2,0x10c82},{0x24c2,0x24c2,0x24dc,0x24c2},{0x04c2,0x04c1,0x04c2,0x04c1}, +{0x24c3,0x24c3,0x24dd,0x24c3},{0x2cc3,0x2cc2,0x2cc3,0x2cc2},{0x04c3,0x04c3,0x04c4,0x04c3},{0x10cc3,0x10c83,0x10cc3,0x10c83}, +{0x2cc4,0x2cc4,0x2cc5,0x2cc4},{0x04c4,0x04c3,0x04c4,0x04c3},{0x24c4,0x24c4,0x24de,0x24c4},{0x10cc4,0x10c84,0x10cc4,0x10c84}, +{0x04c5,0x04c5,0x04c6,0x04c5},{0x10cc5,0x10c85,0x10cc5,0x10c85},{0x24c5,0x24c5,0x24df,0x24c5},{0x2cc5,0x2cc4,0x2cc5,0x2cc4}, +{0x24c6,0x24c6,0x24e0,0x24c6},{0x2cc6,0x2cc6,0x2cc7,0x2cc6},{0x04c6,0x04c5,0x04c6,0x04c5},{0x10cc6,0x10c86,0x10cc6,0x10c86}, {0x04c7,0x04c7,0x04c8,0x04c7},{0x24c7,0x24c7,0x24e1,0x24c7},{0x10cc7,0x10c87,0x10cc7,0x10c87},{0x2cc7,0x2cc6,0x2cc7,0x2cc6}, {0x24c8,0x24c8,0x24e2,0x24c8},{0x04c8,0x04c7,0x04c8,0x04c7},{0x2cc8,0x2cc8,0x2cc9,0x2cc8},{0x10cc8,0x10c88,0x10cc8,0x10c88}, -{0x10cc9,0x10c89,0x10cc9,0x10c89},{0x24c9,0x24c9,0x24e3,0x24c9},{0x2cc9,0x2cc8,0x2cc9,0x2cc8},{0x04c9,0x04c9,0x04ca,0x04c9}, -{0x2cca,0x2cca,0x2ccb,0x2cca},{0x10cca,0x10c8a,0x10cca,0x10c8a},{0x24ca,0x24ca,0x24e4,0x24ca},{0x04ca,0x04c9,0x04ca,0x04c9}, -{0x2ccb,0x2cca,0x2ccb,0x2cca},{0x10ccb,0x10c8b,0x10ccb,0x10c8b},{0x24cb,0x24cb,0x24e5,0x24cb},{0x04cb,0x04cb,0x04cc,0x04cb}, -{0x24cc,0x24cc,0x24e6,0x24cc},{0x04cc,0x04cb,0x04cc,0x04cb},{0x10ccc,0x10c8c,0x10ccc,0x10c8c},{0x2ccc,0x2ccc,0x2ccd,0x2ccc}, -{0x2ccd,0x2ccc,0x2ccd,0x2ccc},{0x04cd,0x04cd,0x04ce,0x04cd},{0x10ccd,0x10c8d,0x10ccd,0x10c8d},{0x24cd,0x24cd,0x24e7,0x24cd}, -{0x24ce,0x24ce,0x24e8,0x24ce},{0x04ce,0x04cd,0x04ce,0x04cd},{0x2cce,0x2cce,0x2ccf,0x2cce},{0x10cce,0x10c8e,0x10cce,0x10c8e}, -{0x10ccf,0x10c8f,0x10ccf,0x10c8f},{0x04cf,0x04c0,0x04cf,0x04c0},{0x2ccf,0x2cce,0x2ccf,0x2cce},{0x24cf,0x24cf,0x24e9,0x24cf}, -{0x2cd0,0x2cd0,0x2cd1,0x2cd0},{0x24d0,0x24b6,0x24d0,0x24b6},{0x10cd0,0x10c90,0x10cd0,0x10c90},{0x04d0,0x04d0,0x04d1,0x04d0}, -{0x04d1,0x04d0,0x04d1,0x04d0},{0x10cd1,0x10c91,0x10cd1,0x10c91},{0x24d1,0x24b7,0x24d1,0x24b7},{0x2cd1,0x2cd0,0x2cd1,0x2cd0}, -{0x2cd2,0x2cd2,0x2cd3,0x2cd2},{0x10cd2,0x10c92,0x10cd2,0x10c92},{0x24d2,0x24b8,0x24d2,0x24b8},{0x04d2,0x04d2,0x04d3,0x04d2}, -{0x04d3,0x04d2,0x04d3,0x04d2},{0x24d3,0x24b9,0x24d3,0x24b9},{0x2cd3,0x2cd2,0x2cd3,0x2cd2},{0x10cd3,0x10c93,0x10cd3,0x10c93}, -{0x2cd4,0x2cd4,0x2cd5,0x2cd4},{0x10cd4,0x10c94,0x10cd4,0x10c94},{0x24d4,0x24ba,0x24d4,0x24ba},{0x04d4,0x04d4,0x04d5,0x04d4}, -{0x24d5,0x24bb,0x24d5,0x24bb},{0x10cd5,0x10c95,0x10cd5,0x10c95},{0x2cd5,0x2cd4,0x2cd5,0x2cd4},{0x04d5,0x04d4,0x04d5,0x04d4}, -{0x24d6,0x24bc,0x24d6,0x24bc},{0x04d6,0x04d6,0x04d7,0x04d6},{0x10cd6,0x10c96,0x10cd6,0x10c96},{0x2cd6,0x2cd6,0x2cd7,0x2cd6}, -{0x04d7,0x04d6,0x04d7,0x04d6},{0x10cd7,0x10c97,0x10cd7,0x10c97},{0x2cd7,0x2cd6,0x2cd7,0x2cd6},{0x24d7,0x24bd,0x24d7,0x24bd}, -{0x24d8,0x24be,0x24d8,0x24be},{0x10cd8,0x10c98,0x10cd8,0x10c98},{0x04d8,0x04d8,0x04d9,0x04d8},{0x2cd8,0x2cd8,0x2cd9,0x2cd8}, -{0x24d9,0x24bf,0x24d9,0x24bf},{0x10cd9,0x10c99,0x10cd9,0x10c99},{0x04d9,0x04d8,0x04d9,0x04d8},{0x2cd9,0x2cd8,0x2cd9,0x2cd8}, -{0x2cda,0x2cda,0x2cdb,0x2cda},{0x04da,0x04da,0x04db,0x04da},{0x24da,0x24c0,0x24da,0x24c0},{0x10cda,0x10c9a,0x10cda,0x10c9a}, -{0x24db,0x24c1,0x24db,0x24c1},{0x10cdb,0x10c9b,0x10cdb,0x10c9b},{0x2cdb,0x2cda,0x2cdb,0x2cda},{0x04db,0x04da,0x04db,0x04da}, -{0x2cdc,0x2cdc,0x2cdd,0x2cdc},{0x04dc,0x04dc,0x04dd,0x04dc},{0x10cdc,0x10c9c,0x10cdc,0x10c9c},{0x24dc,0x24c2,0x24dc,0x24c2}, -{0x04dd,0x04dc,0x04dd,0x04dc},{0x2cdd,0x2cdc,0x2cdd,0x2cdc},{0x10cdd,0x10c9d,0x10cdd,0x10c9d},{0x24dd,0x24c3,0x24dd,0x24c3}, -{0x24de,0x24c4,0x24de,0x24c4},{0x04de,0x04de,0x04df,0x04de},{0x10cde,0x10c9e,0x10cde,0x10c9e},{0x2cde,0x2cde,0x2cdf,0x2cde}, -{0x04df,0x04de,0x04df,0x04de},{0x24df,0x24c5,0x24df,0x24c5},{0x10cdf,0x10c9f,0x10cdf,0x10c9f},{0x2cdf,0x2cde,0x2cdf,0x2cde}, -{0x24e0,0x24c6,0x24e0,0x24c6},{0x2ce0,0x2ce0,0x2ce1,0x2ce0},{0x10ce0,0x10ca0,0x10ce0,0x10ca0},{0x04e0,0x04e0,0x04e1,0x04e0}, +{0x04c9,0x04c9,0x04ca,0x04c9},{0x2cc9,0x2cc8,0x2cc9,0x2cc8},{0x24c9,0x24c9,0x24e3,0x24c9},{0x10cc9,0x10c89,0x10cc9,0x10c89}, +{0x04ca,0x04c9,0x04ca,0x04c9},{0x10cca,0x10c8a,0x10cca,0x10c8a},{0x2cca,0x2cca,0x2ccb,0x2cca},{0x24ca,0x24ca,0x24e4,0x24ca}, +{0x10ccb,0x10c8b,0x10ccb,0x10c8b},{0x24cb,0x24cb,0x24e5,0x24cb},{0x2ccb,0x2cca,0x2ccb,0x2cca},{0x04cb,0x04cb,0x04cc,0x04cb}, +{0x10ccc,0x10c8c,0x10ccc,0x10c8c},{0x2ccc,0x2ccc,0x2ccd,0x2ccc},{0x04cc,0x04cb,0x04cc,0x04cb},{0x24cc,0x24cc,0x24e6,0x24cc}, +{0x24cd,0x24cd,0x24e7,0x24cd},{0x2ccd,0x2ccc,0x2ccd,0x2ccc},{0x04cd,0x04cd,0x04ce,0x04cd},{0x10ccd,0x10c8d,0x10ccd,0x10c8d}, +{0x24ce,0x24ce,0x24e8,0x24ce},{0x10cce,0x10c8e,0x10cce,0x10c8e},{0x2cce,0x2cce,0x2ccf,0x2cce},{0x04ce,0x04cd,0x04ce,0x04cd}, +{0x04cf,0x04c0,0x04cf,0x04c0},{0x2ccf,0x2cce,0x2ccf,0x2cce},{0x10ccf,0x10c8f,0x10ccf,0x10c8f},{0x24cf,0x24cf,0x24e9,0x24cf}, +{0x2cd0,0x2cd0,0x2cd1,0x2cd0},{0x10cd0,0x10c90,0x10cd0,0x10c90},{0x24d0,0x24b6,0x24d0,0x24b6},{0x04d0,0x04d0,0x04d1,0x04d0}, +{0x24d1,0x24b7,0x24d1,0x24b7},{0x2cd1,0x2cd0,0x2cd1,0x2cd0},{0x10cd1,0x10c91,0x10cd1,0x10c91},{0x04d1,0x04d0,0x04d1,0x04d0}, +{0x2cd2,0x2cd2,0x2cd3,0x2cd2},{0x04d2,0x04d2,0x04d3,0x04d2},{0x10cd2,0x10c92,0x10cd2,0x10c92},{0x24d2,0x24b8,0x24d2,0x24b8}, +{0x10cd3,0x10c93,0x10cd3,0x10c93},{0x04d3,0x04d2,0x04d3,0x04d2},{0x2cd3,0x2cd2,0x2cd3,0x2cd2},{0x24d3,0x24b9,0x24d3,0x24b9}, +{0x24d4,0x24ba,0x24d4,0x24ba},{0x04d4,0x04d4,0x04d5,0x04d4},{0x2cd4,0x2cd4,0x2cd5,0x2cd4},{0x10cd4,0x10c94,0x10cd4,0x10c94}, +{0x24d5,0x24bb,0x24d5,0x24bb},{0x2cd5,0x2cd4,0x2cd5,0x2cd4},{0x04d5,0x04d4,0x04d5,0x04d4},{0x10cd5,0x10c95,0x10cd5,0x10c95}, +{0x10cd6,0x10c96,0x10cd6,0x10c96},{0x04d6,0x04d6,0x04d7,0x04d6},{0x24d6,0x24bc,0x24d6,0x24bc},{0x2cd6,0x2cd6,0x2cd7,0x2cd6}, +{0x2cd7,0x2cd6,0x2cd7,0x2cd6},{0x10cd7,0x10c97,0x10cd7,0x10c97},{0x24d7,0x24bd,0x24d7,0x24bd},{0x04d7,0x04d6,0x04d7,0x04d6}, +{0x10cd8,0x10c98,0x10cd8,0x10c98},{0x24d8,0x24be,0x24d8,0x24be},{0x2cd8,0x2cd8,0x2cd9,0x2cd8},{0x04d8,0x04d8,0x04d9,0x04d8}, +{0x10cd9,0x10c99,0x10cd9,0x10c99},{0x04d9,0x04d8,0x04d9,0x04d8},{0x2cd9,0x2cd8,0x2cd9,0x2cd8},{0x24d9,0x24bf,0x24d9,0x24bf}, +{0x04da,0x04da,0x04db,0x04da},{0x10cda,0x10c9a,0x10cda,0x10c9a},{0x24da,0x24c0,0x24da,0x24c0},{0x2cda,0x2cda,0x2cdb,0x2cda}, +{0x04db,0x04da,0x04db,0x04da},{0x2cdb,0x2cda,0x2cdb,0x2cda},{0x10cdb,0x10c9b,0x10cdb,0x10c9b},{0x24db,0x24c1,0x24db,0x24c1}, +{0x2cdc,0x2cdc,0x2cdd,0x2cdc},{0x10cdc,0x10c9c,0x10cdc,0x10c9c},{0x24dc,0x24c2,0x24dc,0x24c2},{0x04dc,0x04dc,0x04dd,0x04dc}, +{0x10cdd,0x10c9d,0x10cdd,0x10c9d},{0x04dd,0x04dc,0x04dd,0x04dc},{0x24dd,0x24c3,0x24dd,0x24c3},{0x2cdd,0x2cdc,0x2cdd,0x2cdc}, +{0x04de,0x04de,0x04df,0x04de},{0x24de,0x24c4,0x24de,0x24c4},{0x2cde,0x2cde,0x2cdf,0x2cde},{0x10cde,0x10c9e,0x10cde,0x10c9e}, +{0x04df,0x04de,0x04df,0x04de},{0x2cdf,0x2cde,0x2cdf,0x2cde},{0x10cdf,0x10c9f,0x10cdf,0x10c9f},{0x24df,0x24c5,0x24df,0x24c5}, +{0x2ce0,0x2ce0,0x2ce1,0x2ce0},{0x24e0,0x24c6,0x24e0,0x24c6},{0x10ce0,0x10ca0,0x10ce0,0x10ca0},{0x04e0,0x04e0,0x04e1,0x04e0}, {0x04e1,0x04e0,0x04e1,0x04e0},{0x24e1,0x24c7,0x24e1,0x24c7},{0x10ce1,0x10ca1,0x10ce1,0x10ca1},{0x2ce1,0x2ce0,0x2ce1,0x2ce0}, -{0x04e2,0x04e2,0x04e3,0x04e2},{0x24e2,0x24c8,0x24e2,0x24c8},{0x10ce2,0x10ca2,0x10ce2,0x10ca2},{0x2ce2,0x2ce2,0x2ce3,0x2ce2}, -{0x2ce3,0x2ce2,0x2ce3,0x2ce2},{0x10ce3,0x10ca3,0x10ce3,0x10ca3},{0x24e3,0x24c9,0x24e3,0x24c9},{0x04e3,0x04e2,0x04e3,0x04e2}, +{0x24e2,0x24c8,0x24e2,0x24c8},{0x2ce2,0x2ce2,0x2ce3,0x2ce2},{0x04e2,0x04e2,0x04e3,0x04e2},{0x10ce2,0x10ca2,0x10ce2,0x10ca2}, +{0x04e3,0x04e2,0x04e3,0x04e2},{0x10ce3,0x10ca3,0x10ce3,0x10ca3},{0x24e3,0x24c9,0x24e3,0x24c9},{0x2ce3,0x2ce2,0x2ce3,0x2ce2}, {0x24e4,0x24ca,0x24e4,0x24ca},{0x04e4,0x04e4,0x04e5,0x04e4},{0x10ce4,0x10ca4,0x10ce4,0x10ca4},{0x24e5,0x24cb,0x24e5,0x24cb}, -{0x04e5,0x04e4,0x04e5,0x04e4},{0x10ce5,0x10ca5,0x10ce5,0x10ca5},{0x24e6,0x24cc,0x24e6,0x24cc},{0x10ce6,0x10ca6,0x10ce6,0x10ca6}, -{0x04e6,0x04e6,0x04e7,0x04e6},{0x04e7,0x04e6,0x04e7,0x04e6},{0x24e7,0x24cd,0x24e7,0x24cd},{0x10ce7,0x10ca7,0x10ce7,0x10ca7}, -{0x10ce8,0x10ca8,0x10ce8,0x10ca8},{0x24e8,0x24ce,0x24e8,0x24ce},{0x04e8,0x04e8,0x04e9,0x04e8},{0x24e9,0x24cf,0x24e9,0x24cf}, -{0x10ce9,0x10ca9,0x10ce9,0x10ca9},{0x04e9,0x04e8,0x04e9,0x04e8},{0x04ea,0x04ea,0x04eb,0x04ea},{0x10cea,0x10caa,0x10cea,0x10caa}, -{0x10ceb,0x10cab,0x10ceb,0x10cab},{0x2ceb,0x2ceb,0x2cec,0x2ceb},{0x04eb,0x04ea,0x04eb,0x04ea},{0x04ec,0x04ec,0x04ed,0x04ec}, -{0x10cec,0x10cac,0x10cec,0x10cac},{0x2cec,0x2ceb,0x2cec,0x2ceb},{0x2ced,0x2ced,0x2cee,0x2ced},{0x10ced,0x10cad,0x10ced,0x10cad}, -{0x04ed,0x04ec,0x04ed,0x04ec},{0x10cee,0x10cae,0x10cee,0x10cae},{0x2cee,0x2ced,0x2cee,0x2ced},{0x04ee,0x04ee,0x04ef,0x04ee}, -{0x04ef,0x04ee,0x04ef,0x04ee},{0x10cef,0x10caf,0x10cef,0x10caf},{0x10cf0,0x10cb0,0x10cf0,0x10cb0},{0x04f0,0x04f0,0x04f1,0x04f0}, +{0x10ce5,0x10ca5,0x10ce5,0x10ca5},{0x04e5,0x04e4,0x04e5,0x04e4},{0x24e6,0x24cc,0x24e6,0x24cc},{0x04e6,0x04e6,0x04e7,0x04e6}, +{0x10ce6,0x10ca6,0x10ce6,0x10ca6},{0x04e7,0x04e6,0x04e7,0x04e6},{0x10ce7,0x10ca7,0x10ce7,0x10ca7},{0x24e7,0x24cd,0x24e7,0x24cd}, +{0x10ce8,0x10ca8,0x10ce8,0x10ca8},{0x24e8,0x24ce,0x24e8,0x24ce},{0x04e8,0x04e8,0x04e9,0x04e8},{0x04e9,0x04e8,0x04e9,0x04e8}, +{0x10ce9,0x10ca9,0x10ce9,0x10ca9},{0x24e9,0x24cf,0x24e9,0x24cf},{0x04ea,0x04ea,0x04eb,0x04ea},{0x10cea,0x10caa,0x10cea,0x10caa}, +{0x04eb,0x04ea,0x04eb,0x04ea},{0x2ceb,0x2ceb,0x2cec,0x2ceb},{0x10ceb,0x10cab,0x10ceb,0x10cab},{0x04ec,0x04ec,0x04ed,0x04ec}, +{0x2cec,0x2ceb,0x2cec,0x2ceb},{0x10cec,0x10cac,0x10cec,0x10cac},{0x04ed,0x04ec,0x04ed,0x04ec},{0x2ced,0x2ced,0x2cee,0x2ced}, +{0x10ced,0x10cad,0x10ced,0x10cad},{0x2cee,0x2ced,0x2cee,0x2ced},{0x04ee,0x04ee,0x04ef,0x04ee},{0x10cee,0x10cae,0x10cee,0x10cae}, +{0x04ef,0x04ee,0x04ef,0x04ee},{0x10cef,0x10caf,0x10cef,0x10caf},{0x04f0,0x04f0,0x04f1,0x04f0},{0x10cf0,0x10cb0,0x10cf0,0x10cb0}, {0x04f1,0x04f0,0x04f1,0x04f0},{0x10cf1,0x10cb1,0x10cf1,0x10cb1},{0x04f2,0x04f2,0x04f3,0x04f2},{0x10cf2,0x10cb2,0x10cf2,0x10cb2}, -{0x2cf2,0x2cf2,0x2cf3,0x2cf2},{0x2cf3,0x2cf2,0x2cf3,0x2cf2},{0x04f3,0x04f2,0x04f3,0x04f2},{0x04f4,0x04f4,0x04f5,0x04f4}, +{0x2cf2,0x2cf2,0x2cf3,0x2cf2},{0x04f3,0x04f2,0x04f3,0x04f2},{0x2cf3,0x2cf2,0x2cf3,0x2cf2},{0x04f4,0x04f4,0x04f5,0x04f4}, {0x04f5,0x04f4,0x04f5,0x04f4},{0x04f6,0x04f6,0x04f7,0x04f6},{0x04f7,0x04f6,0x04f7,0x04f6},{0x04f8,0x04f8,0x04f9,0x04f8}, {0x04f9,0x04f8,0x04f9,0x04f8},{0x04fa,0x04fa,0x04fb,0x04fa},{0x04fb,0x04fa,0x04fb,0x04fa},{0x04fc,0x04fc,0x04fd,0x04fc}, -{0x04fd,0x04fc,0x04fd,0x04fc},{0x04fe,0x04fe,0x04ff,0x04fe},{0x04ff,0x04fe,0x04ff,0x04fe},{0x2d00,0x10a0,0x2d00,0x10a0}, -{0x0500,0x0500,0x0501,0x0500},{0x2d01,0x10a1,0x2d01,0x10a1},{0x0501,0x0500,0x0501,0x0500},{0x2d02,0x10a2,0x2d02,0x10a2}, -{0x0502,0x0502,0x0503,0x0502},{0x0503,0x0502,0x0503,0x0502},{0x2d03,0x10a3,0x2d03,0x10a3},{0x0504,0x0504,0x0505,0x0504}, -{0x2d04,0x10a4,0x2d04,0x10a4},{0x2d05,0x10a5,0x2d05,0x10a5},{0x0505,0x0504,0x0505,0x0504},{0x0506,0x0506,0x0507,0x0506}, -{0x2d06,0x10a6,0x2d06,0x10a6},{0x2d07,0x10a7,0x2d07,0x10a7},{0x0507,0x0506,0x0507,0x0506},{0x2d08,0x10a8,0x2d08,0x10a8}, -{0x0508,0x0508,0x0509,0x0508},{0x2d09,0x10a9,0x2d09,0x10a9},{0x0509,0x0508,0x0509,0x0508},{0x050a,0x050a,0x050b,0x050a}, -{0x2d0a,0x10aa,0x2d0a,0x10aa},{0x2d0b,0x10ab,0x2d0b,0x10ab},{0x050b,0x050a,0x050b,0x050a},{0x050c,0x050c,0x050d,0x050c}, -{0x2d0c,0x10ac,0x2d0c,0x10ac},{0x2d0d,0x10ad,0x2d0d,0x10ad},{0x050d,0x050c,0x050d,0x050c},{0x2d0e,0x10ae,0x2d0e,0x10ae}, -{0x050e,0x050e,0x050f,0x050e},{0x2d0f,0x10af,0x2d0f,0x10af},{0x050f,0x050e,0x050f,0x050e},{0x2d10,0x10b0,0x2d10,0x10b0}, -{0x0510,0x0510,0x0511,0x0510},{0x0511,0x0510,0x0511,0x0510},{0x2d11,0x10b1,0x2d11,0x10b1},{0x0512,0x0512,0x0513,0x0512}, +{0x04fd,0x04fc,0x04fd,0x04fc},{0x04fe,0x04fe,0x04ff,0x04fe},{0x04ff,0x04fe,0x04ff,0x04fe},{0x0500,0x0500,0x0501,0x0500}, +{0x2d00,0x10a0,0x2d00,0x10a0},{0x2d01,0x10a1,0x2d01,0x10a1},{0x0501,0x0500,0x0501,0x0500},{0x2d02,0x10a2,0x2d02,0x10a2}, +{0x0502,0x0502,0x0503,0x0502},{0x2d03,0x10a3,0x2d03,0x10a3},{0x0503,0x0502,0x0503,0x0502},{0x2d04,0x10a4,0x2d04,0x10a4}, +{0x0504,0x0504,0x0505,0x0504},{0x0505,0x0504,0x0505,0x0504},{0x2d05,0x10a5,0x2d05,0x10a5},{0x2d06,0x10a6,0x2d06,0x10a6}, +{0x0506,0x0506,0x0507,0x0506},{0x0507,0x0506,0x0507,0x0506},{0x2d07,0x10a7,0x2d07,0x10a7},{0x0508,0x0508,0x0509,0x0508}, +{0x2d08,0x10a8,0x2d08,0x10a8},{0x2d09,0x10a9,0x2d09,0x10a9},{0x0509,0x0508,0x0509,0x0508},{0x2d0a,0x10aa,0x2d0a,0x10aa}, +{0x050a,0x050a,0x050b,0x050a},{0x050b,0x050a,0x050b,0x050a},{0x2d0b,0x10ab,0x2d0b,0x10ab},{0x2d0c,0x10ac,0x2d0c,0x10ac}, +{0x050c,0x050c,0x050d,0x050c},{0x050d,0x050c,0x050d,0x050c},{0x2d0d,0x10ad,0x2d0d,0x10ad},{0x050e,0x050e,0x050f,0x050e}, +{0x2d0e,0x10ae,0x2d0e,0x10ae},{0x050f,0x050e,0x050f,0x050e},{0x2d0f,0x10af,0x2d0f,0x10af},{0x0510,0x0510,0x0511,0x0510}, +{0x2d10,0x10b0,0x2d10,0x10b0},{0x2d11,0x10b1,0x2d11,0x10b1},{0x0511,0x0510,0x0511,0x0510},{0x0512,0x0512,0x0513,0x0512}, {0x2d12,0x10b2,0x2d12,0x10b2},{0x0513,0x0512,0x0513,0x0512},{0x2d13,0x10b3,0x2d13,0x10b3},{0x2d14,0x10b4,0x2d14,0x10b4}, -{0x0514,0x0514,0x0515,0x0514},{0x0515,0x0514,0x0515,0x0514},{0x2d15,0x10b5,0x2d15,0x10b5},{0x2d16,0x10b6,0x2d16,0x10b6}, -{0x0516,0x0516,0x0517,0x0516},{0x0517,0x0516,0x0517,0x0516},{0x2d17,0x10b7,0x2d17,0x10b7},{0x0518,0x0518,0x0519,0x0518}, -{0x2d18,0x10b8,0x2d18,0x10b8},{0x0519,0x0518,0x0519,0x0518},{0x2d19,0x10b9,0x2d19,0x10b9},{0x2d1a,0x10ba,0x2d1a,0x10ba}, -{0x051a,0x051a,0x051b,0x051a},{0x051b,0x051a,0x051b,0x051a},{0x2d1b,0x10bb,0x2d1b,0x10bb},{0x051c,0x051c,0x051d,0x051c}, -{0x2d1c,0x10bc,0x2d1c,0x10bc},{0x2d1d,0x10bd,0x2d1d,0x10bd},{0x051d,0x051c,0x051d,0x051c},{0x2d1e,0x10be,0x2d1e,0x10be}, +{0x0514,0x0514,0x0515,0x0514},{0x2d15,0x10b5,0x2d15,0x10b5},{0x0515,0x0514,0x0515,0x0514},{0x0516,0x0516,0x0517,0x0516}, +{0x2d16,0x10b6,0x2d16,0x10b6},{0x0517,0x0516,0x0517,0x0516},{0x2d17,0x10b7,0x2d17,0x10b7},{0x2d18,0x10b8,0x2d18,0x10b8}, +{0x0518,0x0518,0x0519,0x0518},{0x0519,0x0518,0x0519,0x0518},{0x2d19,0x10b9,0x2d19,0x10b9},{0x051a,0x051a,0x051b,0x051a}, +{0x2d1a,0x10ba,0x2d1a,0x10ba},{0x051b,0x051a,0x051b,0x051a},{0x2d1b,0x10bb,0x2d1b,0x10bb},{0x2d1c,0x10bc,0x2d1c,0x10bc}, +{0x051c,0x051c,0x051d,0x051c},{0x051d,0x051c,0x051d,0x051c},{0x2d1d,0x10bd,0x2d1d,0x10bd},{0x2d1e,0x10be,0x2d1e,0x10be}, {0x051e,0x051e,0x051f,0x051e},{0x051f,0x051e,0x051f,0x051e},{0x2d1f,0x10bf,0x2d1f,0x10bf},{0x0520,0x0520,0x0521,0x0520}, -{0x2d20,0x10c0,0x2d20,0x10c0},{0x2d21,0x10c1,0x2d21,0x10c1},{0x0521,0x0520,0x0521,0x0520},{0x0522,0x0522,0x0523,0x0522}, -{0x2d22,0x10c2,0x2d22,0x10c2},{0x2d23,0x10c3,0x2d23,0x10c3},{0x0523,0x0522,0x0523,0x0522},{0x2d24,0x10c4,0x2d24,0x10c4}, -{0x0524,0x0524,0x0525,0x0524},{0x2d25,0x10c5,0x2d25,0x10c5},{0x0525,0x0524,0x0525,0x0524},{0x0526,0x0526,0x0527,0x0526}, +{0x2d20,0x10c0,0x2d20,0x10c0},{0x0521,0x0520,0x0521,0x0520},{0x2d21,0x10c1,0x2d21,0x10c1},{0x0522,0x0522,0x0523,0x0522}, +{0x2d22,0x10c2,0x2d22,0x10c2},{0x0523,0x0522,0x0523,0x0522},{0x2d23,0x10c3,0x2d23,0x10c3},{0x0524,0x0524,0x0525,0x0524}, +{0x2d24,0x10c4,0x2d24,0x10c4},{0x2d25,0x10c5,0x2d25,0x10c5},{0x0525,0x0524,0x0525,0x0524},{0x0526,0x0526,0x0527,0x0526}, {0x2d27,0x10c7,0x2d27,0x10c7},{0x0527,0x0526,0x0527,0x0526},{0x0528,0x0528,0x0529,0x0528},{0x0529,0x0528,0x0529,0x0528}, -{0x052a,0x052a,0x052b,0x052a},{0x052b,0x052a,0x052b,0x052a},{0x052c,0x052c,0x052d,0x052c},{0x2d2d,0x10cd,0x2d2d,0x10cd}, -{0x052d,0x052c,0x052d,0x052c},{0x052e,0x052e,0x052f,0x052e},{0x052f,0x052e,0x052f,0x052e},{0x0531,0x0531,0x0561,0x0531}, +{0x052a,0x052a,0x052b,0x052a},{0x052b,0x052a,0x052b,0x052a},{0x052c,0x052c,0x052d,0x052c},{0x052d,0x052c,0x052d,0x052c}, +{0x2d2d,0x10cd,0x2d2d,0x10cd},{0x052e,0x052e,0x052f,0x052e},{0x052f,0x052e,0x052f,0x052e},{0x0531,0x0531,0x0561,0x0531}, {0x0532,0x0532,0x0562,0x0532},{0x0533,0x0533,0x0563,0x0533},{0x0534,0x0534,0x0564,0x0534},{0x0535,0x0535,0x0565,0x0535}, {0x0536,0x0536,0x0566,0x0536},{0x0537,0x0537,0x0567,0x0537},{0x0538,0x0538,0x0568,0x0538},{0x0539,0x0539,0x0569,0x0539}, {0x053a,0x053a,0x056a,0x053a},{0x053b,0x053b,0x056b,0x053b},{0x053c,0x053c,0x056c,0x053c},{0x053d,0x053d,0x056d,0x053d}, @@ -468,45 +468,45 @@ const unicode_char unicode_case_tab[][4]={ {0x1e33,0x1e32,0x1e33,0x1e32},{0x1e34,0x1e34,0x1e35,0x1e34},{0x1e35,0x1e34,0x1e35,0x1e34},{0x1e36,0x1e36,0x1e37,0x1e36}, {0x1e37,0x1e36,0x1e37,0x1e36},{0x1e38,0x1e38,0x1e39,0x1e38},{0x1e39,0x1e38,0x1e39,0x1e38},{0x1e3a,0x1e3a,0x1e3b,0x1e3a}, {0x1e3b,0x1e3a,0x1e3b,0x1e3a},{0x1e3c,0x1e3c,0x1e3d,0x1e3c},{0x1e3d,0x1e3c,0x1e3d,0x1e3c},{0x1e3e,0x1e3e,0x1e3f,0x1e3e}, -{0x1e3f,0x1e3e,0x1e3f,0x1e3e},{0xa640,0xa640,0xa641,0xa640},{0x1e40,0x1e40,0x1e41,0x1e40},{0xa641,0xa640,0xa641,0xa640}, -{0x1e41,0x1e40,0x1e41,0x1e40},{0x1e42,0x1e42,0x1e43,0x1e42},{0xa642,0xa642,0xa643,0xa642},{0x1e43,0x1e42,0x1e43,0x1e42}, -{0xa643,0xa642,0xa643,0xa642},{0xa644,0xa644,0xa645,0xa644},{0x1e44,0x1e44,0x1e45,0x1e44},{0x1e45,0x1e44,0x1e45,0x1e44}, -{0xa645,0xa644,0xa645,0xa644},{0xa646,0xa646,0xa647,0xa646},{0x1e46,0x1e46,0x1e47,0x1e46},{0x1e47,0x1e46,0x1e47,0x1e46}, -{0xa647,0xa646,0xa647,0xa646},{0xa648,0xa648,0xa649,0xa648},{0x1e48,0x1e48,0x1e49,0x1e48},{0x1e49,0x1e48,0x1e49,0x1e48}, -{0xa649,0xa648,0xa649,0xa648},{0xa64a,0xa64a,0xa64b,0xa64a},{0x1e4a,0x1e4a,0x1e4b,0x1e4a},{0x1e4b,0x1e4a,0x1e4b,0x1e4a}, -{0xa64b,0xa64a,0xa64b,0xa64a},{0x1e4c,0x1e4c,0x1e4d,0x1e4c},{0xa64c,0xa64c,0xa64d,0xa64c},{0x1e4d,0x1e4c,0x1e4d,0x1e4c}, -{0xa64d,0xa64c,0xa64d,0xa64c},{0xa64e,0xa64e,0xa64f,0xa64e},{0x1e4e,0x1e4e,0x1e4f,0x1e4e},{0xa64f,0xa64e,0xa64f,0xa64e}, -{0x1e4f,0x1e4e,0x1e4f,0x1e4e},{0x1e50,0x1e50,0x1e51,0x1e50},{0xa650,0xa650,0xa651,0xa650},{0xa651,0xa650,0xa651,0xa650}, -{0x1e51,0x1e50,0x1e51,0x1e50},{0xa652,0xa652,0xa653,0xa652},{0x1e52,0x1e52,0x1e53,0x1e52},{0x1e53,0x1e52,0x1e53,0x1e52}, +{0x1e3f,0x1e3e,0x1e3f,0x1e3e},{0xa640,0xa640,0xa641,0xa640},{0x1e40,0x1e40,0x1e41,0x1e40},{0x1e41,0x1e40,0x1e41,0x1e40}, +{0xa641,0xa640,0xa641,0xa640},{0xa642,0xa642,0xa643,0xa642},{0x1e42,0x1e42,0x1e43,0x1e42},{0xa643,0xa642,0xa643,0xa642}, +{0x1e43,0x1e42,0x1e43,0x1e42},{0x1e44,0x1e44,0x1e45,0x1e44},{0xa644,0xa644,0xa645,0xa644},{0xa645,0xa644,0xa645,0xa644}, +{0x1e45,0x1e44,0x1e45,0x1e44},{0x1e46,0x1e46,0x1e47,0x1e46},{0xa646,0xa646,0xa647,0xa646},{0xa647,0xa646,0xa647,0xa646}, +{0x1e47,0x1e46,0x1e47,0x1e46},{0x1e48,0x1e48,0x1e49,0x1e48},{0xa648,0xa648,0xa649,0xa648},{0x1e49,0x1e48,0x1e49,0x1e48}, +{0xa649,0xa648,0xa649,0xa648},{0xa64a,0xa64a,0xa64b,0xa64a},{0x1e4a,0x1e4a,0x1e4b,0x1e4a},{0xa64b,0xa64a,0xa64b,0xa64a}, +{0x1e4b,0x1e4a,0x1e4b,0x1e4a},{0xa64c,0xa64c,0xa64d,0xa64c},{0x1e4c,0x1e4c,0x1e4d,0x1e4c},{0x1e4d,0x1e4c,0x1e4d,0x1e4c}, +{0xa64d,0xa64c,0xa64d,0xa64c},{0x1e4e,0x1e4e,0x1e4f,0x1e4e},{0xa64e,0xa64e,0xa64f,0xa64e},{0x1e4f,0x1e4e,0x1e4f,0x1e4e}, +{0xa64f,0xa64e,0xa64f,0xa64e},{0xa650,0xa650,0xa651,0xa650},{0x1e50,0x1e50,0x1e51,0x1e50},{0xa651,0xa650,0xa651,0xa650}, +{0x1e51,0x1e50,0x1e51,0x1e50},{0x1e52,0x1e52,0x1e53,0x1e52},{0xa652,0xa652,0xa653,0xa652},{0x1e53,0x1e52,0x1e53,0x1e52}, {0xa653,0xa652,0xa653,0xa652},{0x1e54,0x1e54,0x1e55,0x1e54},{0xa654,0xa654,0xa655,0xa654},{0x1e55,0x1e54,0x1e55,0x1e54}, -{0xa655,0xa654,0xa655,0xa654},{0x1e56,0x1e56,0x1e57,0x1e56},{0xa656,0xa656,0xa657,0xa656},{0x1e57,0x1e56,0x1e57,0x1e56}, -{0xa657,0xa656,0xa657,0xa656},{0xa658,0xa658,0xa659,0xa658},{0x1e58,0x1e58,0x1e59,0x1e58},{0xa659,0xa658,0xa659,0xa658}, -{0x1e59,0x1e58,0x1e59,0x1e58},{0x1e5a,0x1e5a,0x1e5b,0x1e5a},{0xa65a,0xa65a,0xa65b,0xa65a},{0x1e5b,0x1e5a,0x1e5b,0x1e5a}, -{0xa65b,0xa65a,0xa65b,0xa65a},{0xa65c,0xa65c,0xa65d,0xa65c},{0x1e5c,0x1e5c,0x1e5d,0x1e5c},{0xa65d,0xa65c,0xa65d,0xa65c}, -{0x1e5d,0x1e5c,0x1e5d,0x1e5c},{0x1e5e,0x1e5e,0x1e5f,0x1e5e},{0xa65e,0xa65e,0xa65f,0xa65e},{0xa65f,0xa65e,0xa65f,0xa65e}, -{0x1e5f,0x1e5e,0x1e5f,0x1e5e},{0xa660,0xa660,0xa661,0xa660},{0x1e60,0x1e60,0x1e61,0x1e60},{0x1e61,0x1e60,0x1e61,0x1e60}, -{0xa661,0xa660,0xa661,0xa660},{0x1e62,0x1e62,0x1e63,0x1e62},{0xa662,0xa662,0xa663,0xa662},{0x1e63,0x1e62,0x1e63,0x1e62}, -{0xa663,0xa662,0xa663,0xa662},{0xa664,0xa664,0xa665,0xa664},{0x1e64,0x1e64,0x1e65,0x1e64},{0x1e65,0x1e64,0x1e65,0x1e64}, -{0xa665,0xa664,0xa665,0xa664},{0xa666,0xa666,0xa667,0xa666},{0x1e66,0x1e66,0x1e67,0x1e66},{0x1e67,0x1e66,0x1e67,0x1e66}, -{0xa667,0xa666,0xa667,0xa666},{0x1e68,0x1e68,0x1e69,0x1e68},{0xa668,0xa668,0xa669,0xa668},{0xa669,0xa668,0xa669,0xa668}, -{0x1e69,0x1e68,0x1e69,0x1e68},{0xa66a,0xa66a,0xa66b,0xa66a},{0x1e6a,0x1e6a,0x1e6b,0x1e6a},{0x1e6b,0x1e6a,0x1e6b,0x1e6a}, -{0xa66b,0xa66a,0xa66b,0xa66a},{0xa66c,0xa66c,0xa66d,0xa66c},{0x1e6c,0x1e6c,0x1e6d,0x1e6c},{0xa66d,0xa66c,0xa66d,0xa66c}, -{0x1e6d,0x1e6c,0x1e6d,0x1e6c},{0x1e6e,0x1e6e,0x1e6f,0x1e6e},{0x1e6f,0x1e6e,0x1e6f,0x1e6e},{0x1e70,0x1e70,0x1e71,0x1e70}, +{0xa655,0xa654,0xa655,0xa654},{0x1e56,0x1e56,0x1e57,0x1e56},{0xa656,0xa656,0xa657,0xa656},{0xa657,0xa656,0xa657,0xa656}, +{0x1e57,0x1e56,0x1e57,0x1e56},{0x1e58,0x1e58,0x1e59,0x1e58},{0xa658,0xa658,0xa659,0xa658},{0xa659,0xa658,0xa659,0xa658}, +{0x1e59,0x1e58,0x1e59,0x1e58},{0xa65a,0xa65a,0xa65b,0xa65a},{0x1e5a,0x1e5a,0x1e5b,0x1e5a},{0x1e5b,0x1e5a,0x1e5b,0x1e5a}, +{0xa65b,0xa65a,0xa65b,0xa65a},{0x1e5c,0x1e5c,0x1e5d,0x1e5c},{0xa65c,0xa65c,0xa65d,0xa65c},{0xa65d,0xa65c,0xa65d,0xa65c}, +{0x1e5d,0x1e5c,0x1e5d,0x1e5c},{0x1e5e,0x1e5e,0x1e5f,0x1e5e},{0xa65e,0xa65e,0xa65f,0xa65e},{0x1e5f,0x1e5e,0x1e5f,0x1e5e}, +{0xa65f,0xa65e,0xa65f,0xa65e},{0xa660,0xa660,0xa661,0xa660},{0x1e60,0x1e60,0x1e61,0x1e60},{0x1e61,0x1e60,0x1e61,0x1e60}, +{0xa661,0xa660,0xa661,0xa660},{0x1e62,0x1e62,0x1e63,0x1e62},{0xa662,0xa662,0xa663,0xa662},{0xa663,0xa662,0xa663,0xa662}, +{0x1e63,0x1e62,0x1e63,0x1e62},{0xa664,0xa664,0xa665,0xa664},{0x1e64,0x1e64,0x1e65,0x1e64},{0xa665,0xa664,0xa665,0xa664}, +{0x1e65,0x1e64,0x1e65,0x1e64},{0x1e66,0x1e66,0x1e67,0x1e66},{0xa666,0xa666,0xa667,0xa666},{0xa667,0xa666,0xa667,0xa666}, +{0x1e67,0x1e66,0x1e67,0x1e66},{0x1e68,0x1e68,0x1e69,0x1e68},{0xa668,0xa668,0xa669,0xa668},{0x1e69,0x1e68,0x1e69,0x1e68}, +{0xa669,0xa668,0xa669,0xa668},{0x1e6a,0x1e6a,0x1e6b,0x1e6a},{0xa66a,0xa66a,0xa66b,0xa66a},{0xa66b,0xa66a,0xa66b,0xa66a}, +{0x1e6b,0x1e6a,0x1e6b,0x1e6a},{0xa66c,0xa66c,0xa66d,0xa66c},{0x1e6c,0x1e6c,0x1e6d,0x1e6c},{0x1e6d,0x1e6c,0x1e6d,0x1e6c}, +{0xa66d,0xa66c,0xa66d,0xa66c},{0x1e6e,0x1e6e,0x1e6f,0x1e6e},{0x1e6f,0x1e6e,0x1e6f,0x1e6e},{0x1e70,0x1e70,0x1e71,0x1e70}, {0x1e71,0x1e70,0x1e71,0x1e70},{0x1e72,0x1e72,0x1e73,0x1e72},{0x1e73,0x1e72,0x1e73,0x1e72},{0x1e74,0x1e74,0x1e75,0x1e74}, {0x1e75,0x1e74,0x1e75,0x1e74},{0x1e76,0x1e76,0x1e77,0x1e76},{0x1e77,0x1e76,0x1e77,0x1e76},{0x1e78,0x1e78,0x1e79,0x1e78}, {0x1e79,0x1e78,0x1e79,0x1e78},{0x1e7a,0x1e7a,0x1e7b,0x1e7a},{0x1e7b,0x1e7a,0x1e7b,0x1e7a},{0x1e7c,0x1e7c,0x1e7d,0x1e7c}, -{0x1e7d,0x1e7c,0x1e7d,0x1e7c},{0x1e7e,0x1e7e,0x1e7f,0x1e7e},{0x1e7f,0x1e7e,0x1e7f,0x1e7e},{0x1e80,0x1e80,0x1e81,0x1e80}, -{0xa680,0xa680,0xa681,0xa680},{0xa681,0xa680,0xa681,0xa680},{0x1e81,0x1e80,0x1e81,0x1e80},{0x1e82,0x1e82,0x1e83,0x1e82}, -{0xa682,0xa682,0xa683,0xa682},{0xa683,0xa682,0xa683,0xa682},{0x1e83,0x1e82,0x1e83,0x1e82},{0xa684,0xa684,0xa685,0xa684}, -{0x1e84,0x1e84,0x1e85,0x1e84},{0xa685,0xa684,0xa685,0xa684},{0x1e85,0x1e84,0x1e85,0x1e84},{0x1e86,0x1e86,0x1e87,0x1e86}, -{0xa686,0xa686,0xa687,0xa686},{0xa687,0xa686,0xa687,0xa686},{0x1e87,0x1e86,0x1e87,0x1e86},{0x1e88,0x1e88,0x1e89,0x1e88}, -{0xa688,0xa688,0xa689,0xa688},{0xa689,0xa688,0xa689,0xa688},{0x1e89,0x1e88,0x1e89,0x1e88},{0x1e8a,0x1e8a,0x1e8b,0x1e8a}, +{0x1e7d,0x1e7c,0x1e7d,0x1e7c},{0x1e7e,0x1e7e,0x1e7f,0x1e7e},{0x1e7f,0x1e7e,0x1e7f,0x1e7e},{0xa680,0xa680,0xa681,0xa680}, +{0x1e80,0x1e80,0x1e81,0x1e80},{0xa681,0xa680,0xa681,0xa680},{0x1e81,0x1e80,0x1e81,0x1e80},{0xa682,0xa682,0xa683,0xa682}, +{0x1e82,0x1e82,0x1e83,0x1e82},{0xa683,0xa682,0xa683,0xa682},{0x1e83,0x1e82,0x1e83,0x1e82},{0xa684,0xa684,0xa685,0xa684}, +{0x1e84,0x1e84,0x1e85,0x1e84},{0x1e85,0x1e84,0x1e85,0x1e84},{0xa685,0xa684,0xa685,0xa684},{0x1e86,0x1e86,0x1e87,0x1e86}, +{0xa686,0xa686,0xa687,0xa686},{0xa687,0xa686,0xa687,0xa686},{0x1e87,0x1e86,0x1e87,0x1e86},{0xa688,0xa688,0xa689,0xa688}, +{0x1e88,0x1e88,0x1e89,0x1e88},{0x1e89,0x1e88,0x1e89,0x1e88},{0xa689,0xa688,0xa689,0xa688},{0x1e8a,0x1e8a,0x1e8b,0x1e8a}, {0xa68a,0xa68a,0xa68b,0xa68a},{0xa68b,0xa68a,0xa68b,0xa68a},{0x1e8b,0x1e8a,0x1e8b,0x1e8a},{0x1e8c,0x1e8c,0x1e8d,0x1e8c}, -{0xa68c,0xa68c,0xa68d,0xa68c},{0xa68d,0xa68c,0xa68d,0xa68c},{0x1e8d,0x1e8c,0x1e8d,0x1e8c},{0x1e8e,0x1e8e,0x1e8f,0x1e8e}, -{0xa68e,0xa68e,0xa68f,0xa68e},{0xa68f,0xa68e,0xa68f,0xa68e},{0x1e8f,0x1e8e,0x1e8f,0x1e8e},{0xa690,0xa690,0xa691,0xa690}, +{0xa68c,0xa68c,0xa68d,0xa68c},{0x1e8d,0x1e8c,0x1e8d,0x1e8c},{0xa68d,0xa68c,0xa68d,0xa68c},{0xa68e,0xa68e,0xa68f,0xa68e}, +{0x1e8e,0x1e8e,0x1e8f,0x1e8e},{0x1e8f,0x1e8e,0x1e8f,0x1e8e},{0xa68f,0xa68e,0xa68f,0xa68e},{0xa690,0xa690,0xa691,0xa690}, {0x1e90,0x1e90,0x1e91,0x1e90},{0xa691,0xa690,0xa691,0xa690},{0x1e91,0x1e90,0x1e91,0x1e90},{0x1e92,0x1e92,0x1e93,0x1e92}, -{0xa692,0xa692,0xa693,0xa692},{0x1e93,0x1e92,0x1e93,0x1e92},{0xa693,0xa692,0xa693,0xa692},{0xa694,0xa694,0xa695,0xa694}, -{0x1e94,0x1e94,0x1e95,0x1e94},{0xa695,0xa694,0xa695,0xa694},{0x1e95,0x1e94,0x1e95,0x1e94},{0xa696,0xa696,0xa697,0xa696}, +{0xa692,0xa692,0xa693,0xa692},{0xa693,0xa692,0xa693,0xa692},{0x1e93,0x1e92,0x1e93,0x1e92},{0xa694,0xa694,0xa695,0xa694}, +{0x1e94,0x1e94,0x1e95,0x1e94},{0x1e95,0x1e94,0x1e95,0x1e94},{0xa695,0xa694,0xa695,0xa694},{0xa696,0xa696,0xa697,0xa696}, {0xa697,0xa696,0xa697,0xa696},{0xa698,0xa698,0xa699,0xa698},{0xa699,0xa698,0xa699,0xa698},{0xa69a,0xa69a,0xa69b,0xa69a}, {0x1e9b,0x1e60,0x1e9b,0x1e60},{0xa69b,0xa69a,0xa69b,0xa69a},{0x1e9e,0x1e9e,0x00df,0x1e9e},{0x1ea0,0x1ea0,0x1ea1,0x1ea0}, {0x1ea1,0x1ea0,0x1ea1,0x1ea0},{0x1ea2,0x1ea2,0x1ea3,0x1ea2},{0x1ea3,0x1ea2,0x1ea3,0x1ea2},{0x1ea4,0x1ea4,0x1ea5,0x1ea4}, @@ -540,82 +540,82 @@ const unicode_char unicode_case_tab[][4]={ {0x1f11,0x1f19,0x1f11,0x1f19},{0x1f12,0x1f1a,0x1f12,0x1f1a},{0x1f13,0x1f1b,0x1f13,0x1f1b},{0x1f14,0x1f1c,0x1f14,0x1f1c}, {0x1f15,0x1f1d,0x1f15,0x1f1d},{0x1f18,0x1f18,0x1f10,0x1f18},{0x1f19,0x1f19,0x1f11,0x1f19},{0x1f1a,0x1f1a,0x1f12,0x1f1a}, {0x1f1b,0x1f1b,0x1f13,0x1f1b},{0x1f1c,0x1f1c,0x1f14,0x1f1c},{0x1f1d,0x1f1d,0x1f15,0x1f1d},{0x1f20,0x1f28,0x1f20,0x1f28}, -{0xff21,0xff21,0xff41,0xff21},{0x1f21,0x1f29,0x1f21,0x1f29},{0xa722,0xa722,0xa723,0xa722},{0x1f22,0x1f2a,0x1f22,0x1f2a}, -{0xff22,0xff22,0xff42,0xff22},{0x1f23,0x1f2b,0x1f23,0x1f2b},{0xa723,0xa722,0xa723,0xa722},{0xff23,0xff23,0xff43,0xff23}, -{0x1f24,0x1f2c,0x1f24,0x1f2c},{0xff24,0xff24,0xff44,0xff24},{0xa724,0xa724,0xa725,0xa724},{0x1f25,0x1f2d,0x1f25,0x1f2d}, -{0xff25,0xff25,0xff45,0xff25},{0xa725,0xa724,0xa725,0xa724},{0x1f26,0x1f2e,0x1f26,0x1f2e},{0xa726,0xa726,0xa727,0xa726}, -{0xff26,0xff26,0xff46,0xff26},{0x1f27,0x1f2f,0x1f27,0x1f2f},{0xff27,0xff27,0xff47,0xff27},{0xa727,0xa726,0xa727,0xa726}, -{0xa728,0xa728,0xa729,0xa728},{0x1f28,0x1f28,0x1f20,0x1f28},{0xff28,0xff28,0xff48,0xff28},{0x1f29,0x1f29,0x1f21,0x1f29}, +{0x1f21,0x1f29,0x1f21,0x1f29},{0xff21,0xff21,0xff41,0xff21},{0xff22,0xff22,0xff42,0xff22},{0xa722,0xa722,0xa723,0xa722}, +{0x1f22,0x1f2a,0x1f22,0x1f2a},{0x1f23,0x1f2b,0x1f23,0x1f2b},{0xa723,0xa722,0xa723,0xa722},{0xff23,0xff23,0xff43,0xff23}, +{0xa724,0xa724,0xa725,0xa724},{0xff24,0xff24,0xff44,0xff24},{0x1f24,0x1f2c,0x1f24,0x1f2c},{0xff25,0xff25,0xff45,0xff25}, +{0x1f25,0x1f2d,0x1f25,0x1f2d},{0xa725,0xa724,0xa725,0xa724},{0x1f26,0x1f2e,0x1f26,0x1f2e},{0xa726,0xa726,0xa727,0xa726}, +{0xff26,0xff26,0xff46,0xff26},{0xff27,0xff27,0xff47,0xff27},{0x1f27,0x1f2f,0x1f27,0x1f2f},{0xa727,0xa726,0xa727,0xa726}, +{0xff28,0xff28,0xff48,0xff28},{0xa728,0xa728,0xa729,0xa728},{0x1f28,0x1f28,0x1f20,0x1f28},{0x1f29,0x1f29,0x1f21,0x1f29}, {0xa729,0xa728,0xa729,0xa728},{0xff29,0xff29,0xff49,0xff29},{0x1f2a,0x1f2a,0x1f22,0x1f2a},{0xff2a,0xff2a,0xff4a,0xff2a}, {0xa72a,0xa72a,0xa72b,0xa72a},{0xa72b,0xa72a,0xa72b,0xa72a},{0x1f2b,0x1f2b,0x1f23,0x1f2b},{0xff2b,0xff2b,0xff4b,0xff2b}, -{0x1f2c,0x1f2c,0x1f24,0x1f2c},{0xff2c,0xff2c,0xff4c,0xff2c},{0xa72c,0xa72c,0xa72d,0xa72c},{0x1f2d,0x1f2d,0x1f25,0x1f2d}, -{0xa72d,0xa72c,0xa72d,0xa72c},{0xff2d,0xff2d,0xff4d,0xff2d},{0x1f2e,0x1f2e,0x1f26,0x1f2e},{0xa72e,0xa72e,0xa72f,0xa72e}, -{0xff2e,0xff2e,0xff4e,0xff2e},{0xff2f,0xff2f,0xff4f,0xff2f},{0xa72f,0xa72e,0xa72f,0xa72e},{0x1f2f,0x1f2f,0x1f27,0x1f2f}, +{0xff2c,0xff2c,0xff4c,0xff2c},{0x1f2c,0x1f2c,0x1f24,0x1f2c},{0xa72c,0xa72c,0xa72d,0xa72c},{0xff2d,0xff2d,0xff4d,0xff2d}, +{0x1f2d,0x1f2d,0x1f25,0x1f2d},{0xa72d,0xa72c,0xa72d,0xa72c},{0xff2e,0xff2e,0xff4e,0xff2e},{0xa72e,0xa72e,0xa72f,0xa72e}, +{0x1f2e,0x1f2e,0x1f26,0x1f2e},{0xff2f,0xff2f,0xff4f,0xff2f},{0xa72f,0xa72e,0xa72f,0xa72e},{0x1f2f,0x1f2f,0x1f27,0x1f2f}, {0x1f30,0x1f38,0x1f30,0x1f38},{0xff30,0xff30,0xff50,0xff30},{0x1f31,0x1f39,0x1f31,0x1f39},{0xff31,0xff31,0xff51,0xff31}, -{0x1f32,0x1f3a,0x1f32,0x1f3a},{0xa732,0xa732,0xa733,0xa732},{0xff32,0xff32,0xff52,0xff32},{0x1f33,0x1f3b,0x1f33,0x1f3b}, -{0xff33,0xff33,0xff53,0xff33},{0xa733,0xa732,0xa733,0xa732},{0xff34,0xff34,0xff54,0xff34},{0xa734,0xa734,0xa735,0xa734}, -{0x1f34,0x1f3c,0x1f34,0x1f3c},{0xa735,0xa734,0xa735,0xa734},{0x1f35,0x1f3d,0x1f35,0x1f3d},{0xff35,0xff35,0xff55,0xff35}, -{0x1f36,0x1f3e,0x1f36,0x1f3e},{0xff36,0xff36,0xff56,0xff36},{0xa736,0xa736,0xa737,0xa736},{0x1f37,0x1f3f,0x1f37,0x1f3f}, -{0xa737,0xa736,0xa737,0xa736},{0xff37,0xff37,0xff57,0xff37},{0x1f38,0x1f38,0x1f30,0x1f38},{0xa738,0xa738,0xa739,0xa738}, -{0xff38,0xff38,0xff58,0xff38},{0xa739,0xa738,0xa739,0xa738},{0x1f39,0x1f39,0x1f31,0x1f39},{0xff39,0xff39,0xff59,0xff39}, -{0xa73a,0xa73a,0xa73b,0xa73a},{0x1f3a,0x1f3a,0x1f32,0x1f3a},{0xff3a,0xff3a,0xff5a,0xff3a},{0xa73b,0xa73a,0xa73b,0xa73a}, -{0x1f3b,0x1f3b,0x1f33,0x1f3b},{0x1f3c,0x1f3c,0x1f34,0x1f3c},{0xa73c,0xa73c,0xa73d,0xa73c},{0xa73d,0xa73c,0xa73d,0xa73c}, -{0x1f3d,0x1f3d,0x1f35,0x1f3d},{0xa73e,0xa73e,0xa73f,0xa73e},{0x1f3e,0x1f3e,0x1f36,0x1f3e},{0xa73f,0xa73e,0xa73f,0xa73e}, +{0xff32,0xff32,0xff52,0xff32},{0xa732,0xa732,0xa733,0xa732},{0x1f32,0x1f3a,0x1f32,0x1f3a},{0xff33,0xff33,0xff53,0xff33}, +{0xa733,0xa732,0xa733,0xa732},{0x1f33,0x1f3b,0x1f33,0x1f3b},{0x1f34,0x1f3c,0x1f34,0x1f3c},{0xa734,0xa734,0xa735,0xa734}, +{0xff34,0xff34,0xff54,0xff34},{0xff35,0xff35,0xff55,0xff35},{0x1f35,0x1f3d,0x1f35,0x1f3d},{0xa735,0xa734,0xa735,0xa734}, +{0xa736,0xa736,0xa737,0xa736},{0x1f36,0x1f3e,0x1f36,0x1f3e},{0xff36,0xff36,0xff56,0xff36},{0xa737,0xa736,0xa737,0xa736}, +{0xff37,0xff37,0xff57,0xff37},{0x1f37,0x1f3f,0x1f37,0x1f3f},{0xa738,0xa738,0xa739,0xa738},{0x1f38,0x1f38,0x1f30,0x1f38}, +{0xff38,0xff38,0xff58,0xff38},{0xff39,0xff39,0xff59,0xff39},{0xa739,0xa738,0xa739,0xa738},{0x1f39,0x1f39,0x1f31,0x1f39}, +{0x1f3a,0x1f3a,0x1f32,0x1f3a},{0xff3a,0xff3a,0xff5a,0xff3a},{0xa73a,0xa73a,0xa73b,0xa73a},{0x1f3b,0x1f3b,0x1f33,0x1f3b}, +{0xa73b,0xa73a,0xa73b,0xa73a},{0x1f3c,0x1f3c,0x1f34,0x1f3c},{0xa73c,0xa73c,0xa73d,0xa73c},{0xa73d,0xa73c,0xa73d,0xa73c}, +{0x1f3d,0x1f3d,0x1f35,0x1f3d},{0x1f3e,0x1f3e,0x1f36,0x1f3e},{0xa73e,0xa73e,0xa73f,0xa73e},{0xa73f,0xa73e,0xa73f,0xa73e}, {0x1f3f,0x1f3f,0x1f37,0x1f3f},{0xa740,0xa740,0xa741,0xa740},{0x1f40,0x1f48,0x1f40,0x1f48},{0xa741,0xa740,0xa741,0xa740}, -{0x1f41,0x1f49,0x1f41,0x1f49},{0xff41,0xff21,0xff41,0xff21},{0xff42,0xff22,0xff42,0xff22},{0xa742,0xa742,0xa743,0xa742}, -{0x1f42,0x1f4a,0x1f42,0x1f4a},{0xff43,0xff23,0xff43,0xff23},{0xa743,0xa742,0xa743,0xa742},{0x1f43,0x1f4b,0x1f43,0x1f4b}, -{0xff44,0xff24,0xff44,0xff24},{0x1f44,0x1f4c,0x1f44,0x1f4c},{0xa744,0xa744,0xa745,0xa744},{0x1f45,0x1f4d,0x1f45,0x1f4d}, -{0xa745,0xa744,0xa745,0xa744},{0xff45,0xff25,0xff45,0xff25},{0xa746,0xa746,0xa747,0xa746},{0xff46,0xff26,0xff46,0xff26}, -{0xa747,0xa746,0xa747,0xa746},{0xff47,0xff27,0xff47,0xff27},{0xff48,0xff28,0xff48,0xff28},{0xa748,0xa748,0xa749,0xa748}, -{0x1f48,0x1f48,0x1f40,0x1f48},{0xa749,0xa748,0xa749,0xa748},{0xff49,0xff29,0xff49,0xff29},{0x1f49,0x1f49,0x1f41,0x1f49}, -{0xff4a,0xff2a,0xff4a,0xff2a},{0x1f4a,0x1f4a,0x1f42,0x1f4a},{0xa74a,0xa74a,0xa74b,0xa74a},{0xff4b,0xff2b,0xff4b,0xff2b}, -{0x1f4b,0x1f4b,0x1f43,0x1f4b},{0xa74b,0xa74a,0xa74b,0xa74a},{0xa74c,0xa74c,0xa74d,0xa74c},{0x1f4c,0x1f4c,0x1f44,0x1f4c}, -{0xff4c,0xff2c,0xff4c,0xff2c},{0xff4d,0xff2d,0xff4d,0xff2d},{0x1f4d,0x1f4d,0x1f45,0x1f4d},{0xa74d,0xa74c,0xa74d,0xa74c}, -{0xa74e,0xa74e,0xa74f,0xa74e},{0xff4e,0xff2e,0xff4e,0xff2e},{0xa74f,0xa74e,0xa74f,0xa74e},{0xff4f,0xff2f,0xff4f,0xff2f}, -{0xa750,0xa750,0xa751,0xa750},{0xff50,0xff30,0xff50,0xff30},{0xa751,0xa750,0xa751,0xa750},{0xff51,0xff31,0xff51,0xff31}, +{0xff41,0xff21,0xff41,0xff21},{0x1f41,0x1f49,0x1f41,0x1f49},{0x1f42,0x1f4a,0x1f42,0x1f4a},{0xff42,0xff22,0xff42,0xff22}, +{0xa742,0xa742,0xa743,0xa742},{0xff43,0xff23,0xff43,0xff23},{0x1f43,0x1f4b,0x1f43,0x1f4b},{0xa743,0xa742,0xa743,0xa742}, +{0xff44,0xff24,0xff44,0xff24},{0x1f44,0x1f4c,0x1f44,0x1f4c},{0xa744,0xa744,0xa745,0xa744},{0xff45,0xff25,0xff45,0xff25}, +{0xa745,0xa744,0xa745,0xa744},{0x1f45,0x1f4d,0x1f45,0x1f4d},{0xff46,0xff26,0xff46,0xff26},{0xa746,0xa746,0xa747,0xa746}, +{0xa747,0xa746,0xa747,0xa746},{0xff47,0xff27,0xff47,0xff27},{0x1f48,0x1f48,0x1f40,0x1f48},{0xff48,0xff28,0xff48,0xff28}, +{0xa748,0xa748,0xa749,0xa748},{0xff49,0xff29,0xff49,0xff29},{0xa749,0xa748,0xa749,0xa748},{0x1f49,0x1f49,0x1f41,0x1f49}, +{0xff4a,0xff2a,0xff4a,0xff2a},{0x1f4a,0x1f4a,0x1f42,0x1f4a},{0xa74a,0xa74a,0xa74b,0xa74a},{0xa74b,0xa74a,0xa74b,0xa74a}, +{0x1f4b,0x1f4b,0x1f43,0x1f4b},{0xff4b,0xff2b,0xff4b,0xff2b},{0x1f4c,0x1f4c,0x1f44,0x1f4c},{0xff4c,0xff2c,0xff4c,0xff2c}, +{0xa74c,0xa74c,0xa74d,0xa74c},{0xff4d,0xff2d,0xff4d,0xff2d},{0x1f4d,0x1f4d,0x1f45,0x1f4d},{0xa74d,0xa74c,0xa74d,0xa74c}, +{0xff4e,0xff2e,0xff4e,0xff2e},{0xa74e,0xa74e,0xa74f,0xa74e},{0xff4f,0xff2f,0xff4f,0xff2f},{0xa74f,0xa74e,0xa74f,0xa74e}, +{0xa750,0xa750,0xa751,0xa750},{0xff50,0xff30,0xff50,0xff30},{0xff51,0xff31,0xff51,0xff31},{0xa751,0xa750,0xa751,0xa750}, {0x1f51,0x1f59,0x1f51,0x1f59},{0xa752,0xa752,0xa753,0xa752},{0xff52,0xff32,0xff52,0xff32},{0x1f53,0x1f5b,0x1f53,0x1f5b}, {0xff53,0xff33,0xff53,0xff33},{0xa753,0xa752,0xa753,0xa752},{0xff54,0xff34,0xff54,0xff34},{0xa754,0xa754,0xa755,0xa754}, -{0x1f55,0x1f5d,0x1f55,0x1f5d},{0xa755,0xa754,0xa755,0xa754},{0xff55,0xff35,0xff55,0xff35},{0xa756,0xa756,0xa757,0xa756}, -{0xff56,0xff36,0xff56,0xff36},{0xa757,0xa756,0xa757,0xa756},{0xff57,0xff37,0xff57,0xff37},{0x1f57,0x1f5f,0x1f57,0x1f5f}, -{0xff58,0xff38,0xff58,0xff38},{0xa758,0xa758,0xa759,0xa758},{0xa759,0xa758,0xa759,0xa758},{0xff59,0xff39,0xff59,0xff39}, +{0xff55,0xff35,0xff55,0xff35},{0x1f55,0x1f5d,0x1f55,0x1f5d},{0xa755,0xa754,0xa755,0xa754},{0xff56,0xff36,0xff56,0xff36}, +{0xa756,0xa756,0xa757,0xa756},{0x1f57,0x1f5f,0x1f57,0x1f5f},{0xff57,0xff37,0xff57,0xff37},{0xa757,0xa756,0xa757,0xa756}, +{0xa758,0xa758,0xa759,0xa758},{0xff58,0xff38,0xff58,0xff38},{0xff59,0xff39,0xff59,0xff39},{0xa759,0xa758,0xa759,0xa758}, {0x1f59,0x1f59,0x1f51,0x1f59},{0xff5a,0xff3a,0xff5a,0xff3a},{0xa75a,0xa75a,0xa75b,0xa75a},{0x1f5b,0x1f5b,0x1f53,0x1f5b}, {0xa75b,0xa75a,0xa75b,0xa75a},{0xa75c,0xa75c,0xa75d,0xa75c},{0xa75d,0xa75c,0xa75d,0xa75c},{0x1f5d,0x1f5d,0x1f55,0x1f5d}, -{0xa75e,0xa75e,0xa75f,0xa75e},{0x1f5f,0x1f5f,0x1f57,0x1f5f},{0xa75f,0xa75e,0xa75f,0xa75e},{0x1f60,0x1f68,0x1f60,0x1f68}, -{0xa760,0xa760,0xa761,0xa760},{0xa761,0xa760,0xa761,0xa760},{0x1f61,0x1f69,0x1f61,0x1f69},{0x1f62,0x1f6a,0x1f62,0x1f6a}, -{0xa762,0xa762,0xa763,0xa762},{0x1f63,0x1f6b,0x1f63,0x1f6b},{0xa763,0xa762,0xa763,0xa762},{0xa764,0xa764,0xa765,0xa764}, +{0xa75e,0xa75e,0xa75f,0xa75e},{0xa75f,0xa75e,0xa75f,0xa75e},{0x1f5f,0x1f5f,0x1f57,0x1f5f},{0x1f60,0x1f68,0x1f60,0x1f68}, +{0xa760,0xa760,0xa761,0xa760},{0x1f61,0x1f69,0x1f61,0x1f69},{0xa761,0xa760,0xa761,0xa760},{0xa762,0xa762,0xa763,0xa762}, +{0x1f62,0x1f6a,0x1f62,0x1f6a},{0x1f63,0x1f6b,0x1f63,0x1f6b},{0xa763,0xa762,0xa763,0xa762},{0xa764,0xa764,0xa765,0xa764}, {0x1f64,0x1f6c,0x1f64,0x1f6c},{0x1f65,0x1f6d,0x1f65,0x1f6d},{0xa765,0xa764,0xa765,0xa764},{0xa766,0xa766,0xa767,0xa766}, -{0x1f66,0x1f6e,0x1f66,0x1f6e},{0x1f67,0x1f6f,0x1f67,0x1f6f},{0xa767,0xa766,0xa767,0xa766},{0xa768,0xa768,0xa769,0xa768}, -{0x1f68,0x1f68,0x1f60,0x1f68},{0x1f69,0x1f69,0x1f61,0x1f69},{0xa769,0xa768,0xa769,0xa768},{0x1f6a,0x1f6a,0x1f62,0x1f6a}, -{0xa76a,0xa76a,0xa76b,0xa76a},{0xa76b,0xa76a,0xa76b,0xa76a},{0x1f6b,0x1f6b,0x1f63,0x1f6b},{0xa76c,0xa76c,0xa76d,0xa76c}, -{0x1f6c,0x1f6c,0x1f64,0x1f6c},{0x1f6d,0x1f6d,0x1f65,0x1f6d},{0xa76d,0xa76c,0xa76d,0xa76c},{0x1f6e,0x1f6e,0x1f66,0x1f6e}, -{0xa76e,0xa76e,0xa76f,0xa76e},{0xa76f,0xa76e,0xa76f,0xa76e},{0x1f6f,0x1f6f,0x1f67,0x1f6f},{0x1f70,0x1fba,0x1f70,0x1fba}, +{0x1f66,0x1f6e,0x1f66,0x1f6e},{0x1f67,0x1f6f,0x1f67,0x1f6f},{0xa767,0xa766,0xa767,0xa766},{0x1f68,0x1f68,0x1f60,0x1f68}, +{0xa768,0xa768,0xa769,0xa768},{0xa769,0xa768,0xa769,0xa768},{0x1f69,0x1f69,0x1f61,0x1f69},{0xa76a,0xa76a,0xa76b,0xa76a}, +{0x1f6a,0x1f6a,0x1f62,0x1f6a},{0x1f6b,0x1f6b,0x1f63,0x1f6b},{0xa76b,0xa76a,0xa76b,0xa76a},{0x1f6c,0x1f6c,0x1f64,0x1f6c}, +{0xa76c,0xa76c,0xa76d,0xa76c},{0xa76d,0xa76c,0xa76d,0xa76c},{0x1f6d,0x1f6d,0x1f65,0x1f6d},{0xa76e,0xa76e,0xa76f,0xa76e}, +{0x1f6e,0x1f6e,0x1f66,0x1f6e},{0x1f6f,0x1f6f,0x1f67,0x1f6f},{0xa76f,0xa76e,0xa76f,0xa76e},{0x1f70,0x1fba,0x1f70,0x1fba}, {0x1f71,0x1fbb,0x1f71,0x1fbb},{0x1f72,0x1fc8,0x1f72,0x1fc8},{0x1f73,0x1fc9,0x1f73,0x1fc9},{0x1f74,0x1fca,0x1f74,0x1fca}, {0x1f75,0x1fcb,0x1f75,0x1fcb},{0x1f76,0x1fda,0x1f76,0x1fda},{0x1f77,0x1fdb,0x1f77,0x1fdb},{0x1f78,0x1ff8,0x1f78,0x1ff8}, -{0x1f79,0x1ff9,0x1f79,0x1ff9},{0xa779,0xa779,0xa77a,0xa779},{0xa77a,0xa779,0xa77a,0xa779},{0x1f7a,0x1fea,0x1f7a,0x1fea}, -{0xa77b,0xa77b,0xa77c,0xa77b},{0x1f7b,0x1feb,0x1f7b,0x1feb},{0x1f7c,0x1ffa,0x1f7c,0x1ffa},{0xa77c,0xa77b,0xa77c,0xa77b}, -{0xa77d,0xa77d,0x1d79,0xa77d},{0x1f7d,0x1ffb,0x1f7d,0x1ffb},{0xa77e,0xa77e,0xa77f,0xa77e},{0xa77f,0xa77e,0xa77f,0xa77e}, +{0xa779,0xa779,0xa77a,0xa779},{0x1f79,0x1ff9,0x1f79,0x1ff9},{0x1f7a,0x1fea,0x1f7a,0x1fea},{0xa77a,0xa779,0xa77a,0xa779}, +{0xa77b,0xa77b,0xa77c,0xa77b},{0x1f7b,0x1feb,0x1f7b,0x1feb},{0xa77c,0xa77b,0xa77c,0xa77b},{0x1f7c,0x1ffa,0x1f7c,0x1ffa}, +{0x1f7d,0x1ffb,0x1f7d,0x1ffb},{0xa77d,0xa77d,0x1d79,0xa77d},{0xa77e,0xa77e,0xa77f,0xa77e},{0xa77f,0xa77e,0xa77f,0xa77e}, {0xa780,0xa780,0xa781,0xa780},{0x1f80,0x1f88,0x1f80,0x1f88},{0xa781,0xa780,0xa781,0xa780},{0x1f81,0x1f89,0x1f81,0x1f89}, -{0x1f82,0x1f8a,0x1f82,0x1f8a},{0xa782,0xa782,0xa783,0xa782},{0xa783,0xa782,0xa783,0xa782},{0x1f83,0x1f8b,0x1f83,0x1f8b}, -{0x1f84,0x1f8c,0x1f84,0x1f8c},{0xa784,0xa784,0xa785,0xa784},{0xa785,0xa784,0xa785,0xa784},{0x1f85,0x1f8d,0x1f85,0x1f8d}, -{0xa786,0xa786,0xa787,0xa786},{0x1f86,0x1f8e,0x1f86,0x1f8e},{0x1f87,0x1f8f,0x1f87,0x1f8f},{0xa787,0xa786,0xa787,0xa786}, -{0x1f88,0x1f88,0x1f80,0x1f88},{0x1f89,0x1f89,0x1f81,0x1f89},{0x1f8a,0x1f8a,0x1f82,0x1f8a},{0xa78b,0xa78b,0xa78c,0xa78b}, -{0x1f8b,0x1f8b,0x1f83,0x1f8b},{0x1f8c,0x1f8c,0x1f84,0x1f8c},{0xa78c,0xa78b,0xa78c,0xa78b},{0x1f8d,0x1f8d,0x1f85,0x1f8d}, -{0xa78d,0xa78d,0x0265,0xa78d},{0x1f8e,0x1f8e,0x1f86,0x1f8e},{0x1f8f,0x1f8f,0x1f87,0x1f8f},{0xa790,0xa790,0xa791,0xa790}, -{0x1f90,0x1f98,0x1f90,0x1f98},{0x1f91,0x1f99,0x1f91,0x1f99},{0xa791,0xa790,0xa791,0xa790},{0xa792,0xa792,0xa793,0xa792}, -{0x1f92,0x1f9a,0x1f92,0x1f9a},{0xa793,0xa792,0xa793,0xa792},{0x1f93,0x1f9b,0x1f93,0x1f9b},{0x1f94,0x1f9c,0x1f94,0x1f9c}, -{0x1f95,0x1f9d,0x1f95,0x1f9d},{0xa796,0xa796,0xa797,0xa796},{0x1f96,0x1f9e,0x1f96,0x1f9e},{0x1f97,0x1f9f,0x1f97,0x1f9f}, -{0xa797,0xa796,0xa797,0xa796},{0xa798,0xa798,0xa799,0xa798},{0x1f98,0x1f98,0x1f90,0x1f98},{0x1f99,0x1f99,0x1f91,0x1f99}, -{0xa799,0xa798,0xa799,0xa798},{0xa79a,0xa79a,0xa79b,0xa79a},{0x1f9a,0x1f9a,0x1f92,0x1f9a},{0x1f9b,0x1f9b,0x1f93,0x1f9b}, -{0xa79b,0xa79a,0xa79b,0xa79a},{0xa79c,0xa79c,0xa79d,0xa79c},{0x1f9c,0x1f9c,0x1f94,0x1f9c},{0xa79d,0xa79c,0xa79d,0xa79c}, -{0x1f9d,0x1f9d,0x1f95,0x1f9d},{0xa79e,0xa79e,0xa79f,0xa79e},{0x1f9e,0x1f9e,0x1f96,0x1f9e},{0x1f9f,0x1f9f,0x1f97,0x1f9f}, -{0xa79f,0xa79e,0xa79f,0xa79e},{0x1fa0,0x1fa8,0x1fa0,0x1fa8},{0xa7a0,0xa7a0,0xa7a1,0xa7a0},{0x1fa1,0x1fa9,0x1fa1,0x1fa9}, -{0xa7a1,0xa7a0,0xa7a1,0xa7a0},{0x1fa2,0x1faa,0x1fa2,0x1faa},{0xa7a2,0xa7a2,0xa7a3,0xa7a2},{0x1fa3,0x1fab,0x1fa3,0x1fab}, -{0xa7a3,0xa7a2,0xa7a3,0xa7a2},{0xa7a4,0xa7a4,0xa7a5,0xa7a4},{0x1fa4,0x1fac,0x1fa4,0x1fac},{0x1fa5,0x1fad,0x1fa5,0x1fad}, -{0xa7a5,0xa7a4,0xa7a5,0xa7a4},{0xa7a6,0xa7a6,0xa7a7,0xa7a6},{0x1fa6,0x1fae,0x1fa6,0x1fae},{0x1fa7,0x1faf,0x1fa7,0x1faf}, -{0xa7a7,0xa7a6,0xa7a7,0xa7a6},{0xa7a8,0xa7a8,0xa7a9,0xa7a8},{0x1fa8,0x1fa8,0x1fa0,0x1fa8},{0xa7a9,0xa7a8,0xa7a9,0xa7a8}, -{0x1fa9,0x1fa9,0x1fa1,0x1fa9},{0xa7aa,0xa7aa,0x0266,0xa7aa},{0x1faa,0x1faa,0x1fa2,0x1faa},{0xa7ab,0xa7ab,0x025c,0xa7ab}, -{0x1fab,0x1fab,0x1fa3,0x1fab},{0x1fac,0x1fac,0x1fa4,0x1fac},{0xa7ac,0xa7ac,0x0261,0xa7ac},{0xa7ad,0xa7ad,0x026c,0xa7ad}, -{0x1fad,0x1fad,0x1fa5,0x1fad},{0x1fae,0x1fae,0x1fa6,0x1fae},{0x1faf,0x1faf,0x1fa7,0x1faf},{0xa7b0,0xa7b0,0x029e,0xa7b0}, +{0x1f82,0x1f8a,0x1f82,0x1f8a},{0xa782,0xa782,0xa783,0xa782},{0x1f83,0x1f8b,0x1f83,0x1f8b},{0xa783,0xa782,0xa783,0xa782}, +{0xa784,0xa784,0xa785,0xa784},{0x1f84,0x1f8c,0x1f84,0x1f8c},{0xa785,0xa784,0xa785,0xa784},{0x1f85,0x1f8d,0x1f85,0x1f8d}, +{0x1f86,0x1f8e,0x1f86,0x1f8e},{0xa786,0xa786,0xa787,0xa786},{0x1f87,0x1f8f,0x1f87,0x1f8f},{0xa787,0xa786,0xa787,0xa786}, +{0x1f88,0x1f88,0x1f80,0x1f88},{0x1f89,0x1f89,0x1f81,0x1f89},{0x1f8a,0x1f8a,0x1f82,0x1f8a},{0x1f8b,0x1f8b,0x1f83,0x1f8b}, +{0xa78b,0xa78b,0xa78c,0xa78b},{0x1f8c,0x1f8c,0x1f84,0x1f8c},{0xa78c,0xa78b,0xa78c,0xa78b},{0xa78d,0xa78d,0x0265,0xa78d}, +{0x1f8d,0x1f8d,0x1f85,0x1f8d},{0x1f8e,0x1f8e,0x1f86,0x1f8e},{0x1f8f,0x1f8f,0x1f87,0x1f8f},{0x1f90,0x1f98,0x1f90,0x1f98}, +{0xa790,0xa790,0xa791,0xa790},{0x1f91,0x1f99,0x1f91,0x1f99},{0xa791,0xa790,0xa791,0xa790},{0x1f92,0x1f9a,0x1f92,0x1f9a}, +{0xa792,0xa792,0xa793,0xa792},{0xa793,0xa792,0xa793,0xa792},{0x1f93,0x1f9b,0x1f93,0x1f9b},{0x1f94,0x1f9c,0x1f94,0x1f9c}, +{0x1f95,0x1f9d,0x1f95,0x1f9d},{0x1f96,0x1f9e,0x1f96,0x1f9e},{0xa796,0xa796,0xa797,0xa796},{0x1f97,0x1f9f,0x1f97,0x1f9f}, +{0xa797,0xa796,0xa797,0xa796},{0x1f98,0x1f98,0x1f90,0x1f98},{0xa798,0xa798,0xa799,0xa798},{0xa799,0xa798,0xa799,0xa798}, +{0x1f99,0x1f99,0x1f91,0x1f99},{0xa79a,0xa79a,0xa79b,0xa79a},{0x1f9a,0x1f9a,0x1f92,0x1f9a},{0x1f9b,0x1f9b,0x1f93,0x1f9b}, +{0xa79b,0xa79a,0xa79b,0xa79a},{0x1f9c,0x1f9c,0x1f94,0x1f9c},{0xa79c,0xa79c,0xa79d,0xa79c},{0xa79d,0xa79c,0xa79d,0xa79c}, +{0x1f9d,0x1f9d,0x1f95,0x1f9d},{0xa79e,0xa79e,0xa79f,0xa79e},{0x1f9e,0x1f9e,0x1f96,0x1f9e},{0xa79f,0xa79e,0xa79f,0xa79e}, +{0x1f9f,0x1f9f,0x1f97,0x1f9f},{0x1fa0,0x1fa8,0x1fa0,0x1fa8},{0xa7a0,0xa7a0,0xa7a1,0xa7a0},{0xa7a1,0xa7a0,0xa7a1,0xa7a0}, +{0x1fa1,0x1fa9,0x1fa1,0x1fa9},{0x1fa2,0x1faa,0x1fa2,0x1faa},{0xa7a2,0xa7a2,0xa7a3,0xa7a2},{0x1fa3,0x1fab,0x1fa3,0x1fab}, +{0xa7a3,0xa7a2,0xa7a3,0xa7a2},{0x1fa4,0x1fac,0x1fa4,0x1fac},{0xa7a4,0xa7a4,0xa7a5,0xa7a4},{0x1fa5,0x1fad,0x1fa5,0x1fad}, +{0xa7a5,0xa7a4,0xa7a5,0xa7a4},{0xa7a6,0xa7a6,0xa7a7,0xa7a6},{0x1fa6,0x1fae,0x1fa6,0x1fae},{0xa7a7,0xa7a6,0xa7a7,0xa7a6}, +{0x1fa7,0x1faf,0x1fa7,0x1faf},{0x1fa8,0x1fa8,0x1fa0,0x1fa8},{0xa7a8,0xa7a8,0xa7a9,0xa7a8},{0x1fa9,0x1fa9,0x1fa1,0x1fa9}, +{0xa7a9,0xa7a8,0xa7a9,0xa7a8},{0x1faa,0x1faa,0x1fa2,0x1faa},{0xa7aa,0xa7aa,0x0266,0xa7aa},{0xa7ab,0xa7ab,0x025c,0xa7ab}, +{0x1fab,0x1fab,0x1fa3,0x1fab},{0xa7ac,0xa7ac,0x0261,0xa7ac},{0x1fac,0x1fac,0x1fa4,0x1fac},{0x1fad,0x1fad,0x1fa5,0x1fad}, +{0xa7ad,0xa7ad,0x026c,0xa7ad},{0x1fae,0x1fae,0x1fa6,0x1fae},{0x1faf,0x1faf,0x1fa7,0x1faf},{0xa7b0,0xa7b0,0x029e,0xa7b0}, {0x1fb0,0x1fb8,0x1fb0,0x1fb8},{0x1fb1,0x1fb9,0x1fb1,0x1fb9},{0xa7b1,0xa7b1,0x0287,0xa7b1},{0xa7b2,0xa7b2,0x029d,0xa7b2}, {0x1fb3,0x1fbc,0x1fb3,0x1fbc},{0xa7b3,0xa7b3,0xab53,0xa7b3},{0xa7b4,0xa7b4,0xa7b5,0xa7b4},{0xa7b5,0xa7b4,0xa7b5,0xa7b4}, {0xa7b6,0xa7b6,0xa7b7,0xa7b6},{0xa7b7,0xa7b6,0xa7b7,0xa7b6},{0x1fb8,0x1fb8,0x1fb0,0x1fb8},{0x1fb9,0x1fb9,0x1fb1,0x1fb9}, diff --git a/unicode/unicode_wcwidth.c b/unicode/unicode_wcwidth.c index bea01f5..5266552 100644 --- a/unicode/unicode_wcwidth.c +++ b/unicode/unicode_wcwidth.c @@ -6,7 +6,7 @@ #include <stdlib.h> -int unicode_wcwidth(unicode_char c) +int unicode_wcwidth(char32_t c) { size_t b=0; size_t e=sizeof(unicode_wcwidth_tab)/sizeof(unicode_wcwidth_tab[0]); @@ -42,7 +42,7 @@ int unicode_wcwidth(unicode_char c) return 1; } -size_t unicode_wcwidth_str(const unicode_char *c) +size_t unicode_wcwidth_str(const char32_t *c) { size_t w=0; diff --git a/unicode/unicode_wordbreak.c b/unicode/unicode_wordbreak.c index b4c4f89..991f0ba 100644 --- a/unicode/unicode_wordbreak.c +++ b/unicode/unicode_wordbreak.c @@ -74,7 +74,7 @@ int unicode_wb_end(unicode_wb_info_t i) } int unicode_wb_next_cnt(unicode_wb_info_t i, - const unicode_char *chars, + const char32_t *chars, size_t cnt) { int rc; @@ -89,7 +89,7 @@ int unicode_wb_next_cnt(unicode_wb_info_t i, return 0; } -int unicode_wb_next(unicode_wb_info_t i, unicode_char ch) +int unicode_wb_next(unicode_wb_info_t i, char32_t ch) { return (*i->next_handler) (i, unicode_tab_lookup(ch, @@ -529,7 +529,7 @@ unicode_wbscan_info_t unicode_wbscan_init() return i; } -int unicode_wbscan_next(unicode_wbscan_info_t i, unicode_char ch) +int unicode_wbscan_next(unicode_wbscan_info_t i, char32_t ch) { if (!i->found) unicode_wb_next(i->wb_handle, ch); diff --git a/unicode/unicodebuf.c b/unicode/unicodebuf.c index a221e3b..eb64543 100644 --- a/unicode/unicodebuf.c +++ b/unicode/unicodebuf.c @@ -24,7 +24,7 @@ void unicode_buf_deinit(struct unicode_buf *p) } int unicode_buf_append(struct unicode_buf *p, - const unicode_char *uc, size_t l) + const char32_t *uc, size_t l) { if (l > p->max-p->len) l=p->max-p->len; @@ -32,7 +32,7 @@ int unicode_buf_append(struct unicode_buf *p, if (p->len + l > p->size) { size_t n=(p->len + l) * 2; - unicode_char *newp; + char32_t *newp; if (n < 256) n=256; @@ -40,8 +40,8 @@ int unicode_buf_append(struct unicode_buf *p, if (n > p->max) n=p->max; - newp=p->ptr ? realloc(p->ptr, n * sizeof(unicode_char)) - : malloc(n * sizeof(unicode_char)); + newp=p->ptr ? realloc(p->ptr, n * sizeof(char32_t)) + : malloc(n * sizeof(char32_t)); if (!newp) return -1; @@ -50,7 +50,7 @@ int unicode_buf_append(struct unicode_buf *p, p->size=n; } - memcpy(p->ptr + p->len, uc, l * sizeof(unicode_char)); + memcpy(p->ptr + p->len, uc, l * sizeof(char32_t)); p->len += l; return 0; @@ -60,7 +60,7 @@ void unicode_buf_append_char(struct unicode_buf *dst, const char *str, size_t cnt) { - unicode_char unicode_buf[256]; + char32_t unicode_buf[256]; while (cnt) { diff --git a/unicode/unicodecpp.C b/unicode/unicodecpp.C index ac08285..1cec379 100644 --- a/unicode/unicodecpp.C +++ b/unicode/unicodecpp.C @@ -23,7 +23,7 @@ extern "C" { (ptr)).callback(value); } - int unicode::linebreakc_trampoline(int value, unicode_char ch, void *ptr) + int unicode::linebreakc_trampoline(int value, char32_t ch, void *ptr) { return (*reinterpret_cast<unicode::linebreakc_callback_base *> (ptr)).callback(value, ch); @@ -72,11 +72,11 @@ unicode::init_chset::init_chset() unicode_default_chset(); } -size_t unicode_wcwidth(const std::vector<unicode_char> &uc) +size_t unicode_wcwidth(const std::u32string &uc) { size_t w=0; - for (std::vector<unicode_char>::const_iterator + for (std::u32string::const_iterator b(uc.begin()), e(uc.end()); b != e; ++b) w += unicode_wcwidth(*b); return w; @@ -134,7 +134,7 @@ bool unicode::iconvert::operator()(const char *str, size_t cnt) return (unicode_convert(handle, str, cnt) == 0); } -bool unicode::iconvert::operator()(const unicode_char *str, size_t cnt) +bool unicode::iconvert::operator()(const char32_t *str, size_t cnt) { if (!handle) return false; @@ -169,7 +169,7 @@ std::string unicode::iconvert::convert(const std::string &text, } -std::string unicode::iconvert::convert(const std::vector<unicode_char> &uc, +std::string unicode::iconvert::convert(const std::u32string &uc, const std::string &dstcharset, bool &errflag) { @@ -206,11 +206,11 @@ std::string unicode::iconvert::convert(const std::vector<unicode_char> &uc, bool unicode::iconvert::convert(const std::string &text, const std::string &charset, - std::vector<unicode_char> &uc) + std::u32string &uc) { int err; - unicode_char *ucbuf; + char32_t *ucbuf; size_t ucsize; if (unicode_convert_tou_tobuf(text.c_str(), @@ -235,7 +235,7 @@ bool unicode::iconvert::convert(const std::string &text, return err == 0; } -int unicode::iconvert::tou::converted(const unicode_char *, size_t) +int unicode::iconvert::tou::converted(const char32_t *, size_t) { return 0; } @@ -247,15 +247,15 @@ bool unicode::iconvert::tou::begin(const std::string &chset) int unicode::iconvert::tou::converted(const char *ptr, size_t cnt) { - return converted(reinterpret_cast<const unicode_char *>(ptr), - cnt/sizeof(unicode_char)); + return converted(reinterpret_cast<const char32_t *>(ptr), + cnt/sizeof(char32_t)); } -std::pair<std::vector<unicode_char>, bool> +std::pair<std::u32string, bool> unicode::iconvert::tou::convert(const std::string &str, const std::string &chset) { - std::pair<std::vector<unicode_char>, bool> ret; + std::pair<std::u32string, bool> ret; ret.second=convert(str.begin(), str.end(), chset, ret.first); return ret; @@ -267,7 +267,7 @@ bool unicode::iconvert::fromu::begin(const std::string &chset) } std::pair<std::string, bool> -unicode::iconvert::fromu::convert(const std::vector<unicode_char> &ubuf, +unicode::iconvert::fromu::convert(const std::u32string &ubuf, const std::string &chset) { std::pair<std::string, bool> ret; @@ -281,8 +281,8 @@ unicode::iconvert::fromu::convert(const std::vector<unicode_char> &ubuf, std::string unicode::iconvert::convert_tocase(const std::string &text, const std::string &charset, bool &err, - unicode_char (*first_char_func)(unicode_char), - unicode_char (*char_func)(unicode_char)) + char32_t (*first_char_func)(char32_t), + char32_t (*char_func)(char32_t)) { err=false; std::string s; @@ -333,7 +333,7 @@ int unicode::linebreak_callback_base::callback(int ignore) } unicode::linebreak_callback_base -&unicode::linebreak_callback_base::operator<<(unicode_char uc) +&unicode::linebreak_callback_base::operator<<(char32_t uc) { if (!handle) { @@ -382,7 +382,7 @@ unicode::linebreakc_callback_base::~linebreakc_callback_base() finish(); } -int unicode::linebreakc_callback_base::callback(int dummy1, unicode_char dummy2) +int unicode::linebreakc_callback_base::callback(int dummy1, char32_t dummy2) { return 0; } @@ -396,7 +396,7 @@ void unicode::linebreakc_callback_base::set_opts(int optsArg) } unicode::linebreakc_callback_base -&unicode::linebreakc_callback_base::operator<<(unicode_char uc) +&unicode::linebreakc_callback_base::operator<<(char32_t uc) { if (handle == NULL) { @@ -429,7 +429,7 @@ unicode::linebreakc_callback_save_buf::~linebreakc_callback_save_buf() { } -int unicode::linebreakc_callback_save_buf::callback(int c, unicode_char ch) +int unicode::linebreakc_callback_save_buf::callback(int c, char32_t ch) { lb_buf.push_back(std::make_pair(c, ch)); return 0; @@ -451,7 +451,7 @@ int unicode::wordbreak_callback_base::callback(bool ignore) } unicode::wordbreak_callback_base -&unicode::wordbreak_callback_base::operator<<(unicode_char uc) +&unicode::wordbreak_callback_base::operator<<(char32_t uc) { if (!handle) { @@ -485,7 +485,7 @@ unicode::wordbreakscan::~wordbreakscan() finish(); } -bool unicode::wordbreakscan::operator<<(unicode_char uc) +bool unicode::wordbreakscan::operator<<(char32_t uc) { if (!handle) handle=unicode_wbscan_init(); @@ -516,16 +516,16 @@ std::string unicode::tolower(const std::string &string) std::string unicode::tolower(const std::string &string, const std::string &charset) { - std::vector<unicode_char> uc; + std::u32string uc; unicode::iconvert::convert(string, charset, uc); return unicode::iconvert::convert(tolower(uc), charset); } -std::vector<unicode_char> unicode::tolower(const std::vector<unicode_char> &u) +std::u32string unicode::tolower(const std::u32string &u) { - std::vector<unicode_char> copy=u; + std::u32string copy=u; std::transform(copy.begin(), copy.end(), copy.begin(), unicode_lc); return copy; @@ -539,16 +539,16 @@ std::string unicode::toupper(const std::string &string) std::string unicode::toupper(const std::string &string, const std::string &charset) { - std::vector<unicode_char> uc; + std::u32string uc; unicode::iconvert::convert(string, charset, uc); return unicode::iconvert::convert(toupper(uc), charset); } -std::vector<unicode_char> unicode::toupper(const std::vector<unicode_char> &u) +std::u32string unicode::toupper(const std::u32string &u) { - std::vector<unicode_char> copy=u; + std::u32string copy=u; std::transform(copy.begin(), copy.end(), copy.begin(), unicode_uc); diff --git a/unicode/unicodetest.c b/unicode/unicodetest.c index 7048f51..b59fab3 100644 --- a/unicode/unicodetest.c +++ b/unicode/unicodetest.c @@ -70,7 +70,7 @@ static void test1() static void test2() { - unicode_char *ucptr; + char32_t *ucptr; size_t ucsize; unicode_convert_handle_t h= unicode_convert_tou_init("utf-8", &ucptr, &ucsize, 1); diff --git a/unicode/wordbreaktest.C b/unicode/wordbreaktest.C index 72d2b14..91e3c31 100644 --- a/unicode/wordbreaktest.C +++ b/unicode/wordbreaktest.C @@ -78,7 +78,7 @@ static void testsuite() words.push_back(std::string(p, b)); } - std::vector<unicode_char> ubuf; + std::u32string ubuf; std::vector<bool> status; while (1) @@ -102,7 +102,7 @@ static void testsuite() std::istringstream i(words.front()); - unicode_char uc; + uint32_t uc; i >> std::hex >> uc; |
