]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg RegularExpressionDxe: Update Oniguruma to 6.9.0
authorDongao Guo <dongao.guo@intel.com>
Thu, 6 Sep 2018 08:04:58 +0000 (16:04 +0800)
committerLiming Gao <liming.gao@intel.com>
Tue, 25 Sep 2018 00:52:51 +0000 (08:52 +0800)
https://bugzilla.tianocore.org/show_bug.cgi?id=1200
Update Oniguruma to the latest version v6.9.0.
Oniguruma https://github.com/kkos/oniguruma
Verify VS2017, GCC5 build.
Verify RegularExpressionProtocol GetInfo() and Match() function.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Dongao Guo <dongao.guo@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
Reviewed-by: Cinnamon Shia <cinnamon.shia@hpe.com>
37 files changed:
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/AUTHORS
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/COPYING
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/README
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/ascii.c [new file with mode: 0644]
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/enc/ascii.c [deleted file]
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/enc/unicode.c [deleted file]
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/enc/utf16_le.c [deleted file]
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/onig_init.c [new file with mode: 0644]
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/oniggnu.h
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/onigposix.h
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/oniguruma.h
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regcomp.c
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regenc.c
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regenc.h
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regerror.c
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regexec.c
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/reggnu.c
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regint.h
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regparse.c
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regparse.h
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regposerr.c
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regposix.c
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regsyntax.c
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regversion.c
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/st.c
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/st.h
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode.c [new file with mode: 0644]
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_egcb_data.c [new file with mode: 0644]
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold1_key.c [new file with mode: 0644]
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold2_key.c [new file with mode: 0644]
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold3_key.c [new file with mode: 0644]
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold_data.c [new file with mode: 0644]
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_property_data.c [new file with mode: 0644]
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_property_data_posix.c [new file with mode: 0644]
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_unfold_key.c [new file with mode: 0644]
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/utf16_le.c [new file with mode: 0644]
MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.inf

index 3b3287e7d4b9cfeecf12d9474b2ccc635bea144d..3005435d8faee49f7b9b7af46af6b99af35698d7 100644 (file)
@@ -1 +1 @@
-sndgk393 AT ybb DOT ne DOT jp (K.Kosako)\r
+<kkosako0@gmail.com> (K.Kosako)\r
index f3d17ae51920226df9aaaaa646c77591acd9afe6..e17cee6be203eedaf462544a62979d14ec08cc3b 100644 (file)
@@ -1,28 +1,26 @@
 Oniguruma LICENSE\r
 -----------------\r
 \r
-/*-\r
- * Copyright (c) 2002-2007  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- *    notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the\r
- *    documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
+Copyright (c) 2002-2018  K.Kosako  <kkosako0@gmail.com>\r
+All rights reserved.\r
+\r
+Redistribution and use in source and binary forms, with or without\r
+modification, are permitted provided that the following conditions\r
+are met:\r
+1. Redistributions of source code must retain the above copyright\r
+   notice, this list of conditions and the following disclaimer.\r
+2. Redistributions in binary form must reproduce the above copyright\r
+   notice, this list of conditions and the following disclaimer in the\r
+   documentation and/or other materials provided with the distribution.\r
+\r
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
+SUCH DAMAGE.\r
index 18952eed007fc405322c8642864cc50f4f48b0a1..4975466cedf2dceb7116c67edff3077a2c4a4465 100644 (file)
@@ -1,12 +1,30 @@
-README  2007/05/31\r
-\r
-Oniguruma  ----   (C) K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
-\r
-http://www.geocities.jp/kosako3/oniguruma/\r
-\r
-Oniguruma is a regular expressions library.\r
-The characteristics of this library is that different character encoding\r
-for every regular expression object can be specified.\r
+README  2018/04/05\r
+\r
+Oniguruma  ----   (C) K.Kosako\r
+\r
+https://github.com/kkos/oniguruma\r
+\r
+FIXED Security Issues (in Oniguruma 6.3.0):\r
+  CVE-2017-9224, CVE-2017-9225, CVE-2017-9226\r
+  CVE-2017-9227, CVE-2017-9228, CVE-2017-9229\r
+\r
+---\r
+Oniguruma is a modern and flexible regular expressions library. It\r
+encompasses features from different regular expression implementations\r
+that traditionally exist in different languages. It comes close to\r
+being a complete superset of all regular expression features found\r
+in other regular expression implementations.\r
+\r
+Its features include:\r
+* Character encoding can be specified per regular expression object.\r
+* Several regular expression types are supported:\r
+  * POSIX\r
+  * Grep\r
+  * GNU Regex\r
+  * Perl\r
+  * Java\r
+  * Ruby\r
+  * Emacs\r
 \r
 Supported character encodings:\r
 \r
@@ -30,18 +48,16 @@ Install
 \r
  Case 1: Unix and Cygwin platform\r
 \r
-   1. ./configure\r
-   2. make\r
-   3. make install\r
+   1. autoreconf -vfi   (* case: configure script is not found.)\r
+\r
+   2. ./configure\r
+   3. make\r
+   4. make install\r
 \r
    * uninstall\r
 \r
      make uninstall\r
 \r
-   * test (ASCII/EUC-JP)\r
-\r
-     make atest\r
-\r
    * configuration check\r
 \r
      onig-config --cflags\r
@@ -51,18 +67,19 @@ Install
 \r
 \r
 \r
- Case 2: Win32 platform (VC++)\r
+ Case 2: Windows 64/32bit platform (Visual Studio)\r
 \r
-   1. copy win32\Makefile Makefile\r
-   2. copy win32\config.h config.h\r
-   3. nmake\r
+   execute make_win64 or make_win32\r
 \r
-      onig_s.lib:  static link library\r
-      onig.dll:    dynamic link library\r
+      src/onig_s.lib:  static link library\r
+      src/onig.dll:    dynamic link library\r
 \r
   * test (ASCII/Shift_JIS)\r
-   4. copy win32\testc.c testc.c\r
-   5. nmake ctest\r
+      1. cd src\r
+      2. copy ..\windows\testc.c .\r
+      3. nmake -f Makefile.windows ctest\r
+\r
+  (I have checked by Visual Studio Community 2015)\r
 \r
 \r
 \r
@@ -103,6 +120,7 @@ Sample Programs
   sample/posix.c     POSIX API sample.\r
   sample/sql.c       example of the variable meta characters.\r
                      (SQL-like pattern matching)\r
+  sample/user_property.c  example of user defined Unicode property.\r
 \r
 Test Programs\r
   sample/syntax.c    Perl, Java and ASIS syntax test.\r
@@ -136,54 +154,42 @@ Source Files
   regposerr.c        POSIX error message function.\r
   regposix.c         POSIX API functions.\r
 \r
-  enc/mktable.c      character type table generator.\r
-  enc/ascii.c        ASCII encoding.\r
-  enc/euc_jp.c       EUC-JP encoding.\r
-  enc/euc_tw.c       EUC-TW encoding.\r
-  enc/euc_kr.c       EUC-KR, EUC-CN encoding.\r
-  enc/sjis.c         Shift_JIS encoding.\r
-  enc/big5.c         Big5      encoding.\r
-  enc/gb18030.c      GB18030   encoding.\r
-  enc/koi8.c         KOI8      encoding.\r
-  enc/koi8_r.c       KOI8-R    encoding.\r
-  enc/cp1251.c       CP1251    encoding.\r
-  enc/iso8859_1.c    ISO-8859-1  encoding. (Latin-1)\r
-  enc/iso8859_2.c    ISO-8859-2  encoding. (Latin-2)\r
-  enc/iso8859_3.c    ISO-8859-3  encoding. (Latin-3)\r
-  enc/iso8859_4.c    ISO-8859-4  encoding. (Latin-4)\r
-  enc/iso8859_5.c    ISO-8859-5  encoding. (Cyrillic)\r
-  enc/iso8859_6.c    ISO-8859-6  encoding. (Arabic)\r
-  enc/iso8859_7.c    ISO-8859-7  encoding. (Greek)\r
-  enc/iso8859_8.c    ISO-8859-8  encoding. (Hebrew)\r
-  enc/iso8859_9.c    ISO-8859-9  encoding. (Latin-5 or Turkish)\r
-  enc/iso8859_10.c   ISO-8859-10 encoding. (Latin-6 or Nordic)\r
-  enc/iso8859_11.c   ISO-8859-11 encoding. (Thai)\r
-  enc/iso8859_13.c   ISO-8859-13 encoding. (Latin-7 or Baltic Rim)\r
-  enc/iso8859_14.c   ISO-8859-14 encoding. (Latin-8 or Celtic)\r
-  enc/iso8859_15.c   ISO-8859-15 encoding. (Latin-9 or West European with Euro)\r
-  enc/iso8859_16.c   ISO-8859-16 encoding.\r
+  mktable.c          character type table generator.\r
+  ascii.c            ASCII encoding.\r
+  euc_jp.c           EUC-JP encoding.\r
+  euc_tw.c           EUC-TW encoding.\r
+  euc_kr.c           EUC-KR, EUC-CN encoding.\r
+  sjis.c             Shift_JIS encoding.\r
+  big5.c             Big5      encoding.\r
+  gb18030.c          GB18030   encoding.\r
+  koi8.c             KOI8      encoding.\r
+  koi8_r.c           KOI8-R    encoding.\r
+  cp1251.c           CP1251    encoding.\r
+  iso8859_1.c        ISO-8859-1  encoding. (Latin-1)\r
+  iso8859_2.c        ISO-8859-2  encoding. (Latin-2)\r
+  iso8859_3.c        ISO-8859-3  encoding. (Latin-3)\r
+  iso8859_4.c        ISO-8859-4  encoding. (Latin-4)\r
+  iso8859_5.c        ISO-8859-5  encoding. (Cyrillic)\r
+  iso8859_6.c        ISO-8859-6  encoding. (Arabic)\r
+  iso8859_7.c        ISO-8859-7  encoding. (Greek)\r
+  iso8859_8.c        ISO-8859-8  encoding. (Hebrew)\r
+  iso8859_9.c        ISO-8859-9  encoding. (Latin-5 or Turkish)\r
+  iso8859_10.c       ISO-8859-10 encoding. (Latin-6 or Nordic)\r
+  iso8859_11.c       ISO-8859-11 encoding. (Thai)\r
+  iso8859_13.c       ISO-8859-13 encoding. (Latin-7 or Baltic Rim)\r
+  iso8859_14.c       ISO-8859-14 encoding. (Latin-8 or Celtic)\r
+  iso8859_15.c       ISO-8859-15 encoding. (Latin-9 or West European with Euro)\r
+  iso8859_16.c       ISO-8859-16 encoding.\r
                      (Latin-10 or South-Eastern European with Euro)\r
-  enc/utf8.c         UTF-8    encoding.\r
-  enc/utf16_be.c     UTF-16BE encoding.\r
-  enc/utf16_le.c     UTF-16LE encoding.\r
-  enc/utf32_be.c     UTF-32BE encoding.\r
-  enc/utf32_le.c     UTF-32LE encoding.\r
-  enc/unicode.c      Unicode information data.\r
+  utf8.c             UTF-8    encoding.\r
+  utf16_be.c         UTF-16BE encoding.\r
+  utf16_le.c         UTF-16LE encoding.\r
+  utf32_be.c         UTF-32BE encoding.\r
+  utf32_le.c         UTF-32LE encoding.\r
+  unicode.c          common codes of Unicode encoding.\r
 \r
   win32/Makefile     Makefile for Win32 (VC++)\r
   win32/config.h     config.h for Win32\r
 \r
 \r
-\r
-ToDo\r
-\r
-  ? case fold flag: Katakana <-> Hiragana.\r
-  ? add ONIG_OPTION_NOTBOS/NOTEOS. (\A, \z, \Z)\r
- ?? \X (== \PM\pM*)\r
- ?? implement syntax behavior ONIG_SYN_CONTEXT_INDEP_ANCHORS.\r
- ?? transmission stopper. (return ONIG_STOP from match_at())\r
-\r
 and I'm thankful to Akinori MUSHA.\r
-\r
-\r
-Mail Address: K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/ascii.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/ascii.c
new file mode 100644 (file)
index 0000000..ef961c9
--- /dev/null
@@ -0,0 +1,118 @@
+/**********************************************************************\r
+  ascii.c -  Oniguruma (regular expression library)\r
+**********************************************************************/\r
+/*-\r
+ * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
+ * SUCH DAMAGE.\r
+ */\r
+\r
+#include "regint.h"   /* for USE_CALLOUT */\r
+\r
+static int\r
+init(void)\r
+{\r
+#ifdef USE_CALLOUT\r
+\r
+    int id;\r
+    OnigEncoding enc;\r
+    char* name;\r
+    unsigned int args[4];\r
+    OnigValue    opts[4];\r
+\r
+    enc = ONIG_ENCODING_ASCII;\r
+\r
+    name = "FAIL";        BC0_P(name, fail);\r
+    name = "MISMATCH";    BC0_P(name, mismatch);\r
+\r
+    name = "MAX";\r
+    args[0] = ONIG_TYPE_TAG | ONIG_TYPE_LONG;\r
+    args[1] = ONIG_TYPE_CHAR;\r
+    opts[0].c = 'X';\r
+    BC_B_O(name, max, 2, args, 1, opts);\r
+\r
+    name = "ERROR";\r
+    args[0] = ONIG_TYPE_LONG; opts[0].l = ONIG_ABORT;\r
+    BC_P_O(name, error, 1, args, 1, opts);\r
+\r
+    name = "COUNT";\r
+    args[0] = ONIG_TYPE_CHAR; opts[0].c = '>';\r
+    BC_B_O(name, count, 1, args, 1, opts);\r
+\r
+    name = "TOTAL_COUNT";\r
+    args[0] = ONIG_TYPE_CHAR; opts[0].c = '>';\r
+    BC_B_O(name, total_count, 1, args, 1, opts);\r
+\r
+    name = "CMP";\r
+    args[0] = ONIG_TYPE_TAG | ONIG_TYPE_LONG;\r
+    args[1] = ONIG_TYPE_STRING;\r
+    args[2] = ONIG_TYPE_TAG | ONIG_TYPE_LONG;\r
+    BC_P(name, cmp, 3, args);\r
+\r
+#endif /* USE_CALLOUT */\r
+\r
+  return ONIG_NORMAL;\r
+}\r
+\r
+#if 0\r
+static int\r
+is_initialized(void)\r
+{\r
+  /* Don't use this function */\r
+  /* can't answer, because builtin callout entries removed in onig_end() */\r
+  return 0;\r
+}\r
+#endif\r
+\r
+static int\r
+ascii_is_code_ctype(OnigCodePoint code, unsigned int ctype)\r
+{\r
+  if (code < 128)\r
+    return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);\r
+  else\r
+    return FALSE;\r
+}\r
+\r
+OnigEncodingType OnigEncodingASCII = {\r
+  onigenc_single_byte_mbc_enc_len,\r
+  "US-ASCII",  /* name */\r
+  1,           /* max enc length */\r
+  1,           /* min enc length */\r
+  onigenc_is_mbc_newline_0x0a,\r
+  onigenc_single_byte_mbc_to_code,\r
+  onigenc_single_byte_code_to_mbclen,\r
+  onigenc_single_byte_code_to_mbc,\r
+  onigenc_ascii_mbc_case_fold,\r
+  onigenc_ascii_apply_all_case_fold,\r
+  onigenc_ascii_get_case_fold_codes_by_str,\r
+  onigenc_minimum_property_name_to_ctype,\r
+  ascii_is_code_ctype,\r
+  onigenc_not_support_get_ctype_code_range,\r
+  onigenc_single_byte_left_adjust_char_head,\r
+  onigenc_always_true_is_allowed_reverse_match,\r
+  init,\r
+  0, /* is_initialized */\r
+  onigenc_always_true_is_valid_mbc_string,\r
+  ENC_FLAG_ASCII_COMPATIBLE,\r
+  0, 0\r
+};\r
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/enc/ascii.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/enc/ascii.c
deleted file mode 100644 (file)
index 25afc98..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/**********************************************************************\r
-  ascii.c -  Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2006  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- *    notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the\r
- *    documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#include "regenc.h"\r
-\r
-static int\r
-ascii_is_code_ctype(OnigCodePoint code, unsigned int ctype)\r
-{\r
-  if (code < 128)\r
-    return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);\r
-  else\r
-    return FALSE;\r
-}\r
-\r
-OnigEncodingType OnigEncodingASCII = {\r
-  onigenc_single_byte_mbc_enc_len,\r
-  "US-ASCII",  /* name */\r
-  1,           /* max byte length */\r
-  1,           /* min byte length */\r
-  onigenc_is_mbc_newline_0x0a,\r
-  onigenc_single_byte_mbc_to_code,\r
-  onigenc_single_byte_code_to_mbclen,\r
-  onigenc_single_byte_code_to_mbc,\r
-  onigenc_ascii_mbc_case_fold,\r
-  onigenc_ascii_apply_all_case_fold,\r
-  onigenc_ascii_get_case_fold_codes_by_str,\r
-  onigenc_minimum_property_name_to_ctype,\r
-  ascii_is_code_ctype,\r
-  onigenc_not_support_get_ctype_code_range,\r
-  onigenc_single_byte_left_adjust_char_head,\r
-  onigenc_always_true_is_allowed_reverse_match\r
-};\r
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/enc/unicode.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/enc/unicode.c
deleted file mode 100644 (file)
index 6747b3d..0000000
+++ /dev/null
@@ -1,11374 +0,0 @@
-/**********************************************************************\r
-  unicode.c -  Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2013  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- *    notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the\r
- *    documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#include "regint.h"\r
-\r
-#define ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(code,ctype) \\r
-  ((EncUNICODE_ISO_8859_1_CtypeTable[code] & CTYPE_TO_BIT(ctype)) != 0)\r
-#if 0\r
-#define ONIGENC_IS_UNICODE_ISO_8859_1_BIT_CTYPE(code,cbit) \\r
-  ((EncUNICODE_ISO_8859_1_CtypeTable[code] & (cbit)) != 0)\r
-#endif\r
-\r
-static const unsigned short EncUNICODE_ISO_8859_1_CtypeTable[256] = {\r
-  0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,\r
-  0x4008, 0x428c, 0x4289, 0x4288, 0x4288, 0x4288, 0x4008, 0x4008,\r
-  0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,\r
-  0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,\r
-  0x4284, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,\r
-  0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,\r
-  0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0,\r
-  0x78b0, 0x78b0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,\r
-  0x41a0, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x74a2,\r
-  0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2,\r
-  0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2,\r
-  0x74a2, 0x74a2, 0x74a2, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x51a0,\r
-  0x41a0, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x70e2,\r
-  0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2,\r
-  0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2,\r
-  0x70e2, 0x70e2, 0x70e2, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x4008,\r
-  0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0288, 0x0008, 0x0008,\r
-  0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,\r
-  0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,\r
-  0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,\r
-  0x0284, 0x01a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0,\r
-  0x00a0, 0x00a0, 0x30e2, 0x01a0, 0x00a0, 0x00a8, 0x00a0, 0x00a0,\r
-  0x00a0, 0x00a0, 0x10a0, 0x10a0, 0x00a0, 0x30e2, 0x00a0, 0x01a0,\r
-  0x00a0, 0x10a0, 0x30e2, 0x01a0, 0x10a0, 0x10a0, 0x10a0, 0x01a0,\r
-  0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2,\r
-  0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2,\r
-  0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x00a0,\r
-  0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x30e2,\r
-  0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2,\r
-  0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2,\r
-  0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x00a0,\r
-  0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2\r
-};\r
-\r
-/* 'NEWLINE' */\r
-static const OnigCodePoint CR_NEWLINE[] = {\r
-  1,\r
-  0x000a, 0x000a\r
-}; /* CR_NEWLINE */\r
-\r
-/* 'Alpha': [[:Alpha:]] */\r
-static const OnigCodePoint CR_Alpha[] = {\r
-  418,\r
-  0x0041, 0x005a,\r
-  0x0061, 0x007a,\r
-  0x00aa, 0x00aa,\r
-  0x00b5, 0x00b5,\r
-  0x00ba, 0x00ba,\r
-  0x00c0, 0x00d6,\r
-  0x00d8, 0x00f6,\r
-  0x00f8, 0x0241,\r
-  0x0250, 0x02c1,\r
-  0x02c6, 0x02d1,\r
-  0x02e0, 0x02e4,\r
-  0x02ee, 0x02ee,\r
-  0x0300, 0x036f,\r
-  0x037a, 0x037a,\r
-  0x0386, 0x0386,\r
-  0x0388, 0x038a,\r
-  0x038c, 0x038c,\r
-  0x038e, 0x03a1,\r
-  0x03a3, 0x03ce,\r
-  0x03d0, 0x03f5,\r
-  0x03f7, 0x0481,\r
-  0x0483, 0x0486,\r
-  0x0488, 0x04ce,\r
-  0x04d0, 0x04f9,\r
-  0x0500, 0x050f,\r
-  0x0531, 0x0556,\r
-  0x0559, 0x0559,\r
-  0x0561, 0x0587,\r
-  0x0591, 0x05b9,\r
-  0x05bb, 0x05bd,\r
-  0x05bf, 0x05bf,\r
-  0x05c1, 0x05c2,\r
-  0x05c4, 0x05c5,\r
-  0x05c7, 0x05c7,\r
-  0x05d0, 0x05ea,\r
-  0x05f0, 0x05f2,\r
-  0x0610, 0x0615,\r
-  0x0621, 0x063a,\r
-  0x0640, 0x065e,\r
-  0x066e, 0x06d3,\r
-  0x06d5, 0x06dc,\r
-  0x06de, 0x06e8,\r
-  0x06ea, 0x06ef,\r
-  0x06fa, 0x06fc,\r
-  0x06ff, 0x06ff,\r
-  0x0710, 0x074a,\r
-  0x074d, 0x076d,\r
-  0x0780, 0x07b1,\r
-  0x0901, 0x0939,\r
-  0x093c, 0x094d,\r
-  0x0950, 0x0954,\r
-  0x0958, 0x0963,\r
-  0x097d, 0x097d,\r
-  0x0981, 0x0983,\r
-  0x0985, 0x098c,\r
-  0x098f, 0x0990,\r
-  0x0993, 0x09a8,\r
-  0x09aa, 0x09b0,\r
-  0x09b2, 0x09b2,\r
-  0x09b6, 0x09b9,\r
-  0x09bc, 0x09c4,\r
-  0x09c7, 0x09c8,\r
-  0x09cb, 0x09ce,\r
-  0x09d7, 0x09d7,\r
-  0x09dc, 0x09dd,\r
-  0x09df, 0x09e3,\r
-  0x09f0, 0x09f1,\r
-  0x0a01, 0x0a03,\r
-  0x0a05, 0x0a0a,\r
-  0x0a0f, 0x0a10,\r
-  0x0a13, 0x0a28,\r
-  0x0a2a, 0x0a30,\r
-  0x0a32, 0x0a33,\r
-  0x0a35, 0x0a36,\r
-  0x0a38, 0x0a39,\r
-  0x0a3c, 0x0a3c,\r
-  0x0a3e, 0x0a42,\r
-  0x0a47, 0x0a48,\r
-  0x0a4b, 0x0a4d,\r
-  0x0a59, 0x0a5c,\r
-  0x0a5e, 0x0a5e,\r
-  0x0a70, 0x0a74,\r
-  0x0a81, 0x0a83,\r
-  0x0a85, 0x0a8d,\r
-  0x0a8f, 0x0a91,\r
-  0x0a93, 0x0aa8,\r
-  0x0aaa, 0x0ab0,\r
-  0x0ab2, 0x0ab3,\r
-  0x0ab5, 0x0ab9,\r
-  0x0abc, 0x0ac5,\r
-  0x0ac7, 0x0ac9,\r
-  0x0acb, 0x0acd,\r
-  0x0ad0, 0x0ad0,\r
-  0x0ae0, 0x0ae3,\r
-  0x0b01, 0x0b03,\r
-  0x0b05, 0x0b0c,\r
-  0x0b0f, 0x0b10,\r
-  0x0b13, 0x0b28,\r
-  0x0b2a, 0x0b30,\r
-  0x0b32, 0x0b33,\r
-  0x0b35, 0x0b39,\r
-  0x0b3c, 0x0b43,\r
-  0x0b47, 0x0b48,\r
-  0x0b4b, 0x0b4d,\r
-  0x0b56, 0x0b57,\r
-  0x0b5c, 0x0b5d,\r
-  0x0b5f, 0x0b61,\r
-  0x0b71, 0x0b71,\r
-  0x0b82, 0x0b83,\r
-  0x0b85, 0x0b8a,\r
-  0x0b8e, 0x0b90,\r
-  0x0b92, 0x0b95,\r
-  0x0b99, 0x0b9a,\r
-  0x0b9c, 0x0b9c,\r
-  0x0b9e, 0x0b9f,\r
-  0x0ba3, 0x0ba4,\r
-  0x0ba8, 0x0baa,\r
-  0x0bae, 0x0bb9,\r
-  0x0bbe, 0x0bc2,\r
-  0x0bc6, 0x0bc8,\r
-  0x0bca, 0x0bcd,\r
-  0x0bd7, 0x0bd7,\r
-  0x0c01, 0x0c03,\r
-  0x0c05, 0x0c0c,\r
-  0x0c0e, 0x0c10,\r
-  0x0c12, 0x0c28,\r
-  0x0c2a, 0x0c33,\r
-  0x0c35, 0x0c39,\r
-  0x0c3e, 0x0c44,\r
-  0x0c46, 0x0c48,\r
-  0x0c4a, 0x0c4d,\r
-  0x0c55, 0x0c56,\r
-  0x0c60, 0x0c61,\r
-  0x0c82, 0x0c83,\r
-  0x0c85, 0x0c8c,\r
-  0x0c8e, 0x0c90,\r
-  0x0c92, 0x0ca8,\r
-  0x0caa, 0x0cb3,\r
-  0x0cb5, 0x0cb9,\r
-  0x0cbc, 0x0cc4,\r
-  0x0cc6, 0x0cc8,\r
-  0x0cca, 0x0ccd,\r
-  0x0cd5, 0x0cd6,\r
-  0x0cde, 0x0cde,\r
-  0x0ce0, 0x0ce1,\r
-  0x0d02, 0x0d03,\r
-  0x0d05, 0x0d0c,\r
-  0x0d0e, 0x0d10,\r
-  0x0d12, 0x0d28,\r
-  0x0d2a, 0x0d39,\r
-  0x0d3e, 0x0d43,\r
-  0x0d46, 0x0d48,\r
-  0x0d4a, 0x0d4d,\r
-  0x0d57, 0x0d57,\r
-  0x0d60, 0x0d61,\r
-  0x0d82, 0x0d83,\r
-  0x0d85, 0x0d96,\r
-  0x0d9a, 0x0db1,\r
-  0x0db3, 0x0dbb,\r
-  0x0dbd, 0x0dbd,\r
-  0x0dc0, 0x0dc6,\r
-  0x0dca, 0x0dca,\r
-  0x0dcf, 0x0dd4,\r
-  0x0dd6, 0x0dd6,\r
-  0x0dd8, 0x0ddf,\r
-  0x0df2, 0x0df3,\r
-  0x0e01, 0x0e3a,\r
-  0x0e40, 0x0e4e,\r
-  0x0e81, 0x0e82,\r
-  0x0e84, 0x0e84,\r
-  0x0e87, 0x0e88,\r
-  0x0e8a, 0x0e8a,\r
-  0x0e8d, 0x0e8d,\r
-  0x0e94, 0x0e97,\r
-  0x0e99, 0x0e9f,\r
-  0x0ea1, 0x0ea3,\r
-  0x0ea5, 0x0ea5,\r
-  0x0ea7, 0x0ea7,\r
-  0x0eaa, 0x0eab,\r
-  0x0ead, 0x0eb9,\r
-  0x0ebb, 0x0ebd,\r
-  0x0ec0, 0x0ec4,\r
-  0x0ec6, 0x0ec6,\r
-  0x0ec8, 0x0ecd,\r
-  0x0edc, 0x0edd,\r
-  0x0f00, 0x0f00,\r
-  0x0f18, 0x0f19,\r
-  0x0f35, 0x0f35,\r
-  0x0f37, 0x0f37,\r
-  0x0f39, 0x0f39,\r
-  0x0f3e, 0x0f47,\r
-  0x0f49, 0x0f6a,\r
-  0x0f71, 0x0f84,\r
-  0x0f86, 0x0f8b,\r
-  0x0f90, 0x0f97,\r
-  0x0f99, 0x0fbc,\r
-  0x0fc6, 0x0fc6,\r
-  0x1000, 0x1021,\r
-  0x1023, 0x1027,\r
-  0x1029, 0x102a,\r
-  0x102c, 0x1032,\r
-  0x1036, 0x1039,\r
-  0x1050, 0x1059,\r
-  0x10a0, 0x10c5,\r
-  0x10d0, 0x10fa,\r
-  0x10fc, 0x10fc,\r
-  0x1100, 0x1159,\r
-  0x115f, 0x11a2,\r
-  0x11a8, 0x11f9,\r
-  0x1200, 0x1248,\r
-  0x124a, 0x124d,\r
-  0x1250, 0x1256,\r
-  0x1258, 0x1258,\r
-  0x125a, 0x125d,\r
-  0x1260, 0x1288,\r
-  0x128a, 0x128d,\r
-  0x1290, 0x12b0,\r
-  0x12b2, 0x12b5,\r
-  0x12b8, 0x12be,\r
-  0x12c0, 0x12c0,\r
-  0x12c2, 0x12c5,\r
-  0x12c8, 0x12d6,\r
-  0x12d8, 0x1310,\r
-  0x1312, 0x1315,\r
-  0x1318, 0x135a,\r
-  0x135f, 0x135f,\r
-  0x1380, 0x138f,\r
-  0x13a0, 0x13f4,\r
-  0x1401, 0x166c,\r
-  0x166f, 0x1676,\r
-  0x1681, 0x169a,\r
-  0x16a0, 0x16ea,\r
-  0x1700, 0x170c,\r
-  0x170e, 0x1714,\r
-  0x1720, 0x1734,\r
-  0x1740, 0x1753,\r
-  0x1760, 0x176c,\r
-  0x176e, 0x1770,\r
-  0x1772, 0x1773,\r
-  0x1780, 0x17b3,\r
-  0x17b6, 0x17d3,\r
-  0x17d7, 0x17d7,\r
-  0x17dc, 0x17dd,\r
-  0x180b, 0x180d,\r
-  0x1820, 0x1877,\r
-  0x1880, 0x18a9,\r
-  0x1900, 0x191c,\r
-  0x1920, 0x192b,\r
-  0x1930, 0x193b,\r
-  0x1950, 0x196d,\r
-  0x1970, 0x1974,\r
-  0x1980, 0x19a9,\r
-  0x19b0, 0x19c9,\r
-  0x1a00, 0x1a1b,\r
-  0x1d00, 0x1dc3,\r
-  0x1e00, 0x1e9b,\r
-  0x1ea0, 0x1ef9,\r
-  0x1f00, 0x1f15,\r
-  0x1f18, 0x1f1d,\r
-  0x1f20, 0x1f45,\r
-  0x1f48, 0x1f4d,\r
-  0x1f50, 0x1f57,\r
-  0x1f59, 0x1f59,\r
-  0x1f5b, 0x1f5b,\r
-  0x1f5d, 0x1f5d,\r
-  0x1f5f, 0x1f7d,\r
-  0x1f80, 0x1fb4,\r
-  0x1fb6, 0x1fbc,\r
-  0x1fbe, 0x1fbe,\r
-  0x1fc2, 0x1fc4,\r
-  0x1fc6, 0x1fcc,\r
-  0x1fd0, 0x1fd3,\r
-  0x1fd6, 0x1fdb,\r
-  0x1fe0, 0x1fec,\r
-  0x1ff2, 0x1ff4,\r
-  0x1ff6, 0x1ffc,\r
-  0x2071, 0x2071,\r
-  0x207f, 0x207f,\r
-  0x2090, 0x2094,\r
-  0x20d0, 0x20eb,\r
-  0x2102, 0x2102,\r
-  0x2107, 0x2107,\r
-  0x210a, 0x2113,\r
-  0x2115, 0x2115,\r
-  0x2119, 0x211d,\r
-  0x2124, 0x2124,\r
-  0x2126, 0x2126,\r
-  0x2128, 0x2128,\r
-  0x212a, 0x212d,\r
-  0x212f, 0x2131,\r
-  0x2133, 0x2139,\r
-  0x213c, 0x213f,\r
-  0x2145, 0x2149,\r
-  0x2c00, 0x2c2e,\r
-  0x2c30, 0x2c5e,\r
-  0x2c80, 0x2ce4,\r
-  0x2d00, 0x2d25,\r
-  0x2d30, 0x2d65,\r
-  0x2d6f, 0x2d6f,\r
-  0x2d80, 0x2d96,\r
-  0x2da0, 0x2da6,\r
-  0x2da8, 0x2dae,\r
-  0x2db0, 0x2db6,\r
-  0x2db8, 0x2dbe,\r
-  0x2dc0, 0x2dc6,\r
-  0x2dc8, 0x2dce,\r
-  0x2dd0, 0x2dd6,\r
-  0x2dd8, 0x2dde,\r
-  0x3005, 0x3006,\r
-  0x302a, 0x302f,\r
-  0x3031, 0x3035,\r
-  0x303b, 0x303c,\r
-  0x3041, 0x3096,\r
-  0x3099, 0x309a,\r
-  0x309d, 0x309f,\r
-  0x30a1, 0x30fa,\r
-  0x30fc, 0x30ff,\r
-  0x3105, 0x312c,\r
-  0x3131, 0x318e,\r
-  0x31a0, 0x31b7,\r
-  0x31f0, 0x31ff,\r
-  0x3400, 0x4db5,\r
-  0x4e00, 0x9fbb,\r
-  0xa000, 0xa48c,\r
-  0xa800, 0xa827,\r
-  0xac00, 0xd7a3,\r
-  0xf900, 0xfa2d,\r
-  0xfa30, 0xfa6a,\r
-  0xfa70, 0xfad9,\r
-  0xfb00, 0xfb06,\r
-  0xfb13, 0xfb17,\r
-  0xfb1d, 0xfb28,\r
-  0xfb2a, 0xfb36,\r
-  0xfb38, 0xfb3c,\r
-  0xfb3e, 0xfb3e,\r
-  0xfb40, 0xfb41,\r
-  0xfb43, 0xfb44,\r
-  0xfb46, 0xfbb1,\r
-  0xfbd3, 0xfd3d,\r
-  0xfd50, 0xfd8f,\r
-  0xfd92, 0xfdc7,\r
-  0xfdf0, 0xfdfb,\r
-  0xfe00, 0xfe0f,\r
-  0xfe20, 0xfe23,\r
-  0xfe70, 0xfe74,\r
-  0xfe76, 0xfefc,\r
-  0xff21, 0xff3a,\r
-  0xff41, 0xff5a,\r
-  0xff66, 0xffbe,\r
-  0xffc2, 0xffc7,\r
-  0xffca, 0xffcf,\r
-  0xffd2, 0xffd7,\r
-  0xffda, 0xffdc,\r
-  0x10000, 0x1000b,\r
-  0x1000d, 0x10026,\r
-  0x10028, 0x1003a,\r
-  0x1003c, 0x1003d,\r
-  0x1003f, 0x1004d,\r
-  0x10050, 0x1005d,\r
-  0x10080, 0x100fa,\r
-  0x10300, 0x1031e,\r
-  0x10330, 0x10349,\r
-  0x10380, 0x1039d,\r
-  0x103a0, 0x103c3,\r
-  0x103c8, 0x103cf,\r
-  0x10400, 0x1049d,\r
-  0x10800, 0x10805,\r
-  0x10808, 0x10808,\r
-  0x1080a, 0x10835,\r
-  0x10837, 0x10838,\r
-  0x1083c, 0x1083c,\r
-  0x1083f, 0x1083f,\r
-  0x10a00, 0x10a03,\r
-  0x10a05, 0x10a06,\r
-  0x10a0c, 0x10a13,\r
-  0x10a15, 0x10a17,\r
-  0x10a19, 0x10a33,\r
-  0x10a38, 0x10a3a,\r
-  0x10a3f, 0x10a3f,\r
-  0x1d165, 0x1d169,\r
-  0x1d16d, 0x1d172,\r
-  0x1d17b, 0x1d182,\r
-  0x1d185, 0x1d18b,\r
-  0x1d1aa, 0x1d1ad,\r
-  0x1d242, 0x1d244,\r
-  0x1d400, 0x1d454,\r
-  0x1d456, 0x1d49c,\r
-  0x1d49e, 0x1d49f,\r
-  0x1d4a2, 0x1d4a2,\r
-  0x1d4a5, 0x1d4a6,\r
-  0x1d4a9, 0x1d4ac,\r
-  0x1d4ae, 0x1d4b9,\r
-  0x1d4bb, 0x1d4bb,\r
-  0x1d4bd, 0x1d4c3,\r
-  0x1d4c5, 0x1d505,\r
-  0x1d507, 0x1d50a,\r
-  0x1d50d, 0x1d514,\r
-  0x1d516, 0x1d51c,\r
-  0x1d51e, 0x1d539,\r
-  0x1d53b, 0x1d53e,\r
-  0x1d540, 0x1d544,\r
-  0x1d546, 0x1d546,\r
-  0x1d54a, 0x1d550,\r
-  0x1d552, 0x1d6a5,\r
-  0x1d6a8, 0x1d6c0,\r
-  0x1d6c2, 0x1d6da,\r
-  0x1d6dc, 0x1d6fa,\r
-  0x1d6fc, 0x1d714,\r
-  0x1d716, 0x1d734,\r
-  0x1d736, 0x1d74e,\r
-  0x1d750, 0x1d76e,\r
-  0x1d770, 0x1d788,\r
-  0x1d78a, 0x1d7a8,\r
-  0x1d7aa, 0x1d7c2,\r
-  0x1d7c4, 0x1d7c9,\r
-  0x20000, 0x2a6d6,\r
-  0x2f800, 0x2fa1d,\r
-  0xe0100, 0xe01ef\r
-}; /* CR_Alpha */\r
-\r
-/* 'Blank': [[:Blank:]] */\r
-static const OnigCodePoint CR_Blank[] = {\r
-  9,\r
-  0x0009, 0x0009,\r
-  0x0020, 0x0020,\r
-  0x00a0, 0x00a0,\r
-  0x1680, 0x1680,\r
-  0x180e, 0x180e,\r
-  0x2000, 0x200a,\r
-  0x202f, 0x202f,\r
-  0x205f, 0x205f,\r
-  0x3000, 0x3000\r
-}; /* CR_Blank */\r
-\r
-/* 'Cntrl': [[:Cntrl:]] */\r
-static const OnigCodePoint CR_Cntrl[] = {\r
-  19,\r
-  0x0000, 0x001f,\r
-  0x007f, 0x009f,\r
-  0x00ad, 0x00ad,\r
-  0x0600, 0x0603,\r
-  0x06dd, 0x06dd,\r
-  0x070f, 0x070f,\r
-  0x17b4, 0x17b5,\r
-  0x200b, 0x200f,\r
-  0x202a, 0x202e,\r
-  0x2060, 0x2063,\r
-  0x206a, 0x206f,\r
-  0xd800, 0xf8ff,\r
-  0xfeff, 0xfeff,\r
-  0xfff9, 0xfffb,\r
-  0x1d173, 0x1d17a,\r
-  0xe0001, 0xe0001,\r
-  0xe0020, 0xe007f,\r
-  0xf0000, 0xffffd,\r
-  0x100000, 0x10fffd\r
-}; /* CR_Cntrl */\r
-\r
-/* 'Digit': [[:Digit:]] */\r
-static const OnigCodePoint CR_Digit[] = {\r
-  23,\r
-  0x0030, 0x0039,\r
-  0x0660, 0x0669,\r
-  0x06f0, 0x06f9,\r
-  0x0966, 0x096f,\r
-  0x09e6, 0x09ef,\r
-  0x0a66, 0x0a6f,\r
-  0x0ae6, 0x0aef,\r
-  0x0b66, 0x0b6f,\r
-  0x0be6, 0x0bef,\r
-  0x0c66, 0x0c6f,\r
-  0x0ce6, 0x0cef,\r
-  0x0d66, 0x0d6f,\r
-  0x0e50, 0x0e59,\r
-  0x0ed0, 0x0ed9,\r
-  0x0f20, 0x0f29,\r
-  0x1040, 0x1049,\r
-  0x17e0, 0x17e9,\r
-  0x1810, 0x1819,\r
-  0x1946, 0x194f,\r
-  0x19d0, 0x19d9,\r
-  0xff10, 0xff19,\r
-  0x104a0, 0x104a9,\r
-  0x1d7ce, 0x1d7ff\r
-}; /* CR_Digit */\r
-\r
-/* 'Graph': [[:Graph:]] */\r
-static const OnigCodePoint CR_Graph[] = {\r
-  424,\r
-  0x0021, 0x007e,\r
-  0x00a1, 0x0241,\r
-  0x0250, 0x036f,\r
-  0x0374, 0x0375,\r
-  0x037a, 0x037a,\r
-  0x037e, 0x037e,\r
-  0x0384, 0x038a,\r
-  0x038c, 0x038c,\r
-  0x038e, 0x03a1,\r
-  0x03a3, 0x03ce,\r
-  0x03d0, 0x0486,\r
-  0x0488, 0x04ce,\r
-  0x04d0, 0x04f9,\r
-  0x0500, 0x050f,\r
-  0x0531, 0x0556,\r
-  0x0559, 0x055f,\r
-  0x0561, 0x0587,\r
-  0x0589, 0x058a,\r
-  0x0591, 0x05b9,\r
-  0x05bb, 0x05c7,\r
-  0x05d0, 0x05ea,\r
-  0x05f0, 0x05f4,\r
-  0x0600, 0x0603,\r
-  0x060b, 0x0615,\r
-  0x061b, 0x061b,\r
-  0x061e, 0x061f,\r
-  0x0621, 0x063a,\r
-  0x0640, 0x065e,\r
-  0x0660, 0x070d,\r
-  0x070f, 0x074a,\r
-  0x074d, 0x076d,\r
-  0x0780, 0x07b1,\r
-  0x0901, 0x0939,\r
-  0x093c, 0x094d,\r
-  0x0950, 0x0954,\r
-  0x0958, 0x0970,\r
-  0x097d, 0x097d,\r
-  0x0981, 0x0983,\r
-  0x0985, 0x098c,\r
-  0x098f, 0x0990,\r
-  0x0993, 0x09a8,\r
-  0x09aa, 0x09b0,\r
-  0x09b2, 0x09b2,\r
-  0x09b6, 0x09b9,\r
-  0x09bc, 0x09c4,\r
-  0x09c7, 0x09c8,\r
-  0x09cb, 0x09ce,\r
-  0x09d7, 0x09d7,\r
-  0x09dc, 0x09dd,\r
-  0x09df, 0x09e3,\r
-  0x09e6, 0x09fa,\r
-  0x0a01, 0x0a03,\r
-  0x0a05, 0x0a0a,\r
-  0x0a0f, 0x0a10,\r
-  0x0a13, 0x0a28,\r
-  0x0a2a, 0x0a30,\r
-  0x0a32, 0x0a33,\r
-  0x0a35, 0x0a36,\r
-  0x0a38, 0x0a39,\r
-  0x0a3c, 0x0a3c,\r
-  0x0a3e, 0x0a42,\r
-  0x0a47, 0x0a48,\r
-  0x0a4b, 0x0a4d,\r
-  0x0a59, 0x0a5c,\r
-  0x0a5e, 0x0a5e,\r
-  0x0a66, 0x0a74,\r
-  0x0a81, 0x0a83,\r
-  0x0a85, 0x0a8d,\r
-  0x0a8f, 0x0a91,\r
-  0x0a93, 0x0aa8,\r
-  0x0aaa, 0x0ab0,\r
-  0x0ab2, 0x0ab3,\r
-  0x0ab5, 0x0ab9,\r
-  0x0abc, 0x0ac5,\r
-  0x0ac7, 0x0ac9,\r
-  0x0acb, 0x0acd,\r
-  0x0ad0, 0x0ad0,\r
-  0x0ae0, 0x0ae3,\r
-  0x0ae6, 0x0aef,\r
-  0x0af1, 0x0af1,\r
-  0x0b01, 0x0b03,\r
-  0x0b05, 0x0b0c,\r
-  0x0b0f, 0x0b10,\r
-  0x0b13, 0x0b28,\r
-  0x0b2a, 0x0b30,\r
-  0x0b32, 0x0b33,\r
-  0x0b35, 0x0b39,\r
-  0x0b3c, 0x0b43,\r
-  0x0b47, 0x0b48,\r
-  0x0b4b, 0x0b4d,\r
-  0x0b56, 0x0b57,\r
-  0x0b5c, 0x0b5d,\r
-  0x0b5f, 0x0b61,\r
-  0x0b66, 0x0b71,\r
-  0x0b82, 0x0b83,\r
-  0x0b85, 0x0b8a,\r
-  0x0b8e, 0x0b90,\r
-  0x0b92, 0x0b95,\r
-  0x0b99, 0x0b9a,\r
-  0x0b9c, 0x0b9c,\r
-  0x0b9e, 0x0b9f,\r
-  0x0ba3, 0x0ba4,\r
-  0x0ba8, 0x0baa,\r
-  0x0bae, 0x0bb9,\r
-  0x0bbe, 0x0bc2,\r
-  0x0bc6, 0x0bc8,\r
-  0x0bca, 0x0bcd,\r
-  0x0bd7, 0x0bd7,\r
-  0x0be6, 0x0bfa,\r
-  0x0c01, 0x0c03,\r
-  0x0c05, 0x0c0c,\r
-  0x0c0e, 0x0c10,\r
-  0x0c12, 0x0c28,\r
-  0x0c2a, 0x0c33,\r
-  0x0c35, 0x0c39,\r
-  0x0c3e, 0x0c44,\r
-  0x0c46, 0x0c48,\r
-  0x0c4a, 0x0c4d,\r
-  0x0c55, 0x0c56,\r
-  0x0c60, 0x0c61,\r
-  0x0c66, 0x0c6f,\r
-  0x0c82, 0x0c83,\r
-  0x0c85, 0x0c8c,\r
-  0x0c8e, 0x0c90,\r
-  0x0c92, 0x0ca8,\r
-  0x0caa, 0x0cb3,\r
-  0x0cb5, 0x0cb9,\r
-  0x0cbc, 0x0cc4,\r
-  0x0cc6, 0x0cc8,\r
-  0x0cca, 0x0ccd,\r
-  0x0cd5, 0x0cd6,\r
-  0x0cde, 0x0cde,\r
-  0x0ce0, 0x0ce1,\r
-  0x0ce6, 0x0cef,\r
-  0x0d02, 0x0d03,\r
-  0x0d05, 0x0d0c,\r
-  0x0d0e, 0x0d10,\r
-  0x0d12, 0x0d28,\r
-  0x0d2a, 0x0d39,\r
-  0x0d3e, 0x0d43,\r
-  0x0d46, 0x0d48,\r
-  0x0d4a, 0x0d4d,\r
-  0x0d57, 0x0d57,\r
-  0x0d60, 0x0d61,\r
-  0x0d66, 0x0d6f,\r
-  0x0d82, 0x0d83,\r
-  0x0d85, 0x0d96,\r
-  0x0d9a, 0x0db1,\r
-  0x0db3, 0x0dbb,\r
-  0x0dbd, 0x0dbd,\r
-  0x0dc0, 0x0dc6,\r
-  0x0dca, 0x0dca,\r
-  0x0dcf, 0x0dd4,\r
-  0x0dd6, 0x0dd6,\r
-  0x0dd8, 0x0ddf,\r
-  0x0df2, 0x0df4,\r
-  0x0e01, 0x0e3a,\r
-  0x0e3f, 0x0e5b,\r
-  0x0e81, 0x0e82,\r
-  0x0e84, 0x0e84,\r
-  0x0e87, 0x0e88,\r
-  0x0e8a, 0x0e8a,\r
-  0x0e8d, 0x0e8d,\r
-  0x0e94, 0x0e97,\r
-  0x0e99, 0x0e9f,\r
-  0x0ea1, 0x0ea3,\r
-  0x0ea5, 0x0ea5,\r
-  0x0ea7, 0x0ea7,\r
-  0x0eaa, 0x0eab,\r
-  0x0ead, 0x0eb9,\r
-  0x0ebb, 0x0ebd,\r
-  0x0ec0, 0x0ec4,\r
-  0x0ec6, 0x0ec6,\r
-  0x0ec8, 0x0ecd,\r
-  0x0ed0, 0x0ed9,\r
-  0x0edc, 0x0edd,\r
-  0x0f00, 0x0f47,\r
-  0x0f49, 0x0f6a,\r
-  0x0f71, 0x0f8b,\r
-  0x0f90, 0x0f97,\r
-  0x0f99, 0x0fbc,\r
-  0x0fbe, 0x0fcc,\r
-  0x0fcf, 0x0fd1,\r
-  0x1000, 0x1021,\r
-  0x1023, 0x1027,\r
-  0x1029, 0x102a,\r
-  0x102c, 0x1032,\r
-  0x1036, 0x1039,\r
-  0x1040, 0x1059,\r
-  0x10a0, 0x10c5,\r
-  0x10d0, 0x10fc,\r
-  0x1100, 0x1159,\r
-  0x115f, 0x11a2,\r
-  0x11a8, 0x11f9,\r
-  0x1200, 0x1248,\r
-  0x124a, 0x124d,\r
-  0x1250, 0x1256,\r
-  0x1258, 0x1258,\r
-  0x125a, 0x125d,\r
-  0x1260, 0x1288,\r
-  0x128a, 0x128d,\r
-  0x1290, 0x12b0,\r
-  0x12b2, 0x12b5,\r
-  0x12b8, 0x12be,\r
-  0x12c0, 0x12c0,\r
-  0x12c2, 0x12c5,\r
-  0x12c8, 0x12d6,\r
-  0x12d8, 0x1310,\r
-  0x1312, 0x1315,\r
-  0x1318, 0x135a,\r
-  0x135f, 0x137c,\r
-  0x1380, 0x1399,\r
-  0x13a0, 0x13f4,\r
-  0x1401, 0x1676,\r
-  0x1681, 0x169c,\r
-  0x16a0, 0x16f0,\r
-  0x1700, 0x170c,\r
-  0x170e, 0x1714,\r
-  0x1720, 0x1736,\r
-  0x1740, 0x1753,\r
-  0x1760, 0x176c,\r
-  0x176e, 0x1770,\r
-  0x1772, 0x1773,\r
-  0x1780, 0x17dd,\r
-  0x17e0, 0x17e9,\r
-  0x17f0, 0x17f9,\r
-  0x1800, 0x180d,\r
-  0x1810, 0x1819,\r
-  0x1820, 0x1877,\r
-  0x1880, 0x18a9,\r
-  0x1900, 0x191c,\r
-  0x1920, 0x192b,\r
-  0x1930, 0x193b,\r
-  0x1940, 0x1940,\r
-  0x1944, 0x196d,\r
-  0x1970, 0x1974,\r
-  0x1980, 0x19a9,\r
-  0x19b0, 0x19c9,\r
-  0x19d0, 0x19d9,\r
-  0x19de, 0x1a1b,\r
-  0x1a1e, 0x1a1f,\r
-  0x1d00, 0x1dc3,\r
-  0x1e00, 0x1e9b,\r
-  0x1ea0, 0x1ef9,\r
-  0x1f00, 0x1f15,\r
-  0x1f18, 0x1f1d,\r
-  0x1f20, 0x1f45,\r
-  0x1f48, 0x1f4d,\r
-  0x1f50, 0x1f57,\r
-  0x1f59, 0x1f59,\r
-  0x1f5b, 0x1f5b,\r
-  0x1f5d, 0x1f5d,\r
-  0x1f5f, 0x1f7d,\r
-  0x1f80, 0x1fb4,\r
-  0x1fb6, 0x1fc4,\r
-  0x1fc6, 0x1fd3,\r
-  0x1fd6, 0x1fdb,\r
-  0x1fdd, 0x1fef,\r
-  0x1ff2, 0x1ff4,\r
-  0x1ff6, 0x1ffe,\r
-  0x200b, 0x2027,\r
-  0x202a, 0x202e,\r
-  0x2030, 0x205e,\r
-  0x2060, 0x2063,\r
-  0x206a, 0x2071,\r
-  0x2074, 0x208e,\r
-  0x2090, 0x2094,\r
-  0x20a0, 0x20b5,\r
-  0x20d0, 0x20eb,\r
-  0x2100, 0x214c,\r
-  0x2153, 0x2183,\r
-  0x2190, 0x23db,\r
-  0x2400, 0x2426,\r
-  0x2440, 0x244a,\r
-  0x2460, 0x269c,\r
-  0x26a0, 0x26b1,\r
-  0x2701, 0x2704,\r
-  0x2706, 0x2709,\r
-  0x270c, 0x2727,\r
-  0x2729, 0x274b,\r
-  0x274d, 0x274d,\r
-  0x274f, 0x2752,\r
-  0x2756, 0x2756,\r
-  0x2758, 0x275e,\r
-  0x2761, 0x2794,\r
-  0x2798, 0x27af,\r
-  0x27b1, 0x27be,\r
-  0x27c0, 0x27c6,\r
-  0x27d0, 0x27eb,\r
-  0x27f0, 0x2b13,\r
-  0x2c00, 0x2c2e,\r
-  0x2c30, 0x2c5e,\r
-  0x2c80, 0x2cea,\r
-  0x2cf9, 0x2d25,\r
-  0x2d30, 0x2d65,\r
-  0x2d6f, 0x2d6f,\r
-  0x2d80, 0x2d96,\r
-  0x2da0, 0x2da6,\r
-  0x2da8, 0x2dae,\r
-  0x2db0, 0x2db6,\r
-  0x2db8, 0x2dbe,\r
-  0x2dc0, 0x2dc6,\r
-  0x2dc8, 0x2dce,\r
-  0x2dd0, 0x2dd6,\r
-  0x2dd8, 0x2dde,\r
-  0x2e00, 0x2e17,\r
-  0x2e1c, 0x2e1d,\r
-  0x2e80, 0x2e99,\r
-  0x2e9b, 0x2ef3,\r
-  0x2f00, 0x2fd5,\r
-  0x2ff0, 0x2ffb,\r
-  0x3001, 0x303f,\r
-  0x3041, 0x3096,\r
-  0x3099, 0x30ff,\r
-  0x3105, 0x312c,\r
-  0x3131, 0x318e,\r
-  0x3190, 0x31b7,\r
-  0x31c0, 0x31cf,\r
-  0x31f0, 0x321e,\r
-  0x3220, 0x3243,\r
-  0x3250, 0x32fe,\r
-  0x3300, 0x4db5,\r
-  0x4dc0, 0x9fbb,\r
-  0xa000, 0xa48c,\r
-  0xa490, 0xa4c6,\r
-  0xa700, 0xa716,\r
-  0xa800, 0xa82b,\r
-  0xac00, 0xd7a3,\r
-  0xe000, 0xfa2d,\r
-  0xfa30, 0xfa6a,\r
-  0xfa70, 0xfad9,\r
-  0xfb00, 0xfb06,\r
-  0xfb13, 0xfb17,\r
-  0xfb1d, 0xfb36,\r
-  0xfb38, 0xfb3c,\r
-  0xfb3e, 0xfb3e,\r
-  0xfb40, 0xfb41,\r
-  0xfb43, 0xfb44,\r
-  0xfb46, 0xfbb1,\r
-  0xfbd3, 0xfd3f,\r
-  0xfd50, 0xfd8f,\r
-  0xfd92, 0xfdc7,\r
-  0xfdf0, 0xfdfd,\r
-  0xfe00, 0xfe19,\r
-  0xfe20, 0xfe23,\r
-  0xfe30, 0xfe52,\r
-  0xfe54, 0xfe66,\r
-  0xfe68, 0xfe6b,\r
-  0xfe70, 0xfe74,\r
-  0xfe76, 0xfefc,\r
-  0xfeff, 0xfeff,\r
-  0xff01, 0xffbe,\r
-  0xffc2, 0xffc7,\r
-  0xffca, 0xffcf,\r
-  0xffd2, 0xffd7,\r
-  0xffda, 0xffdc,\r
-  0xffe0, 0xffe6,\r
-  0xffe8, 0xffee,\r
-  0xfff9, 0xfffd,\r
-  0x10000, 0x1000b,\r
-  0x1000d, 0x10026,\r
-  0x10028, 0x1003a,\r
-  0x1003c, 0x1003d,\r
-  0x1003f, 0x1004d,\r
-  0x10050, 0x1005d,\r
-  0x10080, 0x100fa,\r
-  0x10100, 0x10102,\r
-  0x10107, 0x10133,\r
-  0x10137, 0x1018a,\r
-  0x10300, 0x1031e,\r
-  0x10320, 0x10323,\r
-  0x10330, 0x1034a,\r
-  0x10380, 0x1039d,\r
-  0x1039f, 0x103c3,\r
-  0x103c8, 0x103d5,\r
-  0x10400, 0x1049d,\r
-  0x104a0, 0x104a9,\r
-  0x10800, 0x10805,\r
-  0x10808, 0x10808,\r
-  0x1080a, 0x10835,\r
-  0x10837, 0x10838,\r
-  0x1083c, 0x1083c,\r
-  0x1083f, 0x1083f,\r
-  0x10a00, 0x10a03,\r
-  0x10a05, 0x10a06,\r
-  0x10a0c, 0x10a13,\r
-  0x10a15, 0x10a17,\r
-  0x10a19, 0x10a33,\r
-  0x10a38, 0x10a3a,\r
-  0x10a3f, 0x10a47,\r
-  0x10a50, 0x10a58,\r
-  0x1d000, 0x1d0f5,\r
-  0x1d100, 0x1d126,\r
-  0x1d12a, 0x1d1dd,\r
-  0x1d200, 0x1d245,\r
-  0x1d300, 0x1d356,\r
-  0x1d400, 0x1d454,\r
-  0x1d456, 0x1d49c,\r
-  0x1d49e, 0x1d49f,\r
-  0x1d4a2, 0x1d4a2,\r
-  0x1d4a5, 0x1d4a6,\r
-  0x1d4a9, 0x1d4ac,\r
-  0x1d4ae, 0x1d4b9,\r
-  0x1d4bb, 0x1d4bb,\r
-  0x1d4bd, 0x1d4c3,\r
-  0x1d4c5, 0x1d505,\r
-  0x1d507, 0x1d50a,\r
-  0x1d50d, 0x1d514,\r
-  0x1d516, 0x1d51c,\r
-  0x1d51e, 0x1d539,\r
-  0x1d53b, 0x1d53e,\r
-  0x1d540, 0x1d544,\r
-  0x1d546, 0x1d546,\r
-  0x1d54a, 0x1d550,\r
-  0x1d552, 0x1d6a5,\r
-  0x1d6a8, 0x1d7c9,\r
-  0x1d7ce, 0x1d7ff,\r
-  0x20000, 0x2a6d6,\r
-  0x2f800, 0x2fa1d,\r
-  0xe0001, 0xe0001,\r
-  0xe0020, 0xe007f,\r
-  0xe0100, 0xe01ef,\r
-  0xf0000, 0xffffd,\r
-  0x100000, 0x10fffd\r
-}; /* CR_Graph */\r
-\r
-/* 'Lower': [[:Lower:]] */\r
-static const OnigCodePoint CR_Lower[] = {\r
-  480,\r
-  0x0061, 0x007a,\r
-  0x00aa, 0x00aa,\r
-  0x00b5, 0x00b5,\r
-  0x00ba, 0x00ba,\r
-  0x00df, 0x00f6,\r
-  0x00f8, 0x00ff,\r
-  0x0101, 0x0101,\r
-  0x0103, 0x0103,\r
-  0x0105, 0x0105,\r
-  0x0107, 0x0107,\r
-  0x0109, 0x0109,\r
-  0x010b, 0x010b,\r
-  0x010d, 0x010d,\r
-  0x010f, 0x010f,\r
-  0x0111, 0x0111,\r
-  0x0113, 0x0113,\r
-  0x0115, 0x0115,\r
-  0x0117, 0x0117,\r
-  0x0119, 0x0119,\r
-  0x011b, 0x011b,\r
-  0x011d, 0x011d,\r
-  0x011f, 0x011f,\r
-  0x0121, 0x0121,\r
-  0x0123, 0x0123,\r
-  0x0125, 0x0125,\r
-  0x0127, 0x0127,\r
-  0x0129, 0x0129,\r
-  0x012b, 0x012b,\r
-  0x012d, 0x012d,\r
-  0x012f, 0x012f,\r
-  0x0131, 0x0131,\r
-  0x0133, 0x0133,\r
-  0x0135, 0x0135,\r
-  0x0137, 0x0138,\r
-  0x013a, 0x013a,\r
-  0x013c, 0x013c,\r
-  0x013e, 0x013e,\r
-  0x0140, 0x0140,\r
-  0x0142, 0x0142,\r
-  0x0144, 0x0144,\r
-  0x0146, 0x0146,\r
-  0x0148, 0x0149,\r
-  0x014b, 0x014b,\r
-  0x014d, 0x014d,\r
-  0x014f, 0x014f,\r
-  0x0151, 0x0151,\r
-  0x0153, 0x0153,\r
-  0x0155, 0x0155,\r
-  0x0157, 0x0157,\r
-  0x0159, 0x0159,\r
-  0x015b, 0x015b,\r
-  0x015d, 0x015d,\r
-  0x015f, 0x015f,\r
-  0x0161, 0x0161,\r
-  0x0163, 0x0163,\r
-  0x0165, 0x0165,\r
-  0x0167, 0x0167,\r
-  0x0169, 0x0169,\r
-  0x016b, 0x016b,\r
-  0x016d, 0x016d,\r
-  0x016f, 0x016f,\r
-  0x0171, 0x0171,\r
-  0x0173, 0x0173,\r
-  0x0175, 0x0175,\r
-  0x0177, 0x0177,\r
-  0x017a, 0x017a,\r
-  0x017c, 0x017c,\r
-  0x017e, 0x0180,\r
-  0x0183, 0x0183,\r
-  0x0185, 0x0185,\r
-  0x0188, 0x0188,\r
-  0x018c, 0x018d,\r
-  0x0192, 0x0192,\r
-  0x0195, 0x0195,\r
-  0x0199, 0x019b,\r
-  0x019e, 0x019e,\r
-  0x01a1, 0x01a1,\r
-  0x01a3, 0x01a3,\r
-  0x01a5, 0x01a5,\r
-  0x01a8, 0x01a8,\r
-  0x01aa, 0x01ab,\r
-  0x01ad, 0x01ad,\r
-  0x01b0, 0x01b0,\r
-  0x01b4, 0x01b4,\r
-  0x01b6, 0x01b6,\r
-  0x01b9, 0x01ba,\r
-  0x01bd, 0x01bf,\r
-  0x01c6, 0x01c6,\r
-  0x01c9, 0x01c9,\r
-  0x01cc, 0x01cc,\r
-  0x01ce, 0x01ce,\r
-  0x01d0, 0x01d0,\r
-  0x01d2, 0x01d2,\r
-  0x01d4, 0x01d4,\r
-  0x01d6, 0x01d6,\r
-  0x01d8, 0x01d8,\r
-  0x01da, 0x01da,\r
-  0x01dc, 0x01dd,\r
-  0x01df, 0x01df,\r
-  0x01e1, 0x01e1,\r
-  0x01e3, 0x01e3,\r
-  0x01e5, 0x01e5,\r
-  0x01e7, 0x01e7,\r
-  0x01e9, 0x01e9,\r
-  0x01eb, 0x01eb,\r
-  0x01ed, 0x01ed,\r
-  0x01ef, 0x01f0,\r
-  0x01f3, 0x01f3,\r
-  0x01f5, 0x01f5,\r
-  0x01f9, 0x01f9,\r
-  0x01fb, 0x01fb,\r
-  0x01fd, 0x01fd,\r
-  0x01ff, 0x01ff,\r
-  0x0201, 0x0201,\r
-  0x0203, 0x0203,\r
-  0x0205, 0x0205,\r
-  0x0207, 0x0207,\r
-  0x0209, 0x0209,\r
-  0x020b, 0x020b,\r
-  0x020d, 0x020d,\r
-  0x020f, 0x020f,\r
-  0x0211, 0x0211,\r
-  0x0213, 0x0213,\r
-  0x0215, 0x0215,\r
-  0x0217, 0x0217,\r
-  0x0219, 0x0219,\r
-  0x021b, 0x021b,\r
-  0x021d, 0x021d,\r
-  0x021f, 0x021f,\r
-  0x0221, 0x0221,\r
-  0x0223, 0x0223,\r
-  0x0225, 0x0225,\r
-  0x0227, 0x0227,\r
-  0x0229, 0x0229,\r
-  0x022b, 0x022b,\r
-  0x022d, 0x022d,\r
-  0x022f, 0x022f,\r
-  0x0231, 0x0231,\r
-  0x0233, 0x0239,\r
-  0x023c, 0x023c,\r
-  0x023f, 0x0240,\r
-  0x0250, 0x02af,\r
-  0x0390, 0x0390,\r
-  0x03ac, 0x03ce,\r
-  0x03d0, 0x03d1,\r
-  0x03d5, 0x03d7,\r
-  0x03d9, 0x03d9,\r
-  0x03db, 0x03db,\r
-  0x03dd, 0x03dd,\r
-  0x03df, 0x03df,\r
-  0x03e1, 0x03e1,\r
-  0x03e3, 0x03e3,\r
-  0x03e5, 0x03e5,\r
-  0x03e7, 0x03e7,\r
-  0x03e9, 0x03e9,\r
-  0x03eb, 0x03eb,\r
-  0x03ed, 0x03ed,\r
-  0x03ef, 0x03f3,\r
-  0x03f5, 0x03f5,\r
-  0x03f8, 0x03f8,\r
-  0x03fb, 0x03fc,\r
-  0x0430, 0x045f,\r
-  0x0461, 0x0461,\r
-  0x0463, 0x0463,\r
-  0x0465, 0x0465,\r
-  0x0467, 0x0467,\r
-  0x0469, 0x0469,\r
-  0x046b, 0x046b,\r
-  0x046d, 0x046d,\r
-  0x046f, 0x046f,\r
-  0x0471, 0x0471,\r
-  0x0473, 0x0473,\r
-  0x0475, 0x0475,\r
-  0x0477, 0x0477,\r
-  0x0479, 0x0479,\r
-  0x047b, 0x047b,\r
-  0x047d, 0x047d,\r
-  0x047f, 0x047f,\r
-  0x0481, 0x0481,\r
-  0x048b, 0x048b,\r
-  0x048d, 0x048d,\r
-  0x048f, 0x048f,\r
-  0x0491, 0x0491,\r
-  0x0493, 0x0493,\r
-  0x0495, 0x0495,\r
-  0x0497, 0x0497,\r
-  0x0499, 0x0499,\r
-  0x049b, 0x049b,\r
-  0x049d, 0x049d,\r
-  0x049f, 0x049f,\r
-  0x04a1, 0x04a1,\r
-  0x04a3, 0x04a3,\r
-  0x04a5, 0x04a5,\r
-  0x04a7, 0x04a7,\r
-  0x04a9, 0x04a9,\r
-  0x04ab, 0x04ab,\r
-  0x04ad, 0x04ad,\r
-  0x04af, 0x04af,\r
-  0x04b1, 0x04b1,\r
-  0x04b3, 0x04b3,\r
-  0x04b5, 0x04b5,\r
-  0x04b7, 0x04b7,\r
-  0x04b9, 0x04b9,\r
-  0x04bb, 0x04bb,\r
-  0x04bd, 0x04bd,\r
-  0x04bf, 0x04bf,\r
-  0x04c2, 0x04c2,\r
-  0x04c4, 0x04c4,\r
-  0x04c6, 0x04c6,\r
-  0x04c8, 0x04c8,\r
-  0x04ca, 0x04ca,\r
-  0x04cc, 0x04cc,\r
-  0x04ce, 0x04ce,\r
-  0x04d1, 0x04d1,\r
-  0x04d3, 0x04d3,\r
-  0x04d5, 0x04d5,\r
-  0x04d7, 0x04d7,\r
-  0x04d9, 0x04d9,\r
-  0x04db, 0x04db,\r
-  0x04dd, 0x04dd,\r
-  0x04df, 0x04df,\r
-  0x04e1, 0x04e1,\r
-  0x04e3, 0x04e3,\r
-  0x04e5, 0x04e5,\r
-  0x04e7, 0x04e7,\r
-  0x04e9, 0x04e9,\r
-  0x04eb, 0x04eb,\r
-  0x04ed, 0x04ed,\r
-  0x04ef, 0x04ef,\r
-  0x04f1, 0x04f1,\r
-  0x04f3, 0x04f3,\r
-  0x04f5, 0x04f5,\r
-  0x04f7, 0x04f7,\r
-  0x04f9, 0x04f9,\r
-  0x0501, 0x0501,\r
-  0x0503, 0x0503,\r
-  0x0505, 0x0505,\r
-  0x0507, 0x0507,\r
-  0x0509, 0x0509,\r
-  0x050b, 0x050b,\r
-  0x050d, 0x050d,\r
-  0x050f, 0x050f,\r
-  0x0561, 0x0587,\r
-  0x1d00, 0x1d2b,\r
-  0x1d62, 0x1d77,\r
-  0x1d79, 0x1d9a,\r
-  0x1e01, 0x1e01,\r
-  0x1e03, 0x1e03,\r
-  0x1e05, 0x1e05,\r
-  0x1e07, 0x1e07,\r
-  0x1e09, 0x1e09,\r
-  0x1e0b, 0x1e0b,\r
-  0x1e0d, 0x1e0d,\r
-  0x1e0f, 0x1e0f,\r
-  0x1e11, 0x1e11,\r
-  0x1e13, 0x1e13,\r
-  0x1e15, 0x1e15,\r
-  0x1e17, 0x1e17,\r
-  0x1e19, 0x1e19,\r
-  0x1e1b, 0x1e1b,\r
-  0x1e1d, 0x1e1d,\r
-  0x1e1f, 0x1e1f,\r
-  0x1e21, 0x1e21,\r
-  0x1e23, 0x1e23,\r
-  0x1e25, 0x1e25,\r
-  0x1e27, 0x1e27,\r
-  0x1e29, 0x1e29,\r
-  0x1e2b, 0x1e2b,\r
-  0x1e2d, 0x1e2d,\r
-  0x1e2f, 0x1e2f,\r
-  0x1e31, 0x1e31,\r
-  0x1e33, 0x1e33,\r
-  0x1e35, 0x1e35,\r
-  0x1e37, 0x1e37,\r
-  0x1e39, 0x1e39,\r
-  0x1e3b, 0x1e3b,\r
-  0x1e3d, 0x1e3d,\r
-  0x1e3f, 0x1e3f,\r
-  0x1e41, 0x1e41,\r
-  0x1e43, 0x1e43,\r
-  0x1e45, 0x1e45,\r
-  0x1e47, 0x1e47,\r
-  0x1e49, 0x1e49,\r
-  0x1e4b, 0x1e4b,\r
-  0x1e4d, 0x1e4d,\r
-  0x1e4f, 0x1e4f,\r
-  0x1e51, 0x1e51,\r
-  0x1e53, 0x1e53,\r
-  0x1e55, 0x1e55,\r
-  0x1e57, 0x1e57,\r
-  0x1e59, 0x1e59,\r
-  0x1e5b, 0x1e5b,\r
-  0x1e5d, 0x1e5d,\r
-  0x1e5f, 0x1e5f,\r
-  0x1e61, 0x1e61,\r
-  0x1e63, 0x1e63,\r
-  0x1e65, 0x1e65,\r
-  0x1e67, 0x1e67,\r
-  0x1e69, 0x1e69,\r
-  0x1e6b, 0x1e6b,\r
-  0x1e6d, 0x1e6d,\r
-  0x1e6f, 0x1e6f,\r
-  0x1e71, 0x1e71,\r
-  0x1e73, 0x1e73,\r
-  0x1e75, 0x1e75,\r
-  0x1e77, 0x1e77,\r
-  0x1e79, 0x1e79,\r
-  0x1e7b, 0x1e7b,\r
-  0x1e7d, 0x1e7d,\r
-  0x1e7f, 0x1e7f,\r
-  0x1e81, 0x1e81,\r
-  0x1e83, 0x1e83,\r
-  0x1e85, 0x1e85,\r
-  0x1e87, 0x1e87,\r
-  0x1e89, 0x1e89,\r
-  0x1e8b, 0x1e8b,\r
-  0x1e8d, 0x1e8d,\r
-  0x1e8f, 0x1e8f,\r
-  0x1e91, 0x1e91,\r
-  0x1e93, 0x1e93,\r
-  0x1e95, 0x1e9b,\r
-  0x1ea1, 0x1ea1,\r
-  0x1ea3, 0x1ea3,\r
-  0x1ea5, 0x1ea5,\r
-  0x1ea7, 0x1ea7,\r
-  0x1ea9, 0x1ea9,\r
-  0x1eab, 0x1eab,\r
-  0x1ead, 0x1ead,\r
-  0x1eaf, 0x1eaf,\r
-  0x1eb1, 0x1eb1,\r
-  0x1eb3, 0x1eb3,\r
-  0x1eb5, 0x1eb5,\r
-  0x1eb7, 0x1eb7,\r
-  0x1eb9, 0x1eb9,\r
-  0x1ebb, 0x1ebb,\r
-  0x1ebd, 0x1ebd,\r
-  0x1ebf, 0x1ebf,\r
-  0x1ec1, 0x1ec1,\r
-  0x1ec3, 0x1ec3,\r
-  0x1ec5, 0x1ec5,\r
-  0x1ec7, 0x1ec7,\r
-  0x1ec9, 0x1ec9,\r
-  0x1ecb, 0x1ecb,\r
-  0x1ecd, 0x1ecd,\r
-  0x1ecf, 0x1ecf,\r
-  0x1ed1, 0x1ed1,\r
-  0x1ed3, 0x1ed3,\r
-  0x1ed5, 0x1ed5,\r
-  0x1ed7, 0x1ed7,\r
-  0x1ed9, 0x1ed9,\r
-  0x1edb, 0x1edb,\r
-  0x1edd, 0x1edd,\r
-  0x1edf, 0x1edf,\r
-  0x1ee1, 0x1ee1,\r
-  0x1ee3, 0x1ee3,\r
-  0x1ee5, 0x1ee5,\r
-  0x1ee7, 0x1ee7,\r
-  0x1ee9, 0x1ee9,\r
-  0x1eeb, 0x1eeb,\r
-  0x1eed, 0x1eed,\r
-  0x1eef, 0x1eef,\r
-  0x1ef1, 0x1ef1,\r
-  0x1ef3, 0x1ef3,\r
-  0x1ef5, 0x1ef5,\r
-  0x1ef7, 0x1ef7,\r
-  0x1ef9, 0x1ef9,\r
-  0x1f00, 0x1f07,\r
-  0x1f10, 0x1f15,\r
-  0x1f20, 0x1f27,\r
-  0x1f30, 0x1f37,\r
-  0x1f40, 0x1f45,\r
-  0x1f50, 0x1f57,\r
-  0x1f60, 0x1f67,\r
-  0x1f70, 0x1f7d,\r
-  0x1f80, 0x1f87,\r
-  0x1f90, 0x1f97,\r
-  0x1fa0, 0x1fa7,\r
-  0x1fb0, 0x1fb4,\r
-  0x1fb6, 0x1fb7,\r
-  0x1fbe, 0x1fbe,\r
-  0x1fc2, 0x1fc4,\r
-  0x1fc6, 0x1fc7,\r
-  0x1fd0, 0x1fd3,\r
-  0x1fd6, 0x1fd7,\r
-  0x1fe0, 0x1fe7,\r
-  0x1ff2, 0x1ff4,\r
-  0x1ff6, 0x1ff7,\r
-  0x2071, 0x2071,\r
-  0x207f, 0x207f,\r
-  0x210a, 0x210a,\r
-  0x210e, 0x210f,\r
-  0x2113, 0x2113,\r
-  0x212f, 0x212f,\r
-  0x2134, 0x2134,\r
-  0x2139, 0x2139,\r
-  0x213c, 0x213d,\r
-  0x2146, 0x2149,\r
-  0x2c30, 0x2c5e,\r
-  0x2c81, 0x2c81,\r
-  0x2c83, 0x2c83,\r
-  0x2c85, 0x2c85,\r
-  0x2c87, 0x2c87,\r
-  0x2c89, 0x2c89,\r
-  0x2c8b, 0x2c8b,\r
-  0x2c8d, 0x2c8d,\r
-  0x2c8f, 0x2c8f,\r
-  0x2c91, 0x2c91,\r
-  0x2c93, 0x2c93,\r
-  0x2c95, 0x2c95,\r
-  0x2c97, 0x2c97,\r
-  0x2c99, 0x2c99,\r
-  0x2c9b, 0x2c9b,\r
-  0x2c9d, 0x2c9d,\r
-  0x2c9f, 0x2c9f,\r
-  0x2ca1, 0x2ca1,\r
-  0x2ca3, 0x2ca3,\r
-  0x2ca5, 0x2ca5,\r
-  0x2ca7, 0x2ca7,\r
-  0x2ca9, 0x2ca9,\r
-  0x2cab, 0x2cab,\r
-  0x2cad, 0x2cad,\r
-  0x2caf, 0x2caf,\r
-  0x2cb1, 0x2cb1,\r
-  0x2cb3, 0x2cb3,\r
-  0x2cb5, 0x2cb5,\r
-  0x2cb7, 0x2cb7,\r
-  0x2cb9, 0x2cb9,\r
-  0x2cbb, 0x2cbb,\r
-  0x2cbd, 0x2cbd,\r
-  0x2cbf, 0x2cbf,\r
-  0x2cc1, 0x2cc1,\r
-  0x2cc3, 0x2cc3,\r
-  0x2cc5, 0x2cc5,\r
-  0x2cc7, 0x2cc7,\r
-  0x2cc9, 0x2cc9,\r
-  0x2ccb, 0x2ccb,\r
-  0x2ccd, 0x2ccd,\r
-  0x2ccf, 0x2ccf,\r
-  0x2cd1, 0x2cd1,\r
-  0x2cd3, 0x2cd3,\r
-  0x2cd5, 0x2cd5,\r
-  0x2cd7, 0x2cd7,\r
-  0x2cd9, 0x2cd9,\r
-  0x2cdb, 0x2cdb,\r
-  0x2cdd, 0x2cdd,\r
-  0x2cdf, 0x2cdf,\r
-  0x2ce1, 0x2ce1,\r
-  0x2ce3, 0x2ce4,\r
-  0x2d00, 0x2d25,\r
-  0xfb00, 0xfb06,\r
-  0xfb13, 0xfb17,\r
-  0xff41, 0xff5a,\r
-  0x10428, 0x1044f,\r
-  0x1d41a, 0x1d433,\r
-  0x1d44e, 0x1d454,\r
-  0x1d456, 0x1d467,\r
-  0x1d482, 0x1d49b,\r
-  0x1d4b6, 0x1d4b9,\r
-  0x1d4bb, 0x1d4bb,\r
-  0x1d4bd, 0x1d4c3,\r
-  0x1d4c5, 0x1d4cf,\r
-  0x1d4ea, 0x1d503,\r
-  0x1d51e, 0x1d537,\r
-  0x1d552, 0x1d56b,\r
-  0x1d586, 0x1d59f,\r
-  0x1d5ba, 0x1d5d3,\r
-  0x1d5ee, 0x1d607,\r
-  0x1d622, 0x1d63b,\r
-  0x1d656, 0x1d66f,\r
-  0x1d68a, 0x1d6a5,\r
-  0x1d6c2, 0x1d6da,\r
-  0x1d6dc, 0x1d6e1,\r
-  0x1d6fc, 0x1d714,\r
-  0x1d716, 0x1d71b,\r
-  0x1d736, 0x1d74e,\r
-  0x1d750, 0x1d755,\r
-  0x1d770, 0x1d788,\r
-  0x1d78a, 0x1d78f,\r
-  0x1d7aa, 0x1d7c2,\r
-  0x1d7c4, 0x1d7c9\r
-}; /* CR_Lower */\r
-\r
-/* 'Print': [[:Print:]] */\r
-static const OnigCodePoint CR_Print[] = {\r
-  423,\r
-  0x0009, 0x000d,\r
-  0x0020, 0x007e,\r
-  0x0085, 0x0085,\r
-  0x00a0, 0x0241,\r
-  0x0250, 0x036f,\r
-  0x0374, 0x0375,\r
-  0x037a, 0x037a,\r
-  0x037e, 0x037e,\r
-  0x0384, 0x038a,\r
-  0x038c, 0x038c,\r
-  0x038e, 0x03a1,\r
-  0x03a3, 0x03ce,\r
-  0x03d0, 0x0486,\r
-  0x0488, 0x04ce,\r
-  0x04d0, 0x04f9,\r
-  0x0500, 0x050f,\r
-  0x0531, 0x0556,\r
-  0x0559, 0x055f,\r
-  0x0561, 0x0587,\r
-  0x0589, 0x058a,\r
-  0x0591, 0x05b9,\r
-  0x05bb, 0x05c7,\r
-  0x05d0, 0x05ea,\r
-  0x05f0, 0x05f4,\r
-  0x0600, 0x0603,\r
-  0x060b, 0x0615,\r
-  0x061b, 0x061b,\r
-  0x061e, 0x061f,\r
-  0x0621, 0x063a,\r
-  0x0640, 0x065e,\r
-  0x0660, 0x070d,\r
-  0x070f, 0x074a,\r
-  0x074d, 0x076d,\r
-  0x0780, 0x07b1,\r
-  0x0901, 0x0939,\r
-  0x093c, 0x094d,\r
-  0x0950, 0x0954,\r
-  0x0958, 0x0970,\r
-  0x097d, 0x097d,\r
-  0x0981, 0x0983,\r
-  0x0985, 0x098c,\r
-  0x098f, 0x0990,\r
-  0x0993, 0x09a8,\r
-  0x09aa, 0x09b0,\r
-  0x09b2, 0x09b2,\r
-  0x09b6, 0x09b9,\r
-  0x09bc, 0x09c4,\r
-  0x09c7, 0x09c8,\r
-  0x09cb, 0x09ce,\r
-  0x09d7, 0x09d7,\r
-  0x09dc, 0x09dd,\r
-  0x09df, 0x09e3,\r
-  0x09e6, 0x09fa,\r
-  0x0a01, 0x0a03,\r
-  0x0a05, 0x0a0a,\r
-  0x0a0f, 0x0a10,\r
-  0x0a13, 0x0a28,\r
-  0x0a2a, 0x0a30,\r
-  0x0a32, 0x0a33,\r
-  0x0a35, 0x0a36,\r
-  0x0a38, 0x0a39,\r
-  0x0a3c, 0x0a3c,\r
-  0x0a3e, 0x0a42,\r
-  0x0a47, 0x0a48,\r
-  0x0a4b, 0x0a4d,\r
-  0x0a59, 0x0a5c,\r
-  0x0a5e, 0x0a5e,\r
-  0x0a66, 0x0a74,\r
-  0x0a81, 0x0a83,\r
-  0x0a85, 0x0a8d,\r
-  0x0a8f, 0x0a91,\r
-  0x0a93, 0x0aa8,\r
-  0x0aaa, 0x0ab0,\r
-  0x0ab2, 0x0ab3,\r
-  0x0ab5, 0x0ab9,\r
-  0x0abc, 0x0ac5,\r
-  0x0ac7, 0x0ac9,\r
-  0x0acb, 0x0acd,\r
-  0x0ad0, 0x0ad0,\r
-  0x0ae0, 0x0ae3,\r
-  0x0ae6, 0x0aef,\r
-  0x0af1, 0x0af1,\r
-  0x0b01, 0x0b03,\r
-  0x0b05, 0x0b0c,\r
-  0x0b0f, 0x0b10,\r
-  0x0b13, 0x0b28,\r
-  0x0b2a, 0x0b30,\r
-  0x0b32, 0x0b33,\r
-  0x0b35, 0x0b39,\r
-  0x0b3c, 0x0b43,\r
-  0x0b47, 0x0b48,\r
-  0x0b4b, 0x0b4d,\r
-  0x0b56, 0x0b57,\r
-  0x0b5c, 0x0b5d,\r
-  0x0b5f, 0x0b61,\r
-  0x0b66, 0x0b71,\r
-  0x0b82, 0x0b83,\r
-  0x0b85, 0x0b8a,\r
-  0x0b8e, 0x0b90,\r
-  0x0b92, 0x0b95,\r
-  0x0b99, 0x0b9a,\r
-  0x0b9c, 0x0b9c,\r
-  0x0b9e, 0x0b9f,\r
-  0x0ba3, 0x0ba4,\r
-  0x0ba8, 0x0baa,\r
-  0x0bae, 0x0bb9,\r
-  0x0bbe, 0x0bc2,\r
-  0x0bc6, 0x0bc8,\r
-  0x0bca, 0x0bcd,\r
-  0x0bd7, 0x0bd7,\r
-  0x0be6, 0x0bfa,\r
-  0x0c01, 0x0c03,\r
-  0x0c05, 0x0c0c,\r
-  0x0c0e, 0x0c10,\r
-  0x0c12, 0x0c28,\r
-  0x0c2a, 0x0c33,\r
-  0x0c35, 0x0c39,\r
-  0x0c3e, 0x0c44,\r
-  0x0c46, 0x0c48,\r
-  0x0c4a, 0x0c4d,\r
-  0x0c55, 0x0c56,\r
-  0x0c60, 0x0c61,\r
-  0x0c66, 0x0c6f,\r
-  0x0c82, 0x0c83,\r
-  0x0c85, 0x0c8c,\r
-  0x0c8e, 0x0c90,\r
-  0x0c92, 0x0ca8,\r
-  0x0caa, 0x0cb3,\r
-  0x0cb5, 0x0cb9,\r
-  0x0cbc, 0x0cc4,\r
-  0x0cc6, 0x0cc8,\r
-  0x0cca, 0x0ccd,\r
-  0x0cd5, 0x0cd6,\r
-  0x0cde, 0x0cde,\r
-  0x0ce0, 0x0ce1,\r
-  0x0ce6, 0x0cef,\r
-  0x0d02, 0x0d03,\r
-  0x0d05, 0x0d0c,\r
-  0x0d0e, 0x0d10,\r
-  0x0d12, 0x0d28,\r
-  0x0d2a, 0x0d39,\r
-  0x0d3e, 0x0d43,\r
-  0x0d46, 0x0d48,\r
-  0x0d4a, 0x0d4d,\r
-  0x0d57, 0x0d57,\r
-  0x0d60, 0x0d61,\r
-  0x0d66, 0x0d6f,\r
-  0x0d82, 0x0d83,\r
-  0x0d85, 0x0d96,\r
-  0x0d9a, 0x0db1,\r
-  0x0db3, 0x0dbb,\r
-  0x0dbd, 0x0dbd,\r
-  0x0dc0, 0x0dc6,\r
-  0x0dca, 0x0dca,\r
-  0x0dcf, 0x0dd4,\r
-  0x0dd6, 0x0dd6,\r
-  0x0dd8, 0x0ddf,\r
-  0x0df2, 0x0df4,\r
-  0x0e01, 0x0e3a,\r
-  0x0e3f, 0x0e5b,\r
-  0x0e81, 0x0e82,\r
-  0x0e84, 0x0e84,\r
-  0x0e87, 0x0e88,\r
-  0x0e8a, 0x0e8a,\r
-  0x0e8d, 0x0e8d,\r
-  0x0e94, 0x0e97,\r
-  0x0e99, 0x0e9f,\r
-  0x0ea1, 0x0ea3,\r
-  0x0ea5, 0x0ea5,\r
-  0x0ea7, 0x0ea7,\r
-  0x0eaa, 0x0eab,\r
-  0x0ead, 0x0eb9,\r
-  0x0ebb, 0x0ebd,\r
-  0x0ec0, 0x0ec4,\r
-  0x0ec6, 0x0ec6,\r
-  0x0ec8, 0x0ecd,\r
-  0x0ed0, 0x0ed9,\r
-  0x0edc, 0x0edd,\r
-  0x0f00, 0x0f47,\r
-  0x0f49, 0x0f6a,\r
-  0x0f71, 0x0f8b,\r
-  0x0f90, 0x0f97,\r
-  0x0f99, 0x0fbc,\r
-  0x0fbe, 0x0fcc,\r
-  0x0fcf, 0x0fd1,\r
-  0x1000, 0x1021,\r
-  0x1023, 0x1027,\r
-  0x1029, 0x102a,\r
-  0x102c, 0x1032,\r
-  0x1036, 0x1039,\r
-  0x1040, 0x1059,\r
-  0x10a0, 0x10c5,\r
-  0x10d0, 0x10fc,\r
-  0x1100, 0x1159,\r
-  0x115f, 0x11a2,\r
-  0x11a8, 0x11f9,\r
-  0x1200, 0x1248,\r
-  0x124a, 0x124d,\r
-  0x1250, 0x1256,\r
-  0x1258, 0x1258,\r
-  0x125a, 0x125d,\r
-  0x1260, 0x1288,\r
-  0x128a, 0x128d,\r
-  0x1290, 0x12b0,\r
-  0x12b2, 0x12b5,\r
-  0x12b8, 0x12be,\r
-  0x12c0, 0x12c0,\r
-  0x12c2, 0x12c5,\r
-  0x12c8, 0x12d6,\r
-  0x12d8, 0x1310,\r
-  0x1312, 0x1315,\r
-  0x1318, 0x135a,\r
-  0x135f, 0x137c,\r
-  0x1380, 0x1399,\r
-  0x13a0, 0x13f4,\r
-  0x1401, 0x1676,\r
-  0x1680, 0x169c,\r
-  0x16a0, 0x16f0,\r
-  0x1700, 0x170c,\r
-  0x170e, 0x1714,\r
-  0x1720, 0x1736,\r
-  0x1740, 0x1753,\r
-  0x1760, 0x176c,\r
-  0x176e, 0x1770,\r
-  0x1772, 0x1773,\r
-  0x1780, 0x17dd,\r
-  0x17e0, 0x17e9,\r
-  0x17f0, 0x17f9,\r
-  0x1800, 0x180e,\r
-  0x1810, 0x1819,\r
-  0x1820, 0x1877,\r
-  0x1880, 0x18a9,\r
-  0x1900, 0x191c,\r
-  0x1920, 0x192b,\r
-  0x1930, 0x193b,\r
-  0x1940, 0x1940,\r
-  0x1944, 0x196d,\r
-  0x1970, 0x1974,\r
-  0x1980, 0x19a9,\r
-  0x19b0, 0x19c9,\r
-  0x19d0, 0x19d9,\r
-  0x19de, 0x1a1b,\r
-  0x1a1e, 0x1a1f,\r
-  0x1d00, 0x1dc3,\r
-  0x1e00, 0x1e9b,\r
-  0x1ea0, 0x1ef9,\r
-  0x1f00, 0x1f15,\r
-  0x1f18, 0x1f1d,\r
-  0x1f20, 0x1f45,\r
-  0x1f48, 0x1f4d,\r
-  0x1f50, 0x1f57,\r
-  0x1f59, 0x1f59,\r
-  0x1f5b, 0x1f5b,\r
-  0x1f5d, 0x1f5d,\r
-  0x1f5f, 0x1f7d,\r
-  0x1f80, 0x1fb4,\r
-  0x1fb6, 0x1fc4,\r
-  0x1fc6, 0x1fd3,\r
-  0x1fd6, 0x1fdb,\r
-  0x1fdd, 0x1fef,\r
-  0x1ff2, 0x1ff4,\r
-  0x1ff6, 0x1ffe,\r
-  0x2000, 0x2063,\r
-  0x206a, 0x2071,\r
-  0x2074, 0x208e,\r
-  0x2090, 0x2094,\r
-  0x20a0, 0x20b5,\r
-  0x20d0, 0x20eb,\r
-  0x2100, 0x214c,\r
-  0x2153, 0x2183,\r
-  0x2190, 0x23db,\r
-  0x2400, 0x2426,\r
-  0x2440, 0x244a,\r
-  0x2460, 0x269c,\r
-  0x26a0, 0x26b1,\r
-  0x2701, 0x2704,\r
-  0x2706, 0x2709,\r
-  0x270c, 0x2727,\r
-  0x2729, 0x274b,\r
-  0x274d, 0x274d,\r
-  0x274f, 0x2752,\r
-  0x2756, 0x2756,\r
-  0x2758, 0x275e,\r
-  0x2761, 0x2794,\r
-  0x2798, 0x27af,\r
-  0x27b1, 0x27be,\r
-  0x27c0, 0x27c6,\r
-  0x27d0, 0x27eb,\r
-  0x27f0, 0x2b13,\r
-  0x2c00, 0x2c2e,\r
-  0x2c30, 0x2c5e,\r
-  0x2c80, 0x2cea,\r
-  0x2cf9, 0x2d25,\r
-  0x2d30, 0x2d65,\r
-  0x2d6f, 0x2d6f,\r
-  0x2d80, 0x2d96,\r
-  0x2da0, 0x2da6,\r
-  0x2da8, 0x2dae,\r
-  0x2db0, 0x2db6,\r
-  0x2db8, 0x2dbe,\r
-  0x2dc0, 0x2dc6,\r
-  0x2dc8, 0x2dce,\r
-  0x2dd0, 0x2dd6,\r
-  0x2dd8, 0x2dde,\r
-  0x2e00, 0x2e17,\r
-  0x2e1c, 0x2e1d,\r
-  0x2e80, 0x2e99,\r
-  0x2e9b, 0x2ef3,\r
-  0x2f00, 0x2fd5,\r
-  0x2ff0, 0x2ffb,\r
-  0x3000, 0x303f,\r
-  0x3041, 0x3096,\r
-  0x3099, 0x30ff,\r
-  0x3105, 0x312c,\r
-  0x3131, 0x318e,\r
-  0x3190, 0x31b7,\r
-  0x31c0, 0x31cf,\r
-  0x31f0, 0x321e,\r
-  0x3220, 0x3243,\r
-  0x3250, 0x32fe,\r
-  0x3300, 0x4db5,\r
-  0x4dc0, 0x9fbb,\r
-  0xa000, 0xa48c,\r
-  0xa490, 0xa4c6,\r
-  0xa700, 0xa716,\r
-  0xa800, 0xa82b,\r
-  0xac00, 0xd7a3,\r
-  0xe000, 0xfa2d,\r
-  0xfa30, 0xfa6a,\r
-  0xfa70, 0xfad9,\r
-  0xfb00, 0xfb06,\r
-  0xfb13, 0xfb17,\r
-  0xfb1d, 0xfb36,\r
-  0xfb38, 0xfb3c,\r
-  0xfb3e, 0xfb3e,\r
-  0xfb40, 0xfb41,\r
-  0xfb43, 0xfb44,\r
-  0xfb46, 0xfbb1,\r
-  0xfbd3, 0xfd3f,\r
-  0xfd50, 0xfd8f,\r
-  0xfd92, 0xfdc7,\r
-  0xfdf0, 0xfdfd,\r
-  0xfe00, 0xfe19,\r
-  0xfe20, 0xfe23,\r
-  0xfe30, 0xfe52,\r
-  0xfe54, 0xfe66,\r
-  0xfe68, 0xfe6b,\r
-  0xfe70, 0xfe74,\r
-  0xfe76, 0xfefc,\r
-  0xfeff, 0xfeff,\r
-  0xff01, 0xffbe,\r
-  0xffc2, 0xffc7,\r
-  0xffca, 0xffcf,\r
-  0xffd2, 0xffd7,\r
-  0xffda, 0xffdc,\r
-  0xffe0, 0xffe6,\r
-  0xffe8, 0xffee,\r
-  0xfff9, 0xfffd,\r
-  0x10000, 0x1000b,\r
-  0x1000d, 0x10026,\r
-  0x10028, 0x1003a,\r
-  0x1003c, 0x1003d,\r
-  0x1003f, 0x1004d,\r
-  0x10050, 0x1005d,\r
-  0x10080, 0x100fa,\r
-  0x10100, 0x10102,\r
-  0x10107, 0x10133,\r
-  0x10137, 0x1018a,\r
-  0x10300, 0x1031e,\r
-  0x10320, 0x10323,\r
-  0x10330, 0x1034a,\r
-  0x10380, 0x1039d,\r
-  0x1039f, 0x103c3,\r
-  0x103c8, 0x103d5,\r
-  0x10400, 0x1049d,\r
-  0x104a0, 0x104a9,\r
-  0x10800, 0x10805,\r
-  0x10808, 0x10808,\r
-  0x1080a, 0x10835,\r
-  0x10837, 0x10838,\r
-  0x1083c, 0x1083c,\r
-  0x1083f, 0x1083f,\r
-  0x10a00, 0x10a03,\r
-  0x10a05, 0x10a06,\r
-  0x10a0c, 0x10a13,\r
-  0x10a15, 0x10a17,\r
-  0x10a19, 0x10a33,\r
-  0x10a38, 0x10a3a,\r
-  0x10a3f, 0x10a47,\r
-  0x10a50, 0x10a58,\r
-  0x1d000, 0x1d0f5,\r
-  0x1d100, 0x1d126,\r
-  0x1d12a, 0x1d1dd,\r
-  0x1d200, 0x1d245,\r
-  0x1d300, 0x1d356,\r
-  0x1d400, 0x1d454,\r
-  0x1d456, 0x1d49c,\r
-  0x1d49e, 0x1d49f,\r
-  0x1d4a2, 0x1d4a2,\r
-  0x1d4a5, 0x1d4a6,\r
-  0x1d4a9, 0x1d4ac,\r
-  0x1d4ae, 0x1d4b9,\r
-  0x1d4bb, 0x1d4bb,\r
-  0x1d4bd, 0x1d4c3,\r
-  0x1d4c5, 0x1d505,\r
-  0x1d507, 0x1d50a,\r
-  0x1d50d, 0x1d514,\r
-  0x1d516, 0x1d51c,\r
-  0x1d51e, 0x1d539,\r
-  0x1d53b, 0x1d53e,\r
-  0x1d540, 0x1d544,\r
-  0x1d546, 0x1d546,\r
-  0x1d54a, 0x1d550,\r
-  0x1d552, 0x1d6a5,\r
-  0x1d6a8, 0x1d7c9,\r
-  0x1d7ce, 0x1d7ff,\r
-  0x20000, 0x2a6d6,\r
-  0x2f800, 0x2fa1d,\r
-  0xe0001, 0xe0001,\r
-  0xe0020, 0xe007f,\r
-  0xe0100, 0xe01ef,\r
-  0xf0000, 0xffffd,\r
-  0x100000, 0x10fffd\r
-}; /* CR_Print */\r
-\r
-/* 'Punct': [[:Punct:]] */\r
-static const OnigCodePoint CR_Punct[] = {\r
-  96,\r
-  0x0021, 0x0023,\r
-  0x0025, 0x002a,\r
-  0x002c, 0x002f,\r
-  0x003a, 0x003b,\r
-  0x003f, 0x0040,\r
-  0x005b, 0x005d,\r
-  0x005f, 0x005f,\r
-  0x007b, 0x007b,\r
-  0x007d, 0x007d,\r
-  0x00a1, 0x00a1,\r
-  0x00ab, 0x00ab,\r
-  0x00b7, 0x00b7,\r
-  0x00bb, 0x00bb,\r
-  0x00bf, 0x00bf,\r
-  0x037e, 0x037e,\r
-  0x0387, 0x0387,\r
-  0x055a, 0x055f,\r
-  0x0589, 0x058a,\r
-  0x05be, 0x05be,\r
-  0x05c0, 0x05c0,\r
-  0x05c3, 0x05c3,\r
-  0x05c6, 0x05c6,\r
-  0x05f3, 0x05f4,\r
-  0x060c, 0x060d,\r
-  0x061b, 0x061b,\r
-  0x061e, 0x061f,\r
-  0x066a, 0x066d,\r
-  0x06d4, 0x06d4,\r
-  0x0700, 0x070d,\r
-  0x0964, 0x0965,\r
-  0x0970, 0x0970,\r
-  0x0df4, 0x0df4,\r
-  0x0e4f, 0x0e4f,\r
-  0x0e5a, 0x0e5b,\r
-  0x0f04, 0x0f12,\r
-  0x0f3a, 0x0f3d,\r
-  0x0f85, 0x0f85,\r
-  0x0fd0, 0x0fd1,\r
-  0x104a, 0x104f,\r
-  0x10fb, 0x10fb,\r
-  0x1361, 0x1368,\r
-  0x166d, 0x166e,\r
-  0x169b, 0x169c,\r
-  0x16eb, 0x16ed,\r
-  0x1735, 0x1736,\r
-  0x17d4, 0x17d6,\r
-  0x17d8, 0x17da,\r
-  0x1800, 0x180a,\r
-  0x1944, 0x1945,\r
-  0x19de, 0x19df,\r
-  0x1a1e, 0x1a1f,\r
-  0x2010, 0x2027,\r
-  0x2030, 0x2043,\r
-  0x2045, 0x2051,\r
-  0x2053, 0x205e,\r
-  0x207d, 0x207e,\r
-  0x208d, 0x208e,\r
-  0x2329, 0x232a,\r
-  0x23b4, 0x23b6,\r
-  0x2768, 0x2775,\r
-  0x27c5, 0x27c6,\r
-  0x27e6, 0x27eb,\r
-  0x2983, 0x2998,\r
-  0x29d8, 0x29db,\r
-  0x29fc, 0x29fd,\r
-  0x2cf9, 0x2cfc,\r
-  0x2cfe, 0x2cff,\r
-  0x2e00, 0x2e17,\r
-  0x2e1c, 0x2e1d,\r
-  0x3001, 0x3003,\r
-  0x3008, 0x3011,\r
-  0x3014, 0x301f,\r
-  0x3030, 0x3030,\r
-  0x303d, 0x303d,\r
-  0x30a0, 0x30a0,\r
-  0x30fb, 0x30fb,\r
-  0xfd3e, 0xfd3f,\r
-  0xfe10, 0xfe19,\r
-  0xfe30, 0xfe52,\r
-  0xfe54, 0xfe61,\r
-  0xfe63, 0xfe63,\r
-  0xfe68, 0xfe68,\r
-  0xfe6a, 0xfe6b,\r
-  0xff01, 0xff03,\r
-  0xff05, 0xff0a,\r
-  0xff0c, 0xff0f,\r
-  0xff1a, 0xff1b,\r
-  0xff1f, 0xff20,\r
-  0xff3b, 0xff3d,\r
-  0xff3f, 0xff3f,\r
-  0xff5b, 0xff5b,\r
-  0xff5d, 0xff5d,\r
-  0xff5f, 0xff65,\r
-  0x10100, 0x10101,\r
-  0x1039f, 0x1039f,\r
-  0x10a50, 0x10a58\r
-}; /* CR_Punct */\r
-\r
-/* 'Space': [[:Space:]] */\r
-static const OnigCodePoint CR_Space[] = {\r
-  11,\r
-  0x0009, 0x000d,\r
-  0x0020, 0x0020,\r
-  0x0085, 0x0085,\r
-  0x00a0, 0x00a0,\r
-  0x1680, 0x1680,\r
-  0x180e, 0x180e,\r
-  0x2000, 0x200a,\r
-  0x2028, 0x2029,\r
-  0x202f, 0x202f,\r
-  0x205f, 0x205f,\r
-  0x3000, 0x3000\r
-}; /* CR_Space */\r
-\r
-/* 'Upper': [[:Upper:]] */\r
-static const OnigCodePoint CR_Upper[] = {\r
-  476,\r
-  0x0041, 0x005a,\r
-  0x00c0, 0x00d6,\r
-  0x00d8, 0x00de,\r
-  0x0100, 0x0100,\r
-  0x0102, 0x0102,\r
-  0x0104, 0x0104,\r
-  0x0106, 0x0106,\r
-  0x0108, 0x0108,\r
-  0x010a, 0x010a,\r
-  0x010c, 0x010c,\r
-  0x010e, 0x010e,\r
-  0x0110, 0x0110,\r
-  0x0112, 0x0112,\r
-  0x0114, 0x0114,\r
-  0x0116, 0x0116,\r
-  0x0118, 0x0118,\r
-  0x011a, 0x011a,\r
-  0x011c, 0x011c,\r
-  0x011e, 0x011e,\r
-  0x0120, 0x0120,\r
-  0x0122, 0x0122,\r
-  0x0124, 0x0124,\r
-  0x0126, 0x0126,\r
-  0x0128, 0x0128,\r
-  0x012a, 0x012a,\r
-  0x012c, 0x012c,\r
-  0x012e, 0x012e,\r
-  0x0130, 0x0130,\r
-  0x0132, 0x0132,\r
-  0x0134, 0x0134,\r
-  0x0136, 0x0136,\r
-  0x0139, 0x0139,\r
-  0x013b, 0x013b,\r
-  0x013d, 0x013d,\r
-  0x013f, 0x013f,\r
-  0x0141, 0x0141,\r
-  0x0143, 0x0143,\r
-  0x0145, 0x0145,\r
-  0x0147, 0x0147,\r
-  0x014a, 0x014a,\r
-  0x014c, 0x014c,\r
-  0x014e, 0x014e,\r
-  0x0150, 0x0150,\r
-  0x0152, 0x0152,\r
-  0x0154, 0x0154,\r
-  0x0156, 0x0156,\r
-  0x0158, 0x0158,\r
-  0x015a, 0x015a,\r
-  0x015c, 0x015c,\r
-  0x015e, 0x015e,\r
-  0x0160, 0x0160,\r
-  0x0162, 0x0162,\r
-  0x0164, 0x0164,\r
-  0x0166, 0x0166,\r
-  0x0168, 0x0168,\r
-  0x016a, 0x016a,\r
-  0x016c, 0x016c,\r
-  0x016e, 0x016e,\r
-  0x0170, 0x0170,\r
-  0x0172, 0x0172,\r
-  0x0174, 0x0174,\r
-  0x0176, 0x0176,\r
-  0x0178, 0x0179,\r
-  0x017b, 0x017b,\r
-  0x017d, 0x017d,\r
-  0x0181, 0x0182,\r
-  0x0184, 0x0184,\r
-  0x0186, 0x0187,\r
-  0x0189, 0x018b,\r
-  0x018e, 0x0191,\r
-  0x0193, 0x0194,\r
-  0x0196, 0x0198,\r
-  0x019c, 0x019d,\r
-  0x019f, 0x01a0,\r
-  0x01a2, 0x01a2,\r
-  0x01a4, 0x01a4,\r
-  0x01a6, 0x01a7,\r
-  0x01a9, 0x01a9,\r
-  0x01ac, 0x01ac,\r
-  0x01ae, 0x01af,\r
-  0x01b1, 0x01b3,\r
-  0x01b5, 0x01b5,\r
-  0x01b7, 0x01b8,\r
-  0x01bc, 0x01bc,\r
-  0x01c4, 0x01c4,\r
-  0x01c7, 0x01c7,\r
-  0x01ca, 0x01ca,\r
-  0x01cd, 0x01cd,\r
-  0x01cf, 0x01cf,\r
-  0x01d1, 0x01d1,\r
-  0x01d3, 0x01d3,\r
-  0x01d5, 0x01d5,\r
-  0x01d7, 0x01d7,\r
-  0x01d9, 0x01d9,\r
-  0x01db, 0x01db,\r
-  0x01de, 0x01de,\r
-  0x01e0, 0x01e0,\r
-  0x01e2, 0x01e2,\r
-  0x01e4, 0x01e4,\r
-  0x01e6, 0x01e6,\r
-  0x01e8, 0x01e8,\r
-  0x01ea, 0x01ea,\r
-  0x01ec, 0x01ec,\r
-  0x01ee, 0x01ee,\r
-  0x01f1, 0x01f1,\r
-  0x01f4, 0x01f4,\r
-  0x01f6, 0x01f8,\r
-  0x01fa, 0x01fa,\r
-  0x01fc, 0x01fc,\r
-  0x01fe, 0x01fe,\r
-  0x0200, 0x0200,\r
-  0x0202, 0x0202,\r
-  0x0204, 0x0204,\r
-  0x0206, 0x0206,\r
-  0x0208, 0x0208,\r
-  0x020a, 0x020a,\r
-  0x020c, 0x020c,\r
-  0x020e, 0x020e,\r
-  0x0210, 0x0210,\r
-  0x0212, 0x0212,\r
-  0x0214, 0x0214,\r
-  0x0216, 0x0216,\r
-  0x0218, 0x0218,\r
-  0x021a, 0x021a,\r
-  0x021c, 0x021c,\r
-  0x021e, 0x021e,\r
-  0x0220, 0x0220,\r
-  0x0222, 0x0222,\r
-  0x0224, 0x0224,\r
-  0x0226, 0x0226,\r
-  0x0228, 0x0228,\r
-  0x022a, 0x022a,\r
-  0x022c, 0x022c,\r
-  0x022e, 0x022e,\r
-  0x0230, 0x0230,\r
-  0x0232, 0x0232,\r
-  0x023a, 0x023b,\r
-  0x023d, 0x023e,\r
-  0x0241, 0x0241,\r
-  0x0386, 0x0386,\r
-  0x0388, 0x038a,\r
-  0x038c, 0x038c,\r
-  0x038e, 0x038f,\r
-  0x0391, 0x03a1,\r
-  0x03a3, 0x03ab,\r
-  0x03d2, 0x03d4,\r
-  0x03d8, 0x03d8,\r
-  0x03da, 0x03da,\r
-  0x03dc, 0x03dc,\r
-  0x03de, 0x03de,\r
-  0x03e0, 0x03e0,\r
-  0x03e2, 0x03e2,\r
-  0x03e4, 0x03e4,\r
-  0x03e6, 0x03e6,\r
-  0x03e8, 0x03e8,\r
-  0x03ea, 0x03ea,\r
-  0x03ec, 0x03ec,\r
-  0x03ee, 0x03ee,\r
-  0x03f4, 0x03f4,\r
-  0x03f7, 0x03f7,\r
-  0x03f9, 0x03fa,\r
-  0x03fd, 0x042f,\r
-  0x0460, 0x0460,\r
-  0x0462, 0x0462,\r
-  0x0464, 0x0464,\r
-  0x0466, 0x0466,\r
-  0x0468, 0x0468,\r
-  0x046a, 0x046a,\r
-  0x046c, 0x046c,\r
-  0x046e, 0x046e,\r
-  0x0470, 0x0470,\r
-  0x0472, 0x0472,\r
-  0x0474, 0x0474,\r
-  0x0476, 0x0476,\r
-  0x0478, 0x0478,\r
-  0x047a, 0x047a,\r
-  0x047c, 0x047c,\r
-  0x047e, 0x047e,\r
-  0x0480, 0x0480,\r
-  0x048a, 0x048a,\r
-  0x048c, 0x048c,\r
-  0x048e, 0x048e,\r
-  0x0490, 0x0490,\r
-  0x0492, 0x0492,\r
-  0x0494, 0x0494,\r
-  0x0496, 0x0496,\r
-  0x0498, 0x0498,\r
-  0x049a, 0x049a,\r
-  0x049c, 0x049c,\r
-  0x049e, 0x049e,\r
-  0x04a0, 0x04a0,\r
-  0x04a2, 0x04a2,\r
-  0x04a4, 0x04a4,\r
-  0x04a6, 0x04a6,\r
-  0x04a8, 0x04a8,\r
-  0x04aa, 0x04aa,\r
-  0x04ac, 0x04ac,\r
-  0x04ae, 0x04ae,\r
-  0x04b0, 0x04b0,\r
-  0x04b2, 0x04b2,\r
-  0x04b4, 0x04b4,\r
-  0x04b6, 0x04b6,\r
-  0x04b8, 0x04b8,\r
-  0x04ba, 0x04ba,\r
-  0x04bc, 0x04bc,\r
-  0x04be, 0x04be,\r
-  0x04c0, 0x04c1,\r
-  0x04c3, 0x04c3,\r
-  0x04c5, 0x04c5,\r
-  0x04c7, 0x04c7,\r
-  0x04c9, 0x04c9,\r
-  0x04cb, 0x04cb,\r
-  0x04cd, 0x04cd,\r
-  0x04d0, 0x04d0,\r
-  0x04d2, 0x04d2,\r
-  0x04d4, 0x04d4,\r
-  0x04d6, 0x04d6,\r
-  0x04d8, 0x04d8,\r
-  0x04da, 0x04da,\r
-  0x04dc, 0x04dc,\r
-  0x04de, 0x04de,\r
-  0x04e0, 0x04e0,\r
-  0x04e2, 0x04e2,\r
-  0x04e4, 0x04e4,\r
-  0x04e6, 0x04e6,\r
-  0x04e8, 0x04e8,\r
-  0x04ea, 0x04ea,\r
-  0x04ec, 0x04ec,\r
-  0x04ee, 0x04ee,\r
-  0x04f0, 0x04f0,\r
-  0x04f2, 0x04f2,\r
-  0x04f4, 0x04f4,\r
-  0x04f6, 0x04f6,\r
-  0x04f8, 0x04f8,\r
-  0x0500, 0x0500,\r
-  0x0502, 0x0502,\r
-  0x0504, 0x0504,\r
-  0x0506, 0x0506,\r
-  0x0508, 0x0508,\r
-  0x050a, 0x050a,\r
-  0x050c, 0x050c,\r
-  0x050e, 0x050e,\r
-  0x0531, 0x0556,\r
-  0x10a0, 0x10c5,\r
-  0x1e00, 0x1e00,\r
-  0x1e02, 0x1e02,\r
-  0x1e04, 0x1e04,\r
-  0x1e06, 0x1e06,\r
-  0x1e08, 0x1e08,\r
-  0x1e0a, 0x1e0a,\r
-  0x1e0c, 0x1e0c,\r
-  0x1e0e, 0x1e0e,\r
-  0x1e10, 0x1e10,\r
-  0x1e12, 0x1e12,\r
-  0x1e14, 0x1e14,\r
-  0x1e16, 0x1e16,\r
-  0x1e18, 0x1e18,\r
-  0x1e1a, 0x1e1a,\r
-  0x1e1c, 0x1e1c,\r
-  0x1e1e, 0x1e1e,\r
-  0x1e20, 0x1e20,\r
-  0x1e22, 0x1e22,\r
-  0x1e24, 0x1e24,\r
-  0x1e26, 0x1e26,\r
-  0x1e28, 0x1e28,\r
-  0x1e2a, 0x1e2a,\r
-  0x1e2c, 0x1e2c,\r
-  0x1e2e, 0x1e2e,\r
-  0x1e30, 0x1e30,\r
-  0x1e32, 0x1e32,\r
-  0x1e34, 0x1e34,\r
-  0x1e36, 0x1e36,\r
-  0x1e38, 0x1e38,\r
-  0x1e3a, 0x1e3a,\r
-  0x1e3c, 0x1e3c,\r
-  0x1e3e, 0x1e3e,\r
-  0x1e40, 0x1e40,\r
-  0x1e42, 0x1e42,\r
-  0x1e44, 0x1e44,\r
-  0x1e46, 0x1e46,\r
-  0x1e48, 0x1e48,\r
-  0x1e4a, 0x1e4a,\r
-  0x1e4c, 0x1e4c,\r
-  0x1e4e, 0x1e4e,\r
-  0x1e50, 0x1e50,\r
-  0x1e52, 0x1e52,\r
-  0x1e54, 0x1e54,\r
-  0x1e56, 0x1e56,\r
-  0x1e58, 0x1e58,\r
-  0x1e5a, 0x1e5a,\r
-  0x1e5c, 0x1e5c,\r
-  0x1e5e, 0x1e5e,\r
-  0x1e60, 0x1e60,\r
-  0x1e62, 0x1e62,\r
-  0x1e64, 0x1e64,\r
-  0x1e66, 0x1e66,\r
-  0x1e68, 0x1e68,\r
-  0x1e6a, 0x1e6a,\r
-  0x1e6c, 0x1e6c,\r
-  0x1e6e, 0x1e6e,\r
-  0x1e70, 0x1e70,\r
-  0x1e72, 0x1e72,\r
-  0x1e74, 0x1e74,\r
-  0x1e76, 0x1e76,\r
-  0x1e78, 0x1e78,\r
-  0x1e7a, 0x1e7a,\r
-  0x1e7c, 0x1e7c,\r
-  0x1e7e, 0x1e7e,\r
-  0x1e80, 0x1e80,\r
-  0x1e82, 0x1e82,\r
-  0x1e84, 0x1e84,\r
-  0x1e86, 0x1e86,\r
-  0x1e88, 0x1e88,\r
-  0x1e8a, 0x1e8a,\r
-  0x1e8c, 0x1e8c,\r
-  0x1e8e, 0x1e8e,\r
-  0x1e90, 0x1e90,\r
-  0x1e92, 0x1e92,\r
-  0x1e94, 0x1e94,\r
-  0x1ea0, 0x1ea0,\r
-  0x1ea2, 0x1ea2,\r
-  0x1ea4, 0x1ea4,\r
-  0x1ea6, 0x1ea6,\r
-  0x1ea8, 0x1ea8,\r
-  0x1eaa, 0x1eaa,\r
-  0x1eac, 0x1eac,\r
-  0x1eae, 0x1eae,\r
-  0x1eb0, 0x1eb0,\r
-  0x1eb2, 0x1eb2,\r
-  0x1eb4, 0x1eb4,\r
-  0x1eb6, 0x1eb6,\r
-  0x1eb8, 0x1eb8,\r
-  0x1eba, 0x1eba,\r
-  0x1ebc, 0x1ebc,\r
-  0x1ebe, 0x1ebe,\r
-  0x1ec0, 0x1ec0,\r
-  0x1ec2, 0x1ec2,\r
-  0x1ec4, 0x1ec4,\r
-  0x1ec6, 0x1ec6,\r
-  0x1ec8, 0x1ec8,\r
-  0x1eca, 0x1eca,\r
-  0x1ecc, 0x1ecc,\r
-  0x1ece, 0x1ece,\r
-  0x1ed0, 0x1ed0,\r
-  0x1ed2, 0x1ed2,\r
-  0x1ed4, 0x1ed4,\r
-  0x1ed6, 0x1ed6,\r
-  0x1ed8, 0x1ed8,\r
-  0x1eda, 0x1eda,\r
-  0x1edc, 0x1edc,\r
-  0x1ede, 0x1ede,\r
-  0x1ee0, 0x1ee0,\r
-  0x1ee2, 0x1ee2,\r
-  0x1ee4, 0x1ee4,\r
-  0x1ee6, 0x1ee6,\r
-  0x1ee8, 0x1ee8,\r
-  0x1eea, 0x1eea,\r
-  0x1eec, 0x1eec,\r
-  0x1eee, 0x1eee,\r
-  0x1ef0, 0x1ef0,\r
-  0x1ef2, 0x1ef2,\r
-  0x1ef4, 0x1ef4,\r
-  0x1ef6, 0x1ef6,\r
-  0x1ef8, 0x1ef8,\r
-  0x1f08, 0x1f0f,\r
-  0x1f18, 0x1f1d,\r
-  0x1f28, 0x1f2f,\r
-  0x1f38, 0x1f3f,\r
-  0x1f48, 0x1f4d,\r
-  0x1f59, 0x1f59,\r
-  0x1f5b, 0x1f5b,\r
-  0x1f5d, 0x1f5d,\r
-  0x1f5f, 0x1f5f,\r
-  0x1f68, 0x1f6f,\r
-  0x1fb8, 0x1fbb,\r
-  0x1fc8, 0x1fcb,\r
-  0x1fd8, 0x1fdb,\r
-  0x1fe8, 0x1fec,\r
-  0x1ff8, 0x1ffb,\r
-  0x2102, 0x2102,\r
-  0x2107, 0x2107,\r
-  0x210b, 0x210d,\r
-  0x2110, 0x2112,\r
-  0x2115, 0x2115,\r
-  0x2119, 0x211d,\r
-  0x2124, 0x2124,\r
-  0x2126, 0x2126,\r
-  0x2128, 0x2128,\r
-  0x212a, 0x212d,\r
-  0x2130, 0x2131,\r
-  0x2133, 0x2133,\r
-  0x213e, 0x213f,\r
-  0x2145, 0x2145,\r
-  0x2c00, 0x2c2e,\r
-  0x2c80, 0x2c80,\r
-  0x2c82, 0x2c82,\r
-  0x2c84, 0x2c84,\r
-  0x2c86, 0x2c86,\r
-  0x2c88, 0x2c88,\r
-  0x2c8a, 0x2c8a,\r
-  0x2c8c, 0x2c8c,\r
-  0x2c8e, 0x2c8e,\r
-  0x2c90, 0x2c90,\r
-  0x2c92, 0x2c92,\r
-  0x2c94, 0x2c94,\r
-  0x2c96, 0x2c96,\r
-  0x2c98, 0x2c98,\r
-  0x2c9a, 0x2c9a,\r
-  0x2c9c, 0x2c9c,\r
-  0x2c9e, 0x2c9e,\r
-  0x2ca0, 0x2ca0,\r
-  0x2ca2, 0x2ca2,\r
-  0x2ca4, 0x2ca4,\r
-  0x2ca6, 0x2ca6,\r
-  0x2ca8, 0x2ca8,\r
-  0x2caa, 0x2caa,\r
-  0x2cac, 0x2cac,\r
-  0x2cae, 0x2cae,\r
-  0x2cb0, 0x2cb0,\r
-  0x2cb2, 0x2cb2,\r
-  0x2cb4, 0x2cb4,\r
-  0x2cb6, 0x2cb6,\r
-  0x2cb8, 0x2cb8,\r
-  0x2cba, 0x2cba,\r
-  0x2cbc, 0x2cbc,\r
-  0x2cbe, 0x2cbe,\r
-  0x2cc0, 0x2cc0,\r
-  0x2cc2, 0x2cc2,\r
-  0x2cc4, 0x2cc4,\r
-  0x2cc6, 0x2cc6,\r
-  0x2cc8, 0x2cc8,\r
-  0x2cca, 0x2cca,\r
-  0x2ccc, 0x2ccc,\r
-  0x2cce, 0x2cce,\r
-  0x2cd0, 0x2cd0,\r
-  0x2cd2, 0x2cd2,\r
-  0x2cd4, 0x2cd4,\r
-  0x2cd6, 0x2cd6,\r
-  0x2cd8, 0x2cd8,\r
-  0x2cda, 0x2cda,\r
-  0x2cdc, 0x2cdc,\r
-  0x2cde, 0x2cde,\r
-  0x2ce0, 0x2ce0,\r
-  0x2ce2, 0x2ce2,\r
-  0xff21, 0xff3a,\r
-  0x10400, 0x10427,\r
-  0x1d400, 0x1d419,\r
-  0x1d434, 0x1d44d,\r
-  0x1d468, 0x1d481,\r
-  0x1d49c, 0x1d49c,\r
-  0x1d49e, 0x1d49f,\r
-  0x1d4a2, 0x1d4a2,\r
-  0x1d4a5, 0x1d4a6,\r
-  0x1d4a9, 0x1d4ac,\r
-  0x1d4ae, 0x1d4b5,\r
-  0x1d4d0, 0x1d4e9,\r
-  0x1d504, 0x1d505,\r
-  0x1d507, 0x1d50a,\r
-  0x1d50d, 0x1d514,\r
-  0x1d516, 0x1d51c,\r
-  0x1d538, 0x1d539,\r
-  0x1d53b, 0x1d53e,\r
-  0x1d540, 0x1d544,\r
-  0x1d546, 0x1d546,\r
-  0x1d54a, 0x1d550,\r
-  0x1d56c, 0x1d585,\r
-  0x1d5a0, 0x1d5b9,\r
-  0x1d5d4, 0x1d5ed,\r
-  0x1d608, 0x1d621,\r
-  0x1d63c, 0x1d655,\r
-  0x1d670, 0x1d689,\r
-  0x1d6a8, 0x1d6c0,\r
-  0x1d6e2, 0x1d6fa,\r
-  0x1d71c, 0x1d734,\r
-  0x1d756, 0x1d76e,\r
-  0x1d790, 0x1d7a8\r
-}; /* CR_Upper */\r
-\r
-/* 'XDigit': [[:XDigit:]] */\r
-static const OnigCodePoint CR_XDigit[] = {\r
-  3,\r
-  0x0030, 0x0039,\r
-  0x0041, 0x0046,\r
-  0x0061, 0x0066\r
-}; /* CR_XDigit */\r
-\r
-/* 'Word': [[:Word:]] */\r
-static const OnigCodePoint CR_Word[] = {\r
-  464,\r
-  0x0030, 0x0039,\r
-  0x0041, 0x005a,\r
-  0x005f, 0x005f,\r
-  0x0061, 0x007a,\r
-  0x00aa, 0x00aa,\r
-  0x00b2, 0x00b3,\r
-  0x00b5, 0x00b5,\r
-  0x00b9, 0x00ba,\r
-  0x00bc, 0x00be,\r
-  0x00c0, 0x00d6,\r
-  0x00d8, 0x00f6,\r
-  0x00f8, 0x0241,\r
-  0x0250, 0x02c1,\r
-  0x02c6, 0x02d1,\r
-  0x02e0, 0x02e4,\r
-  0x02ee, 0x02ee,\r
-  0x0300, 0x036f,\r
-  0x037a, 0x037a,\r
-  0x0386, 0x0386,\r
-  0x0388, 0x038a,\r
-  0x038c, 0x038c,\r
-  0x038e, 0x03a1,\r
-  0x03a3, 0x03ce,\r
-  0x03d0, 0x03f5,\r
-  0x03f7, 0x0481,\r
-  0x0483, 0x0486,\r
-  0x0488, 0x04ce,\r
-  0x04d0, 0x04f9,\r
-  0x0500, 0x050f,\r
-  0x0531, 0x0556,\r
-  0x0559, 0x0559,\r
-  0x0561, 0x0587,\r
-  0x0591, 0x05b9,\r
-  0x05bb, 0x05bd,\r
-  0x05bf, 0x05bf,\r
-  0x05c1, 0x05c2,\r
-  0x05c4, 0x05c5,\r
-  0x05c7, 0x05c7,\r
-  0x05d0, 0x05ea,\r
-  0x05f0, 0x05f2,\r
-  0x0610, 0x0615,\r
-  0x0621, 0x063a,\r
-  0x0640, 0x065e,\r
-  0x0660, 0x0669,\r
-  0x066e, 0x06d3,\r
-  0x06d5, 0x06dc,\r
-  0x06de, 0x06e8,\r
-  0x06ea, 0x06fc,\r
-  0x06ff, 0x06ff,\r
-  0x0710, 0x074a,\r
-  0x074d, 0x076d,\r
-  0x0780, 0x07b1,\r
-  0x0901, 0x0939,\r
-  0x093c, 0x094d,\r
-  0x0950, 0x0954,\r
-  0x0958, 0x0963,\r
-  0x0966, 0x096f,\r
-  0x097d, 0x097d,\r
-  0x0981, 0x0983,\r
-  0x0985, 0x098c,\r
-  0x098f, 0x0990,\r
-  0x0993, 0x09a8,\r
-  0x09aa, 0x09b0,\r
-  0x09b2, 0x09b2,\r
-  0x09b6, 0x09b9,\r
-  0x09bc, 0x09c4,\r
-  0x09c7, 0x09c8,\r
-  0x09cb, 0x09ce,\r
-  0x09d7, 0x09d7,\r
-  0x09dc, 0x09dd,\r
-  0x09df, 0x09e3,\r
-  0x09e6, 0x09f1,\r
-  0x09f4, 0x09f9,\r
-  0x0a01, 0x0a03,\r
-  0x0a05, 0x0a0a,\r
-  0x0a0f, 0x0a10,\r
-  0x0a13, 0x0a28,\r
-  0x0a2a, 0x0a30,\r
-  0x0a32, 0x0a33,\r
-  0x0a35, 0x0a36,\r
-  0x0a38, 0x0a39,\r
-  0x0a3c, 0x0a3c,\r
-  0x0a3e, 0x0a42,\r
-  0x0a47, 0x0a48,\r
-  0x0a4b, 0x0a4d,\r
-  0x0a59, 0x0a5c,\r
-  0x0a5e, 0x0a5e,\r
-  0x0a66, 0x0a74,\r
-  0x0a81, 0x0a83,\r
-  0x0a85, 0x0a8d,\r
-  0x0a8f, 0x0a91,\r
-  0x0a93, 0x0aa8,\r
-  0x0aaa, 0x0ab0,\r
-  0x0ab2, 0x0ab3,\r
-  0x0ab5, 0x0ab9,\r
-  0x0abc, 0x0ac5,\r
-  0x0ac7, 0x0ac9,\r
-  0x0acb, 0x0acd,\r
-  0x0ad0, 0x0ad0,\r
-  0x0ae0, 0x0ae3,\r
-  0x0ae6, 0x0aef,\r
-  0x0b01, 0x0b03,\r
-  0x0b05, 0x0b0c,\r
-  0x0b0f, 0x0b10,\r
-  0x0b13, 0x0b28,\r
-  0x0b2a, 0x0b30,\r
-  0x0b32, 0x0b33,\r
-  0x0b35, 0x0b39,\r
-  0x0b3c, 0x0b43,\r
-  0x0b47, 0x0b48,\r
-  0x0b4b, 0x0b4d,\r
-  0x0b56, 0x0b57,\r
-  0x0b5c, 0x0b5d,\r
-  0x0b5f, 0x0b61,\r
-  0x0b66, 0x0b6f,\r
-  0x0b71, 0x0b71,\r
-  0x0b82, 0x0b83,\r
-  0x0b85, 0x0b8a,\r
-  0x0b8e, 0x0b90,\r
-  0x0b92, 0x0b95,\r
-  0x0b99, 0x0b9a,\r
-  0x0b9c, 0x0b9c,\r
-  0x0b9e, 0x0b9f,\r
-  0x0ba3, 0x0ba4,\r
-  0x0ba8, 0x0baa,\r
-  0x0bae, 0x0bb9,\r
-  0x0bbe, 0x0bc2,\r
-  0x0bc6, 0x0bc8,\r
-  0x0bca, 0x0bcd,\r
-  0x0bd7, 0x0bd7,\r
-  0x0be6, 0x0bf2,\r
-  0x0c01, 0x0c03,\r
-  0x0c05, 0x0c0c,\r
-  0x0c0e, 0x0c10,\r
-  0x0c12, 0x0c28,\r
-  0x0c2a, 0x0c33,\r
-  0x0c35, 0x0c39,\r
-  0x0c3e, 0x0c44,\r
-  0x0c46, 0x0c48,\r
-  0x0c4a, 0x0c4d,\r
-  0x0c55, 0x0c56,\r
-  0x0c60, 0x0c61,\r
-  0x0c66, 0x0c6f,\r
-  0x0c82, 0x0c83,\r
-  0x0c85, 0x0c8c,\r
-  0x0c8e, 0x0c90,\r
-  0x0c92, 0x0ca8,\r
-  0x0caa, 0x0cb3,\r
-  0x0cb5, 0x0cb9,\r
-  0x0cbc, 0x0cc4,\r
-  0x0cc6, 0x0cc8,\r
-  0x0cca, 0x0ccd,\r
-  0x0cd5, 0x0cd6,\r
-  0x0cde, 0x0cde,\r
-  0x0ce0, 0x0ce1,\r
-  0x0ce6, 0x0cef,\r
-  0x0d02, 0x0d03,\r
-  0x0d05, 0x0d0c,\r
-  0x0d0e, 0x0d10,\r
-  0x0d12, 0x0d28,\r
-  0x0d2a, 0x0d39,\r
-  0x0d3e, 0x0d43,\r
-  0x0d46, 0x0d48,\r
-  0x0d4a, 0x0d4d,\r
-  0x0d57, 0x0d57,\r
-  0x0d60, 0x0d61,\r
-  0x0d66, 0x0d6f,\r
-  0x0d82, 0x0d83,\r
-  0x0d85, 0x0d96,\r
-  0x0d9a, 0x0db1,\r
-  0x0db3, 0x0dbb,\r
-  0x0dbd, 0x0dbd,\r
-  0x0dc0, 0x0dc6,\r
-  0x0dca, 0x0dca,\r
-  0x0dcf, 0x0dd4,\r
-  0x0dd6, 0x0dd6,\r
-  0x0dd8, 0x0ddf,\r
-  0x0df2, 0x0df3,\r
-  0x0e01, 0x0e3a,\r
-  0x0e40, 0x0e4e,\r
-  0x0e50, 0x0e59,\r
-  0x0e81, 0x0e82,\r
-  0x0e84, 0x0e84,\r
-  0x0e87, 0x0e88,\r
-  0x0e8a, 0x0e8a,\r
-  0x0e8d, 0x0e8d,\r
-  0x0e94, 0x0e97,\r
-  0x0e99, 0x0e9f,\r
-  0x0ea1, 0x0ea3,\r
-  0x0ea5, 0x0ea5,\r
-  0x0ea7, 0x0ea7,\r
-  0x0eaa, 0x0eab,\r
-  0x0ead, 0x0eb9,\r
-  0x0ebb, 0x0ebd,\r
-  0x0ec0, 0x0ec4,\r
-  0x0ec6, 0x0ec6,\r
-  0x0ec8, 0x0ecd,\r
-  0x0ed0, 0x0ed9,\r
-  0x0edc, 0x0edd,\r
-  0x0f00, 0x0f00,\r
-  0x0f18, 0x0f19,\r
-  0x0f20, 0x0f33,\r
-  0x0f35, 0x0f35,\r
-  0x0f37, 0x0f37,\r
-  0x0f39, 0x0f39,\r
-  0x0f3e, 0x0f47,\r
-  0x0f49, 0x0f6a,\r
-  0x0f71, 0x0f84,\r
-  0x0f86, 0x0f8b,\r
-  0x0f90, 0x0f97,\r
-  0x0f99, 0x0fbc,\r
-  0x0fc6, 0x0fc6,\r
-  0x1000, 0x1021,\r
-  0x1023, 0x1027,\r
-  0x1029, 0x102a,\r
-  0x102c, 0x1032,\r
-  0x1036, 0x1039,\r
-  0x1040, 0x1049,\r
-  0x1050, 0x1059,\r
-  0x10a0, 0x10c5,\r
-  0x10d0, 0x10fa,\r
-  0x10fc, 0x10fc,\r
-  0x1100, 0x1159,\r
-  0x115f, 0x11a2,\r
-  0x11a8, 0x11f9,\r
-  0x1200, 0x1248,\r
-  0x124a, 0x124d,\r
-  0x1250, 0x1256,\r
-  0x1258, 0x1258,\r
-  0x125a, 0x125d,\r
-  0x1260, 0x1288,\r
-  0x128a, 0x128d,\r
-  0x1290, 0x12b0,\r
-  0x12b2, 0x12b5,\r
-  0x12b8, 0x12be,\r
-  0x12c0, 0x12c0,\r
-  0x12c2, 0x12c5,\r
-  0x12c8, 0x12d6,\r
-  0x12d8, 0x1310,\r
-  0x1312, 0x1315,\r
-  0x1318, 0x135a,\r
-  0x135f, 0x135f,\r
-  0x1369, 0x137c,\r
-  0x1380, 0x138f,\r
-  0x13a0, 0x13f4,\r
-  0x1401, 0x166c,\r
-  0x166f, 0x1676,\r
-  0x1681, 0x169a,\r
-  0x16a0, 0x16ea,\r
-  0x16ee, 0x16f0,\r
-  0x1700, 0x170c,\r
-  0x170e, 0x1714,\r
-  0x1720, 0x1734,\r
-  0x1740, 0x1753,\r
-  0x1760, 0x176c,\r
-  0x176e, 0x1770,\r
-  0x1772, 0x1773,\r
-  0x1780, 0x17b3,\r
-  0x17b6, 0x17d3,\r
-  0x17d7, 0x17d7,\r
-  0x17dc, 0x17dd,\r
-  0x17e0, 0x17e9,\r
-  0x17f0, 0x17f9,\r
-  0x180b, 0x180d,\r
-  0x1810, 0x1819,\r
-  0x1820, 0x1877,\r
-  0x1880, 0x18a9,\r
-  0x1900, 0x191c,\r
-  0x1920, 0x192b,\r
-  0x1930, 0x193b,\r
-  0x1946, 0x196d,\r
-  0x1970, 0x1974,\r
-  0x1980, 0x19a9,\r
-  0x19b0, 0x19c9,\r
-  0x19d0, 0x19d9,\r
-  0x1a00, 0x1a1b,\r
-  0x1d00, 0x1dc3,\r
-  0x1e00, 0x1e9b,\r
-  0x1ea0, 0x1ef9,\r
-  0x1f00, 0x1f15,\r
-  0x1f18, 0x1f1d,\r
-  0x1f20, 0x1f45,\r
-  0x1f48, 0x1f4d,\r
-  0x1f50, 0x1f57,\r
-  0x1f59, 0x1f59,\r
-  0x1f5b, 0x1f5b,\r
-  0x1f5d, 0x1f5d,\r
-  0x1f5f, 0x1f7d,\r
-  0x1f80, 0x1fb4,\r
-  0x1fb6, 0x1fbc,\r
-  0x1fbe, 0x1fbe,\r
-  0x1fc2, 0x1fc4,\r
-  0x1fc6, 0x1fcc,\r
-  0x1fd0, 0x1fd3,\r
-  0x1fd6, 0x1fdb,\r
-  0x1fe0, 0x1fec,\r
-  0x1ff2, 0x1ff4,\r
-  0x1ff6, 0x1ffc,\r
-  0x203f, 0x2040,\r
-  0x2054, 0x2054,\r
-  0x2070, 0x2071,\r
-  0x2074, 0x2079,\r
-  0x207f, 0x2089,\r
-  0x2090, 0x2094,\r
-  0x20d0, 0x20eb,\r
-  0x2102, 0x2102,\r
-  0x2107, 0x2107,\r
-  0x210a, 0x2113,\r
-  0x2115, 0x2115,\r
-  0x2119, 0x211d,\r
-  0x2124, 0x2124,\r
-  0x2126, 0x2126,\r
-  0x2128, 0x2128,\r
-  0x212a, 0x212d,\r
-  0x212f, 0x2131,\r
-  0x2133, 0x2139,\r
-  0x213c, 0x213f,\r
-  0x2145, 0x2149,\r
-  0x2153, 0x2183,\r
-  0x2460, 0x249b,\r
-  0x24ea, 0x24ff,\r
-  0x2776, 0x2793,\r
-  0x2c00, 0x2c2e,\r
-  0x2c30, 0x2c5e,\r
-  0x2c80, 0x2ce4,\r
-  0x2cfd, 0x2cfd,\r
-  0x2d00, 0x2d25,\r
-  0x2d30, 0x2d65,\r
-  0x2d6f, 0x2d6f,\r
-  0x2d80, 0x2d96,\r
-  0x2da0, 0x2da6,\r
-  0x2da8, 0x2dae,\r
-  0x2db0, 0x2db6,\r
-  0x2db8, 0x2dbe,\r
-  0x2dc0, 0x2dc6,\r
-  0x2dc8, 0x2dce,\r
-  0x2dd0, 0x2dd6,\r
-  0x2dd8, 0x2dde,\r
-  0x3005, 0x3007,\r
-  0x3021, 0x302f,\r
-  0x3031, 0x3035,\r
-  0x3038, 0x303c,\r
-  0x3041, 0x3096,\r
-  0x3099, 0x309a,\r
-  0x309d, 0x309f,\r
-  0x30a1, 0x30fa,\r
-  0x30fc, 0x30ff,\r
-  0x3105, 0x312c,\r
-  0x3131, 0x318e,\r
-  0x3192, 0x3195,\r
-  0x31a0, 0x31b7,\r
-  0x31f0, 0x31ff,\r
-  0x3220, 0x3229,\r
-  0x3251, 0x325f,\r
-  0x3280, 0x3289,\r
-  0x32b1, 0x32bf,\r
-  0x3400, 0x4db5,\r
-  0x4e00, 0x9fbb,\r
-  0xa000, 0xa48c,\r
-  0xa800, 0xa827,\r
-  0xac00, 0xd7a3,\r
-  0xf900, 0xfa2d,\r
-  0xfa30, 0xfa6a,\r
-  0xfa70, 0xfad9,\r
-  0xfb00, 0xfb06,\r
-  0xfb13, 0xfb17,\r
-  0xfb1d, 0xfb28,\r
-  0xfb2a, 0xfb36,\r
-  0xfb38, 0xfb3c,\r
-  0xfb3e, 0xfb3e,\r
-  0xfb40, 0xfb41,\r
-  0xfb43, 0xfb44,\r
-  0xfb46, 0xfbb1,\r
-  0xfbd3, 0xfd3d,\r
-  0xfd50, 0xfd8f,\r
-  0xfd92, 0xfdc7,\r
-  0xfdf0, 0xfdfb,\r
-  0xfe00, 0xfe0f,\r
-  0xfe20, 0xfe23,\r
-  0xfe33, 0xfe34,\r
-  0xfe4d, 0xfe4f,\r
-  0xfe70, 0xfe74,\r
-  0xfe76, 0xfefc,\r
-  0xff10, 0xff19,\r
-  0xff21, 0xff3a,\r
-  0xff3f, 0xff3f,\r
-  0xff41, 0xff5a,\r
-  0xff66, 0xffbe,\r
-  0xffc2, 0xffc7,\r
-  0xffca, 0xffcf,\r
-  0xffd2, 0xffd7,\r
-  0xffda, 0xffdc,\r
-  0x10000, 0x1000b,\r
-  0x1000d, 0x10026,\r
-  0x10028, 0x1003a,\r
-  0x1003c, 0x1003d,\r
-  0x1003f, 0x1004d,\r
-  0x10050, 0x1005d,\r
-  0x10080, 0x100fa,\r
-  0x10107, 0x10133,\r
-  0x10140, 0x10178,\r
-  0x1018a, 0x1018a,\r
-  0x10300, 0x1031e,\r
-  0x10320, 0x10323,\r
-  0x10330, 0x1034a,\r
-  0x10380, 0x1039d,\r
-  0x103a0, 0x103c3,\r
-  0x103c8, 0x103cf,\r
-  0x103d1, 0x103d5,\r
-  0x10400, 0x1049d,\r
-  0x104a0, 0x104a9,\r
-  0x10800, 0x10805,\r
-  0x10808, 0x10808,\r
-  0x1080a, 0x10835,\r
-  0x10837, 0x10838,\r
-  0x1083c, 0x1083c,\r
-  0x1083f, 0x1083f,\r
-  0x10a00, 0x10a03,\r
-  0x10a05, 0x10a06,\r
-  0x10a0c, 0x10a13,\r
-  0x10a15, 0x10a17,\r
-  0x10a19, 0x10a33,\r
-  0x10a38, 0x10a3a,\r
-  0x10a3f, 0x10a47,\r
-  0x1d165, 0x1d169,\r
-  0x1d16d, 0x1d172,\r
-  0x1d17b, 0x1d182,\r
-  0x1d185, 0x1d18b,\r
-  0x1d1aa, 0x1d1ad,\r
-  0x1d242, 0x1d244,\r
-  0x1d400, 0x1d454,\r
-  0x1d456, 0x1d49c,\r
-  0x1d49e, 0x1d49f,\r
-  0x1d4a2, 0x1d4a2,\r
-  0x1d4a5, 0x1d4a6,\r
-  0x1d4a9, 0x1d4ac,\r
-  0x1d4ae, 0x1d4b9,\r
-  0x1d4bb, 0x1d4bb,\r
-  0x1d4bd, 0x1d4c3,\r
-  0x1d4c5, 0x1d505,\r
-  0x1d507, 0x1d50a,\r
-  0x1d50d, 0x1d514,\r
-  0x1d516, 0x1d51c,\r
-  0x1d51e, 0x1d539,\r
-  0x1d53b, 0x1d53e,\r
-  0x1d540, 0x1d544,\r
-  0x1d546, 0x1d546,\r
-  0x1d54a, 0x1d550,\r
-  0x1d552, 0x1d6a5,\r
-  0x1d6a8, 0x1d6c0,\r
-  0x1d6c2, 0x1d6da,\r
-  0x1d6dc, 0x1d6fa,\r
-  0x1d6fc, 0x1d714,\r
-  0x1d716, 0x1d734,\r
-  0x1d736, 0x1d74e,\r
-  0x1d750, 0x1d76e,\r
-  0x1d770, 0x1d788,\r
-  0x1d78a, 0x1d7a8,\r
-  0x1d7aa, 0x1d7c2,\r
-  0x1d7c4, 0x1d7c9,\r
-  0x1d7ce, 0x1d7ff,\r
-  0x20000, 0x2a6d6,\r
-  0x2f800, 0x2fa1d,\r
-  0xe0100, 0xe01ef\r
-}; /* CR_Word */\r
-\r
-/* 'Alnum': [[:Alnum:]] */\r
-static const OnigCodePoint CR_Alnum[] = {\r
-  436,\r
-  0x0030, 0x0039,\r
-  0x0041, 0x005a,\r
-  0x0061, 0x007a,\r
-  0x00aa, 0x00aa,\r
-  0x00b5, 0x00b5,\r
-  0x00ba, 0x00ba,\r
-  0x00c0, 0x00d6,\r
-  0x00d8, 0x00f6,\r
-  0x00f8, 0x0241,\r
-  0x0250, 0x02c1,\r
-  0x02c6, 0x02d1,\r
-  0x02e0, 0x02e4,\r
-  0x02ee, 0x02ee,\r
-  0x0300, 0x036f,\r
-  0x037a, 0x037a,\r
-  0x0386, 0x0386,\r
-  0x0388, 0x038a,\r
-  0x038c, 0x038c,\r
-  0x038e, 0x03a1,\r
-  0x03a3, 0x03ce,\r
-  0x03d0, 0x03f5,\r
-  0x03f7, 0x0481,\r
-  0x0483, 0x0486,\r
-  0x0488, 0x04ce,\r
-  0x04d0, 0x04f9,\r
-  0x0500, 0x050f,\r
-  0x0531, 0x0556,\r
-  0x0559, 0x0559,\r
-  0x0561, 0x0587,\r
-  0x0591, 0x05b9,\r
-  0x05bb, 0x05bd,\r
-  0x05bf, 0x05bf,\r
-  0x05c1, 0x05c2,\r
-  0x05c4, 0x05c5,\r
-  0x05c7, 0x05c7,\r
-  0x05d0, 0x05ea,\r
-  0x05f0, 0x05f2,\r
-  0x0610, 0x0615,\r
-  0x0621, 0x063a,\r
-  0x0640, 0x065e,\r
-  0x0660, 0x0669,\r
-  0x066e, 0x06d3,\r
-  0x06d5, 0x06dc,\r
-  0x06de, 0x06e8,\r
-  0x06ea, 0x06fc,\r
-  0x06ff, 0x06ff,\r
-  0x0710, 0x074a,\r
-  0x074d, 0x076d,\r
-  0x0780, 0x07b1,\r
-  0x0901, 0x0939,\r
-  0x093c, 0x094d,\r
-  0x0950, 0x0954,\r
-  0x0958, 0x0963,\r
-  0x0966, 0x096f,\r
-  0x097d, 0x097d,\r
-  0x0981, 0x0983,\r
-  0x0985, 0x098c,\r
-  0x098f, 0x0990,\r
-  0x0993, 0x09a8,\r
-  0x09aa, 0x09b0,\r
-  0x09b2, 0x09b2,\r
-  0x09b6, 0x09b9,\r
-  0x09bc, 0x09c4,\r
-  0x09c7, 0x09c8,\r
-  0x09cb, 0x09ce,\r
-  0x09d7, 0x09d7,\r
-  0x09dc, 0x09dd,\r
-  0x09df, 0x09e3,\r
-  0x09e6, 0x09f1,\r
-  0x0a01, 0x0a03,\r
-  0x0a05, 0x0a0a,\r
-  0x0a0f, 0x0a10,\r
-  0x0a13, 0x0a28,\r
-  0x0a2a, 0x0a30,\r
-  0x0a32, 0x0a33,\r
-  0x0a35, 0x0a36,\r
-  0x0a38, 0x0a39,\r
-  0x0a3c, 0x0a3c,\r
-  0x0a3e, 0x0a42,\r
-  0x0a47, 0x0a48,\r
-  0x0a4b, 0x0a4d,\r
-  0x0a59, 0x0a5c,\r
-  0x0a5e, 0x0a5e,\r
-  0x0a66, 0x0a74,\r
-  0x0a81, 0x0a83,\r
-  0x0a85, 0x0a8d,\r
-  0x0a8f, 0x0a91,\r
-  0x0a93, 0x0aa8,\r
-  0x0aaa, 0x0ab0,\r
-  0x0ab2, 0x0ab3,\r
-  0x0ab5, 0x0ab9,\r
-  0x0abc, 0x0ac5,\r
-  0x0ac7, 0x0ac9,\r
-  0x0acb, 0x0acd,\r
-  0x0ad0, 0x0ad0,\r
-  0x0ae0, 0x0ae3,\r
-  0x0ae6, 0x0aef,\r
-  0x0b01, 0x0b03,\r
-  0x0b05, 0x0b0c,\r
-  0x0b0f, 0x0b10,\r
-  0x0b13, 0x0b28,\r
-  0x0b2a, 0x0b30,\r
-  0x0b32, 0x0b33,\r
-  0x0b35, 0x0b39,\r
-  0x0b3c, 0x0b43,\r
-  0x0b47, 0x0b48,\r
-  0x0b4b, 0x0b4d,\r
-  0x0b56, 0x0b57,\r
-  0x0b5c, 0x0b5d,\r
-  0x0b5f, 0x0b61,\r
-  0x0b66, 0x0b6f,\r
-  0x0b71, 0x0b71,\r
-  0x0b82, 0x0b83,\r
-  0x0b85, 0x0b8a,\r
-  0x0b8e, 0x0b90,\r
-  0x0b92, 0x0b95,\r
-  0x0b99, 0x0b9a,\r
-  0x0b9c, 0x0b9c,\r
-  0x0b9e, 0x0b9f,\r
-  0x0ba3, 0x0ba4,\r
-  0x0ba8, 0x0baa,\r
-  0x0bae, 0x0bb9,\r
-  0x0bbe, 0x0bc2,\r
-  0x0bc6, 0x0bc8,\r
-  0x0bca, 0x0bcd,\r
-  0x0bd7, 0x0bd7,\r
-  0x0be6, 0x0bef,\r
-  0x0c01, 0x0c03,\r
-  0x0c05, 0x0c0c,\r
-  0x0c0e, 0x0c10,\r
-  0x0c12, 0x0c28,\r
-  0x0c2a, 0x0c33,\r
-  0x0c35, 0x0c39,\r
-  0x0c3e, 0x0c44,\r
-  0x0c46, 0x0c48,\r
-  0x0c4a, 0x0c4d,\r
-  0x0c55, 0x0c56,\r
-  0x0c60, 0x0c61,\r
-  0x0c66, 0x0c6f,\r
-  0x0c82, 0x0c83,\r
-  0x0c85, 0x0c8c,\r
-  0x0c8e, 0x0c90,\r
-  0x0c92, 0x0ca8,\r
-  0x0caa, 0x0cb3,\r
-  0x0cb5, 0x0cb9,\r
-  0x0cbc, 0x0cc4,\r
-  0x0cc6, 0x0cc8,\r
-  0x0cca, 0x0ccd,\r
-  0x0cd5, 0x0cd6,\r
-  0x0cde, 0x0cde,\r
-  0x0ce0, 0x0ce1,\r
-  0x0ce6, 0x0cef,\r
-  0x0d02, 0x0d03,\r
-  0x0d05, 0x0d0c,\r
-  0x0d0e, 0x0d10,\r
-  0x0d12, 0x0d28,\r
-  0x0d2a, 0x0d39,\r
-  0x0d3e, 0x0d43,\r
-  0x0d46, 0x0d48,\r
-  0x0d4a, 0x0d4d,\r
-  0x0d57, 0x0d57,\r
-  0x0d60, 0x0d61,\r
-  0x0d66, 0x0d6f,\r
-  0x0d82, 0x0d83,\r
-  0x0d85, 0x0d96,\r
-  0x0d9a, 0x0db1,\r
-  0x0db3, 0x0dbb,\r
-  0x0dbd, 0x0dbd,\r
-  0x0dc0, 0x0dc6,\r
-  0x0dca, 0x0dca,\r
-  0x0dcf, 0x0dd4,\r
-  0x0dd6, 0x0dd6,\r
-  0x0dd8, 0x0ddf,\r
-  0x0df2, 0x0df3,\r
-  0x0e01, 0x0e3a,\r
-  0x0e40, 0x0e4e,\r
-  0x0e50, 0x0e59,\r
-  0x0e81, 0x0e82,\r
-  0x0e84, 0x0e84,\r
-  0x0e87, 0x0e88,\r
-  0x0e8a, 0x0e8a,\r
-  0x0e8d, 0x0e8d,\r
-  0x0e94, 0x0e97,\r
-  0x0e99, 0x0e9f,\r
-  0x0ea1, 0x0ea3,\r
-  0x0ea5, 0x0ea5,\r
-  0x0ea7, 0x0ea7,\r
-  0x0eaa, 0x0eab,\r
-  0x0ead, 0x0eb9,\r
-  0x0ebb, 0x0ebd,\r
-  0x0ec0, 0x0ec4,\r
-  0x0ec6, 0x0ec6,\r
-  0x0ec8, 0x0ecd,\r
-  0x0ed0, 0x0ed9,\r
-  0x0edc, 0x0edd,\r
-  0x0f00, 0x0f00,\r
-  0x0f18, 0x0f19,\r
-  0x0f20, 0x0f29,\r
-  0x0f35, 0x0f35,\r
-  0x0f37, 0x0f37,\r
-  0x0f39, 0x0f39,\r
-  0x0f3e, 0x0f47,\r
-  0x0f49, 0x0f6a,\r
-  0x0f71, 0x0f84,\r
-  0x0f86, 0x0f8b,\r
-  0x0f90, 0x0f97,\r
-  0x0f99, 0x0fbc,\r
-  0x0fc6, 0x0fc6,\r
-  0x1000, 0x1021,\r
-  0x1023, 0x1027,\r
-  0x1029, 0x102a,\r
-  0x102c, 0x1032,\r
-  0x1036, 0x1039,\r
-  0x1040, 0x1049,\r
-  0x1050, 0x1059,\r
-  0x10a0, 0x10c5,\r
-  0x10d0, 0x10fa,\r
-  0x10fc, 0x10fc,\r
-  0x1100, 0x1159,\r
-  0x115f, 0x11a2,\r
-  0x11a8, 0x11f9,\r
-  0x1200, 0x1248,\r
-  0x124a, 0x124d,\r
-  0x1250, 0x1256,\r
-  0x1258, 0x1258,\r
-  0x125a, 0x125d,\r
-  0x1260, 0x1288,\r
-  0x128a, 0x128d,\r
-  0x1290, 0x12b0,\r
-  0x12b2, 0x12b5,\r
-  0x12b8, 0x12be,\r
-  0x12c0, 0x12c0,\r
-  0x12c2, 0x12c5,\r
-  0x12c8, 0x12d6,\r
-  0x12d8, 0x1310,\r
-  0x1312, 0x1315,\r
-  0x1318, 0x135a,\r
-  0x135f, 0x135f,\r
-  0x1380, 0x138f,\r
-  0x13a0, 0x13f4,\r
-  0x1401, 0x166c,\r
-  0x166f, 0x1676,\r
-  0x1681, 0x169a,\r
-  0x16a0, 0x16ea,\r
-  0x1700, 0x170c,\r
-  0x170e, 0x1714,\r
-  0x1720, 0x1734,\r
-  0x1740, 0x1753,\r
-  0x1760, 0x176c,\r
-  0x176e, 0x1770,\r
-  0x1772, 0x1773,\r
-  0x1780, 0x17b3,\r
-  0x17b6, 0x17d3,\r
-  0x17d7, 0x17d7,\r
-  0x17dc, 0x17dd,\r
-  0x17e0, 0x17e9,\r
-  0x180b, 0x180d,\r
-  0x1810, 0x1819,\r
-  0x1820, 0x1877,\r
-  0x1880, 0x18a9,\r
-  0x1900, 0x191c,\r
-  0x1920, 0x192b,\r
-  0x1930, 0x193b,\r
-  0x1946, 0x196d,\r
-  0x1970, 0x1974,\r
-  0x1980, 0x19a9,\r
-  0x19b0, 0x19c9,\r
-  0x19d0, 0x19d9,\r
-  0x1a00, 0x1a1b,\r
-  0x1d00, 0x1dc3,\r
-  0x1e00, 0x1e9b,\r
-  0x1ea0, 0x1ef9,\r
-  0x1f00, 0x1f15,\r
-  0x1f18, 0x1f1d,\r
-  0x1f20, 0x1f45,\r
-  0x1f48, 0x1f4d,\r
-  0x1f50, 0x1f57,\r
-  0x1f59, 0x1f59,\r
-  0x1f5b, 0x1f5b,\r
-  0x1f5d, 0x1f5d,\r
-  0x1f5f, 0x1f7d,\r
-  0x1f80, 0x1fb4,\r
-  0x1fb6, 0x1fbc,\r
-  0x1fbe, 0x1fbe,\r
-  0x1fc2, 0x1fc4,\r
-  0x1fc6, 0x1fcc,\r
-  0x1fd0, 0x1fd3,\r
-  0x1fd6, 0x1fdb,\r
-  0x1fe0, 0x1fec,\r
-  0x1ff2, 0x1ff4,\r
-  0x1ff6, 0x1ffc,\r
-  0x2071, 0x2071,\r
-  0x207f, 0x207f,\r
-  0x2090, 0x2094,\r
-  0x20d0, 0x20eb,\r
-  0x2102, 0x2102,\r
-  0x2107, 0x2107,\r
-  0x210a, 0x2113,\r
-  0x2115, 0x2115,\r
-  0x2119, 0x211d,\r
-  0x2124, 0x2124,\r
-  0x2126, 0x2126,\r
-  0x2128, 0x2128,\r
-  0x212a, 0x212d,\r
-  0x212f, 0x2131,\r
-  0x2133, 0x2139,\r
-  0x213c, 0x213f,\r
-  0x2145, 0x2149,\r
-  0x2c00, 0x2c2e,\r
-  0x2c30, 0x2c5e,\r
-  0x2c80, 0x2ce4,\r
-  0x2d00, 0x2d25,\r
-  0x2d30, 0x2d65,\r
-  0x2d6f, 0x2d6f,\r
-  0x2d80, 0x2d96,\r
-  0x2da0, 0x2da6,\r
-  0x2da8, 0x2dae,\r
-  0x2db0, 0x2db6,\r
-  0x2db8, 0x2dbe,\r
-  0x2dc0, 0x2dc6,\r
-  0x2dc8, 0x2dce,\r
-  0x2dd0, 0x2dd6,\r
-  0x2dd8, 0x2dde,\r
-  0x3005, 0x3006,\r
-  0x302a, 0x302f,\r
-  0x3031, 0x3035,\r
-  0x303b, 0x303c,\r
-  0x3041, 0x3096,\r
-  0x3099, 0x309a,\r
-  0x309d, 0x309f,\r
-  0x30a1, 0x30fa,\r
-  0x30fc, 0x30ff,\r
-  0x3105, 0x312c,\r
-  0x3131, 0x318e,\r
-  0x31a0, 0x31b7,\r
-  0x31f0, 0x31ff,\r
-  0x3400, 0x4db5,\r
-  0x4e00, 0x9fbb,\r
-  0xa000, 0xa48c,\r
-  0xa800, 0xa827,\r
-  0xac00, 0xd7a3,\r
-  0xf900, 0xfa2d,\r
-  0xfa30, 0xfa6a,\r
-  0xfa70, 0xfad9,\r
-  0xfb00, 0xfb06,\r
-  0xfb13, 0xfb17,\r
-  0xfb1d, 0xfb28,\r
-  0xfb2a, 0xfb36,\r
-  0xfb38, 0xfb3c,\r
-  0xfb3e, 0xfb3e,\r
-  0xfb40, 0xfb41,\r
-  0xfb43, 0xfb44,\r
-  0xfb46, 0xfbb1,\r
-  0xfbd3, 0xfd3d,\r
-  0xfd50, 0xfd8f,\r
-  0xfd92, 0xfdc7,\r
-  0xfdf0, 0xfdfb,\r
-  0xfe00, 0xfe0f,\r
-  0xfe20, 0xfe23,\r
-  0xfe70, 0xfe74,\r
-  0xfe76, 0xfefc,\r
-  0xff10, 0xff19,\r
-  0xff21, 0xff3a,\r
-  0xff41, 0xff5a,\r
-  0xff66, 0xffbe,\r
-  0xffc2, 0xffc7,\r
-  0xffca, 0xffcf,\r
-  0xffd2, 0xffd7,\r
-  0xffda, 0xffdc,\r
-  0x10000, 0x1000b,\r
-  0x1000d, 0x10026,\r
-  0x10028, 0x1003a,\r
-  0x1003c, 0x1003d,\r
-  0x1003f, 0x1004d,\r
-  0x10050, 0x1005d,\r
-  0x10080, 0x100fa,\r
-  0x10300, 0x1031e,\r
-  0x10330, 0x10349,\r
-  0x10380, 0x1039d,\r
-  0x103a0, 0x103c3,\r
-  0x103c8, 0x103cf,\r
-  0x10400, 0x1049d,\r
-  0x104a0, 0x104a9,\r
-  0x10800, 0x10805,\r
-  0x10808, 0x10808,\r
-  0x1080a, 0x10835,\r
-  0x10837, 0x10838,\r
-  0x1083c, 0x1083c,\r
-  0x1083f, 0x1083f,\r
-  0x10a00, 0x10a03,\r
-  0x10a05, 0x10a06,\r
-  0x10a0c, 0x10a13,\r
-  0x10a15, 0x10a17,\r
-  0x10a19, 0x10a33,\r
-  0x10a38, 0x10a3a,\r
-  0x10a3f, 0x10a3f,\r
-  0x1d165, 0x1d169,\r
-  0x1d16d, 0x1d172,\r
-  0x1d17b, 0x1d182,\r
-  0x1d185, 0x1d18b,\r
-  0x1d1aa, 0x1d1ad,\r
-  0x1d242, 0x1d244,\r
-  0x1d400, 0x1d454,\r
-  0x1d456, 0x1d49c,\r
-  0x1d49e, 0x1d49f,\r
-  0x1d4a2, 0x1d4a2,\r
-  0x1d4a5, 0x1d4a6,\r
-  0x1d4a9, 0x1d4ac,\r
-  0x1d4ae, 0x1d4b9,\r
-  0x1d4bb, 0x1d4bb,\r
-  0x1d4bd, 0x1d4c3,\r
-  0x1d4c5, 0x1d505,\r
-  0x1d507, 0x1d50a,\r
-  0x1d50d, 0x1d514,\r
-  0x1d516, 0x1d51c,\r
-  0x1d51e, 0x1d539,\r
-  0x1d53b, 0x1d53e,\r
-  0x1d540, 0x1d544,\r
-  0x1d546, 0x1d546,\r
-  0x1d54a, 0x1d550,\r
-  0x1d552, 0x1d6a5,\r
-  0x1d6a8, 0x1d6c0,\r
-  0x1d6c2, 0x1d6da,\r
-  0x1d6dc, 0x1d6fa,\r
-  0x1d6fc, 0x1d714,\r
-  0x1d716, 0x1d734,\r
-  0x1d736, 0x1d74e,\r
-  0x1d750, 0x1d76e,\r
-  0x1d770, 0x1d788,\r
-  0x1d78a, 0x1d7a8,\r
-  0x1d7aa, 0x1d7c2,\r
-  0x1d7c4, 0x1d7c9,\r
-  0x1d7ce, 0x1d7ff,\r
-  0x20000, 0x2a6d6,\r
-  0x2f800, 0x2fa1d,\r
-  0xe0100, 0xe01ef\r
-}; /* CR_Alnum */\r
-\r
-/* 'ASCII': [[:ASCII:]] */\r
-static const OnigCodePoint CR_ASCII[] = {\r
-  1,\r
-  0x0000, 0x007f\r
-}; /* CR_ASCII */\r
-\r
-#ifdef USE_UNICODE_PROPERTIES\r
-\r
-/* 'Any': - */\r
-static const OnigCodePoint CR_Any[] = {\r
-  1,\r
-  0x0000, 0x10ffff\r
-}; /* CR_Any */\r
-\r
-/* 'Assigned': - */\r
-static const OnigCodePoint CR_Assigned[] = {\r
-  420,\r
-  0x0000, 0x0241,\r
-  0x0250, 0x036f,\r
-  0x0374, 0x0375,\r
-  0x037a, 0x037a,\r
-  0x037e, 0x037e,\r
-  0x0384, 0x038a,\r
-  0x038c, 0x038c,\r
-  0x038e, 0x03a1,\r
-  0x03a3, 0x03ce,\r
-  0x03d0, 0x0486,\r
-  0x0488, 0x04ce,\r
-  0x04d0, 0x04f9,\r
-  0x0500, 0x050f,\r
-  0x0531, 0x0556,\r
-  0x0559, 0x055f,\r
-  0x0561, 0x0587,\r
-  0x0589, 0x058a,\r
-  0x0591, 0x05b9,\r
-  0x05bb, 0x05c7,\r
-  0x05d0, 0x05ea,\r
-  0x05f0, 0x05f4,\r
-  0x0600, 0x0603,\r
-  0x060b, 0x0615,\r
-  0x061b, 0x061b,\r
-  0x061e, 0x061f,\r
-  0x0621, 0x063a,\r
-  0x0640, 0x065e,\r
-  0x0660, 0x070d,\r
-  0x070f, 0x074a,\r
-  0x074d, 0x076d,\r
-  0x0780, 0x07b1,\r
-  0x0901, 0x0939,\r
-  0x093c, 0x094d,\r
-  0x0950, 0x0954,\r
-  0x0958, 0x0970,\r
-  0x097d, 0x097d,\r
-  0x0981, 0x0983,\r
-  0x0985, 0x098c,\r
-  0x098f, 0x0990,\r
-  0x0993, 0x09a8,\r
-  0x09aa, 0x09b0,\r
-  0x09b2, 0x09b2,\r
-  0x09b6, 0x09b9,\r
-  0x09bc, 0x09c4,\r
-  0x09c7, 0x09c8,\r
-  0x09cb, 0x09ce,\r
-  0x09d7, 0x09d7,\r
-  0x09dc, 0x09dd,\r
-  0x09df, 0x09e3,\r
-  0x09e6, 0x09fa,\r
-  0x0a01, 0x0a03,\r
-  0x0a05, 0x0a0a,\r
-  0x0a0f, 0x0a10,\r
-  0x0a13, 0x0a28,\r
-  0x0a2a, 0x0a30,\r
-  0x0a32, 0x0a33,\r
-  0x0a35, 0x0a36,\r
-  0x0a38, 0x0a39,\r
-  0x0a3c, 0x0a3c,\r
-  0x0a3e, 0x0a42,\r
-  0x0a47, 0x0a48,\r
-  0x0a4b, 0x0a4d,\r
-  0x0a59, 0x0a5c,\r
-  0x0a5e, 0x0a5e,\r
-  0x0a66, 0x0a74,\r
-  0x0a81, 0x0a83,\r
-  0x0a85, 0x0a8d,\r
-  0x0a8f, 0x0a91,\r
-  0x0a93, 0x0aa8,\r
-  0x0aaa, 0x0ab0,\r
-  0x0ab2, 0x0ab3,\r
-  0x0ab5, 0x0ab9,\r
-  0x0abc, 0x0ac5,\r
-  0x0ac7, 0x0ac9,\r
-  0x0acb, 0x0acd,\r
-  0x0ad0, 0x0ad0,\r
-  0x0ae0, 0x0ae3,\r
-  0x0ae6, 0x0aef,\r
-  0x0af1, 0x0af1,\r
-  0x0b01, 0x0b03,\r
-  0x0b05, 0x0b0c,\r
-  0x0b0f, 0x0b10,\r
-  0x0b13, 0x0b28,\r
-  0x0b2a, 0x0b30,\r
-  0x0b32, 0x0b33,\r
-  0x0b35, 0x0b39,\r
-  0x0b3c, 0x0b43,\r
-  0x0b47, 0x0b48,\r
-  0x0b4b, 0x0b4d,\r
-  0x0b56, 0x0b57,\r
-  0x0b5c, 0x0b5d,\r
-  0x0b5f, 0x0b61,\r
-  0x0b66, 0x0b71,\r
-  0x0b82, 0x0b83,\r
-  0x0b85, 0x0b8a,\r
-  0x0b8e, 0x0b90,\r
-  0x0b92, 0x0b95,\r
-  0x0b99, 0x0b9a,\r
-  0x0b9c, 0x0b9c,\r
-  0x0b9e, 0x0b9f,\r
-  0x0ba3, 0x0ba4,\r
-  0x0ba8, 0x0baa,\r
-  0x0bae, 0x0bb9,\r
-  0x0bbe, 0x0bc2,\r
-  0x0bc6, 0x0bc8,\r
-  0x0bca, 0x0bcd,\r
-  0x0bd7, 0x0bd7,\r
-  0x0be6, 0x0bfa,\r
-  0x0c01, 0x0c03,\r
-  0x0c05, 0x0c0c,\r
-  0x0c0e, 0x0c10,\r
-  0x0c12, 0x0c28,\r
-  0x0c2a, 0x0c33,\r
-  0x0c35, 0x0c39,\r
-  0x0c3e, 0x0c44,\r
-  0x0c46, 0x0c48,\r
-  0x0c4a, 0x0c4d,\r
-  0x0c55, 0x0c56,\r
-  0x0c60, 0x0c61,\r
-  0x0c66, 0x0c6f,\r
-  0x0c82, 0x0c83,\r
-  0x0c85, 0x0c8c,\r
-  0x0c8e, 0x0c90,\r
-  0x0c92, 0x0ca8,\r
-  0x0caa, 0x0cb3,\r
-  0x0cb5, 0x0cb9,\r
-  0x0cbc, 0x0cc4,\r
-  0x0cc6, 0x0cc8,\r
-  0x0cca, 0x0ccd,\r
-  0x0cd5, 0x0cd6,\r
-  0x0cde, 0x0cde,\r
-  0x0ce0, 0x0ce1,\r
-  0x0ce6, 0x0cef,\r
-  0x0d02, 0x0d03,\r
-  0x0d05, 0x0d0c,\r
-  0x0d0e, 0x0d10,\r
-  0x0d12, 0x0d28,\r
-  0x0d2a, 0x0d39,\r
-  0x0d3e, 0x0d43,\r
-  0x0d46, 0x0d48,\r
-  0x0d4a, 0x0d4d,\r
-  0x0d57, 0x0d57,\r
-  0x0d60, 0x0d61,\r
-  0x0d66, 0x0d6f,\r
-  0x0d82, 0x0d83,\r
-  0x0d85, 0x0d96,\r
-  0x0d9a, 0x0db1,\r
-  0x0db3, 0x0dbb,\r
-  0x0dbd, 0x0dbd,\r
-  0x0dc0, 0x0dc6,\r
-  0x0dca, 0x0dca,\r
-  0x0dcf, 0x0dd4,\r
-  0x0dd6, 0x0dd6,\r
-  0x0dd8, 0x0ddf,\r
-  0x0df2, 0x0df4,\r
-  0x0e01, 0x0e3a,\r
-  0x0e3f, 0x0e5b,\r
-  0x0e81, 0x0e82,\r
-  0x0e84, 0x0e84,\r
-  0x0e87, 0x0e88,\r
-  0x0e8a, 0x0e8a,\r
-  0x0e8d, 0x0e8d,\r
-  0x0e94, 0x0e97,\r
-  0x0e99, 0x0e9f,\r
-  0x0ea1, 0x0ea3,\r
-  0x0ea5, 0x0ea5,\r
-  0x0ea7, 0x0ea7,\r
-  0x0eaa, 0x0eab,\r
-  0x0ead, 0x0eb9,\r
-  0x0ebb, 0x0ebd,\r
-  0x0ec0, 0x0ec4,\r
-  0x0ec6, 0x0ec6,\r
-  0x0ec8, 0x0ecd,\r
-  0x0ed0, 0x0ed9,\r
-  0x0edc, 0x0edd,\r
-  0x0f00, 0x0f47,\r
-  0x0f49, 0x0f6a,\r
-  0x0f71, 0x0f8b,\r
-  0x0f90, 0x0f97,\r
-  0x0f99, 0x0fbc,\r
-  0x0fbe, 0x0fcc,\r
-  0x0fcf, 0x0fd1,\r
-  0x1000, 0x1021,\r
-  0x1023, 0x1027,\r
-  0x1029, 0x102a,\r
-  0x102c, 0x1032,\r
-  0x1036, 0x1039,\r
-  0x1040, 0x1059,\r
-  0x10a0, 0x10c5,\r
-  0x10d0, 0x10fc,\r
-  0x1100, 0x1159,\r
-  0x115f, 0x11a2,\r
-  0x11a8, 0x11f9,\r
-  0x1200, 0x1248,\r
-  0x124a, 0x124d,\r
-  0x1250, 0x1256,\r
-  0x1258, 0x1258,\r
-  0x125a, 0x125d,\r
-  0x1260, 0x1288,\r
-  0x128a, 0x128d,\r
-  0x1290, 0x12b0,\r
-  0x12b2, 0x12b5,\r
-  0x12b8, 0x12be,\r
-  0x12c0, 0x12c0,\r
-  0x12c2, 0x12c5,\r
-  0x12c8, 0x12d6,\r
-  0x12d8, 0x1310,\r
-  0x1312, 0x1315,\r
-  0x1318, 0x135a,\r
-  0x135f, 0x137c,\r
-  0x1380, 0x1399,\r
-  0x13a0, 0x13f4,\r
-  0x1401, 0x1676,\r
-  0x1680, 0x169c,\r
-  0x16a0, 0x16f0,\r
-  0x1700, 0x170c,\r
-  0x170e, 0x1714,\r
-  0x1720, 0x1736,\r
-  0x1740, 0x1753,\r
-  0x1760, 0x176c,\r
-  0x176e, 0x1770,\r
-  0x1772, 0x1773,\r
-  0x1780, 0x17dd,\r
-  0x17e0, 0x17e9,\r
-  0x17f0, 0x17f9,\r
-  0x1800, 0x180e,\r
-  0x1810, 0x1819,\r
-  0x1820, 0x1877,\r
-  0x1880, 0x18a9,\r
-  0x1900, 0x191c,\r
-  0x1920, 0x192b,\r
-  0x1930, 0x193b,\r
-  0x1940, 0x1940,\r
-  0x1944, 0x196d,\r
-  0x1970, 0x1974,\r
-  0x1980, 0x19a9,\r
-  0x19b0, 0x19c9,\r
-  0x19d0, 0x19d9,\r
-  0x19de, 0x1a1b,\r
-  0x1a1e, 0x1a1f,\r
-  0x1d00, 0x1dc3,\r
-  0x1e00, 0x1e9b,\r
-  0x1ea0, 0x1ef9,\r
-  0x1f00, 0x1f15,\r
-  0x1f18, 0x1f1d,\r
-  0x1f20, 0x1f45,\r
-  0x1f48, 0x1f4d,\r
-  0x1f50, 0x1f57,\r
-  0x1f59, 0x1f59,\r
-  0x1f5b, 0x1f5b,\r
-  0x1f5d, 0x1f5d,\r
-  0x1f5f, 0x1f7d,\r
-  0x1f80, 0x1fb4,\r
-  0x1fb6, 0x1fc4,\r
-  0x1fc6, 0x1fd3,\r
-  0x1fd6, 0x1fdb,\r
-  0x1fdd, 0x1fef,\r
-  0x1ff2, 0x1ff4,\r
-  0x1ff6, 0x1ffe,\r
-  0x2000, 0x2063,\r
-  0x206a, 0x2071,\r
-  0x2074, 0x208e,\r
-  0x2090, 0x2094,\r
-  0x20a0, 0x20b5,\r
-  0x20d0, 0x20eb,\r
-  0x2100, 0x214c,\r
-  0x2153, 0x2183,\r
-  0x2190, 0x23db,\r
-  0x2400, 0x2426,\r
-  0x2440, 0x244a,\r
-  0x2460, 0x269c,\r
-  0x26a0, 0x26b1,\r
-  0x2701, 0x2704,\r
-  0x2706, 0x2709,\r
-  0x270c, 0x2727,\r
-  0x2729, 0x274b,\r
-  0x274d, 0x274d,\r
-  0x274f, 0x2752,\r
-  0x2756, 0x2756,\r
-  0x2758, 0x275e,\r
-  0x2761, 0x2794,\r
-  0x2798, 0x27af,\r
-  0x27b1, 0x27be,\r
-  0x27c0, 0x27c6,\r
-  0x27d0, 0x27eb,\r
-  0x27f0, 0x2b13,\r
-  0x2c00, 0x2c2e,\r
-  0x2c30, 0x2c5e,\r
-  0x2c80, 0x2cea,\r
-  0x2cf9, 0x2d25,\r
-  0x2d30, 0x2d65,\r
-  0x2d6f, 0x2d6f,\r
-  0x2d80, 0x2d96,\r
-  0x2da0, 0x2da6,\r
-  0x2da8, 0x2dae,\r
-  0x2db0, 0x2db6,\r
-  0x2db8, 0x2dbe,\r
-  0x2dc0, 0x2dc6,\r
-  0x2dc8, 0x2dce,\r
-  0x2dd0, 0x2dd6,\r
-  0x2dd8, 0x2dde,\r
-  0x2e00, 0x2e17,\r
-  0x2e1c, 0x2e1d,\r
-  0x2e80, 0x2e99,\r
-  0x2e9b, 0x2ef3,\r
-  0x2f00, 0x2fd5,\r
-  0x2ff0, 0x2ffb,\r
-  0x3000, 0x303f,\r
-  0x3041, 0x3096,\r
-  0x3099, 0x30ff,\r
-  0x3105, 0x312c,\r
-  0x3131, 0x318e,\r
-  0x3190, 0x31b7,\r
-  0x31c0, 0x31cf,\r
-  0x31f0, 0x321e,\r
-  0x3220, 0x3243,\r
-  0x3250, 0x32fe,\r
-  0x3300, 0x4db5,\r
-  0x4dc0, 0x9fbb,\r
-  0xa000, 0xa48c,\r
-  0xa490, 0xa4c6,\r
-  0xa700, 0xa716,\r
-  0xa800, 0xa82b,\r
-  0xac00, 0xd7a3,\r
-  0xd800, 0xfa2d,\r
-  0xfa30, 0xfa6a,\r
-  0xfa70, 0xfad9,\r
-  0xfb00, 0xfb06,\r
-  0xfb13, 0xfb17,\r
-  0xfb1d, 0xfb36,\r
-  0xfb38, 0xfb3c,\r
-  0xfb3e, 0xfb3e,\r
-  0xfb40, 0xfb41,\r
-  0xfb43, 0xfb44,\r
-  0xfb46, 0xfbb1,\r
-  0xfbd3, 0xfd3f,\r
-  0xfd50, 0xfd8f,\r
-  0xfd92, 0xfdc7,\r
-  0xfdf0, 0xfdfd,\r
-  0xfe00, 0xfe19,\r
-  0xfe20, 0xfe23,\r
-  0xfe30, 0xfe52,\r
-  0xfe54, 0xfe66,\r
-  0xfe68, 0xfe6b,\r
-  0xfe70, 0xfe74,\r
-  0xfe76, 0xfefc,\r
-  0xfeff, 0xfeff,\r
-  0xff01, 0xffbe,\r
-  0xffc2, 0xffc7,\r
-  0xffca, 0xffcf,\r
-  0xffd2, 0xffd7,\r
-  0xffda, 0xffdc,\r
-  0xffe0, 0xffe6,\r
-  0xffe8, 0xffee,\r
-  0xfff9, 0xfffd,\r
-  0x10000, 0x1000b,\r
-  0x1000d, 0x10026,\r
-  0x10028, 0x1003a,\r
-  0x1003c, 0x1003d,\r
-  0x1003f, 0x1004d,\r
-  0x10050, 0x1005d,\r
-  0x10080, 0x100fa,\r
-  0x10100, 0x10102,\r
-  0x10107, 0x10133,\r
-  0x10137, 0x1018a,\r
-  0x10300, 0x1031e,\r
-  0x10320, 0x10323,\r
-  0x10330, 0x1034a,\r
-  0x10380, 0x1039d,\r
-  0x1039f, 0x103c3,\r
-  0x103c8, 0x103d5,\r
-  0x10400, 0x1049d,\r
-  0x104a0, 0x104a9,\r
-  0x10800, 0x10805,\r
-  0x10808, 0x10808,\r
-  0x1080a, 0x10835,\r
-  0x10837, 0x10838,\r
-  0x1083c, 0x1083c,\r
-  0x1083f, 0x1083f,\r
-  0x10a00, 0x10a03,\r
-  0x10a05, 0x10a06,\r
-  0x10a0c, 0x10a13,\r
-  0x10a15, 0x10a17,\r
-  0x10a19, 0x10a33,\r
-  0x10a38, 0x10a3a,\r
-  0x10a3f, 0x10a47,\r
-  0x10a50, 0x10a58,\r
-  0x1d000, 0x1d0f5,\r
-  0x1d100, 0x1d126,\r
-  0x1d12a, 0x1d1dd,\r
-  0x1d200, 0x1d245,\r
-  0x1d300, 0x1d356,\r
-  0x1d400, 0x1d454,\r
-  0x1d456, 0x1d49c,\r
-  0x1d49e, 0x1d49f,\r
-  0x1d4a2, 0x1d4a2,\r
-  0x1d4a5, 0x1d4a6,\r
-  0x1d4a9, 0x1d4ac,\r
-  0x1d4ae, 0x1d4b9,\r
-  0x1d4bb, 0x1d4bb,\r
-  0x1d4bd, 0x1d4c3,\r
-  0x1d4c5, 0x1d505,\r
-  0x1d507, 0x1d50a,\r
-  0x1d50d, 0x1d514,\r
-  0x1d516, 0x1d51c,\r
-  0x1d51e, 0x1d539,\r
-  0x1d53b, 0x1d53e,\r
-  0x1d540, 0x1d544,\r
-  0x1d546, 0x1d546,\r
-  0x1d54a, 0x1d550,\r
-  0x1d552, 0x1d6a5,\r
-  0x1d6a8, 0x1d7c9,\r
-  0x1d7ce, 0x1d7ff,\r
-  0x20000, 0x2a6d6,\r
-  0x2f800, 0x2fa1d,\r
-  0xe0001, 0xe0001,\r
-  0xe0020, 0xe007f,\r
-  0xe0100, 0xe01ef,\r
-  0xf0000, 0xffffd,\r
-  0x100000, 0x10fffd\r
-}; /* CR_Assigned */\r
-\r
-/* 'C': Major Category */\r
-static const OnigCodePoint CR_C[] = {\r
-  422,\r
-  0x0000, 0x001f,\r
-  0x007f, 0x009f,\r
-  0x00ad, 0x00ad,\r
-  0x0242, 0x024f,\r
-  0x0370, 0x0373,\r
-  0x0376, 0x0379,\r
-  0x037b, 0x037d,\r
-  0x037f, 0x0383,\r
-  0x038b, 0x038b,\r
-  0x038d, 0x038d,\r
-  0x03a2, 0x03a2,\r
-  0x03cf, 0x03cf,\r
-  0x0487, 0x0487,\r
-  0x04cf, 0x04cf,\r
-  0x04fa, 0x04ff,\r
-  0x0510, 0x0530,\r
-  0x0557, 0x0558,\r
-  0x0560, 0x0560,\r
-  0x0588, 0x0588,\r
-  0x058b, 0x0590,\r
-  0x05ba, 0x05ba,\r
-  0x05c8, 0x05cf,\r
-  0x05eb, 0x05ef,\r
-  0x05f5, 0x060a,\r
-  0x0616, 0x061a,\r
-  0x061c, 0x061d,\r
-  0x0620, 0x0620,\r
-  0x063b, 0x063f,\r
-  0x065f, 0x065f,\r
-  0x06dd, 0x06dd,\r
-  0x070e, 0x070f,\r
-  0x074b, 0x074c,\r
-  0x076e, 0x077f,\r
-  0x07b2, 0x0900,\r
-  0x093a, 0x093b,\r
-  0x094e, 0x094f,\r
-  0x0955, 0x0957,\r
-  0x0971, 0x097c,\r
-  0x097e, 0x0980,\r
-  0x0984, 0x0984,\r
-  0x098d, 0x098e,\r
-  0x0991, 0x0992,\r
-  0x09a9, 0x09a9,\r
-  0x09b1, 0x09b1,\r
-  0x09b3, 0x09b5,\r
-  0x09ba, 0x09bb,\r
-  0x09c5, 0x09c6,\r
-  0x09c9, 0x09ca,\r
-  0x09cf, 0x09d6,\r
-  0x09d8, 0x09db,\r
-  0x09de, 0x09de,\r
-  0x09e4, 0x09e5,\r
-  0x09fb, 0x0a00,\r
-  0x0a04, 0x0a04,\r
-  0x0a0b, 0x0a0e,\r
-  0x0a11, 0x0a12,\r
-  0x0a29, 0x0a29,\r
-  0x0a31, 0x0a31,\r
-  0x0a34, 0x0a34,\r
-  0x0a37, 0x0a37,\r
-  0x0a3a, 0x0a3b,\r
-  0x0a3d, 0x0a3d,\r
-  0x0a43, 0x0a46,\r
-  0x0a49, 0x0a4a,\r
-  0x0a4e, 0x0a58,\r
-  0x0a5d, 0x0a5d,\r
-  0x0a5f, 0x0a65,\r
-  0x0a75, 0x0a80,\r
-  0x0a84, 0x0a84,\r
-  0x0a8e, 0x0a8e,\r
-  0x0a92, 0x0a92,\r
-  0x0aa9, 0x0aa9,\r
-  0x0ab1, 0x0ab1,\r
-  0x0ab4, 0x0ab4,\r
-  0x0aba, 0x0abb,\r
-  0x0ac6, 0x0ac6,\r
-  0x0aca, 0x0aca,\r
-  0x0ace, 0x0acf,\r
-  0x0ad1, 0x0adf,\r
-  0x0ae4, 0x0ae5,\r
-  0x0af0, 0x0af0,\r
-  0x0af2, 0x0b00,\r
-  0x0b04, 0x0b04,\r
-  0x0b0d, 0x0b0e,\r
-  0x0b11, 0x0b12,\r
-  0x0b29, 0x0b29,\r
-  0x0b31, 0x0b31,\r
-  0x0b34, 0x0b34,\r
-  0x0b3a, 0x0b3b,\r
-  0x0b44, 0x0b46,\r
-  0x0b49, 0x0b4a,\r
-  0x0b4e, 0x0b55,\r
-  0x0b58, 0x0b5b,\r
-  0x0b5e, 0x0b5e,\r
-  0x0b62, 0x0b65,\r
-  0x0b72, 0x0b81,\r
-  0x0b84, 0x0b84,\r
-  0x0b8b, 0x0b8d,\r
-  0x0b91, 0x0b91,\r
-  0x0b96, 0x0b98,\r
-  0x0b9b, 0x0b9b,\r
-  0x0b9d, 0x0b9d,\r
-  0x0ba0, 0x0ba2,\r
-  0x0ba5, 0x0ba7,\r
-  0x0bab, 0x0bad,\r
-  0x0bba, 0x0bbd,\r
-  0x0bc3, 0x0bc5,\r
-  0x0bc9, 0x0bc9,\r
-  0x0bce, 0x0bd6,\r
-  0x0bd8, 0x0be5,\r
-  0x0bfb, 0x0c00,\r
-  0x0c04, 0x0c04,\r
-  0x0c0d, 0x0c0d,\r
-  0x0c11, 0x0c11,\r
-  0x0c29, 0x0c29,\r
-  0x0c34, 0x0c34,\r
-  0x0c3a, 0x0c3d,\r
-  0x0c45, 0x0c45,\r
-  0x0c49, 0x0c49,\r
-  0x0c4e, 0x0c54,\r
-  0x0c57, 0x0c5f,\r
-  0x0c62, 0x0c65,\r
-  0x0c70, 0x0c81,\r
-  0x0c84, 0x0c84,\r
-  0x0c8d, 0x0c8d,\r
-  0x0c91, 0x0c91,\r
-  0x0ca9, 0x0ca9,\r
-  0x0cb4, 0x0cb4,\r
-  0x0cba, 0x0cbb,\r
-  0x0cc5, 0x0cc5,\r
-  0x0cc9, 0x0cc9,\r
-  0x0cce, 0x0cd4,\r
-  0x0cd7, 0x0cdd,\r
-  0x0cdf, 0x0cdf,\r
-  0x0ce2, 0x0ce5,\r
-  0x0cf0, 0x0d01,\r
-  0x0d04, 0x0d04,\r
-  0x0d0d, 0x0d0d,\r
-  0x0d11, 0x0d11,\r
-  0x0d29, 0x0d29,\r
-  0x0d3a, 0x0d3d,\r
-  0x0d44, 0x0d45,\r
-  0x0d49, 0x0d49,\r
-  0x0d4e, 0x0d56,\r
-  0x0d58, 0x0d5f,\r
-  0x0d62, 0x0d65,\r
-  0x0d70, 0x0d81,\r
-  0x0d84, 0x0d84,\r
-  0x0d97, 0x0d99,\r
-  0x0db2, 0x0db2,\r
-  0x0dbc, 0x0dbc,\r
-  0x0dbe, 0x0dbf,\r
-  0x0dc7, 0x0dc9,\r
-  0x0dcb, 0x0dce,\r
-  0x0dd5, 0x0dd5,\r
-  0x0dd7, 0x0dd7,\r
-  0x0de0, 0x0df1,\r
-  0x0df5, 0x0e00,\r
-  0x0e3b, 0x0e3e,\r
-  0x0e5c, 0x0e80,\r
-  0x0e83, 0x0e83,\r
-  0x0e85, 0x0e86,\r
-  0x0e89, 0x0e89,\r
-  0x0e8b, 0x0e8c,\r
-  0x0e8e, 0x0e93,\r
-  0x0e98, 0x0e98,\r
-  0x0ea0, 0x0ea0,\r
-  0x0ea4, 0x0ea4,\r
-  0x0ea6, 0x0ea6,\r
-  0x0ea8, 0x0ea9,\r
-  0x0eac, 0x0eac,\r
-  0x0eba, 0x0eba,\r
-  0x0ebe, 0x0ebf,\r
-  0x0ec5, 0x0ec5,\r
-  0x0ec7, 0x0ec7,\r
-  0x0ece, 0x0ecf,\r
-  0x0eda, 0x0edb,\r
-  0x0ede, 0x0eff,\r
-  0x0f48, 0x0f48,\r
-  0x0f6b, 0x0f70,\r
-  0x0f8c, 0x0f8f,\r
-  0x0f98, 0x0f98,\r
-  0x0fbd, 0x0fbd,\r
-  0x0fcd, 0x0fce,\r
-  0x0fd2, 0x0fff,\r
-  0x1022, 0x1022,\r
-  0x1028, 0x1028,\r
-  0x102b, 0x102b,\r
-  0x1033, 0x1035,\r
-  0x103a, 0x103f,\r
-  0x105a, 0x109f,\r
-  0x10c6, 0x10cf,\r
-  0x10fd, 0x10ff,\r
-  0x115a, 0x115e,\r
-  0x11a3, 0x11a7,\r
-  0x11fa, 0x11ff,\r
-  0x1249, 0x1249,\r
-  0x124e, 0x124f,\r
-  0x1257, 0x1257,\r
-  0x1259, 0x1259,\r
-  0x125e, 0x125f,\r
-  0x1289, 0x1289,\r
-  0x128e, 0x128f,\r
-  0x12b1, 0x12b1,\r
-  0x12b6, 0x12b7,\r
-  0x12bf, 0x12bf,\r
-  0x12c1, 0x12c1,\r
-  0x12c6, 0x12c7,\r
-  0x12d7, 0x12d7,\r
-  0x1311, 0x1311,\r
-  0x1316, 0x1317,\r
-  0x135b, 0x135e,\r
-  0x137d, 0x137f,\r
-  0x139a, 0x139f,\r
-  0x13f5, 0x1400,\r
-  0x1677, 0x167f,\r
-  0x169d, 0x169f,\r
-  0x16f1, 0x16ff,\r
-  0x170d, 0x170d,\r
-  0x1715, 0x171f,\r
-  0x1737, 0x173f,\r
-  0x1754, 0x175f,\r
-  0x176d, 0x176d,\r
-  0x1771, 0x1771,\r
-  0x1774, 0x177f,\r
-  0x17b4, 0x17b5,\r
-  0x17de, 0x17df,\r
-  0x17ea, 0x17ef,\r
-  0x17fa, 0x17ff,\r
-  0x180f, 0x180f,\r
-  0x181a, 0x181f,\r
-  0x1878, 0x187f,\r
-  0x18aa, 0x18ff,\r
-  0x191d, 0x191f,\r
-  0x192c, 0x192f,\r
-  0x193c, 0x193f,\r
-  0x1941, 0x1943,\r
-  0x196e, 0x196f,\r
-  0x1975, 0x197f,\r
-  0x19aa, 0x19af,\r
-  0x19ca, 0x19cf,\r
-  0x19da, 0x19dd,\r
-  0x1a1c, 0x1a1d,\r
-  0x1a20, 0x1cff,\r
-  0x1dc4, 0x1dff,\r
-  0x1e9c, 0x1e9f,\r
-  0x1efa, 0x1eff,\r
-  0x1f16, 0x1f17,\r
-  0x1f1e, 0x1f1f,\r
-  0x1f46, 0x1f47,\r
-  0x1f4e, 0x1f4f,\r
-  0x1f58, 0x1f58,\r
-  0x1f5a, 0x1f5a,\r
-  0x1f5c, 0x1f5c,\r
-  0x1f5e, 0x1f5e,\r
-  0x1f7e, 0x1f7f,\r
-  0x1fb5, 0x1fb5,\r
-  0x1fc5, 0x1fc5,\r
-  0x1fd4, 0x1fd5,\r
-  0x1fdc, 0x1fdc,\r
-  0x1ff0, 0x1ff1,\r
-  0x1ff5, 0x1ff5,\r
-  0x1fff, 0x1fff,\r
-  0x200b, 0x200f,\r
-  0x202a, 0x202e,\r
-  0x2060, 0x206f,\r
-  0x2072, 0x2073,\r
-  0x208f, 0x208f,\r
-  0x2095, 0x209f,\r
-  0x20b6, 0x20cf,\r
-  0x20ec, 0x20ff,\r
-  0x214d, 0x2152,\r
-  0x2184, 0x218f,\r
-  0x23dc, 0x23ff,\r
-  0x2427, 0x243f,\r
-  0x244b, 0x245f,\r
-  0x269d, 0x269f,\r
-  0x26b2, 0x2700,\r
-  0x2705, 0x2705,\r
-  0x270a, 0x270b,\r
-  0x2728, 0x2728,\r
-  0x274c, 0x274c,\r
-  0x274e, 0x274e,\r
-  0x2753, 0x2755,\r
-  0x2757, 0x2757,\r
-  0x275f, 0x2760,\r
-  0x2795, 0x2797,\r
-  0x27b0, 0x27b0,\r
-  0x27bf, 0x27bf,\r
-  0x27c7, 0x27cf,\r
-  0x27ec, 0x27ef,\r
-  0x2b14, 0x2bff,\r
-  0x2c2f, 0x2c2f,\r
-  0x2c5f, 0x2c7f,\r
-  0x2ceb, 0x2cf8,\r
-  0x2d26, 0x2d2f,\r
-  0x2d66, 0x2d6e,\r
-  0x2d70, 0x2d7f,\r
-  0x2d97, 0x2d9f,\r
-  0x2da7, 0x2da7,\r
-  0x2daf, 0x2daf,\r
-  0x2db7, 0x2db7,\r
-  0x2dbf, 0x2dbf,\r
-  0x2dc7, 0x2dc7,\r
-  0x2dcf, 0x2dcf,\r
-  0x2dd7, 0x2dd7,\r
-  0x2ddf, 0x2dff,\r
-  0x2e18, 0x2e1b,\r
-  0x2e1e, 0x2e7f,\r
-  0x2e9a, 0x2e9a,\r
-  0x2ef4, 0x2eff,\r
-  0x2fd6, 0x2fef,\r
-  0x2ffc, 0x2fff,\r
-  0x3040, 0x3040,\r
-  0x3097, 0x3098,\r
-  0x3100, 0x3104,\r
-  0x312d, 0x3130,\r
-  0x318f, 0x318f,\r
-  0x31b8, 0x31bf,\r
-  0x31d0, 0x31ef,\r
-  0x321f, 0x321f,\r
-  0x3244, 0x324f,\r
-  0x32ff, 0x32ff,\r
-  0x4db6, 0x4dbf,\r
-  0x9fbc, 0x9fff,\r
-  0xa48d, 0xa48f,\r
-  0xa4c7, 0xa6ff,\r
-  0xa717, 0xa7ff,\r
-  0xa82c, 0xabff,\r
-  0xd7a4, 0xf8ff,\r
-  0xfa2e, 0xfa2f,\r
-  0xfa6b, 0xfa6f,\r
-  0xfada, 0xfaff,\r
-  0xfb07, 0xfb12,\r
-  0xfb18, 0xfb1c,\r
-  0xfb37, 0xfb37,\r
-  0xfb3d, 0xfb3d,\r
-  0xfb3f, 0xfb3f,\r
-  0xfb42, 0xfb42,\r
-  0xfb45, 0xfb45,\r
-  0xfbb2, 0xfbd2,\r
-  0xfd40, 0xfd4f,\r
-  0xfd90, 0xfd91,\r
-  0xfdc8, 0xfdef,\r
-  0xfdfe, 0xfdff,\r
-  0xfe1a, 0xfe1f,\r
-  0xfe24, 0xfe2f,\r
-  0xfe53, 0xfe53,\r
-  0xfe67, 0xfe67,\r
-  0xfe6c, 0xfe6f,\r
-  0xfe75, 0xfe75,\r
-  0xfefd, 0xff00,\r
-  0xffbf, 0xffc1,\r
-  0xffc8, 0xffc9,\r
-  0xffd0, 0xffd1,\r
-  0xffd8, 0xffd9,\r
-  0xffdd, 0xffdf,\r
-  0xffe7, 0xffe7,\r
-  0xffef, 0xfffb,\r
-  0xfffe, 0xffff,\r
-  0x1000c, 0x1000c,\r
-  0x10027, 0x10027,\r
-  0x1003b, 0x1003b,\r
-  0x1003e, 0x1003e,\r
-  0x1004e, 0x1004f,\r
-  0x1005e, 0x1007f,\r
-  0x100fb, 0x100ff,\r
-  0x10103, 0x10106,\r
-  0x10134, 0x10136,\r
-  0x1018b, 0x102ff,\r
-  0x1031f, 0x1031f,\r
-  0x10324, 0x1032f,\r
-  0x1034b, 0x1037f,\r
-  0x1039e, 0x1039e,\r
-  0x103c4, 0x103c7,\r
-  0x103d6, 0x103ff,\r
-  0x1049e, 0x1049f,\r
-  0x104aa, 0x107ff,\r
-  0x10806, 0x10807,\r
-  0x10809, 0x10809,\r
-  0x10836, 0x10836,\r
-  0x10839, 0x1083b,\r
-  0x1083d, 0x1083e,\r
-  0x10840, 0x109ff,\r
-  0x10a04, 0x10a04,\r
-  0x10a07, 0x10a0b,\r
-  0x10a14, 0x10a14,\r
-  0x10a18, 0x10a18,\r
-  0x10a34, 0x10a37,\r
-  0x10a3b, 0x10a3e,\r
-  0x10a48, 0x10a4f,\r
-  0x10a59, 0x1cfff,\r
-  0x1d0f6, 0x1d0ff,\r
-  0x1d127, 0x1d129,\r
-  0x1d173, 0x1d17a,\r
-  0x1d1de, 0x1d1ff,\r
-  0x1d246, 0x1d2ff,\r
-  0x1d357, 0x1d3ff,\r
-  0x1d455, 0x1d455,\r
-  0x1d49d, 0x1d49d,\r
-  0x1d4a0, 0x1d4a1,\r
-  0x1d4a3, 0x1d4a4,\r
-  0x1d4a7, 0x1d4a8,\r
-  0x1d4ad, 0x1d4ad,\r
-  0x1d4ba, 0x1d4ba,\r
-  0x1d4bc, 0x1d4bc,\r
-  0x1d4c4, 0x1d4c4,\r
-  0x1d506, 0x1d506,\r
-  0x1d50b, 0x1d50c,\r
-  0x1d515, 0x1d515,\r
-  0x1d51d, 0x1d51d,\r
-  0x1d53a, 0x1d53a,\r
-  0x1d53f, 0x1d53f,\r
-  0x1d545, 0x1d545,\r
-  0x1d547, 0x1d549,\r
-  0x1d551, 0x1d551,\r
-  0x1d6a6, 0x1d6a7,\r
-  0x1d7ca, 0x1d7cd,\r
-  0x1d800, 0x1ffff,\r
-  0x2a6d7, 0x2f7ff,\r
-  0x2fa1e, 0xe00ff,\r
-  0xe01f0, 0x10ffff\r
-}; /* CR_C */\r
-\r
-/* 'Cc': General Category */\r
-static const OnigCodePoint CR_Cc[] = {\r
-  2,\r
-  0x0000, 0x001f,\r
-  0x007f, 0x009f\r
-}; /* CR_Cc */\r
-\r
-/* 'Cf': General Category */\r
-static const OnigCodePoint CR_Cf[] = {\r
-  14,\r
-  0x00ad, 0x00ad,\r
-  0x0600, 0x0603,\r
-  0x06dd, 0x06dd,\r
-  0x070f, 0x070f,\r
-  0x17b4, 0x17b5,\r
-  0x200b, 0x200f,\r
-  0x202a, 0x202e,\r
-  0x2060, 0x2063,\r
-  0x206a, 0x206f,\r
-  0xfeff, 0xfeff,\r
-  0xfff9, 0xfffb,\r
-  0x1d173, 0x1d17a,\r
-  0xe0001, 0xe0001,\r
-  0xe0020, 0xe007f\r
-}; /* CR_Cf */\r
-\r
-/* 'Cn': General Category */\r
-static const OnigCodePoint CR_Cn[] = {\r
-  420,\r
-  0x0242, 0x024f,\r
-  0x0370, 0x0373,\r
-  0x0376, 0x0379,\r
-  0x037b, 0x037d,\r
-  0x037f, 0x0383,\r
-  0x038b, 0x038b,\r
-  0x038d, 0x038d,\r
-  0x03a2, 0x03a2,\r
-  0x03cf, 0x03cf,\r
-  0x0487, 0x0487,\r
-  0x04cf, 0x04cf,\r
-  0x04fa, 0x04ff,\r
-  0x0510, 0x0530,\r
-  0x0557, 0x0558,\r
-  0x0560, 0x0560,\r
-  0x0588, 0x0588,\r
-  0x058b, 0x0590,\r
-  0x05ba, 0x05ba,\r
-  0x05c8, 0x05cf,\r
-  0x05eb, 0x05ef,\r
-  0x05f5, 0x05ff,\r
-  0x0604, 0x060a,\r
-  0x0616, 0x061a,\r
-  0x061c, 0x061d,\r
-  0x0620, 0x0620,\r
-  0x063b, 0x063f,\r
-  0x065f, 0x065f,\r
-  0x070e, 0x070e,\r
-  0x074b, 0x074c,\r
-  0x076e, 0x077f,\r
-  0x07b2, 0x0900,\r
-  0x093a, 0x093b,\r
-  0x094e, 0x094f,\r
-  0x0955, 0x0957,\r
-  0x0971, 0x097c,\r
-  0x097e, 0x0980,\r
-  0x0984, 0x0984,\r
-  0x098d, 0x098e,\r
-  0x0991, 0x0992,\r
-  0x09a9, 0x09a9,\r
-  0x09b1, 0x09b1,\r
-  0x09b3, 0x09b5,\r
-  0x09ba, 0x09bb,\r
-  0x09c5, 0x09c6,\r
-  0x09c9, 0x09ca,\r
-  0x09cf, 0x09d6,\r
-  0x09d8, 0x09db,\r
-  0x09de, 0x09de,\r
-  0x09e4, 0x09e5,\r
-  0x09fb, 0x0a00,\r
-  0x0a04, 0x0a04,\r
-  0x0a0b, 0x0a0e,\r
-  0x0a11, 0x0a12,\r
-  0x0a29, 0x0a29,\r
-  0x0a31, 0x0a31,\r
-  0x0a34, 0x0a34,\r
-  0x0a37, 0x0a37,\r
-  0x0a3a, 0x0a3b,\r
-  0x0a3d, 0x0a3d,\r
-  0x0a43, 0x0a46,\r
-  0x0a49, 0x0a4a,\r
-  0x0a4e, 0x0a58,\r
-  0x0a5d, 0x0a5d,\r
-  0x0a5f, 0x0a65,\r
-  0x0a75, 0x0a80,\r
-  0x0a84, 0x0a84,\r
-  0x0a8e, 0x0a8e,\r
-  0x0a92, 0x0a92,\r
-  0x0aa9, 0x0aa9,\r
-  0x0ab1, 0x0ab1,\r
-  0x0ab4, 0x0ab4,\r
-  0x0aba, 0x0abb,\r
-  0x0ac6, 0x0ac6,\r
-  0x0aca, 0x0aca,\r
-  0x0ace, 0x0acf,\r
-  0x0ad1, 0x0adf,\r
-  0x0ae4, 0x0ae5,\r
-  0x0af0, 0x0af0,\r
-  0x0af2, 0x0b00,\r
-  0x0b04, 0x0b04,\r
-  0x0b0d, 0x0b0e,\r
-  0x0b11, 0x0b12,\r
-  0x0b29, 0x0b29,\r
-  0x0b31, 0x0b31,\r
-  0x0b34, 0x0b34,\r
-  0x0b3a, 0x0b3b,\r
-  0x0b44, 0x0b46,\r
-  0x0b49, 0x0b4a,\r
-  0x0b4e, 0x0b55,\r
-  0x0b58, 0x0b5b,\r
-  0x0b5e, 0x0b5e,\r
-  0x0b62, 0x0b65,\r
-  0x0b72, 0x0b81,\r
-  0x0b84, 0x0b84,\r
-  0x0b8b, 0x0b8d,\r
-  0x0b91, 0x0b91,\r
-  0x0b96, 0x0b98,\r
-  0x0b9b, 0x0b9b,\r
-  0x0b9d, 0x0b9d,\r
-  0x0ba0, 0x0ba2,\r
-  0x0ba5, 0x0ba7,\r
-  0x0bab, 0x0bad,\r
-  0x0bba, 0x0bbd,\r
-  0x0bc3, 0x0bc5,\r
-  0x0bc9, 0x0bc9,\r
-  0x0bce, 0x0bd6,\r
-  0x0bd8, 0x0be5,\r
-  0x0bfb, 0x0c00,\r
-  0x0c04, 0x0c04,\r
-  0x0c0d, 0x0c0d,\r
-  0x0c11, 0x0c11,\r
-  0x0c29, 0x0c29,\r
-  0x0c34, 0x0c34,\r
-  0x0c3a, 0x0c3d,\r
-  0x0c45, 0x0c45,\r
-  0x0c49, 0x0c49,\r
-  0x0c4e, 0x0c54,\r
-  0x0c57, 0x0c5f,\r
-  0x0c62, 0x0c65,\r
-  0x0c70, 0x0c81,\r
-  0x0c84, 0x0c84,\r
-  0x0c8d, 0x0c8d,\r
-  0x0c91, 0x0c91,\r
-  0x0ca9, 0x0ca9,\r
-  0x0cb4, 0x0cb4,\r
-  0x0cba, 0x0cbb,\r
-  0x0cc5, 0x0cc5,\r
-  0x0cc9, 0x0cc9,\r
-  0x0cce, 0x0cd4,\r
-  0x0cd7, 0x0cdd,\r
-  0x0cdf, 0x0cdf,\r
-  0x0ce2, 0x0ce5,\r
-  0x0cf0, 0x0d01,\r
-  0x0d04, 0x0d04,\r
-  0x0d0d, 0x0d0d,\r
-  0x0d11, 0x0d11,\r
-  0x0d29, 0x0d29,\r
-  0x0d3a, 0x0d3d,\r
-  0x0d44, 0x0d45,\r
-  0x0d49, 0x0d49,\r
-  0x0d4e, 0x0d56,\r
-  0x0d58, 0x0d5f,\r
-  0x0d62, 0x0d65,\r
-  0x0d70, 0x0d81,\r
-  0x0d84, 0x0d84,\r
-  0x0d97, 0x0d99,\r
-  0x0db2, 0x0db2,\r
-  0x0dbc, 0x0dbc,\r
-  0x0dbe, 0x0dbf,\r
-  0x0dc7, 0x0dc9,\r
-  0x0dcb, 0x0dce,\r
-  0x0dd5, 0x0dd5,\r
-  0x0dd7, 0x0dd7,\r
-  0x0de0, 0x0df1,\r
-  0x0df5, 0x0e00,\r
-  0x0e3b, 0x0e3e,\r
-  0x0e5c, 0x0e80,\r
-  0x0e83, 0x0e83,\r
-  0x0e85, 0x0e86,\r
-  0x0e89, 0x0e89,\r
-  0x0e8b, 0x0e8c,\r
-  0x0e8e, 0x0e93,\r
-  0x0e98, 0x0e98,\r
-  0x0ea0, 0x0ea0,\r
-  0x0ea4, 0x0ea4,\r
-  0x0ea6, 0x0ea6,\r
-  0x0ea8, 0x0ea9,\r
-  0x0eac, 0x0eac,\r
-  0x0eba, 0x0eba,\r
-  0x0ebe, 0x0ebf,\r
-  0x0ec5, 0x0ec5,\r
-  0x0ec7, 0x0ec7,\r
-  0x0ece, 0x0ecf,\r
-  0x0eda, 0x0edb,\r
-  0x0ede, 0x0eff,\r
-  0x0f48, 0x0f48,\r
-  0x0f6b, 0x0f70,\r
-  0x0f8c, 0x0f8f,\r
-  0x0f98, 0x0f98,\r
-  0x0fbd, 0x0fbd,\r
-  0x0fcd, 0x0fce,\r
-  0x0fd2, 0x0fff,\r
-  0x1022, 0x1022,\r
-  0x1028, 0x1028,\r
-  0x102b, 0x102b,\r
-  0x1033, 0x1035,\r
-  0x103a, 0x103f,\r
-  0x105a, 0x109f,\r
-  0x10c6, 0x10cf,\r
-  0x10fd, 0x10ff,\r
-  0x115a, 0x115e,\r
-  0x11a3, 0x11a7,\r
-  0x11fa, 0x11ff,\r
-  0x1249, 0x1249,\r
-  0x124e, 0x124f,\r
-  0x1257, 0x1257,\r
-  0x1259, 0x1259,\r
-  0x125e, 0x125f,\r
-  0x1289, 0x1289,\r
-  0x128e, 0x128f,\r
-  0x12b1, 0x12b1,\r
-  0x12b6, 0x12b7,\r
-  0x12bf, 0x12bf,\r
-  0x12c1, 0x12c1,\r
-  0x12c6, 0x12c7,\r
-  0x12d7, 0x12d7,\r
-  0x1311, 0x1311,\r
-  0x1316, 0x1317,\r
-  0x135b, 0x135e,\r
-  0x137d, 0x137f,\r
-  0x139a, 0x139f,\r
-  0x13f5, 0x1400,\r
-  0x1677, 0x167f,\r
-  0x169d, 0x169f,\r
-  0x16f1, 0x16ff,\r
-  0x170d, 0x170d,\r
-  0x1715, 0x171f,\r
-  0x1737, 0x173f,\r
-  0x1754, 0x175f,\r
-  0x176d, 0x176d,\r
-  0x1771, 0x1771,\r
-  0x1774, 0x177f,\r
-  0x17de, 0x17df,\r
-  0x17ea, 0x17ef,\r
-  0x17fa, 0x17ff,\r
-  0x180f, 0x180f,\r
-  0x181a, 0x181f,\r
-  0x1878, 0x187f,\r
-  0x18aa, 0x18ff,\r
-  0x191d, 0x191f,\r
-  0x192c, 0x192f,\r
-  0x193c, 0x193f,\r
-  0x1941, 0x1943,\r
-  0x196e, 0x196f,\r
-  0x1975, 0x197f,\r
-  0x19aa, 0x19af,\r
-  0x19ca, 0x19cf,\r
-  0x19da, 0x19dd,\r
-  0x1a1c, 0x1a1d,\r
-  0x1a20, 0x1cff,\r
-  0x1dc4, 0x1dff,\r
-  0x1e9c, 0x1e9f,\r
-  0x1efa, 0x1eff,\r
-  0x1f16, 0x1f17,\r
-  0x1f1e, 0x1f1f,\r
-  0x1f46, 0x1f47,\r
-  0x1f4e, 0x1f4f,\r
-  0x1f58, 0x1f58,\r
-  0x1f5a, 0x1f5a,\r
-  0x1f5c, 0x1f5c,\r
-  0x1f5e, 0x1f5e,\r
-  0x1f7e, 0x1f7f,\r
-  0x1fb5, 0x1fb5,\r
-  0x1fc5, 0x1fc5,\r
-  0x1fd4, 0x1fd5,\r
-  0x1fdc, 0x1fdc,\r
-  0x1ff0, 0x1ff1,\r
-  0x1ff5, 0x1ff5,\r
-  0x1fff, 0x1fff,\r
-  0x2064, 0x2069,\r
-  0x2072, 0x2073,\r
-  0x208f, 0x208f,\r
-  0x2095, 0x209f,\r
-  0x20b6, 0x20cf,\r
-  0x20ec, 0x20ff,\r
-  0x214d, 0x2152,\r
-  0x2184, 0x218f,\r
-  0x23dc, 0x23ff,\r
-  0x2427, 0x243f,\r
-  0x244b, 0x245f,\r
-  0x269d, 0x269f,\r
-  0x26b2, 0x2700,\r
-  0x2705, 0x2705,\r
-  0x270a, 0x270b,\r
-  0x2728, 0x2728,\r
-  0x274c, 0x274c,\r
-  0x274e, 0x274e,\r
-  0x2753, 0x2755,\r
-  0x2757, 0x2757,\r
-  0x275f, 0x2760,\r
-  0x2795, 0x2797,\r
-  0x27b0, 0x27b0,\r
-  0x27bf, 0x27bf,\r
-  0x27c7, 0x27cf,\r
-  0x27ec, 0x27ef,\r
-  0x2b14, 0x2bff,\r
-  0x2c2f, 0x2c2f,\r
-  0x2c5f, 0x2c7f,\r
-  0x2ceb, 0x2cf8,\r
-  0x2d26, 0x2d2f,\r
-  0x2d66, 0x2d6e,\r
-  0x2d70, 0x2d7f,\r
-  0x2d97, 0x2d9f,\r
-  0x2da7, 0x2da7,\r
-  0x2daf, 0x2daf,\r
-  0x2db7, 0x2db7,\r
-  0x2dbf, 0x2dbf,\r
-  0x2dc7, 0x2dc7,\r
-  0x2dcf, 0x2dcf,\r
-  0x2dd7, 0x2dd7,\r
-  0x2ddf, 0x2dff,\r
-  0x2e18, 0x2e1b,\r
-  0x2e1e, 0x2e7f,\r
-  0x2e9a, 0x2e9a,\r
-  0x2ef4, 0x2eff,\r
-  0x2fd6, 0x2fef,\r
-  0x2ffc, 0x2fff,\r
-  0x3040, 0x3040,\r
-  0x3097, 0x3098,\r
-  0x3100, 0x3104,\r
-  0x312d, 0x3130,\r
-  0x318f, 0x318f,\r
-  0x31b8, 0x31bf,\r
-  0x31d0, 0x31ef,\r
-  0x321f, 0x321f,\r
-  0x3244, 0x324f,\r
-  0x32ff, 0x32ff,\r
-  0x4db6, 0x4dbf,\r
-  0x9fbc, 0x9fff,\r
-  0xa48d, 0xa48f,\r
-  0xa4c7, 0xa6ff,\r
-  0xa717, 0xa7ff,\r
-  0xa82c, 0xabff,\r
-  0xd7a4, 0xd7ff,\r
-  0xfa2e, 0xfa2f,\r
-  0xfa6b, 0xfa6f,\r
-  0xfada, 0xfaff,\r
-  0xfb07, 0xfb12,\r
-  0xfb18, 0xfb1c,\r
-  0xfb37, 0xfb37,\r
-  0xfb3d, 0xfb3d,\r
-  0xfb3f, 0xfb3f,\r
-  0xfb42, 0xfb42,\r
-  0xfb45, 0xfb45,\r
-  0xfbb2, 0xfbd2,\r
-  0xfd40, 0xfd4f,\r
-  0xfd90, 0xfd91,\r
-  0xfdc8, 0xfdef,\r
-  0xfdfe, 0xfdff,\r
-  0xfe1a, 0xfe1f,\r
-  0xfe24, 0xfe2f,\r
-  0xfe53, 0xfe53,\r
-  0xfe67, 0xfe67,\r
-  0xfe6c, 0xfe6f,\r
-  0xfe75, 0xfe75,\r
-  0xfefd, 0xfefe,\r
-  0xff00, 0xff00,\r
-  0xffbf, 0xffc1,\r
-  0xffc8, 0xffc9,\r
-  0xffd0, 0xffd1,\r
-  0xffd8, 0xffd9,\r
-  0xffdd, 0xffdf,\r
-  0xffe7, 0xffe7,\r
-  0xffef, 0xfff8,\r
-  0xfffe, 0xffff,\r
-  0x1000c, 0x1000c,\r
-  0x10027, 0x10027,\r
-  0x1003b, 0x1003b,\r
-  0x1003e, 0x1003e,\r
-  0x1004e, 0x1004f,\r
-  0x1005e, 0x1007f,\r
-  0x100fb, 0x100ff,\r
-  0x10103, 0x10106,\r
-  0x10134, 0x10136,\r
-  0x1018b, 0x102ff,\r
-  0x1031f, 0x1031f,\r
-  0x10324, 0x1032f,\r
-  0x1034b, 0x1037f,\r
-  0x1039e, 0x1039e,\r
-  0x103c4, 0x103c7,\r
-  0x103d6, 0x103ff,\r
-  0x1049e, 0x1049f,\r
-  0x104aa, 0x107ff,\r
-  0x10806, 0x10807,\r
-  0x10809, 0x10809,\r
-  0x10836, 0x10836,\r
-  0x10839, 0x1083b,\r
-  0x1083d, 0x1083e,\r
-  0x10840, 0x109ff,\r
-  0x10a04, 0x10a04,\r
-  0x10a07, 0x10a0b,\r
-  0x10a14, 0x10a14,\r
-  0x10a18, 0x10a18,\r
-  0x10a34, 0x10a37,\r
-  0x10a3b, 0x10a3e,\r
-  0x10a48, 0x10a4f,\r
-  0x10a59, 0x1cfff,\r
-  0x1d0f6, 0x1d0ff,\r
-  0x1d127, 0x1d129,\r
-  0x1d1de, 0x1d1ff,\r
-  0x1d246, 0x1d2ff,\r
-  0x1d357, 0x1d3ff,\r
-  0x1d455, 0x1d455,\r
-  0x1d49d, 0x1d49d,\r
-  0x1d4a0, 0x1d4a1,\r
-  0x1d4a3, 0x1d4a4,\r
-  0x1d4a7, 0x1d4a8,\r
-  0x1d4ad, 0x1d4ad,\r
-  0x1d4ba, 0x1d4ba,\r
-  0x1d4bc, 0x1d4bc,\r
-  0x1d4c4, 0x1d4c4,\r
-  0x1d506, 0x1d506,\r
-  0x1d50b, 0x1d50c,\r
-  0x1d515, 0x1d515,\r
-  0x1d51d, 0x1d51d,\r
-  0x1d53a, 0x1d53a,\r
-  0x1d53f, 0x1d53f,\r
-  0x1d545, 0x1d545,\r
-  0x1d547, 0x1d549,\r
-  0x1d551, 0x1d551,\r
-  0x1d6a6, 0x1d6a7,\r
-  0x1d7ca, 0x1d7cd,\r
-  0x1d800, 0x1ffff,\r
-  0x2a6d7, 0x2f7ff,\r
-  0x2fa1e, 0xe0000,\r
-  0xe0002, 0xe001f,\r
-  0xe0080, 0xe00ff,\r
-  0xe01f0, 0xeffff,\r
-  0xffffe, 0xfffff,\r
-  0x10fffe, 0x10ffff\r
-}; /* CR_Cn */\r
-\r
-/* 'Co': General Category */\r
-static const OnigCodePoint CR_Co[] = {\r
-  3,\r
-  0xe000, 0xf8ff,\r
-  0xf0000, 0xffffd,\r
-  0x100000, 0x10fffd\r
-}; /* CR_Co */\r
-\r
-/* 'Cs': General Category */\r
-static const OnigCodePoint CR_Cs[] = {\r
-  1,\r
-  0xd800, 0xdfff\r
-}; /* CR_Cs */\r
-\r
-/* 'L': Major Category */\r
-static const OnigCodePoint CR_L[] = {\r
-  347,\r
-  0x0041, 0x005a,\r
-  0x0061, 0x007a,\r
-  0x00aa, 0x00aa,\r
-  0x00b5, 0x00b5,\r
-  0x00ba, 0x00ba,\r
-  0x00c0, 0x00d6,\r
-  0x00d8, 0x00f6,\r
-  0x00f8, 0x0241,\r
-  0x0250, 0x02c1,\r
-  0x02c6, 0x02d1,\r
-  0x02e0, 0x02e4,\r
-  0x02ee, 0x02ee,\r
-  0x037a, 0x037a,\r
-  0x0386, 0x0386,\r
-  0x0388, 0x038a,\r
-  0x038c, 0x038c,\r
-  0x038e, 0x03a1,\r
-  0x03a3, 0x03ce,\r
-  0x03d0, 0x03f5,\r
-  0x03f7, 0x0481,\r
-  0x048a, 0x04ce,\r
-  0x04d0, 0x04f9,\r
-  0x0500, 0x050f,\r
-  0x0531, 0x0556,\r
-  0x0559, 0x0559,\r
-  0x0561, 0x0587,\r
-  0x05d0, 0x05ea,\r
-  0x05f0, 0x05f2,\r
-  0x0621, 0x063a,\r
-  0x0640, 0x064a,\r
-  0x066e, 0x066f,\r
-  0x0671, 0x06d3,\r
-  0x06d5, 0x06d5,\r
-  0x06e5, 0x06e6,\r
-  0x06ee, 0x06ef,\r
-  0x06fa, 0x06fc,\r
-  0x06ff, 0x06ff,\r
-  0x0710, 0x0710,\r
-  0x0712, 0x072f,\r
-  0x074d, 0x076d,\r
-  0x0780, 0x07a5,\r
-  0x07b1, 0x07b1,\r
-  0x0904, 0x0939,\r
-  0x093d, 0x093d,\r
-  0x0950, 0x0950,\r
-  0x0958, 0x0961,\r
-  0x097d, 0x097d,\r
-  0x0985, 0x098c,\r
-  0x098f, 0x0990,\r
-  0x0993, 0x09a8,\r
-  0x09aa, 0x09b0,\r
-  0x09b2, 0x09b2,\r
-  0x09b6, 0x09b9,\r
-  0x09bd, 0x09bd,\r
-  0x09ce, 0x09ce,\r
-  0x09dc, 0x09dd,\r
-  0x09df, 0x09e1,\r
-  0x09f0, 0x09f1,\r
-  0x0a05, 0x0a0a,\r
-  0x0a0f, 0x0a10,\r
-  0x0a13, 0x0a28,\r
-  0x0a2a, 0x0a30,\r
-  0x0a32, 0x0a33,\r
-  0x0a35, 0x0a36,\r
-  0x0a38, 0x0a39,\r
-  0x0a59, 0x0a5c,\r
-  0x0a5e, 0x0a5e,\r
-  0x0a72, 0x0a74,\r
-  0x0a85, 0x0a8d,\r
-  0x0a8f, 0x0a91,\r
-  0x0a93, 0x0aa8,\r
-  0x0aaa, 0x0ab0,\r
-  0x0ab2, 0x0ab3,\r
-  0x0ab5, 0x0ab9,\r
-  0x0abd, 0x0abd,\r
-  0x0ad0, 0x0ad0,\r
-  0x0ae0, 0x0ae1,\r
-  0x0b05, 0x0b0c,\r
-  0x0b0f, 0x0b10,\r
-  0x0b13, 0x0b28,\r
-  0x0b2a, 0x0b30,\r
-  0x0b32, 0x0b33,\r
-  0x0b35, 0x0b39,\r
-  0x0b3d, 0x0b3d,\r
-  0x0b5c, 0x0b5d,\r
-  0x0b5f, 0x0b61,\r
-  0x0b71, 0x0b71,\r
-  0x0b83, 0x0b83,\r
-  0x0b85, 0x0b8a,\r
-  0x0b8e, 0x0b90,\r
-  0x0b92, 0x0b95,\r
-  0x0b99, 0x0b9a,\r
-  0x0b9c, 0x0b9c,\r
-  0x0b9e, 0x0b9f,\r
-  0x0ba3, 0x0ba4,\r
-  0x0ba8, 0x0baa,\r
-  0x0bae, 0x0bb9,\r
-  0x0c05, 0x0c0c,\r
-  0x0c0e, 0x0c10,\r
-  0x0c12, 0x0c28,\r
-  0x0c2a, 0x0c33,\r
-  0x0c35, 0x0c39,\r
-  0x0c60, 0x0c61,\r
-  0x0c85, 0x0c8c,\r
-  0x0c8e, 0x0c90,\r
-  0x0c92, 0x0ca8,\r
-  0x0caa, 0x0cb3,\r
-  0x0cb5, 0x0cb9,\r
-  0x0cbd, 0x0cbd,\r
-  0x0cde, 0x0cde,\r
-  0x0ce0, 0x0ce1,\r
-  0x0d05, 0x0d0c,\r
-  0x0d0e, 0x0d10,\r
-  0x0d12, 0x0d28,\r
-  0x0d2a, 0x0d39,\r
-  0x0d60, 0x0d61,\r
-  0x0d85, 0x0d96,\r
-  0x0d9a, 0x0db1,\r
-  0x0db3, 0x0dbb,\r
-  0x0dbd, 0x0dbd,\r
-  0x0dc0, 0x0dc6,\r
-  0x0e01, 0x0e30,\r
-  0x0e32, 0x0e33,\r
-  0x0e40, 0x0e46,\r
-  0x0e81, 0x0e82,\r
-  0x0e84, 0x0e84,\r
-  0x0e87, 0x0e88,\r
-  0x0e8a, 0x0e8a,\r
-  0x0e8d, 0x0e8d,\r
-  0x0e94, 0x0e97,\r
-  0x0e99, 0x0e9f,\r
-  0x0ea1, 0x0ea3,\r
-  0x0ea5, 0x0ea5,\r
-  0x0ea7, 0x0ea7,\r
-  0x0eaa, 0x0eab,\r
-  0x0ead, 0x0eb0,\r
-  0x0eb2, 0x0eb3,\r
-  0x0ebd, 0x0ebd,\r
-  0x0ec0, 0x0ec4,\r
-  0x0ec6, 0x0ec6,\r
-  0x0edc, 0x0edd,\r
-  0x0f00, 0x0f00,\r
-  0x0f40, 0x0f47,\r
-  0x0f49, 0x0f6a,\r
-  0x0f88, 0x0f8b,\r
-  0x1000, 0x1021,\r
-  0x1023, 0x1027,\r
-  0x1029, 0x102a,\r
-  0x1050, 0x1055,\r
-  0x10a0, 0x10c5,\r
-  0x10d0, 0x10fa,\r
-  0x10fc, 0x10fc,\r
-  0x1100, 0x1159,\r
-  0x115f, 0x11a2,\r
-  0x11a8, 0x11f9,\r
-  0x1200, 0x1248,\r
-  0x124a, 0x124d,\r
-  0x1250, 0x1256,\r
-  0x1258, 0x1258,\r
-  0x125a, 0x125d,\r
-  0x1260, 0x1288,\r
-  0x128a, 0x128d,\r
-  0x1290, 0x12b0,\r
-  0x12b2, 0x12b5,\r
-  0x12b8, 0x12be,\r
-  0x12c0, 0x12c0,\r
-  0x12c2, 0x12c5,\r
-  0x12c8, 0x12d6,\r
-  0x12d8, 0x1310,\r
-  0x1312, 0x1315,\r
-  0x1318, 0x135a,\r
-  0x1380, 0x138f,\r
-  0x13a0, 0x13f4,\r
-  0x1401, 0x166c,\r
-  0x166f, 0x1676,\r
-  0x1681, 0x169a,\r
-  0x16a0, 0x16ea,\r
-  0x1700, 0x170c,\r
-  0x170e, 0x1711,\r
-  0x1720, 0x1731,\r
-  0x1740, 0x1751,\r
-  0x1760, 0x176c,\r
-  0x176e, 0x1770,\r
-  0x1780, 0x17b3,\r
-  0x17d7, 0x17d7,\r
-  0x17dc, 0x17dc,\r
-  0x1820, 0x1877,\r
-  0x1880, 0x18a8,\r
-  0x1900, 0x191c,\r
-  0x1950, 0x196d,\r
-  0x1970, 0x1974,\r
-  0x1980, 0x19a9,\r
-  0x19c1, 0x19c7,\r
-  0x1a00, 0x1a16,\r
-  0x1d00, 0x1dbf,\r
-  0x1e00, 0x1e9b,\r
-  0x1ea0, 0x1ef9,\r
-  0x1f00, 0x1f15,\r
-  0x1f18, 0x1f1d,\r
-  0x1f20, 0x1f45,\r
-  0x1f48, 0x1f4d,\r
-  0x1f50, 0x1f57,\r
-  0x1f59, 0x1f59,\r
-  0x1f5b, 0x1f5b,\r
-  0x1f5d, 0x1f5d,\r
-  0x1f5f, 0x1f7d,\r
-  0x1f80, 0x1fb4,\r
-  0x1fb6, 0x1fbc,\r
-  0x1fbe, 0x1fbe,\r
-  0x1fc2, 0x1fc4,\r
-  0x1fc6, 0x1fcc,\r
-  0x1fd0, 0x1fd3,\r
-  0x1fd6, 0x1fdb,\r
-  0x1fe0, 0x1fec,\r
-  0x1ff2, 0x1ff4,\r
-  0x1ff6, 0x1ffc,\r
-  0x2071, 0x2071,\r
-  0x207f, 0x207f,\r
-  0x2090, 0x2094,\r
-  0x2102, 0x2102,\r
-  0x2107, 0x2107,\r
-  0x210a, 0x2113,\r
-  0x2115, 0x2115,\r
-  0x2119, 0x211d,\r
-  0x2124, 0x2124,\r
-  0x2126, 0x2126,\r
-  0x2128, 0x2128,\r
-  0x212a, 0x212d,\r
-  0x212f, 0x2131,\r
-  0x2133, 0x2139,\r
-  0x213c, 0x213f,\r
-  0x2145, 0x2149,\r
-  0x2c00, 0x2c2e,\r
-  0x2c30, 0x2c5e,\r
-  0x2c80, 0x2ce4,\r
-  0x2d00, 0x2d25,\r
-  0x2d30, 0x2d65,\r
-  0x2d6f, 0x2d6f,\r
-  0x2d80, 0x2d96,\r
-  0x2da0, 0x2da6,\r
-  0x2da8, 0x2dae,\r
-  0x2db0, 0x2db6,\r
-  0x2db8, 0x2dbe,\r
-  0x2dc0, 0x2dc6,\r
-  0x2dc8, 0x2dce,\r
-  0x2dd0, 0x2dd6,\r
-  0x2dd8, 0x2dde,\r
-  0x3005, 0x3006,\r
-  0x3031, 0x3035,\r
-  0x303b, 0x303c,\r
-  0x3041, 0x3096,\r
-  0x309d, 0x309f,\r
-  0x30a1, 0x30fa,\r
-  0x30fc, 0x30ff,\r
-  0x3105, 0x312c,\r
-  0x3131, 0x318e,\r
-  0x31a0, 0x31b7,\r
-  0x31f0, 0x31ff,\r
-  0x3400, 0x4db5,\r
-  0x4e00, 0x9fbb,\r
-  0xa000, 0xa48c,\r
-  0xa800, 0xa801,\r
-  0xa803, 0xa805,\r
-  0xa807, 0xa80a,\r
-  0xa80c, 0xa822,\r
-  0xac00, 0xd7a3,\r
-  0xf900, 0xfa2d,\r
-  0xfa30, 0xfa6a,\r
-  0xfa70, 0xfad9,\r
-  0xfb00, 0xfb06,\r
-  0xfb13, 0xfb17,\r
-  0xfb1d, 0xfb1d,\r
-  0xfb1f, 0xfb28,\r
-  0xfb2a, 0xfb36,\r
-  0xfb38, 0xfb3c,\r
-  0xfb3e, 0xfb3e,\r
-  0xfb40, 0xfb41,\r
-  0xfb43, 0xfb44,\r
-  0xfb46, 0xfbb1,\r
-  0xfbd3, 0xfd3d,\r
-  0xfd50, 0xfd8f,\r
-  0xfd92, 0xfdc7,\r
-  0xfdf0, 0xfdfb,\r
-  0xfe70, 0xfe74,\r
-  0xfe76, 0xfefc,\r
-  0xff21, 0xff3a,\r
-  0xff41, 0xff5a,\r
-  0xff66, 0xffbe,\r
-  0xffc2, 0xffc7,\r
-  0xffca, 0xffcf,\r
-  0xffd2, 0xffd7,\r
-  0xffda, 0xffdc,\r
-  0x10000, 0x1000b,\r
-  0x1000d, 0x10026,\r
-  0x10028, 0x1003a,\r
-  0x1003c, 0x1003d,\r
-  0x1003f, 0x1004d,\r
-  0x10050, 0x1005d,\r
-  0x10080, 0x100fa,\r
-  0x10300, 0x1031e,\r
-  0x10330, 0x10349,\r
-  0x10380, 0x1039d,\r
-  0x103a0, 0x103c3,\r
-  0x103c8, 0x103cf,\r
-  0x10400, 0x1049d,\r
-  0x10800, 0x10805,\r
-  0x10808, 0x10808,\r
-  0x1080a, 0x10835,\r
-  0x10837, 0x10838,\r
-  0x1083c, 0x1083c,\r
-  0x1083f, 0x1083f,\r
-  0x10a00, 0x10a00,\r
-  0x10a10, 0x10a13,\r
-  0x10a15, 0x10a17,\r
-  0x10a19, 0x10a33,\r
-  0x1d400, 0x1d454,\r
-  0x1d456, 0x1d49c,\r
-  0x1d49e, 0x1d49f,\r
-  0x1d4a2, 0x1d4a2,\r
-  0x1d4a5, 0x1d4a6,\r
-  0x1d4a9, 0x1d4ac,\r
-  0x1d4ae, 0x1d4b9,\r
-  0x1d4bb, 0x1d4bb,\r
-  0x1d4bd, 0x1d4c3,\r
-  0x1d4c5, 0x1d505,\r
-  0x1d507, 0x1d50a,\r
-  0x1d50d, 0x1d514,\r
-  0x1d516, 0x1d51c,\r
-  0x1d51e, 0x1d539,\r
-  0x1d53b, 0x1d53e,\r
-  0x1d540, 0x1d544,\r
-  0x1d546, 0x1d546,\r
-  0x1d54a, 0x1d550,\r
-  0x1d552, 0x1d6a5,\r
-  0x1d6a8, 0x1d6c0,\r
-  0x1d6c2, 0x1d6da,\r
-  0x1d6dc, 0x1d6fa,\r
-  0x1d6fc, 0x1d714,\r
-  0x1d716, 0x1d734,\r
-  0x1d736, 0x1d74e,\r
-  0x1d750, 0x1d76e,\r
-  0x1d770, 0x1d788,\r
-  0x1d78a, 0x1d7a8,\r
-  0x1d7aa, 0x1d7c2,\r
-  0x1d7c4, 0x1d7c9,\r
-  0x20000, 0x2a6d6,\r
-  0x2f800, 0x2fa1d\r
-}; /* CR_L */\r
-\r
-/* 'Ll': General Category */\r
-static const OnigCodePoint CR_Ll[] = {\r
-  480,\r
-  0x0061, 0x007a,\r
-  0x00aa, 0x00aa,\r
-  0x00b5, 0x00b5,\r
-  0x00ba, 0x00ba,\r
-  0x00df, 0x00f6,\r
-  0x00f8, 0x00ff,\r
-  0x0101, 0x0101,\r
-  0x0103, 0x0103,\r
-  0x0105, 0x0105,\r
-  0x0107, 0x0107,\r
-  0x0109, 0x0109,\r
-  0x010b, 0x010b,\r
-  0x010d, 0x010d,\r
-  0x010f, 0x010f,\r
-  0x0111, 0x0111,\r
-  0x0113, 0x0113,\r
-  0x0115, 0x0115,\r
-  0x0117, 0x0117,\r
-  0x0119, 0x0119,\r
-  0x011b, 0x011b,\r
-  0x011d, 0x011d,\r
-  0x011f, 0x011f,\r
-  0x0121, 0x0121,\r
-  0x0123, 0x0123,\r
-  0x0125, 0x0125,\r
-  0x0127, 0x0127,\r
-  0x0129, 0x0129,\r
-  0x012b, 0x012b,\r
-  0x012d, 0x012d,\r
-  0x012f, 0x012f,\r
-  0x0131, 0x0131,\r
-  0x0133, 0x0133,\r
-  0x0135, 0x0135,\r
-  0x0137, 0x0138,\r
-  0x013a, 0x013a,\r
-  0x013c, 0x013c,\r
-  0x013e, 0x013e,\r
-  0x0140, 0x0140,\r
-  0x0142, 0x0142,\r
-  0x0144, 0x0144,\r
-  0x0146, 0x0146,\r
-  0x0148, 0x0149,\r
-  0x014b, 0x014b,\r
-  0x014d, 0x014d,\r
-  0x014f, 0x014f,\r
-  0x0151, 0x0151,\r
-  0x0153, 0x0153,\r
-  0x0155, 0x0155,\r
-  0x0157, 0x0157,\r
-  0x0159, 0x0159,\r
-  0x015b, 0x015b,\r
-  0x015d, 0x015d,\r
-  0x015f, 0x015f,\r
-  0x0161, 0x0161,\r
-  0x0163, 0x0163,\r
-  0x0165, 0x0165,\r
-  0x0167, 0x0167,\r
-  0x0169, 0x0169,\r
-  0x016b, 0x016b,\r
-  0x016d, 0x016d,\r
-  0x016f, 0x016f,\r
-  0x0171, 0x0171,\r
-  0x0173, 0x0173,\r
-  0x0175, 0x0175,\r
-  0x0177, 0x0177,\r
-  0x017a, 0x017a,\r
-  0x017c, 0x017c,\r
-  0x017e, 0x0180,\r
-  0x0183, 0x0183,\r
-  0x0185, 0x0185,\r
-  0x0188, 0x0188,\r
-  0x018c, 0x018d,\r
-  0x0192, 0x0192,\r
-  0x0195, 0x0195,\r
-  0x0199, 0x019b,\r
-  0x019e, 0x019e,\r
-  0x01a1, 0x01a1,\r
-  0x01a3, 0x01a3,\r
-  0x01a5, 0x01a5,\r
-  0x01a8, 0x01a8,\r
-  0x01aa, 0x01ab,\r
-  0x01ad, 0x01ad,\r
-  0x01b0, 0x01b0,\r
-  0x01b4, 0x01b4,\r
-  0x01b6, 0x01b6,\r
-  0x01b9, 0x01ba,\r
-  0x01bd, 0x01bf,\r
-  0x01c6, 0x01c6,\r
-  0x01c9, 0x01c9,\r
-  0x01cc, 0x01cc,\r
-  0x01ce, 0x01ce,\r
-  0x01d0, 0x01d0,\r
-  0x01d2, 0x01d2,\r
-  0x01d4, 0x01d4,\r
-  0x01d6, 0x01d6,\r
-  0x01d8, 0x01d8,\r
-  0x01da, 0x01da,\r
-  0x01dc, 0x01dd,\r
-  0x01df, 0x01df,\r
-  0x01e1, 0x01e1,\r
-  0x01e3, 0x01e3,\r
-  0x01e5, 0x01e5,\r
-  0x01e7, 0x01e7,\r
-  0x01e9, 0x01e9,\r
-  0x01eb, 0x01eb,\r
-  0x01ed, 0x01ed,\r
-  0x01ef, 0x01f0,\r
-  0x01f3, 0x01f3,\r
-  0x01f5, 0x01f5,\r
-  0x01f9, 0x01f9,\r
-  0x01fb, 0x01fb,\r
-  0x01fd, 0x01fd,\r
-  0x01ff, 0x01ff,\r
-  0x0201, 0x0201,\r
-  0x0203, 0x0203,\r
-  0x0205, 0x0205,\r
-  0x0207, 0x0207,\r
-  0x0209, 0x0209,\r
-  0x020b, 0x020b,\r
-  0x020d, 0x020d,\r
-  0x020f, 0x020f,\r
-  0x0211, 0x0211,\r
-  0x0213, 0x0213,\r
-  0x0215, 0x0215,\r
-  0x0217, 0x0217,\r
-  0x0219, 0x0219,\r
-  0x021b, 0x021b,\r
-  0x021d, 0x021d,\r
-  0x021f, 0x021f,\r
-  0x0221, 0x0221,\r
-  0x0223, 0x0223,\r
-  0x0225, 0x0225,\r
-  0x0227, 0x0227,\r
-  0x0229, 0x0229,\r
-  0x022b, 0x022b,\r
-  0x022d, 0x022d,\r
-  0x022f, 0x022f,\r
-  0x0231, 0x0231,\r
-  0x0233, 0x0239,\r
-  0x023c, 0x023c,\r
-  0x023f, 0x0240,\r
-  0x0250, 0x02af,\r
-  0x0390, 0x0390,\r
-  0x03ac, 0x03ce,\r
-  0x03d0, 0x03d1,\r
-  0x03d5, 0x03d7,\r
-  0x03d9, 0x03d9,\r
-  0x03db, 0x03db,\r
-  0x03dd, 0x03dd,\r
-  0x03df, 0x03df,\r
-  0x03e1, 0x03e1,\r
-  0x03e3, 0x03e3,\r
-  0x03e5, 0x03e5,\r
-  0x03e7, 0x03e7,\r
-  0x03e9, 0x03e9,\r
-  0x03eb, 0x03eb,\r
-  0x03ed, 0x03ed,\r
-  0x03ef, 0x03f3,\r
-  0x03f5, 0x03f5,\r
-  0x03f8, 0x03f8,\r
-  0x03fb, 0x03fc,\r
-  0x0430, 0x045f,\r
-  0x0461, 0x0461,\r
-  0x0463, 0x0463,\r
-  0x0465, 0x0465,\r
-  0x0467, 0x0467,\r
-  0x0469, 0x0469,\r
-  0x046b, 0x046b,\r
-  0x046d, 0x046d,\r
-  0x046f, 0x046f,\r
-  0x0471, 0x0471,\r
-  0x0473, 0x0473,\r
-  0x0475, 0x0475,\r
-  0x0477, 0x0477,\r
-  0x0479, 0x0479,\r
-  0x047b, 0x047b,\r
-  0x047d, 0x047d,\r
-  0x047f, 0x047f,\r
-  0x0481, 0x0481,\r
-  0x048b, 0x048b,\r
-  0x048d, 0x048d,\r
-  0x048f, 0x048f,\r
-  0x0491, 0x0491,\r
-  0x0493, 0x0493,\r
-  0x0495, 0x0495,\r
-  0x0497, 0x0497,\r
-  0x0499, 0x0499,\r
-  0x049b, 0x049b,\r
-  0x049d, 0x049d,\r
-  0x049f, 0x049f,\r
-  0x04a1, 0x04a1,\r
-  0x04a3, 0x04a3,\r
-  0x04a5, 0x04a5,\r
-  0x04a7, 0x04a7,\r
-  0x04a9, 0x04a9,\r
-  0x04ab, 0x04ab,\r
-  0x04ad, 0x04ad,\r
-  0x04af, 0x04af,\r
-  0x04b1, 0x04b1,\r
-  0x04b3, 0x04b3,\r
-  0x04b5, 0x04b5,\r
-  0x04b7, 0x04b7,\r
-  0x04b9, 0x04b9,\r
-  0x04bb, 0x04bb,\r
-  0x04bd, 0x04bd,\r
-  0x04bf, 0x04bf,\r
-  0x04c2, 0x04c2,\r
-  0x04c4, 0x04c4,\r
-  0x04c6, 0x04c6,\r
-  0x04c8, 0x04c8,\r
-  0x04ca, 0x04ca,\r
-  0x04cc, 0x04cc,\r
-  0x04ce, 0x04ce,\r
-  0x04d1, 0x04d1,\r
-  0x04d3, 0x04d3,\r
-  0x04d5, 0x04d5,\r
-  0x04d7, 0x04d7,\r
-  0x04d9, 0x04d9,\r
-  0x04db, 0x04db,\r
-  0x04dd, 0x04dd,\r
-  0x04df, 0x04df,\r
-  0x04e1, 0x04e1,\r
-  0x04e3, 0x04e3,\r
-  0x04e5, 0x04e5,\r
-  0x04e7, 0x04e7,\r
-  0x04e9, 0x04e9,\r
-  0x04eb, 0x04eb,\r
-  0x04ed, 0x04ed,\r
-  0x04ef, 0x04ef,\r
-  0x04f1, 0x04f1,\r
-  0x04f3, 0x04f3,\r
-  0x04f5, 0x04f5,\r
-  0x04f7, 0x04f7,\r
-  0x04f9, 0x04f9,\r
-  0x0501, 0x0501,\r
-  0x0503, 0x0503,\r
-  0x0505, 0x0505,\r
-  0x0507, 0x0507,\r
-  0x0509, 0x0509,\r
-  0x050b, 0x050b,\r
-  0x050d, 0x050d,\r
-  0x050f, 0x050f,\r
-  0x0561, 0x0587,\r
-  0x1d00, 0x1d2b,\r
-  0x1d62, 0x1d77,\r
-  0x1d79, 0x1d9a,\r
-  0x1e01, 0x1e01,\r
-  0x1e03, 0x1e03,\r
-  0x1e05, 0x1e05,\r
-  0x1e07, 0x1e07,\r
-  0x1e09, 0x1e09,\r
-  0x1e0b, 0x1e0b,\r
-  0x1e0d, 0x1e0d,\r
-  0x1e0f, 0x1e0f,\r
-  0x1e11, 0x1e11,\r
-  0x1e13, 0x1e13,\r
-  0x1e15, 0x1e15,\r
-  0x1e17, 0x1e17,\r
-  0x1e19, 0x1e19,\r
-  0x1e1b, 0x1e1b,\r
-  0x1e1d, 0x1e1d,\r
-  0x1e1f, 0x1e1f,\r
-  0x1e21, 0x1e21,\r
-  0x1e23, 0x1e23,\r
-  0x1e25, 0x1e25,\r
-  0x1e27, 0x1e27,\r
-  0x1e29, 0x1e29,\r
-  0x1e2b, 0x1e2b,\r
-  0x1e2d, 0x1e2d,\r
-  0x1e2f, 0x1e2f,\r
-  0x1e31, 0x1e31,\r
-  0x1e33, 0x1e33,\r
-  0x1e35, 0x1e35,\r
-  0x1e37, 0x1e37,\r
-  0x1e39, 0x1e39,\r
-  0x1e3b, 0x1e3b,\r
-  0x1e3d, 0x1e3d,\r
-  0x1e3f, 0x1e3f,\r
-  0x1e41, 0x1e41,\r
-  0x1e43, 0x1e43,\r
-  0x1e45, 0x1e45,\r
-  0x1e47, 0x1e47,\r
-  0x1e49, 0x1e49,\r
-  0x1e4b, 0x1e4b,\r
-  0x1e4d, 0x1e4d,\r
-  0x1e4f, 0x1e4f,\r
-  0x1e51, 0x1e51,\r
-  0x1e53, 0x1e53,\r
-  0x1e55, 0x1e55,\r
-  0x1e57, 0x1e57,\r
-  0x1e59, 0x1e59,\r
-  0x1e5b, 0x1e5b,\r
-  0x1e5d, 0x1e5d,\r
-  0x1e5f, 0x1e5f,\r
-  0x1e61, 0x1e61,\r
-  0x1e63, 0x1e63,\r
-  0x1e65, 0x1e65,\r
-  0x1e67, 0x1e67,\r
-  0x1e69, 0x1e69,\r
-  0x1e6b, 0x1e6b,\r
-  0x1e6d, 0x1e6d,\r
-  0x1e6f, 0x1e6f,\r
-  0x1e71, 0x1e71,\r
-  0x1e73, 0x1e73,\r
-  0x1e75, 0x1e75,\r
-  0x1e77, 0x1e77,\r
-  0x1e79, 0x1e79,\r
-  0x1e7b, 0x1e7b,\r
-  0x1e7d, 0x1e7d,\r
-  0x1e7f, 0x1e7f,\r
-  0x1e81, 0x1e81,\r
-  0x1e83, 0x1e83,\r
-  0x1e85, 0x1e85,\r
-  0x1e87, 0x1e87,\r
-  0x1e89, 0x1e89,\r
-  0x1e8b, 0x1e8b,\r
-  0x1e8d, 0x1e8d,\r
-  0x1e8f, 0x1e8f,\r
-  0x1e91, 0x1e91,\r
-  0x1e93, 0x1e93,\r
-  0x1e95, 0x1e9b,\r
-  0x1ea1, 0x1ea1,\r
-  0x1ea3, 0x1ea3,\r
-  0x1ea5, 0x1ea5,\r
-  0x1ea7, 0x1ea7,\r
-  0x1ea9, 0x1ea9,\r
-  0x1eab, 0x1eab,\r
-  0x1ead, 0x1ead,\r
-  0x1eaf, 0x1eaf,\r
-  0x1eb1, 0x1eb1,\r
-  0x1eb3, 0x1eb3,\r
-  0x1eb5, 0x1eb5,\r
-  0x1eb7, 0x1eb7,\r
-  0x1eb9, 0x1eb9,\r
-  0x1ebb, 0x1ebb,\r
-  0x1ebd, 0x1ebd,\r
-  0x1ebf, 0x1ebf,\r
-  0x1ec1, 0x1ec1,\r
-  0x1ec3, 0x1ec3,\r
-  0x1ec5, 0x1ec5,\r
-  0x1ec7, 0x1ec7,\r
-  0x1ec9, 0x1ec9,\r
-  0x1ecb, 0x1ecb,\r
-  0x1ecd, 0x1ecd,\r
-  0x1ecf, 0x1ecf,\r
-  0x1ed1, 0x1ed1,\r
-  0x1ed3, 0x1ed3,\r
-  0x1ed5, 0x1ed5,\r
-  0x1ed7, 0x1ed7,\r
-  0x1ed9, 0x1ed9,\r
-  0x1edb, 0x1edb,\r
-  0x1edd, 0x1edd,\r
-  0x1edf, 0x1edf,\r
-  0x1ee1, 0x1ee1,\r
-  0x1ee3, 0x1ee3,\r
-  0x1ee5, 0x1ee5,\r
-  0x1ee7, 0x1ee7,\r
-  0x1ee9, 0x1ee9,\r
-  0x1eeb, 0x1eeb,\r
-  0x1eed, 0x1eed,\r
-  0x1eef, 0x1eef,\r
-  0x1ef1, 0x1ef1,\r
-  0x1ef3, 0x1ef3,\r
-  0x1ef5, 0x1ef5,\r
-  0x1ef7, 0x1ef7,\r
-  0x1ef9, 0x1ef9,\r
-  0x1f00, 0x1f07,\r
-  0x1f10, 0x1f15,\r
-  0x1f20, 0x1f27,\r
-  0x1f30, 0x1f37,\r
-  0x1f40, 0x1f45,\r
-  0x1f50, 0x1f57,\r
-  0x1f60, 0x1f67,\r
-  0x1f70, 0x1f7d,\r
-  0x1f80, 0x1f87,\r
-  0x1f90, 0x1f97,\r
-  0x1fa0, 0x1fa7,\r
-  0x1fb0, 0x1fb4,\r
-  0x1fb6, 0x1fb7,\r
-  0x1fbe, 0x1fbe,\r
-  0x1fc2, 0x1fc4,\r
-  0x1fc6, 0x1fc7,\r
-  0x1fd0, 0x1fd3,\r
-  0x1fd6, 0x1fd7,\r
-  0x1fe0, 0x1fe7,\r
-  0x1ff2, 0x1ff4,\r
-  0x1ff6, 0x1ff7,\r
-  0x2071, 0x2071,\r
-  0x207f, 0x207f,\r
-  0x210a, 0x210a,\r
-  0x210e, 0x210f,\r
-  0x2113, 0x2113,\r
-  0x212f, 0x212f,\r
-  0x2134, 0x2134,\r
-  0x2139, 0x2139,\r
-  0x213c, 0x213d,\r
-  0x2146, 0x2149,\r
-  0x2c30, 0x2c5e,\r
-  0x2c81, 0x2c81,\r
-  0x2c83, 0x2c83,\r
-  0x2c85, 0x2c85,\r
-  0x2c87, 0x2c87,\r
-  0x2c89, 0x2c89,\r
-  0x2c8b, 0x2c8b,\r
-  0x2c8d, 0x2c8d,\r
-  0x2c8f, 0x2c8f,\r
-  0x2c91, 0x2c91,\r
-  0x2c93, 0x2c93,\r
-  0x2c95, 0x2c95,\r
-  0x2c97, 0x2c97,\r
-  0x2c99, 0x2c99,\r
-  0x2c9b, 0x2c9b,\r
-  0x2c9d, 0x2c9d,\r
-  0x2c9f, 0x2c9f,\r
-  0x2ca1, 0x2ca1,\r
-  0x2ca3, 0x2ca3,\r
-  0x2ca5, 0x2ca5,\r
-  0x2ca7, 0x2ca7,\r
-  0x2ca9, 0x2ca9,\r
-  0x2cab, 0x2cab,\r
-  0x2cad, 0x2cad,\r
-  0x2caf, 0x2caf,\r
-  0x2cb1, 0x2cb1,\r
-  0x2cb3, 0x2cb3,\r
-  0x2cb5, 0x2cb5,\r
-  0x2cb7, 0x2cb7,\r
-  0x2cb9, 0x2cb9,\r
-  0x2cbb, 0x2cbb,\r
-  0x2cbd, 0x2cbd,\r
-  0x2cbf, 0x2cbf,\r
-  0x2cc1, 0x2cc1,\r
-  0x2cc3, 0x2cc3,\r
-  0x2cc5, 0x2cc5,\r
-  0x2cc7, 0x2cc7,\r
-  0x2cc9, 0x2cc9,\r
-  0x2ccb, 0x2ccb,\r
-  0x2ccd, 0x2ccd,\r
-  0x2ccf, 0x2ccf,\r
-  0x2cd1, 0x2cd1,\r
-  0x2cd3, 0x2cd3,\r
-  0x2cd5, 0x2cd5,\r
-  0x2cd7, 0x2cd7,\r
-  0x2cd9, 0x2cd9,\r
-  0x2cdb, 0x2cdb,\r
-  0x2cdd, 0x2cdd,\r
-  0x2cdf, 0x2cdf,\r
-  0x2ce1, 0x2ce1,\r
-  0x2ce3, 0x2ce4,\r
-  0x2d00, 0x2d25,\r
-  0xfb00, 0xfb06,\r
-  0xfb13, 0xfb17,\r
-  0xff41, 0xff5a,\r
-  0x10428, 0x1044f,\r
-  0x1d41a, 0x1d433,\r
-  0x1d44e, 0x1d454,\r
-  0x1d456, 0x1d467,\r
-  0x1d482, 0x1d49b,\r
-  0x1d4b6, 0x1d4b9,\r
-  0x1d4bb, 0x1d4bb,\r
-  0x1d4bd, 0x1d4c3,\r
-  0x1d4c5, 0x1d4cf,\r
-  0x1d4ea, 0x1d503,\r
-  0x1d51e, 0x1d537,\r
-  0x1d552, 0x1d56b,\r
-  0x1d586, 0x1d59f,\r
-  0x1d5ba, 0x1d5d3,\r
-  0x1d5ee, 0x1d607,\r
-  0x1d622, 0x1d63b,\r
-  0x1d656, 0x1d66f,\r
-  0x1d68a, 0x1d6a5,\r
-  0x1d6c2, 0x1d6da,\r
-  0x1d6dc, 0x1d6e1,\r
-  0x1d6fc, 0x1d714,\r
-  0x1d716, 0x1d71b,\r
-  0x1d736, 0x1d74e,\r
-  0x1d750, 0x1d755,\r
-  0x1d770, 0x1d788,\r
-  0x1d78a, 0x1d78f,\r
-  0x1d7aa, 0x1d7c2,\r
-  0x1d7c4, 0x1d7c9\r
-}; /* CR_Ll */\r
-\r
-/* 'Lm': General Category */\r
-static const OnigCodePoint CR_Lm[] = {\r
-  26,\r
-  0x02b0, 0x02c1,\r
-  0x02c6, 0x02d1,\r
-  0x02e0, 0x02e4,\r
-  0x02ee, 0x02ee,\r
-  0x037a, 0x037a,\r
-  0x0559, 0x0559,\r
-  0x0640, 0x0640,\r
-  0x06e5, 0x06e6,\r
-  0x0e46, 0x0e46,\r
-  0x0ec6, 0x0ec6,\r
-  0x10fc, 0x10fc,\r
-  0x17d7, 0x17d7,\r
-  0x1843, 0x1843,\r
-  0x1d2c, 0x1d61,\r
-  0x1d78, 0x1d78,\r
-  0x1d9b, 0x1dbf,\r
-  0x2090, 0x2094,\r
-  0x2d6f, 0x2d6f,\r
-  0x3005, 0x3005,\r
-  0x3031, 0x3035,\r
-  0x303b, 0x303b,\r
-  0x309d, 0x309e,\r
-  0x30fc, 0x30fe,\r
-  0xa015, 0xa015,\r
-  0xff70, 0xff70,\r
-  0xff9e, 0xff9f\r
-}; /* CR_Lm */\r
-\r
-/* 'Lo': General Category */\r
-static const OnigCodePoint CR_Lo[] = {\r
-  245,\r
-  0x01bb, 0x01bb,\r
-  0x01c0, 0x01c3,\r
-  0x05d0, 0x05ea,\r
-  0x05f0, 0x05f2,\r
-  0x0621, 0x063a,\r
-  0x0641, 0x064a,\r
-  0x066e, 0x066f,\r
-  0x0671, 0x06d3,\r
-  0x06d5, 0x06d5,\r
-  0x06ee, 0x06ef,\r
-  0x06fa, 0x06fc,\r
-  0x06ff, 0x06ff,\r
-  0x0710, 0x0710,\r
-  0x0712, 0x072f,\r
-  0x074d, 0x076d,\r
-  0x0780, 0x07a5,\r
-  0x07b1, 0x07b1,\r
-  0x0904, 0x0939,\r
-  0x093d, 0x093d,\r
-  0x0950, 0x0950,\r
-  0x0958, 0x0961,\r
-  0x097d, 0x097d,\r
-  0x0985, 0x098c,\r
-  0x098f, 0x0990,\r
-  0x0993, 0x09a8,\r
-  0x09aa, 0x09b0,\r
-  0x09b2, 0x09b2,\r
-  0x09b6, 0x09b9,\r
-  0x09bd, 0x09bd,\r
-  0x09ce, 0x09ce,\r
-  0x09dc, 0x09dd,\r
-  0x09df, 0x09e1,\r
-  0x09f0, 0x09f1,\r
-  0x0a05, 0x0a0a,\r
-  0x0a0f, 0x0a10,\r
-  0x0a13, 0x0a28,\r
-  0x0a2a, 0x0a30,\r
-  0x0a32, 0x0a33,\r
-  0x0a35, 0x0a36,\r
-  0x0a38, 0x0a39,\r
-  0x0a59, 0x0a5c,\r
-  0x0a5e, 0x0a5e,\r
-  0x0a72, 0x0a74,\r
-  0x0a85, 0x0a8d,\r
-  0x0a8f, 0x0a91,\r
-  0x0a93, 0x0aa8,\r
-  0x0aaa, 0x0ab0,\r
-  0x0ab2, 0x0ab3,\r
-  0x0ab5, 0x0ab9,\r
-  0x0abd, 0x0abd,\r
-  0x0ad0, 0x0ad0,\r
-  0x0ae0, 0x0ae1,\r
-  0x0b05, 0x0b0c,\r
-  0x0b0f, 0x0b10,\r
-  0x0b13, 0x0b28,\r
-  0x0b2a, 0x0b30,\r
-  0x0b32, 0x0b33,\r
-  0x0b35, 0x0b39,\r
-  0x0b3d, 0x0b3d,\r
-  0x0b5c, 0x0b5d,\r
-  0x0b5f, 0x0b61,\r
-  0x0b71, 0x0b71,\r
-  0x0b83, 0x0b83,\r
-  0x0b85, 0x0b8a,\r
-  0x0b8e, 0x0b90,\r
-  0x0b92, 0x0b95,\r
-  0x0b99, 0x0b9a,\r
-  0x0b9c, 0x0b9c,\r
-  0x0b9e, 0x0b9f,\r
-  0x0ba3, 0x0ba4,\r
-  0x0ba8, 0x0baa,\r
-  0x0bae, 0x0bb9,\r
-  0x0c05, 0x0c0c,\r
-  0x0c0e, 0x0c10,\r
-  0x0c12, 0x0c28,\r
-  0x0c2a, 0x0c33,\r
-  0x0c35, 0x0c39,\r
-  0x0c60, 0x0c61,\r
-  0x0c85, 0x0c8c,\r
-  0x0c8e, 0x0c90,\r
-  0x0c92, 0x0ca8,\r
-  0x0caa, 0x0cb3,\r
-  0x0cb5, 0x0cb9,\r
-  0x0cbd, 0x0cbd,\r
-  0x0cde, 0x0cde,\r
-  0x0ce0, 0x0ce1,\r
-  0x0d05, 0x0d0c,\r
-  0x0d0e, 0x0d10,\r
-  0x0d12, 0x0d28,\r
-  0x0d2a, 0x0d39,\r
-  0x0d60, 0x0d61,\r
-  0x0d85, 0x0d96,\r
-  0x0d9a, 0x0db1,\r
-  0x0db3, 0x0dbb,\r
-  0x0dbd, 0x0dbd,\r
-  0x0dc0, 0x0dc6,\r
-  0x0e01, 0x0e30,\r
-  0x0e32, 0x0e33,\r
-  0x0e40, 0x0e45,\r
-  0x0e81, 0x0e82,\r
-  0x0e84, 0x0e84,\r
-  0x0e87, 0x0e88,\r
-  0x0e8a, 0x0e8a,\r
-  0x0e8d, 0x0e8d,\r
-  0x0e94, 0x0e97,\r
-  0x0e99, 0x0e9f,\r
-  0x0ea1, 0x0ea3,\r
-  0x0ea5, 0x0ea5,\r
-  0x0ea7, 0x0ea7,\r
-  0x0eaa, 0x0eab,\r
-  0x0ead, 0x0eb0,\r
-  0x0eb2, 0x0eb3,\r
-  0x0ebd, 0x0ebd,\r
-  0x0ec0, 0x0ec4,\r
-  0x0edc, 0x0edd,\r
-  0x0f00, 0x0f00,\r
-  0x0f40, 0x0f47,\r
-  0x0f49, 0x0f6a,\r
-  0x0f88, 0x0f8b,\r
-  0x1000, 0x1021,\r
-  0x1023, 0x1027,\r
-  0x1029, 0x102a,\r
-  0x1050, 0x1055,\r
-  0x10d0, 0x10fa,\r
-  0x1100, 0x1159,\r
-  0x115f, 0x11a2,\r
-  0x11a8, 0x11f9,\r
-  0x1200, 0x1248,\r
-  0x124a, 0x124d,\r
-  0x1250, 0x1256,\r
-  0x1258, 0x1258,\r
-  0x125a, 0x125d,\r
-  0x1260, 0x1288,\r
-  0x128a, 0x128d,\r
-  0x1290, 0x12b0,\r
-  0x12b2, 0x12b5,\r
-  0x12b8, 0x12be,\r
-  0x12c0, 0x12c0,\r
-  0x12c2, 0x12c5,\r
-  0x12c8, 0x12d6,\r
-  0x12d8, 0x1310,\r
-  0x1312, 0x1315,\r
-  0x1318, 0x135a,\r
-  0x1380, 0x138f,\r
-  0x13a0, 0x13f4,\r
-  0x1401, 0x166c,\r
-  0x166f, 0x1676,\r
-  0x1681, 0x169a,\r
-  0x16a0, 0x16ea,\r
-  0x1700, 0x170c,\r
-  0x170e, 0x1711,\r
-  0x1720, 0x1731,\r
-  0x1740, 0x1751,\r
-  0x1760, 0x176c,\r
-  0x176e, 0x1770,\r
-  0x1780, 0x17b3,\r
-  0x17dc, 0x17dc,\r
-  0x1820, 0x1842,\r
-  0x1844, 0x1877,\r
-  0x1880, 0x18a8,\r
-  0x1900, 0x191c,\r
-  0x1950, 0x196d,\r
-  0x1970, 0x1974,\r
-  0x1980, 0x19a9,\r
-  0x19c1, 0x19c7,\r
-  0x1a00, 0x1a16,\r
-  0x2135, 0x2138,\r
-  0x2d30, 0x2d65,\r
-  0x2d80, 0x2d96,\r
-  0x2da0, 0x2da6,\r
-  0x2da8, 0x2dae,\r
-  0x2db0, 0x2db6,\r
-  0x2db8, 0x2dbe,\r
-  0x2dc0, 0x2dc6,\r
-  0x2dc8, 0x2dce,\r
-  0x2dd0, 0x2dd6,\r
-  0x2dd8, 0x2dde,\r
-  0x3006, 0x3006,\r
-  0x303c, 0x303c,\r
-  0x3041, 0x3096,\r
-  0x309f, 0x309f,\r
-  0x30a1, 0x30fa,\r
-  0x30ff, 0x30ff,\r
-  0x3105, 0x312c,\r
-  0x3131, 0x318e,\r
-  0x31a0, 0x31b7,\r
-  0x31f0, 0x31ff,\r
-  0x3400, 0x4db5,\r
-  0x4e00, 0x9fbb,\r
-  0xa000, 0xa014,\r
-  0xa016, 0xa48c,\r
-  0xa800, 0xa801,\r
-  0xa803, 0xa805,\r
-  0xa807, 0xa80a,\r
-  0xa80c, 0xa822,\r
-  0xac00, 0xd7a3,\r
-  0xf900, 0xfa2d,\r
-  0xfa30, 0xfa6a,\r
-  0xfa70, 0xfad9,\r
-  0xfb1d, 0xfb1d,\r
-  0xfb1f, 0xfb28,\r
-  0xfb2a, 0xfb36,\r
-  0xfb38, 0xfb3c,\r
-  0xfb3e, 0xfb3e,\r
-  0xfb40, 0xfb41,\r
-  0xfb43, 0xfb44,\r
-  0xfb46, 0xfbb1,\r
-  0xfbd3, 0xfd3d,\r
-  0xfd50, 0xfd8f,\r
-  0xfd92, 0xfdc7,\r
-  0xfdf0, 0xfdfb,\r
-  0xfe70, 0xfe74,\r
-  0xfe76, 0xfefc,\r
-  0xff66, 0xff6f,\r
-  0xff71, 0xff9d,\r
-  0xffa0, 0xffbe,\r
-  0xffc2, 0xffc7,\r
-  0xffca, 0xffcf,\r
-  0xffd2, 0xffd7,\r
-  0xffda, 0xffdc,\r
-  0x10000, 0x1000b,\r
-  0x1000d, 0x10026,\r
-  0x10028, 0x1003a,\r
-  0x1003c, 0x1003d,\r
-  0x1003f, 0x1004d,\r
-  0x10050, 0x1005d,\r
-  0x10080, 0x100fa,\r
-  0x10300, 0x1031e,\r
-  0x10330, 0x10349,\r
-  0x10380, 0x1039d,\r
-  0x103a0, 0x103c3,\r
-  0x103c8, 0x103cf,\r
-  0x10450, 0x1049d,\r
-  0x10800, 0x10805,\r
-  0x10808, 0x10808,\r
-  0x1080a, 0x10835,\r
-  0x10837, 0x10838,\r
-  0x1083c, 0x1083c,\r
-  0x1083f, 0x1083f,\r
-  0x10a00, 0x10a00,\r
-  0x10a10, 0x10a13,\r
-  0x10a15, 0x10a17,\r
-  0x10a19, 0x10a33,\r
-  0x20000, 0x2a6d6,\r
-  0x2f800, 0x2fa1d\r
-}; /* CR_Lo */\r
-\r
-/* 'Lt': General Category */\r
-static const OnigCodePoint CR_Lt[] = {\r
-  10,\r
-  0x01c5, 0x01c5,\r
-  0x01c8, 0x01c8,\r
-  0x01cb, 0x01cb,\r
-  0x01f2, 0x01f2,\r
-  0x1f88, 0x1f8f,\r
-  0x1f98, 0x1f9f,\r
-  0x1fa8, 0x1faf,\r
-  0x1fbc, 0x1fbc,\r
-  0x1fcc, 0x1fcc,\r
-  0x1ffc, 0x1ffc\r
-}; /* CR_Lt */\r
-\r
-/* 'Lu': General Category */\r
-static const OnigCodePoint CR_Lu[] = {\r
-  476,\r
-  0x0041, 0x005a,\r
-  0x00c0, 0x00d6,\r
-  0x00d8, 0x00de,\r
-  0x0100, 0x0100,\r
-  0x0102, 0x0102,\r
-  0x0104, 0x0104,\r
-  0x0106, 0x0106,\r
-  0x0108, 0x0108,\r
-  0x010a, 0x010a,\r
-  0x010c, 0x010c,\r
-  0x010e, 0x010e,\r
-  0x0110, 0x0110,\r
-  0x0112, 0x0112,\r
-  0x0114, 0x0114,\r
-  0x0116, 0x0116,\r
-  0x0118, 0x0118,\r
-  0x011a, 0x011a,\r
-  0x011c, 0x011c,\r
-  0x011e, 0x011e,\r
-  0x0120, 0x0120,\r
-  0x0122, 0x0122,\r
-  0x0124, 0x0124,\r
-  0x0126, 0x0126,\r
-  0x0128, 0x0128,\r
-  0x012a, 0x012a,\r
-  0x012c, 0x012c,\r
-  0x012e, 0x012e,\r
-  0x0130, 0x0130,\r
-  0x0132, 0x0132,\r
-  0x0134, 0x0134,\r
-  0x0136, 0x0136,\r
-  0x0139, 0x0139,\r
-  0x013b, 0x013b,\r
-  0x013d, 0x013d,\r
-  0x013f, 0x013f,\r
-  0x0141, 0x0141,\r
-  0x0143, 0x0143,\r
-  0x0145, 0x0145,\r
-  0x0147, 0x0147,\r
-  0x014a, 0x014a,\r
-  0x014c, 0x014c,\r
-  0x014e, 0x014e,\r
-  0x0150, 0x0150,\r
-  0x0152, 0x0152,\r
-  0x0154, 0x0154,\r
-  0x0156, 0x0156,\r
-  0x0158, 0x0158,\r
-  0x015a, 0x015a,\r
-  0x015c, 0x015c,\r
-  0x015e, 0x015e,\r
-  0x0160, 0x0160,\r
-  0x0162, 0x0162,\r
-  0x0164, 0x0164,\r
-  0x0166, 0x0166,\r
-  0x0168, 0x0168,\r
-  0x016a, 0x016a,\r
-  0x016c, 0x016c,\r
-  0x016e, 0x016e,\r
-  0x0170, 0x0170,\r
-  0x0172, 0x0172,\r
-  0x0174, 0x0174,\r
-  0x0176, 0x0176,\r
-  0x0178, 0x0179,\r
-  0x017b, 0x017b,\r
-  0x017d, 0x017d,\r
-  0x0181, 0x0182,\r
-  0x0184, 0x0184,\r
-  0x0186, 0x0187,\r
-  0x0189, 0x018b,\r
-  0x018e, 0x0191,\r
-  0x0193, 0x0194,\r
-  0x0196, 0x0198,\r
-  0x019c, 0x019d,\r
-  0x019f, 0x01a0,\r
-  0x01a2, 0x01a2,\r
-  0x01a4, 0x01a4,\r
-  0x01a6, 0x01a7,\r
-  0x01a9, 0x01a9,\r
-  0x01ac, 0x01ac,\r
-  0x01ae, 0x01af,\r
-  0x01b1, 0x01b3,\r
-  0x01b5, 0x01b5,\r
-  0x01b7, 0x01b8,\r
-  0x01bc, 0x01bc,\r
-  0x01c4, 0x01c4,\r
-  0x01c7, 0x01c7,\r
-  0x01ca, 0x01ca,\r
-  0x01cd, 0x01cd,\r
-  0x01cf, 0x01cf,\r
-  0x01d1, 0x01d1,\r
-  0x01d3, 0x01d3,\r
-  0x01d5, 0x01d5,\r
-  0x01d7, 0x01d7,\r
-  0x01d9, 0x01d9,\r
-  0x01db, 0x01db,\r
-  0x01de, 0x01de,\r
-  0x01e0, 0x01e0,\r
-  0x01e2, 0x01e2,\r
-  0x01e4, 0x01e4,\r
-  0x01e6, 0x01e6,\r
-  0x01e8, 0x01e8,\r
-  0x01ea, 0x01ea,\r
-  0x01ec, 0x01ec,\r
-  0x01ee, 0x01ee,\r
-  0x01f1, 0x01f1,\r
-  0x01f4, 0x01f4,\r
-  0x01f6, 0x01f8,\r
-  0x01fa, 0x01fa,\r
-  0x01fc, 0x01fc,\r
-  0x01fe, 0x01fe,\r
-  0x0200, 0x0200,\r
-  0x0202, 0x0202,\r
-  0x0204, 0x0204,\r
-  0x0206, 0x0206,\r
-  0x0208, 0x0208,\r
-  0x020a, 0x020a,\r
-  0x020c, 0x020c,\r
-  0x020e, 0x020e,\r
-  0x0210, 0x0210,\r
-  0x0212, 0x0212,\r
-  0x0214, 0x0214,\r
-  0x0216, 0x0216,\r
-  0x0218, 0x0218,\r
-  0x021a, 0x021a,\r
-  0x021c, 0x021c,\r
-  0x021e, 0x021e,\r
-  0x0220, 0x0220,\r
-  0x0222, 0x0222,\r
-  0x0224, 0x0224,\r
-  0x0226, 0x0226,\r
-  0x0228, 0x0228,\r
-  0x022a, 0x022a,\r
-  0x022c, 0x022c,\r
-  0x022e, 0x022e,\r
-  0x0230, 0x0230,\r
-  0x0232, 0x0232,\r
-  0x023a, 0x023b,\r
-  0x023d, 0x023e,\r
-  0x0241, 0x0241,\r
-  0x0386, 0x0386,\r
-  0x0388, 0x038a,\r
-  0x038c, 0x038c,\r
-  0x038e, 0x038f,\r
-  0x0391, 0x03a1,\r
-  0x03a3, 0x03ab,\r
-  0x03d2, 0x03d4,\r
-  0x03d8, 0x03d8,\r
-  0x03da, 0x03da,\r
-  0x03dc, 0x03dc,\r
-  0x03de, 0x03de,\r
-  0x03e0, 0x03e0,\r
-  0x03e2, 0x03e2,\r
-  0x03e4, 0x03e4,\r
-  0x03e6, 0x03e6,\r
-  0x03e8, 0x03e8,\r
-  0x03ea, 0x03ea,\r
-  0x03ec, 0x03ec,\r
-  0x03ee, 0x03ee,\r
-  0x03f4, 0x03f4,\r
-  0x03f7, 0x03f7,\r
-  0x03f9, 0x03fa,\r
-  0x03fd, 0x042f,\r
-  0x0460, 0x0460,\r
-  0x0462, 0x0462,\r
-  0x0464, 0x0464,\r
-  0x0466, 0x0466,\r
-  0x0468, 0x0468,\r
-  0x046a, 0x046a,\r
-  0x046c, 0x046c,\r
-  0x046e, 0x046e,\r
-  0x0470, 0x0470,\r
-  0x0472, 0x0472,\r
-  0x0474, 0x0474,\r
-  0x0476, 0x0476,\r
-  0x0478, 0x0478,\r
-  0x047a, 0x047a,\r
-  0x047c, 0x047c,\r
-  0x047e, 0x047e,\r
-  0x0480, 0x0480,\r
-  0x048a, 0x048a,\r
-  0x048c, 0x048c,\r
-  0x048e, 0x048e,\r
-  0x0490, 0x0490,\r
-  0x0492, 0x0492,\r
-  0x0494, 0x0494,\r
-  0x0496, 0x0496,\r
-  0x0498, 0x0498,\r
-  0x049a, 0x049a,\r
-  0x049c, 0x049c,\r
-  0x049e, 0x049e,\r
-  0x04a0, 0x04a0,\r
-  0x04a2, 0x04a2,\r
-  0x04a4, 0x04a4,\r
-  0x04a6, 0x04a6,\r
-  0x04a8, 0x04a8,\r
-  0x04aa, 0x04aa,\r
-  0x04ac, 0x04ac,\r
-  0x04ae, 0x04ae,\r
-  0x04b0, 0x04b0,\r
-  0x04b2, 0x04b2,\r
-  0x04b4, 0x04b4,\r
-  0x04b6, 0x04b6,\r
-  0x04b8, 0x04b8,\r
-  0x04ba, 0x04ba,\r
-  0x04bc, 0x04bc,\r
-  0x04be, 0x04be,\r
-  0x04c0, 0x04c1,\r
-  0x04c3, 0x04c3,\r
-  0x04c5, 0x04c5,\r
-  0x04c7, 0x04c7,\r
-  0x04c9, 0x04c9,\r
-  0x04cb, 0x04cb,\r
-  0x04cd, 0x04cd,\r
-  0x04d0, 0x04d0,\r
-  0x04d2, 0x04d2,\r
-  0x04d4, 0x04d4,\r
-  0x04d6, 0x04d6,\r
-  0x04d8, 0x04d8,\r
-  0x04da, 0x04da,\r
-  0x04dc, 0x04dc,\r
-  0x04de, 0x04de,\r
-  0x04e0, 0x04e0,\r
-  0x04e2, 0x04e2,\r
-  0x04e4, 0x04e4,\r
-  0x04e6, 0x04e6,\r
-  0x04e8, 0x04e8,\r
-  0x04ea, 0x04ea,\r
-  0x04ec, 0x04ec,\r
-  0x04ee, 0x04ee,\r
-  0x04f0, 0x04f0,\r
-  0x04f2, 0x04f2,\r
-  0x04f4, 0x04f4,\r
-  0x04f6, 0x04f6,\r
-  0x04f8, 0x04f8,\r
-  0x0500, 0x0500,\r
-  0x0502, 0x0502,\r
-  0x0504, 0x0504,\r
-  0x0506, 0x0506,\r
-  0x0508, 0x0508,\r
-  0x050a, 0x050a,\r
-  0x050c, 0x050c,\r
-  0x050e, 0x050e,\r
-  0x0531, 0x0556,\r
-  0x10a0, 0x10c5,\r
-  0x1e00, 0x1e00,\r
-  0x1e02, 0x1e02,\r
-  0x1e04, 0x1e04,\r
-  0x1e06, 0x1e06,\r
-  0x1e08, 0x1e08,\r
-  0x1e0a, 0x1e0a,\r
-  0x1e0c, 0x1e0c,\r
-  0x1e0e, 0x1e0e,\r
-  0x1e10, 0x1e10,\r
-  0x1e12, 0x1e12,\r
-  0x1e14, 0x1e14,\r
-  0x1e16, 0x1e16,\r
-  0x1e18, 0x1e18,\r
-  0x1e1a, 0x1e1a,\r
-  0x1e1c, 0x1e1c,\r
-  0x1e1e, 0x1e1e,\r
-  0x1e20, 0x1e20,\r
-  0x1e22, 0x1e22,\r
-  0x1e24, 0x1e24,\r
-  0x1e26, 0x1e26,\r
-  0x1e28, 0x1e28,\r
-  0x1e2a, 0x1e2a,\r
-  0x1e2c, 0x1e2c,\r
-  0x1e2e, 0x1e2e,\r
-  0x1e30, 0x1e30,\r
-  0x1e32, 0x1e32,\r
-  0x1e34, 0x1e34,\r
-  0x1e36, 0x1e36,\r
-  0x1e38, 0x1e38,\r
-  0x1e3a, 0x1e3a,\r
-  0x1e3c, 0x1e3c,\r
-  0x1e3e, 0x1e3e,\r
-  0x1e40, 0x1e40,\r
-  0x1e42, 0x1e42,\r
-  0x1e44, 0x1e44,\r
-  0x1e46, 0x1e46,\r
-  0x1e48, 0x1e48,\r
-  0x1e4a, 0x1e4a,\r
-  0x1e4c, 0x1e4c,\r
-  0x1e4e, 0x1e4e,\r
-  0x1e50, 0x1e50,\r
-  0x1e52, 0x1e52,\r
-  0x1e54, 0x1e54,\r
-  0x1e56, 0x1e56,\r
-  0x1e58, 0x1e58,\r
-  0x1e5a, 0x1e5a,\r
-  0x1e5c, 0x1e5c,\r
-  0x1e5e, 0x1e5e,\r
-  0x1e60, 0x1e60,\r
-  0x1e62, 0x1e62,\r
-  0x1e64, 0x1e64,\r
-  0x1e66, 0x1e66,\r
-  0x1e68, 0x1e68,\r
-  0x1e6a, 0x1e6a,\r
-  0x1e6c, 0x1e6c,\r
-  0x1e6e, 0x1e6e,\r
-  0x1e70, 0x1e70,\r
-  0x1e72, 0x1e72,\r
-  0x1e74, 0x1e74,\r
-  0x1e76, 0x1e76,\r
-  0x1e78, 0x1e78,\r
-  0x1e7a, 0x1e7a,\r
-  0x1e7c, 0x1e7c,\r
-  0x1e7e, 0x1e7e,\r
-  0x1e80, 0x1e80,\r
-  0x1e82, 0x1e82,\r
-  0x1e84, 0x1e84,\r
-  0x1e86, 0x1e86,\r
-  0x1e88, 0x1e88,\r
-  0x1e8a, 0x1e8a,\r
-  0x1e8c, 0x1e8c,\r
-  0x1e8e, 0x1e8e,\r
-  0x1e90, 0x1e90,\r
-  0x1e92, 0x1e92,\r
-  0x1e94, 0x1e94,\r
-  0x1ea0, 0x1ea0,\r
-  0x1ea2, 0x1ea2,\r
-  0x1ea4, 0x1ea4,\r
-  0x1ea6, 0x1ea6,\r
-  0x1ea8, 0x1ea8,\r
-  0x1eaa, 0x1eaa,\r
-  0x1eac, 0x1eac,\r
-  0x1eae, 0x1eae,\r
-  0x1eb0, 0x1eb0,\r
-  0x1eb2, 0x1eb2,\r
-  0x1eb4, 0x1eb4,\r
-  0x1eb6, 0x1eb6,\r
-  0x1eb8, 0x1eb8,\r
-  0x1eba, 0x1eba,\r
-  0x1ebc, 0x1ebc,\r
-  0x1ebe, 0x1ebe,\r
-  0x1ec0, 0x1ec0,\r
-  0x1ec2, 0x1ec2,\r
-  0x1ec4, 0x1ec4,\r
-  0x1ec6, 0x1ec6,\r
-  0x1ec8, 0x1ec8,\r
-  0x1eca, 0x1eca,\r
-  0x1ecc, 0x1ecc,\r
-  0x1ece, 0x1ece,\r
-  0x1ed0, 0x1ed0,\r
-  0x1ed2, 0x1ed2,\r
-  0x1ed4, 0x1ed4,\r
-  0x1ed6, 0x1ed6,\r
-  0x1ed8, 0x1ed8,\r
-  0x1eda, 0x1eda,\r
-  0x1edc, 0x1edc,\r
-  0x1ede, 0x1ede,\r
-  0x1ee0, 0x1ee0,\r
-  0x1ee2, 0x1ee2,\r
-  0x1ee4, 0x1ee4,\r
-  0x1ee6, 0x1ee6,\r
-  0x1ee8, 0x1ee8,\r
-  0x1eea, 0x1eea,\r
-  0x1eec, 0x1eec,\r
-  0x1eee, 0x1eee,\r
-  0x1ef0, 0x1ef0,\r
-  0x1ef2, 0x1ef2,\r
-  0x1ef4, 0x1ef4,\r
-  0x1ef6, 0x1ef6,\r
-  0x1ef8, 0x1ef8,\r
-  0x1f08, 0x1f0f,\r
-  0x1f18, 0x1f1d,\r
-  0x1f28, 0x1f2f,\r
-  0x1f38, 0x1f3f,\r
-  0x1f48, 0x1f4d,\r
-  0x1f59, 0x1f59,\r
-  0x1f5b, 0x1f5b,\r
-  0x1f5d, 0x1f5d,\r
-  0x1f5f, 0x1f5f,\r
-  0x1f68, 0x1f6f,\r
-  0x1fb8, 0x1fbb,\r
-  0x1fc8, 0x1fcb,\r
-  0x1fd8, 0x1fdb,\r
-  0x1fe8, 0x1fec,\r
-  0x1ff8, 0x1ffb,\r
-  0x2102, 0x2102,\r
-  0x2107, 0x2107,\r
-  0x210b, 0x210d,\r
-  0x2110, 0x2112,\r
-  0x2115, 0x2115,\r
-  0x2119, 0x211d,\r
-  0x2124, 0x2124,\r
-  0x2126, 0x2126,\r
-  0x2128, 0x2128,\r
-  0x212a, 0x212d,\r
-  0x2130, 0x2131,\r
-  0x2133, 0x2133,\r
-  0x213e, 0x213f,\r
-  0x2145, 0x2145,\r
-  0x2c00, 0x2c2e,\r
-  0x2c80, 0x2c80,\r
-  0x2c82, 0x2c82,\r
-  0x2c84, 0x2c84,\r
-  0x2c86, 0x2c86,\r
-  0x2c88, 0x2c88,\r
-  0x2c8a, 0x2c8a,\r
-  0x2c8c, 0x2c8c,\r
-  0x2c8e, 0x2c8e,\r
-  0x2c90, 0x2c90,\r
-  0x2c92, 0x2c92,\r
-  0x2c94, 0x2c94,\r
-  0x2c96, 0x2c96,\r
-  0x2c98, 0x2c98,\r
-  0x2c9a, 0x2c9a,\r
-  0x2c9c, 0x2c9c,\r
-  0x2c9e, 0x2c9e,\r
-  0x2ca0, 0x2ca0,\r
-  0x2ca2, 0x2ca2,\r
-  0x2ca4, 0x2ca4,\r
-  0x2ca6, 0x2ca6,\r
-  0x2ca8, 0x2ca8,\r
-  0x2caa, 0x2caa,\r
-  0x2cac, 0x2cac,\r
-  0x2cae, 0x2cae,\r
-  0x2cb0, 0x2cb0,\r
-  0x2cb2, 0x2cb2,\r
-  0x2cb4, 0x2cb4,\r
-  0x2cb6, 0x2cb6,\r
-  0x2cb8, 0x2cb8,\r
-  0x2cba, 0x2cba,\r
-  0x2cbc, 0x2cbc,\r
-  0x2cbe, 0x2cbe,\r
-  0x2cc0, 0x2cc0,\r
-  0x2cc2, 0x2cc2,\r
-  0x2cc4, 0x2cc4,\r
-  0x2cc6, 0x2cc6,\r
-  0x2cc8, 0x2cc8,\r
-  0x2cca, 0x2cca,\r
-  0x2ccc, 0x2ccc,\r
-  0x2cce, 0x2cce,\r
-  0x2cd0, 0x2cd0,\r
-  0x2cd2, 0x2cd2,\r
-  0x2cd4, 0x2cd4,\r
-  0x2cd6, 0x2cd6,\r
-  0x2cd8, 0x2cd8,\r
-  0x2cda, 0x2cda,\r
-  0x2cdc, 0x2cdc,\r
-  0x2cde, 0x2cde,\r
-  0x2ce0, 0x2ce0,\r
-  0x2ce2, 0x2ce2,\r
-  0xff21, 0xff3a,\r
-  0x10400, 0x10427,\r
-  0x1d400, 0x1d419,\r
-  0x1d434, 0x1d44d,\r
-  0x1d468, 0x1d481,\r
-  0x1d49c, 0x1d49c,\r
-  0x1d49e, 0x1d49f,\r
-  0x1d4a2, 0x1d4a2,\r
-  0x1d4a5, 0x1d4a6,\r
-  0x1d4a9, 0x1d4ac,\r
-  0x1d4ae, 0x1d4b5,\r
-  0x1d4d0, 0x1d4e9,\r
-  0x1d504, 0x1d505,\r
-  0x1d507, 0x1d50a,\r
-  0x1d50d, 0x1d514,\r
-  0x1d516, 0x1d51c,\r
-  0x1d538, 0x1d539,\r
-  0x1d53b, 0x1d53e,\r
-  0x1d540, 0x1d544,\r
-  0x1d546, 0x1d546,\r
-  0x1d54a, 0x1d550,\r
-  0x1d56c, 0x1d585,\r
-  0x1d5a0, 0x1d5b9,\r
-  0x1d5d4, 0x1d5ed,\r
-  0x1d608, 0x1d621,\r
-  0x1d63c, 0x1d655,\r
-  0x1d670, 0x1d689,\r
-  0x1d6a8, 0x1d6c0,\r
-  0x1d6e2, 0x1d6fa,\r
-  0x1d71c, 0x1d734,\r
-  0x1d756, 0x1d76e,\r
-  0x1d790, 0x1d7a8\r
-}; /* CR_Lu */\r
-\r
-/* 'M': Major Category */\r
-static const OnigCodePoint CR_M[] = {\r
-  133,\r
-  0x0300, 0x036f,\r
-  0x0483, 0x0486,\r
-  0x0488, 0x0489,\r
-  0x0591, 0x05b9,\r
-  0x05bb, 0x05bd,\r
-  0x05bf, 0x05bf,\r
-  0x05c1, 0x05c2,\r
-  0x05c4, 0x05c5,\r
-  0x05c7, 0x05c7,\r
-  0x0610, 0x0615,\r
-  0x064b, 0x065e,\r
-  0x0670, 0x0670,\r
-  0x06d6, 0x06dc,\r
-  0x06de, 0x06e4,\r
-  0x06e7, 0x06e8,\r
-  0x06ea, 0x06ed,\r
-  0x0711, 0x0711,\r
-  0x0730, 0x074a,\r
-  0x07a6, 0x07b0,\r
-  0x0901, 0x0903,\r
-  0x093c, 0x093c,\r
-  0x093e, 0x094d,\r
-  0x0951, 0x0954,\r
-  0x0962, 0x0963,\r
-  0x0981, 0x0983,\r
-  0x09bc, 0x09bc,\r
-  0x09be, 0x09c4,\r
-  0x09c7, 0x09c8,\r
-  0x09cb, 0x09cd,\r
-  0x09d7, 0x09d7,\r
-  0x09e2, 0x09e3,\r
-  0x0a01, 0x0a03,\r
-  0x0a3c, 0x0a3c,\r
-  0x0a3e, 0x0a42,\r
-  0x0a47, 0x0a48,\r
-  0x0a4b, 0x0a4d,\r
-  0x0a70, 0x0a71,\r
-  0x0a81, 0x0a83,\r
-  0x0abc, 0x0abc,\r
-  0x0abe, 0x0ac5,\r
-  0x0ac7, 0x0ac9,\r
-  0x0acb, 0x0acd,\r
-  0x0ae2, 0x0ae3,\r
-  0x0b01, 0x0b03,\r
-  0x0b3c, 0x0b3c,\r
-  0x0b3e, 0x0b43,\r
-  0x0b47, 0x0b48,\r
-  0x0b4b, 0x0b4d,\r
-  0x0b56, 0x0b57,\r
-  0x0b82, 0x0b82,\r
-  0x0bbe, 0x0bc2,\r
-  0x0bc6, 0x0bc8,\r
-  0x0bca, 0x0bcd,\r
-  0x0bd7, 0x0bd7,\r
-  0x0c01, 0x0c03,\r
-  0x0c3e, 0x0c44,\r
-  0x0c46, 0x0c48,\r
-  0x0c4a, 0x0c4d,\r
-  0x0c55, 0x0c56,\r
-  0x0c82, 0x0c83,\r
-  0x0cbc, 0x0cbc,\r
-  0x0cbe, 0x0cc4,\r
-  0x0cc6, 0x0cc8,\r
-  0x0cca, 0x0ccd,\r
-  0x0cd5, 0x0cd6,\r
-  0x0d02, 0x0d03,\r
-  0x0d3e, 0x0d43,\r
-  0x0d46, 0x0d48,\r
-  0x0d4a, 0x0d4d,\r
-  0x0d57, 0x0d57,\r
-  0x0d82, 0x0d83,\r
-  0x0dca, 0x0dca,\r
-  0x0dcf, 0x0dd4,\r
-  0x0dd6, 0x0dd6,\r
-  0x0dd8, 0x0ddf,\r
-  0x0df2, 0x0df3,\r
-  0x0e31, 0x0e31,\r
-  0x0e34, 0x0e3a,\r
-  0x0e47, 0x0e4e,\r
-  0x0eb1, 0x0eb1,\r
-  0x0eb4, 0x0eb9,\r
-  0x0ebb, 0x0ebc,\r
-  0x0ec8, 0x0ecd,\r
-  0x0f18, 0x0f19,\r
-  0x0f35, 0x0f35,\r
-  0x0f37, 0x0f37,\r
-  0x0f39, 0x0f39,\r
-  0x0f3e, 0x0f3f,\r
-  0x0f71, 0x0f84,\r
-  0x0f86, 0x0f87,\r
-  0x0f90, 0x0f97,\r
-  0x0f99, 0x0fbc,\r
-  0x0fc6, 0x0fc6,\r
-  0x102c, 0x1032,\r
-  0x1036, 0x1039,\r
-  0x1056, 0x1059,\r
-  0x135f, 0x135f,\r
-  0x1712, 0x1714,\r
-  0x1732, 0x1734,\r
-  0x1752, 0x1753,\r
-  0x1772, 0x1773,\r
-  0x17b6, 0x17d3,\r
-  0x17dd, 0x17dd,\r
-  0x180b, 0x180d,\r
-  0x18a9, 0x18a9,\r
-  0x1920, 0x192b,\r
-  0x1930, 0x193b,\r
-  0x19b0, 0x19c0,\r
-  0x19c8, 0x19c9,\r
-  0x1a17, 0x1a1b,\r
-  0x1dc0, 0x1dc3,\r
-  0x20d0, 0x20eb,\r
-  0x302a, 0x302f,\r
-  0x3099, 0x309a,\r
-  0xa802, 0xa802,\r
-  0xa806, 0xa806,\r
-  0xa80b, 0xa80b,\r
-  0xa823, 0xa827,\r
-  0xfb1e, 0xfb1e,\r
-  0xfe00, 0xfe0f,\r
-  0xfe20, 0xfe23,\r
-  0x10a01, 0x10a03,\r
-  0x10a05, 0x10a06,\r
-  0x10a0c, 0x10a0f,\r
-  0x10a38, 0x10a3a,\r
-  0x10a3f, 0x10a3f,\r
-  0x1d165, 0x1d169,\r
-  0x1d16d, 0x1d172,\r
-  0x1d17b, 0x1d182,\r
-  0x1d185, 0x1d18b,\r
-  0x1d1aa, 0x1d1ad,\r
-  0x1d242, 0x1d244,\r
-  0xe0100, 0xe01ef\r
-}; /* CR_M */\r
-\r
-/* 'Mc': General Category */\r
-static const OnigCodePoint CR_Mc[] = {\r
-  63,\r
-  0x0903, 0x0903,\r
-  0x093e, 0x0940,\r
-  0x0949, 0x094c,\r
-  0x0982, 0x0983,\r
-  0x09be, 0x09c0,\r
-  0x09c7, 0x09c8,\r
-  0x09cb, 0x09cc,\r
-  0x09d7, 0x09d7,\r
-  0x0a03, 0x0a03,\r
-  0x0a3e, 0x0a40,\r
-  0x0a83, 0x0a83,\r
-  0x0abe, 0x0ac0,\r
-  0x0ac9, 0x0ac9,\r
-  0x0acb, 0x0acc,\r
-  0x0b02, 0x0b03,\r
-  0x0b3e, 0x0b3e,\r
-  0x0b40, 0x0b40,\r
-  0x0b47, 0x0b48,\r
-  0x0b4b, 0x0b4c,\r
-  0x0b57, 0x0b57,\r
-  0x0bbe, 0x0bbf,\r
-  0x0bc1, 0x0bc2,\r
-  0x0bc6, 0x0bc8,\r
-  0x0bca, 0x0bcc,\r
-  0x0bd7, 0x0bd7,\r
-  0x0c01, 0x0c03,\r
-  0x0c41, 0x0c44,\r
-  0x0c82, 0x0c83,\r
-  0x0cbe, 0x0cbe,\r
-  0x0cc0, 0x0cc4,\r
-  0x0cc7, 0x0cc8,\r
-  0x0cca, 0x0ccb,\r
-  0x0cd5, 0x0cd6,\r
-  0x0d02, 0x0d03,\r
-  0x0d3e, 0x0d40,\r
-  0x0d46, 0x0d48,\r
-  0x0d4a, 0x0d4c,\r
-  0x0d57, 0x0d57,\r
-  0x0d82, 0x0d83,\r
-  0x0dcf, 0x0dd1,\r
-  0x0dd8, 0x0ddf,\r
-  0x0df2, 0x0df3,\r
-  0x0f3e, 0x0f3f,\r
-  0x0f7f, 0x0f7f,\r
-  0x102c, 0x102c,\r
-  0x1031, 0x1031,\r
-  0x1038, 0x1038,\r
-  0x1056, 0x1057,\r
-  0x17b6, 0x17b6,\r
-  0x17be, 0x17c5,\r
-  0x17c7, 0x17c8,\r
-  0x1923, 0x1926,\r
-  0x1929, 0x192b,\r
-  0x1930, 0x1931,\r
-  0x1933, 0x1938,\r
-  0x19b0, 0x19c0,\r
-  0x19c8, 0x19c9,\r
-  0x1a19, 0x1a1b,\r
-  0xa802, 0xa802,\r
-  0xa823, 0xa824,\r
-  0xa827, 0xa827,\r
-  0x1d165, 0x1d166,\r
-  0x1d16d, 0x1d172\r
-}; /* CR_Mc */\r
-\r
-/* 'Me': General Category */\r
-static const OnigCodePoint CR_Me[] = {\r
-  4,\r
-  0x0488, 0x0489,\r
-  0x06de, 0x06de,\r
-  0x20dd, 0x20e0,\r
-  0x20e2, 0x20e4\r
-}; /* CR_Me */\r
-\r
-/* 'Mn': General Category */\r
-static const OnigCodePoint CR_Mn[] = {\r
-  124,\r
-  0x0300, 0x036f,\r
-  0x0483, 0x0486,\r
-  0x0591, 0x05b9,\r
-  0x05bb, 0x05bd,\r
-  0x05bf, 0x05bf,\r
-  0x05c1, 0x05c2,\r
-  0x05c4, 0x05c5,\r
-  0x05c7, 0x05c7,\r
-  0x0610, 0x0615,\r
-  0x064b, 0x065e,\r
-  0x0670, 0x0670,\r
-  0x06d6, 0x06dc,\r
-  0x06df, 0x06e4,\r
-  0x06e7, 0x06e8,\r
-  0x06ea, 0x06ed,\r
-  0x0711, 0x0711,\r
-  0x0730, 0x074a,\r
-  0x07a6, 0x07b0,\r
-  0x0901, 0x0902,\r
-  0x093c, 0x093c,\r
-  0x0941, 0x0948,\r
-  0x094d, 0x094d,\r
-  0x0951, 0x0954,\r
-  0x0962, 0x0963,\r
-  0x0981, 0x0981,\r
-  0x09bc, 0x09bc,\r
-  0x09c1, 0x09c4,\r
-  0x09cd, 0x09cd,\r
-  0x09e2, 0x09e3,\r
-  0x0a01, 0x0a02,\r
-  0x0a3c, 0x0a3c,\r
-  0x0a41, 0x0a42,\r
-  0x0a47, 0x0a48,\r
-  0x0a4b, 0x0a4d,\r
-  0x0a70, 0x0a71,\r
-  0x0a81, 0x0a82,\r
-  0x0abc, 0x0abc,\r
-  0x0ac1, 0x0ac5,\r
-  0x0ac7, 0x0ac8,\r
-  0x0acd, 0x0acd,\r
-  0x0ae2, 0x0ae3,\r
-  0x0b01, 0x0b01,\r
-  0x0b3c, 0x0b3c,\r
-  0x0b3f, 0x0b3f,\r
-  0x0b41, 0x0b43,\r
-  0x0b4d, 0x0b4d,\r
-  0x0b56, 0x0b56,\r
-  0x0b82, 0x0b82,\r
-  0x0bc0, 0x0bc0,\r
-  0x0bcd, 0x0bcd,\r
-  0x0c3e, 0x0c40,\r
-  0x0c46, 0x0c48,\r
-  0x0c4a, 0x0c4d,\r
-  0x0c55, 0x0c56,\r
-  0x0cbc, 0x0cbc,\r
-  0x0cbf, 0x0cbf,\r
-  0x0cc6, 0x0cc6,\r
-  0x0ccc, 0x0ccd,\r
-  0x0d41, 0x0d43,\r
-  0x0d4d, 0x0d4d,\r
-  0x0dca, 0x0dca,\r
-  0x0dd2, 0x0dd4,\r
-  0x0dd6, 0x0dd6,\r
-  0x0e31, 0x0e31,\r
-  0x0e34, 0x0e3a,\r
-  0x0e47, 0x0e4e,\r
-  0x0eb1, 0x0eb1,\r
-  0x0eb4, 0x0eb9,\r
-  0x0ebb, 0x0ebc,\r
-  0x0ec8, 0x0ecd,\r
-  0x0f18, 0x0f19,\r
-  0x0f35, 0x0f35,\r
-  0x0f37, 0x0f37,\r
-  0x0f39, 0x0f39,\r
-  0x0f71, 0x0f7e,\r
-  0x0f80, 0x0f84,\r
-  0x0f86, 0x0f87,\r
-  0x0f90, 0x0f97,\r
-  0x0f99, 0x0fbc,\r
-  0x0fc6, 0x0fc6,\r
-  0x102d, 0x1030,\r
-  0x1032, 0x1032,\r
-  0x1036, 0x1037,\r
-  0x1039, 0x1039,\r
-  0x1058, 0x1059,\r
-  0x135f, 0x135f,\r
-  0x1712, 0x1714,\r
-  0x1732, 0x1734,\r
-  0x1752, 0x1753,\r
-  0x1772, 0x1773,\r
-  0x17b7, 0x17bd,\r
-  0x17c6, 0x17c6,\r
-  0x17c9, 0x17d3,\r
-  0x17dd, 0x17dd,\r
-  0x180b, 0x180d,\r
-  0x18a9, 0x18a9,\r
-  0x1920, 0x1922,\r
-  0x1927, 0x1928,\r
-  0x1932, 0x1932,\r
-  0x1939, 0x193b,\r
-  0x1a17, 0x1a18,\r
-  0x1dc0, 0x1dc3,\r
-  0x20d0, 0x20dc,\r
-  0x20e1, 0x20e1,\r
-  0x20e5, 0x20eb,\r
-  0x302a, 0x302f,\r
-  0x3099, 0x309a,\r
-  0xa806, 0xa806,\r
-  0xa80b, 0xa80b,\r
-  0xa825, 0xa826,\r
-  0xfb1e, 0xfb1e,\r
-  0xfe00, 0xfe0f,\r
-  0xfe20, 0xfe23,\r
-  0x10a01, 0x10a03,\r
-  0x10a05, 0x10a06,\r
-  0x10a0c, 0x10a0f,\r
-  0x10a38, 0x10a3a,\r
-  0x10a3f, 0x10a3f,\r
-  0x1d167, 0x1d169,\r
-  0x1d17b, 0x1d182,\r
-  0x1d185, 0x1d18b,\r
-  0x1d1aa, 0x1d1ad,\r
-  0x1d242, 0x1d244,\r
-  0xe0100, 0xe01ef\r
-}; /* CR_Mn */\r
-\r
-/* 'N': Major Category */\r
-static const OnigCodePoint CR_N[] = {\r
-  53,\r
-  0x0030, 0x0039,\r
-  0x00b2, 0x00b3,\r
-  0x00b9, 0x00b9,\r
-  0x00bc, 0x00be,\r
-  0x0660, 0x0669,\r
-  0x06f0, 0x06f9,\r
-  0x0966, 0x096f,\r
-  0x09e6, 0x09ef,\r
-  0x09f4, 0x09f9,\r
-  0x0a66, 0x0a6f,\r
-  0x0ae6, 0x0aef,\r
-  0x0b66, 0x0b6f,\r
-  0x0be6, 0x0bf2,\r
-  0x0c66, 0x0c6f,\r
-  0x0ce6, 0x0cef,\r
-  0x0d66, 0x0d6f,\r
-  0x0e50, 0x0e59,\r
-  0x0ed0, 0x0ed9,\r
-  0x0f20, 0x0f33,\r
-  0x1040, 0x1049,\r
-  0x1369, 0x137c,\r
-  0x16ee, 0x16f0,\r
-  0x17e0, 0x17e9,\r
-  0x17f0, 0x17f9,\r
-  0x1810, 0x1819,\r
-  0x1946, 0x194f,\r
-  0x19d0, 0x19d9,\r
-  0x2070, 0x2070,\r
-  0x2074, 0x2079,\r
-  0x2080, 0x2089,\r
-  0x2153, 0x2183,\r
-  0x2460, 0x249b,\r
-  0x24ea, 0x24ff,\r
-  0x2776, 0x2793,\r
-  0x2cfd, 0x2cfd,\r
-  0x3007, 0x3007,\r
-  0x3021, 0x3029,\r
-  0x3038, 0x303a,\r
-  0x3192, 0x3195,\r
-  0x3220, 0x3229,\r
-  0x3251, 0x325f,\r
-  0x3280, 0x3289,\r
-  0x32b1, 0x32bf,\r
-  0xff10, 0xff19,\r
-  0x10107, 0x10133,\r
-  0x10140, 0x10178,\r
-  0x1018a, 0x1018a,\r
-  0x10320, 0x10323,\r
-  0x1034a, 0x1034a,\r
-  0x103d1, 0x103d5,\r
-  0x104a0, 0x104a9,\r
-  0x10a40, 0x10a47,\r
-  0x1d7ce, 0x1d7ff\r
-}; /* CR_N */\r
-\r
-/* 'Nd': General Category */\r
-static const OnigCodePoint CR_Nd[] = {\r
-  23,\r
-  0x0030, 0x0039,\r
-  0x0660, 0x0669,\r
-  0x06f0, 0x06f9,\r
-  0x0966, 0x096f,\r
-  0x09e6, 0x09ef,\r
-  0x0a66, 0x0a6f,\r
-  0x0ae6, 0x0aef,\r
-  0x0b66, 0x0b6f,\r
-  0x0be6, 0x0bef,\r
-  0x0c66, 0x0c6f,\r
-  0x0ce6, 0x0cef,\r
-  0x0d66, 0x0d6f,\r
-  0x0e50, 0x0e59,\r
-  0x0ed0, 0x0ed9,\r
-  0x0f20, 0x0f29,\r
-  0x1040, 0x1049,\r
-  0x17e0, 0x17e9,\r
-  0x1810, 0x1819,\r
-  0x1946, 0x194f,\r
-  0x19d0, 0x19d9,\r
-  0xff10, 0xff19,\r
-  0x104a0, 0x104a9,\r
-  0x1d7ce, 0x1d7ff\r
-}; /* CR_Nd */\r
-\r
-/* 'Nl': General Category */\r
-static const OnigCodePoint CR_Nl[] = {\r
-  8,\r
-  0x16ee, 0x16f0,\r
-  0x2160, 0x2183,\r
-  0x3007, 0x3007,\r
-  0x3021, 0x3029,\r
-  0x3038, 0x303a,\r
-  0x10140, 0x10174,\r
-  0x1034a, 0x1034a,\r
-  0x103d1, 0x103d5\r
-}; /* CR_Nl */\r
-\r
-/* 'No': General Category */\r
-static const OnigCodePoint CR_No[] = {\r
-  26,\r
-  0x00b2, 0x00b3,\r
-  0x00b9, 0x00b9,\r
-  0x00bc, 0x00be,\r
-  0x09f4, 0x09f9,\r
-  0x0bf0, 0x0bf2,\r
-  0x0f2a, 0x0f33,\r
-  0x1369, 0x137c,\r
-  0x17f0, 0x17f9,\r
-  0x2070, 0x2070,\r
-  0x2074, 0x2079,\r
-  0x2080, 0x2089,\r
-  0x2153, 0x215f,\r
-  0x2460, 0x249b,\r
-  0x24ea, 0x24ff,\r
-  0x2776, 0x2793,\r
-  0x2cfd, 0x2cfd,\r
-  0x3192, 0x3195,\r
-  0x3220, 0x3229,\r
-  0x3251, 0x325f,\r
-  0x3280, 0x3289,\r
-  0x32b1, 0x32bf,\r
-  0x10107, 0x10133,\r
-  0x10175, 0x10178,\r
-  0x1018a, 0x1018a,\r
-  0x10320, 0x10323,\r
-  0x10a40, 0x10a47\r
-}; /* CR_No */\r
-\r
-/* 'P': Major Category */\r
-static const OnigCodePoint CR_P[] = {\r
-  96,\r
-  0x0021, 0x0023,\r
-  0x0025, 0x002a,\r
-  0x002c, 0x002f,\r
-  0x003a, 0x003b,\r
-  0x003f, 0x0040,\r
-  0x005b, 0x005d,\r
-  0x005f, 0x005f,\r
-  0x007b, 0x007b,\r
-  0x007d, 0x007d,\r
-  0x00a1, 0x00a1,\r
-  0x00ab, 0x00ab,\r
-  0x00b7, 0x00b7,\r
-  0x00bb, 0x00bb,\r
-  0x00bf, 0x00bf,\r
-  0x037e, 0x037e,\r
-  0x0387, 0x0387,\r
-  0x055a, 0x055f,\r
-  0x0589, 0x058a,\r
-  0x05be, 0x05be,\r
-  0x05c0, 0x05c0,\r
-  0x05c3, 0x05c3,\r
-  0x05c6, 0x05c6,\r
-  0x05f3, 0x05f4,\r
-  0x060c, 0x060d,\r
-  0x061b, 0x061b,\r
-  0x061e, 0x061f,\r
-  0x066a, 0x066d,\r
-  0x06d4, 0x06d4,\r
-  0x0700, 0x070d,\r
-  0x0964, 0x0965,\r
-  0x0970, 0x0970,\r
-  0x0df4, 0x0df4,\r
-  0x0e4f, 0x0e4f,\r
-  0x0e5a, 0x0e5b,\r
-  0x0f04, 0x0f12,\r
-  0x0f3a, 0x0f3d,\r
-  0x0f85, 0x0f85,\r
-  0x0fd0, 0x0fd1,\r
-  0x104a, 0x104f,\r
-  0x10fb, 0x10fb,\r
-  0x1361, 0x1368,\r
-  0x166d, 0x166e,\r
-  0x169b, 0x169c,\r
-  0x16eb, 0x16ed,\r
-  0x1735, 0x1736,\r
-  0x17d4, 0x17d6,\r
-  0x17d8, 0x17da,\r
-  0x1800, 0x180a,\r
-  0x1944, 0x1945,\r
-  0x19de, 0x19df,\r
-  0x1a1e, 0x1a1f,\r
-  0x2010, 0x2027,\r
-  0x2030, 0x2043,\r
-  0x2045, 0x2051,\r
-  0x2053, 0x205e,\r
-  0x207d, 0x207e,\r
-  0x208d, 0x208e,\r
-  0x2329, 0x232a,\r
-  0x23b4, 0x23b6,\r
-  0x2768, 0x2775,\r
-  0x27c5, 0x27c6,\r
-  0x27e6, 0x27eb,\r
-  0x2983, 0x2998,\r
-  0x29d8, 0x29db,\r
-  0x29fc, 0x29fd,\r
-  0x2cf9, 0x2cfc,\r
-  0x2cfe, 0x2cff,\r
-  0x2e00, 0x2e17,\r
-  0x2e1c, 0x2e1d,\r
-  0x3001, 0x3003,\r
-  0x3008, 0x3011,\r
-  0x3014, 0x301f,\r
-  0x3030, 0x3030,\r
-  0x303d, 0x303d,\r
-  0x30a0, 0x30a0,\r
-  0x30fb, 0x30fb,\r
-  0xfd3e, 0xfd3f,\r
-  0xfe10, 0xfe19,\r
-  0xfe30, 0xfe52,\r
-  0xfe54, 0xfe61,\r
-  0xfe63, 0xfe63,\r
-  0xfe68, 0xfe68,\r
-  0xfe6a, 0xfe6b,\r
-  0xff01, 0xff03,\r
-  0xff05, 0xff0a,\r
-  0xff0c, 0xff0f,\r
-  0xff1a, 0xff1b,\r
-  0xff1f, 0xff20,\r
-  0xff3b, 0xff3d,\r
-  0xff3f, 0xff3f,\r
-  0xff5b, 0xff5b,\r
-  0xff5d, 0xff5d,\r
-  0xff5f, 0xff65,\r
-  0x10100, 0x10101,\r
-  0x1039f, 0x1039f,\r
-  0x10a50, 0x10a58\r
-}; /* CR_P */\r
-\r
-/* 'Pc': General Category */\r
-static const OnigCodePoint CR_Pc[] = {\r
-  6,\r
-  0x005f, 0x005f,\r
-  0x203f, 0x2040,\r
-  0x2054, 0x2054,\r
-  0xfe33, 0xfe34,\r
-  0xfe4d, 0xfe4f,\r
-  0xff3f, 0xff3f\r
-}; /* CR_Pc */\r
-\r
-/* 'Pd': General Category */\r
-static const OnigCodePoint CR_Pd[] = {\r
-  12,\r
-  0x002d, 0x002d,\r
-  0x058a, 0x058a,\r
-  0x1806, 0x1806,\r
-  0x2010, 0x2015,\r
-  0x2e17, 0x2e17,\r
-  0x301c, 0x301c,\r
-  0x3030, 0x3030,\r
-  0x30a0, 0x30a0,\r
-  0xfe31, 0xfe32,\r
-  0xfe58, 0xfe58,\r
-  0xfe63, 0xfe63,\r
-  0xff0d, 0xff0d\r
-}; /* CR_Pd */\r
-\r
-/* 'Pe': General Category */\r
-static const OnigCodePoint CR_Pe[] = {\r
-  65,\r
-  0x0029, 0x0029,\r
-  0x005d, 0x005d,\r
-  0x007d, 0x007d,\r
-  0x0f3b, 0x0f3b,\r
-  0x0f3d, 0x0f3d,\r
-  0x169c, 0x169c,\r
-  0x2046, 0x2046,\r
-  0x207e, 0x207e,\r
-  0x208e, 0x208e,\r
-  0x232a, 0x232a,\r
-  0x23b5, 0x23b5,\r
-  0x2769, 0x2769,\r
-  0x276b, 0x276b,\r
-  0x276d, 0x276d,\r
-  0x276f, 0x276f,\r
-  0x2771, 0x2771,\r
-  0x2773, 0x2773,\r
-  0x2775, 0x2775,\r
-  0x27c6, 0x27c6,\r
-  0x27e7, 0x27e7,\r
-  0x27e9, 0x27e9,\r
-  0x27eb, 0x27eb,\r
-  0x2984, 0x2984,\r
-  0x2986, 0x2986,\r
-  0x2988, 0x2988,\r
-  0x298a, 0x298a,\r
-  0x298c, 0x298c,\r
-  0x298e, 0x298e,\r
-  0x2990, 0x2990,\r
-  0x2992, 0x2992,\r
-  0x2994, 0x2994,\r
-  0x2996, 0x2996,\r
-  0x2998, 0x2998,\r
-  0x29d9, 0x29d9,\r
-  0x29db, 0x29db,\r
-  0x29fd, 0x29fd,\r
-  0x3009, 0x3009,\r
-  0x300b, 0x300b,\r
-  0x300d, 0x300d,\r
-  0x300f, 0x300f,\r
-  0x3011, 0x3011,\r
-  0x3015, 0x3015,\r
-  0x3017, 0x3017,\r
-  0x3019, 0x3019,\r
-  0x301b, 0x301b,\r
-  0x301e, 0x301f,\r
-  0xfd3f, 0xfd3f,\r
-  0xfe18, 0xfe18,\r
-  0xfe36, 0xfe36,\r
-  0xfe38, 0xfe38,\r
-  0xfe3a, 0xfe3a,\r
-  0xfe3c, 0xfe3c,\r
-  0xfe3e, 0xfe3e,\r
-  0xfe40, 0xfe40,\r
-  0xfe42, 0xfe42,\r
-  0xfe44, 0xfe44,\r
-  0xfe48, 0xfe48,\r
-  0xfe5a, 0xfe5a,\r
-  0xfe5c, 0xfe5c,\r
-  0xfe5e, 0xfe5e,\r
-  0xff09, 0xff09,\r
-  0xff3d, 0xff3d,\r
-  0xff5d, 0xff5d,\r
-  0xff60, 0xff60,\r
-  0xff63, 0xff63\r
-}; /* CR_Pe */\r
-\r
-/* 'Pf': General Category */\r
-static const OnigCodePoint CR_Pf[] = {\r
-  9,\r
-  0x00bb, 0x00bb,\r
-  0x2019, 0x2019,\r
-  0x201d, 0x201d,\r
-  0x203a, 0x203a,\r
-  0x2e03, 0x2e03,\r
-  0x2e05, 0x2e05,\r
-  0x2e0a, 0x2e0a,\r
-  0x2e0d, 0x2e0d,\r
-  0x2e1d, 0x2e1d\r
-}; /* CR_Pf */\r
-\r
-/* 'Pi': General Category */\r
-static const OnigCodePoint CR_Pi[] = {\r
-  10,\r
-  0x00ab, 0x00ab,\r
-  0x2018, 0x2018,\r
-  0x201b, 0x201c,\r
-  0x201f, 0x201f,\r
-  0x2039, 0x2039,\r
-  0x2e02, 0x2e02,\r
-  0x2e04, 0x2e04,\r
-  0x2e09, 0x2e09,\r
-  0x2e0c, 0x2e0c,\r
-  0x2e1c, 0x2e1c\r
-}; /* CR_Pi */\r
-\r
-/* 'Po': General Category */\r
-static const OnigCodePoint CR_Po[] = {\r
-  88,\r
-  0x0021, 0x0023,\r
-  0x0025, 0x0027,\r
-  0x002a, 0x002a,\r
-  0x002c, 0x002c,\r
-  0x002e, 0x002f,\r
-  0x003a, 0x003b,\r
-  0x003f, 0x0040,\r
-  0x005c, 0x005c,\r
-  0x00a1, 0x00a1,\r
-  0x00b7, 0x00b7,\r
-  0x00bf, 0x00bf,\r
-  0x037e, 0x037e,\r
-  0x0387, 0x0387,\r
-  0x055a, 0x055f,\r
-  0x0589, 0x0589,\r
-  0x05be, 0x05be,\r
-  0x05c0, 0x05c0,\r
-  0x05c3, 0x05c3,\r
-  0x05c6, 0x05c6,\r
-  0x05f3, 0x05f4,\r
-  0x060c, 0x060d,\r
-  0x061b, 0x061b,\r
-  0x061e, 0x061f,\r
-  0x066a, 0x066d,\r
-  0x06d4, 0x06d4,\r
-  0x0700, 0x070d,\r
-  0x0964, 0x0965,\r
-  0x0970, 0x0970,\r
-  0x0df4, 0x0df4,\r
-  0x0e4f, 0x0e4f,\r
-  0x0e5a, 0x0e5b,\r
-  0x0f04, 0x0f12,\r
-  0x0f85, 0x0f85,\r
-  0x0fd0, 0x0fd1,\r
-  0x104a, 0x104f,\r
-  0x10fb, 0x10fb,\r
-  0x1361, 0x1368,\r
-  0x166d, 0x166e,\r
-  0x16eb, 0x16ed,\r
-  0x1735, 0x1736,\r
-  0x17d4, 0x17d6,\r
-  0x17d8, 0x17da,\r
-  0x1800, 0x1805,\r
-  0x1807, 0x180a,\r
-  0x1944, 0x1945,\r
-  0x19de, 0x19df,\r
-  0x1a1e, 0x1a1f,\r
-  0x2016, 0x2017,\r
-  0x2020, 0x2027,\r
-  0x2030, 0x2038,\r
-  0x203b, 0x203e,\r
-  0x2041, 0x2043,\r
-  0x2047, 0x2051,\r
-  0x2053, 0x2053,\r
-  0x2055, 0x205e,\r
-  0x23b6, 0x23b6,\r
-  0x2cf9, 0x2cfc,\r
-  0x2cfe, 0x2cff,\r
-  0x2e00, 0x2e01,\r
-  0x2e06, 0x2e08,\r
-  0x2e0b, 0x2e0b,\r
-  0x2e0e, 0x2e16,\r
-  0x3001, 0x3003,\r
-  0x303d, 0x303d,\r
-  0x30fb, 0x30fb,\r
-  0xfe10, 0xfe16,\r
-  0xfe19, 0xfe19,\r
-  0xfe30, 0xfe30,\r
-  0xfe45, 0xfe46,\r
-  0xfe49, 0xfe4c,\r
-  0xfe50, 0xfe52,\r
-  0xfe54, 0xfe57,\r
-  0xfe5f, 0xfe61,\r
-  0xfe68, 0xfe68,\r
-  0xfe6a, 0xfe6b,\r
-  0xff01, 0xff03,\r
-  0xff05, 0xff07,\r
-  0xff0a, 0xff0a,\r
-  0xff0c, 0xff0c,\r
-  0xff0e, 0xff0f,\r
-  0xff1a, 0xff1b,\r
-  0xff1f, 0xff20,\r
-  0xff3c, 0xff3c,\r
-  0xff61, 0xff61,\r
-  0xff64, 0xff65,\r
-  0x10100, 0x10101,\r
-  0x1039f, 0x1039f,\r
-  0x10a50, 0x10a58\r
-}; /* CR_Po */\r
-\r
-/* 'Ps': General Category */\r
-static const OnigCodePoint CR_Ps[] = {\r
-  67,\r
-  0x0028, 0x0028,\r
-  0x005b, 0x005b,\r
-  0x007b, 0x007b,\r
-  0x0f3a, 0x0f3a,\r
-  0x0f3c, 0x0f3c,\r
-  0x169b, 0x169b,\r
-  0x201a, 0x201a,\r
-  0x201e, 0x201e,\r
-  0x2045, 0x2045,\r
-  0x207d, 0x207d,\r
-  0x208d, 0x208d,\r
-  0x2329, 0x2329,\r
-  0x23b4, 0x23b4,\r
-  0x2768, 0x2768,\r
-  0x276a, 0x276a,\r
-  0x276c, 0x276c,\r
-  0x276e, 0x276e,\r
-  0x2770, 0x2770,\r
-  0x2772, 0x2772,\r
-  0x2774, 0x2774,\r
-  0x27c5, 0x27c5,\r
-  0x27e6, 0x27e6,\r
-  0x27e8, 0x27e8,\r
-  0x27ea, 0x27ea,\r
-  0x2983, 0x2983,\r
-  0x2985, 0x2985,\r
-  0x2987, 0x2987,\r
-  0x2989, 0x2989,\r
-  0x298b, 0x298b,\r
-  0x298d, 0x298d,\r
-  0x298f, 0x298f,\r
-  0x2991, 0x2991,\r
-  0x2993, 0x2993,\r
-  0x2995, 0x2995,\r
-  0x2997, 0x2997,\r
-  0x29d8, 0x29d8,\r
-  0x29da, 0x29da,\r
-  0x29fc, 0x29fc,\r
-  0x3008, 0x3008,\r
-  0x300a, 0x300a,\r
-  0x300c, 0x300c,\r
-  0x300e, 0x300e,\r
-  0x3010, 0x3010,\r
-  0x3014, 0x3014,\r
-  0x3016, 0x3016,\r
-  0x3018, 0x3018,\r
-  0x301a, 0x301a,\r
-  0x301d, 0x301d,\r
-  0xfd3e, 0xfd3e,\r
-  0xfe17, 0xfe17,\r
-  0xfe35, 0xfe35,\r
-  0xfe37, 0xfe37,\r
-  0xfe39, 0xfe39,\r
-  0xfe3b, 0xfe3b,\r
-  0xfe3d, 0xfe3d,\r
-  0xfe3f, 0xfe3f,\r
-  0xfe41, 0xfe41,\r
-  0xfe43, 0xfe43,\r
-  0xfe47, 0xfe47,\r
-  0xfe59, 0xfe59,\r
-  0xfe5b, 0xfe5b,\r
-  0xfe5d, 0xfe5d,\r
-  0xff08, 0xff08,\r
-  0xff3b, 0xff3b,\r
-  0xff5b, 0xff5b,\r
-  0xff5f, 0xff5f,\r
-  0xff62, 0xff62\r
-}; /* CR_Ps */\r
-\r
-/* 'S': Major Category */\r
-static const OnigCodePoint CR_S[] = {\r
-  162,\r
-  0x0024, 0x0024,\r
-  0x002b, 0x002b,\r
-  0x003c, 0x003e,\r
-  0x005e, 0x005e,\r
-  0x0060, 0x0060,\r
-  0x007c, 0x007c,\r
-  0x007e, 0x007e,\r
-  0x00a2, 0x00a9,\r
-  0x00ac, 0x00ac,\r
-  0x00ae, 0x00b1,\r
-  0x00b4, 0x00b4,\r
-  0x00b6, 0x00b6,\r
-  0x00b8, 0x00b8,\r
-  0x00d7, 0x00d7,\r
-  0x00f7, 0x00f7,\r
-  0x02c2, 0x02c5,\r
-  0x02d2, 0x02df,\r
-  0x02e5, 0x02ed,\r
-  0x02ef, 0x02ff,\r
-  0x0374, 0x0375,\r
-  0x0384, 0x0385,\r
-  0x03f6, 0x03f6,\r
-  0x0482, 0x0482,\r
-  0x060b, 0x060b,\r
-  0x060e, 0x060f,\r
-  0x06e9, 0x06e9,\r
-  0x06fd, 0x06fe,\r
-  0x09f2, 0x09f3,\r
-  0x09fa, 0x09fa,\r
-  0x0af1, 0x0af1,\r
-  0x0b70, 0x0b70,\r
-  0x0bf3, 0x0bfa,\r
-  0x0e3f, 0x0e3f,\r
-  0x0f01, 0x0f03,\r
-  0x0f13, 0x0f17,\r
-  0x0f1a, 0x0f1f,\r
-  0x0f34, 0x0f34,\r
-  0x0f36, 0x0f36,\r
-  0x0f38, 0x0f38,\r
-  0x0fbe, 0x0fc5,\r
-  0x0fc7, 0x0fcc,\r
-  0x0fcf, 0x0fcf,\r
-  0x1360, 0x1360,\r
-  0x1390, 0x1399,\r
-  0x17db, 0x17db,\r
-  0x1940, 0x1940,\r
-  0x19e0, 0x19ff,\r
-  0x1fbd, 0x1fbd,\r
-  0x1fbf, 0x1fc1,\r
-  0x1fcd, 0x1fcf,\r
-  0x1fdd, 0x1fdf,\r
-  0x1fed, 0x1fef,\r
-  0x1ffd, 0x1ffe,\r
-  0x2044, 0x2044,\r
-  0x2052, 0x2052,\r
-  0x207a, 0x207c,\r
-  0x208a, 0x208c,\r
-  0x20a0, 0x20b5,\r
-  0x2100, 0x2101,\r
-  0x2103, 0x2106,\r
-  0x2108, 0x2109,\r
-  0x2114, 0x2114,\r
-  0x2116, 0x2118,\r
-  0x211e, 0x2123,\r
-  0x2125, 0x2125,\r
-  0x2127, 0x2127,\r
-  0x2129, 0x2129,\r
-  0x212e, 0x212e,\r
-  0x2132, 0x2132,\r
-  0x213a, 0x213b,\r
-  0x2140, 0x2144,\r
-  0x214a, 0x214c,\r
-  0x2190, 0x2328,\r
-  0x232b, 0x23b3,\r
-  0x23b7, 0x23db,\r
-  0x2400, 0x2426,\r
-  0x2440, 0x244a,\r
-  0x249c, 0x24e9,\r
-  0x2500, 0x269c,\r
-  0x26a0, 0x26b1,\r
-  0x2701, 0x2704,\r
-  0x2706, 0x2709,\r
-  0x270c, 0x2727,\r
-  0x2729, 0x274b,\r
-  0x274d, 0x274d,\r
-  0x274f, 0x2752,\r
-  0x2756, 0x2756,\r
-  0x2758, 0x275e,\r
-  0x2761, 0x2767,\r
-  0x2794, 0x2794,\r
-  0x2798, 0x27af,\r
-  0x27b1, 0x27be,\r
-  0x27c0, 0x27c4,\r
-  0x27d0, 0x27e5,\r
-  0x27f0, 0x2982,\r
-  0x2999, 0x29d7,\r
-  0x29dc, 0x29fb,\r
-  0x29fe, 0x2b13,\r
-  0x2ce5, 0x2cea,\r
-  0x2e80, 0x2e99,\r
-  0x2e9b, 0x2ef3,\r
-  0x2f00, 0x2fd5,\r
-  0x2ff0, 0x2ffb,\r
-  0x3004, 0x3004,\r
-  0x3012, 0x3013,\r
-  0x3020, 0x3020,\r
-  0x3036, 0x3037,\r
-  0x303e, 0x303f,\r
-  0x309b, 0x309c,\r
-  0x3190, 0x3191,\r
-  0x3196, 0x319f,\r
-  0x31c0, 0x31cf,\r
-  0x3200, 0x321e,\r
-  0x322a, 0x3243,\r
-  0x3250, 0x3250,\r
-  0x3260, 0x327f,\r
-  0x328a, 0x32b0,\r
-  0x32c0, 0x32fe,\r
-  0x3300, 0x33ff,\r
-  0x4dc0, 0x4dff,\r
-  0xa490, 0xa4c6,\r
-  0xa700, 0xa716,\r
-  0xa828, 0xa82b,\r
-  0xfb29, 0xfb29,\r
-  0xfdfc, 0xfdfd,\r
-  0xfe62, 0xfe62,\r
-  0xfe64, 0xfe66,\r
-  0xfe69, 0xfe69,\r
-  0xff04, 0xff04,\r
-  0xff0b, 0xff0b,\r
-  0xff1c, 0xff1e,\r
-  0xff3e, 0xff3e,\r
-  0xff40, 0xff40,\r
-  0xff5c, 0xff5c,\r
-  0xff5e, 0xff5e,\r
-  0xffe0, 0xffe6,\r
-  0xffe8, 0xffee,\r
-  0xfffc, 0xfffd,\r
-  0x10102, 0x10102,\r
-  0x10137, 0x1013f,\r
-  0x10179, 0x10189,\r
-  0x103d0, 0x103d0,\r
-  0x1d000, 0x1d0f5,\r
-  0x1d100, 0x1d126,\r
-  0x1d12a, 0x1d164,\r
-  0x1d16a, 0x1d16c,\r
-  0x1d183, 0x1d184,\r
-  0x1d18c, 0x1d1a9,\r
-  0x1d1ae, 0x1d1dd,\r
-  0x1d200, 0x1d241,\r
-  0x1d245, 0x1d245,\r
-  0x1d300, 0x1d356,\r
-  0x1d6c1, 0x1d6c1,\r
-  0x1d6db, 0x1d6db,\r
-  0x1d6fb, 0x1d6fb,\r
-  0x1d715, 0x1d715,\r
-  0x1d735, 0x1d735,\r
-  0x1d74f, 0x1d74f,\r
-  0x1d76f, 0x1d76f,\r
-  0x1d789, 0x1d789,\r
-  0x1d7a9, 0x1d7a9,\r
-  0x1d7c3, 0x1d7c3\r
-}; /* CR_S */\r
-\r
-/* 'Sc': General Category */\r
-static const OnigCodePoint CR_Sc[] = {\r
-  14,\r
-  0x0024, 0x0024,\r
-  0x00a2, 0x00a5,\r
-  0x060b, 0x060b,\r
-  0x09f2, 0x09f3,\r
-  0x0af1, 0x0af1,\r
-  0x0bf9, 0x0bf9,\r
-  0x0e3f, 0x0e3f,\r
-  0x17db, 0x17db,\r
-  0x20a0, 0x20b5,\r
-  0xfdfc, 0xfdfc,\r
-  0xfe69, 0xfe69,\r
-  0xff04, 0xff04,\r
-  0xffe0, 0xffe1,\r
-  0xffe5, 0xffe6\r
-}; /* CR_Sc */\r
-\r
-/* 'Sk': General Category */\r
-static const OnigCodePoint CR_Sk[] = {\r
-  23,\r
-  0x005e, 0x005e,\r
-  0x0060, 0x0060,\r
-  0x00a8, 0x00a8,\r
-  0x00af, 0x00af,\r
-  0x00b4, 0x00b4,\r
-  0x00b8, 0x00b8,\r
-  0x02c2, 0x02c5,\r
-  0x02d2, 0x02df,\r
-  0x02e5, 0x02ed,\r
-  0x02ef, 0x02ff,\r
-  0x0374, 0x0375,\r
-  0x0384, 0x0385,\r
-  0x1fbd, 0x1fbd,\r
-  0x1fbf, 0x1fc1,\r
-  0x1fcd, 0x1fcf,\r
-  0x1fdd, 0x1fdf,\r
-  0x1fed, 0x1fef,\r
-  0x1ffd, 0x1ffe,\r
-  0x309b, 0x309c,\r
-  0xa700, 0xa716,\r
-  0xff3e, 0xff3e,\r
-  0xff40, 0xff40,\r
-  0xffe3, 0xffe3\r
-}; /* CR_Sk */\r
-\r
-/* 'Sm': General Category */\r
-static const OnigCodePoint CR_Sm[] = {\r
-  59,\r
-  0x002b, 0x002b,\r
-  0x003c, 0x003e,\r
-  0x007c, 0x007c,\r
-  0x007e, 0x007e,\r
-  0x00ac, 0x00ac,\r
-  0x00b1, 0x00b1,\r
-  0x00d7, 0x00d7,\r
-  0x00f7, 0x00f7,\r
-  0x03f6, 0x03f6,\r
-  0x2044, 0x2044,\r
-  0x2052, 0x2052,\r
-  0x207a, 0x207c,\r
-  0x208a, 0x208c,\r
-  0x2140, 0x2144,\r
-  0x214b, 0x214b,\r
-  0x2190, 0x2194,\r
-  0x219a, 0x219b,\r
-  0x21a0, 0x21a0,\r
-  0x21a3, 0x21a3,\r
-  0x21a6, 0x21a6,\r
-  0x21ae, 0x21ae,\r
-  0x21ce, 0x21cf,\r
-  0x21d2, 0x21d2,\r
-  0x21d4, 0x21d4,\r
-  0x21f4, 0x22ff,\r
-  0x2308, 0x230b,\r
-  0x2320, 0x2321,\r
-  0x237c, 0x237c,\r
-  0x239b, 0x23b3,\r
-  0x25b7, 0x25b7,\r
-  0x25c1, 0x25c1,\r
-  0x25f8, 0x25ff,\r
-  0x266f, 0x266f,\r
-  0x27c0, 0x27c4,\r
-  0x27d0, 0x27e5,\r
-  0x27f0, 0x27ff,\r
-  0x2900, 0x2982,\r
-  0x2999, 0x29d7,\r
-  0x29dc, 0x29fb,\r
-  0x29fe, 0x2aff,\r
-  0xfb29, 0xfb29,\r
-  0xfe62, 0xfe62,\r
-  0xfe64, 0xfe66,\r
-  0xff0b, 0xff0b,\r
-  0xff1c, 0xff1e,\r
-  0xff5c, 0xff5c,\r
-  0xff5e, 0xff5e,\r
-  0xffe2, 0xffe2,\r
-  0xffe9, 0xffec,\r
-  0x1d6c1, 0x1d6c1,\r
-  0x1d6db, 0x1d6db,\r
-  0x1d6fb, 0x1d6fb,\r
-  0x1d715, 0x1d715,\r
-  0x1d735, 0x1d735,\r
-  0x1d74f, 0x1d74f,\r
-  0x1d76f, 0x1d76f,\r
-  0x1d789, 0x1d789,\r
-  0x1d7a9, 0x1d7a9,\r
-  0x1d7c3, 0x1d7c3\r
-}; /* CR_Sm */\r
-\r
-/* 'So': General Category */\r
-static const OnigCodePoint CR_So[] = {\r
-  120,\r
-  0x00a6, 0x00a7,\r
-  0x00a9, 0x00a9,\r
-  0x00ae, 0x00ae,\r
-  0x00b0, 0x00b0,\r
-  0x00b6, 0x00b6,\r
-  0x0482, 0x0482,\r
-  0x060e, 0x060f,\r
-  0x06e9, 0x06e9,\r
-  0x06fd, 0x06fe,\r
-  0x09fa, 0x09fa,\r
-  0x0b70, 0x0b70,\r
-  0x0bf3, 0x0bf8,\r
-  0x0bfa, 0x0bfa,\r
-  0x0f01, 0x0f03,\r
-  0x0f13, 0x0f17,\r
-  0x0f1a, 0x0f1f,\r
-  0x0f34, 0x0f34,\r
-  0x0f36, 0x0f36,\r
-  0x0f38, 0x0f38,\r
-  0x0fbe, 0x0fc5,\r
-  0x0fc7, 0x0fcc,\r
-  0x0fcf, 0x0fcf,\r
-  0x1360, 0x1360,\r
-  0x1390, 0x1399,\r
-  0x1940, 0x1940,\r
-  0x19e0, 0x19ff,\r
-  0x2100, 0x2101,\r
-  0x2103, 0x2106,\r
-  0x2108, 0x2109,\r
-  0x2114, 0x2114,\r
-  0x2116, 0x2118,\r
-  0x211e, 0x2123,\r
-  0x2125, 0x2125,\r
-  0x2127, 0x2127,\r
-  0x2129, 0x2129,\r
-  0x212e, 0x212e,\r
-  0x2132, 0x2132,\r
-  0x213a, 0x213b,\r
-  0x214a, 0x214a,\r
-  0x214c, 0x214c,\r
-  0x2195, 0x2199,\r
-  0x219c, 0x219f,\r
-  0x21a1, 0x21a2,\r
-  0x21a4, 0x21a5,\r
-  0x21a7, 0x21ad,\r
-  0x21af, 0x21cd,\r
-  0x21d0, 0x21d1,\r
-  0x21d3, 0x21d3,\r
-  0x21d5, 0x21f3,\r
-  0x2300, 0x2307,\r
-  0x230c, 0x231f,\r
-  0x2322, 0x2328,\r
-  0x232b, 0x237b,\r
-  0x237d, 0x239a,\r
-  0x23b7, 0x23db,\r
-  0x2400, 0x2426,\r
-  0x2440, 0x244a,\r
-  0x249c, 0x24e9,\r
-  0x2500, 0x25b6,\r
-  0x25b8, 0x25c0,\r
-  0x25c2, 0x25f7,\r
-  0x2600, 0x266e,\r
-  0x2670, 0x269c,\r
-  0x26a0, 0x26b1,\r
-  0x2701, 0x2704,\r
-  0x2706, 0x2709,\r
-  0x270c, 0x2727,\r
-  0x2729, 0x274b,\r
-  0x274d, 0x274d,\r
-  0x274f, 0x2752,\r
-  0x2756, 0x2756,\r
-  0x2758, 0x275e,\r
-  0x2761, 0x2767,\r
-  0x2794, 0x2794,\r
-  0x2798, 0x27af,\r
-  0x27b1, 0x27be,\r
-  0x2800, 0x28ff,\r
-  0x2b00, 0x2b13,\r
-  0x2ce5, 0x2cea,\r
-  0x2e80, 0x2e99,\r
-  0x2e9b, 0x2ef3,\r
-  0x2f00, 0x2fd5,\r
-  0x2ff0, 0x2ffb,\r
-  0x3004, 0x3004,\r
-  0x3012, 0x3013,\r
-  0x3020, 0x3020,\r
-  0x3036, 0x3037,\r
-  0x303e, 0x303f,\r
-  0x3190, 0x3191,\r
-  0x3196, 0x319f,\r
-  0x31c0, 0x31cf,\r
-  0x3200, 0x321e,\r
-  0x322a, 0x3243,\r
-  0x3250, 0x3250,\r
-  0x3260, 0x327f,\r
-  0x328a, 0x32b0,\r
-  0x32c0, 0x32fe,\r
-  0x3300, 0x33ff,\r
-  0x4dc0, 0x4dff,\r
-  0xa490, 0xa4c6,\r
-  0xa828, 0xa82b,\r
-  0xfdfd, 0xfdfd,\r
-  0xffe4, 0xffe4,\r
-  0xffe8, 0xffe8,\r
-  0xffed, 0xffee,\r
-  0xfffc, 0xfffd,\r
-  0x10102, 0x10102,\r
-  0x10137, 0x1013f,\r
-  0x10179, 0x10189,\r
-  0x103d0, 0x103d0,\r
-  0x1d000, 0x1d0f5,\r
-  0x1d100, 0x1d126,\r
-  0x1d12a, 0x1d164,\r
-  0x1d16a, 0x1d16c,\r
-  0x1d183, 0x1d184,\r
-  0x1d18c, 0x1d1a9,\r
-  0x1d1ae, 0x1d1dd,\r
-  0x1d200, 0x1d241,\r
-  0x1d245, 0x1d245,\r
-  0x1d300, 0x1d356\r
-}; /* CR_So */\r
-\r
-/* 'Z': Major Category */\r
-static const OnigCodePoint CR_Z[] = {\r
-  9,\r
-  0x0020, 0x0020,\r
-  0x00a0, 0x00a0,\r
-  0x1680, 0x1680,\r
-  0x180e, 0x180e,\r
-  0x2000, 0x200a,\r
-  0x2028, 0x2029,\r
-  0x202f, 0x202f,\r
-  0x205f, 0x205f,\r
-  0x3000, 0x3000\r
-}; /* CR_Z */\r
-\r
-/* 'Zl': General Category */\r
-static const OnigCodePoint CR_Zl[] = {\r
-  1,\r
-  0x2028, 0x2028\r
-}; /* CR_Zl */\r
-\r
-/* 'Zp': General Category */\r
-static const OnigCodePoint CR_Zp[] = {\r
-  1,\r
-  0x2029, 0x2029\r
-}; /* CR_Zp */\r
-\r
-/* 'Zs': General Category */\r
-static const OnigCodePoint CR_Zs[] = {\r
-  8,\r
-  0x0020, 0x0020,\r
-  0x00a0, 0x00a0,\r
-  0x1680, 0x1680,\r
-  0x180e, 0x180e,\r
-  0x2000, 0x200a,\r
-  0x202f, 0x202f,\r
-  0x205f, 0x205f,\r
-  0x3000, 0x3000\r
-}; /* CR_Zs */\r
-\r
-/* 'Arabic': Script */\r
-static const OnigCodePoint CR_Arabic[] = {\r
-  17,\r
-  0x060b, 0x060b,\r
-  0x060d, 0x0615,\r
-  0x061e, 0x061e,\r
-  0x0621, 0x063a,\r
-  0x0641, 0x064a,\r
-  0x0656, 0x065e,\r
-  0x066a, 0x066f,\r
-  0x0671, 0x06dc,\r
-  0x06de, 0x06ff,\r
-  0x0750, 0x076d,\r
-  0xfb50, 0xfbb1,\r
-  0xfbd3, 0xfd3d,\r
-  0xfd50, 0xfd8f,\r
-  0xfd92, 0xfdc7,\r
-  0xfdf0, 0xfdfc,\r
-  0xfe70, 0xfe74,\r
-  0xfe76, 0xfefc\r
-}; /* CR_Arabic */\r
-\r
-/* 'Armenian': Script */\r
-static const OnigCodePoint CR_Armenian[] = {\r
-  5,\r
-  0x0531, 0x0556,\r
-  0x0559, 0x055f,\r
-  0x0561, 0x0587,\r
-  0x058a, 0x058a,\r
-  0xfb13, 0xfb17\r
-}; /* CR_Armenian */\r
-\r
-/* 'Bengali': Script */\r
-static const OnigCodePoint CR_Bengali[] = {\r
-  14,\r
-  0x0981, 0x0983,\r
-  0x0985, 0x098c,\r
-  0x098f, 0x0990,\r
-  0x0993, 0x09a8,\r
-  0x09aa, 0x09b0,\r
-  0x09b2, 0x09b2,\r
-  0x09b6, 0x09b9,\r
-  0x09bc, 0x09c4,\r
-  0x09c7, 0x09c8,\r
-  0x09cb, 0x09ce,\r
-  0x09d7, 0x09d7,\r
-  0x09dc, 0x09dd,\r
-  0x09df, 0x09e3,\r
-  0x09e6, 0x09fa\r
-}; /* CR_Bengali */\r
-\r
-/* 'Bopomofo': Script */\r
-static const OnigCodePoint CR_Bopomofo[] = {\r
-  2,\r
-  0x3105, 0x312c,\r
-  0x31a0, 0x31b7\r
-}; /* CR_Bopomofo */\r
-\r
-/* 'Braille': Script */\r
-static const OnigCodePoint CR_Braille[] = {\r
-  1,\r
-  0x2800, 0x28ff\r
-}; /* CR_Braille */\r
-\r
-/* 'Buginese': Script */\r
-static const OnigCodePoint CR_Buginese[] = {\r
-  2,\r
-  0x1a00, 0x1a1b,\r
-  0x1a1e, 0x1a1f\r
-}; /* CR_Buginese */\r
-\r
-/* 'Buhid': Script */\r
-static const OnigCodePoint CR_Buhid[] = {\r
-  1,\r
-  0x1740, 0x1753\r
-}; /* CR_Buhid */\r
-\r
-/* 'Canadian_Aboriginal': Script */\r
-static const OnigCodePoint CR_Canadian_Aboriginal[] = {\r
-  1,\r
-  0x1401, 0x1676\r
-}; /* CR_Canadian_Aboriginal */\r
-\r
-/* 'Cherokee': Script */\r
-static const OnigCodePoint CR_Cherokee[] = {\r
-  1,\r
-  0x13a0, 0x13f4\r
-}; /* CR_Cherokee */\r
-\r
-/* 'Common': Script */\r
-static const OnigCodePoint CR_Common[] = {\r
-  126,\r
-  0x0000, 0x0040,\r
-  0x005b, 0x0060,\r
-  0x007b, 0x00a9,\r
-  0x00ab, 0x00b9,\r
-  0x00bb, 0x00bf,\r
-  0x00d7, 0x00d7,\r
-  0x00f7, 0x00f7,\r
-  0x02b9, 0x02df,\r
-  0x02e5, 0x02ff,\r
-  0x037e, 0x037e,\r
-  0x0387, 0x0387,\r
-  0x0589, 0x0589,\r
-  0x0600, 0x0603,\r
-  0x060c, 0x060c,\r
-  0x061b, 0x061b,\r
-  0x061f, 0x061f,\r
-  0x0640, 0x0640,\r
-  0x0660, 0x0669,\r
-  0x06dd, 0x06dd,\r
-  0x0964, 0x0965,\r
-  0x0970, 0x0970,\r
-  0x0e3f, 0x0e3f,\r
-  0x10fb, 0x10fb,\r
-  0x16eb, 0x16ed,\r
-  0x1735, 0x1736,\r
-  0x2000, 0x200b,\r
-  0x200e, 0x2063,\r
-  0x206a, 0x2070,\r
-  0x2074, 0x207e,\r
-  0x2080, 0x208e,\r
-  0x20a0, 0x20b5,\r
-  0x2100, 0x2125,\r
-  0x2127, 0x2129,\r
-  0x212c, 0x214c,\r
-  0x2153, 0x2183,\r
-  0x2190, 0x23db,\r
-  0x2400, 0x2426,\r
-  0x2440, 0x244a,\r
-  0x2460, 0x269c,\r
-  0x26a0, 0x26b1,\r
-  0x2701, 0x2704,\r
-  0x2706, 0x2709,\r
-  0x270c, 0x2727,\r
-  0x2729, 0x274b,\r
-  0x274d, 0x274d,\r
-  0x274f, 0x2752,\r
-  0x2756, 0x2756,\r
-  0x2758, 0x275e,\r
-  0x2761, 0x2794,\r
-  0x2798, 0x27af,\r
-  0x27b1, 0x27be,\r
-  0x27c0, 0x27c6,\r
-  0x27d0, 0x27eb,\r
-  0x27f0, 0x27ff,\r
-  0x2900, 0x2b13,\r
-  0x2e00, 0x2e17,\r
-  0x2e1c, 0x2e1d,\r
-  0x2ff0, 0x2ffb,\r
-  0x3000, 0x3004,\r
-  0x3006, 0x3006,\r
-  0x3008, 0x3020,\r
-  0x3030, 0x3037,\r
-  0x303c, 0x303f,\r
-  0x309b, 0x309c,\r
-  0x30a0, 0x30a0,\r
-  0x30fb, 0x30fc,\r
-  0x3190, 0x319f,\r
-  0x31c0, 0x31cf,\r
-  0x3220, 0x3243,\r
-  0x3250, 0x325f,\r
-  0x327e, 0x32fe,\r
-  0x3300, 0x33ff,\r
-  0x4dc0, 0x4dff,\r
-  0xa700, 0xa716,\r
-  0xe000, 0xf8ff,\r
-  0xfd3e, 0xfd3f,\r
-  0xfdfd, 0xfdfd,\r
-  0xfe10, 0xfe19,\r
-  0xfe30, 0xfe52,\r
-  0xfe54, 0xfe66,\r
-  0xfe68, 0xfe6b,\r
-  0xfeff, 0xfeff,\r
-  0xff01, 0xff20,\r
-  0xff3b, 0xff40,\r
-  0xff5b, 0xff65,\r
-  0xff70, 0xff70,\r
-  0xff9e, 0xff9f,\r
-  0xffe0, 0xffe6,\r
-  0xffe8, 0xffee,\r
-  0xfff9, 0xfffd,\r
-  0x10100, 0x10102,\r
-  0x10107, 0x10133,\r
-  0x10137, 0x1013f,\r
-  0x1d000, 0x1d0f5,\r
-  0x1d100, 0x1d126,\r
-  0x1d12a, 0x1d166,\r
-  0x1d16a, 0x1d17a,\r
-  0x1d183, 0x1d184,\r
-  0x1d18c, 0x1d1a9,\r
-  0x1d1ae, 0x1d1dd,\r
-  0x1d300, 0x1d356,\r
-  0x1d400, 0x1d454,\r
-  0x1d456, 0x1d49c,\r
-  0x1d49e, 0x1d49f,\r
-  0x1d4a2, 0x1d4a2,\r
-  0x1d4a5, 0x1d4a6,\r
-  0x1d4a9, 0x1d4ac,\r
-  0x1d4ae, 0x1d4b9,\r
-  0x1d4bb, 0x1d4bb,\r
-  0x1d4bd, 0x1d4c3,\r
-  0x1d4c5, 0x1d505,\r
-  0x1d507, 0x1d50a,\r
-  0x1d50d, 0x1d514,\r
-  0x1d516, 0x1d51c,\r
-  0x1d51e, 0x1d539,\r
-  0x1d53b, 0x1d53e,\r
-  0x1d540, 0x1d544,\r
-  0x1d546, 0x1d546,\r
-  0x1d54a, 0x1d550,\r
-  0x1d552, 0x1d6a5,\r
-  0x1d6a8, 0x1d7c9,\r
-  0x1d7ce, 0x1d7ff,\r
-  0xe0001, 0xe0001,\r
-  0xe0020, 0xe007f,\r
-  0xf0000, 0xffffd,\r
-  0x100000, 0x10fffd\r
-}; /* CR_Common */\r
-\r
-/* 'Coptic': Script */\r
-static const OnigCodePoint CR_Coptic[] = {\r
-  3,\r
-  0x03e2, 0x03ef,\r
-  0x2c80, 0x2cea,\r
-  0x2cf9, 0x2cff\r
-}; /* CR_Coptic */\r
-\r
-/* 'Cypriot': Script */\r
-static const OnigCodePoint CR_Cypriot[] = {\r
-  6,\r
-  0x10800, 0x10805,\r
-  0x10808, 0x10808,\r
-  0x1080a, 0x10835,\r
-  0x10837, 0x10838,\r
-  0x1083c, 0x1083c,\r
-  0x1083f, 0x1083f\r
-}; /* CR_Cypriot */\r
-\r
-/* 'Cyrillic': Script */\r
-static const OnigCodePoint CR_Cyrillic[] = {\r
-  6,\r
-  0x0400, 0x0486,\r
-  0x0488, 0x04ce,\r
-  0x04d0, 0x04f9,\r
-  0x0500, 0x050f,\r
-  0x1d2b, 0x1d2b,\r
-  0x1d78, 0x1d78\r
-}; /* CR_Cyrillic */\r
-\r
-/* 'Deseret': Script */\r
-static const OnigCodePoint CR_Deseret[] = {\r
-  1,\r
-  0x10400, 0x1044f\r
-}; /* CR_Deseret */\r
-\r
-/* 'Devanagari': Script */\r
-static const OnigCodePoint CR_Devanagari[] = {\r
-  6,\r
-  0x0901, 0x0939,\r
-  0x093c, 0x094d,\r
-  0x0950, 0x0954,\r
-  0x0958, 0x0963,\r
-  0x0966, 0x096f,\r
-  0x097d, 0x097d\r
-}; /* CR_Devanagari */\r
-\r
-/* 'Ethiopic': Script */\r
-static const OnigCodePoint CR_Ethiopic[] = {\r
-  27,\r
-  0x1200, 0x1248,\r
-  0x124a, 0x124d,\r
-  0x1250, 0x1256,\r
-  0x1258, 0x1258,\r
-  0x125a, 0x125d,\r
-  0x1260, 0x1288,\r
-  0x128a, 0x128d,\r
-  0x1290, 0x12b0,\r
-  0x12b2, 0x12b5,\r
-  0x12b8, 0x12be,\r
-  0x12c0, 0x12c0,\r
-  0x12c2, 0x12c5,\r
-  0x12c8, 0x12d6,\r
-  0x12d8, 0x1310,\r
-  0x1312, 0x1315,\r
-  0x1318, 0x135a,\r
-  0x135f, 0x137c,\r
-  0x1380, 0x1399,\r
-  0x2d80, 0x2d96,\r
-  0x2da0, 0x2da6,\r
-  0x2da8, 0x2dae,\r
-  0x2db0, 0x2db6,\r
-  0x2db8, 0x2dbe,\r
-  0x2dc0, 0x2dc6,\r
-  0x2dc8, 0x2dce,\r
-  0x2dd0, 0x2dd6,\r
-  0x2dd8, 0x2dde\r
-}; /* CR_Ethiopic */\r
-\r
-/* 'Georgian': Script */\r
-static const OnigCodePoint CR_Georgian[] = {\r
-  4,\r
-  0x10a0, 0x10c5,\r
-  0x10d0, 0x10fa,\r
-  0x10fc, 0x10fc,\r
-  0x2d00, 0x2d25\r
-}; /* CR_Georgian */\r
-\r
-/* 'Glagolitic': Script */\r
-static const OnigCodePoint CR_Glagolitic[] = {\r
-  2,\r
-  0x2c00, 0x2c2e,\r
-  0x2c30, 0x2c5e\r
-}; /* CR_Glagolitic */\r
-\r
-/* 'Gothic': Script */\r
-static const OnigCodePoint CR_Gothic[] = {\r
-  1,\r
-  0x10330, 0x1034a\r
-}; /* CR_Gothic */\r
-\r
-/* 'Greek': Script */\r
-static const OnigCodePoint CR_Greek[] = {\r
-  31,\r
-  0x0374, 0x0375,\r
-  0x037a, 0x037a,\r
-  0x0384, 0x0386,\r
-  0x0388, 0x038a,\r
-  0x038c, 0x038c,\r
-  0x038e, 0x03a1,\r
-  0x03a3, 0x03ce,\r
-  0x03d0, 0x03e1,\r
-  0x03f0, 0x03ff,\r
-  0x1d26, 0x1d2a,\r
-  0x1d5d, 0x1d61,\r
-  0x1d66, 0x1d6a,\r
-  0x1f00, 0x1f15,\r
-  0x1f18, 0x1f1d,\r
-  0x1f20, 0x1f45,\r
-  0x1f48, 0x1f4d,\r
-  0x1f50, 0x1f57,\r
-  0x1f59, 0x1f59,\r
-  0x1f5b, 0x1f5b,\r
-  0x1f5d, 0x1f5d,\r
-  0x1f5f, 0x1f7d,\r
-  0x1f80, 0x1fb4,\r
-  0x1fb6, 0x1fc4,\r
-  0x1fc6, 0x1fd3,\r
-  0x1fd6, 0x1fdb,\r
-  0x1fdd, 0x1fef,\r
-  0x1ff2, 0x1ff4,\r
-  0x1ff6, 0x1ffe,\r
-  0x2126, 0x2126,\r
-  0x10140, 0x1018a,\r
-  0x1d200, 0x1d245\r
-}; /* CR_Greek */\r
-\r
-/* 'Gujarati': Script */\r
-static const OnigCodePoint CR_Gujarati[] = {\r
-  14,\r
-  0x0a81, 0x0a83,\r
-  0x0a85, 0x0a8d,\r
-  0x0a8f, 0x0a91,\r
-  0x0a93, 0x0aa8,\r
-  0x0aaa, 0x0ab0,\r
-  0x0ab2, 0x0ab3,\r
-  0x0ab5, 0x0ab9,\r
-  0x0abc, 0x0ac5,\r
-  0x0ac7, 0x0ac9,\r
-  0x0acb, 0x0acd,\r
-  0x0ad0, 0x0ad0,\r
-  0x0ae0, 0x0ae3,\r
-  0x0ae6, 0x0aef,\r
-  0x0af1, 0x0af1\r
-}; /* CR_Gujarati */\r
-\r
-/* 'Gurmukhi': Script */\r
-static const OnigCodePoint CR_Gurmukhi[] = {\r
-  15,\r
-  0x0a01, 0x0a03,\r
-  0x0a05, 0x0a0a,\r
-  0x0a0f, 0x0a10,\r
-  0x0a13, 0x0a28,\r
-  0x0a2a, 0x0a30,\r
-  0x0a32, 0x0a33,\r
-  0x0a35, 0x0a36,\r
-  0x0a38, 0x0a39,\r
-  0x0a3c, 0x0a3c,\r
-  0x0a3e, 0x0a42,\r
-  0x0a47, 0x0a48,\r
-  0x0a4b, 0x0a4d,\r
-  0x0a59, 0x0a5c,\r
-  0x0a5e, 0x0a5e,\r
-  0x0a66, 0x0a74\r
-}; /* CR_Gurmukhi */\r
-\r
-/* 'Han': Script */\r
-static const OnigCodePoint CR_Han[] = {\r
-  14,\r
-  0x2e80, 0x2e99,\r
-  0x2e9b, 0x2ef3,\r
-  0x2f00, 0x2fd5,\r
-  0x3005, 0x3005,\r
-  0x3007, 0x3007,\r
-  0x3021, 0x3029,\r
-  0x3038, 0x303b,\r
-  0x3400, 0x4db5,\r
-  0x4e00, 0x9fbb,\r
-  0xf900, 0xfa2d,\r
-  0xfa30, 0xfa6a,\r
-  0xfa70, 0xfad9,\r
-  0x20000, 0x2a6d6,\r
-  0x2f800, 0x2fa1d\r
-}; /* CR_Han */\r
-\r
-/* 'Hangul': Script */\r
-static const OnigCodePoint CR_Hangul[] = {\r
-  12,\r
-  0x1100, 0x1159,\r
-  0x115f, 0x11a2,\r
-  0x11a8, 0x11f9,\r
-  0x3131, 0x318e,\r
-  0x3200, 0x321e,\r
-  0x3260, 0x327d,\r
-  0xac00, 0xd7a3,\r
-  0xffa0, 0xffbe,\r
-  0xffc2, 0xffc7,\r
-  0xffca, 0xffcf,\r
-  0xffd2, 0xffd7,\r
-  0xffda, 0xffdc\r
-}; /* CR_Hangul */\r
-\r
-/* 'Hanunoo': Script */\r
-static const OnigCodePoint CR_Hanunoo[] = {\r
-  1,\r
-  0x1720, 0x1734\r
-}; /* CR_Hanunoo */\r
-\r
-/* 'Hebrew': Script */\r
-static const OnigCodePoint CR_Hebrew[] = {\r
-  10,\r
-  0x0591, 0x05b9,\r
-  0x05bb, 0x05c7,\r
-  0x05d0, 0x05ea,\r
-  0x05f0, 0x05f4,\r
-  0xfb1d, 0xfb36,\r
-  0xfb38, 0xfb3c,\r
-  0xfb3e, 0xfb3e,\r
-  0xfb40, 0xfb41,\r
-  0xfb43, 0xfb44,\r
-  0xfb46, 0xfb4f\r
-}; /* CR_Hebrew */\r
-\r
-/* 'Hiragana': Script */\r
-static const OnigCodePoint CR_Hiragana[] = {\r
-  2,\r
-  0x3041, 0x3096,\r
-  0x309d, 0x309f\r
-}; /* CR_Hiragana */\r
-\r
-/* 'Inherited': Script */\r
-static const OnigCodePoint CR_Inherited[] = {\r
-  15,\r
-  0x0300, 0x036f,\r
-  0x064b, 0x0655,\r
-  0x0670, 0x0670,\r
-  0x1dc0, 0x1dc3,\r
-  0x200c, 0x200d,\r
-  0x20d0, 0x20eb,\r
-  0x302a, 0x302f,\r
-  0x3099, 0x309a,\r
-  0xfe00, 0xfe0f,\r
-  0xfe20, 0xfe23,\r
-  0x1d167, 0x1d169,\r
-  0x1d17b, 0x1d182,\r
-  0x1d185, 0x1d18b,\r
-  0x1d1aa, 0x1d1ad,\r
-  0xe0100, 0xe01ef\r
-}; /* CR_Inherited */\r
-\r
-/* 'Kannada': Script */\r
-static const OnigCodePoint CR_Kannada[] = {\r
-  13,\r
-  0x0c82, 0x0c83,\r
-  0x0c85, 0x0c8c,\r
-  0x0c8e, 0x0c90,\r
-  0x0c92, 0x0ca8,\r
-  0x0caa, 0x0cb3,\r
-  0x0cb5, 0x0cb9,\r
-  0x0cbc, 0x0cc4,\r
-  0x0cc6, 0x0cc8,\r
-  0x0cca, 0x0ccd,\r
-  0x0cd5, 0x0cd6,\r
-  0x0cde, 0x0cde,\r
-  0x0ce0, 0x0ce1,\r
-  0x0ce6, 0x0cef\r
-}; /* CR_Kannada */\r
-\r
-/* 'Katakana': Script */\r
-static const OnigCodePoint CR_Katakana[] = {\r
-  5,\r
-  0x30a1, 0x30fa,\r
-  0x30fd, 0x30ff,\r
-  0x31f0, 0x31ff,\r
-  0xff66, 0xff6f,\r
-  0xff71, 0xff9d\r
-}; /* CR_Katakana */\r
-\r
-/* 'Kharoshthi': Script */\r
-static const OnigCodePoint CR_Kharoshthi[] = {\r
-  8,\r
-  0x10a00, 0x10a03,\r
-  0x10a05, 0x10a06,\r
-  0x10a0c, 0x10a13,\r
-  0x10a15, 0x10a17,\r
-  0x10a19, 0x10a33,\r
-  0x10a38, 0x10a3a,\r
-  0x10a3f, 0x10a47,\r
-  0x10a50, 0x10a58\r
-}; /* CR_Kharoshthi */\r
-\r
-/* 'Khmer': Script */\r
-static const OnigCodePoint CR_Khmer[] = {\r
-  4,\r
-  0x1780, 0x17dd,\r
-  0x17e0, 0x17e9,\r
-  0x17f0, 0x17f9,\r
-  0x19e0, 0x19ff\r
-}; /* CR_Khmer */\r
-\r
-/* 'Lao': Script */\r
-static const OnigCodePoint CR_Lao[] = {\r
-  18,\r
-  0x0e81, 0x0e82,\r
-  0x0e84, 0x0e84,\r
-  0x0e87, 0x0e88,\r
-  0x0e8a, 0x0e8a,\r
-  0x0e8d, 0x0e8d,\r
-  0x0e94, 0x0e97,\r
-  0x0e99, 0x0e9f,\r
-  0x0ea1, 0x0ea3,\r
-  0x0ea5, 0x0ea5,\r
-  0x0ea7, 0x0ea7,\r
-  0x0eaa, 0x0eab,\r
-  0x0ead, 0x0eb9,\r
-  0x0ebb, 0x0ebd,\r
-  0x0ec0, 0x0ec4,\r
-  0x0ec6, 0x0ec6,\r
-  0x0ec8, 0x0ecd,\r
-  0x0ed0, 0x0ed9,\r
-  0x0edc, 0x0edd\r
-}; /* CR_Lao */\r
-\r
-/* 'Latin': Script */\r
-static const OnigCodePoint CR_Latin[] = {\r
-  23,\r
-  0x0041, 0x005a,\r
-  0x0061, 0x007a,\r
-  0x00aa, 0x00aa,\r
-  0x00ba, 0x00ba,\r
-  0x00c0, 0x00d6,\r
-  0x00d8, 0x00f6,\r
-  0x00f8, 0x0241,\r
-  0x0250, 0x02b8,\r
-  0x02e0, 0x02e4,\r
-  0x1d00, 0x1d25,\r
-  0x1d2c, 0x1d5c,\r
-  0x1d62, 0x1d65,\r
-  0x1d6b, 0x1d77,\r
-  0x1d79, 0x1dbf,\r
-  0x1e00, 0x1e9b,\r
-  0x1ea0, 0x1ef9,\r
-  0x2071, 0x2071,\r
-  0x207f, 0x207f,\r
-  0x2090, 0x2094,\r
-  0x212a, 0x212b,\r
-  0xfb00, 0xfb06,\r
-  0xff21, 0xff3a,\r
-  0xff41, 0xff5a\r
-}; /* CR_Latin */\r
-\r
-/* 'Limbu': Script */\r
-static const OnigCodePoint CR_Limbu[] = {\r
-  5,\r
-  0x1900, 0x191c,\r
-  0x1920, 0x192b,\r
-  0x1930, 0x193b,\r
-  0x1940, 0x1940,\r
-  0x1944, 0x194f\r
-}; /* CR_Limbu */\r
-\r
-/* 'Linear_B': Script */\r
-static const OnigCodePoint CR_Linear_B[] = {\r
-  7,\r
-  0x10000, 0x1000b,\r
-  0x1000d, 0x10026,\r
-  0x10028, 0x1003a,\r
-  0x1003c, 0x1003d,\r
-  0x1003f, 0x1004d,\r
-  0x10050, 0x1005d,\r
-  0x10080, 0x100fa\r
-}; /* CR_Linear_B */\r
-\r
-/* 'Malayalam': Script */\r
-static const OnigCodePoint CR_Malayalam[] = {\r
-  11,\r
-  0x0d02, 0x0d03,\r
-  0x0d05, 0x0d0c,\r
-  0x0d0e, 0x0d10,\r
-  0x0d12, 0x0d28,\r
-  0x0d2a, 0x0d39,\r
-  0x0d3e, 0x0d43,\r
-  0x0d46, 0x0d48,\r
-  0x0d4a, 0x0d4d,\r
-  0x0d57, 0x0d57,\r
-  0x0d60, 0x0d61,\r
-  0x0d66, 0x0d6f\r
-}; /* CR_Malayalam */\r
-\r
-/* 'Mongolian': Script */\r
-static const OnigCodePoint CR_Mongolian[] = {\r
-  4,\r
-  0x1800, 0x180e,\r
-  0x1810, 0x1819,\r
-  0x1820, 0x1877,\r
-  0x1880, 0x18a9\r
-}; /* CR_Mongolian */\r
-\r
-/* 'Myanmar': Script */\r
-static const OnigCodePoint CR_Myanmar[] = {\r
-  6,\r
-  0x1000, 0x1021,\r
-  0x1023, 0x1027,\r
-  0x1029, 0x102a,\r
-  0x102c, 0x1032,\r
-  0x1036, 0x1039,\r
-  0x1040, 0x1059\r
-}; /* CR_Myanmar */\r
-\r
-/* 'New_Tai_Lue': Script */\r
-static const OnigCodePoint CR_New_Tai_Lue[] = {\r
-  4,\r
-  0x1980, 0x19a9,\r
-  0x19b0, 0x19c9,\r
-  0x19d0, 0x19d9,\r
-  0x19de, 0x19df\r
-}; /* CR_New_Tai_Lue */\r
-\r
-/* 'Ogham': Script */\r
-static const OnigCodePoint CR_Ogham[] = {\r
-  1,\r
-  0x1680, 0x169c\r
-}; /* CR_Ogham */\r
-\r
-/* 'Old_Italic': Script */\r
-static const OnigCodePoint CR_Old_Italic[] = {\r
-  2,\r
-  0x10300, 0x1031e,\r
-  0x10320, 0x10323\r
-}; /* CR_Old_Italic */\r
-\r
-/* 'Old_Persian': Script */\r
-static const OnigCodePoint CR_Old_Persian[] = {\r
-  2,\r
-  0x103a0, 0x103c3,\r
-  0x103c8, 0x103d5\r
-}; /* CR_Old_Persian */\r
-\r
-/* 'Oriya': Script */\r
-static const OnigCodePoint CR_Oriya[] = {\r
-  14,\r
-  0x0b01, 0x0b03,\r
-  0x0b05, 0x0b0c,\r
-  0x0b0f, 0x0b10,\r
-  0x0b13, 0x0b28,\r
-  0x0b2a, 0x0b30,\r
-  0x0b32, 0x0b33,\r
-  0x0b35, 0x0b39,\r
-  0x0b3c, 0x0b43,\r
-  0x0b47, 0x0b48,\r
-  0x0b4b, 0x0b4d,\r
-  0x0b56, 0x0b57,\r
-  0x0b5c, 0x0b5d,\r
-  0x0b5f, 0x0b61,\r
-  0x0b66, 0x0b71\r
-}; /* CR_Oriya */\r
-\r
-/* 'Osmanya': Script */\r
-static const OnigCodePoint CR_Osmanya[] = {\r
-  2,\r
-  0x10480, 0x1049d,\r
-  0x104a0, 0x104a9\r
-}; /* CR_Osmanya */\r
-\r
-/* 'Runic': Script */\r
-static const OnigCodePoint CR_Runic[] = {\r
-  2,\r
-  0x16a0, 0x16ea,\r
-  0x16ee, 0x16f0\r
-}; /* CR_Runic */\r
-\r
-/* 'Shavian': Script */\r
-static const OnigCodePoint CR_Shavian[] = {\r
-  1,\r
-  0x10450, 0x1047f\r
-}; /* CR_Shavian */\r
-\r
-/* 'Sinhala': Script */\r
-static const OnigCodePoint CR_Sinhala[] = {\r
-  11,\r
-  0x0d82, 0x0d83,\r
-  0x0d85, 0x0d96,\r
-  0x0d9a, 0x0db1,\r
-  0x0db3, 0x0dbb,\r
-  0x0dbd, 0x0dbd,\r
-  0x0dc0, 0x0dc6,\r
-  0x0dca, 0x0dca,\r
-  0x0dcf, 0x0dd4,\r
-  0x0dd6, 0x0dd6,\r
-  0x0dd8, 0x0ddf,\r
-  0x0df2, 0x0df4\r
-}; /* CR_Sinhala */\r
-\r
-/* 'Syloti_Nagri': Script */\r
-static const OnigCodePoint CR_Syloti_Nagri[] = {\r
-  1,\r
-  0xa800, 0xa82b\r
-}; /* CR_Syloti_Nagri */\r
-\r
-/* 'Syriac': Script */\r
-static const OnigCodePoint CR_Syriac[] = {\r
-  3,\r
-  0x0700, 0x070d,\r
-  0x070f, 0x074a,\r
-  0x074d, 0x074f\r
-}; /* CR_Syriac */\r
-\r
-/* 'Tagalog': Script */\r
-static const OnigCodePoint CR_Tagalog[] = {\r
-  2,\r
-  0x1700, 0x170c,\r
-  0x170e, 0x1714\r
-}; /* CR_Tagalog */\r
-\r
-/* 'Tagbanwa': Script */\r
-static const OnigCodePoint CR_Tagbanwa[] = {\r
-  3,\r
-  0x1760, 0x176c,\r
-  0x176e, 0x1770,\r
-  0x1772, 0x1773\r
-}; /* CR_Tagbanwa */\r
-\r
-/* 'Tai_Le': Script */\r
-static const OnigCodePoint CR_Tai_Le[] = {\r
-  2,\r
-  0x1950, 0x196d,\r
-  0x1970, 0x1974\r
-}; /* CR_Tai_Le */\r
-\r
-/* 'Tamil': Script */\r
-static const OnigCodePoint CR_Tamil[] = {\r
-  15,\r
-  0x0b82, 0x0b83,\r
-  0x0b85, 0x0b8a,\r
-  0x0b8e, 0x0b90,\r
-  0x0b92, 0x0b95,\r
-  0x0b99, 0x0b9a,\r
-  0x0b9c, 0x0b9c,\r
-  0x0b9e, 0x0b9f,\r
-  0x0ba3, 0x0ba4,\r
-  0x0ba8, 0x0baa,\r
-  0x0bae, 0x0bb9,\r
-  0x0bbe, 0x0bc2,\r
-  0x0bc6, 0x0bc8,\r
-  0x0bca, 0x0bcd,\r
-  0x0bd7, 0x0bd7,\r
-  0x0be6, 0x0bfa\r
-}; /* CR_Tamil */\r
-\r
-/* 'Telugu': Script */\r
-static const OnigCodePoint CR_Telugu[] = {\r
-  12,\r
-  0x0c01, 0x0c03,\r
-  0x0c05, 0x0c0c,\r
-  0x0c0e, 0x0c10,\r
-  0x0c12, 0x0c28,\r
-  0x0c2a, 0x0c33,\r
-  0x0c35, 0x0c39,\r
-  0x0c3e, 0x0c44,\r
-  0x0c46, 0x0c48,\r
-  0x0c4a, 0x0c4d,\r
-  0x0c55, 0x0c56,\r
-  0x0c60, 0x0c61,\r
-  0x0c66, 0x0c6f\r
-}; /* CR_Telugu */\r
-\r
-/* 'Thaana': Script */\r
-static const OnigCodePoint CR_Thaana[] = {\r
-  1,\r
-  0x0780, 0x07b1\r
-}; /* CR_Thaana */\r
-\r
-/* 'Thai': Script */\r
-static const OnigCodePoint CR_Thai[] = {\r
-  2,\r
-  0x0e01, 0x0e3a,\r
-  0x0e40, 0x0e5b\r
-}; /* CR_Thai */\r
-\r
-/* 'Tibetan': Script */\r
-static const OnigCodePoint CR_Tibetan[] = {\r
-  7,\r
-  0x0f00, 0x0f47,\r
-  0x0f49, 0x0f6a,\r
-  0x0f71, 0x0f8b,\r
-  0x0f90, 0x0f97,\r
-  0x0f99, 0x0fbc,\r
-  0x0fbe, 0x0fcc,\r
-  0x0fcf, 0x0fd1\r
-}; /* CR_Tibetan */\r
-\r
-/* 'Tifinagh': Script */\r
-static const OnigCodePoint CR_Tifinagh[] = {\r
-  2,\r
-  0x2d30, 0x2d65,\r
-  0x2d6f, 0x2d6f\r
-}; /* CR_Tifinagh */\r
-\r
-/* 'Ugaritic': Script */\r
-static const OnigCodePoint CR_Ugaritic[] = {\r
-  2,\r
-  0x10380, 0x1039d,\r
-  0x1039f, 0x1039f\r
-}; /* CR_Ugaritic */\r
-\r
-/* 'Yi': Script */\r
-static const OnigCodePoint CR_Yi[] = {\r
-  2,\r
-  0xa000, 0xa48c,\r
-  0xa490, 0xa4c6\r
-}; /* CR_Yi */\r
-\r
-\r
-#endif /* USE_UNICODE_PROPERTIES */\r
-\r
-\r
-typedef struct {\r
-  int n;\r
-  OnigCodePoint code[3];\r
-} CodePointList3;\r
-\r
-typedef struct {\r
-  OnigCodePoint  from;\r
-  CodePointList3 to;\r
-} CaseFold_11_Type;\r
-\r
-typedef struct {\r
-  OnigCodePoint  from;\r
-  CodePointList3 to;\r
-} CaseUnfold_11_Type;\r
-\r
-typedef struct {\r
-  int n;\r
-  OnigCodePoint code[2];\r
-} CodePointList2;\r
-\r
-typedef struct {\r
-  OnigCodePoint  from[2];\r
-  CodePointList2 to;\r
-} CaseUnfold_12_Type;\r
-\r
-typedef struct {\r
-  OnigCodePoint  from[3];\r
-  CodePointList2 to;\r
-} CaseUnfold_13_Type;\r
-\r
-static const CaseFold_11_Type CaseFold[] = {\r
- { 0x0041, {1, {0x0061}}},\r
- { 0x0042, {1, {0x0062}}},\r
- { 0x0043, {1, {0x0063}}},\r
- { 0x0044, {1, {0x0064}}},\r
- { 0x0045, {1, {0x0065}}},\r
- { 0x0046, {1, {0x0066}}},\r
- { 0x0047, {1, {0x0067}}},\r
- { 0x0048, {1, {0x0068}}},\r
- { 0x004a, {1, {0x006a}}},\r
- { 0x004b, {1, {0x006b}}},\r
- { 0x004c, {1, {0x006c}}},\r
- { 0x004d, {1, {0x006d}}},\r
- { 0x004e, {1, {0x006e}}},\r
- { 0x004f, {1, {0x006f}}},\r
- { 0x0050, {1, {0x0070}}},\r
- { 0x0051, {1, {0x0071}}},\r
- { 0x0052, {1, {0x0072}}},\r
- { 0x0053, {1, {0x0073}}},\r
- { 0x0054, {1, {0x0074}}},\r
- { 0x0055, {1, {0x0075}}},\r
- { 0x0056, {1, {0x0076}}},\r
- { 0x0057, {1, {0x0077}}},\r
- { 0x0058, {1, {0x0078}}},\r
- { 0x0059, {1, {0x0079}}},\r
- { 0x005a, {1, {0x007a}}},\r
- { 0x00b5, {1, {0x03bc}}},\r
- { 0x00c0, {1, {0x00e0}}},\r
- { 0x00c1, {1, {0x00e1}}},\r
- { 0x00c2, {1, {0x00e2}}},\r
- { 0x00c3, {1, {0x00e3}}},\r
- { 0x00c4, {1, {0x00e4}}},\r
- { 0x00c5, {1, {0x00e5}}},\r
- { 0x00c6, {1, {0x00e6}}},\r
- { 0x00c7, {1, {0x00e7}}},\r
- { 0x00c8, {1, {0x00e8}}},\r
- { 0x00c9, {1, {0x00e9}}},\r
- { 0x00ca, {1, {0x00ea}}},\r
- { 0x00cb, {1, {0x00eb}}},\r
- { 0x00cc, {1, {0x00ec}}},\r
- { 0x00cd, {1, {0x00ed}}},\r
- { 0x00ce, {1, {0x00ee}}},\r
- { 0x00cf, {1, {0x00ef}}},\r
- { 0x00d0, {1, {0x00f0}}},\r
- { 0x00d1, {1, {0x00f1}}},\r
- { 0x00d2, {1, {0x00f2}}},\r
- { 0x00d3, {1, {0x00f3}}},\r
- { 0x00d4, {1, {0x00f4}}},\r
- { 0x00d5, {1, {0x00f5}}},\r
- { 0x00d6, {1, {0x00f6}}},\r
- { 0x00d8, {1, {0x00f8}}},\r
- { 0x00d9, {1, {0x00f9}}},\r
- { 0x00da, {1, {0x00fa}}},\r
- { 0x00db, {1, {0x00fb}}},\r
- { 0x00dc, {1, {0x00fc}}},\r
- { 0x00dd, {1, {0x00fd}}},\r
- { 0x00de, {1, {0x00fe}}},\r
- { 0x00df, {2, {0x0073, 0x0073}}},\r
- { 0x0100, {1, {0x0101}}},\r
- { 0x0102, {1, {0x0103}}},\r
- { 0x0104, {1, {0x0105}}},\r
- { 0x0106, {1, {0x0107}}},\r
- { 0x0108, {1, {0x0109}}},\r
- { 0x010a, {1, {0x010b}}},\r
- { 0x010c, {1, {0x010d}}},\r
- { 0x010e, {1, {0x010f}}},\r
- { 0x0110, {1, {0x0111}}},\r
- { 0x0112, {1, {0x0113}}},\r
- { 0x0114, {1, {0x0115}}},\r
- { 0x0116, {1, {0x0117}}},\r
- { 0x0118, {1, {0x0119}}},\r
- { 0x011a, {1, {0x011b}}},\r
- { 0x011c, {1, {0x011d}}},\r
- { 0x011e, {1, {0x011f}}},\r
- { 0x0120, {1, {0x0121}}},\r
- { 0x0122, {1, {0x0123}}},\r
- { 0x0124, {1, {0x0125}}},\r
- { 0x0126, {1, {0x0127}}},\r
- { 0x0128, {1, {0x0129}}},\r
- { 0x012a, {1, {0x012b}}},\r
- { 0x012c, {1, {0x012d}}},\r
- { 0x012e, {1, {0x012f}}},\r
- { 0x0132, {1, {0x0133}}},\r
- { 0x0134, {1, {0x0135}}},\r
- { 0x0136, {1, {0x0137}}},\r
- { 0x0139, {1, {0x013a}}},\r
- { 0x013b, {1, {0x013c}}},\r
- { 0x013d, {1, {0x013e}}},\r
- { 0x013f, {1, {0x0140}}},\r
- { 0x0141, {1, {0x0142}}},\r
- { 0x0143, {1, {0x0144}}},\r
- { 0x0145, {1, {0x0146}}},\r
- { 0x0147, {1, {0x0148}}},\r
- { 0x0149, {2, {0x02bc, 0x006e}}},\r
- { 0x014a, {1, {0x014b}}},\r
- { 0x014c, {1, {0x014d}}},\r
- { 0x014e, {1, {0x014f}}},\r
- { 0x0150, {1, {0x0151}}},\r
- { 0x0152, {1, {0x0153}}},\r
- { 0x0154, {1, {0x0155}}},\r
- { 0x0156, {1, {0x0157}}},\r
- { 0x0158, {1, {0x0159}}},\r
- { 0x015a, {1, {0x015b}}},\r
- { 0x015c, {1, {0x015d}}},\r
- { 0x015e, {1, {0x015f}}},\r
- { 0x0160, {1, {0x0161}}},\r
- { 0x0162, {1, {0x0163}}},\r
- { 0x0164, {1, {0x0165}}},\r
- { 0x0166, {1, {0x0167}}},\r
- { 0x0168, {1, {0x0169}}},\r
- { 0x016a, {1, {0x016b}}},\r
- { 0x016c, {1, {0x016d}}},\r
- { 0x016e, {1, {0x016f}}},\r
- { 0x0170, {1, {0x0171}}},\r
- { 0x0172, {1, {0x0173}}},\r
- { 0x0174, {1, {0x0175}}},\r
- { 0x0176, {1, {0x0177}}},\r
- { 0x0178, {1, {0x00ff}}},\r
- { 0x0179, {1, {0x017a}}},\r
- { 0x017b, {1, {0x017c}}},\r
- { 0x017d, {1, {0x017e}}},\r
- { 0x017f, {1, {0x0073}}},\r
- { 0x0181, {1, {0x0253}}},\r
- { 0x0182, {1, {0x0183}}},\r
- { 0x0184, {1, {0x0185}}},\r
- { 0x0186, {1, {0x0254}}},\r
- { 0x0187, {1, {0x0188}}},\r
- { 0x0189, {1, {0x0256}}},\r
- { 0x018a, {1, {0x0257}}},\r
- { 0x018b, {1, {0x018c}}},\r
- { 0x018e, {1, {0x01dd}}},\r
- { 0x018f, {1, {0x0259}}},\r
- { 0x0190, {1, {0x025b}}},\r
- { 0x0191, {1, {0x0192}}},\r
- { 0x0193, {1, {0x0260}}},\r
- { 0x0194, {1, {0x0263}}},\r
- { 0x0196, {1, {0x0269}}},\r
- { 0x0197, {1, {0x0268}}},\r
- { 0x0198, {1, {0x0199}}},\r
- { 0x019c, {1, {0x026f}}},\r
- { 0x019d, {1, {0x0272}}},\r
- { 0x019f, {1, {0x0275}}},\r
- { 0x01a0, {1, {0x01a1}}},\r
- { 0x01a2, {1, {0x01a3}}},\r
- { 0x01a4, {1, {0x01a5}}},\r
- { 0x01a6, {1, {0x0280}}},\r
- { 0x01a7, {1, {0x01a8}}},\r
- { 0x01a9, {1, {0x0283}}},\r
- { 0x01ac, {1, {0x01ad}}},\r
- { 0x01ae, {1, {0x0288}}},\r
- { 0x01af, {1, {0x01b0}}},\r
- { 0x01b1, {1, {0x028a}}},\r
- { 0x01b2, {1, {0x028b}}},\r
- { 0x01b3, {1, {0x01b4}}},\r
- { 0x01b5, {1, {0x01b6}}},\r
- { 0x01b7, {1, {0x0292}}},\r
- { 0x01b8, {1, {0x01b9}}},\r
- { 0x01bc, {1, {0x01bd}}},\r
- { 0x01c4, {1, {0x01c6}}},\r
- { 0x01c5, {1, {0x01c6}}},\r
- { 0x01c7, {1, {0x01c9}}},\r
- { 0x01c8, {1, {0x01c9}}},\r
- { 0x01ca, {1, {0x01cc}}},\r
- { 0x01cb, {1, {0x01cc}}},\r
- { 0x01cd, {1, {0x01ce}}},\r
- { 0x01cf, {1, {0x01d0}}},\r
- { 0x01d1, {1, {0x01d2}}},\r
- { 0x01d3, {1, {0x01d4}}},\r
- { 0x01d5, {1, {0x01d6}}},\r
- { 0x01d7, {1, {0x01d8}}},\r
- { 0x01d9, {1, {0x01da}}},\r
- { 0x01db, {1, {0x01dc}}},\r
- { 0x01de, {1, {0x01df}}},\r
- { 0x01e0, {1, {0x01e1}}},\r
- { 0x01e2, {1, {0x01e3}}},\r
- { 0x01e4, {1, {0x01e5}}},\r
- { 0x01e6, {1, {0x01e7}}},\r
- { 0x01e8, {1, {0x01e9}}},\r
- { 0x01ea, {1, {0x01eb}}},\r
- { 0x01ec, {1, {0x01ed}}},\r
- { 0x01ee, {1, {0x01ef}}},\r
- { 0x01f0, {2, {0x006a, 0x030c}}},\r
- { 0x01f1, {1, {0x01f3}}},\r
- { 0x01f2, {1, {0x01f3}}},\r
- { 0x01f4, {1, {0x01f5}}},\r
- { 0x01f6, {1, {0x0195}}},\r
- { 0x01f7, {1, {0x01bf}}},\r
- { 0x01f8, {1, {0x01f9}}},\r
- { 0x01fa, {1, {0x01fb}}},\r
- { 0x01fc, {1, {0x01fd}}},\r
- { 0x01fe, {1, {0x01ff}}},\r
- { 0x0200, {1, {0x0201}}},\r
- { 0x0202, {1, {0x0203}}},\r
- { 0x0204, {1, {0x0205}}},\r
- { 0x0206, {1, {0x0207}}},\r
- { 0x0208, {1, {0x0209}}},\r
- { 0x020a, {1, {0x020b}}},\r
- { 0x020c, {1, {0x020d}}},\r
- { 0x020e, {1, {0x020f}}},\r
- { 0x0210, {1, {0x0211}}},\r
- { 0x0212, {1, {0x0213}}},\r
- { 0x0214, {1, {0x0215}}},\r
- { 0x0216, {1, {0x0217}}},\r
- { 0x0218, {1, {0x0219}}},\r
- { 0x021a, {1, {0x021b}}},\r
- { 0x021c, {1, {0x021d}}},\r
- { 0x021e, {1, {0x021f}}},\r
- { 0x0220, {1, {0x019e}}},\r
- { 0x0222, {1, {0x0223}}},\r
- { 0x0224, {1, {0x0225}}},\r
- { 0x0226, {1, {0x0227}}},\r
- { 0x0228, {1, {0x0229}}},\r
- { 0x022a, {1, {0x022b}}},\r
- { 0x022c, {1, {0x022d}}},\r
- { 0x022e, {1, {0x022f}}},\r
- { 0x0230, {1, {0x0231}}},\r
- { 0x0232, {1, {0x0233}}},\r
- { 0x023b, {1, {0x023c}}},\r
- { 0x023d, {1, {0x019a}}},\r
- { 0x0241, {1, {0x0294}}},\r
- { 0x0345, {1, {0x03b9}}},\r
- { 0x0386, {1, {0x03ac}}},\r
- { 0x0388, {1, {0x03ad}}},\r
- { 0x0389, {1, {0x03ae}}},\r
- { 0x038a, {1, {0x03af}}},\r
- { 0x038c, {1, {0x03cc}}},\r
- { 0x038e, {1, {0x03cd}}},\r
- { 0x038f, {1, {0x03ce}}},\r
- { 0x0390, {3, {0x03b9, 0x0308, 0x0301}}},\r
- { 0x0391, {1, {0x03b1}}},\r
- { 0x0392, {1, {0x03b2}}},\r
- { 0x0393, {1, {0x03b3}}},\r
- { 0x0394, {1, {0x03b4}}},\r
- { 0x0395, {1, {0x03b5}}},\r
- { 0x0396, {1, {0x03b6}}},\r
- { 0x0397, {1, {0x03b7}}},\r
- { 0x0398, {1, {0x03b8}}},\r
- { 0x0399, {1, {0x03b9}}},\r
- { 0x039a, {1, {0x03ba}}},\r
- { 0x039b, {1, {0x03bb}}},\r
- { 0x039c, {1, {0x03bc}}},\r
- { 0x039d, {1, {0x03bd}}},\r
- { 0x039e, {1, {0x03be}}},\r
- { 0x039f, {1, {0x03bf}}},\r
- { 0x03a0, {1, {0x03c0}}},\r
- { 0x03a1, {1, {0x03c1}}},\r
- { 0x03a3, {1, {0x03c3}}},\r
- { 0x03a4, {1, {0x03c4}}},\r
- { 0x03a5, {1, {0x03c5}}},\r
- { 0x03a6, {1, {0x03c6}}},\r
- { 0x03a7, {1, {0x03c7}}},\r
- { 0x03a8, {1, {0x03c8}}},\r
- { 0x03a9, {1, {0x03c9}}},\r
- { 0x03aa, {1, {0x03ca}}},\r
- { 0x03ab, {1, {0x03cb}}},\r
- { 0x03b0, {3, {0x03c5, 0x0308, 0x0301}}},\r
- { 0x03c2, {1, {0x03c3}}},\r
- { 0x03d0, {1, {0x03b2}}},\r
- { 0x03d1, {1, {0x03b8}}},\r
- { 0x03d5, {1, {0x03c6}}},\r
- { 0x03d6, {1, {0x03c0}}},\r
- { 0x03d8, {1, {0x03d9}}},\r
- { 0x03da, {1, {0x03db}}},\r
- { 0x03dc, {1, {0x03dd}}},\r
- { 0x03de, {1, {0x03df}}},\r
- { 0x03e0, {1, {0x03e1}}},\r
- { 0x03e2, {1, {0x03e3}}},\r
- { 0x03e4, {1, {0x03e5}}},\r
- { 0x03e6, {1, {0x03e7}}},\r
- { 0x03e8, {1, {0x03e9}}},\r
- { 0x03ea, {1, {0x03eb}}},\r
- { 0x03ec, {1, {0x03ed}}},\r
- { 0x03ee, {1, {0x03ef}}},\r
- { 0x03f0, {1, {0x03ba}}},\r
- { 0x03f1, {1, {0x03c1}}},\r
- { 0x03f4, {1, {0x03b8}}},\r
- { 0x03f5, {1, {0x03b5}}},\r
- { 0x03f7, {1, {0x03f8}}},\r
- { 0x03f9, {1, {0x03f2}}},\r
- { 0x03fa, {1, {0x03fb}}},\r
- { 0x0400, {1, {0x0450}}},\r
- { 0x0401, {1, {0x0451}}},\r
- { 0x0402, {1, {0x0452}}},\r
- { 0x0403, {1, {0x0453}}},\r
- { 0x0404, {1, {0x0454}}},\r
- { 0x0405, {1, {0x0455}}},\r
- { 0x0406, {1, {0x0456}}},\r
- { 0x0407, {1, {0x0457}}},\r
- { 0x0408, {1, {0x0458}}},\r
- { 0x0409, {1, {0x0459}}},\r
- { 0x040a, {1, {0x045a}}},\r
- { 0x040b, {1, {0x045b}}},\r
- { 0x040c, {1, {0x045c}}},\r
- { 0x040d, {1, {0x045d}}},\r
- { 0x040e, {1, {0x045e}}},\r
- { 0x040f, {1, {0x045f}}},\r
- { 0x0410, {1, {0x0430}}},\r
- { 0x0411, {1, {0x0431}}},\r
- { 0x0412, {1, {0x0432}}},\r
- { 0x0413, {1, {0x0433}}},\r
- { 0x0414, {1, {0x0434}}},\r
- { 0x0415, {1, {0x0435}}},\r
- { 0x0416, {1, {0x0436}}},\r
- { 0x0417, {1, {0x0437}}},\r
- { 0x0418, {1, {0x0438}}},\r
- { 0x0419, {1, {0x0439}}},\r
- { 0x041a, {1, {0x043a}}},\r
- { 0x041b, {1, {0x043b}}},\r
- { 0x041c, {1, {0x043c}}},\r
- { 0x041d, {1, {0x043d}}},\r
- { 0x041e, {1, {0x043e}}},\r
- { 0x041f, {1, {0x043f}}},\r
- { 0x0420, {1, {0x0440}}},\r
- { 0x0421, {1, {0x0441}}},\r
- { 0x0422, {1, {0x0442}}},\r
- { 0x0423, {1, {0x0443}}},\r
- { 0x0424, {1, {0x0444}}},\r
- { 0x0425, {1, {0x0445}}},\r
- { 0x0426, {1, {0x0446}}},\r
- { 0x0427, {1, {0x0447}}},\r
- { 0x0428, {1, {0x0448}}},\r
- { 0x0429, {1, {0x0449}}},\r
- { 0x042a, {1, {0x044a}}},\r
- { 0x042b, {1, {0x044b}}},\r
- { 0x042c, {1, {0x044c}}},\r
- { 0x042d, {1, {0x044d}}},\r
- { 0x042e, {1, {0x044e}}},\r
- { 0x042f, {1, {0x044f}}},\r
- { 0x0460, {1, {0x0461}}},\r
- { 0x0462, {1, {0x0463}}},\r
- { 0x0464, {1, {0x0465}}},\r
- { 0x0466, {1, {0x0467}}},\r
- { 0x0468, {1, {0x0469}}},\r
- { 0x046a, {1, {0x046b}}},\r
- { 0x046c, {1, {0x046d}}},\r
- { 0x046e, {1, {0x046f}}},\r
- { 0x0470, {1, {0x0471}}},\r
- { 0x0472, {1, {0x0473}}},\r
- { 0x0474, {1, {0x0475}}},\r
- { 0x0476, {1, {0x0477}}},\r
- { 0x0478, {1, {0x0479}}},\r
- { 0x047a, {1, {0x047b}}},\r
- { 0x047c, {1, {0x047d}}},\r
- { 0x047e, {1, {0x047f}}},\r
- { 0x0480, {1, {0x0481}}},\r
- { 0x048a, {1, {0x048b}}},\r
- { 0x048c, {1, {0x048d}}},\r
- { 0x048e, {1, {0x048f}}},\r
- { 0x0490, {1, {0x0491}}},\r
- { 0x0492, {1, {0x0493}}},\r
- { 0x0494, {1, {0x0495}}},\r
- { 0x0496, {1, {0x0497}}},\r
- { 0x0498, {1, {0x0499}}},\r
- { 0x049a, {1, {0x049b}}},\r
- { 0x049c, {1, {0x049d}}},\r
- { 0x049e, {1, {0x049f}}},\r
- { 0x04a0, {1, {0x04a1}}},\r
- { 0x04a2, {1, {0x04a3}}},\r
- { 0x04a4, {1, {0x04a5}}},\r
- { 0x04a6, {1, {0x04a7}}},\r
- { 0x04a8, {1, {0x04a9}}},\r
- { 0x04aa, {1, {0x04ab}}},\r
- { 0x04ac, {1, {0x04ad}}},\r
- { 0x04ae, {1, {0x04af}}},\r
- { 0x04b0, {1, {0x04b1}}},\r
- { 0x04b2, {1, {0x04b3}}},\r
- { 0x04b4, {1, {0x04b5}}},\r
- { 0x04b6, {1, {0x04b7}}},\r
- { 0x04b8, {1, {0x04b9}}},\r
- { 0x04ba, {1, {0x04bb}}},\r
- { 0x04bc, {1, {0x04bd}}},\r
- { 0x04be, {1, {0x04bf}}},\r
- { 0x04c1, {1, {0x04c2}}},\r
- { 0x04c3, {1, {0x04c4}}},\r
- { 0x04c5, {1, {0x04c6}}},\r
- { 0x04c7, {1, {0x04c8}}},\r
- { 0x04c9, {1, {0x04ca}}},\r
- { 0x04cb, {1, {0x04cc}}},\r
- { 0x04cd, {1, {0x04ce}}},\r
- { 0x04d0, {1, {0x04d1}}},\r
- { 0x04d2, {1, {0x04d3}}},\r
- { 0x04d4, {1, {0x04d5}}},\r
- { 0x04d6, {1, {0x04d7}}},\r
- { 0x04d8, {1, {0x04d9}}},\r
- { 0x04da, {1, {0x04db}}},\r
- { 0x04dc, {1, {0x04dd}}},\r
- { 0x04de, {1, {0x04df}}},\r
- { 0x04e0, {1, {0x04e1}}},\r
- { 0x04e2, {1, {0x04e3}}},\r
- { 0x04e4, {1, {0x04e5}}},\r
- { 0x04e6, {1, {0x04e7}}},\r
- { 0x04e8, {1, {0x04e9}}},\r
- { 0x04ea, {1, {0x04eb}}},\r
- { 0x04ec, {1, {0x04ed}}},\r
- { 0x04ee, {1, {0x04ef}}},\r
- { 0x04f0, {1, {0x04f1}}},\r
- { 0x04f2, {1, {0x04f3}}},\r
- { 0x04f4, {1, {0x04f5}}},\r
- { 0x04f6, {1, {0x04f7}}},\r
- { 0x04f8, {1, {0x04f9}}},\r
- { 0x0500, {1, {0x0501}}},\r
- { 0x0502, {1, {0x0503}}},\r
- { 0x0504, {1, {0x0505}}},\r
- { 0x0506, {1, {0x0507}}},\r
- { 0x0508, {1, {0x0509}}},\r
- { 0x050a, {1, {0x050b}}},\r
- { 0x050c, {1, {0x050d}}},\r
- { 0x050e, {1, {0x050f}}},\r
- { 0x0531, {1, {0x0561}}},\r
- { 0x0532, {1, {0x0562}}},\r
- { 0x0533, {1, {0x0563}}},\r
- { 0x0534, {1, {0x0564}}},\r
- { 0x0535, {1, {0x0565}}},\r
- { 0x0536, {1, {0x0566}}},\r
- { 0x0537, {1, {0x0567}}},\r
- { 0x0538, {1, {0x0568}}},\r
- { 0x0539, {1, {0x0569}}},\r
- { 0x053a, {1, {0x056a}}},\r
- { 0x053b, {1, {0x056b}}},\r
- { 0x053c, {1, {0x056c}}},\r
- { 0x053d, {1, {0x056d}}},\r
- { 0x053e, {1, {0x056e}}},\r
- { 0x053f, {1, {0x056f}}},\r
- { 0x0540, {1, {0x0570}}},\r
- { 0x0541, {1, {0x0571}}},\r
- { 0x0542, {1, {0x0572}}},\r
- { 0x0543, {1, {0x0573}}},\r
- { 0x0544, {1, {0x0574}}},\r
- { 0x0545, {1, {0x0575}}},\r
- { 0x0546, {1, {0x0576}}},\r
- { 0x0547, {1, {0x0577}}},\r
- { 0x0548, {1, {0x0578}}},\r
- { 0x0549, {1, {0x0579}}},\r
- { 0x054a, {1, {0x057a}}},\r
- { 0x054b, {1, {0x057b}}},\r
- { 0x054c, {1, {0x057c}}},\r
- { 0x054d, {1, {0x057d}}},\r
- { 0x054e, {1, {0x057e}}},\r
- { 0x054f, {1, {0x057f}}},\r
- { 0x0550, {1, {0x0580}}},\r
- { 0x0551, {1, {0x0581}}},\r
- { 0x0552, {1, {0x0582}}},\r
- { 0x0553, {1, {0x0583}}},\r
- { 0x0554, {1, {0x0584}}},\r
- { 0x0555, {1, {0x0585}}},\r
- { 0x0556, {1, {0x0586}}},\r
- { 0x0587, {2, {0x0565, 0x0582}}},\r
- { 0x10a0, {1, {0x2d00}}},\r
- { 0x10a1, {1, {0x2d01}}},\r
- { 0x10a2, {1, {0x2d02}}},\r
- { 0x10a3, {1, {0x2d03}}},\r
- { 0x10a4, {1, {0x2d04}}},\r
- { 0x10a5, {1, {0x2d05}}},\r
- { 0x10a6, {1, {0x2d06}}},\r
- { 0x10a7, {1, {0x2d07}}},\r
- { 0x10a8, {1, {0x2d08}}},\r
- { 0x10a9, {1, {0x2d09}}},\r
- { 0x10aa, {1, {0x2d0a}}},\r
- { 0x10ab, {1, {0x2d0b}}},\r
- { 0x10ac, {1, {0x2d0c}}},\r
- { 0x10ad, {1, {0x2d0d}}},\r
- { 0x10ae, {1, {0x2d0e}}},\r
- { 0x10af, {1, {0x2d0f}}},\r
- { 0x10b0, {1, {0x2d10}}},\r
- { 0x10b1, {1, {0x2d11}}},\r
- { 0x10b2, {1, {0x2d12}}},\r
- { 0x10b3, {1, {0x2d13}}},\r
- { 0x10b4, {1, {0x2d14}}},\r
- { 0x10b5, {1, {0x2d15}}},\r
- { 0x10b6, {1, {0x2d16}}},\r
- { 0x10b7, {1, {0x2d17}}},\r
- { 0x10b8, {1, {0x2d18}}},\r
- { 0x10b9, {1, {0x2d19}}},\r
- { 0x10ba, {1, {0x2d1a}}},\r
- { 0x10bb, {1, {0x2d1b}}},\r
- { 0x10bc, {1, {0x2d1c}}},\r
- { 0x10bd, {1, {0x2d1d}}},\r
- { 0x10be, {1, {0x2d1e}}},\r
- { 0x10bf, {1, {0x2d1f}}},\r
- { 0x10c0, {1, {0x2d20}}},\r
- { 0x10c1, {1, {0x2d21}}},\r
- { 0x10c2, {1, {0x2d22}}},\r
- { 0x10c3, {1, {0x2d23}}},\r
- { 0x10c4, {1, {0x2d24}}},\r
- { 0x10c5, {1, {0x2d25}}},\r
- { 0x1e00, {1, {0x1e01}}},\r
- { 0x1e02, {1, {0x1e03}}},\r
- { 0x1e04, {1, {0x1e05}}},\r
- { 0x1e06, {1, {0x1e07}}},\r
- { 0x1e08, {1, {0x1e09}}},\r
- { 0x1e0a, {1, {0x1e0b}}},\r
- { 0x1e0c, {1, {0x1e0d}}},\r
- { 0x1e0e, {1, {0x1e0f}}},\r
- { 0x1e10, {1, {0x1e11}}},\r
- { 0x1e12, {1, {0x1e13}}},\r
- { 0x1e14, {1, {0x1e15}}},\r
- { 0x1e16, {1, {0x1e17}}},\r
- { 0x1e18, {1, {0x1e19}}},\r
- { 0x1e1a, {1, {0x1e1b}}},\r
- { 0x1e1c, {1, {0x1e1d}}},\r
- { 0x1e1e, {1, {0x1e1f}}},\r
- { 0x1e20, {1, {0x1e21}}},\r
- { 0x1e22, {1, {0x1e23}}},\r
- { 0x1e24, {1, {0x1e25}}},\r
- { 0x1e26, {1, {0x1e27}}},\r
- { 0x1e28, {1, {0x1e29}}},\r
- { 0x1e2a, {1, {0x1e2b}}},\r
- { 0x1e2c, {1, {0x1e2d}}},\r
- { 0x1e2e, {1, {0x1e2f}}},\r
- { 0x1e30, {1, {0x1e31}}},\r
- { 0x1e32, {1, {0x1e33}}},\r
- { 0x1e34, {1, {0x1e35}}},\r
- { 0x1e36, {1, {0x1e37}}},\r
- { 0x1e38, {1, {0x1e39}}},\r
- { 0x1e3a, {1, {0x1e3b}}},\r
- { 0x1e3c, {1, {0x1e3d}}},\r
- { 0x1e3e, {1, {0x1e3f}}},\r
- { 0x1e40, {1, {0x1e41}}},\r
- { 0x1e42, {1, {0x1e43}}},\r
- { 0x1e44, {1, {0x1e45}}},\r
- { 0x1e46, {1, {0x1e47}}},\r
- { 0x1e48, {1, {0x1e49}}},\r
- { 0x1e4a, {1, {0x1e4b}}},\r
- { 0x1e4c, {1, {0x1e4d}}},\r
- { 0x1e4e, {1, {0x1e4f}}},\r
- { 0x1e50, {1, {0x1e51}}},\r
- { 0x1e52, {1, {0x1e53}}},\r
- { 0x1e54, {1, {0x1e55}}},\r
- { 0x1e56, {1, {0x1e57}}},\r
- { 0x1e58, {1, {0x1e59}}},\r
- { 0x1e5a, {1, {0x1e5b}}},\r
- { 0x1e5c, {1, {0x1e5d}}},\r
- { 0x1e5e, {1, {0x1e5f}}},\r
- { 0x1e60, {1, {0x1e61}}},\r
- { 0x1e62, {1, {0x1e63}}},\r
- { 0x1e64, {1, {0x1e65}}},\r
- { 0x1e66, {1, {0x1e67}}},\r
- { 0x1e68, {1, {0x1e69}}},\r
- { 0x1e6a, {1, {0x1e6b}}},\r
- { 0x1e6c, {1, {0x1e6d}}},\r
- { 0x1e6e, {1, {0x1e6f}}},\r
- { 0x1e70, {1, {0x1e71}}},\r
- { 0x1e72, {1, {0x1e73}}},\r
- { 0x1e74, {1, {0x1e75}}},\r
- { 0x1e76, {1, {0x1e77}}},\r
- { 0x1e78, {1, {0x1e79}}},\r
- { 0x1e7a, {1, {0x1e7b}}},\r
- { 0x1e7c, {1, {0x1e7d}}},\r
- { 0x1e7e, {1, {0x1e7f}}},\r
- { 0x1e80, {1, {0x1e81}}},\r
- { 0x1e82, {1, {0x1e83}}},\r
- { 0x1e84, {1, {0x1e85}}},\r
- { 0x1e86, {1, {0x1e87}}},\r
- { 0x1e88, {1, {0x1e89}}},\r
- { 0x1e8a, {1, {0x1e8b}}},\r
- { 0x1e8c, {1, {0x1e8d}}},\r
- { 0x1e8e, {1, {0x1e8f}}},\r
- { 0x1e90, {1, {0x1e91}}},\r
- { 0x1e92, {1, {0x1e93}}},\r
- { 0x1e94, {1, {0x1e95}}},\r
- { 0x1e96, {2, {0x0068, 0x0331}}},\r
- { 0x1e97, {2, {0x0074, 0x0308}}},\r
- { 0x1e98, {2, {0x0077, 0x030a}}},\r
- { 0x1e99, {2, {0x0079, 0x030a}}},\r
- { 0x1e9a, {2, {0x0061, 0x02be}}},\r
- { 0x1e9b, {1, {0x1e61}}},\r
- { 0x1ea0, {1, {0x1ea1}}},\r
- { 0x1ea2, {1, {0x1ea3}}},\r
- { 0x1ea4, {1, {0x1ea5}}},\r
- { 0x1ea6, {1, {0x1ea7}}},\r
- { 0x1ea8, {1, {0x1ea9}}},\r
- { 0x1eaa, {1, {0x1eab}}},\r
- { 0x1eac, {1, {0x1ead}}},\r
- { 0x1eae, {1, {0x1eaf}}},\r
- { 0x1eb0, {1, {0x1eb1}}},\r
- { 0x1eb2, {1, {0x1eb3}}},\r
- { 0x1eb4, {1, {0x1eb5}}},\r
- { 0x1eb6, {1, {0x1eb7}}},\r
- { 0x1eb8, {1, {0x1eb9}}},\r
- { 0x1eba, {1, {0x1ebb}}},\r
- { 0x1ebc, {1, {0x1ebd}}},\r
- { 0x1ebe, {1, {0x1ebf}}},\r
- { 0x1ec0, {1, {0x1ec1}}},\r
- { 0x1ec2, {1, {0x1ec3}}},\r
- { 0x1ec4, {1, {0x1ec5}}},\r
- { 0x1ec6, {1, {0x1ec7}}},\r
- { 0x1ec8, {1, {0x1ec9}}},\r
- { 0x1eca, {1, {0x1ecb}}},\r
- { 0x1ecc, {1, {0x1ecd}}},\r
- { 0x1ece, {1, {0x1ecf}}},\r
- { 0x1ed0, {1, {0x1ed1}}},\r
- { 0x1ed2, {1, {0x1ed3}}},\r
- { 0x1ed4, {1, {0x1ed5}}},\r
- { 0x1ed6, {1, {0x1ed7}}},\r
- { 0x1ed8, {1, {0x1ed9}}},\r
- { 0x1eda, {1, {0x1edb}}},\r
- { 0x1edc, {1, {0x1edd}}},\r
- { 0x1ede, {1, {0x1edf}}},\r
- { 0x1ee0, {1, {0x1ee1}}},\r
- { 0x1ee2, {1, {0x1ee3}}},\r
- { 0x1ee4, {1, {0x1ee5}}},\r
- { 0x1ee6, {1, {0x1ee7}}},\r
- { 0x1ee8, {1, {0x1ee9}}},\r
- { 0x1eea, {1, {0x1eeb}}},\r
- { 0x1eec, {1, {0x1eed}}},\r
- { 0x1eee, {1, {0x1eef}}},\r
- { 0x1ef0, {1, {0x1ef1}}},\r
- { 0x1ef2, {1, {0x1ef3}}},\r
- { 0x1ef4, {1, {0x1ef5}}},\r
- { 0x1ef6, {1, {0x1ef7}}},\r
- { 0x1ef8, {1, {0x1ef9}}},\r
- { 0x1f08, {1, {0x1f00}}},\r
- { 0x1f09, {1, {0x1f01}}},\r
- { 0x1f0a, {1, {0x1f02}}},\r
- { 0x1f0b, {1, {0x1f03}}},\r
- { 0x1f0c, {1, {0x1f04}}},\r
- { 0x1f0d, {1, {0x1f05}}},\r
- { 0x1f0e, {1, {0x1f06}}},\r
- { 0x1f0f, {1, {0x1f07}}},\r
- { 0x1f18, {1, {0x1f10}}},\r
- { 0x1f19, {1, {0x1f11}}},\r
- { 0x1f1a, {1, {0x1f12}}},\r
- { 0x1f1b, {1, {0x1f13}}},\r
- { 0x1f1c, {1, {0x1f14}}},\r
- { 0x1f1d, {1, {0x1f15}}},\r
- { 0x1f28, {1, {0x1f20}}},\r
- { 0x1f29, {1, {0x1f21}}},\r
- { 0x1f2a, {1, {0x1f22}}},\r
- { 0x1f2b, {1, {0x1f23}}},\r
- { 0x1f2c, {1, {0x1f24}}},\r
- { 0x1f2d, {1, {0x1f25}}},\r
- { 0x1f2e, {1, {0x1f26}}},\r
- { 0x1f2f, {1, {0x1f27}}},\r
- { 0x1f38, {1, {0x1f30}}},\r
- { 0x1f39, {1, {0x1f31}}},\r
- { 0x1f3a, {1, {0x1f32}}},\r
- { 0x1f3b, {1, {0x1f33}}},\r
- { 0x1f3c, {1, {0x1f34}}},\r
- { 0x1f3d, {1, {0x1f35}}},\r
- { 0x1f3e, {1, {0x1f36}}},\r
- { 0x1f3f, {1, {0x1f37}}},\r
- { 0x1f48, {1, {0x1f40}}},\r
- { 0x1f49, {1, {0x1f41}}},\r
- { 0x1f4a, {1, {0x1f42}}},\r
- { 0x1f4b, {1, {0x1f43}}},\r
- { 0x1f4c, {1, {0x1f44}}},\r
- { 0x1f4d, {1, {0x1f45}}},\r
- { 0x1f50, {2, {0x03c5, 0x0313}}},\r
- { 0x1f52, {3, {0x03c5, 0x0313, 0x0300}}},\r
- { 0x1f54, {3, {0x03c5, 0x0313, 0x0301}}},\r
- { 0x1f56, {3, {0x03c5, 0x0313, 0x0342}}},\r
- { 0x1f59, {1, {0x1f51}}},\r
- { 0x1f5b, {1, {0x1f53}}},\r
- { 0x1f5d, {1, {0x1f55}}},\r
- { 0x1f5f, {1, {0x1f57}}},\r
- { 0x1f68, {1, {0x1f60}}},\r
- { 0x1f69, {1, {0x1f61}}},\r
- { 0x1f6a, {1, {0x1f62}}},\r
- { 0x1f6b, {1, {0x1f63}}},\r
- { 0x1f6c, {1, {0x1f64}}},\r
- { 0x1f6d, {1, {0x1f65}}},\r
- { 0x1f6e, {1, {0x1f66}}},\r
- { 0x1f6f, {1, {0x1f67}}},\r
- { 0x1f80, {2, {0x1f00, 0x03b9}}},\r
- { 0x1f81, {2, {0x1f01, 0x03b9}}},\r
- { 0x1f82, {2, {0x1f02, 0x03b9}}},\r
- { 0x1f83, {2, {0x1f03, 0x03b9}}},\r
- { 0x1f84, {2, {0x1f04, 0x03b9}}},\r
- { 0x1f85, {2, {0x1f05, 0x03b9}}},\r
- { 0x1f86, {2, {0x1f06, 0x03b9}}},\r
- { 0x1f87, {2, {0x1f07, 0x03b9}}},\r
- { 0x1f88, {2, {0x1f00, 0x03b9}}},\r
- { 0x1f89, {2, {0x1f01, 0x03b9}}},\r
- { 0x1f8a, {2, {0x1f02, 0x03b9}}},\r
- { 0x1f8b, {2, {0x1f03, 0x03b9}}},\r
- { 0x1f8c, {2, {0x1f04, 0x03b9}}},\r
- { 0x1f8d, {2, {0x1f05, 0x03b9}}},\r
- { 0x1f8e, {2, {0x1f06, 0x03b9}}},\r
- { 0x1f8f, {2, {0x1f07, 0x03b9}}},\r
- { 0x1f90, {2, {0x1f20, 0x03b9}}},\r
- { 0x1f91, {2, {0x1f21, 0x03b9}}},\r
- { 0x1f92, {2, {0x1f22, 0x03b9}}},\r
- { 0x1f93, {2, {0x1f23, 0x03b9}}},\r
- { 0x1f94, {2, {0x1f24, 0x03b9}}},\r
- { 0x1f95, {2, {0x1f25, 0x03b9}}},\r
- { 0x1f96, {2, {0x1f26, 0x03b9}}},\r
- { 0x1f97, {2, {0x1f27, 0x03b9}}},\r
- { 0x1f98, {2, {0x1f20, 0x03b9}}},\r
- { 0x1f99, {2, {0x1f21, 0x03b9}}},\r
- { 0x1f9a, {2, {0x1f22, 0x03b9}}},\r
- { 0x1f9b, {2, {0x1f23, 0x03b9}}},\r
- { 0x1f9c, {2, {0x1f24, 0x03b9}}},\r
- { 0x1f9d, {2, {0x1f25, 0x03b9}}},\r
- { 0x1f9e, {2, {0x1f26, 0x03b9}}},\r
- { 0x1f9f, {2, {0x1f27, 0x03b9}}},\r
- { 0x1fa0, {2, {0x1f60, 0x03b9}}},\r
- { 0x1fa1, {2, {0x1f61, 0x03b9}}},\r
- { 0x1fa2, {2, {0x1f62, 0x03b9}}},\r
- { 0x1fa3, {2, {0x1f63, 0x03b9}}},\r
- { 0x1fa4, {2, {0x1f64, 0x03b9}}},\r
- { 0x1fa5, {2, {0x1f65, 0x03b9}}},\r
- { 0x1fa6, {2, {0x1f66, 0x03b9}}},\r
- { 0x1fa7, {2, {0x1f67, 0x03b9}}},\r
- { 0x1fa8, {2, {0x1f60, 0x03b9}}},\r
- { 0x1fa9, {2, {0x1f61, 0x03b9}}},\r
- { 0x1faa, {2, {0x1f62, 0x03b9}}},\r
- { 0x1fab, {2, {0x1f63, 0x03b9}}},\r
- { 0x1fac, {2, {0x1f64, 0x03b9}}},\r
- { 0x1fad, {2, {0x1f65, 0x03b9}}},\r
- { 0x1fae, {2, {0x1f66, 0x03b9}}},\r
- { 0x1faf, {2, {0x1f67, 0x03b9}}},\r
- { 0x1fb2, {2, {0x1f70, 0x03b9}}},\r
- { 0x1fb3, {2, {0x03b1, 0x03b9}}},\r
- { 0x1fb4, {2, {0x03ac, 0x03b9}}},\r
- { 0x1fb6, {2, {0x03b1, 0x0342}}},\r
- { 0x1fb7, {3, {0x03b1, 0x0342, 0x03b9}}},\r
- { 0x1fb8, {1, {0x1fb0}}},\r
- { 0x1fb9, {1, {0x1fb1}}},\r
- { 0x1fba, {1, {0x1f70}}},\r
- { 0x1fbb, {1, {0x1f71}}},\r
- { 0x1fbc, {2, {0x03b1, 0x03b9}}},\r
- { 0x1fbe, {1, {0x03b9}}},\r
- { 0x1fc2, {2, {0x1f74, 0x03b9}}},\r
- { 0x1fc3, {2, {0x03b7, 0x03b9}}},\r
- { 0x1fc4, {2, {0x03ae, 0x03b9}}},\r
- { 0x1fc6, {2, {0x03b7, 0x0342}}},\r
- { 0x1fc7, {3, {0x03b7, 0x0342, 0x03b9}}},\r
- { 0x1fc8, {1, {0x1f72}}},\r
- { 0x1fc9, {1, {0x1f73}}},\r
- { 0x1fca, {1, {0x1f74}}},\r
- { 0x1fcb, {1, {0x1f75}}},\r
- { 0x1fcc, {2, {0x03b7, 0x03b9}}},\r
- { 0x1fd2, {3, {0x03b9, 0x0308, 0x0300}}},\r
- { 0x1fd3, {3, {0x03b9, 0x0308, 0x0301}}},\r
- { 0x1fd6, {2, {0x03b9, 0x0342}}},\r
- { 0x1fd7, {3, {0x03b9, 0x0308, 0x0342}}},\r
- { 0x1fd8, {1, {0x1fd0}}},\r
- { 0x1fd9, {1, {0x1fd1}}},\r
- { 0x1fda, {1, {0x1f76}}},\r
- { 0x1fdb, {1, {0x1f77}}},\r
- { 0x1fe2, {3, {0x03c5, 0x0308, 0x0300}}},\r
- { 0x1fe3, {3, {0x03c5, 0x0308, 0x0301}}},\r
- { 0x1fe4, {2, {0x03c1, 0x0313}}},\r
- { 0x1fe6, {2, {0x03c5, 0x0342}}},\r
- { 0x1fe7, {3, {0x03c5, 0x0308, 0x0342}}},\r
- { 0x1fe8, {1, {0x1fe0}}},\r
- { 0x1fe9, {1, {0x1fe1}}},\r
- { 0x1fea, {1, {0x1f7a}}},\r
- { 0x1feb, {1, {0x1f7b}}},\r
- { 0x1fec, {1, {0x1fe5}}},\r
- { 0x1ff2, {2, {0x1f7c, 0x03b9}}},\r
- { 0x1ff3, {2, {0x03c9, 0x03b9}}},\r
- { 0x1ff4, {2, {0x03ce, 0x03b9}}},\r
- { 0x1ff6, {2, {0x03c9, 0x0342}}},\r
- { 0x1ff7, {3, {0x03c9, 0x0342, 0x03b9}}},\r
- { 0x1ff8, {1, {0x1f78}}},\r
- { 0x1ff9, {1, {0x1f79}}},\r
- { 0x1ffa, {1, {0x1f7c}}},\r
- { 0x1ffb, {1, {0x1f7d}}},\r
- { 0x1ffc, {2, {0x03c9, 0x03b9}}},\r
- { 0x2126, {1, {0x03c9}}},\r
- { 0x212a, {1, {0x006b}}},\r
- { 0x212b, {1, {0x00e5}}},\r
- { 0x2160, {1, {0x2170}}},\r
- { 0x2161, {1, {0x2171}}},\r
- { 0x2162, {1, {0x2172}}},\r
- { 0x2163, {1, {0x2173}}},\r
- { 0x2164, {1, {0x2174}}},\r
- { 0x2165, {1, {0x2175}}},\r
- { 0x2166, {1, {0x2176}}},\r
- { 0x2167, {1, {0x2177}}},\r
- { 0x2168, {1, {0x2178}}},\r
- { 0x2169, {1, {0x2179}}},\r
- { 0x216a, {1, {0x217a}}},\r
- { 0x216b, {1, {0x217b}}},\r
- { 0x216c, {1, {0x217c}}},\r
- { 0x216d, {1, {0x217d}}},\r
- { 0x216e, {1, {0x217e}}},\r
- { 0x216f, {1, {0x217f}}},\r
- { 0x24b6, {1, {0x24d0}}},\r
- { 0x24b7, {1, {0x24d1}}},\r
- { 0x24b8, {1, {0x24d2}}},\r
- { 0x24b9, {1, {0x24d3}}},\r
- { 0x24ba, {1, {0x24d4}}},\r
- { 0x24bb, {1, {0x24d5}}},\r
- { 0x24bc, {1, {0x24d6}}},\r
- { 0x24bd, {1, {0x24d7}}},\r
- { 0x24be, {1, {0x24d8}}},\r
- { 0x24bf, {1, {0x24d9}}},\r
- { 0x24c0, {1, {0x24da}}},\r
- { 0x24c1, {1, {0x24db}}},\r
- { 0x24c2, {1, {0x24dc}}},\r
- { 0x24c3, {1, {0x24dd}}},\r
- { 0x24c4, {1, {0x24de}}},\r
- { 0x24c5, {1, {0x24df}}},\r
- { 0x24c6, {1, {0x24e0}}},\r
- { 0x24c7, {1, {0x24e1}}},\r
- { 0x24c8, {1, {0x24e2}}},\r
- { 0x24c9, {1, {0x24e3}}},\r
- { 0x24ca, {1, {0x24e4}}},\r
- { 0x24cb, {1, {0x24e5}}},\r
- { 0x24cc, {1, {0x24e6}}},\r
- { 0x24cd, {1, {0x24e7}}},\r
- { 0x24ce, {1, {0x24e8}}},\r
- { 0x24cf, {1, {0x24e9}}},\r
- { 0x2c00, {1, {0x2c30}}},\r
- { 0x2c01, {1, {0x2c31}}},\r
- { 0x2c02, {1, {0x2c32}}},\r
- { 0x2c03, {1, {0x2c33}}},\r
- { 0x2c04, {1, {0x2c34}}},\r
- { 0x2c05, {1, {0x2c35}}},\r
- { 0x2c06, {1, {0x2c36}}},\r
- { 0x2c07, {1, {0x2c37}}},\r
- { 0x2c08, {1, {0x2c38}}},\r
- { 0x2c09, {1, {0x2c39}}},\r
- { 0x2c0a, {1, {0x2c3a}}},\r
- { 0x2c0b, {1, {0x2c3b}}},\r
- { 0x2c0c, {1, {0x2c3c}}},\r
- { 0x2c0d, {1, {0x2c3d}}},\r
- { 0x2c0e, {1, {0x2c3e}}},\r
- { 0x2c0f, {1, {0x2c3f}}},\r
- { 0x2c10, {1, {0x2c40}}},\r
- { 0x2c11, {1, {0x2c41}}},\r
- { 0x2c12, {1, {0x2c42}}},\r
- { 0x2c13, {1, {0x2c43}}},\r
- { 0x2c14, {1, {0x2c44}}},\r
- { 0x2c15, {1, {0x2c45}}},\r
- { 0x2c16, {1, {0x2c46}}},\r
- { 0x2c17, {1, {0x2c47}}},\r
- { 0x2c18, {1, {0x2c48}}},\r
- { 0x2c19, {1, {0x2c49}}},\r
- { 0x2c1a, {1, {0x2c4a}}},\r
- { 0x2c1b, {1, {0x2c4b}}},\r
- { 0x2c1c, {1, {0x2c4c}}},\r
- { 0x2c1d, {1, {0x2c4d}}},\r
- { 0x2c1e, {1, {0x2c4e}}},\r
- { 0x2c1f, {1, {0x2c4f}}},\r
- { 0x2c20, {1, {0x2c50}}},\r
- { 0x2c21, {1, {0x2c51}}},\r
- { 0x2c22, {1, {0x2c52}}},\r
- { 0x2c23, {1, {0x2c53}}},\r
- { 0x2c24, {1, {0x2c54}}},\r
- { 0x2c25, {1, {0x2c55}}},\r
- { 0x2c26, {1, {0x2c56}}},\r
- { 0x2c27, {1, {0x2c57}}},\r
- { 0x2c28, {1, {0x2c58}}},\r
- { 0x2c29, {1, {0x2c59}}},\r
- { 0x2c2a, {1, {0x2c5a}}},\r
- { 0x2c2b, {1, {0x2c5b}}},\r
- { 0x2c2c, {1, {0x2c5c}}},\r
- { 0x2c2d, {1, {0x2c5d}}},\r
- { 0x2c2e, {1, {0x2c5e}}},\r
- { 0x2c80, {1, {0x2c81}}},\r
- { 0x2c82, {1, {0x2c83}}},\r
- { 0x2c84, {1, {0x2c85}}},\r
- { 0x2c86, {1, {0x2c87}}},\r
- { 0x2c88, {1, {0x2c89}}},\r
- { 0x2c8a, {1, {0x2c8b}}},\r
- { 0x2c8c, {1, {0x2c8d}}},\r
- { 0x2c8e, {1, {0x2c8f}}},\r
- { 0x2c90, {1, {0x2c91}}},\r
- { 0x2c92, {1, {0x2c93}}},\r
- { 0x2c94, {1, {0x2c95}}},\r
- { 0x2c96, {1, {0x2c97}}},\r
- { 0x2c98, {1, {0x2c99}}},\r
- { 0x2c9a, {1, {0x2c9b}}},\r
- { 0x2c9c, {1, {0x2c9d}}},\r
- { 0x2c9e, {1, {0x2c9f}}},\r
- { 0x2ca0, {1, {0x2ca1}}},\r
- { 0x2ca2, {1, {0x2ca3}}},\r
- { 0x2ca4, {1, {0x2ca5}}},\r
- { 0x2ca6, {1, {0x2ca7}}},\r
- { 0x2ca8, {1, {0x2ca9}}},\r
- { 0x2caa, {1, {0x2cab}}},\r
- { 0x2cac, {1, {0x2cad}}},\r
- { 0x2cae, {1, {0x2caf}}},\r
- { 0x2cb0, {1, {0x2cb1}}},\r
- { 0x2cb2, {1, {0x2cb3}}},\r
- { 0x2cb4, {1, {0x2cb5}}},\r
- { 0x2cb6, {1, {0x2cb7}}},\r
- { 0x2cb8, {1, {0x2cb9}}},\r
- { 0x2cba, {1, {0x2cbb}}},\r
- { 0x2cbc, {1, {0x2cbd}}},\r
- { 0x2cbe, {1, {0x2cbf}}},\r
- { 0x2cc0, {1, {0x2cc1}}},\r
- { 0x2cc2, {1, {0x2cc3}}},\r
- { 0x2cc4, {1, {0x2cc5}}},\r
- { 0x2cc6, {1, {0x2cc7}}},\r
- { 0x2cc8, {1, {0x2cc9}}},\r
- { 0x2cca, {1, {0x2ccb}}},\r
- { 0x2ccc, {1, {0x2ccd}}},\r
- { 0x2cce, {1, {0x2ccf}}},\r
- { 0x2cd0, {1, {0x2cd1}}},\r
- { 0x2cd2, {1, {0x2cd3}}},\r
- { 0x2cd4, {1, {0x2cd5}}},\r
- { 0x2cd6, {1, {0x2cd7}}},\r
- { 0x2cd8, {1, {0x2cd9}}},\r
- { 0x2cda, {1, {0x2cdb}}},\r
- { 0x2cdc, {1, {0x2cdd}}},\r
- { 0x2cde, {1, {0x2cdf}}},\r
- { 0x2ce0, {1, {0x2ce1}}},\r
- { 0x2ce2, {1, {0x2ce3}}},\r
- { 0xfb00, {2, {0x0066, 0x0066}}},\r
- { 0xfb01, {2, {0x0066, 0x0069}}},\r
- { 0xfb02, {2, {0x0066, 0x006c}}},\r
- { 0xfb03, {3, {0x0066, 0x0066, 0x0069}}},\r
- { 0xfb04, {3, {0x0066, 0x0066, 0x006c}}},\r
- { 0xfb05, {2, {0x0073, 0x0074}}},\r
- { 0xfb06, {2, {0x0073, 0x0074}}},\r
- { 0xfb13, {2, {0x0574, 0x0576}}},\r
- { 0xfb14, {2, {0x0574, 0x0565}}},\r
- { 0xfb15, {2, {0x0574, 0x056b}}},\r
- { 0xfb16, {2, {0x057e, 0x0576}}},\r
- { 0xfb17, {2, {0x0574, 0x056d}}},\r
- { 0xff21, {1, {0xff41}}},\r
- { 0xff22, {1, {0xff42}}},\r
- { 0xff23, {1, {0xff43}}},\r
- { 0xff24, {1, {0xff44}}},\r
- { 0xff25, {1, {0xff45}}},\r
- { 0xff26, {1, {0xff46}}},\r
- { 0xff27, {1, {0xff47}}},\r
- { 0xff28, {1, {0xff48}}},\r
- { 0xff29, {1, {0xff49}}},\r
- { 0xff2a, {1, {0xff4a}}},\r
- { 0xff2b, {1, {0xff4b}}},\r
- { 0xff2c, {1, {0xff4c}}},\r
- { 0xff2d, {1, {0xff4d}}},\r
- { 0xff2e, {1, {0xff4e}}},\r
- { 0xff2f, {1, {0xff4f}}},\r
- { 0xff30, {1, {0xff50}}},\r
- { 0xff31, {1, {0xff51}}},\r
- { 0xff32, {1, {0xff52}}},\r
- { 0xff33, {1, {0xff53}}},\r
- { 0xff34, {1, {0xff54}}},\r
- { 0xff35, {1, {0xff55}}},\r
- { 0xff36, {1, {0xff56}}},\r
- { 0xff37, {1, {0xff57}}},\r
- { 0xff38, {1, {0xff58}}},\r
- { 0xff39, {1, {0xff59}}},\r
- { 0xff3a, {1, {0xff5a}}},\r
- { 0x10400, {1, {0x10428}}},\r
- { 0x10401, {1, {0x10429}}},\r
- { 0x10402, {1, {0x1042a}}},\r
- { 0x10403, {1, {0x1042b}}},\r
- { 0x10404, {1, {0x1042c}}},\r
- { 0x10405, {1, {0x1042d}}},\r
- { 0x10406, {1, {0x1042e}}},\r
- { 0x10407, {1, {0x1042f}}},\r
- { 0x10408, {1, {0x10430}}},\r
- { 0x10409, {1, {0x10431}}},\r
- { 0x1040a, {1, {0x10432}}},\r
- { 0x1040b, {1, {0x10433}}},\r
- { 0x1040c, {1, {0x10434}}},\r
- { 0x1040d, {1, {0x10435}}},\r
- { 0x1040e, {1, {0x10436}}},\r
- { 0x1040f, {1, {0x10437}}},\r
- { 0x10410, {1, {0x10438}}},\r
- { 0x10411, {1, {0x10439}}},\r
- { 0x10412, {1, {0x1043a}}},\r
- { 0x10413, {1, {0x1043b}}},\r
- { 0x10414, {1, {0x1043c}}},\r
- { 0x10415, {1, {0x1043d}}},\r
- { 0x10416, {1, {0x1043e}}},\r
- { 0x10417, {1, {0x1043f}}},\r
- { 0x10418, {1, {0x10440}}},\r
- { 0x10419, {1, {0x10441}}},\r
- { 0x1041a, {1, {0x10442}}},\r
- { 0x1041b, {1, {0x10443}}},\r
- { 0x1041c, {1, {0x10444}}},\r
- { 0x1041d, {1, {0x10445}}},\r
- { 0x1041e, {1, {0x10446}}},\r
- { 0x1041f, {1, {0x10447}}},\r
- { 0x10420, {1, {0x10448}}},\r
- { 0x10421, {1, {0x10449}}},\r
- { 0x10422, {1, {0x1044a}}},\r
- { 0x10423, {1, {0x1044b}}},\r
- { 0x10424, {1, {0x1044c}}},\r
- { 0x10425, {1, {0x1044d}}},\r
- { 0x10426, {1, {0x1044e}}},\r
- { 0x10427, {1, {0x1044f}}}\r
-};\r
-\r
-static const CaseFold_11_Type CaseFold_Locale[] = {\r
- { 0x0049, {1, {0x0069}}},\r
- { 0x0130, {2, {0x0069, 0x0307}}}\r
-};\r
-\r
-static const CaseUnfold_11_Type CaseUnfold_11[] = {\r
- { 0x0061, {1, {0x0041 }}},\r
- { 0x0062, {1, {0x0042 }}},\r
- { 0x0063, {1, {0x0043 }}},\r
- { 0x0064, {1, {0x0044 }}},\r
- { 0x0065, {1, {0x0045 }}},\r
- { 0x0066, {1, {0x0046 }}},\r
- { 0x0067, {1, {0x0047 }}},\r
- { 0x0068, {1, {0x0048 }}},\r
- { 0x006a, {1, {0x004a }}},\r
- { 0x006b, {2, {0x212a, 0x004b }}},\r
- { 0x006c, {1, {0x004c }}},\r
- { 0x006d, {1, {0x004d }}},\r
- { 0x006e, {1, {0x004e }}},\r
- { 0x006f, {1, {0x004f }}},\r
- { 0x0070, {1, {0x0050 }}},\r
- { 0x0071, {1, {0x0051 }}},\r
- { 0x0072, {1, {0x0052 }}},\r
- { 0x0073, {2, {0x0053, 0x017f }}},\r
- { 0x0074, {1, {0x0054 }}},\r
- { 0x0075, {1, {0x0055 }}},\r
- { 0x0076, {1, {0x0056 }}},\r
- { 0x0077, {1, {0x0057 }}},\r
- { 0x0078, {1, {0x0058 }}},\r
- { 0x0079, {1, {0x0059 }}},\r
- { 0x007a, {1, {0x005a }}},\r
- { 0x00e0, {1, {0x00c0 }}},\r
- { 0x00e1, {1, {0x00c1 }}},\r
- { 0x00e2, {1, {0x00c2 }}},\r
- { 0x00e3, {1, {0x00c3 }}},\r
- { 0x00e4, {1, {0x00c4 }}},\r
- { 0x00e5, {2, {0x212b, 0x00c5 }}},\r
- { 0x00e6, {1, {0x00c6 }}},\r
- { 0x00e7, {1, {0x00c7 }}},\r
- { 0x00e8, {1, {0x00c8 }}},\r
- { 0x00e9, {1, {0x00c9 }}},\r
- { 0x00ea, {1, {0x00ca }}},\r
- { 0x00eb, {1, {0x00cb }}},\r
- { 0x00ec, {1, {0x00cc }}},\r
- { 0x00ed, {1, {0x00cd }}},\r
- { 0x00ee, {1, {0x00ce }}},\r
- { 0x00ef, {1, {0x00cf }}},\r
- { 0x00f0, {1, {0x00d0 }}},\r
- { 0x00f1, {1, {0x00d1 }}},\r
- { 0x00f2, {1, {0x00d2 }}},\r
- { 0x00f3, {1, {0x00d3 }}},\r
- { 0x00f4, {1, {0x00d4 }}},\r
- { 0x00f5, {1, {0x00d5 }}},\r
- { 0x00f6, {1, {0x00d6 }}},\r
- { 0x00f8, {1, {0x00d8 }}},\r
- { 0x00f9, {1, {0x00d9 }}},\r
- { 0x00fa, {1, {0x00da }}},\r
- { 0x00fb, {1, {0x00db }}},\r
- { 0x00fc, {1, {0x00dc }}},\r
- { 0x00fd, {1, {0x00dd }}},\r
- { 0x00fe, {1, {0x00de }}},\r
- { 0x00ff, {1, {0x0178 }}},\r
- { 0x0101, {1, {0x0100 }}},\r
- { 0x0103, {1, {0x0102 }}},\r
- { 0x0105, {1, {0x0104 }}},\r
- { 0x0107, {1, {0x0106 }}},\r
- { 0x0109, {1, {0x0108 }}},\r
- { 0x010b, {1, {0x010a }}},\r
- { 0x010d, {1, {0x010c }}},\r
- { 0x010f, {1, {0x010e }}},\r
- { 0x0111, {1, {0x0110 }}},\r
- { 0x0113, {1, {0x0112 }}},\r
- { 0x0115, {1, {0x0114 }}},\r
- { 0x0117, {1, {0x0116 }}},\r
- { 0x0119, {1, {0x0118 }}},\r
- { 0x011b, {1, {0x011a }}},\r
- { 0x011d, {1, {0x011c }}},\r
- { 0x011f, {1, {0x011e }}},\r
- { 0x0121, {1, {0x0120 }}},\r
- { 0x0123, {1, {0x0122 }}},\r
- { 0x0125, {1, {0x0124 }}},\r
- { 0x0127, {1, {0x0126 }}},\r
- { 0x0129, {1, {0x0128 }}},\r
- { 0x012b, {1, {0x012a }}},\r
- { 0x012d, {1, {0x012c }}},\r
- { 0x012f, {1, {0x012e }}},\r
- { 0x0133, {1, {0x0132 }}},\r
- { 0x0135, {1, {0x0134 }}},\r
- { 0x0137, {1, {0x0136 }}},\r
- { 0x013a, {1, {0x0139 }}},\r
- { 0x013c, {1, {0x013b }}},\r
- { 0x013e, {1, {0x013d }}},\r
- { 0x0140, {1, {0x013f }}},\r
- { 0x0142, {1, {0x0141 }}},\r
- { 0x0144, {1, {0x0143 }}},\r
- { 0x0146, {1, {0x0145 }}},\r
- { 0x0148, {1, {0x0147 }}},\r
- { 0x014b, {1, {0x014a }}},\r
- { 0x014d, {1, {0x014c }}},\r
- { 0x014f, {1, {0x014e }}},\r
- { 0x0151, {1, {0x0150 }}},\r
- { 0x0153, {1, {0x0152 }}},\r
- { 0x0155, {1, {0x0154 }}},\r
- { 0x0157, {1, {0x0156 }}},\r
- { 0x0159, {1, {0x0158 }}},\r
- { 0x015b, {1, {0x015a }}},\r
- { 0x015d, {1, {0x015c }}},\r
- { 0x015f, {1, {0x015e }}},\r
- { 0x0161, {1, {0x0160 }}},\r
- { 0x0163, {1, {0x0162 }}},\r
- { 0x0165, {1, {0x0164 }}},\r
- { 0x0167, {1, {0x0166 }}},\r
- { 0x0169, {1, {0x0168 }}},\r
- { 0x016b, {1, {0x016a }}},\r
- { 0x016d, {1, {0x016c }}},\r
- { 0x016f, {1, {0x016e }}},\r
- { 0x0171, {1, {0x0170 }}},\r
- { 0x0173, {1, {0x0172 }}},\r
- { 0x0175, {1, {0x0174 }}},\r
- { 0x0177, {1, {0x0176 }}},\r
- { 0x017a, {1, {0x0179 }}},\r
- { 0x017c, {1, {0x017b }}},\r
- { 0x017e, {1, {0x017d }}},\r
- { 0x0183, {1, {0x0182 }}},\r
- { 0x0185, {1, {0x0184 }}},\r
- { 0x0188, {1, {0x0187 }}},\r
- { 0x018c, {1, {0x018b }}},\r
- { 0x0192, {1, {0x0191 }}},\r
- { 0x0195, {1, {0x01f6 }}},\r
- { 0x0199, {1, {0x0198 }}},\r
- { 0x019a, {1, {0x023d }}},\r
- { 0x019e, {1, {0x0220 }}},\r
- { 0x01a1, {1, {0x01a0 }}},\r
- { 0x01a3, {1, {0x01a2 }}},\r
- { 0x01a5, {1, {0x01a4 }}},\r
- { 0x01a8, {1, {0x01a7 }}},\r
- { 0x01ad, {1, {0x01ac }}},\r
- { 0x01b0, {1, {0x01af }}},\r
- { 0x01b4, {1, {0x01b3 }}},\r
- { 0x01b6, {1, {0x01b5 }}},\r
- { 0x01b9, {1, {0x01b8 }}},\r
- { 0x01bd, {1, {0x01bc }}},\r
- { 0x01bf, {1, {0x01f7 }}},\r
- { 0x01c6, {2, {0x01c4, 0x01c5 }}},\r
- { 0x01c9, {2, {0x01c7, 0x01c8 }}},\r
- { 0x01cc, {2, {0x01ca, 0x01cb }}},\r
- { 0x01ce, {1, {0x01cd }}},\r
- { 0x01d0, {1, {0x01cf }}},\r
- { 0x01d2, {1, {0x01d1 }}},\r
- { 0x01d4, {1, {0x01d3 }}},\r
- { 0x01d6, {1, {0x01d5 }}},\r
- { 0x01d8, {1, {0x01d7 }}},\r
- { 0x01da, {1, {0x01d9 }}},\r
- { 0x01dc, {1, {0x01db }}},\r
- { 0x01dd, {1, {0x018e }}},\r
- { 0x01df, {1, {0x01de }}},\r
- { 0x01e1, {1, {0x01e0 }}},\r
- { 0x01e3, {1, {0x01e2 }}},\r
- { 0x01e5, {1, {0x01e4 }}},\r
- { 0x01e7, {1, {0x01e6 }}},\r
- { 0x01e9, {1, {0x01e8 }}},\r
- { 0x01eb, {1, {0x01ea }}},\r
- { 0x01ed, {1, {0x01ec }}},\r
- { 0x01ef, {1, {0x01ee }}},\r
- { 0x01f3, {2, {0x01f1, 0x01f2 }}},\r
- { 0x01f5, {1, {0x01f4 }}},\r
- { 0x01f9, {1, {0x01f8 }}},\r
- { 0x01fb, {1, {0x01fa }}},\r
- { 0x01fd, {1, {0x01fc }}},\r
- { 0x01ff, {1, {0x01fe }}},\r
- { 0x0201, {1, {0x0200 }}},\r
- { 0x0203, {1, {0x0202 }}},\r
- { 0x0205, {1, {0x0204 }}},\r
- { 0x0207, {1, {0x0206 }}},\r
- { 0x0209, {1, {0x0208 }}},\r
- { 0x020b, {1, {0x020a }}},\r
- { 0x020d, {1, {0x020c }}},\r
- { 0x020f, {1, {0x020e }}},\r
- { 0x0211, {1, {0x0210 }}},\r
- { 0x0213, {1, {0x0212 }}},\r
- { 0x0215, {1, {0x0214 }}},\r
- { 0x0217, {1, {0x0216 }}},\r
- { 0x0219, {1, {0x0218 }}},\r
- { 0x021b, {1, {0x021a }}},\r
- { 0x021d, {1, {0x021c }}},\r
- { 0x021f, {1, {0x021e }}},\r
- { 0x0223, {1, {0x0222 }}},\r
- { 0x0225, {1, {0x0224 }}},\r
- { 0x0227, {1, {0x0226 }}},\r
- { 0x0229, {1, {0x0228 }}},\r
- { 0x022b, {1, {0x022a }}},\r
- { 0x022d, {1, {0x022c }}},\r
- { 0x022f, {1, {0x022e }}},\r
- { 0x0231, {1, {0x0230 }}},\r
- { 0x0233, {1, {0x0232 }}},\r
- { 0x023c, {1, {0x023b }}},\r
- { 0x0253, {1, {0x0181 }}},\r
- { 0x0254, {1, {0x0186 }}},\r
- { 0x0256, {1, {0x0189 }}},\r
- { 0x0257, {1, {0x018a }}},\r
- { 0x0259, {1, {0x018f }}},\r
- { 0x025b, {1, {0x0190 }}},\r
- { 0x0260, {1, {0x0193 }}},\r
- { 0x0263, {1, {0x0194 }}},\r
- { 0x0268, {1, {0x0197 }}},\r
- { 0x0269, {1, {0x0196 }}},\r
- { 0x026f, {1, {0x019c }}},\r
- { 0x0272, {1, {0x019d }}},\r
- { 0x0275, {1, {0x019f }}},\r
- { 0x0280, {1, {0x01a6 }}},\r
- { 0x0283, {1, {0x01a9 }}},\r
- { 0x0288, {1, {0x01ae }}},\r
- { 0x028a, {1, {0x01b1 }}},\r
- { 0x028b, {1, {0x01b2 }}},\r
- { 0x0292, {1, {0x01b7 }}},\r
- { 0x0294, {1, {0x0241 }}},\r
- { 0x03ac, {1, {0x0386 }}},\r
- { 0x03ad, {1, {0x0388 }}},\r
- { 0x03ae, {1, {0x0389 }}},\r
- { 0x03af, {1, {0x038a }}},\r
- { 0x03b1, {1, {0x0391 }}},\r
- { 0x03b2, {2, {0x0392, 0x03d0 }}},\r
- { 0x03b3, {1, {0x0393 }}},\r
- { 0x03b4, {1, {0x0394 }}},\r
- { 0x03b5, {2, {0x03f5, 0x0395 }}},\r
- { 0x03b6, {1, {0x0396 }}},\r
- { 0x03b7, {1, {0x0397 }}},\r
- { 0x03b8, {3, {0x03f4, 0x0398, 0x03d1 }}},\r
- { 0x03b9, {3, {0x1fbe, 0x0399, 0x0345 }}},\r
- { 0x03ba, {2, {0x03f0, 0x039a }}},\r
- { 0x03bb, {1, {0x039b }}},\r
- { 0x03bc, {2, {0x00b5, 0x039c }}},\r
- { 0x03bd, {1, {0x039d }}},\r
- { 0x03be, {1, {0x039e }}},\r
- { 0x03bf, {1, {0x039f }}},\r
- { 0x03c0, {2, {0x03a0, 0x03d6 }}},\r
- { 0x03c1, {2, {0x03f1, 0x03a1 }}},\r
- { 0x03c3, {2, {0x03a3, 0x03c2 }}},\r
- { 0x03c4, {1, {0x03a4 }}},\r
- { 0x03c5, {1, {0x03a5 }}},\r
- { 0x03c6, {2, {0x03a6, 0x03d5 }}},\r
- { 0x03c7, {1, {0x03a7 }}},\r
- { 0x03c8, {1, {0x03a8 }}},\r
- { 0x03c9, {2, {0x03a9, 0x2126 }}},\r
- { 0x03ca, {1, {0x03aa }}},\r
- { 0x03cb, {1, {0x03ab }}},\r
- { 0x03cc, {1, {0x038c }}},\r
- { 0x03cd, {1, {0x038e }}},\r
- { 0x03ce, {1, {0x038f }}},\r
- { 0x03d9, {1, {0x03d8 }}},\r
- { 0x03db, {1, {0x03da }}},\r
- { 0x03dd, {1, {0x03dc }}},\r
- { 0x03df, {1, {0x03de }}},\r
- { 0x03e1, {1, {0x03e0 }}},\r
- { 0x03e3, {1, {0x03e2 }}},\r
- { 0x03e5, {1, {0x03e4 }}},\r
- { 0x03e7, {1, {0x03e6 }}},\r
- { 0x03e9, {1, {0x03e8 }}},\r
- { 0x03eb, {1, {0x03ea }}},\r
- { 0x03ed, {1, {0x03ec }}},\r
- { 0x03ef, {1, {0x03ee }}},\r
- { 0x03f2, {1, {0x03f9 }}},\r
- { 0x03f8, {1, {0x03f7 }}},\r
- { 0x03fb, {1, {0x03fa }}},\r
- { 0x0430, {1, {0x0410 }}},\r
- { 0x0431, {1, {0x0411 }}},\r
- { 0x0432, {1, {0x0412 }}},\r
- { 0x0433, {1, {0x0413 }}},\r
- { 0x0434, {1, {0x0414 }}},\r
- { 0x0435, {1, {0x0415 }}},\r
- { 0x0436, {1, {0x0416 }}},\r
- { 0x0437, {1, {0x0417 }}},\r
- { 0x0438, {1, {0x0418 }}},\r
- { 0x0439, {1, {0x0419 }}},\r
- { 0x043a, {1, {0x041a }}},\r
- { 0x043b, {1, {0x041b }}},\r
- { 0x043c, {1, {0x041c }}},\r
- { 0x043d, {1, {0x041d }}},\r
- { 0x043e, {1, {0x041e }}},\r
- { 0x043f, {1, {0x041f }}},\r
- { 0x0440, {1, {0x0420 }}},\r
- { 0x0441, {1, {0x0421 }}},\r
- { 0x0442, {1, {0x0422 }}},\r
- { 0x0443, {1, {0x0423 }}},\r
- { 0x0444, {1, {0x0424 }}},\r
- { 0x0445, {1, {0x0425 }}},\r
- { 0x0446, {1, {0x0426 }}},\r
- { 0x0447, {1, {0x0427 }}},\r
- { 0x0448, {1, {0x0428 }}},\r
- { 0x0449, {1, {0x0429 }}},\r
- { 0x044a, {1, {0x042a }}},\r
- { 0x044b, {1, {0x042b }}},\r
- { 0x044c, {1, {0x042c }}},\r
- { 0x044d, {1, {0x042d }}},\r
- { 0x044e, {1, {0x042e }}},\r
- { 0x044f, {1, {0x042f }}},\r
- { 0x0450, {1, {0x0400 }}},\r
- { 0x0451, {1, {0x0401 }}},\r
- { 0x0452, {1, {0x0402 }}},\r
- { 0x0453, {1, {0x0403 }}},\r
- { 0x0454, {1, {0x0404 }}},\r
- { 0x0455, {1, {0x0405 }}},\r
- { 0x0456, {1, {0x0406 }}},\r
- { 0x0457, {1, {0x0407 }}},\r
- { 0x0458, {1, {0x0408 }}},\r
- { 0x0459, {1, {0x0409 }}},\r
- { 0x045a, {1, {0x040a }}},\r
- { 0x045b, {1, {0x040b }}},\r
- { 0x045c, {1, {0x040c }}},\r
- { 0x045d, {1, {0x040d }}},\r
- { 0x045e, {1, {0x040e }}},\r
- { 0x045f, {1, {0x040f }}},\r
- { 0x0461, {1, {0x0460 }}},\r
- { 0x0463, {1, {0x0462 }}},\r
- { 0x0465, {1, {0x0464 }}},\r
- { 0x0467, {1, {0x0466 }}},\r
- { 0x0469, {1, {0x0468 }}},\r
- { 0x046b, {1, {0x046a }}},\r
- { 0x046d, {1, {0x046c }}},\r
- { 0x046f, {1, {0x046e }}},\r
- { 0x0471, {1, {0x0470 }}},\r
- { 0x0473, {1, {0x0472 }}},\r
- { 0x0475, {1, {0x0474 }}},\r
- { 0x0477, {1, {0x0476 }}},\r
- { 0x0479, {1, {0x0478 }}},\r
- { 0x047b, {1, {0x047a }}},\r
- { 0x047d, {1, {0x047c }}},\r
- { 0x047f, {1, {0x047e }}},\r
- { 0x0481, {1, {0x0480 }}},\r
- { 0x048b, {1, {0x048a }}},\r
- { 0x048d, {1, {0x048c }}},\r
- { 0x048f, {1, {0x048e }}},\r
- { 0x0491, {1, {0x0490 }}},\r
- { 0x0493, {1, {0x0492 }}},\r
- { 0x0495, {1, {0x0494 }}},\r
- { 0x0497, {1, {0x0496 }}},\r
- { 0x0499, {1, {0x0498 }}},\r
- { 0x049b, {1, {0x049a }}},\r
- { 0x049d, {1, {0x049c }}},\r
- { 0x049f, {1, {0x049e }}},\r
- { 0x04a1, {1, {0x04a0 }}},\r
- { 0x04a3, {1, {0x04a2 }}},\r
- { 0x04a5, {1, {0x04a4 }}},\r
- { 0x04a7, {1, {0x04a6 }}},\r
- { 0x04a9, {1, {0x04a8 }}},\r
- { 0x04ab, {1, {0x04aa }}},\r
- { 0x04ad, {1, {0x04ac }}},\r
- { 0x04af, {1, {0x04ae }}},\r
- { 0x04b1, {1, {0x04b0 }}},\r
- { 0x04b3, {1, {0x04b2 }}},\r
- { 0x04b5, {1, {0x04b4 }}},\r
- { 0x04b7, {1, {0x04b6 }}},\r
- { 0x04b9, {1, {0x04b8 }}},\r
- { 0x04bb, {1, {0x04ba }}},\r
- { 0x04bd, {1, {0x04bc }}},\r
- { 0x04bf, {1, {0x04be }}},\r
- { 0x04c2, {1, {0x04c1 }}},\r
- { 0x04c4, {1, {0x04c3 }}},\r
- { 0x04c6, {1, {0x04c5 }}},\r
- { 0x04c8, {1, {0x04c7 }}},\r
- { 0x04ca, {1, {0x04c9 }}},\r
- { 0x04cc, {1, {0x04cb }}},\r
- { 0x04ce, {1, {0x04cd }}},\r
- { 0x04d1, {1, {0x04d0 }}},\r
- { 0x04d3, {1, {0x04d2 }}},\r
- { 0x04d5, {1, {0x04d4 }}},\r
- { 0x04d7, {1, {0x04d6 }}},\r
- { 0x04d9, {1, {0x04d8 }}},\r
- { 0x04db, {1, {0x04da }}},\r
- { 0x04dd, {1, {0x04dc }}},\r
- { 0x04df, {1, {0x04de }}},\r
- { 0x04e1, {1, {0x04e0 }}},\r
- { 0x04e3, {1, {0x04e2 }}},\r
- { 0x04e5, {1, {0x04e4 }}},\r
- { 0x04e7, {1, {0x04e6 }}},\r
- { 0x04e9, {1, {0x04e8 }}},\r
- { 0x04eb, {1, {0x04ea }}},\r
- { 0x04ed, {1, {0x04ec }}},\r
- { 0x04ef, {1, {0x04ee }}},\r
- { 0x04f1, {1, {0x04f0 }}},\r
- { 0x04f3, {1, {0x04f2 }}},\r
- { 0x04f5, {1, {0x04f4 }}},\r
- { 0x04f7, {1, {0x04f6 }}},\r
- { 0x04f9, {1, {0x04f8 }}},\r
- { 0x0501, {1, {0x0500 }}},\r
- { 0x0503, {1, {0x0502 }}},\r
- { 0x0505, {1, {0x0504 }}},\r
- { 0x0507, {1, {0x0506 }}},\r
- { 0x0509, {1, {0x0508 }}},\r
- { 0x050b, {1, {0x050a }}},\r
- { 0x050d, {1, {0x050c }}},\r
- { 0x050f, {1, {0x050e }}},\r
- { 0x0561, {1, {0x0531 }}},\r
- { 0x0562, {1, {0x0532 }}},\r
- { 0x0563, {1, {0x0533 }}},\r
- { 0x0564, {1, {0x0534 }}},\r
- { 0x0565, {1, {0x0535 }}},\r
- { 0x0566, {1, {0x0536 }}},\r
- { 0x0567, {1, {0x0537 }}},\r
- { 0x0568, {1, {0x0538 }}},\r
- { 0x0569, {1, {0x0539 }}},\r
- { 0x056a, {1, {0x053a }}},\r
- { 0x056b, {1, {0x053b }}},\r
- { 0x056c, {1, {0x053c }}},\r
- { 0x056d, {1, {0x053d }}},\r
- { 0x056e, {1, {0x053e }}},\r
- { 0x056f, {1, {0x053f }}},\r
- { 0x0570, {1, {0x0540 }}},\r
- { 0x0571, {1, {0x0541 }}},\r
- { 0x0572, {1, {0x0542 }}},\r
- { 0x0573, {1, {0x0543 }}},\r
- { 0x0574, {1, {0x0544 }}},\r
- { 0x0575, {1, {0x0545 }}},\r
- { 0x0576, {1, {0x0546 }}},\r
- { 0x0577, {1, {0x0547 }}},\r
- { 0x0578, {1, {0x0548 }}},\r
- { 0x0579, {1, {0x0549 }}},\r
- { 0x057a, {1, {0x054a }}},\r
- { 0x057b, {1, {0x054b }}},\r
- { 0x057c, {1, {0x054c }}},\r
- { 0x057d, {1, {0x054d }}},\r
- { 0x057e, {1, {0x054e }}},\r
- { 0x057f, {1, {0x054f }}},\r
- { 0x0580, {1, {0x0550 }}},\r
- { 0x0581, {1, {0x0551 }}},\r
- { 0x0582, {1, {0x0552 }}},\r
- { 0x0583, {1, {0x0553 }}},\r
- { 0x0584, {1, {0x0554 }}},\r
- { 0x0585, {1, {0x0555 }}},\r
- { 0x0586, {1, {0x0556 }}},\r
- { 0x1e01, {1, {0x1e00 }}},\r
- { 0x1e03, {1, {0x1e02 }}},\r
- { 0x1e05, {1, {0x1e04 }}},\r
- { 0x1e07, {1, {0x1e06 }}},\r
- { 0x1e09, {1, {0x1e08 }}},\r
- { 0x1e0b, {1, {0x1e0a }}},\r
- { 0x1e0d, {1, {0x1e0c }}},\r
- { 0x1e0f, {1, {0x1e0e }}},\r
- { 0x1e11, {1, {0x1e10 }}},\r
- { 0x1e13, {1, {0x1e12 }}},\r
- { 0x1e15, {1, {0x1e14 }}},\r
- { 0x1e17, {1, {0x1e16 }}},\r
- { 0x1e19, {1, {0x1e18 }}},\r
- { 0x1e1b, {1, {0x1e1a }}},\r
- { 0x1e1d, {1, {0x1e1c }}},\r
- { 0x1e1f, {1, {0x1e1e }}},\r
- { 0x1e21, {1, {0x1e20 }}},\r
- { 0x1e23, {1, {0x1e22 }}},\r
- { 0x1e25, {1, {0x1e24 }}},\r
- { 0x1e27, {1, {0x1e26 }}},\r
- { 0x1e29, {1, {0x1e28 }}},\r
- { 0x1e2b, {1, {0x1e2a }}},\r
- { 0x1e2d, {1, {0x1e2c }}},\r
- { 0x1e2f, {1, {0x1e2e }}},\r
- { 0x1e31, {1, {0x1e30 }}},\r
- { 0x1e33, {1, {0x1e32 }}},\r
- { 0x1e35, {1, {0x1e34 }}},\r
- { 0x1e37, {1, {0x1e36 }}},\r
- { 0x1e39, {1, {0x1e38 }}},\r
- { 0x1e3b, {1, {0x1e3a }}},\r
- { 0x1e3d, {1, {0x1e3c }}},\r
- { 0x1e3f, {1, {0x1e3e }}},\r
- { 0x1e41, {1, {0x1e40 }}},\r
- { 0x1e43, {1, {0x1e42 }}},\r
- { 0x1e45, {1, {0x1e44 }}},\r
- { 0x1e47, {1, {0x1e46 }}},\r
- { 0x1e49, {1, {0x1e48 }}},\r
- { 0x1e4b, {1, {0x1e4a }}},\r
- { 0x1e4d, {1, {0x1e4c }}},\r
- { 0x1e4f, {1, {0x1e4e }}},\r
- { 0x1e51, {1, {0x1e50 }}},\r
- { 0x1e53, {1, {0x1e52 }}},\r
- { 0x1e55, {1, {0x1e54 }}},\r
- { 0x1e57, {1, {0x1e56 }}},\r
- { 0x1e59, {1, {0x1e58 }}},\r
- { 0x1e5b, {1, {0x1e5a }}},\r
- { 0x1e5d, {1, {0x1e5c }}},\r
- { 0x1e5f, {1, {0x1e5e }}},\r
- { 0x1e61, {2, {0x1e9b, 0x1e60 }}},\r
- { 0x1e63, {1, {0x1e62 }}},\r
- { 0x1e65, {1, {0x1e64 }}},\r
- { 0x1e67, {1, {0x1e66 }}},\r
- { 0x1e69, {1, {0x1e68 }}},\r
- { 0x1e6b, {1, {0x1e6a }}},\r
- { 0x1e6d, {1, {0x1e6c }}},\r
- { 0x1e6f, {1, {0x1e6e }}},\r
- { 0x1e71, {1, {0x1e70 }}},\r
- { 0x1e73, {1, {0x1e72 }}},\r
- { 0x1e75, {1, {0x1e74 }}},\r
- { 0x1e77, {1, {0x1e76 }}},\r
- { 0x1e79, {1, {0x1e78 }}},\r
- { 0x1e7b, {1, {0x1e7a }}},\r
- { 0x1e7d, {1, {0x1e7c }}},\r
- { 0x1e7f, {1, {0x1e7e }}},\r
- { 0x1e81, {1, {0x1e80 }}},\r
- { 0x1e83, {1, {0x1e82 }}},\r
- { 0x1e85, {1, {0x1e84 }}},\r
- { 0x1e87, {1, {0x1e86 }}},\r
- { 0x1e89, {1, {0x1e88 }}},\r
- { 0x1e8b, {1, {0x1e8a }}},\r
- { 0x1e8d, {1, {0x1e8c }}},\r
- { 0x1e8f, {1, {0x1e8e }}},\r
- { 0x1e91, {1, {0x1e90 }}},\r
- { 0x1e93, {1, {0x1e92 }}},\r
- { 0x1e95, {1, {0x1e94 }}},\r
- { 0x1ea1, {1, {0x1ea0 }}},\r
- { 0x1ea3, {1, {0x1ea2 }}},\r
- { 0x1ea5, {1, {0x1ea4 }}},\r
- { 0x1ea7, {1, {0x1ea6 }}},\r
- { 0x1ea9, {1, {0x1ea8 }}},\r
- { 0x1eab, {1, {0x1eaa }}},\r
- { 0x1ead, {1, {0x1eac }}},\r
- { 0x1eaf, {1, {0x1eae }}},\r
- { 0x1eb1, {1, {0x1eb0 }}},\r
- { 0x1eb3, {1, {0x1eb2 }}},\r
- { 0x1eb5, {1, {0x1eb4 }}},\r
- { 0x1eb7, {1, {0x1eb6 }}},\r
- { 0x1eb9, {1, {0x1eb8 }}},\r
- { 0x1ebb, {1, {0x1eba }}},\r
- { 0x1ebd, {1, {0x1ebc }}},\r
- { 0x1ebf, {1, {0x1ebe }}},\r
- { 0x1ec1, {1, {0x1ec0 }}},\r
- { 0x1ec3, {1, {0x1ec2 }}},\r
- { 0x1ec5, {1, {0x1ec4 }}},\r
- { 0x1ec7, {1, {0x1ec6 }}},\r
- { 0x1ec9, {1, {0x1ec8 }}},\r
- { 0x1ecb, {1, {0x1eca }}},\r
- { 0x1ecd, {1, {0x1ecc }}},\r
- { 0x1ecf, {1, {0x1ece }}},\r
- { 0x1ed1, {1, {0x1ed0 }}},\r
- { 0x1ed3, {1, {0x1ed2 }}},\r
- { 0x1ed5, {1, {0x1ed4 }}},\r
- { 0x1ed7, {1, {0x1ed6 }}},\r
- { 0x1ed9, {1, {0x1ed8 }}},\r
- { 0x1edb, {1, {0x1eda }}},\r
- { 0x1edd, {1, {0x1edc }}},\r
- { 0x1edf, {1, {0x1ede }}},\r
- { 0x1ee1, {1, {0x1ee0 }}},\r
- { 0x1ee3, {1, {0x1ee2 }}},\r
- { 0x1ee5, {1, {0x1ee4 }}},\r
- { 0x1ee7, {1, {0x1ee6 }}},\r
- { 0x1ee9, {1, {0x1ee8 }}},\r
- { 0x1eeb, {1, {0x1eea }}},\r
- { 0x1eed, {1, {0x1eec }}},\r
- { 0x1eef, {1, {0x1eee }}},\r
- { 0x1ef1, {1, {0x1ef0 }}},\r
- { 0x1ef3, {1, {0x1ef2 }}},\r
- { 0x1ef5, {1, {0x1ef4 }}},\r
- { 0x1ef7, {1, {0x1ef6 }}},\r
- { 0x1ef9, {1, {0x1ef8 }}},\r
- { 0x1f00, {1, {0x1f08 }}},\r
- { 0x1f01, {1, {0x1f09 }}},\r
- { 0x1f02, {1, {0x1f0a }}},\r
- { 0x1f03, {1, {0x1f0b }}},\r
- { 0x1f04, {1, {0x1f0c }}},\r
- { 0x1f05, {1, {0x1f0d }}},\r
- { 0x1f06, {1, {0x1f0e }}},\r
- { 0x1f07, {1, {0x1f0f }}},\r
- { 0x1f10, {1, {0x1f18 }}},\r
- { 0x1f11, {1, {0x1f19 }}},\r
- { 0x1f12, {1, {0x1f1a }}},\r
- { 0x1f13, {1, {0x1f1b }}},\r
- { 0x1f14, {1, {0x1f1c }}},\r
- { 0x1f15, {1, {0x1f1d }}},\r
- { 0x1f20, {1, {0x1f28 }}},\r
- { 0x1f21, {1, {0x1f29 }}},\r
- { 0x1f22, {1, {0x1f2a }}},\r
- { 0x1f23, {1, {0x1f2b }}},\r
- { 0x1f24, {1, {0x1f2c }}},\r
- { 0x1f25, {1, {0x1f2d }}},\r
- { 0x1f26, {1, {0x1f2e }}},\r
- { 0x1f27, {1, {0x1f2f }}},\r
- { 0x1f30, {1, {0x1f38 }}},\r
- { 0x1f31, {1, {0x1f39 }}},\r
- { 0x1f32, {1, {0x1f3a }}},\r
- { 0x1f33, {1, {0x1f3b }}},\r
- { 0x1f34, {1, {0x1f3c }}},\r
- { 0x1f35, {1, {0x1f3d }}},\r
- { 0x1f36, {1, {0x1f3e }}},\r
- { 0x1f37, {1, {0x1f3f }}},\r
- { 0x1f40, {1, {0x1f48 }}},\r
- { 0x1f41, {1, {0x1f49 }}},\r
- { 0x1f42, {1, {0x1f4a }}},\r
- { 0x1f43, {1, {0x1f4b }}},\r
- { 0x1f44, {1, {0x1f4c }}},\r
- { 0x1f45, {1, {0x1f4d }}},\r
- { 0x1f51, {1, {0x1f59 }}},\r
- { 0x1f53, {1, {0x1f5b }}},\r
- { 0x1f55, {1, {0x1f5d }}},\r
- { 0x1f57, {1, {0x1f5f }}},\r
- { 0x1f60, {1, {0x1f68 }}},\r
- { 0x1f61, {1, {0x1f69 }}},\r
- { 0x1f62, {1, {0x1f6a }}},\r
- { 0x1f63, {1, {0x1f6b }}},\r
- { 0x1f64, {1, {0x1f6c }}},\r
- { 0x1f65, {1, {0x1f6d }}},\r
- { 0x1f66, {1, {0x1f6e }}},\r
- { 0x1f67, {1, {0x1f6f }}},\r
- { 0x1f70, {1, {0x1fba }}},\r
- { 0x1f71, {1, {0x1fbb }}},\r
- { 0x1f72, {1, {0x1fc8 }}},\r
- { 0x1f73, {1, {0x1fc9 }}},\r
- { 0x1f74, {1, {0x1fca }}},\r
- { 0x1f75, {1, {0x1fcb }}},\r
- { 0x1f76, {1, {0x1fda }}},\r
- { 0x1f77, {1, {0x1fdb }}},\r
- { 0x1f78, {1, {0x1ff8 }}},\r
- { 0x1f79, {1, {0x1ff9 }}},\r
- { 0x1f7a, {1, {0x1fea }}},\r
- { 0x1f7b, {1, {0x1feb }}},\r
- { 0x1f7c, {1, {0x1ffa }}},\r
- { 0x1f7d, {1, {0x1ffb }}},\r
- { 0x1fb0, {1, {0x1fb8 }}},\r
- { 0x1fb1, {1, {0x1fb9 }}},\r
- { 0x1fd0, {1, {0x1fd8 }}},\r
- { 0x1fd1, {1, {0x1fd9 }}},\r
- { 0x1fe0, {1, {0x1fe8 }}},\r
- { 0x1fe1, {1, {0x1fe9 }}},\r
- { 0x1fe5, {1, {0x1fec }}},\r
- { 0x2170, {1, {0x2160 }}},\r
- { 0x2171, {1, {0x2161 }}},\r
- { 0x2172, {1, {0x2162 }}},\r
- { 0x2173, {1, {0x2163 }}},\r
- { 0x2174, {1, {0x2164 }}},\r
- { 0x2175, {1, {0x2165 }}},\r
- { 0x2176, {1, {0x2166 }}},\r
- { 0x2177, {1, {0x2167 }}},\r
- { 0x2178, {1, {0x2168 }}},\r
- { 0x2179, {1, {0x2169 }}},\r
- { 0x217a, {1, {0x216a }}},\r
- { 0x217b, {1, {0x216b }}},\r
- { 0x217c, {1, {0x216c }}},\r
- { 0x217d, {1, {0x216d }}},\r
- { 0x217e, {1, {0x216e }}},\r
- { 0x217f, {1, {0x216f }}},\r
- { 0x24d0, {1, {0x24b6 }}},\r
- { 0x24d1, {1, {0x24b7 }}},\r
- { 0x24d2, {1, {0x24b8 }}},\r
- { 0x24d3, {1, {0x24b9 }}},\r
- { 0x24d4, {1, {0x24ba }}},\r
- { 0x24d5, {1, {0x24bb }}},\r
- { 0x24d6, {1, {0x24bc }}},\r
- { 0x24d7, {1, {0x24bd }}},\r
- { 0x24d8, {1, {0x24be }}},\r
- { 0x24d9, {1, {0x24bf }}},\r
- { 0x24da, {1, {0x24c0 }}},\r
- { 0x24db, {1, {0x24c1 }}},\r
- { 0x24dc, {1, {0x24c2 }}},\r
- { 0x24dd, {1, {0x24c3 }}},\r
- { 0x24de, {1, {0x24c4 }}},\r
- { 0x24df, {1, {0x24c5 }}},\r
- { 0x24e0, {1, {0x24c6 }}},\r
- { 0x24e1, {1, {0x24c7 }}},\r
- { 0x24e2, {1, {0x24c8 }}},\r
- { 0x24e3, {1, {0x24c9 }}},\r
- { 0x24e4, {1, {0x24ca }}},\r
- { 0x24e5, {1, {0x24cb }}},\r
- { 0x24e6, {1, {0x24cc }}},\r
- { 0x24e7, {1, {0x24cd }}},\r
- { 0x24e8, {1, {0x24ce }}},\r
- { 0x24e9, {1, {0x24cf }}},\r
- { 0x2c30, {1, {0x2c00 }}},\r
- { 0x2c31, {1, {0x2c01 }}},\r
- { 0x2c32, {1, {0x2c02 }}},\r
- { 0x2c33, {1, {0x2c03 }}},\r
- { 0x2c34, {1, {0x2c04 }}},\r
- { 0x2c35, {1, {0x2c05 }}},\r
- { 0x2c36, {1, {0x2c06 }}},\r
- { 0x2c37, {1, {0x2c07 }}},\r
- { 0x2c38, {1, {0x2c08 }}},\r
- { 0x2c39, {1, {0x2c09 }}},\r
- { 0x2c3a, {1, {0x2c0a }}},\r
- { 0x2c3b, {1, {0x2c0b }}},\r
- { 0x2c3c, {1, {0x2c0c }}},\r
- { 0x2c3d, {1, {0x2c0d }}},\r
- { 0x2c3e, {1, {0x2c0e }}},\r
- { 0x2c3f, {1, {0x2c0f }}},\r
- { 0x2c40, {1, {0x2c10 }}},\r
- { 0x2c41, {1, {0x2c11 }}},\r
- { 0x2c42, {1, {0x2c12 }}},\r
- { 0x2c43, {1, {0x2c13 }}},\r
- { 0x2c44, {1, {0x2c14 }}},\r
- { 0x2c45, {1, {0x2c15 }}},\r
- { 0x2c46, {1, {0x2c16 }}},\r
- { 0x2c47, {1, {0x2c17 }}},\r
- { 0x2c48, {1, {0x2c18 }}},\r
- { 0x2c49, {1, {0x2c19 }}},\r
- { 0x2c4a, {1, {0x2c1a }}},\r
- { 0x2c4b, {1, {0x2c1b }}},\r
- { 0x2c4c, {1, {0x2c1c }}},\r
- { 0x2c4d, {1, {0x2c1d }}},\r
- { 0x2c4e, {1, {0x2c1e }}},\r
- { 0x2c4f, {1, {0x2c1f }}},\r
- { 0x2c50, {1, {0x2c20 }}},\r
- { 0x2c51, {1, {0x2c21 }}},\r
- { 0x2c52, {1, {0x2c22 }}},\r
- { 0x2c53, {1, {0x2c23 }}},\r
- { 0x2c54, {1, {0x2c24 }}},\r
- { 0x2c55, {1, {0x2c25 }}},\r
- { 0x2c56, {1, {0x2c26 }}},\r
- { 0x2c57, {1, {0x2c27 }}},\r
- { 0x2c58, {1, {0x2c28 }}},\r
- { 0x2c59, {1, {0x2c29 }}},\r
- { 0x2c5a, {1, {0x2c2a }}},\r
- { 0x2c5b, {1, {0x2c2b }}},\r
- { 0x2c5c, {1, {0x2c2c }}},\r
- { 0x2c5d, {1, {0x2c2d }}},\r
- { 0x2c5e, {1, {0x2c2e }}},\r
- { 0x2c81, {1, {0x2c80 }}},\r
- { 0x2c83, {1, {0x2c82 }}},\r
- { 0x2c85, {1, {0x2c84 }}},\r
- { 0x2c87, {1, {0x2c86 }}},\r
- { 0x2c89, {1, {0x2c88 }}},\r
- { 0x2c8b, {1, {0x2c8a }}},\r
- { 0x2c8d, {1, {0x2c8c }}},\r
- { 0x2c8f, {1, {0x2c8e }}},\r
- { 0x2c91, {1, {0x2c90 }}},\r
- { 0x2c93, {1, {0x2c92 }}},\r
- { 0x2c95, {1, {0x2c94 }}},\r
- { 0x2c97, {1, {0x2c96 }}},\r
- { 0x2c99, {1, {0x2c98 }}},\r
- { 0x2c9b, {1, {0x2c9a }}},\r
- { 0x2c9d, {1, {0x2c9c }}},\r
- { 0x2c9f, {1, {0x2c9e }}},\r
- { 0x2ca1, {1, {0x2ca0 }}},\r
- { 0x2ca3, {1, {0x2ca2 }}},\r
- { 0x2ca5, {1, {0x2ca4 }}},\r
- { 0x2ca7, {1, {0x2ca6 }}},\r
- { 0x2ca9, {1, {0x2ca8 }}},\r
- { 0x2cab, {1, {0x2caa }}},\r
- { 0x2cad, {1, {0x2cac }}},\r
- { 0x2caf, {1, {0x2cae }}},\r
- { 0x2cb1, {1, {0x2cb0 }}},\r
- { 0x2cb3, {1, {0x2cb2 }}},\r
- { 0x2cb5, {1, {0x2cb4 }}},\r
- { 0x2cb7, {1, {0x2cb6 }}},\r
- { 0x2cb9, {1, {0x2cb8 }}},\r
- { 0x2cbb, {1, {0x2cba }}},\r
- { 0x2cbd, {1, {0x2cbc }}},\r
- { 0x2cbf, {1, {0x2cbe }}},\r
- { 0x2cc1, {1, {0x2cc0 }}},\r
- { 0x2cc3, {1, {0x2cc2 }}},\r
- { 0x2cc5, {1, {0x2cc4 }}},\r
- { 0x2cc7, {1, {0x2cc6 }}},\r
- { 0x2cc9, {1, {0x2cc8 }}},\r
- { 0x2ccb, {1, {0x2cca }}},\r
- { 0x2ccd, {1, {0x2ccc }}},\r
- { 0x2ccf, {1, {0x2cce }}},\r
- { 0x2cd1, {1, {0x2cd0 }}},\r
- { 0x2cd3, {1, {0x2cd2 }}},\r
- { 0x2cd5, {1, {0x2cd4 }}},\r
- { 0x2cd7, {1, {0x2cd6 }}},\r
- { 0x2cd9, {1, {0x2cd8 }}},\r
- { 0x2cdb, {1, {0x2cda }}},\r
- { 0x2cdd, {1, {0x2cdc }}},\r
- { 0x2cdf, {1, {0x2cde }}},\r
- { 0x2ce1, {1, {0x2ce0 }}},\r
- { 0x2ce3, {1, {0x2ce2 }}},\r
- { 0x2d00, {1, {0x10a0 }}},\r
- { 0x2d01, {1, {0x10a1 }}},\r
- { 0x2d02, {1, {0x10a2 }}},\r
- { 0x2d03, {1, {0x10a3 }}},\r
- { 0x2d04, {1, {0x10a4 }}},\r
- { 0x2d05, {1, {0x10a5 }}},\r
- { 0x2d06, {1, {0x10a6 }}},\r
- { 0x2d07, {1, {0x10a7 }}},\r
- { 0x2d08, {1, {0x10a8 }}},\r
- { 0x2d09, {1, {0x10a9 }}},\r
- { 0x2d0a, {1, {0x10aa }}},\r
- { 0x2d0b, {1, {0x10ab }}},\r
- { 0x2d0c, {1, {0x10ac }}},\r
- { 0x2d0d, {1, {0x10ad }}},\r
- { 0x2d0e, {1, {0x10ae }}},\r
- { 0x2d0f, {1, {0x10af }}},\r
- { 0x2d10, {1, {0x10b0 }}},\r
- { 0x2d11, {1, {0x10b1 }}},\r
- { 0x2d12, {1, {0x10b2 }}},\r
- { 0x2d13, {1, {0x10b3 }}},\r
- { 0x2d14, {1, {0x10b4 }}},\r
- { 0x2d15, {1, {0x10b5 }}},\r
- { 0x2d16, {1, {0x10b6 }}},\r
- { 0x2d17, {1, {0x10b7 }}},\r
- { 0x2d18, {1, {0x10b8 }}},\r
- { 0x2d19, {1, {0x10b9 }}},\r
- { 0x2d1a, {1, {0x10ba }}},\r
- { 0x2d1b, {1, {0x10bb }}},\r
- { 0x2d1c, {1, {0x10bc }}},\r
- { 0x2d1d, {1, {0x10bd }}},\r
- { 0x2d1e, {1, {0x10be }}},\r
- { 0x2d1f, {1, {0x10bf }}},\r
- { 0x2d20, {1, {0x10c0 }}},\r
- { 0x2d21, {1, {0x10c1 }}},\r
- { 0x2d22, {1, {0x10c2 }}},\r
- { 0x2d23, {1, {0x10c3 }}},\r
- { 0x2d24, {1, {0x10c4 }}},\r
- { 0x2d25, {1, {0x10c5 }}},\r
- { 0xff41, {1, {0xff21 }}},\r
- { 0xff42, {1, {0xff22 }}},\r
- { 0xff43, {1, {0xff23 }}},\r
- { 0xff44, {1, {0xff24 }}},\r
- { 0xff45, {1, {0xff25 }}},\r
- { 0xff46, {1, {0xff26 }}},\r
- { 0xff47, {1, {0xff27 }}},\r
- { 0xff48, {1, {0xff28 }}},\r
- { 0xff49, {1, {0xff29 }}},\r
- { 0xff4a, {1, {0xff2a }}},\r
- { 0xff4b, {1, {0xff2b }}},\r
- { 0xff4c, {1, {0xff2c }}},\r
- { 0xff4d, {1, {0xff2d }}},\r
- { 0xff4e, {1, {0xff2e }}},\r
- { 0xff4f, {1, {0xff2f }}},\r
- { 0xff50, {1, {0xff30 }}},\r
- { 0xff51, {1, {0xff31 }}},\r
- { 0xff52, {1, {0xff32 }}},\r
- { 0xff53, {1, {0xff33 }}},\r
- { 0xff54, {1, {0xff34 }}},\r
- { 0xff55, {1, {0xff35 }}},\r
- { 0xff56, {1, {0xff36 }}},\r
- { 0xff57, {1, {0xff37 }}},\r
- { 0xff58, {1, {0xff38 }}},\r
- { 0xff59, {1, {0xff39 }}},\r
- { 0xff5a, {1, {0xff3a }}},\r
- { 0x10428, {1, {0x10400 }}},\r
- { 0x10429, {1, {0x10401 }}},\r
- { 0x1042a, {1, {0x10402 }}},\r
- { 0x1042b, {1, {0x10403 }}},\r
- { 0x1042c, {1, {0x10404 }}},\r
- { 0x1042d, {1, {0x10405 }}},\r
- { 0x1042e, {1, {0x10406 }}},\r
- { 0x1042f, {1, {0x10407 }}},\r
- { 0x10430, {1, {0x10408 }}},\r
- { 0x10431, {1, {0x10409 }}},\r
- { 0x10432, {1, {0x1040a }}},\r
- { 0x10433, {1, {0x1040b }}},\r
- { 0x10434, {1, {0x1040c }}},\r
- { 0x10435, {1, {0x1040d }}},\r
- { 0x10436, {1, {0x1040e }}},\r
- { 0x10437, {1, {0x1040f }}},\r
- { 0x10438, {1, {0x10410 }}},\r
- { 0x10439, {1, {0x10411 }}},\r
- { 0x1043a, {1, {0x10412 }}},\r
- { 0x1043b, {1, {0x10413 }}},\r
- { 0x1043c, {1, {0x10414 }}},\r
- { 0x1043d, {1, {0x10415 }}},\r
- { 0x1043e, {1, {0x10416 }}},\r
- { 0x1043f, {1, {0x10417 }}},\r
- { 0x10440, {1, {0x10418 }}},\r
- { 0x10441, {1, {0x10419 }}},\r
- { 0x10442, {1, {0x1041a }}},\r
- { 0x10443, {1, {0x1041b }}},\r
- { 0x10444, {1, {0x1041c }}},\r
- { 0x10445, {1, {0x1041d }}},\r
- { 0x10446, {1, {0x1041e }}},\r
- { 0x10447, {1, {0x1041f }}},\r
- { 0x10448, {1, {0x10420 }}},\r
- { 0x10449, {1, {0x10421 }}},\r
- { 0x1044a, {1, {0x10422 }}},\r
- { 0x1044b, {1, {0x10423 }}},\r
- { 0x1044c, {1, {0x10424 }}},\r
- { 0x1044d, {1, {0x10425 }}},\r
- { 0x1044e, {1, {0x10426 }}},\r
- { 0x1044f, {1, {0x10427 }}}\r
-};\r
-\r
-static const CaseUnfold_11_Type CaseUnfold_11_Locale[] = {\r
- { 0x0069, {1, {0x0049 }}}\r
-};\r
-\r
-static const CaseUnfold_12_Type CaseUnfold_12[] = {\r
- { {0x0061, 0x02be}, {1, {0x1e9a }}},\r
- { {0x0066, 0x0066}, {1, {0xfb00 }}},\r
- { {0x0066, 0x0069}, {1, {0xfb01 }}},\r
- { {0x0066, 0x006c}, {1, {0xfb02 }}},\r
- { {0x0068, 0x0331}, {1, {0x1e96 }}},\r
- { {0x006a, 0x030c}, {1, {0x01f0 }}},\r
- { {0x0073, 0x0073}, {1, {0x00df }}},\r
- { {0x0073, 0x0074}, {2, {0xfb05, 0xfb06 }}},\r
- { {0x0074, 0x0308}, {1, {0x1e97 }}},\r
- { {0x0077, 0x030a}, {1, {0x1e98 }}},\r
- { {0x0079, 0x030a}, {1, {0x1e99 }}},\r
- { {0x02bc, 0x006e}, {1, {0x0149 }}},\r
- { {0x03ac, 0x03b9}, {1, {0x1fb4 }}},\r
- { {0x03ae, 0x03b9}, {1, {0x1fc4 }}},\r
- { {0x03b1, 0x0342}, {1, {0x1fb6 }}},\r
- { {0x03b1, 0x03b9}, {2, {0x1fb3, 0x1fbc }}},\r
- { {0x03b7, 0x0342}, {1, {0x1fc6 }}},\r
- { {0x03b7, 0x03b9}, {2, {0x1fc3, 0x1fcc }}},\r
- { {0x03b9, 0x0342}, {1, {0x1fd6 }}},\r
- { {0x03c1, 0x0313}, {1, {0x1fe4 }}},\r
- { {0x03c5, 0x0313}, {1, {0x1f50 }}},\r
- { {0x03c5, 0x0342}, {1, {0x1fe6 }}},\r
- { {0x03c9, 0x0342}, {1, {0x1ff6 }}},\r
- { {0x03c9, 0x03b9}, {2, {0x1ff3, 0x1ffc }}},\r
- { {0x03ce, 0x03b9}, {1, {0x1ff4 }}},\r
- { {0x0565, 0x0582}, {1, {0x0587 }}},\r
- { {0x0574, 0x0565}, {1, {0xfb14 }}},\r
- { {0x0574, 0x056b}, {1, {0xfb15 }}},\r
- { {0x0574, 0x056d}, {1, {0xfb17 }}},\r
- { {0x0574, 0x0576}, {1, {0xfb13 }}},\r
- { {0x057e, 0x0576}, {1, {0xfb16 }}},\r
- { {0x1f00, 0x03b9}, {2, {0x1f88, 0x1f80 }}},\r
- { {0x1f01, 0x03b9}, {2, {0x1f81, 0x1f89 }}},\r
- { {0x1f02, 0x03b9}, {2, {0x1f82, 0x1f8a }}},\r
- { {0x1f03, 0x03b9}, {2, {0x1f83, 0x1f8b }}},\r
- { {0x1f04, 0x03b9}, {2, {0x1f84, 0x1f8c }}},\r
- { {0x1f05, 0x03b9}, {2, {0x1f85, 0x1f8d }}},\r
- { {0x1f06, 0x03b9}, {2, {0x1f86, 0x1f8e }}},\r
- { {0x1f07, 0x03b9}, {2, {0x1f87, 0x1f8f }}},\r
- { {0x1f20, 0x03b9}, {2, {0x1f90, 0x1f98 }}},\r
- { {0x1f21, 0x03b9}, {2, {0x1f91, 0x1f99 }}},\r
- { {0x1f22, 0x03b9}, {2, {0x1f92, 0x1f9a }}},\r
- { {0x1f23, 0x03b9}, {2, {0x1f93, 0x1f9b }}},\r
- { {0x1f24, 0x03b9}, {2, {0x1f94, 0x1f9c }}},\r
- { {0x1f25, 0x03b9}, {2, {0x1f95, 0x1f9d }}},\r
- { {0x1f26, 0x03b9}, {2, {0x1f96, 0x1f9e }}},\r
- { {0x1f27, 0x03b9}, {2, {0x1f97, 0x1f9f }}},\r
- { {0x1f60, 0x03b9}, {2, {0x1fa0, 0x1fa8 }}},\r
- { {0x1f61, 0x03b9}, {2, {0x1fa1, 0x1fa9 }}},\r
- { {0x1f62, 0x03b9}, {2, {0x1fa2, 0x1faa }}},\r
- { {0x1f63, 0x03b9}, {2, {0x1fa3, 0x1fab }}},\r
- { {0x1f64, 0x03b9}, {2, {0x1fa4, 0x1fac }}},\r
- { {0x1f65, 0x03b9}, {2, {0x1fa5, 0x1fad }}},\r
- { {0x1f66, 0x03b9}, {2, {0x1fa6, 0x1fae }}},\r
- { {0x1f67, 0x03b9}, {2, {0x1fa7, 0x1faf }}},\r
- { {0x1f70, 0x03b9}, {1, {0x1fb2 }}},\r
- { {0x1f74, 0x03b9}, {1, {0x1fc2 }}},\r
- { {0x1f7c, 0x03b9}, {1, {0x1ff2 }}}\r
-};\r
-\r
-static const CaseUnfold_12_Type CaseUnfold_12_Locale[] = {\r
- { {0x0069, 0x0307}, {1, {0x0130 }}}\r
-};\r
-\r
-static const CaseUnfold_13_Type CaseUnfold_13[] = {\r
- { {0x0066, 0x0066, 0x0069}, {1, {0xfb03 }}},\r
- { {0x0066, 0x0066, 0x006c}, {1, {0xfb04 }}},\r
- { {0x03b1, 0x0342, 0x03b9}, {1, {0x1fb7 }}},\r
- { {0x03b7, 0x0342, 0x03b9}, {1, {0x1fc7 }}},\r
- { {0x03b9, 0x0308, 0x0300}, {1, {0x1fd2 }}},\r
- { {0x03b9, 0x0308, 0x0301}, {2, {0x0390, 0x1fd3 }}},\r
- { {0x03b9, 0x0308, 0x0342}, {1, {0x1fd7 }}},\r
- { {0x03c5, 0x0308, 0x0300}, {1, {0x1fe2 }}},\r
- { {0x03c5, 0x0308, 0x0301}, {2, {0x03b0, 0x1fe3 }}},\r
- { {0x03c5, 0x0308, 0x0342}, {1, {0x1fe7 }}},\r
- { {0x03c5, 0x0313, 0x0300}, {1, {0x1f52 }}},\r
- { {0x03c5, 0x0313, 0x0301}, {1, {0x1f54 }}},\r
- { {0x03c5, 0x0313, 0x0342}, {1, {0x1f56 }}},\r
- { {0x03c9, 0x0342, 0x03b9}, {1, {0x1ff7 }}}\r
-};\r
-\r
-\r
-static PosixBracketEntryType HashEntryData[] = {\r
-  { (UChar* )"NEWLINE",                0,  7 },\r
-  { (UChar* )"Alpha",                  1,  5 },\r
-  { (UChar* )"Blank",                  2,  5 },\r
-  { (UChar* )"Cntrl",                  3,  5 },\r
-  { (UChar* )"Digit",                  4,  5 },\r
-  { (UChar* )"Graph",                  5,  5 },\r
-  { (UChar* )"Lower",                  6,  5 },\r
-  { (UChar* )"Print",                  7,  5 },\r
-  { (UChar* )"Punct",                  8,  5 },\r
-  { (UChar* )"Space",                  9,  5 },\r
-  { (UChar* )"Upper",                 10,  5 },\r
-  { (UChar* )"XDigit",                11,  6 },\r
-  { (UChar* )"Word",                  12,  4 },\r
-  { (UChar* )"Alnum",                 13,  5 },\r
-  { (UChar* )"ASCII",                 14,  5 },\r
-\r
-#ifdef USE_UNICODE_PROPERTIES\r
-  { (UChar* )"Any",                   15,  3 },\r
-  { (UChar* )"Assigned",              16,  8 },\r
-  { (UChar* )"C",                     17,  1 },\r
-  { (UChar* )"Cc",                    18,  2 },\r
-  { (UChar* )"Cf",                    19,  2 },\r
-  { (UChar* )"Cn",                    20,  2 },\r
-  { (UChar* )"Co",                    21,  2 },\r
-  { (UChar* )"Cs",                    22,  2 },\r
-  { (UChar* )"L",                     23,  1 },\r
-  { (UChar* )"Ll",                    24,  2 },\r
-  { (UChar* )"Lm",                    25,  2 },\r
-  { (UChar* )"Lo",                    26,  2 },\r
-  { (UChar* )"Lt",                    27,  2 },\r
-  { (UChar* )"Lu",                    28,  2 },\r
-  { (UChar* )"M",                     29,  1 },\r
-  { (UChar* )"Mc",                    30,  2 },\r
-  { (UChar* )"Me",                    31,  2 },\r
-  { (UChar* )"Mn",                    32,  2 },\r
-  { (UChar* )"N",                     33,  1 },\r
-  { (UChar* )"Nd",                    34,  2 },\r
-  { (UChar* )"Nl",                    35,  2 },\r
-  { (UChar* )"No",                    36,  2 },\r
-  { (UChar* )"P",                     37,  1 },\r
-  { (UChar* )"Pc",                    38,  2 },\r
-  { (UChar* )"Pd",                    39,  2 },\r
-  { (UChar* )"Pe",                    40,  2 },\r
-  { (UChar* )"Pf",                    41,  2 },\r
-  { (UChar* )"Pi",                    42,  2 },\r
-  { (UChar* )"Po",                    43,  2 },\r
-  { (UChar* )"Ps",                    44,  2 },\r
-  { (UChar* )"S",                     45,  1 },\r
-  { (UChar* )"Sc",                    46,  2 },\r
-  { (UChar* )"Sk",                    47,  2 },\r
-  { (UChar* )"Sm",                    48,  2 },\r
-  { (UChar* )"So",                    49,  2 },\r
-  { (UChar* )"Z",                     50,  1 },\r
-  { (UChar* )"Zl",                    51,  2 },\r
-  { (UChar* )"Zp",                    52,  2 },\r
-  { (UChar* )"Zs",                    53,  2 },\r
-  { (UChar* )"Arabic",                54,  6 },\r
-  { (UChar* )"Armenian",              55,  8 },\r
-  { (UChar* )"Bengali",               56,  7 },\r
-  { (UChar* )"Bopomofo",              57,  8 },\r
-  { (UChar* )"Braille",               58,  7 },\r
-  { (UChar* )"Buginese",              59,  8 },\r
-  { (UChar* )"Buhid",                 60,  5 },\r
-  { (UChar* )"Canadian_Aboriginal",   61, 19 },\r
-  { (UChar* )"Cherokee",              62,  8 },\r
-  { (UChar* )"Common",                63,  6 },\r
-  { (UChar* )"Coptic",                64,  6 },\r
-  { (UChar* )"Cypriot",               65,  7 },\r
-  { (UChar* )"Cyrillic",              66,  8 },\r
-  { (UChar* )"Deseret",               67,  7 },\r
-  { (UChar* )"Devanagari",            68, 10 },\r
-  { (UChar* )"Ethiopic",              69,  8 },\r
-  { (UChar* )"Georgian",              70,  8 },\r
-  { (UChar* )"Glagolitic",            71, 10 },\r
-  { (UChar* )"Gothic",                72,  6 },\r
-  { (UChar* )"Greek",                 73,  5 },\r
-  { (UChar* )"Gujarati",              74,  8 },\r
-  { (UChar* )"Gurmukhi",              75,  8 },\r
-  { (UChar* )"Han",                   76,  3 },\r
-  { (UChar* )"Hangul",                77,  6 },\r
-  { (UChar* )"Hanunoo",               78,  7 },\r
-  { (UChar* )"Hebrew",                79,  6 },\r
-  { (UChar* )"Hiragana",              80,  8 },\r
-  { (UChar* )"Inherited",             81,  9 },\r
-  { (UChar* )"Kannada",               82,  7 },\r
-  { (UChar* )"Katakana",              83,  8 },\r
-  { (UChar* )"Kharoshthi",            84, 10 },\r
-  { (UChar* )"Khmer",                 85,  5 },\r
-  { (UChar* )"Lao",                   86,  3 },\r
-  { (UChar* )"Latin",                 87,  5 },\r
-  { (UChar* )"Limbu",                 88,  5 },\r
-  { (UChar* )"Linear_B",              89,  8 },\r
-  { (UChar* )"Malayalam",             90,  9 },\r
-  { (UChar* )"Mongolian",             91,  9 },\r
-  { (UChar* )"Myanmar",               92,  7 },\r
-  { (UChar* )"New_Tai_Lue",           93, 11 },\r
-  { (UChar* )"Ogham",                 94,  5 },\r
-  { (UChar* )"Old_Italic",            95, 10 },\r
-  { (UChar* )"Old_Persian",           96, 11 },\r
-  { (UChar* )"Oriya",                 97,  5 },\r
-  { (UChar* )"Osmanya",               98,  7 },\r
-  { (UChar* )"Runic",                 99,  5 },\r
-  { (UChar* )"Shavian",              100,  7 },\r
-  { (UChar* )"Sinhala",              101,  7 },\r
-  { (UChar* )"Syloti_Nagri",         102, 12 },\r
-  { (UChar* )"Syriac",               103,  6 },\r
-  { (UChar* )"Tagalog",              104,  7 },\r
-  { (UChar* )"Tagbanwa",             105,  8 },\r
-  { (UChar* )"Tai_Le",               106,  6 },\r
-  { (UChar* )"Tamil",                107,  5 },\r
-  { (UChar* )"Telugu",               108,  6 },\r
-  { (UChar* )"Thaana",               109,  6 },\r
-  { (UChar* )"Thai",                 110,  4 },\r
-  { (UChar* )"Tibetan",              111,  7 },\r
-  { (UChar* )"Tifinagh",             112,  8 },\r
-  { (UChar* )"Ugaritic",             113,  8 },\r
-  { (UChar* )"Yi",                   114,  2 },\r
-#endif /* USE_UNICODE_PROPERTIES */\r
-  { (UChar* )NULL,                    -1,  0 }\r
-};\r
-\r
-#ifdef USE_UNICODE_PROPERTIES\r
-#define CODE_RANGES_NUM     115\r
-#else\r
-#define CODE_RANGES_NUM      15\r
-#endif\r
-\r
-static const OnigCodePoint* CodeRanges[CODE_RANGES_NUM];\r
-static int CodeRangeTableInited = 0;\r
-\r
-static void init_code_range_array(void) {\r
-  THREAD_ATOMIC_START;\r
-\r
-  CodeRanges[0] = CR_NEWLINE;\r
-  CodeRanges[1] = CR_Alpha;\r
-  CodeRanges[2] = CR_Blank;\r
-  CodeRanges[3] = CR_Cntrl;\r
-  CodeRanges[4] = CR_Digit;\r
-  CodeRanges[5] = CR_Graph;\r
-  CodeRanges[6] = CR_Lower;\r
-  CodeRanges[7] = CR_Print;\r
-  CodeRanges[8] = CR_Punct;\r
-  CodeRanges[9] = CR_Space;\r
-  CodeRanges[10] = CR_Upper;\r
-  CodeRanges[11] = CR_XDigit;\r
-  CodeRanges[12] = CR_Word;\r
-  CodeRanges[13] = CR_Alnum;\r
-  CodeRanges[14] = CR_ASCII;\r
-\r
-#ifdef USE_UNICODE_PROPERTIES\r
-  CodeRanges[15] = CR_Any;\r
-  CodeRanges[16] = CR_Assigned;\r
-  CodeRanges[17] = CR_C;\r
-  CodeRanges[18] = CR_Cc;\r
-  CodeRanges[19] = CR_Cf;\r
-  CodeRanges[20] = CR_Cn;\r
-  CodeRanges[21] = CR_Co;\r
-  CodeRanges[22] = CR_Cs;\r
-  CodeRanges[23] = CR_L;\r
-  CodeRanges[24] = CR_Ll;\r
-  CodeRanges[25] = CR_Lm;\r
-  CodeRanges[26] = CR_Lo;\r
-  CodeRanges[27] = CR_Lt;\r
-  CodeRanges[28] = CR_Lu;\r
-  CodeRanges[29] = CR_M;\r
-  CodeRanges[30] = CR_Mc;\r
-  CodeRanges[31] = CR_Me;\r
-  CodeRanges[32] = CR_Mn;\r
-  CodeRanges[33] = CR_N;\r
-  CodeRanges[34] = CR_Nd;\r
-  CodeRanges[35] = CR_Nl;\r
-  CodeRanges[36] = CR_No;\r
-  CodeRanges[37] = CR_P;\r
-  CodeRanges[38] = CR_Pc;\r
-  CodeRanges[39] = CR_Pd;\r
-  CodeRanges[40] = CR_Pe;\r
-  CodeRanges[41] = CR_Pf;\r
-  CodeRanges[42] = CR_Pi;\r
-  CodeRanges[43] = CR_Po;\r
-  CodeRanges[44] = CR_Ps;\r
-  CodeRanges[45] = CR_S;\r
-  CodeRanges[46] = CR_Sc;\r
-  CodeRanges[47] = CR_Sk;\r
-  CodeRanges[48] = CR_Sm;\r
-  CodeRanges[49] = CR_So;\r
-  CodeRanges[50] = CR_Z;\r
-  CodeRanges[51] = CR_Zl;\r
-  CodeRanges[52] = CR_Zp;\r
-  CodeRanges[53] = CR_Zs;\r
-  CodeRanges[54] = CR_Arabic;\r
-  CodeRanges[55] = CR_Armenian;\r
-  CodeRanges[56] = CR_Bengali;\r
-  CodeRanges[57] = CR_Bopomofo;\r
-  CodeRanges[58] = CR_Braille;\r
-  CodeRanges[59] = CR_Buginese;\r
-  CodeRanges[60] = CR_Buhid;\r
-  CodeRanges[61] = CR_Canadian_Aboriginal;\r
-  CodeRanges[62] = CR_Cherokee;\r
-  CodeRanges[63] = CR_Common;\r
-  CodeRanges[64] = CR_Coptic;\r
-  CodeRanges[65] = CR_Cypriot;\r
-  CodeRanges[66] = CR_Cyrillic;\r
-  CodeRanges[67] = CR_Deseret;\r
-  CodeRanges[68] = CR_Devanagari;\r
-  CodeRanges[69] = CR_Ethiopic;\r
-  CodeRanges[70] = CR_Georgian;\r
-  CodeRanges[71] = CR_Glagolitic;\r
-  CodeRanges[72] = CR_Gothic;\r
-  CodeRanges[73] = CR_Greek;\r
-  CodeRanges[74] = CR_Gujarati;\r
-  CodeRanges[75] = CR_Gurmukhi;\r
-  CodeRanges[76] = CR_Han;\r
-  CodeRanges[77] = CR_Hangul;\r
-  CodeRanges[78] = CR_Hanunoo;\r
-  CodeRanges[79] = CR_Hebrew;\r
-  CodeRanges[80] = CR_Hiragana;\r
-  CodeRanges[81] = CR_Inherited;\r
-  CodeRanges[82] = CR_Kannada;\r
-  CodeRanges[83] = CR_Katakana;\r
-  CodeRanges[84] = CR_Kharoshthi;\r
-  CodeRanges[85] = CR_Khmer;\r
-  CodeRanges[86] = CR_Lao;\r
-  CodeRanges[87] = CR_Latin;\r
-  CodeRanges[88] = CR_Limbu;\r
-  CodeRanges[89] = CR_Linear_B;\r
-  CodeRanges[90] = CR_Malayalam;\r
-  CodeRanges[91] = CR_Mongolian;\r
-  CodeRanges[92] = CR_Myanmar;\r
-  CodeRanges[93] = CR_New_Tai_Lue;\r
-  CodeRanges[94] = CR_Ogham;\r
-  CodeRanges[95] = CR_Old_Italic;\r
-  CodeRanges[96] = CR_Old_Persian;\r
-  CodeRanges[97] = CR_Oriya;\r
-  CodeRanges[98] = CR_Osmanya;\r
-  CodeRanges[99] = CR_Runic;\r
-  CodeRanges[100] = CR_Shavian;\r
-  CodeRanges[101] = CR_Sinhala;\r
-  CodeRanges[102] = CR_Syloti_Nagri;\r
-  CodeRanges[103] = CR_Syriac;\r
-  CodeRanges[104] = CR_Tagalog;\r
-  CodeRanges[105] = CR_Tagbanwa;\r
-  CodeRanges[106] = CR_Tai_Le;\r
-  CodeRanges[107] = CR_Tamil;\r
-  CodeRanges[108] = CR_Telugu;\r
-  CodeRanges[109] = CR_Thaana;\r
-  CodeRanges[110] = CR_Thai;\r
-  CodeRanges[111] = CR_Tibetan;\r
-  CodeRanges[112] = CR_Tifinagh;\r
-  CodeRanges[113] = CR_Ugaritic;\r
-  CodeRanges[114] = CR_Yi;\r
-#endif /* USE_UNICODE_PROPERTIES */\r
-\r
-  CodeRangeTableInited = 1;\r
-  THREAD_ATOMIC_END;\r
-}\r
-\r
-extern int\r
-onigenc_unicode_is_code_ctype(OnigCodePoint code, unsigned int ctype)\r
-{\r
-  if (\r
-#ifdef USE_UNICODE_PROPERTIES\r
-      ctype <= ONIGENC_MAX_STD_CTYPE &&\r
-#endif\r
-      code < 256) {\r
-    return ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(code, ctype);\r
-  }\r
-\r
-  if (ctype >= CODE_RANGES_NUM) {\r
-    return ONIGERR_TYPE_BUG;\r
-  }\r
-\r
-  if (CodeRangeTableInited == 0) init_code_range_array();\r
-\r
-  return onig_is_in_code_range((UChar* )CodeRanges[ctype], code);\r
-}\r
-\r
-\r
-extern int\r
-onigenc_unicode_ctype_code_range(int ctype, const OnigCodePoint* ranges[])\r
-{\r
-  if (ctype >= CODE_RANGES_NUM) {\r
-    return ONIGERR_TYPE_BUG;\r
-  }\r
-\r
-  if (CodeRangeTableInited == 0) init_code_range_array();\r
-\r
-  *ranges = CodeRanges[ctype];\r
-\r
-  return 0;\r
-}\r
-\r
-extern int\r
-onigenc_utf16_32_get_ctype_code_range(OnigCtype ctype, OnigCodePoint* sb_out,\r
-                                      const OnigCodePoint* ranges[])\r
-{\r
-  *sb_out = 0x00;\r
-  return onigenc_unicode_ctype_code_range(ctype, ranges);\r
-}\r
-\r
-#include "st.h"\r
-\r
-#define PROPERTY_NAME_MAX_SIZE    20\r
-\r
-static st_table* NameCtypeTable;\r
-static int NameTableInited = 0;\r
-\r
-static int init_name_ctype_table(void)\r
-{\r
-  PosixBracketEntryType *pb;\r
-\r
-  THREAD_ATOMIC_START;\r
-\r
-  NameCtypeTable = onig_st_init_strend_table_with_size(100);\r
-  if (ONIG_IS_NULL(NameCtypeTable)) return ONIGERR_MEMORY;\r
-\r
-  for (pb = HashEntryData; ONIG_IS_NOT_NULL(pb->name); pb++) {\r
-    onig_st_insert_strend(NameCtypeTable, pb->name, pb->name + pb->len,\r
-                         (st_data_t )pb->ctype);\r
-  }\r
-\r
-  NameTableInited = 1;\r
-  THREAD_ATOMIC_END;\r
-  return 0;\r
-}\r
-\r
-extern int\r
-onigenc_unicode_property_name_to_ctype(OnigEncoding enc, UChar* name, UChar* end)\r
-{\r
-  int len;\r
-  hash_data_type ctype;\r
-  UChar buf[PROPERTY_NAME_MAX_SIZE];\r
-  UChar *p;\r
-  OnigCodePoint code;\r
-\r
-  p = name;\r
-  len = 0;\r
-  while (p < end) {\r
-    code = ONIGENC_MBC_TO_CODE(enc, p, end);\r
-    if (code >= 0x80)\r
-      return ONIGERR_INVALID_CHAR_PROPERTY_NAME;\r
-\r
-    buf[len++] = (UChar )code;\r
-    if (len >= PROPERTY_NAME_MAX_SIZE)\r
-      return ONIGERR_INVALID_CHAR_PROPERTY_NAME;\r
-\r
-    p += enclen(enc, p);\r
-  }\r
-\r
-  buf[len] = 0;\r
-\r
-  if (NameTableInited == 0)  init_name_ctype_table();\r
-\r
-  if (onig_st_lookup_strend(NameCtypeTable, buf, buf + len, &ctype) == 0) {\r
-    return ONIGERR_INVALID_CHAR_PROPERTY_NAME;\r
-  }\r
-\r
-  return (int )ctype;\r
-}\r
-\r
-\r
-static int\r
-code2_cmp(OnigCodePoint* x, OnigCodePoint* y)\r
-{\r
-  if (x[0] == y[0] && x[1] == y[1]) return 0;\r
-  return 1;\r
-}\r
-\r
-static int\r
-code2_hash(OnigCodePoint* x)\r
-{\r
-  return (int )(x[0] + x[1]);\r
-}\r
-\r
-static struct st_hash_type type_code2_hash = {\r
-  code2_cmp,\r
-  code2_hash,\r
-};\r
-\r
-static int\r
-code3_cmp(OnigCodePoint* x, OnigCodePoint* y)\r
-{\r
-  if (x[0] == y[0] && x[1] == y[1] && x[2] == y[2]) return 0;\r
-  return 1;\r
-}\r
-\r
-static int\r
-code3_hash(OnigCodePoint* x)\r
-{\r
-  return (int )(x[0] + x[1] + x[2]);\r
-}\r
-\r
-static struct st_hash_type type_code3_hash = {\r
-  code3_cmp,\r
-  code3_hash,\r
-};\r
-\r
-\r
-static st_table* FoldTable;    /* fold-1, fold-2, fold-3 */\r
-static st_table* Unfold1Table;\r
-static st_table* Unfold2Table;\r
-static st_table* Unfold3Table;\r
-static int CaseFoldInited = 0;\r
-\r
-\r
-extern void onigenc_end_unicode(void)\r
-{\r
-  THREAD_ATOMIC_START;\r
-\r
-  if (FoldTable    != 0) st_free_table(FoldTable);\r
-  if (Unfold1Table != 0) st_free_table(Unfold1Table);\r
-  if (Unfold2Table != 0) st_free_table(Unfold2Table);\r
-  if (Unfold3Table != 0) st_free_table(Unfold3Table);\r
-\r
-  CaseFoldInited = 0;\r
-\r
-  THREAD_ATOMIC_END;\r
-}\r
-\r
-static int init_case_fold_table(void)\r
-{\r
-  const CaseFold_11_Type   *p;\r
-  const CaseUnfold_11_Type *p1;\r
-  const CaseUnfold_12_Type *p2;\r
-  const CaseUnfold_13_Type *p3;\r
-  int i;\r
-\r
-  THREAD_ATOMIC_START;\r
-\r
-  FoldTable = st_init_numtable_with_size(1200);\r
-  if (ONIG_IS_NULL(FoldTable)) return ONIGERR_MEMORY;\r
-  for (i = 0; i < (int )(sizeof(CaseFold)/sizeof(CaseFold_11_Type)); i++) {\r
-    p = &CaseFold[i];\r
-    st_add_direct(FoldTable, (st_data_t )p->from, (st_data_t )(UINTN)&(p->to));\r
-  }\r
-  for (i = 0; i < (int )(sizeof(CaseFold_Locale)/sizeof(CaseFold_11_Type));\r
-       i++) {\r
-    p = &CaseFold_Locale[i];\r
-    st_add_direct(FoldTable, (st_data_t )p->from, (st_data_t )(UINTN)&(p->to));\r
-  }\r
-\r
-  Unfold1Table = st_init_numtable_with_size(1000);\r
-  if (ONIG_IS_NULL(Unfold1Table)) return ONIGERR_MEMORY;\r
-\r
-  for (i = 0; i < (int )(sizeof(CaseUnfold_11)/sizeof(CaseUnfold_11_Type));\r
-       i++) {\r
-    p1 = &CaseUnfold_11[i];\r
-    st_add_direct(Unfold1Table, (st_data_t )p1->from, (st_data_t )(UINTN)&(p1->to));\r
-  }\r
-  for (i = 0;\r
-       i < (int )(sizeof(CaseUnfold_11_Locale)/sizeof(CaseUnfold_11_Type));\r
-       i++) {\r
-    p1 = &CaseUnfold_11_Locale[i];\r
-    st_add_direct(Unfold1Table, (st_data_t )p1->from, (st_data_t )(UINTN)&(p1->to));\r
-  }\r
-\r
-  Unfold2Table = st_init_table_with_size(&type_code2_hash, 200);\r
-  if (ONIG_IS_NULL(Unfold2Table)) return ONIGERR_MEMORY;\r
-\r
-  for (i = 0; i < (int )(sizeof(CaseUnfold_12)/sizeof(CaseUnfold_12_Type));\r
-       i++) {\r
-    p2 = &CaseUnfold_12[i];\r
-    st_add_direct(Unfold2Table, (st_data_t )(UINTN)p2->from, (st_data_t )(UINTN)(&p2->to));\r
-  }\r
-  for (i = 0;\r
-       i < (int )(sizeof(CaseUnfold_12_Locale)/sizeof(CaseUnfold_12_Type));\r
-       i++) {\r
-    p2 = &CaseUnfold_12_Locale[i];\r
-    st_add_direct(Unfold2Table, (st_data_t )(UINTN)p2->from, (st_data_t )(UINTN)(&p2->to));\r
-  }\r
-\r
-  Unfold3Table = st_init_table_with_size(&type_code3_hash, 30);\r
-  if (ONIG_IS_NULL(Unfold3Table)) return ONIGERR_MEMORY;\r
-\r
-  for (i = 0; i < (int )(sizeof(CaseUnfold_13)/sizeof(CaseUnfold_13_Type));\r
-       i++) {\r
-    p3 = &CaseUnfold_13[i];\r
-    st_add_direct(Unfold3Table, (st_data_t )(UINTN)p3->from, (st_data_t )(UINTN)(&p3->to));\r
-  }\r
-\r
-\r
-  onig_add_end_call(onigenc_end_unicode);\r
-\r
-  CaseFoldInited = 1;\r
-  THREAD_ATOMIC_END;\r
-  return 0;\r
-}\r
-\r
-extern int\r
-onigenc_unicode_mbc_case_fold(OnigEncoding enc,\r
-    OnigCaseFoldType flag ARG_UNUSED, const UChar** pp, const UChar* end,\r
-    UChar* fold)\r
-{\r
-  CodePointList3 *to;\r
-  OnigCodePoint code;\r
-  int i, len, rlen;\r
-  const UChar *p = *pp;\r
-\r
-  if (CaseFoldInited == 0) init_case_fold_table();\r
-\r
-  code = ONIGENC_MBC_TO_CODE(enc, p, end);\r
-  len = enclen(enc, p);\r
-  *pp += len;\r
-\r
-#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
-  if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {\r
-    if (code == 0x0049) {\r
-      return ONIGENC_CODE_TO_MBC(enc, 0x0131, fold);\r
-    }\r
-    else if (code == 0x0130) {\r
-      return ONIGENC_CODE_TO_MBC(enc, 0x0069, fold);\r
-    }\r
-  }\r
-#endif\r
-\r
-  if (onig_st_lookup(FoldTable, (st_data_t )code, (void* )&to) != 0) {\r
-    if (to->n == 1) {\r
-      return ONIGENC_CODE_TO_MBC(enc, to->code[0], fold);      \r
-    }\r
-#if 0\r
-    /* NO NEEDS TO CHECK */\r
-    else if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {\r
-#else\r
-    else {\r
-#endif\r
-      rlen = 0;\r
-      for (i = 0; i < to->n; i++) {\r
-       len = ONIGENC_CODE_TO_MBC(enc, to->code[i], fold);\r
-       fold += len;\r
-       rlen += len;\r
-      }\r
-      return rlen;\r
-    }\r
-  }\r
-\r
-  for (i = 0; i < len; i++) {\r
-    *fold++ = *p++;\r
-  }\r
-  return len;\r
-}\r
-\r
-extern int\r
-onigenc_unicode_apply_all_case_fold(OnigCaseFoldType flag,\r
-                                   OnigApplyAllCaseFoldFunc f, void* arg)\r
-{\r
-  const CaseUnfold_11_Type* p11;\r
-  OnigCodePoint code;\r
-  int i, j, k, r;\r
-\r
-  /* if (CaseFoldInited == 0) init_case_fold_table(); */\r
-\r
-  for (i = 0; i < (int )(sizeof(CaseUnfold_11)/sizeof(CaseUnfold_11_Type));\r
-       i++) {\r
-    p11 = &CaseUnfold_11[i];\r
-    for (j = 0; j < p11->to.n; j++) {\r
-      code = p11->from;\r
-      r = (*f)(p11->to.code[j], &code, 1, arg);\r
-      if (r != 0) return r;\r
-\r
-      code = p11->to.code[j];\r
-      r = (*f)(p11->from, &code, 1, arg);\r
-      if (r != 0) return r;\r
-\r
-      for (k = 0; k < j; k++) {\r
-       r = (*f)(p11->to.code[j], (OnigCodePoint* )(&p11->to.code[k]), 1, arg);\r
-       if (r != 0) return r;\r
-\r
-       r = (*f)(p11->to.code[k], (OnigCodePoint* )(&p11->to.code[j]), 1, arg);\r
-       if (r != 0) return r;\r
-      }\r
-    }\r
-  }\r
-\r
-#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
-  if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {\r
-    code = 0x0131;\r
-    r = (*f)(0x0049, &code, 1, arg);\r
-    if (r != 0) return r;\r
-    code = 0x0049;\r
-    r = (*f)(0x0131, &code, 1, arg);\r
-    if (r != 0) return r;\r
-\r
-    code = 0x0130;\r
-    r = (*f)(0x0069, &code, 1, arg);\r
-    if (r != 0) return r;\r
-    code = 0x0069;\r
-    r = (*f)(0x0130, &code, 1, arg);\r
-    if (r != 0) return r;\r
-  }\r
-  else {\r
-#endif\r
-    for (i = 0;\r
-        i < (int )(sizeof(CaseUnfold_11_Locale)/sizeof(CaseUnfold_11_Type));\r
-        i++) {\r
-      p11 = &CaseUnfold_11_Locale[i];\r
-      for (j = 0; j < p11->to.n; j++) {\r
-       code = p11->from;\r
-       r = (*f)(p11->to.code[j], &code, 1, arg);\r
-       if (r != 0) return r;\r
-\r
-       code = p11->to.code[j];\r
-       r = (*f)(p11->from, &code, 1, arg);\r
-       if (r != 0) return r;\r
-\r
-       for (k = 0; k < j; k++) {\r
-         r = (*f)(p11->to.code[j], (OnigCodePoint* )(&p11->to.code[k]),\r
-                  1, arg);\r
-         if (r != 0) return r;\r
-\r
-         r = (*f)(p11->to.code[k], (OnigCodePoint* )(&p11->to.code[j]),\r
-                  1, arg);\r
-         if (r != 0) return r;\r
-       }\r
-      }\r
-    }\r
-#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
-  }\r
-#endif\r
-\r
-  if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {\r
-    for (i = 0; i < (int )(sizeof(CaseUnfold_12)/sizeof(CaseUnfold_12_Type));\r
-        i++) {\r
-      for (j = 0; j < CaseUnfold_12[i].to.n; j++) {\r
-       r = (*f)(CaseUnfold_12[i].to.code[j],\r
-                (OnigCodePoint* )CaseUnfold_12[i].from, 2, arg);\r
-       if (r != 0) return r;   \r
-\r
-       for (k = 0; k < CaseUnfold_12[i].to.n; k++) {\r
-         if (k == j) continue;\r
-\r
-         r = (*f)(CaseUnfold_12[i].to.code[j],\r
-                  (OnigCodePoint* )(&CaseUnfold_12[i].to.code[k]), 1, arg);\r
-         if (r != 0) return r;\r
-       }\r
-      }\r
-    }\r
-\r
-#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
-    if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) == 0) {\r
-#endif\r
-      for (i = 0;\r
-          i < (int )(sizeof(CaseUnfold_12_Locale)/sizeof(CaseUnfold_12_Type));\r
-          i++) {\r
-       for (j = 0; j < CaseUnfold_12_Locale[i].to.n; j++) {\r
-         r = (*f)(CaseUnfold_12_Locale[i].to.code[j],\r
-                  (OnigCodePoint* )CaseUnfold_12_Locale[i].from, 2, arg);\r
-         if (r != 0) return r; \r
-\r
-         for (k = 0; k < CaseUnfold_12_Locale[i].to.n; k++) {\r
-           if (k == j) continue;\r
-\r
-           r = (*f)(CaseUnfold_12_Locale[i].to.code[j],\r
-                    (OnigCodePoint* )(&CaseUnfold_12_Locale[i].to.code[k]),\r
-                    1, arg);\r
-           if (r != 0) return r;\r
-         }\r
-       }\r
-      }\r
-#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
-    }\r
-#endif\r
-\r
-    for (i = 0; i < (int )(sizeof(CaseUnfold_13)/sizeof(CaseUnfold_13_Type));\r
-        i++) {\r
-      for (j = 0; j < CaseUnfold_13[i].to.n; j++) {\r
-       r = (*f)(CaseUnfold_13[i].to.code[j],\r
-                (OnigCodePoint* )CaseUnfold_13[i].from, 3, arg);\r
-       if (r != 0) return r;   \r
-\r
-       for (k = 0; k < CaseUnfold_13[i].to.n; k++) {\r
-         if (k == j) continue;\r
-\r
-         r = (*f)(CaseUnfold_13[i].to.code[j],\r
-                  (OnigCodePoint* )(&CaseUnfold_13[i].to.code[k]), 1, arg);\r
-         if (r != 0) return r;\r
-       }\r
-      }\r
-    }\r
-  }\r
-\r
-  return 0;\r
-}\r
-\r
-extern int\r
-onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc,\r
-    OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end,\r
-    OnigCaseFoldCodeItem items[])\r
-{\r
-  int n, i, j, k, len;\r
-  OnigCodePoint code, codes[3];\r
-  CodePointList3 *to, *z3;\r
-  CodePointList2 *z2;\r
-\r
-  if (CaseFoldInited == 0) init_case_fold_table();\r
-\r
-  n = 0;\r
-\r
-  code = ONIGENC_MBC_TO_CODE(enc, p, end);\r
-  len = enclen(enc, p);\r
-\r
-#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
-  if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {\r
-    if (code == 0x0049) {\r
-      items[0].byte_len = len;\r
-      items[0].code_len = 1;\r
-      items[0].code[0]  = 0x0131;\r
-      return 1;\r
-    }\r
-    else if (code == 0x0130) {\r
-      items[0].byte_len = len;\r
-      items[0].code_len = 1;\r
-      items[0].code[0]  = 0x0069;\r
-      return 1;\r
-    }\r
-    else if (code == 0x0131) {\r
-      items[0].byte_len = len;\r
-      items[0].code_len = 1;\r
-      items[0].code[0]  = 0x0049;\r
-      return 1;\r
-    }\r
-    else if (code == 0x0069) {\r
-      items[0].byte_len = len;\r
-      items[0].code_len = 1;\r
-      items[0].code[0]  = 0x0130;\r
-      return 1;\r
-    }\r
-  }\r
-#endif\r
-\r
-  if (onig_st_lookup(FoldTable, (st_data_t )code, (void* )&to) != 0) {\r
-    if (to->n == 1) {\r
-      OnigCodePoint orig_code = code;\r
-\r
-      items[0].byte_len = len;\r
-      items[0].code_len = 1;\r
-      items[0].code[0]  = to->code[0];\r
-      n++;\r
-\r
-      code = to->code[0];\r
-      if (onig_st_lookup(Unfold1Table, (st_data_t )code, (void* )&to) != 0) {\r
-       for (i = 0; i < to->n; i++) {\r
-         if (to->code[i] != orig_code) {\r
-           items[n].byte_len = len;\r
-           items[n].code_len = 1;\r
-           items[n].code[0]  = to->code[i];\r
-           n++;\r
-         }\r
-       }\r
-      }\r
-    }\r
-    else if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {\r
-      OnigCodePoint cs[3][4];\r
-      int fn, ncs[3]={0, 0, 0};\r
-\r
-      for (fn = 0; fn < to->n; fn++) {\r
-       cs[fn][0] = to->code[fn];\r
-       if (onig_st_lookup(Unfold1Table, (st_data_t )cs[fn][0],\r
-                          (void* )&z3) != 0) {\r
-         for (i = 0; i < z3->n; i++) {\r
-           cs[fn][i+1] = z3->code[i];\r
-         }\r
-         ncs[fn] = z3->n + 1;\r
-       }\r
-       else\r
-         ncs[fn] = 1;\r
-      }\r
-\r
-      if (fn == 2) {\r
-       for (i = 0; i < ncs[0]; i++) {\r
-         for (j = 0; j < ncs[1]; j++) {\r
-           items[n].byte_len = len;\r
-           items[n].code_len = 2;\r
-           items[n].code[0]  = cs[0][i];\r
-           items[n].code[1]  = cs[1][j];\r
-           n++;\r
-         }\r
-       }\r
-\r
-       if (onig_st_lookup(Unfold2Table, (st_data_t )(UINTN)to->code,\r
-                          (void* )&z2) != 0) {\r
-         for (i = 0; i < z2->n; i++) {\r
-           if (z2->code[i] == code) continue;\r
-\r
-           items[n].byte_len = len;\r
-           items[n].code_len = 1;\r
-           items[n].code[0]  = z2->code[i];\r
-           n++;\r
-         }\r
-       }\r
-      }\r
-      else {\r
-       for (i = 0; i < ncs[0]; i++) {\r
-         for (j = 0; j < ncs[1]; j++) {\r
-           for (k = 0; k < ncs[2]; k++) {\r
-             items[n].byte_len = len;\r
-             items[n].code_len = 3;\r
-             items[n].code[0]  = cs[0][i];\r
-             items[n].code[1]  = cs[1][j];\r
-             items[n].code[2]  = cs[2][k];\r
-             n++;\r
-           }\r
-         }\r
-       }\r
-\r
-       if (onig_st_lookup(Unfold3Table, (st_data_t )(UINTN)to->code,\r
-                          (void* )&z2) != 0) {\r
-         for (i = 0; i < z2->n; i++) {\r
-           if (z2->code[i] == code) continue;\r
-\r
-           items[n].byte_len = len;\r
-           items[n].code_len = 1;\r
-           items[n].code[0]  = z2->code[i];\r
-           n++;\r
-         }\r
-       }\r
-      }\r
-\r
-      /* multi char folded code is not head of another folded multi char */\r
-      flag = 0; /* DISABLE_CASE_FOLD_MULTI_CHAR(flag); */\r
-    }\r
-  }\r
-  else {\r
-    if (onig_st_lookup(Unfold1Table, (st_data_t )code, (void* )&to) != 0) {\r
-      for (i = 0; i < to->n; i++) {\r
-       items[n].byte_len = len;\r
-       items[n].code_len = 1;\r
-       items[n].code[0]  = to->code[i];\r
-       n++;\r
-      }\r
-    }\r
-  }\r
-\r
-\r
-  if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {\r
-    p += len;\r
-    if (p < end) {\r
-      int clen;\r
-\r
-      codes[0] = code;\r
-      code = ONIGENC_MBC_TO_CODE(enc, p, end);\r
-      if (onig_st_lookup(FoldTable, (st_data_t )code, (void* )&to) != 0\r
-         && to->n == 1) {\r
-       codes[1] = to->code[0];\r
-      }\r
-      else\r
-       codes[1] = code;\r
-\r
-      clen = enclen(enc, p);\r
-      len += clen;\r
-      if (onig_st_lookup(Unfold2Table, (st_data_t )(UINTN)codes, (void* )&z2) != 0) {\r
-       for (i = 0; i < z2->n; i++) {\r
-         items[n].byte_len = len;\r
-         items[n].code_len = 1;\r
-         items[n].code[0]  = z2->code[i];\r
-         n++;\r
-       }\r
-      }\r
-\r
-      p += clen;\r
-      if (p < end) {\r
-       code = ONIGENC_MBC_TO_CODE(enc, p, end);\r
-       if (onig_st_lookup(FoldTable, (st_data_t )code, (void* )&to) != 0\r
-           && to->n == 1) {\r
-         codes[2] = to->code[0];\r
-       }\r
-       else\r
-         codes[2] = code;\r
-\r
-       clen = enclen(enc, p);\r
-       len += clen;\r
-       if (onig_st_lookup(Unfold3Table, (st_data_t )(UINTN)codes,\r
-                          (void* )&z2) != 0) {\r
-         for (i = 0; i < z2->n; i++) {\r
-           items[n].byte_len = len;\r
-           items[n].code_len = 1;\r
-           items[n].code[0]  = z2->code[i];\r
-           n++;\r
-         }\r
-       }\r
-      }\r
-    }\r
-  }\r
-\r
-  return n;\r
-}\r
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/enc/utf16_le.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/enc/utf16_le.c
deleted file mode 100644 (file)
index b8685c4..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-/**********************************************************************\r
-  utf16_le.c -  Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2008  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- *    notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the\r
- *    documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#include "regenc.h"\r
-\r
-static const int EncLen_UTF16[] = {\r
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
-  2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 2, 2, 2, 2,\r
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2\r
-};\r
-\r
-static int\r
-utf16le_code_to_mbclen(OnigCodePoint code)\r
-{\r
-  return (code > 0xffff ? 4 : 2);\r
-}\r
-\r
-static int\r
-utf16le_mbc_enc_len(const UChar* p)\r
-{\r
-  return EncLen_UTF16[*(p+1)];\r
-}\r
-\r
-static int\r
-utf16le_is_mbc_newline(const UChar* p, const UChar* end)\r
-{\r
-  if (p + 1 < end) {\r
-    if (*p == 0x0a && *(p+1) == 0x00)\r
-      return 1;\r
-#ifdef USE_UNICODE_ALL_LINE_TERMINATORS\r
-    if ((\r
-#ifndef USE_CRNL_AS_LINE_TERMINATOR\r
-        *p == 0x0d ||\r
-#endif\r
-        *p == 0x85) && *(p+1) == 0x00)\r
-      return 1;\r
-    if (*(p+1) == 0x20 && (*p == 0x29 || *p == 0x28))\r
-      return 1;\r
-#endif\r
-  }\r
-  return 0;\r
-}\r
-\r
-static OnigCodePoint\r
-utf16le_mbc_to_code(const UChar* p, const UChar* end ARG_UNUSED)\r
-{\r
-  OnigCodePoint code;\r
-  UChar c0 = *p;\r
-  UChar c1 = *(p+1);\r
-\r
-  if (UTF16_IS_SURROGATE_FIRST(c1)) {\r
-    code = ((((c1 - 0xd8) << 2) + ((c0  & 0xc0) >> 6) + 1) << 16)\r
-         + ((((c0 & 0x3f) << 2) + (p[3] - 0xdc)) << 8)\r
-         + p[2];\r
-  }\r
-  else {\r
-    code = c1 * 256 + p[0];\r
-  }\r
-  return code;\r
-}\r
-\r
-static int\r
-utf16le_code_to_mbc(OnigCodePoint code, UChar *buf)\r
-{\r
-  UChar* p = buf;\r
-\r
-  if (code > 0xffff) {\r
-    unsigned int plane, high;\r
-\r
-    plane = (code >> 16) - 1;\r
-    high = (code & 0xff00) >> 8;\r
-\r
-    *p++ = (UChar)(((plane & 0x03) << 6) + (high >> 2));\r
-    *p++ = (UChar)((plane >> 2) + 0xd8);\r
-    *p++ = (UChar )(code & 0xff);\r
-    *p   = (high & 0x03) + 0xdc;\r
-    return 4;\r
-  }\r
-  else {\r
-    *p++ = (UChar )(code & 0xff);\r
-    *p++ = (UChar )((code & 0xff00) >> 8);\r
-    return 2;\r
-  }\r
-}\r
-\r
-static int\r
-utf16le_mbc_case_fold(OnigCaseFoldType flag,\r
-                     const UChar** pp, const UChar* end, UChar* fold)\r
-{\r
-  const UChar* p = *pp;\r
-\r
-  if (ONIGENC_IS_ASCII_CODE(*p) && *(p+1) == 0) {\r
-#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
-    if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {\r
-      if (*p == 0x49) {\r
-       *fold++ = 0x31;\r
-       *fold   = 0x01;\r
-       (*pp) += 2;\r
-       return 2;\r
-      }\r
-    }\r
-#endif\r
-\r
-    *fold++ = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p);\r
-    *fold   = 0;\r
-    *pp += 2;\r
-    return 2;\r
-  }\r
-  else\r
-    return onigenc_unicode_mbc_case_fold(ONIG_ENCODING_UTF16_LE, flag, pp, end,\r
-                                        fold);\r
-}\r
-\r
-#if 0\r
-static int\r
-utf16le_is_mbc_ambiguous(OnigCaseFoldType flag, const UChar** pp,\r
-                        const UChar* end)\r
-{\r
-  const UChar* p = *pp;\r
-\r
-  (*pp) += EncLen_UTF16[*(p+1)];\r
-\r
-  if (*(p+1) == 0) {\r
-    int c, v;\r
-\r
-    if (*p == 0xdf && (flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {\r
-      return TRUE;\r
-    }\r
-\r
-    c = *p;\r
-    v = ONIGENC_IS_UNICODE_ISO_8859_1_BIT_CTYPE(c,\r
-                       (BIT_CTYPE_UPPER | BIT_CTYPE_LOWER));\r
-    if ((v | BIT_CTYPE_LOWER) != 0) {\r
-      /* 0xaa, 0xb5, 0xba are lower case letter, but can't convert. */\r
-      if (c >= 0xaa && c <= 0xba)\r
-       return FALSE;\r
-      else\r
-       return TRUE;\r
-    }\r
-    return (v != 0 ? TRUE : FALSE);\r
-  }\r
-\r
-  return FALSE;\r
-}\r
-#endif\r
-\r
-static UChar*\r
-utf16le_left_adjust_char_head(const UChar* start, const UChar* s)\r
-{\r
-  if (s <= start) return (UChar* )s;\r
-\r
-  if ((s - start) % 2 == 1) {\r
-    s--;\r
-  }\r
-\r
-  if (UTF16_IS_SURROGATE_SECOND(*(s+1)) && s > start + 1)\r
-    s -= 2;\r
-\r
-  return (UChar* )s;\r
-}\r
-\r
-static int\r
-utf16le_get_case_fold_codes_by_str(OnigCaseFoldType flag,\r
-    const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])\r
-{\r
-  return onigenc_unicode_get_case_fold_codes_by_str(ONIG_ENCODING_UTF16_LE,\r
-                                                   flag, p, end, items);\r
-}\r
-\r
-OnigEncodingType OnigEncodingUTF16_LE = {\r
-  utf16le_mbc_enc_len,\r
-  "UTF-16LE",   /* name */\r
-  4,            /* max byte length */\r
-  2,            /* min byte length */\r
-  utf16le_is_mbc_newline,\r
-  utf16le_mbc_to_code,\r
-  utf16le_code_to_mbclen,\r
-  utf16le_code_to_mbc,\r
-  utf16le_mbc_case_fold,\r
-  onigenc_unicode_apply_all_case_fold,\r
-  utf16le_get_case_fold_codes_by_str,\r
-  onigenc_unicode_property_name_to_ctype,\r
-  onigenc_unicode_is_code_ctype,\r
-  onigenc_utf16_32_get_ctype_code_range,\r
-  utf16le_left_adjust_char_head,\r
-  onigenc_always_false_is_allowed_reverse_match\r
-};\r
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/onig_init.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/onig_init.c
new file mode 100644 (file)
index 0000000..9fc6dca
--- /dev/null
@@ -0,0 +1,45 @@
+/**********************************************************************\r
+  onig_init.c -  Oniguruma (regular expression library)\r
+**********************************************************************/\r
+/*-\r
+ * Copyright (c) 2016-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
+ * SUCH DAMAGE.\r
+ */\r
+\r
+#include "regint.h"\r
+\r
+/* onig_init(): deprecated function */\r
+extern int\r
+onig_init(void)\r
+{\r
+#if 0\r
+  OnigEncoding encs[] = {\r
+    ONIG_ENCODING_UTF8\r
+  };\r
+\r
+  return onig_initialize(encs, sizeof(encs)/sizeof(encs[0]));\r
+#else\r
+  return onig_initialize(0, 0);\r
+#endif\r
+}\r
index 7ec8e2e7f131d0df24d0010e95e7de0b9ccc8dcc..313e5915c3ea2a15d0fd8d1cf26537e13515b4e8 100644 (file)
 extern "C" {\r
 #endif\r
 \r
-#define RE_MBCTYPE_ASCII         0\r
-#define RE_MBCTYPE_EUC           1\r
-#define RE_MBCTYPE_SJIS          2\r
-#define RE_MBCTYPE_UTF8          3\r
+enum {\r
+  RE_MBCTYPE_ASCII = 0,\r
+  RE_MBCTYPE_EUC   = 1,\r
+  RE_MBCTYPE_SJIS  = 2,\r
+  RE_MBCTYPE_UTF8  = 3\r
+};\r
 \r
 /* GNU regex options */\r
 #ifndef RE_NREGS\r
index 7c2cad123be667ecc4c3f2eb97b60e52f28e555c..62266da76e75a8d7709542b6733c300136ebac9d 100644 (file)
@@ -4,7 +4,7 @@
   onigposix.h - Oniguruma (regular expression library)\r
 **********************************************************************/\r
 /*-\r
- * Copyright (c) 2002-2005  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
  * All rights reserved.\r
  *\r
  * Redistribution and use in source and binary forms, with or without\r
@@ -39,7 +39,7 @@ extern "C" {
 #define REG_NEWLINE        (1<<1)\r
 #define REG_NOTBOL         (1<<2)\r
 #define REG_NOTEOL         (1<<3)\r
-#define REG_EXTENDED       (1<<4) /* if not setted, Basic Onigular Expression */\r
+#define REG_EXTENDED       (1<<4) /* if not set, Basic Onigular Expression */\r
 #define REG_NOSUB          (1<<5)\r
 \r
 /* POSIX error codes */\r
@@ -61,7 +61,7 @@ extern "C" {
 #define REG_EONIG_INTERNAL  14\r
 #define REG_EONIG_BADWC     15\r
 #define REG_EONIG_BADARG    16\r
-#define REG_EONIG_THREAD    17\r
+/* #define REG_EONIG_THREAD    17 */\r
 \r
 /* character encodings (for reg_set_encoding()) */\r
 #define REG_POSIX_ENCODING_ASCII     0\r
@@ -97,7 +97,7 @@ typedef struct {
 \r
 #ifndef ONIG_EXTERN\r
 #if defined(_WIN32) && !defined(__GNUC__)\r
-#if defined(EXPORT)\r
+#if defined(ONIGURUMA_EXPORT)\r
 #define ONIG_EXTERN   extern __declspec(dllexport)\r
 #else\r
 #define ONIG_EXTERN   extern __declspec(dllimport)\r
@@ -128,6 +128,7 @@ ONIG_EXTERN OnigSyntaxType OnigSyntaxGnuRegex;
 ONIG_EXTERN OnigSyntaxType OnigSyntaxJava;\r
 ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl;\r
 ONIG_EXTERN OnigSyntaxType OnigSyntaxRuby;\r
+ONIG_EXTERN OnigSyntaxType OnigSyntaxOniguruma;\r
 \r
 /* predefined syntaxes (see regsyntax.c) */\r
 #define ONIG_SYNTAX_POSIX_BASIC        (&OnigSyntaxPosixBasic)\r
@@ -138,6 +139,7 @@ ONIG_EXTERN OnigSyntaxType OnigSyntaxRuby;
 #define ONIG_SYNTAX_JAVA               (&OnigSyntaxJava)\r
 #define ONIG_SYNTAX_PERL               (&OnigSyntaxPerl)\r
 #define ONIG_SYNTAX_RUBY               (&OnigSyntaxRuby)\r
+#define ONIG_SYNTAX_ONIGURUMA          (&OnigSyntaxOniguruma)\r
 /* default syntax */\r
 #define ONIG_SYNTAX_DEFAULT             OnigDefaultSyntax\r
 \r
@@ -147,6 +149,7 @@ ONIG_EXTERN int  onig_set_default_syntax P_((OnigSyntaxType* syntax));
 ONIG_EXTERN void onig_copy_syntax P_((OnigSyntaxType* to, OnigSyntaxType* from));\r
 ONIG_EXTERN const char* onig_version P_((void));\r
 ONIG_EXTERN const char* onig_copyright P_((void));\r
+ONIG_EXTERN int onig_end P_((void));\r
 \r
 #endif /* ONIGURUMA_H */\r
 \r
index 462565aeca1389f3380fdbd158a3e47850d4ccde..5f31a91c67f1465bbe0bedf13105c66fc6f6cdb9 100644 (file)
@@ -4,7 +4,7 @@
   oniguruma.h - Oniguruma (regular expression library)\r
 **********************************************************************/\r
 /*-\r
- * Copyright (c) 2002-2009  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
  * All rights reserved.\r
  *\r
  * Redistribution and use in source and binary forms, with or without\r
@@ -36,31 +36,11 @@ extern "C" {
 #endif\r
 \r
 #define ONIGURUMA\r
-#define ONIGURUMA_VERSION_MAJOR   5\r
+#define ONIGURUMA_VERSION_MAJOR   6\r
 #define ONIGURUMA_VERSION_MINOR   9\r
-#define ONIGURUMA_VERSION_TEENY   6\r
+#define ONIGURUMA_VERSION_TEENY   0\r
 \r
-#ifdef __cplusplus\r
-# ifndef  HAVE_PROTOTYPES\r
-#  define HAVE_PROTOTYPES 1\r
-# endif\r
-# ifndef  HAVE_STDARG_PROTOTYPES\r
-#  define HAVE_STDARG_PROTOTYPES 1\r
-# endif\r
-#endif\r
-\r
-/* escape Mac OS X/Xcode 2.4/gcc 4.0.1 problem */\r
-#if defined(__APPLE__) && defined(__GNUC__) && __GNUC__ >= 4\r
-# ifndef  HAVE_STDARG_PROTOTYPES\r
-#  define HAVE_STDARG_PROTOTYPES 1\r
-# endif\r
-#endif\r
-\r
-#ifdef HAVE_STDARG_H\r
-# ifndef  HAVE_STDARG_PROTOTYPES\r
-#  define HAVE_STDARG_PROTOTYPES 1\r
-# endif\r
-#endif\r
+#define ONIGURUMA_VERSION_INT     60900\r
 \r
 #ifndef P_\r
 #if defined(__STDC__) || defined(_WIN32)\r
@@ -71,16 +51,12 @@ extern "C" {
 #endif\r
 \r
 #ifndef PV_\r
-#ifdef HAVE_STDARG_PROTOTYPES\r
 # define PV_(args) args\r
-#else\r
-# define PV_(args) ()\r
-#endif\r
 #endif\r
 \r
 #ifndef ONIG_EXTERN\r
 #if defined(_WIN32) && !defined(__GNUC__)\r
-#if defined(EXPORT) || defined(RUBY_EXPORT)\r
+#if defined(ONIGURUMA_EXPORT)\r
 #define ONIG_EXTERN   extern __declspec(dllexport)\r
 #else\r
 #define ONIG_EXTERN   extern __declspec(dllimport)\r
@@ -98,17 +74,12 @@ extern "C" {
 #define UChar OnigUChar\r
 #endif\r
 \r
-#ifdef _WIN32\r
-# include <windows.h>\r
-typedef ULONG_PTR OnigCodePoint;\r
-#else\r
-typedef unsigned long  OnigCodePoint;\r
-#endif\r
+typedef unsigned int   OnigCodePoint;\r
 typedef unsigned char  OnigUChar;\r
 typedef unsigned int   OnigCtype;\r
-typedef unsigned int   OnigDistance;\r
+typedef unsigned int   OnigLen;\r
 \r
-#define ONIG_INFINITE_DISTANCE  ~((OnigDistance )0)\r
+#define ONIG_INFINITE_DISTANCE  ~((OnigLen )0)\r
 \r
 typedef unsigned int OnigCaseFoldType; /* case fold flag */\r
 \r
@@ -146,7 +117,7 @@ typedef struct {
   OnigCodePoint one_or_more_time;\r
   OnigCodePoint anychar_anytime;\r
 } OnigMetaCharTableType;\r
-  \r
+\r
 typedef int (*OnigApplyAllCaseFoldFunc)(OnigCodePoint from, OnigCodePoint* to, int to_len, void* arg);\r
 \r
 typedef struct OnigEncodingTypeST {\r
@@ -166,6 +137,12 @@ typedef struct OnigEncodingTypeST {
   int    (*get_ctype_code_range)(OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[]);\r
   OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p);\r
   int    (*is_allowed_reverse_match)(const OnigUChar* p, const OnigUChar* end);\r
+  int    (*init)(void);\r
+  int    (*is_initialized)(void);\r
+  int    (*is_valid_mbc_string)(const OnigUChar* s, const OnigUChar* end);\r
+  unsigned int flag;\r
+  OnigCodePoint sb_range;\r
+  int index;\r
 } OnigEncodingType;\r
 \r
 typedef OnigEncodingType* OnigEncoding;\r
@@ -243,21 +220,24 @@ ONIG_EXTERN OnigEncodingType OnigEncodingGB18030;
 /* 18: 6(max-byte) * 3(case-fold chars) */\r
 \r
 /* character types */\r
-#define ONIGENC_CTYPE_NEWLINE   0\r
-#define ONIGENC_CTYPE_ALPHA     1\r
-#define ONIGENC_CTYPE_BLANK     2\r
-#define ONIGENC_CTYPE_CNTRL     3\r
-#define ONIGENC_CTYPE_DIGIT     4\r
-#define ONIGENC_CTYPE_GRAPH     5\r
-#define ONIGENC_CTYPE_LOWER     6\r
-#define ONIGENC_CTYPE_PRINT     7\r
-#define ONIGENC_CTYPE_PUNCT     8\r
-#define ONIGENC_CTYPE_SPACE     9\r
-#define ONIGENC_CTYPE_UPPER    10\r
-#define ONIGENC_CTYPE_XDIGIT   11\r
-#define ONIGENC_CTYPE_WORD     12\r
-#define ONIGENC_CTYPE_ALNUM    13  /* alpha || digit */\r
-#define ONIGENC_CTYPE_ASCII    14\r
+typedef enum {\r
+  ONIGENC_CTYPE_NEWLINE = 0,\r
+  ONIGENC_CTYPE_ALPHA   = 1,\r
+  ONIGENC_CTYPE_BLANK   = 2,\r
+  ONIGENC_CTYPE_CNTRL   = 3,\r
+  ONIGENC_CTYPE_DIGIT   = 4,\r
+  ONIGENC_CTYPE_GRAPH   = 5,\r
+  ONIGENC_CTYPE_LOWER   = 6,\r
+  ONIGENC_CTYPE_PRINT   = 7,\r
+  ONIGENC_CTYPE_PUNCT   = 8,\r
+  ONIGENC_CTYPE_SPACE   = 9,\r
+  ONIGENC_CTYPE_UPPER   = 10,\r
+  ONIGENC_CTYPE_XDIGIT  = 11,\r
+  ONIGENC_CTYPE_WORD    = 12,\r
+  ONIGENC_CTYPE_ALNUM   = 13,  /* alpha || digit */\r
+  ONIGENC_CTYPE_ASCII   = 14\r
+} OnigEncCtype;\r
+\r
 #define ONIGENC_MAX_STD_CTYPE  ONIGENC_CTYPE_ASCII\r
 \r
 \r
@@ -270,7 +250,7 @@ ONIG_EXTERN OnigEncodingType OnigEncodingGB18030;
 #define ONIGENC_IS_CODE_ASCII(code)       ((code) < 128)\r
 #define ONIGENC_IS_MBC_WORD(enc,s,end) \\r
    ONIGENC_IS_CODE_WORD(enc,ONIGENC_MBC_TO_CODE(enc,s,end))\r
-\r
+#define ONIGENC_IS_MBC_WORD_ASCII(enc,s,end) onigenc_is_mbc_word_ascii(enc,s,end)\r
 \r
 #define ONIGENC_NAME(enc)                      ((enc)->name)\r
 \r
@@ -280,6 +260,8 @@ ONIG_EXTERN OnigEncodingType OnigEncodingGB18030;
         (enc)->is_allowed_reverse_match(s,end)\r
 #define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s) \\r
         (enc)->left_adjust_char_head(start, s)\r
+#define ONIGENC_IS_VALID_MBC_STRING(enc,s,end) \\r
+        (enc)->is_valid_mbc_string(s,end)\r
 #define ONIGENC_APPLY_ALL_CASE_FOLD(enc,case_fold_flag,f,arg) \\r
         (enc)->apply_all_case_fold(case_fold_flag,f,arg)\r
 #define ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc,case_fold_flag,p,end,acs) \\r
@@ -340,6 +322,8 @@ OnigUChar* onigenc_step_back P_((OnigEncoding enc, const OnigUChar* start, const
 ONIG_EXTERN\r
 int onigenc_init P_((void));\r
 ONIG_EXTERN\r
+int onig_initialize_encoding P_((OnigEncoding enc));\r
+ONIG_EXTERN\r
 int onigenc_set_default_encoding P_((OnigEncoding enc));\r
 ONIG_EXTERN\r
 OnigEncoding onigenc_get_default_encoding P_((void));\r
@@ -359,13 +343,17 @@ ONIG_EXTERN
 int onigenc_strlen_null P_((OnigEncoding enc, const OnigUChar* p));\r
 ONIG_EXTERN\r
 int onigenc_str_bytelen_null P_((OnigEncoding enc, const OnigUChar* p));\r
-\r
+ONIG_EXTERN\r
+int onigenc_is_valid_mbc_string P_((OnigEncoding enc, const OnigUChar* s, const OnigUChar* end));\r
+ONIG_EXTERN\r
+OnigUChar* onigenc_strdup P_((OnigEncoding enc, const OnigUChar* s, const OnigUChar* end));\r
 \r
 \r
 /* PART: regular expression */\r
 \r
 /* config parameters */\r
 #define ONIG_NREGION                          10\r
+#define ONIG_MAX_CAPTURE_NUM          2147483647  /* 2**31 - 1 */\r
 #define ONIG_MAX_BACKREF_NUM                1000\r
 #define ONIG_MAX_REPEAT_NUM               100000\r
 #define ONIG_MAX_MULTI_BYTE_RANGES_NUM     10000\r
@@ -378,6 +366,7 @@ typedef unsigned int        OnigOptionType;
 \r
 /* options */\r
 #define ONIG_OPTION_NONE                 0U\r
+/* options (compile time) */\r
 #define ONIG_OPTION_IGNORECASE           1U\r
 #define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)\r
 #define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)\r
@@ -388,10 +377,18 @@ typedef unsigned int        OnigOptionType;
 #define ONIG_OPTION_DONT_CAPTURE_GROUP   (ONIG_OPTION_NEGATE_SINGLELINE  << 1)\r
 #define ONIG_OPTION_CAPTURE_GROUP        (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)\r
 /* options (search time) */\r
-#define ONIG_OPTION_NOTBOL               (ONIG_OPTION_CAPTURE_GROUP << 1)\r
-#define ONIG_OPTION_NOTEOL               (ONIG_OPTION_NOTBOL << 1)\r
-#define ONIG_OPTION_POSIX_REGION         (ONIG_OPTION_NOTEOL << 1)\r
-#define ONIG_OPTION_MAXBIT               ONIG_OPTION_POSIX_REGION  /* limit */\r
+#define ONIG_OPTION_NOTBOL                    (ONIG_OPTION_CAPTURE_GROUP << 1)\r
+#define ONIG_OPTION_NOTEOL                    (ONIG_OPTION_NOTBOL << 1)\r
+#define ONIG_OPTION_POSIX_REGION              (ONIG_OPTION_NOTEOL << 1)\r
+#define ONIG_OPTION_CHECK_VALIDITY_OF_STRING  (ONIG_OPTION_POSIX_REGION << 1)\r
+/* #define ONIG_OPTION_CRLF_AS_LINE_SEPARATOR    (ONIG_OPTION_CHECK_VALIDITY_OF_STRING << 1) */\r
+/* options (compile time) */\r
+#define ONIG_OPTION_WORD_IS_ASCII        (ONIG_OPTION_CHECK_VALIDITY_OF_STRING << 4)\r
+#define ONIG_OPTION_DIGIT_IS_ASCII       (ONIG_OPTION_WORD_IS_ASCII << 1)\r
+#define ONIG_OPTION_SPACE_IS_ASCII       (ONIG_OPTION_DIGIT_IS_ASCII << 1)\r
+#define ONIG_OPTION_POSIX_IS_ASCII       (ONIG_OPTION_SPACE_IS_ASCII << 1)\r
+\r
+#define ONIG_OPTION_MAXBIT               ONIG_OPTION_POSIX_IS_ASCII  /* limit */\r
 \r
 #define ONIG_OPTION_ON(options,regopt)      ((options) |= (regopt))\r
 #define ONIG_OPTION_OFF(options,regopt)     ((options) &= ~(regopt))\r
@@ -416,6 +413,7 @@ ONIG_EXTERN OnigSyntaxType OnigSyntaxJava;
 ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl;\r
 ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl_NG;\r
 ONIG_EXTERN OnigSyntaxType OnigSyntaxRuby;\r
+ONIG_EXTERN OnigSyntaxType OnigSyntaxOniguruma;\r
 \r
 /* predefined syntaxes (see regsyntax.c) */\r
 #define ONIG_SYNTAX_ASIS               (&OnigSyntaxASIS)\r
@@ -428,6 +426,7 @@ ONIG_EXTERN OnigSyntaxType OnigSyntaxRuby;
 #define ONIG_SYNTAX_PERL               (&OnigSyntaxPerl)\r
 #define ONIG_SYNTAX_PERL_NG            (&OnigSyntaxPerl_NG)\r
 #define ONIG_SYNTAX_RUBY               (&OnigSyntaxRuby)\r
+#define ONIG_SYNTAX_ONIGURUMA          (&OnigSyntaxOniguruma)\r
 \r
 /* default syntax */\r
 ONIG_EXTERN OnigSyntaxType*   OnigDefaultSyntax;\r
@@ -465,6 +464,7 @@ ONIG_EXTERN OnigSyntaxType*   OnigDefaultSyntax;
 #define ONIG_SYN_OP_ESC_OCTAL3                  (1U<<28)  /* \OOO */\r
 #define ONIG_SYN_OP_ESC_X_HEX2                  (1U<<29)  /* \xHH */\r
 #define ONIG_SYN_OP_ESC_X_BRACE_HEX8            (1U<<30)  /* \x{7HHHHHHH} */\r
+#define ONIG_SYN_OP_ESC_O_BRACE_OCTAL           (1U<<31)  /* \o{1OOOOOOOOOO} */\r
 \r
 #define ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE        (1U<<0)  /* \Q...\E */\r
 #define ONIG_SYN_OP2_QMARK_GROUP_EFFECT         (1U<<1)  /* (?...) */\r
@@ -487,6 +487,15 @@ ONIG_EXTERN OnigSyntaxType*   OnigDefaultSyntax;
 /* #define ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS (1U<<18) */\r
 #define ONIG_SYN_OP2_ESC_H_XDIGIT               (1U<<19) /* \h, \H */\r
 #define ONIG_SYN_OP2_INEFFECTIVE_ESCAPE         (1U<<20) /* \ */\r
+#define ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE       (1U<<21) /* (?(n)) (?(...)...|...) */\r
+#define ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP         (1U<<22) /* \K */\r
+#define ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE (1U<<23) /* \R \r\n else [\x0a-\x0d] */\r
+#define ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT  (1U<<24) /* \N (?-m:.), \O (?m:.) */\r
+#define ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP   (1U<<25) /* (?~...) */\r
+#define ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER   (1U<<26) /* \X \y \Y */\r
+#define ONIG_SYN_OP2_QMARK_PERL_SUBEXP_CALL     (1U<<27) /* (?R), (?&name)... */\r
+#define ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS (1U<<28) /* (?{...}) (?{{...}}) */\r
+#define ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME      (1U<<29) /* (*name) (*name{a,..}) */\r
 \r
 /* syntax (behavior) */\r
 #define ONIG_SYN_CONTEXT_INDEP_ANCHORS           (1U<<31) /* not implemented */\r
@@ -526,6 +535,7 @@ ONIG_EXTERN OnigSyntaxType*   OnigDefaultSyntax;
 #define ONIG_NORMAL                                            0\r
 #define ONIG_MISMATCH                                         -1\r
 #define ONIG_NO_SUPPORT_CONFIG                                -2\r
+#define ONIG_ABORT                                            -3\r
 \r
 /* internal error */\r
 #define ONIGERR_MEMORY                                         -5\r
@@ -535,10 +545,13 @@ ONIG_EXTERN OnigSyntaxType*   OnigDefaultSyntax;
 #define ONIGERR_UNDEFINED_BYTECODE                            -13\r
 #define ONIGERR_UNEXPECTED_BYTECODE                           -14\r
 #define ONIGERR_MATCH_STACK_LIMIT_OVER                        -15\r
+#define ONIGERR_PARSE_DEPTH_LIMIT_OVER                        -16\r
+#define ONIGERR_RETRY_LIMIT_IN_MATCH_OVER                     -17\r
 #define ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED                -21\r
 #define ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR  -22\r
+#define ONIGERR_FAIL_TO_INITIALIZE                            -23\r
 /* general error */\r
-#define ONIGERR_INVALID_ARGUMENT                              -30 \r
+#define ONIGERR_INVALID_ARGUMENT                              -30\r
 /* syntax error */\r
 #define ONIGERR_END_PATTERN_AT_LEFT_BRACE                    -100\r
 #define ONIGERR_END_PATTERN_AT_LEFT_BRACKET                  -101\r
@@ -573,6 +586,7 @@ ONIG_EXTERN OnigSyntaxType*   OnigDefaultSyntax;
 #define ONIGERR_TOO_BIG_BACKREF_NUMBER                       -207\r
 #define ONIGERR_INVALID_BACKREF                              -208\r
 #define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED         -209\r
+#define ONIGERR_TOO_MANY_CAPTURES                            -210\r
 #define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE                     -212\r
 #define ONIGERR_EMPTY_GROUP_NAME                             -214\r
 #define ONIGERR_INVALID_GROUP_NAME                           -215\r
@@ -584,17 +598,29 @@ ONIG_EXTERN OnigSyntaxType*   OnigDefaultSyntax;
 #define ONIGERR_NEVER_ENDING_RECURSION                       -221\r
 #define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY        -222\r
 #define ONIGERR_INVALID_CHAR_PROPERTY_NAME                   -223\r
+#define ONIGERR_INVALID_IF_ELSE_SYNTAX                       -224\r
+#define ONIGERR_INVALID_ABSENT_GROUP_PATTERN                 -225\r
+#define ONIGERR_INVALID_ABSENT_GROUP_GENERATOR_PATTERN       -226\r
+#define ONIGERR_INVALID_CALLOUT_PATTERN                      -227\r
+#define ONIGERR_INVALID_CALLOUT_NAME                         -228\r
+#define ONIGERR_UNDEFINED_CALLOUT_NAME                       -229\r
+#define ONIGERR_INVALID_CALLOUT_BODY                         -230\r
+#define ONIGERR_INVALID_CALLOUT_TAG_NAME                     -231\r
+#define ONIGERR_INVALID_CALLOUT_ARG                          -232\r
 #define ONIGERR_INVALID_CODE_POINT_VALUE                     -400\r
 #define ONIGERR_INVALID_WIDE_CHAR_VALUE                      -400\r
 #define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE                      -401\r
 #define ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION           -402\r
 #define ONIGERR_INVALID_COMBINATION_OF_OPTIONS               -403\r
+#define ONIGERR_TOO_MANY_USER_DEFINED_OBJECTS                -404\r
+#define ONIGERR_TOO_LONG_PROPERTY_NAME                       -405\r
+#define ONIGERR_LIBRARY_IS_NOT_INITIALIZED                   -500\r
 \r
 /* errors related to thread */\r
-#define ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT                -1001\r
+/* #define ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT                -1001 */\r
 \r
 \r
-/* must be smaller than BIT_STATUS_BITS_NUM (unsigned int * 8) */\r
+/* must be smaller than MEM_STATUS_BITS_NUM (unsigned int * 8) */\r
 #define ONIG_MAX_CAPTURE_HISTORY_GROUP   31\r
 #define ONIG_IS_CAPTURE_HISTORY_GROUP(r, i) \\r
   ((i) <= ONIG_MAX_CAPTURE_HISTORY_GROUP && (r)->list && (r)->list[i])\r
@@ -646,59 +672,8 @@ extern void onig_null_warn P_((const char* s));
 \r
 #define ONIG_CHAR_TABLE_SIZE   256\r
 \r
-/* regex_t state */\r
-#define ONIG_STATE_NORMAL              0\r
-#define ONIG_STATE_SEARCHING           1\r
-#define ONIG_STATE_COMPILING          -1\r
-#define ONIG_STATE_MODIFY             -2\r
-\r
-#define ONIG_STATE(reg) \\r
-  ((reg)->state > 0 ? ONIG_STATE_SEARCHING : (reg)->state)\r
-\r
-typedef struct re_pattern_buffer {\r
-  /* common members of BBuf(bytes-buffer) */\r
-  unsigned char* p;         /* compiled pattern */\r
-  unsigned int used;        /* used space for p */\r
-  unsigned int alloc;       /* allocated space for p */\r
-\r
-  int state;                     /* normal, searching, compiling */\r
-  int num_mem;                   /* used memory(...) num counted from 1 */\r
-  int num_repeat;                /* OP_REPEAT/OP_REPEAT_NG id-counter */\r
-  int num_null_check;            /* OP_NULL_CHECK_START/END id counter */\r
-  int num_comb_exp_check;        /* combination explosion check */\r
-  int num_call;                  /* number of subexp call */\r
-  unsigned int capture_history;  /* (?@...) flag (1-31) */\r
-  unsigned int bt_mem_start;     /* need backtrack flag */\r
-  unsigned int bt_mem_end;       /* need backtrack flag */\r
-  int stack_pop_level;\r
-  int repeat_range_alloc;\r
-  OnigRepeatRange* repeat_range;\r
-\r
-  OnigEncoding      enc;\r
-  OnigOptionType    options;\r
-  OnigSyntaxType*   syntax;\r
-  OnigCaseFoldType  case_fold_flag;\r
-  void*             name_table;\r
-\r
-  /* optimization info (string search, char-map and anchors) */\r
-  int            optimize;          /* optimize flag */\r
-  int            threshold_len;     /* search str-length for apply optimize */\r
-  int            anchor;            /* BEGIN_BUF, BEGIN_POS, (SEMI_)END_BUF */\r
-  OnigDistance   anchor_dmin;       /* (SEMI_)END_BUF anchor distance */\r
-  OnigDistance   anchor_dmax;       /* (SEMI_)END_BUF anchor distance */\r
-  int            sub_anchor;        /* start-anchor for exact or map */\r
-  unsigned char *exact;\r
-  unsigned char *exact_end;\r
-  unsigned char  map[ONIG_CHAR_TABLE_SIZE]; /* used as BM skip or char-map */\r
-  int           *int_map;                   /* BM skip for exact_len > 255 */\r
-  int           *int_map_backward;          /* BM skip for backward search */\r
-  OnigDistance   dmin;                      /* min-distance of exact or map */\r
-  OnigDistance   dmax;                      /* max-distance of exact or map */\r
-\r
-  /* regex_t link chain */\r
-  struct re_pattern_buffer* chain;  /* escape compile-conflict */\r
-} OnigRegexType;\r
-\r
+struct re_pattern_buffer;\r
+typedef struct re_pattern_buffer OnigRegexType;\r
 typedef OnigRegexType*  OnigRegex;\r
 \r
 #ifndef ONIG_ESCAPE_REGEX_T_COLLISION\r
@@ -715,7 +690,75 @@ typedef struct {
   OnigCaseFoldType   case_fold_flag;\r
 } OnigCompileInfo;\r
 \r
+\r
+/* types for callout */\r
+typedef enum {\r
+  ONIG_CALLOUT_IN_PROGRESS   = 1, /* 1<<0 */\r
+  ONIG_CALLOUT_IN_RETRACTION = 2  /* 1<<1 */\r
+} OnigCalloutIn;\r
+\r
+#define ONIG_CALLOUT_IN_BOTH  (ONIG_CALLOUT_IN_PROGRESS | ONIG_CALLOUT_IN_RETRACTION)\r
+\r
+typedef enum {\r
+  ONIG_CALLOUT_OF_CONTENTS = 0,\r
+  ONIG_CALLOUT_OF_NAME     = 1\r
+} OnigCalloutOf;\r
+\r
+typedef enum {\r
+  ONIG_CALLOUT_TYPE_SINGLE              = 0,\r
+  ONIG_CALLOUT_TYPE_START_CALL          = 1,\r
+  ONIG_CALLOUT_TYPE_BOTH_CALL           = 2,\r
+  ONIG_CALLOUT_TYPE_START_MARK_END_CALL = 3,\r
+} OnigCalloutType;\r
+\r
+\r
+#define ONIG_NON_NAME_ID        -1\r
+#define ONIG_NON_CALLOUT_NUM     0\r
+\r
+#define ONIG_CALLOUT_MAX_ARGS_NUM     4\r
+#define ONIG_CALLOUT_DATA_SLOT_NUM    5\r
+\r
+struct OnigCalloutArgsStruct;\r
+typedef struct OnigCalloutArgsStruct OnigCalloutArgs;\r
+\r
+typedef int (*OnigCalloutFunc)(OnigCalloutArgs* args, void* user_data);\r
+\r
+/* callout function return values (less than -1: error code) */\r
+typedef enum {\r
+  ONIG_CALLOUT_FAIL     =  1,\r
+  ONIG_CALLOUT_SUCCESS  =  0\r
+} OnigCalloutResult;\r
+\r
+typedef enum {\r
+  ONIG_TYPE_VOID     = 0,\r
+  ONIG_TYPE_LONG     = 1<<0,\r
+  ONIG_TYPE_CHAR     = 1<<1,\r
+  ONIG_TYPE_STRING   = 1<<2,\r
+  ONIG_TYPE_POINTER  = 1<<3,\r
+  ONIG_TYPE_TAG      = 1<<4,\r
+} OnigType;\r
+\r
+typedef union {\r
+  long l;\r
+  OnigCodePoint c;\r
+  struct {\r
+    OnigUChar* start;\r
+    OnigUChar* end;\r
+  } s;\r
+  void* p;\r
+  int tag;  /* tag -> callout_num */\r
+} OnigValue;\r
+\r
+\r
+struct OnigMatchParamStruct;\r
+typedef struct OnigMatchParamStruct OnigMatchParam;\r
+\r
+\r
 /* Oniguruma Native API */\r
+\r
+ONIG_EXTERN\r
+int onig_initialize P_((OnigEncoding encodings[], int number_of_encodings));\r
+/* onig_init(): deprecated function. Use onig_initialize(). */\r
 ONIG_EXTERN\r
 int onig_init P_((void));\r
 ONIG_EXTERN\r
@@ -727,7 +770,7 @@ void onig_set_verb_warn_func P_((OnigWarnFunc f));
 ONIG_EXTERN\r
 int onig_new P_((OnigRegex*, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo));\r
 ONIG_EXTERN\r
-int  onig_reg_init P_((regex_t* reg, OnigOptionType option, OnigCaseFoldType case_fold_flag, OnigEncoding enc, OnigSyntaxType* syntax));\r
+int  onig_reg_init P_((OnigRegex reg, OnigOptionType option, OnigCaseFoldType case_fold_flag, OnigEncoding enc, OnigSyntaxType* syntax));\r
 int onig_new_without_alloc P_((OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo));\r
 ONIG_EXTERN\r
 int onig_new_deluxe P_((OnigRegex* reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo));\r
@@ -736,14 +779,16 @@ void onig_free P_((OnigRegex));
 ONIG_EXTERN\r
 void onig_free_body P_((OnigRegex));\r
 ONIG_EXTERN\r
-int onig_recompile P_((OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo));\r
-ONIG_EXTERN\r
-int onig_recompile_deluxe P_((OnigRegex reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo));\r
+int onig_scan(OnigRegex reg, const OnigUChar* str, const OnigUChar* end, OnigRegion* region, OnigOptionType option, int (*scan_callback)(int, int, OnigRegion*, void*), void* callback_arg);\r
 ONIG_EXTERN\r
 int onig_search P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option));\r
 ONIG_EXTERN\r
+int onig_search_with_param P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option, OnigMatchParam* mp));\r
+ONIG_EXTERN\r
 int onig_match P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option));\r
 ONIG_EXTERN\r
+int onig_match_with_param P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option, OnigMatchParam* mp));\r
+ONIG_EXTERN\r
 OnigRegion* onig_region_new P_((void));\r
 ONIG_EXTERN\r
 void onig_region_init P_((OnigRegion* region));\r
@@ -816,12 +861,141 @@ unsigned int onig_get_match_stack_limit_size P_((void));
 ONIG_EXTERN\r
 int onig_set_match_stack_limit_size P_((unsigned int size));\r
 ONIG_EXTERN\r
+unsigned long onig_get_retry_limit_in_match P_((void));\r
+ONIG_EXTERN\r
+int onig_set_retry_limit_in_match P_((unsigned long n));\r
+ONIG_EXTERN\r
+unsigned int onig_get_parse_depth_limit P_((void));\r
+ONIG_EXTERN\r
+int onig_set_capture_num_limit P_((int num));\r
+ONIG_EXTERN\r
+int onig_set_parse_depth_limit P_((unsigned int depth));\r
+ONIG_EXTERN\r
+int onig_unicode_define_user_property P_((const char* name, OnigCodePoint* ranges));\r
+ONIG_EXTERN\r
 int onig_end P_((void));\r
 ONIG_EXTERN\r
 const char* onig_version P_((void));\r
 ONIG_EXTERN\r
 const char* onig_copyright P_((void));\r
 \r
+/* for OnigMatchParam */\r
+ONIG_EXTERN\r
+OnigMatchParam* onig_new_match_param P_((void));\r
+ONIG_EXTERN\r
+void onig_free_match_param P_((OnigMatchParam* p));\r
+ONIG_EXTERN\r
+void onig_free_match_param_content P_((OnigMatchParam* p));\r
+ONIG_EXTERN\r
+int onig_initialize_match_param P_((OnigMatchParam* mp));\r
+ONIG_EXTERN\r
+int onig_set_match_stack_limit_size_of_match_param P_((OnigMatchParam* param, unsigned int limit));\r
+ONIG_EXTERN\r
+int onig_set_retry_limit_in_match_of_match_param P_((OnigMatchParam* param, unsigned long limit));\r
+ONIG_EXTERN\r
+int onig_set_progress_callout_of_match_param P_((OnigMatchParam* param, OnigCalloutFunc f));\r
+ONIG_EXTERN\r
+int onig_set_retraction_callout_of_match_param P_((OnigMatchParam* param, OnigCalloutFunc f));\r
+ONIG_EXTERN\r
+int onig_set_callout_user_data_of_match_param P_((OnigMatchParam* param, void* user_data));\r
+\r
+/* for callout functions */\r
+ONIG_EXTERN\r
+OnigCalloutFunc onig_get_progress_callout P_((void));\r
+ONIG_EXTERN\r
+int onig_set_progress_callout P_((OnigCalloutFunc f));\r
+ONIG_EXTERN\r
+OnigCalloutFunc onig_get_retraction_callout P_((void));\r
+ONIG_EXTERN\r
+int onig_set_retraction_callout P_((OnigCalloutFunc f));\r
+ONIG_EXTERN\r
+int onig_set_callout_of_name P_((OnigEncoding enc, OnigCalloutType type, OnigUChar* name, OnigUChar* name_end, int callout_in, OnigCalloutFunc callout, OnigCalloutFunc end_callout, int arg_num, unsigned int arg_types[], int optional_arg_num, OnigValue opt_defaults[]));\r
+ONIG_EXTERN\r
+OnigUChar* onig_get_callout_name_by_name_id P_((int id));\r
+ONIG_EXTERN\r
+int onig_get_callout_num_by_tag P_((OnigRegex reg, const OnigUChar* tag, const OnigUChar* tag_end));\r
+ONIG_EXTERN\r
+int onig_get_callout_data_by_tag P_((OnigRegex reg, OnigMatchParam* mp, const OnigUChar* tag, const OnigUChar* tag_end, int slot, OnigType* type, OnigValue* val));\r
+ONIG_EXTERN\r
+int onig_set_callout_data_by_tag P_((OnigRegex reg, OnigMatchParam* mp, const OnigUChar* tag, const OnigUChar* tag_end, int slot, OnigType type, OnigValue* val));\r
+\r
+/* used in callout functions */\r
+ONIG_EXTERN\r
+int onig_get_callout_num_by_callout_args P_((OnigCalloutArgs* args));\r
+ONIG_EXTERN\r
+OnigCalloutIn onig_get_callout_in_by_callout_args P_((OnigCalloutArgs* args));\r
+ONIG_EXTERN\r
+int onig_get_name_id_by_callout_args P_((OnigCalloutArgs* args));\r
+ONIG_EXTERN\r
+const OnigUChar* onig_get_contents_by_callout_args P_((OnigCalloutArgs* args));\r
+ONIG_EXTERN\r
+const OnigUChar* onig_get_contents_end_by_callout_args P_((OnigCalloutArgs* args));\r
+ONIG_EXTERN\r
+int onig_get_args_num_by_callout_args P_((OnigCalloutArgs* args));\r
+ONIG_EXTERN\r
+int onig_get_passed_args_num_by_callout_args P_((OnigCalloutArgs* args));\r
+ONIG_EXTERN\r
+int onig_get_arg_by_callout_args P_((OnigCalloutArgs* args, int index, OnigType* type, OnigValue* val));\r
+ONIG_EXTERN\r
+const OnigUChar* onig_get_string_by_callout_args P_((OnigCalloutArgs* args));\r
+ONIG_EXTERN\r
+const OnigUChar* onig_get_string_end_by_callout_args P_((OnigCalloutArgs* args));\r
+ONIG_EXTERN\r
+const OnigUChar* onig_get_start_by_callout_args P_((OnigCalloutArgs* args));\r
+ONIG_EXTERN\r
+const OnigUChar* onig_get_right_range_by_callout_args P_((OnigCalloutArgs* args));\r
+ONIG_EXTERN\r
+const OnigUChar* onig_get_current_by_callout_args P_((OnigCalloutArgs* args));\r
+ONIG_EXTERN\r
+OnigRegex onig_get_regex_by_callout_args P_((OnigCalloutArgs* args));\r
+ONIG_EXTERN\r
+unsigned long onig_get_retry_counter_by_callout_args P_((OnigCalloutArgs* args));\r
+ONIG_EXTERN\r
+int onig_callout_tag_is_exist_at_callout_num P_((OnigRegex reg, int callout_num));\r
+ONIG_EXTERN\r
+const OnigUChar* onig_get_callout_tag_start P_((OnigRegex reg, int callout_num));\r
+ONIG_EXTERN\r
+const OnigUChar* onig_get_callout_tag_end P_((OnigRegex reg, int callout_num));\r
+ONIG_EXTERN\r
+int onig_get_callout_data_dont_clear_old P_((OnigRegex reg, OnigMatchParam* mp, int callout_num, int slot, OnigType* type, OnigValue* val));\r
+ONIG_EXTERN\r
+int onig_get_callout_data_by_callout_args_self_dont_clear_old P_((OnigCalloutArgs* args, int slot, OnigType* type, OnigValue* val));\r
+ONIG_EXTERN\r
+int onig_get_callout_data P_((OnigRegex reg, OnigMatchParam* mp, int callout_num, int slot, OnigType* type, OnigValue* val));\r
+ONIG_EXTERN\r
+int onig_get_callout_data_by_callout_args P_((OnigCalloutArgs* args, int callout_num, int slot, OnigType* type, OnigValue* val));\r
+ONIG_EXTERN\r
+int onig_get_callout_data_by_callout_args_self P_((OnigCalloutArgs* args, int slot, OnigType* type, OnigValue* val));\r
+ONIG_EXTERN\r
+int onig_set_callout_data P_((OnigRegex reg, OnigMatchParam* mp, int callout_num, int slot, OnigType type, OnigValue* val));\r
+ONIG_EXTERN\r
+int onig_set_callout_data_by_callout_args P_((OnigCalloutArgs* args, int callout_num, int slot, OnigType type, OnigValue* val));\r
+ONIG_EXTERN\r
+int onig_set_callout_data_by_callout_args_self P_((OnigCalloutArgs* args, int slot, OnigType type, OnigValue* val));\r
+ONIG_EXTERN\r
+int onig_get_capture_range_in_callout P_((OnigCalloutArgs* args, int mem_num, int* begin, int* end));\r
+ONIG_EXTERN\r
+int onig_get_used_stack_size_in_callout P_((OnigCalloutArgs* args, int* used_num, int* used_bytes));\r
+\r
+/* builtin callout functions */\r
+ONIG_EXTERN\r
+int onig_builtin_fail P_((OnigCalloutArgs* args, void* user_data));\r
+ONIG_EXTERN\r
+int onig_builtin_mismatch P_((OnigCalloutArgs* args, void* user_data));\r
+ONIG_EXTERN\r
+int onig_builtin_error P_((OnigCalloutArgs* args, void* user_data));\r
+ONIG_EXTERN\r
+int onig_builtin_count P_((OnigCalloutArgs* args, void* user_data));\r
+ONIG_EXTERN\r
+int onig_builtin_total_count P_((OnigCalloutArgs* args, void* user_data));\r
+ONIG_EXTERN\r
+int onig_builtin_max P_((OnigCalloutArgs* args, void* user_data));\r
+ONIG_EXTERN\r
+int onig_builtin_cmp P_((OnigCalloutArgs* args, void* user_data));\r
+\r
+ONIG_EXTERN\r
+int onig_setup_builtin_monitors_by_ascii_encoded_name P_((void* fp));\r
+\r
 #ifdef __cplusplus\r
 }\r
 #endif\r
index ea63b09d0c85fb564c4e4f79adef779c3af99ee1..cc061780c7ea659bf03600dd45bc2acb97d35c93 100644 (file)
@@ -2,11 +2,9 @@
   regcomp.c -  Oniguruma (regular expression library)\r
 **********************************************************************/\r
 /*-\r
- * Copyright (c) 2002-2013  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
  * All rights reserved.\r
  *\r
- * (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>\r
- *\r
  * Redistribution and use in source and binary forms, with or without\r
  * modification, are permitted provided that the following conditions\r
  * are met:\r
 \r
 OnigCaseFoldType OnigDefaultCaseFoldFlag = ONIGENC_CASE_FOLD_MIN;\r
 \r
+#if 0\r
+typedef struct {\r
+  int  n;\r
+  int  alloc;\r
+  int* v;\r
+} int_stack;\r
+\r
+static int\r
+make_int_stack(int_stack** rs, int init_size)\r
+{\r
+  int_stack* s;\r
+  int* v;\r
+\r
+  *rs = 0;\r
+\r
+  s = xmalloc(sizeof(*s));\r
+  if (IS_NULL(s)) return ONIGERR_MEMORY;\r
+\r
+  v = (int* )xmalloc(sizeof(int) * init_size);\r
+  if (IS_NULL(v)) {\r
+    xfree(s);\r
+    return ONIGERR_MEMORY;\r
+  }\r
+\r
+  s->n = 0;\r
+  s->alloc = init_size;\r
+  s->v = v;\r
+\r
+  *rs = s;\r
+  return ONIG_NORMAL;\r
+}\r
+\r
+static void\r
+free_int_stack(int_stack* s)\r
+{\r
+  if (IS_NOT_NULL(s)) {\r
+    if (IS_NOT_NULL(s->v))\r
+      xfree(s->v);\r
+    xfree(s);\r
+  }\r
+}\r
+\r
+static int\r
+int_stack_push(int_stack* s, int v)\r
+{\r
+  if (s->n >= s->alloc) {\r
+    int new_size = s->alloc * 2;\r
+    int* nv = (int* )xrealloc(s->v, sizeof(int) * new_size);\r
+    if (IS_NULL(nv)) return ONIGERR_MEMORY;\r
+\r
+    s->alloc = new_size;\r
+    s->v = nv;\r
+  }\r
+\r
+  s->v[s->n] = v;\r
+  s->n++;\r
+  return ONIG_NORMAL;\r
+}\r
+\r
+static int\r
+int_stack_pop(int_stack* s)\r
+{\r
+  int v;\r
+\r
+#ifdef ONIG_DEBUG\r
+  if (s->n <= 0) {\r
+    fprintf(stderr, "int_stack_pop: fail empty. %p\n", s);\r
+    return 0;\r
+  }\r
+#endif\r
+\r
+  v = s->v[s->n];\r
+  s->n--;\r
+  return v;\r
+}\r
+#endif\r
+\r
 extern OnigCaseFoldType\r
 onig_get_default_case_fold_flag(void)\r
 {\r
@@ -46,99 +121,87 @@ onig_set_default_case_fold_flag(OnigCaseFoldType case_fold_flag)
   return 0;\r
 }\r
 \r
-\r
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS\r
-static unsigned char PadBuf[WORD_ALIGNMENT_SIZE];\r
-#endif\r
-\r
-static UChar*\r
-str_dup(UChar* s, UChar* end)\r
+static int\r
+int_multiply_cmp(int x, int y, int v)\r
 {\r
-  int len = (int)(end - s);\r
+  if (x == 0 || y == 0) return -1;\r
 \r
-  if (len > 0) {\r
-    UChar* r = (UChar* )xmalloc(len + 1);\r
-    CHECK_NULL_RETURN(r);\r
-    xmemcpy(r, s, len);\r
-    r[len] = (UChar )0;\r
-    return r;\r
+  if (x < INT_MAX / y) {\r
+    int xy = x * y;\r
+    if (xy > v) return 1;\r
+    else {\r
+      if (xy == v) return 0;\r
+      else return -1;\r
+    }\r
   }\r
-  else return NULL;\r
+  else\r
+    return 1;\r
 }\r
 \r
+\r
+#ifndef PLATFORM_UNALIGNED_WORD_ACCESS\r
+static unsigned char PadBuf[WORD_ALIGNMENT_SIZE];\r
+#endif\r
+\r
 static void\r
 swap_node(Node* a, Node* b)\r
 {\r
   Node c;\r
-  CopyMem (&c, a, sizeof (Node));\r
-  CopyMem (a, b, sizeof (Node));\r
-  CopyMem (b, &c, sizeof (Node));\r
 \r
-  if (NTYPE(a) == NT_STR) {\r
-    StrNode* sn = NSTR(a);\r
+  c = *a; *a = *b; *b = c;\r
+\r
+  if (NODE_TYPE(a) == NODE_STRING) {\r
+    StrNode* sn = STR_(a);\r
     if (sn->capa == 0) {\r
-      int len = (int)(sn->end - sn->s);\r
+      int len = (int )(sn->end - sn->s);\r
       sn->s   = sn->buf;\r
       sn->end = sn->s + len;\r
     }\r
   }\r
 \r
-  if (NTYPE(b) == NT_STR) {\r
-    StrNode* sn = NSTR(b);\r
+  if (NODE_TYPE(b) == NODE_STRING) {\r
+    StrNode* sn = STR_(b);\r
     if (sn->capa == 0) {\r
-      int len = (int)(sn->end - sn->s);\r
+      int len = (int )(sn->end - sn->s);\r
       sn->s   = sn->buf;\r
       sn->end = sn->s + len;\r
     }\r
   }\r
 }\r
 \r
-static OnigDistance\r
-distance_add(OnigDistance d1, OnigDistance d2)\r
+static OnigLen\r
+distance_add(OnigLen d1, OnigLen d2)\r
 {\r
-  if (d1 == ONIG_INFINITE_DISTANCE || d2 == ONIG_INFINITE_DISTANCE)\r
-    return ONIG_INFINITE_DISTANCE;\r
+  if (d1 == INFINITE_LEN || d2 == INFINITE_LEN)\r
+    return INFINITE_LEN;\r
   else {\r
-    if (d1 <= ONIG_INFINITE_DISTANCE - d2) return d1 + d2;\r
-    else return ONIG_INFINITE_DISTANCE;\r
+    if (d1 <= INFINITE_LEN - d2) return d1 + d2;\r
+    else return INFINITE_LEN;\r
   }\r
 }\r
 \r
-static OnigDistance\r
-distance_multiply(OnigDistance d, int m)\r
+static OnigLen\r
+distance_multiply(OnigLen d, int m)\r
 {\r
   if (m == 0) return 0;\r
 \r
-  if (d < ONIG_INFINITE_DISTANCE / m)\r
+  if (d < INFINITE_LEN / m)\r
     return d * m;\r
   else\r
-    return ONIG_INFINITE_DISTANCE;\r
+    return INFINITE_LEN;\r
 }\r
 \r
 static int\r
 bitset_is_empty(BitSetRef bs)\r
 {\r
   int i;\r
+\r
   for (i = 0; i < (int )BITSET_SIZE; i++) {\r
     if (bs[i] != 0) return 0;\r
   }\r
   return 1;\r
 }\r
 \r
-#ifdef ONIG_DEBUG\r
-static int\r
-bitset_on_num(BitSetRef bs)\r
-{\r
-  int i, n;\r
-\r
-  n = 0;\r
-  for (i = 0; i < SINGLE_BYTE_SIZE; i++) {\r
-    if (BITSET_AT(bs, i)) n++;\r
-  }\r
-  return n;\r
-}\r
-#endif\r
-\r
 extern int\r
 onig_bbuf_init(BBuf* buf, int size)\r
 {\r
@@ -157,74 +220,62 @@ onig_bbuf_init(BBuf* buf, int size)
 }\r
 \r
 \r
-#ifdef USE_SUBEXP_CALL\r
+#ifdef USE_CALL\r
 \r
 static int\r
-unset_addr_list_init(UnsetAddrList* uslist, int size)\r
+unset_addr_list_init(UnsetAddrList* list, int size)\r
 {\r
-  UnsetAddr* p;\r
-\r
-  p = (UnsetAddr* )xmalloc(sizeof(UnsetAddr)* size);\r
+  UnsetAddr* p = (UnsetAddr* )xmalloc(sizeof(UnsetAddr)* size);\r
   CHECK_NULL_RETURN_MEMERR(p);\r
-  uslist->num   = 0;\r
-  uslist->alloc = size;\r
-  uslist->us    = p;\r
+\r
+  list->num   = 0;\r
+  list->alloc = size;\r
+  list->us    = p;\r
   return 0;\r
 }\r
 \r
 static void\r
-unset_addr_list_end(UnsetAddrList* uslist)\r
+unset_addr_list_end(UnsetAddrList* list)\r
 {\r
-  if (IS_NOT_NULL(uslist->us))\r
-    xfree(uslist->us);\r
+  if (IS_NOT_NULL(list->us))\r
+    xfree(list->us);\r
 }\r
 \r
 static int\r
-unset_addr_list_add(UnsetAddrList* uslist, int offset, struct _Node* node)\r
+unset_addr_list_add(UnsetAddrList* list, int offset, struct _Node* node)\r
 {\r
   UnsetAddr* p;\r
   int size;\r
 \r
-  if (uslist->num >= uslist->alloc) {\r
-    size = uslist->alloc * 2;\r
-    p = (UnsetAddr* )xrealloc(uslist->us, sizeof(UnsetAddr) * size, sizeof(UnsetAddr) * uslist->alloc);\r
+  if (list->num >= list->alloc) {\r
+    size = list->alloc * 2;\r
+    p = (UnsetAddr* )xrealloc(list->us, sizeof(UnsetAddr) * size, sizeof(UnsetAddr)* list->alloc);\r
     CHECK_NULL_RETURN_MEMERR(p);\r
-    uslist->alloc = size;\r
-    uslist->us    = p;\r
+    list->alloc = size;\r
+    list->us    = p;\r
   }\r
 \r
-  uslist->us[uslist->num].offset = offset;\r
-  uslist->us[uslist->num].target = node;\r
-  uslist->num++;\r
+  list->us[list->num].offset = offset;\r
+  list->us[list->num].target = node;\r
+  list->num++;\r
   return 0;\r
 }\r
-#endif /* USE_SUBEXP_CALL */\r
+#endif /* USE_CALL */\r
 \r
 \r
 static int\r
 add_opcode(regex_t* reg, int opcode)\r
 {\r
-  BBUF_ADD1(reg, ((unsigned char)opcode));\r
-  return 0;\r
-}\r
-\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-static int\r
-add_state_check_num(regex_t* reg, int num)\r
-{\r
-  StateCheckNumType n = (StateCheckNumType )num;\r
-\r
-  BBUF_ADD(reg, &n, SIZE_STATE_CHECK_NUM);\r
+  BB_ADD1(reg, opcode);\r
   return 0;\r
 }\r
-#endif\r
 \r
 static int\r
 add_rel_addr(regex_t* reg, int addr)\r
 {\r
   RelAddrType ra = (RelAddrType )addr;\r
 \r
-  BBUF_ADD(reg, &ra, SIZE_RELADDR);\r
+  BB_ADD(reg, &ra, SIZE_RELADDR);\r
   return 0;\r
 }\r
 \r
@@ -233,7 +284,7 @@ add_abs_addr(regex_t* reg, int addr)
 {\r
   AbsAddrType ra = (AbsAddrType )addr;\r
 \r
-  BBUF_ADD(reg, &ra, SIZE_ABSADDR);\r
+  BB_ADD(reg, &ra, SIZE_ABSADDR);\r
   return 0;\r
 }\r
 \r
@@ -242,7 +293,7 @@ add_length(regex_t* reg, int len)
 {\r
   LengthType l = (LengthType )len;\r
 \r
-  BBUF_ADD(reg, &l, SIZE_LENGTH);\r
+  BB_ADD(reg, &l, SIZE_LENGTH);\r
   return 0;\r
 }\r
 \r
@@ -251,64 +302,80 @@ add_mem_num(regex_t* reg, int num)
 {\r
   MemNumType n = (MemNumType )num;\r
 \r
-  BBUF_ADD(reg, &n, SIZE_MEMNUM);\r
+  BB_ADD(reg, &n, SIZE_MEMNUM);\r
   return 0;\r
 }\r
 \r
+#if 0\r
 static int\r
 add_pointer(regex_t* reg, void* addr)\r
 {\r
   PointerType ptr = (PointerType )addr;\r
 \r
-  BBUF_ADD(reg, &ptr, SIZE_POINTER);\r
+  BB_ADD(reg, &ptr, SIZE_POINTER);\r
   return 0;\r
 }\r
+#endif\r
 \r
 static int\r
 add_option(regex_t* reg, OnigOptionType option)\r
 {\r
-  BBUF_ADD(reg, &option, SIZE_OPTION);\r
+  BB_ADD(reg, &option, SIZE_OPTION);\r
   return 0;\r
 }\r
 \r
 static int\r
-add_opcode_rel_addr(regex_t* reg, int opcode, int addr)\r
+add_save_type(regex_t* reg, enum SaveType type)\r
 {\r
-  int r;\r
+  SaveType t = (SaveType )type;\r
 \r
-  r = add_opcode(reg, opcode);\r
-  if (r) return r;\r
-  r = add_rel_addr(reg, addr);\r
-  return r;\r
+  BB_ADD(reg, &t, SIZE_SAVE_TYPE);\r
+  return 0;\r
 }\r
 \r
 static int\r
-add_bytes(regex_t* reg, UChar* bytes, int len)\r
+add_update_var_type(regex_t* reg, enum UpdateVarType type)\r
 {\r
-  BBUF_ADD(reg, bytes, len);\r
+  UpdateVarType t = (UpdateVarType )type;\r
+\r
+  BB_ADD(reg, &t, SIZE_UPDATE_VAR_TYPE);\r
   return 0;\r
 }\r
 \r
 static int\r
-add_bitset(regex_t* reg, BitSetRef bs)\r
+add_mode(regex_t* reg, ModeType mode)\r
 {\r
-  BBUF_ADD(reg, bs, SIZE_BITSET);\r
+  BB_ADD(reg, &mode, SIZE_MODE);\r
   return 0;\r
 }\r
 \r
 static int\r
-add_opcode_option(regex_t* reg, int opcode, OnigOptionType option)\r
+add_opcode_rel_addr(regex_t* reg, int opcode, int addr)\r
 {\r
   int r;\r
 \r
   r = add_opcode(reg, opcode);\r
-  if (r) return r;\r
-  r = add_option(reg, option);\r
+  if (r != 0) return r;\r
+  r = add_rel_addr(reg, addr);\r
   return r;\r
 }\r
 \r
+static int\r
+add_bytes(regex_t* reg, UChar* bytes, int len)\r
+{\r
+  BB_ADD(reg, bytes, len);\r
+  return 0;\r
+}\r
+\r
+static int\r
+add_bitset(regex_t* reg, BitSetRef bs)\r
+{\r
+  BB_ADD(reg, bs, SIZE_BITSET);\r
+  return 0;\r
+}\r
+\r
 static int compile_length_tree(Node* node, regex_t* reg);\r
-static int compile_tree(Node* node, regex_t* reg);\r
+static int compile_tree(Node* node, regex_t* reg, ScanEnv* env);\r
 \r
 \r
 #define IS_NEED_STR_LEN_OP_EXACT(op) \\r
@@ -361,60 +428,60 @@ select_str_opcode(int mb_len, int str_len, int ignore_case)
 }\r
 \r
 static int\r
-compile_tree_empty_check(Node* node, regex_t* reg, int empty_info)\r
+compile_tree_empty_check(Node* node, regex_t* reg, int empty_info, ScanEnv* env)\r
 {\r
   int r;\r
   int saved_num_null_check = reg->num_null_check;\r
 \r
-  if (empty_info != 0) {\r
-    r = add_opcode(reg, OP_NULL_CHECK_START);\r
-    if (r) return r;\r
+  if (empty_info != QUANT_BODY_IS_NOT_EMPTY) {\r
+    r = add_opcode(reg, OP_EMPTY_CHECK_START);\r
+    if (r != 0) return r;\r
     r = add_mem_num(reg, reg->num_null_check); /* NULL CHECK ID */\r
-    if (r) return r;\r
+    if (r != 0) return r;\r
     reg->num_null_check++;\r
   }\r
 \r
-  r = compile_tree(node, reg);\r
-  if (r) return r;\r
+  r = compile_tree(node, reg, env);\r
+  if (r != 0) return r;\r
 \r
-  if (empty_info != 0) {\r
-    if (empty_info == NQ_TARGET_IS_EMPTY)\r
-      r = add_opcode(reg, OP_NULL_CHECK_END);\r
-    else if (empty_info == NQ_TARGET_IS_EMPTY_MEM)\r
-      r = add_opcode(reg, OP_NULL_CHECK_END_MEMST);\r
-    else if (empty_info == NQ_TARGET_IS_EMPTY_REC)\r
-      r = add_opcode(reg, OP_NULL_CHECK_END_MEMST_PUSH);\r
+  if (empty_info != QUANT_BODY_IS_NOT_EMPTY) {\r
+    if (empty_info == QUANT_BODY_IS_EMPTY)\r
+      r = add_opcode(reg, OP_EMPTY_CHECK_END);\r
+    else if (empty_info == QUANT_BODY_IS_EMPTY_MEM)\r
+      r = add_opcode(reg, OP_EMPTY_CHECK_END_MEMST);\r
+    else if (empty_info == QUANT_BODY_IS_EMPTY_REC)\r
+      r = add_opcode(reg, OP_EMPTY_CHECK_END_MEMST_PUSH);\r
 \r
-    if (r) return r;\r
+    if (r != 0) return r;\r
     r = add_mem_num(reg, saved_num_null_check); /* NULL CHECK ID */\r
   }\r
   return r;\r
 }\r
 \r
-#ifdef USE_SUBEXP_CALL\r
+#ifdef USE_CALL\r
 static int\r
-compile_call(CallNode* node, regex_t* reg)\r
+compile_call(CallNode* node, regex_t* reg, ScanEnv* env)\r
 {\r
   int r;\r
 \r
   r = add_opcode(reg, OP_CALL);\r
-  if (r) return r;\r
-  r = unset_addr_list_add(node->unset_addr_list, BBUF_GET_OFFSET_POS(reg),\r
-                          node->target);\r
-  if (r) return r;\r
+  if (r != 0) return r;\r
+  r = unset_addr_list_add(env->unset_addr_list, BB_GET_OFFSET_POS(reg),\r
+                          NODE_CALL_BODY(node));\r
+  if (r != 0) return r;\r
   r = add_abs_addr(reg, 0 /*dummy addr.*/);\r
   return r;\r
 }\r
 #endif\r
 \r
 static int\r
-compile_tree_n_times(Node* node, int n, regex_t* reg)\r
+compile_tree_n_times(Node* node, int n, regex_t* reg, ScanEnv* env)\r
 {\r
   int i, r;\r
 \r
   for (i = 0; i < n; i++) {\r
-    r = compile_tree(node, reg);\r
-    if (r) return r;\r
+    r = compile_tree(node, reg, env);\r
+    if (r != 0) return r;\r
   }\r
   return 0;\r
 }\r
@@ -462,15 +529,15 @@ static int
 compile_length_string_node(Node* node, regex_t* reg)\r
 {\r
   int rlen, r, len, prev_len, slen, ambig;\r
-  OnigEncoding enc = reg->enc;\r
   UChar *p, *prev;\r
   StrNode* sn;\r
+  OnigEncoding enc = reg->enc;\r
 \r
-  sn = NSTR(node);\r
+  sn = STR_(node);\r
   if (sn->end <= sn->s)\r
     return 0;\r
 \r
-  ambig = NSTRING_IS_AMBIG(node);\r
+  ambig = NODE_STRING_IS_AMBIG(node);\r
 \r
   p = prev = sn->s;\r
   prev_len = enclen(enc, p);\r
@@ -492,6 +559,7 @@ compile_length_string_node(Node* node, regex_t* reg)
     }\r
     p += len;\r
   }\r
+\r
   r = add_compile_string_length(prev, prev_len, slen, reg, ambig);\r
   rlen += r;\r
   return rlen;\r
@@ -503,23 +571,24 @@ compile_length_string_raw_node(StrNode* sn, regex_t* reg)
   if (sn->end <= sn->s)\r
     return 0;\r
 \r
-  return add_compile_string_length(sn->s, 1 /* sb */, (int)(sn->end - sn->s), reg, 0);\r
+  return add_compile_string_length(sn->s, 1 /* sb */, (int )(sn->end - sn->s),\r
+                                   reg, 0);\r
 }\r
 \r
 static int\r
 compile_string_node(Node* node, regex_t* reg)\r
 {\r
   int r, len, prev_len, slen, ambig;\r
-  OnigEncoding enc = reg->enc;\r
   UChar *p, *prev, *end;\r
   StrNode* sn;\r
+  OnigEncoding enc = reg->enc;\r
 \r
-  sn = NSTR(node);\r
+  sn = STR_(node);\r
   if (sn->end <= sn->s)\r
     return 0;\r
 \r
   end = sn->end;\r
-  ambig = NSTRING_IS_AMBIG(node);\r
+  ambig = NODE_STRING_IS_AMBIG(node);\r
 \r
   p = prev = sn->s;\r
   prev_len = enclen(enc, p);\r
@@ -533,7 +602,7 @@ compile_string_node(Node* node, regex_t* reg)
     }\r
     else {\r
       r = add_compile_string(prev, prev_len, slen, reg, ambig);\r
-      if (r) return r;\r
+      if (r != 0) return r;\r
 \r
       prev  = p;\r
       slen  = 1;\r
@@ -542,6 +611,7 @@ compile_string_node(Node* node, regex_t* reg)
 \r
     p += len;\r
   }\r
+\r
   return add_compile_string(prev, prev_len, slen, reg, ambig);\r
 }\r
 \r
@@ -551,7 +621,7 @@ compile_string_raw_node(StrNode* sn, regex_t* reg)
   if (sn->end <= sn->s)\r
     return 0;\r
 \r
-  return add_compile_string(sn->s, 1 /* sb */, (int)(sn->end - sn->s), reg, 0);\r
+  return add_compile_string(sn->s, 1 /* sb */, (int )(sn->end - sn->s), reg, 0);\r
 }\r
 \r
 static int\r
@@ -562,7 +632,7 @@ add_multi_byte_cclass(BBuf* mbuf, regex_t* reg)
   return add_bytes(reg, mbuf->p, mbuf->used);\r
 #else\r
   int r, pad_size;\r
-  UChar* p = BBUF_GET_ADD_ADDRESS(reg) + SIZE_LENGTH;\r
+  UChar* p = BB_GET_ADD_ADDRESS(reg) + SIZE_LENGTH;\r
 \r
   GET_ALIGNMENT_PAD_SIZE(p, pad_size);\r
   add_length(reg, mbuf->used + (WORD_ALIGNMENT_SIZE - 1));\r
@@ -582,11 +652,6 @@ compile_length_cclass_node(CClassNode* cc, regex_t* reg)
 {\r
   int len;\r
 \r
-  if (IS_NCCLASS_SHARE(cc)) {\r
-    len = SIZE_OPCODE + SIZE_POINTER;\r
-    return len;\r
-  }\r
-\r
   if (IS_NULL(cc->mbuf)) {\r
     len = SIZE_OPCODE + SIZE_BITSET;\r
   }\r
@@ -612,12 +677,6 @@ compile_cclass_node(CClassNode* cc, regex_t* reg)
 {\r
   int r;\r
 \r
-  if (IS_NCCLASS_SHARE(cc)) {\r
-    add_opcode(reg, OP_CCLASS_NODE);\r
-    r = add_pointer(reg, cc);\r
-    return r;\r
-  }\r
-\r
   if (IS_NULL(cc->mbuf)) {\r
     if (IS_NCCLASS_NOT(cc))\r
       add_opcode(reg, OP_CCLASS_NOT);\r
@@ -642,7 +701,7 @@ compile_cclass_node(CClassNode* cc, regex_t* reg)
         add_opcode(reg, OP_CCLASS_MIX);\r
 \r
       r = add_bitset(reg, cc->bs);\r
-      if (r) return r;\r
+      if (r != 0) return r;\r
       r = add_multi_byte_cclass(cc->mbuf, reg);\r
     }\r
   }\r
@@ -683,46 +742,46 @@ entry_repeat_range(regex_t* reg, int id, int lower, int upper)
 }\r
 \r
 static int\r
-compile_range_repeat_node(QtfrNode* qn, int target_len, int empty_info,\r
-                          regex_t* reg)\r
+compile_range_repeat_node(QuantNode* qn, int target_len, int empty_info,\r
+                          regex_t* reg, ScanEnv* env)\r
 {\r
   int r;\r
   int num_repeat = reg->num_repeat;\r
 \r
   r = add_opcode(reg, qn->greedy ? OP_REPEAT : OP_REPEAT_NG);\r
-  if (r) return r;\r
+  if (r != 0) return r;\r
   r = add_mem_num(reg, num_repeat); /* OP_REPEAT ID */\r
   reg->num_repeat++;\r
-  if (r) return r;\r
+  if (r != 0) return r;\r
   r = add_rel_addr(reg, target_len + SIZE_OP_REPEAT_INC);\r
-  if (r) return r;\r
+  if (r != 0) return r;\r
 \r
   r = entry_repeat_range(reg, num_repeat, qn->lower, qn->upper);\r
-  if (r) return r;\r
+  if (r != 0) return r;\r
 \r
-  r = compile_tree_empty_check(qn->target, reg, empty_info);\r
-  if (r) return r;\r
+  r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, empty_info, env);\r
+  if (r != 0) return r;\r
 \r
   if (\r
-#ifdef USE_SUBEXP_CALL\r
-      reg->num_call > 0 ||\r
+#ifdef USE_CALL\r
+      NODE_IS_IN_MULTI_ENTRY(qn) ||\r
 #endif\r
-      IS_QUANTIFIER_IN_REPEAT(qn)) {\r
+      NODE_IS_IN_REAL_REPEAT(qn)) {\r
     r = add_opcode(reg, qn->greedy ? OP_REPEAT_INC_SG : OP_REPEAT_INC_NG_SG);\r
   }\r
   else {\r
     r = add_opcode(reg, qn->greedy ? OP_REPEAT_INC : OP_REPEAT_INC_NG);\r
   }\r
-  if (r) return r;\r
+  if (r != 0) return r;\r
   r = add_mem_num(reg, num_repeat); /* OP_REPEAT ID */\r
   return r;\r
 }\r
 \r
 static int\r
-is_anychar_star_quantifier(QtfrNode* qn)\r
+is_anychar_infinite_greedy(QuantNode* qn)\r
 {\r
   if (qn->greedy && IS_REPEAT_INFINITE(qn->upper) &&\r
-      NTYPE(qn->target) == NT_CANY)\r
+      NODE_IS_ANYCHAR(NODE_QUANT_BODY(qn)))\r
     return 1;\r
   else\r
     return 0;\r
@@ -731,255 +790,21 @@ is_anychar_star_quantifier(QtfrNode* qn)
 #define QUANTIFIER_EXPAND_LIMIT_SIZE   50\r
 #define CKN_ON   (ckn > 0)\r
 \r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-\r
-static int\r
-compile_length_quantifier_node(QtfrNode* qn, regex_t* reg)\r
-{\r
-  int len, mod_tlen, cklen;\r
-  int ckn;\r
-  int infinite = IS_REPEAT_INFINITE(qn->upper);\r
-  int empty_info = qn->target_empty_info;\r
-  int tlen = compile_length_tree(qn->target, reg);\r
-\r
-  if (tlen < 0) return tlen;\r
-\r
-  ckn = ((reg->num_comb_exp_check > 0) ? qn->comb_exp_check_num : 0);\r
-\r
-  cklen = (CKN_ON ? SIZE_STATE_CHECK_NUM: 0);\r
-\r
-  /* anychar repeat */\r
-  if (NTYPE(qn->target) == NT_CANY) {\r
-    if (qn->greedy && infinite) {\r
-      if (IS_NOT_NULL(qn->next_head_exact) && !CKN_ON)\r
-        return SIZE_OP_ANYCHAR_STAR_PEEK_NEXT + tlen * qn->lower + cklen;\r
-      else\r
-        return SIZE_OP_ANYCHAR_STAR + tlen * qn->lower + cklen;\r
-    }\r
-  }\r
-\r
-  if (empty_info != 0)\r
-    mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END);\r
-  else\r
-    mod_tlen = tlen;\r
-\r
-  if (infinite && qn->lower <= 1) {\r
-    if (qn->greedy) {\r
-      if (qn->lower == 1)\r
-       len = SIZE_OP_JUMP;\r
-      else\r
-       len = 0;\r
-\r
-      len += SIZE_OP_PUSH + cklen + mod_tlen + SIZE_OP_JUMP;\r
-    }\r
-    else {\r
-      if (qn->lower == 0)\r
-       len = SIZE_OP_JUMP;\r
-      else\r
-       len = 0;\r
-\r
-      len += mod_tlen + SIZE_OP_PUSH + cklen;\r
-    }\r
-  }\r
-  else if (qn->upper == 0) {\r
-    if (qn->is_refered != 0) /* /(?<n>..){0}/ */\r
-      len = SIZE_OP_JUMP + tlen;\r
-    else\r
-      len = 0;\r
-  }\r
-  else if (qn->upper == 1 && qn->greedy) {\r
-    if (qn->lower == 0) {\r
-      if (CKN_ON) {\r
-       len = SIZE_OP_STATE_CHECK_PUSH + tlen;\r
-      }\r
-      else {\r
-       len = SIZE_OP_PUSH + tlen;\r
-      }\r
-    }\r
-    else {\r
-      len = tlen;\r
-    }\r
-  }\r
-  else if (!qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */\r
-    len = SIZE_OP_PUSH + cklen + SIZE_OP_JUMP + tlen;\r
-  }\r
-  else {\r
-    len = SIZE_OP_REPEAT_INC\r
-        + mod_tlen + SIZE_OPCODE + SIZE_RELADDR + SIZE_MEMNUM;\r
-    if (CKN_ON)\r
-      len += SIZE_OP_STATE_CHECK;\r
-  }\r
-\r
-  return len;\r
-}\r
-\r
-static int\r
-compile_quantifier_node(QtfrNode* qn, regex_t* reg)\r
-{\r
-  int r, mod_tlen;\r
-  int ckn;\r
-  int infinite = IS_REPEAT_INFINITE(qn->upper);\r
-  int empty_info = qn->target_empty_info;\r
-  int tlen = compile_length_tree(qn->target, reg);\r
-\r
-  if (tlen < 0) return tlen;\r
-\r
-  ckn = ((reg->num_comb_exp_check > 0) ? qn->comb_exp_check_num : 0);\r
-\r
-  if (is_anychar_star_quantifier(qn)) {\r
-    r = compile_tree_n_times(qn->target, qn->lower, reg);\r
-    if (r) return r;\r
-    if (IS_NOT_NULL(qn->next_head_exact) && !CKN_ON) {\r
-      if (IS_MULTILINE(reg->options))\r
-       r = add_opcode(reg, OP_ANYCHAR_ML_STAR_PEEK_NEXT);\r
-      else\r
-       r = add_opcode(reg, OP_ANYCHAR_STAR_PEEK_NEXT);\r
-      if (r) return r;\r
-      if (CKN_ON) {\r
-       r = add_state_check_num(reg, ckn);\r
-       if (r) return r;\r
-      }\r
-\r
-      return add_bytes(reg, NSTR(qn->next_head_exact)->s, 1);\r
-    }\r
-    else {\r
-      if (IS_MULTILINE(reg->options)) {\r
-       r = add_opcode(reg, (CKN_ON ?\r
-                              OP_STATE_CHECK_ANYCHAR_ML_STAR\r
-                            : OP_ANYCHAR_ML_STAR));\r
-      }\r
-      else {\r
-       r = add_opcode(reg, (CKN_ON ?\r
-                              OP_STATE_CHECK_ANYCHAR_STAR\r
-                            : OP_ANYCHAR_STAR));\r
-      }\r
-      if (r) return r;\r
-      if (CKN_ON)\r
-       r = add_state_check_num(reg, ckn);\r
-\r
-      return r;\r
-    }\r
-  }\r
-\r
-  if (empty_info != 0)\r
-    mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END);\r
-  else\r
-    mod_tlen = tlen;\r
-\r
-  if (infinite && qn->lower <= 1) {\r
-    if (qn->greedy) {\r
-      if (qn->lower == 1) {\r
-       r = add_opcode_rel_addr(reg, OP_JUMP,\r
-                       (CKN_ON ? SIZE_OP_STATE_CHECK_PUSH : SIZE_OP_PUSH));\r
-       if (r) return r;\r
-      }\r
-\r
-      if (CKN_ON) {\r
-       r = add_opcode(reg, OP_STATE_CHECK_PUSH);\r
-       if (r) return r;\r
-       r = add_state_check_num(reg, ckn);\r
-       if (r) return r;\r
-       r = add_rel_addr(reg, mod_tlen + SIZE_OP_JUMP);\r
-      }\r
-      else {\r
-       r = add_opcode_rel_addr(reg, OP_PUSH, mod_tlen + SIZE_OP_JUMP);\r
-      }\r
-      if (r) return r;\r
-      r = compile_tree_empty_check(qn->target, reg, empty_info);\r
-      if (r) return r;\r
-      r = add_opcode_rel_addr(reg, OP_JUMP,\r
-             -(mod_tlen + (int )SIZE_OP_JUMP\r
-               + (int )(CKN_ON ? SIZE_OP_STATE_CHECK_PUSH : SIZE_OP_PUSH)));\r
-    }\r
-    else {\r
-      if (qn->lower == 0) {\r
-       r = add_opcode_rel_addr(reg, OP_JUMP, mod_tlen);\r
-       if (r) return r;\r
-      }\r
-      r = compile_tree_empty_check(qn->target, reg, empty_info);\r
-      if (r) return r;\r
-      if (CKN_ON) {\r
-       r = add_opcode(reg, OP_STATE_CHECK_PUSH_OR_JUMP);\r
-       if (r) return r;\r
-       r = add_state_check_num(reg, ckn);\r
-       if (r) return r;\r
-       r = add_rel_addr(reg,\r
-                -(mod_tlen + (int )SIZE_OP_STATE_CHECK_PUSH_OR_JUMP));\r
-      }\r
-      else\r
-       r = add_opcode_rel_addr(reg, OP_PUSH, -(mod_tlen + (int )SIZE_OP_PUSH));\r
-    }\r
-  }\r
-  else if (qn->upper == 0) {\r
-    if (qn->is_refered != 0) { /* /(?<n>..){0}/ */\r
-      r = add_opcode_rel_addr(reg, OP_JUMP, tlen);\r
-      if (r) return r;\r
-      r = compile_tree(qn->target, reg);\r
-    }\r
-    else\r
-      r = 0;\r
-  }\r
-  else if (qn->upper == 1 && qn->greedy) {\r
-    if (qn->lower == 0) {\r
-      if (CKN_ON) {\r
-       r = add_opcode(reg, OP_STATE_CHECK_PUSH);\r
-       if (r) return r;\r
-       r = add_state_check_num(reg, ckn);\r
-       if (r) return r;\r
-       r = add_rel_addr(reg, tlen);\r
-      }\r
-      else {\r
-       r = add_opcode_rel_addr(reg, OP_PUSH, tlen);\r
-      }\r
-      if (r) return r;\r
-    }\r
-\r
-    r = compile_tree(qn->target, reg);\r
-  }\r
-  else if (!qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */\r
-    if (CKN_ON) {\r
-      r = add_opcode(reg, OP_STATE_CHECK_PUSH);\r
-      if (r) return r;\r
-      r = add_state_check_num(reg, ckn);\r
-      if (r) return r;\r
-      r = add_rel_addr(reg, SIZE_OP_JUMP);\r
-    }\r
-    else {\r
-      r = add_opcode_rel_addr(reg, OP_PUSH, SIZE_OP_JUMP);\r
-    }\r
-\r
-    if (r) return r;\r
-    r = add_opcode_rel_addr(reg, OP_JUMP, tlen);\r
-    if (r) return r;\r
-    r = compile_tree(qn->target, reg);\r
-  }\r
-  else {\r
-    r = compile_range_repeat_node(qn, mod_tlen, empty_info, reg);\r
-    if (CKN_ON) {\r
-      if (r) return r;\r
-      r = add_opcode(reg, OP_STATE_CHECK);\r
-      if (r) return r;\r
-      r = add_state_check_num(reg, ckn);\r
-    }\r
-  }\r
-  return r;\r
-}\r
-\r
-#else /* USE_COMBINATION_EXPLOSION_CHECK */\r
-\r
 static int\r
-compile_length_quantifier_node(QtfrNode* qn, regex_t* reg)\r
+compile_length_quantifier_node(QuantNode* qn, regex_t* reg)\r
 {\r
   int len, mod_tlen;\r
   int infinite = IS_REPEAT_INFINITE(qn->upper);\r
-  int empty_info = qn->target_empty_info;\r
-  int tlen = compile_length_tree(qn->target, reg);\r
+  enum QuantBodyEmpty empty_info = qn->body_empty_info;\r
+  int tlen = compile_length_tree(NODE_QUANT_BODY(qn), reg);\r
 \r
   if (tlen < 0) return tlen;\r
+  if (tlen == 0) return 0;\r
 \r
   /* anychar repeat */\r
-  if (NTYPE(qn->target) == NT_CANY) {\r
-    if (qn->greedy && infinite) {\r
+  if (is_anychar_infinite_greedy(qn)) {\r
+    if (qn->lower <= 1 ||\r
+        int_multiply_cmp(tlen, qn->lower, QUANTIFIER_EXPAND_LIMIT_SIZE) <= 0) {\r
       if (IS_NOT_NULL(qn->next_head_exact))\r
         return SIZE_OP_ANYCHAR_STAR_PEEK_NEXT + tlen * qn->lower;\r
       else\r
@@ -987,13 +812,14 @@ compile_length_quantifier_node(QtfrNode* qn, regex_t* reg)
     }\r
   }\r
 \r
-  if (empty_info != 0)\r
-    mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END);\r
-  else\r
+  if (empty_info == QUANT_BODY_IS_NOT_EMPTY)\r
     mod_tlen = tlen;\r
+  else\r
+    mod_tlen = tlen + (SIZE_OP_EMPTY_CHECK_START + SIZE_OP_EMPTY_CHECK_END);\r
 \r
   if (infinite &&\r
-      (qn->lower <= 1 || tlen * qn->lower <= QUANTIFIER_EXPAND_LIMIT_SIZE)) {\r
+      (qn->lower <= 1 ||\r
+       int_multiply_cmp(tlen, qn->lower, QUANTIFIER_EXPAND_LIMIT_SIZE) <= 0)) {\r
     if (qn->lower == 1 && tlen > QUANTIFIER_EXPAND_LIMIT_SIZE) {\r
       len = SIZE_OP_JUMP;\r
     }\r
@@ -1003,11 +829,11 @@ compile_length_quantifier_node(QtfrNode* qn, regex_t* reg)
 \r
     if (qn->greedy) {\r
       if (IS_NOT_NULL(qn->head_exact))\r
-       len += SIZE_OP_PUSH_OR_JUMP_EXACT1 + mod_tlen + SIZE_OP_JUMP;\r
+        len += SIZE_OP_PUSH_OR_JUMP_EXACT1 + mod_tlen + SIZE_OP_JUMP;\r
       else if (IS_NOT_NULL(qn->next_head_exact))\r
-       len += SIZE_OP_PUSH_IF_PEEK_NEXT + mod_tlen + SIZE_OP_JUMP;\r
+        len += SIZE_OP_PUSH_IF_PEEK_NEXT + mod_tlen + SIZE_OP_JUMP;\r
       else\r
-       len += SIZE_OP_PUSH + mod_tlen + SIZE_OP_JUMP;\r
+        len += SIZE_OP_PUSH + mod_tlen + SIZE_OP_JUMP;\r
     }\r
     else\r
       len += SIZE_OP_JUMP + mod_tlen + SIZE_OP_PUSH;\r
@@ -1016,8 +842,9 @@ compile_length_quantifier_node(QtfrNode* qn, regex_t* reg)
     len = SIZE_OP_JUMP + tlen;\r
   }\r
   else if (!infinite && qn->greedy &&\r
-           (qn->upper == 1 || (tlen + SIZE_OP_PUSH) * qn->upper\r
-                                      <= QUANTIFIER_EXPAND_LIMIT_SIZE)) {\r
+           (qn->upper == 1 ||\r
+            int_multiply_cmp(tlen + SIZE_OP_PUSH, qn->upper,\r
+                             QUANTIFIER_EXPAND_LIMIT_SIZE) <= 0)) {\r
     len = tlen * qn->lower;\r
     len += (SIZE_OP_PUSH + tlen) * (qn->upper - qn->lower);\r
   }\r
@@ -1033,341 +860,428 @@ compile_length_quantifier_node(QtfrNode* qn, regex_t* reg)
 }\r
 \r
 static int\r
-compile_quantifier_node(QtfrNode* qn, regex_t* reg)\r
+compile_quantifier_node(QuantNode* qn, regex_t* reg, ScanEnv* env)\r
 {\r
   int i, r, mod_tlen;\r
   int infinite = IS_REPEAT_INFINITE(qn->upper);\r
-  int empty_info = qn->target_empty_info;\r
-  int tlen = compile_length_tree(qn->target, reg);\r
+  enum QuantBodyEmpty empty_info = qn->body_empty_info;\r
+  int tlen = compile_length_tree(NODE_QUANT_BODY(qn), reg);\r
 \r
   if (tlen < 0) return tlen;\r
+  if (tlen == 0) return 0;\r
 \r
-  if (is_anychar_star_quantifier(qn)) {\r
-    r = compile_tree_n_times(qn->target, qn->lower, reg);\r
-    if (r) return r;\r
+  if (is_anychar_infinite_greedy(qn) &&\r
+      (qn->lower <= 1 ||\r
+       int_multiply_cmp(tlen, qn->lower, QUANTIFIER_EXPAND_LIMIT_SIZE) <= 0)) {\r
+    r = compile_tree_n_times(NODE_QUANT_BODY(qn), qn->lower, reg, env);\r
+    if (r != 0) return r;\r
     if (IS_NOT_NULL(qn->next_head_exact)) {\r
-      if (IS_MULTILINE(reg->options))\r
-       r = add_opcode(reg, OP_ANYCHAR_ML_STAR_PEEK_NEXT);\r
+      if (IS_MULTILINE(CTYPE_OPTION(NODE_QUANT_BODY(qn), reg)))\r
+        r = add_opcode(reg, OP_ANYCHAR_ML_STAR_PEEK_NEXT);\r
       else\r
-       r = add_opcode(reg, OP_ANYCHAR_STAR_PEEK_NEXT);\r
-      if (r) return r;\r
-      return add_bytes(reg, NSTR(qn->next_head_exact)->s, 1);\r
+        r = add_opcode(reg, OP_ANYCHAR_STAR_PEEK_NEXT);\r
+      if (r != 0) return r;\r
+      return add_bytes(reg, STR_(qn->next_head_exact)->s, 1);\r
     }\r
     else {\r
-      if (IS_MULTILINE(reg->options))\r
-       return add_opcode(reg, OP_ANYCHAR_ML_STAR);\r
+      if (IS_MULTILINE(CTYPE_OPTION(NODE_QUANT_BODY(qn), reg)))\r
+        return add_opcode(reg, OP_ANYCHAR_ML_STAR);\r
       else\r
-       return add_opcode(reg, OP_ANYCHAR_STAR);\r
+        return add_opcode(reg, OP_ANYCHAR_STAR);\r
     }\r
   }\r
 \r
-  if (empty_info != 0)\r
-    mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END);\r
-  else\r
+  if (empty_info == QUANT_BODY_IS_NOT_EMPTY)\r
     mod_tlen = tlen;\r
+  else\r
+    mod_tlen = tlen + (SIZE_OP_EMPTY_CHECK_START + SIZE_OP_EMPTY_CHECK_END);\r
 \r
   if (infinite &&\r
-      (qn->lower <= 1 || tlen * qn->lower <= QUANTIFIER_EXPAND_LIMIT_SIZE)) {\r
+      (qn->lower <= 1 ||\r
+       int_multiply_cmp(tlen, qn->lower, QUANTIFIER_EXPAND_LIMIT_SIZE) <= 0)) {\r
     if (qn->lower == 1 && tlen > QUANTIFIER_EXPAND_LIMIT_SIZE) {\r
       if (qn->greedy) {\r
-       if (IS_NOT_NULL(qn->head_exact))\r
-         r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH_OR_JUMP_EXACT1);\r
-       else if (IS_NOT_NULL(qn->next_head_exact))\r
-         r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH_IF_PEEK_NEXT);\r
-       else\r
-         r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH);\r
+        if (IS_NOT_NULL(qn->head_exact))\r
+          r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH_OR_JUMP_EXACT1);\r
+        else if (IS_NOT_NULL(qn->next_head_exact))\r
+          r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH_IF_PEEK_NEXT);\r
+        else\r
+          r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH);\r
       }\r
       else {\r
-       r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_JUMP);\r
+        r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_JUMP);\r
       }\r
-      if (r) return r;\r
+      if (r != 0) return r;\r
     }\r
     else {\r
-      r = compile_tree_n_times(qn->target, qn->lower, reg);\r
-      if (r) return r;\r
+      r = compile_tree_n_times(NODE_QUANT_BODY(qn), qn->lower, reg, env);\r
+      if (r != 0) return r;\r
     }\r
 \r
     if (qn->greedy) {\r
       if (IS_NOT_NULL(qn->head_exact)) {\r
-       r = add_opcode_rel_addr(reg, OP_PUSH_OR_JUMP_EXACT1,\r
-                            mod_tlen + SIZE_OP_JUMP);\r
-       if (r) return r;\r
-       add_bytes(reg, NSTR(qn->head_exact)->s, 1);\r
-       r = compile_tree_empty_check(qn->target, reg, empty_info);\r
-       if (r) return r;\r
-       r = add_opcode_rel_addr(reg, OP_JUMP,\r
-       -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_OR_JUMP_EXACT1));\r
+        r = add_opcode_rel_addr(reg, OP_PUSH_OR_JUMP_EXACT1,\r
+                                mod_tlen + SIZE_OP_JUMP);\r
+        if (r != 0) return r;\r
+        add_bytes(reg, STR_(qn->head_exact)->s, 1);\r
+        r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, empty_info, env);\r
+        if (r != 0) return r;\r
+        r = add_opcode_rel_addr(reg, OP_JUMP,\r
+           -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_OR_JUMP_EXACT1));\r
       }\r
       else if (IS_NOT_NULL(qn->next_head_exact)) {\r
-       r = add_opcode_rel_addr(reg, OP_PUSH_IF_PEEK_NEXT,\r
-                               mod_tlen + SIZE_OP_JUMP);\r
-       if (r) return r;\r
-       add_bytes(reg, NSTR(qn->next_head_exact)->s, 1);\r
-       r = compile_tree_empty_check(qn->target, reg, empty_info);\r
-       if (r) return r;\r
-       r = add_opcode_rel_addr(reg, OP_JUMP,\r
-          -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_IF_PEEK_NEXT));\r
+        r = add_opcode_rel_addr(reg, OP_PUSH_IF_PEEK_NEXT,\r
+                                mod_tlen + SIZE_OP_JUMP);\r
+        if (r != 0) return r;\r
+        add_bytes(reg, STR_(qn->next_head_exact)->s, 1);\r
+        r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, empty_info, env);\r
+        if (r != 0) return r;\r
+        r = add_opcode_rel_addr(reg, OP_JUMP,\r
+           -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_IF_PEEK_NEXT));\r
       }\r
       else {\r
-       r = add_opcode_rel_addr(reg, OP_PUSH, mod_tlen + SIZE_OP_JUMP);\r
-       if (r) return r;\r
-       r = compile_tree_empty_check(qn->target, reg, empty_info);\r
-       if (r) return r;\r
-       r = add_opcode_rel_addr(reg, OP_JUMP,\r
-                    -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH));\r
+        r = add_opcode_rel_addr(reg, OP_PUSH, mod_tlen + SIZE_OP_JUMP);\r
+        if (r != 0) return r;\r
+        r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, empty_info, env);\r
+        if (r != 0) return r;\r
+        r = add_opcode_rel_addr(reg, OP_JUMP,\r
+                   -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH));\r
       }\r
     }\r
     else {\r
       r = add_opcode_rel_addr(reg, OP_JUMP, mod_tlen);\r
-      if (r) return r;\r
-      r = compile_tree_empty_check(qn->target, reg, empty_info);\r
-      if (r) return r;\r
+      if (r != 0) return r;\r
+      r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, empty_info, env);\r
+      if (r != 0) return r;\r
       r = add_opcode_rel_addr(reg, OP_PUSH, -(mod_tlen + (int )SIZE_OP_PUSH));\r
     }\r
   }\r
   else if (qn->upper == 0 && qn->is_refered != 0) { /* /(?<n>..){0}/ */\r
     r = add_opcode_rel_addr(reg, OP_JUMP, tlen);\r
-    if (r) return r;\r
-    r = compile_tree(qn->target, reg);\r
+    if (r != 0) return r;\r
+    r = compile_tree(NODE_QUANT_BODY(qn), reg, env);\r
   }\r
-  else if (!infinite && qn->greedy &&\r
-           (qn->upper == 1 || (tlen + SIZE_OP_PUSH) * qn->upper\r
-                                  <= QUANTIFIER_EXPAND_LIMIT_SIZE)) {\r
+  else if (! infinite && qn->greedy &&\r
+           (qn->upper == 1 ||\r
+            int_multiply_cmp(tlen + SIZE_OP_PUSH, qn->upper,\r
+                             QUANTIFIER_EXPAND_LIMIT_SIZE) <= 0)) {\r
     int n = qn->upper - qn->lower;\r
 \r
-    r = compile_tree_n_times(qn->target, qn->lower, reg);\r
-    if (r) return r;\r
+    r = compile_tree_n_times(NODE_QUANT_BODY(qn), qn->lower, reg, env);\r
+    if (r != 0) return r;\r
 \r
     for (i = 0; i < n; i++) {\r
       r = add_opcode_rel_addr(reg, OP_PUSH,\r
-                          (n - i) * tlen + (n - i - 1) * SIZE_OP_PUSH);\r
-      if (r) return r;\r
-      r = compile_tree(qn->target, reg);\r
-      if (r) return r;\r
+                              (n - i) * tlen + (n - i - 1) * SIZE_OP_PUSH);\r
+      if (r != 0) return r;\r
+      r = compile_tree(NODE_QUANT_BODY(qn), reg, env);\r
+      if (r != 0) return r;\r
     }\r
   }\r
-  else if (!qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */\r
+  else if (! qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */\r
     r = add_opcode_rel_addr(reg, OP_PUSH, SIZE_OP_JUMP);\r
-    if (r) return r;\r
+    if (r != 0) return r;\r
     r = add_opcode_rel_addr(reg, OP_JUMP, tlen);\r
-    if (r) return r;\r
-    r = compile_tree(qn->target, reg);\r
+    if (r != 0) return r;\r
+    r = compile_tree(NODE_QUANT_BODY(qn), reg, env);\r
   }\r
   else {\r
-    r = compile_range_repeat_node(qn, mod_tlen, empty_info, reg);\r
+    r = compile_range_repeat_node(qn, mod_tlen, empty_info, reg, env);\r
   }\r
   return r;\r
 }\r
-#endif /* USE_COMBINATION_EXPLOSION_CHECK */\r
 \r
 static int\r
-compile_length_option_node(EncloseNode* node, regex_t* reg)\r
+compile_length_option_node(EnclosureNode* node, regex_t* reg)\r
 {\r
   int tlen;\r
   OnigOptionType prev = reg->options;\r
 \r
-  reg->options = node->option;\r
-  tlen = compile_length_tree(node->target, reg);\r
+  reg->options = node->o.options;\r
+  tlen = compile_length_tree(NODE_ENCLOSURE_BODY(node), reg);\r
   reg->options = prev;\r
 \r
-  if (tlen < 0) return tlen;\r
-\r
-  if (IS_DYNAMIC_OPTION(prev ^ node->option)) {\r
-    return SIZE_OP_SET_OPTION_PUSH + SIZE_OP_SET_OPTION + SIZE_OP_FAIL\r
-           + tlen + SIZE_OP_SET_OPTION;\r
-  }\r
-  else\r
-    return tlen;\r
+  return tlen;\r
 }\r
 \r
 static int\r
-compile_option_node(EncloseNode* node, regex_t* reg)\r
+compile_option_node(EnclosureNode* node, regex_t* reg, ScanEnv* env)\r
 {\r
   int r;\r
   OnigOptionType prev = reg->options;\r
 \r
-  if (IS_DYNAMIC_OPTION(prev ^ node->option)) {\r
-    r = add_opcode_option(reg, OP_SET_OPTION_PUSH, node->option);\r
-    if (r) return r;\r
-    r = add_opcode_option(reg, OP_SET_OPTION, prev);\r
-    if (r) return r;\r
-    r = add_opcode(reg, OP_FAIL);\r
-    if (r) return r;\r
-  }\r
-\r
-  reg->options = node->option;\r
-  r = compile_tree(node->target, reg);\r
+  reg->options = node->o.options;\r
+  r = compile_tree(NODE_ENCLOSURE_BODY(node), reg, env);\r
   reg->options = prev;\r
 \r
-  if (IS_DYNAMIC_OPTION(prev ^ node->option)) {\r
-    if (r) return r;\r
-    r = add_opcode_option(reg, OP_SET_OPTION, prev);\r
-  }\r
   return r;\r
 }\r
 \r
 static int\r
-compile_length_enclose_node(EncloseNode* node, regex_t* reg)\r
+compile_length_enclosure_node(EnclosureNode* node, regex_t* reg)\r
 {\r
   int len;\r
   int tlen;\r
-  QtfrNode* qn;\r
 \r
-  qn = NULL;\r
-\r
-  if (node->type == ENCLOSE_OPTION)\r
+  if (node->type == ENCLOSURE_OPTION)\r
     return compile_length_option_node(node, reg);\r
 \r
-  if (node->target) {\r
-    tlen = compile_length_tree(node->target, reg);\r
+  if (NODE_ENCLOSURE_BODY(node)) {\r
+    tlen = compile_length_tree(NODE_ENCLOSURE_BODY(node), reg);\r
     if (tlen < 0) return tlen;\r
   }\r
   else\r
     tlen = 0;\r
 \r
   switch (node->type) {\r
-  case ENCLOSE_MEMORY:\r
-#ifdef USE_SUBEXP_CALL\r
-    if (IS_ENCLOSE_CALLED(node)) {\r
+  case ENCLOSURE_MEMORY:\r
+#ifdef USE_CALL\r
+\r
+    if (node->m.regnum == 0 && NODE_IS_CALLED(node)) {\r
+      len = tlen + SIZE_OP_CALL + SIZE_OP_JUMP + SIZE_OP_RETURN;\r
+      return len;\r
+    }\r
+\r
+    if (NODE_IS_CALLED(node)) {\r
       len = SIZE_OP_MEMORY_START_PUSH + tlen\r
-         + SIZE_OP_CALL + SIZE_OP_JUMP + SIZE_OP_RETURN;\r
-      if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))\r
-       len += (IS_ENCLOSE_RECURSION(node)\r
-               ? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH);\r
+        + SIZE_OP_CALL + SIZE_OP_JUMP + SIZE_OP_RETURN;\r
+      if (MEM_STATUS_AT0(reg->bt_mem_end, node->m.regnum))\r
+        len += (NODE_IS_RECURSION(node)\r
+                ? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH);\r
       else\r
-       len += (IS_ENCLOSE_RECURSION(node)\r
-               ? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END);\r
+        len += (NODE_IS_RECURSION(node)\r
+                ? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END);\r
+    }\r
+    else if (NODE_IS_RECURSION(node)) {\r
+      len = SIZE_OP_MEMORY_START_PUSH;\r
+      len += tlen + (MEM_STATUS_AT0(reg->bt_mem_end, node->m.regnum)\r
+                     ? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_REC);\r
     }\r
     else\r
 #endif\r
     {\r
-      if (BIT_STATUS_AT(reg->bt_mem_start, node->regnum))\r
-       len = SIZE_OP_MEMORY_START_PUSH;\r
+      if (MEM_STATUS_AT0(reg->bt_mem_start, node->m.regnum))\r
+        len = SIZE_OP_MEMORY_START_PUSH;\r
       else\r
-       len = SIZE_OP_MEMORY_START;\r
+        len = SIZE_OP_MEMORY_START;\r
 \r
-      len += tlen + (BIT_STATUS_AT(reg->bt_mem_end, node->regnum)\r
-                    ? SIZE_OP_MEMORY_END_PUSH : SIZE_OP_MEMORY_END);\r
+      len += tlen + (MEM_STATUS_AT0(reg->bt_mem_end, node->m.regnum)\r
+                     ? SIZE_OP_MEMORY_END_PUSH : SIZE_OP_MEMORY_END);\r
     }\r
     break;\r
 \r
-  case ENCLOSE_STOP_BACKTRACK:\r
-    if (IS_ENCLOSE_STOP_BT_SIMPLE_REPEAT(node)) {\r
-      if (node->target == NULL) {\r
-        CHECK_NULL_RETURN_MEMERR(node->target);\r
-      }\r
-      qn = NQTFR(node->target);\r
-      tlen = compile_length_tree(qn->target, reg);\r
+  case ENCLOSURE_STOP_BACKTRACK:\r
+    if (NODE_IS_STOP_BT_SIMPLE_REPEAT(node)) {\r
+      QuantNode* qn = QUANT_(NODE_ENCLOSURE_BODY(node));\r
+      tlen = compile_length_tree(NODE_QUANT_BODY(qn), reg);\r
       if (tlen < 0) return tlen;\r
 \r
       len = tlen * qn->lower\r
-         + SIZE_OP_PUSH + tlen + SIZE_OP_POP + SIZE_OP_JUMP;\r
+        + SIZE_OP_PUSH + tlen + SIZE_OP_POP_OUT + SIZE_OP_JUMP;\r
     }\r
     else {\r
-      len = SIZE_OP_PUSH_STOP_BT + tlen + SIZE_OP_POP_STOP_BT;\r
+      len = SIZE_OP_ATOMIC_START + tlen + SIZE_OP_ATOMIC_END;\r
     }\r
     break;\r
 \r
-  default:\r
-    return ONIGERR_TYPE_BUG;\r
-    break;\r
-  }\r
+  case ENCLOSURE_IF_ELSE:\r
+    {\r
+      Node* cond = NODE_ENCLOSURE_BODY(node);\r
+      Node* Then = node->te.Then;\r
+      Node* Else = node->te.Else;\r
 \r
-  return len;\r
-}\r
+      len = compile_length_tree(cond, reg);\r
+      if (len < 0) return len;\r
+      len += SIZE_OP_PUSH;\r
+      len += SIZE_OP_ATOMIC_START + SIZE_OP_ATOMIC_END;\r
+\r
+      if (IS_NOT_NULL(Then)) {\r
+        tlen = compile_length_tree(Then, reg);\r
+        if (tlen < 0) return tlen;\r
+        len += tlen;\r
+      }\r
+\r
+      if (IS_NOT_NULL(Else)) {\r
+        len += SIZE_OP_JUMP;\r
+        tlen = compile_length_tree(Else, reg);\r
+        if (tlen < 0) return tlen;\r
+        len += tlen;\r
+      }\r
+    }\r
+    break;\r
+\r
+  default:\r
+    return ONIGERR_TYPE_BUG;\r
+    break;\r
+  }\r
+\r
+  return len;\r
+}\r
 \r
 static int get_char_length_tree(Node* node, regex_t* reg, int* len);\r
 \r
 static int\r
-compile_enclose_node(EncloseNode* node, regex_t* reg)\r
+compile_enclosure_memory_node(EnclosureNode* node, regex_t* reg, ScanEnv* env)\r
 {\r
-  int r, len;\r
+  int r;\r
+  int len;\r
 \r
-  if (node->type == ENCLOSE_OPTION)\r
-    return compile_option_node(node, reg);\r
+#ifdef USE_CALL\r
+  if (node->m.regnum == 0 && NODE_IS_CALLED(node)) {\r
+    r = add_opcode(reg, OP_CALL);\r
+    if (r != 0) return r;\r
+    node->m.called_addr = BB_GET_OFFSET_POS(reg) + SIZE_ABSADDR + SIZE_OP_JUMP;\r
+    NODE_STATUS_ADD(node, ADDR_FIXED);\r
+    r = add_abs_addr(reg, (int )node->m.called_addr);\r
+    if (r != 0) return r;\r
+    len = compile_length_tree(NODE_ENCLOSURE_BODY(node), reg);\r
+    len += SIZE_OP_RETURN;\r
+    r = add_opcode_rel_addr(reg, OP_JUMP, len);\r
+    if (r != 0) return r;\r
+\r
+    r = compile_tree(NODE_ENCLOSURE_BODY(node), reg, env);\r
+    if (r != 0) return r;\r
+    r = add_opcode(reg, OP_RETURN);\r
+    return r;\r
+  }\r
 \r
-  switch (node->type) {\r
-  case ENCLOSE_MEMORY:\r
-#ifdef USE_SUBEXP_CALL\r
-    if (IS_ENCLOSE_CALLED(node)) {\r
-      r = add_opcode(reg, OP_CALL);\r
-      if (r) return r;\r
-      node->call_addr = BBUF_GET_OFFSET_POS(reg) + SIZE_ABSADDR + SIZE_OP_JUMP;\r
-      node->state |= NST_ADDR_FIXED;\r
-      r = add_abs_addr(reg, (int )node->call_addr);\r
-      if (r) return r;\r
-      len = compile_length_tree(node->target, reg);\r
-      len += (SIZE_OP_MEMORY_START_PUSH + SIZE_OP_RETURN);\r
-      if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))\r
-       len += (IS_ENCLOSE_RECURSION(node)\r
-               ? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH);\r
-      else\r
-       len += (IS_ENCLOSE_RECURSION(node)\r
-               ? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END);\r
+  if (NODE_IS_CALLED(node)) {\r
+    r = add_opcode(reg, OP_CALL);\r
+    if (r != 0) return r;\r
+    node->m.called_addr = BB_GET_OFFSET_POS(reg) + SIZE_ABSADDR + SIZE_OP_JUMP;\r
+    NODE_STATUS_ADD(node, ADDR_FIXED);\r
+    r = add_abs_addr(reg, (int )node->m.called_addr);\r
+    if (r != 0) return r;\r
+    len = compile_length_tree(NODE_ENCLOSURE_BODY(node), reg);\r
+    len += (SIZE_OP_MEMORY_START_PUSH + SIZE_OP_RETURN);\r
+    if (MEM_STATUS_AT0(reg->bt_mem_end, node->m.regnum))\r
+      len += (NODE_IS_RECURSION(node)\r
+              ? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH);\r
+    else\r
+      len += (NODE_IS_RECURSION(node)\r
+              ? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END);\r
 \r
-      r = add_opcode_rel_addr(reg, OP_JUMP, len);\r
-      if (r) return r;\r
-    }\r
+    r = add_opcode_rel_addr(reg, OP_JUMP, len);\r
+    if (r != 0) return r;\r
+  }\r
 #endif\r
-    if (BIT_STATUS_AT(reg->bt_mem_start, node->regnum))\r
-      r = add_opcode(reg, OP_MEMORY_START_PUSH);\r
-    else\r
-      r = add_opcode(reg, OP_MEMORY_START);\r
-    if (r) return r;\r
-    r = add_mem_num(reg, node->regnum);\r
-    if (r) return r;\r
-    r = compile_tree(node->target, reg);\r
-    if (r) return r;\r
-#ifdef USE_SUBEXP_CALL\r
-    if (IS_ENCLOSE_CALLED(node)) {\r
-      if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))\r
-       r = add_opcode(reg, (IS_ENCLOSE_RECURSION(node)\r
-                            ? OP_MEMORY_END_PUSH_REC : OP_MEMORY_END_PUSH));\r
-      else\r
-       r = add_opcode(reg, (IS_ENCLOSE_RECURSION(node)\r
-                            ? OP_MEMORY_END_REC : OP_MEMORY_END));\r
 \r
-      if (r) return r;\r
-      r = add_mem_num(reg, node->regnum);\r
-      if (r) return r;\r
-      r = add_opcode(reg, OP_RETURN);\r
-    }\r
-    else\r
+  if (MEM_STATUS_AT0(reg->bt_mem_start, node->m.regnum))\r
+    r = add_opcode(reg, OP_MEMORY_START_PUSH);\r
+  else\r
+    r = add_opcode(reg, OP_MEMORY_START);\r
+  if (r != 0) return r;\r
+  r = add_mem_num(reg, node->m.regnum);\r
+  if (r != 0) return r;\r
+  r = compile_tree(NODE_ENCLOSURE_BODY(node), reg, env);\r
+  if (r != 0) return r;\r
+\r
+#ifdef USE_CALL\r
+  if (MEM_STATUS_AT0(reg->bt_mem_end, node->m.regnum))\r
+    r = add_opcode(reg, (NODE_IS_RECURSION(node)\r
+                         ? OP_MEMORY_END_PUSH_REC : OP_MEMORY_END_PUSH));\r
+  else\r
+    r = add_opcode(reg, (NODE_IS_RECURSION(node)\r
+                         ? OP_MEMORY_END_REC : OP_MEMORY_END));\r
+  if (r != 0) return r;\r
+  r = add_mem_num(reg, node->m.regnum);\r
+  if (NODE_IS_CALLED(node)) {\r
+    if (r != 0) return r;\r
+    r = add_opcode(reg, OP_RETURN);\r
+  }\r
+#else\r
+  if (MEM_STATUS_AT0(reg->bt_mem_end, node->m.regnum))\r
+    r = add_opcode(reg, OP_MEMORY_END_PUSH);\r
+  else\r
+    r = add_opcode(reg, OP_MEMORY_END);\r
+  if (r != 0) return r;\r
+  r = add_mem_num(reg, node->m.regnum);\r
 #endif\r
-    {\r
-      if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))\r
-       r = add_opcode(reg, OP_MEMORY_END_PUSH);\r
-      else\r
-       r = add_opcode(reg, OP_MEMORY_END);\r
-      if (r) return r;\r
-      r = add_mem_num(reg, node->regnum);\r
-    }\r
+\r
+  return r;\r
+}\r
+\r
+static int\r
+compile_enclosure_node(EnclosureNode* node, regex_t* reg, ScanEnv* env)\r
+{\r
+  int r, len;\r
+\r
+  switch (node->type) {\r
+  case ENCLOSURE_MEMORY:\r
+    r = compile_enclosure_memory_node(node, reg, env);\r
+    break;\r
+\r
+  case ENCLOSURE_OPTION:\r
+    r = compile_option_node(node, reg, env);\r
     break;\r
 \r
-  case ENCLOSE_STOP_BACKTRACK:\r
-    if (IS_ENCLOSE_STOP_BT_SIMPLE_REPEAT(node)) {\r
-      QtfrNode* qn = NQTFR(node->target);\r
-      r = compile_tree_n_times(qn->target, qn->lower, reg);\r
-      if (r) return r;\r
+  case ENCLOSURE_STOP_BACKTRACK:\r
+    if (NODE_IS_STOP_BT_SIMPLE_REPEAT(node)) {\r
+      QuantNode* qn = QUANT_(NODE_ENCLOSURE_BODY(node));\r
+      r = compile_tree_n_times(NODE_QUANT_BODY(qn), qn->lower, reg, env);\r
+      if (r != 0) return r;\r
 \r
-      len = compile_length_tree(qn->target, reg);\r
+      len = compile_length_tree(NODE_QUANT_BODY(qn), reg);\r
       if (len < 0) return len;\r
 \r
-      r = add_opcode_rel_addr(reg, OP_PUSH, len + SIZE_OP_POP + SIZE_OP_JUMP);\r
-      if (r) return r;\r
-      r = compile_tree(qn->target, reg);\r
-      if (r) return r;\r
-      r = add_opcode(reg, OP_POP);\r
-      if (r) return r;\r
+      r = add_opcode_rel_addr(reg, OP_PUSH, len + SIZE_OP_POP_OUT + SIZE_OP_JUMP);\r
+      if (r != 0) return r;\r
+      r = compile_tree(NODE_QUANT_BODY(qn), reg, env);\r
+      if (r != 0) return r;\r
+      r = add_opcode(reg, OP_POP_OUT);\r
+      if (r != 0) return r;\r
       r = add_opcode_rel_addr(reg, OP_JUMP,\r
-        -((int )SIZE_OP_PUSH + len + (int )SIZE_OP_POP + (int )SIZE_OP_JUMP));\r
+           -((int )SIZE_OP_PUSH + len + (int )SIZE_OP_POP_OUT + (int )SIZE_OP_JUMP));\r
     }\r
     else {\r
-      r = add_opcode(reg, OP_PUSH_STOP_BT);\r
-      if (r) return r;\r
-      r = compile_tree(node->target, reg);\r
-      if (r) return r;\r
-      r = add_opcode(reg, OP_POP_STOP_BT);\r
+      r = add_opcode(reg, OP_ATOMIC_START);\r
+      if (r != 0) return r;\r
+      r = compile_tree(NODE_ENCLOSURE_BODY(node), reg, env);\r
+      if (r != 0) return r;\r
+      r = add_opcode(reg, OP_ATOMIC_END);\r
+    }\r
+    break;\r
+\r
+  case ENCLOSURE_IF_ELSE:\r
+    {\r
+      int cond_len, then_len, jump_len;\r
+      Node* cond = NODE_ENCLOSURE_BODY(node);\r
+      Node* Then = node->te.Then;\r
+      Node* Else = node->te.Else;\r
+\r
+      r = add_opcode(reg, OP_ATOMIC_START);\r
+      if (r != 0) return r;\r
+\r
+      cond_len = compile_length_tree(cond, reg);\r
+      if (cond_len < 0) return cond_len;\r
+      if (IS_NOT_NULL(Then)) {\r
+        then_len = compile_length_tree(Then, reg);\r
+        if (then_len < 0) return then_len;\r
+      }\r
+      else\r
+        then_len = 0;\r
+\r
+      jump_len = cond_len + then_len + SIZE_OP_ATOMIC_END;\r
+      if (IS_NOT_NULL(Else)) jump_len += SIZE_OP_JUMP;\r
+\r
+      r = add_opcode_rel_addr(reg, OP_PUSH, jump_len);\r
+      if (r != 0) return r;\r
+      r = compile_tree(cond, reg, env);\r
+      if (r != 0) return r;\r
+      r = add_opcode(reg, OP_ATOMIC_END);\r
+      if (r != 0) return r;\r
+\r
+      if (IS_NOT_NULL(Then)) {\r
+        r = compile_tree(Then, reg, env);\r
+        if (r != 0) return r;\r
+      }\r
+\r
+      if (IS_NOT_NULL(Else)) {\r
+        int else_len = compile_length_tree(Else, reg);\r
+        r = add_opcode_rel_addr(reg, OP_JUMP, else_len);\r
+        if (r != 0) return r;\r
+        r = compile_tree(Else, reg, env);\r
+      }\r
     }\r
     break;\r
 \r
@@ -1385,23 +1299,37 @@ compile_length_anchor_node(AnchorNode* node, regex_t* reg)
   int len;\r
   int tlen = 0;\r
 \r
-  if (node->target) {\r
-    tlen = compile_length_tree(node->target, reg);\r
+  if (IS_NOT_NULL(NODE_ANCHOR_BODY(node))) {\r
+    tlen = compile_length_tree(NODE_ANCHOR_BODY(node), reg);\r
     if (tlen < 0) return tlen;\r
   }\r
 \r
   switch (node->type) {\r
   case ANCHOR_PREC_READ:\r
-    len = SIZE_OP_PUSH_POS + tlen + SIZE_OP_POP_POS;\r
+    len = SIZE_OP_PREC_READ_START + tlen + SIZE_OP_PREC_READ_END;\r
     break;\r
   case ANCHOR_PREC_READ_NOT:\r
-    len = SIZE_OP_PUSH_POS_NOT + tlen + SIZE_OP_FAIL_POS;\r
+    len = SIZE_OP_PREC_READ_NOT_START + tlen + SIZE_OP_PREC_READ_NOT_END;\r
     break;\r
   case ANCHOR_LOOK_BEHIND:\r
     len = SIZE_OP_LOOK_BEHIND + tlen;\r
     break;\r
   case ANCHOR_LOOK_BEHIND_NOT:\r
-    len = SIZE_OP_PUSH_LOOK_BEHIND_NOT + tlen + SIZE_OP_FAIL_LOOK_BEHIND_NOT;\r
+    len = SIZE_OP_LOOK_BEHIND_NOT_START + tlen + SIZE_OP_LOOK_BEHIND_NOT_END;\r
+    break;\r
+\r
+  case ANCHOR_WORD_BOUNDARY:\r
+  case ANCHOR_NO_WORD_BOUNDARY:\r
+#ifdef USE_WORD_BEGIN_END\r
+  case ANCHOR_WORD_BEGIN:\r
+  case ANCHOR_WORD_END:\r
+#endif\r
+    len = SIZE_OP_WORD_BOUNDARY;\r
+    break;\r
+\r
+  case ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:\r
+  case ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:\r
+    len = SIZE_OPCODE;\r
     break;\r
 \r
   default:\r
@@ -1413,9 +1341,10 @@ compile_length_anchor_node(AnchorNode* node, regex_t* reg)
 }\r
 \r
 static int\r
-compile_anchor_node(AnchorNode* node, regex_t* reg)\r
+compile_anchor_node(AnchorNode* node, regex_t* reg, ScanEnv* env)\r
 {\r
   int r, len;\r
+  enum OpCode op;\r
 \r
   switch (node->type) {\r
   case ANCHOR_BEGIN_BUF:      r = add_opcode(reg, OP_BEGIN_BUF);      break;\r
@@ -1425,66 +1354,89 @@ compile_anchor_node(AnchorNode* node, regex_t* reg)
   case ANCHOR_SEMI_END_BUF:   r = add_opcode(reg, OP_SEMI_END_BUF);   break;\r
   case ANCHOR_BEGIN_POSITION: r = add_opcode(reg, OP_BEGIN_POSITION); break;\r
 \r
-  case ANCHOR_WORD_BOUND:     r = add_opcode(reg, OP_WORD_BOUND);     break;\r
-  case ANCHOR_NOT_WORD_BOUND: r = add_opcode(reg, OP_NOT_WORD_BOUND); break;\r
+  case ANCHOR_WORD_BOUNDARY:\r
+    op = OP_WORD_BOUNDARY;\r
+  word:\r
+    r = add_opcode(reg, op);\r
+    if (r != 0) return r;\r
+    r = add_mode(reg, (ModeType )node->ascii_mode);\r
+    break;\r
+\r
+  case ANCHOR_NO_WORD_BOUNDARY:\r
+    op = OP_NO_WORD_BOUNDARY; goto word;\r
+    break;\r
 #ifdef USE_WORD_BEGIN_END\r
-  case ANCHOR_WORD_BEGIN:     r = add_opcode(reg, OP_WORD_BEGIN);     break;\r
-  case ANCHOR_WORD_END:       r = add_opcode(reg, OP_WORD_END);       break;\r
+  case ANCHOR_WORD_BEGIN:\r
+    op = OP_WORD_BEGIN; goto word;\r
+    break;\r
+  case ANCHOR_WORD_END:\r
+    op = OP_WORD_END; goto word;\r
+    break;\r
 #endif\r
 \r
+  case ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:\r
+    r = add_opcode(reg, OP_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY);\r
+    break;\r
+\r
+  case ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:\r
+    r = add_opcode(reg, OP_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY);\r
+    break;\r
+\r
   case ANCHOR_PREC_READ:\r
-    r = add_opcode(reg, OP_PUSH_POS);\r
-    if (r) return r;\r
-    r = compile_tree(node->target, reg);\r
-    if (r) return r;\r
-    r = add_opcode(reg, OP_POP_POS);\r
+    r = add_opcode(reg, OP_PREC_READ_START);\r
+    if (r != 0) return r;\r
+    r = compile_tree(NODE_ANCHOR_BODY(node), reg, env);\r
+    if (r != 0) return r;\r
+    r = add_opcode(reg, OP_PREC_READ_END);\r
     break;\r
 \r
   case ANCHOR_PREC_READ_NOT:\r
-    len = compile_length_tree(node->target, reg);\r
+    len = compile_length_tree(NODE_ANCHOR_BODY(node), reg);\r
     if (len < 0) return len;\r
-    r = add_opcode_rel_addr(reg, OP_PUSH_POS_NOT, len + SIZE_OP_FAIL_POS);\r
-    if (r) return r;\r
-    r = compile_tree(node->target, reg);\r
-    if (r) return r;\r
-    r = add_opcode(reg, OP_FAIL_POS);\r
+    r = add_opcode_rel_addr(reg, OP_PREC_READ_NOT_START, len + SIZE_OP_PREC_READ_NOT_END);\r
+    if (r != 0) return r;\r
+    r = compile_tree(NODE_ANCHOR_BODY(node), reg, env);\r
+    if (r != 0) return r;\r
+    r = add_opcode(reg, OP_PREC_READ_NOT_END);\r
     break;\r
 \r
   case ANCHOR_LOOK_BEHIND:\r
     {\r
       int n;\r
       r = add_opcode(reg, OP_LOOK_BEHIND);\r
-      if (r) return r;\r
+      if (r != 0) return r;\r
       if (node->char_len < 0) {\r
-       r = get_char_length_tree(node->target, reg, &n);\r
-       if (r) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;\r
+        r = get_char_length_tree(NODE_ANCHOR_BODY(node), reg, &n);\r
+        if (r != 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;\r
       }\r
       else\r
-       n = node->char_len;\r
+        n = node->char_len;\r
+\r
       r = add_length(reg, n);\r
-      if (r) return r;\r
-      r = compile_tree(node->target, reg);\r
+      if (r != 0) return r;\r
+      r = compile_tree(NODE_ANCHOR_BODY(node), reg, env);\r
     }\r
     break;\r
 \r
   case ANCHOR_LOOK_BEHIND_NOT:\r
     {\r
       int n;\r
-      len = compile_length_tree(node->target, reg);\r
-      r = add_opcode_rel_addr(reg, OP_PUSH_LOOK_BEHIND_NOT,\r
-                          len + SIZE_OP_FAIL_LOOK_BEHIND_NOT);\r
-      if (r) return r;\r
+\r
+      len = compile_length_tree(NODE_ANCHOR_BODY(node), reg);\r
+      r = add_opcode_rel_addr(reg, OP_LOOK_BEHIND_NOT_START,\r
+                              len + SIZE_OP_LOOK_BEHIND_NOT_END);\r
+      if (r != 0) return r;\r
       if (node->char_len < 0) {\r
-       r = get_char_length_tree(node->target, reg, &n);\r
-       if (r) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;\r
+        r = get_char_length_tree(NODE_ANCHOR_BODY(node), reg, &n);\r
+        if (r != 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;\r
       }\r
       else\r
-       n = node->char_len;\r
+        n = node->char_len;\r
       r = add_length(reg, n);\r
-      if (r) return r;\r
-      r = compile_tree(node->target, reg);\r
-      if (r) return r;\r
-      r = add_opcode(reg, OP_FAIL_LOOK_BEHIND_NOT);\r
+      if (r != 0) return r;\r
+      r = compile_tree(NODE_ANCHOR_BODY(node), reg, env);\r
+      if (r != 0) return r;\r
+      r = add_opcode(reg, OP_LOOK_BEHIND_NOT_END);\r
     }\r
     break;\r
 \r
@@ -1496,89 +1448,204 @@ compile_anchor_node(AnchorNode* node, regex_t* reg)
   return r;\r
 }\r
 \r
+static int\r
+compile_gimmick_node(GimmickNode* node, regex_t* reg)\r
+{\r
+  int r;\r
+\r
+  switch (node->type) {\r
+  case GIMMICK_FAIL:\r
+    r = add_opcode(reg, OP_FAIL);\r
+    break;\r
+\r
+  case GIMMICK_KEEP:\r
+    r = add_opcode(reg, OP_PUSH_SAVE_VAL);\r
+    if (r != 0) return r;\r
+    r = add_save_type(reg, SAVE_KEEP);\r
+    if (r != 0) return r;\r
+    r = add_mem_num(reg, node->id);\r
+    break;\r
+\r
+  case GIMMICK_SAVE:\r
+    r = add_opcode(reg, OP_PUSH_SAVE_VAL);\r
+    if (r != 0) return r;\r
+    r = add_save_type(reg, node->detail_type);\r
+    if (r != 0) return r;\r
+    r = add_mem_num(reg, node->id);\r
+    break;\r
+\r
+  case GIMMICK_UPDATE_VAR:\r
+    r = add_opcode(reg, OP_UPDATE_VAR);\r
+    if (r != 0) return r;\r
+    r = add_update_var_type(reg, node->detail_type);\r
+    if (r != 0) return r;\r
+    r = add_mem_num(reg, node->id);\r
+    break;\r
+\r
+#ifdef USE_CALLOUT\r
+  case GIMMICK_CALLOUT:\r
+    switch (node->detail_type) {\r
+    case ONIG_CALLOUT_OF_CONTENTS:\r
+    case ONIG_CALLOUT_OF_NAME:\r
+      {\r
+        r = add_opcode(reg, (node->detail_type == ONIG_CALLOUT_OF_CONTENTS) ?\r
+                                  OP_CALLOUT_CONTENTS : OP_CALLOUT_NAME);\r
+        if (r != 0) return r;\r
+        if (node->detail_type == ONIG_CALLOUT_OF_NAME) {\r
+          r = add_mem_num(reg, node->id);\r
+          if (r != 0) return r;\r
+        }\r
+        r = add_mem_num(reg, node->num);\r
+        if (r != 0) return r;\r
+      }\r
+      break;\r
+\r
+    default:\r
+      r = ONIGERR_TYPE_BUG;\r
+      break;\r
+    }\r
+#endif\r
+  }\r
+\r
+  return r;\r
+}\r
+\r
+static int\r
+compile_length_gimmick_node(GimmickNode* node, regex_t* reg)\r
+{\r
+  int len;\r
+\r
+  switch (node->type) {\r
+  case GIMMICK_FAIL:\r
+    len = SIZE_OP_FAIL;\r
+    break;\r
+\r
+  case GIMMICK_KEEP:\r
+  case GIMMICK_SAVE:\r
+    len = SIZE_OP_PUSH_SAVE_VAL;\r
+    break;\r
+\r
+  case GIMMICK_UPDATE_VAR:\r
+    len = SIZE_OP_UPDATE_VAR;\r
+    break;\r
+\r
+#ifdef USE_CALLOUT\r
+  case GIMMICK_CALLOUT:\r
+    switch (node->detail_type) {\r
+    case ONIG_CALLOUT_OF_CONTENTS:\r
+      len = SIZE_OP_CALLOUT_CONTENTS;\r
+      break;\r
+    case ONIG_CALLOUT_OF_NAME:\r
+      len = SIZE_OP_CALLOUT_NAME;\r
+      break;\r
+\r
+    default:\r
+      len = ONIGERR_TYPE_BUG;\r
+      break;\r
+    }\r
+    break;\r
+#endif\r
+  }\r
+\r
+  return len;\r
+}\r
+\r
 static int\r
 compile_length_tree(Node* node, regex_t* reg)\r
 {\r
-  int len, type, r;\r
+  int len, r;\r
 \r
-  type = NTYPE(node);\r
-  switch (type) {\r
-  case NT_LIST:\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_LIST:\r
     len = 0;\r
     do {\r
-      r = compile_length_tree(NCAR(node), reg);\r
+      r = compile_length_tree(NODE_CAR(node), reg);\r
       if (r < 0) return r;\r
       len += r;\r
-    } while (IS_NOT_NULL(node = NCDR(node)));\r
+    } while (IS_NOT_NULL(node = NODE_CDR(node)));\r
     r = len;\r
     break;\r
 \r
-  case NT_ALT:\r
+  case NODE_ALT:\r
     {\r
       int n;\r
 \r
       n = r = 0;\r
       do {\r
-       r += compile_length_tree(NCAR(node), reg);\r
-       n++;\r
-      } while (IS_NOT_NULL(node = NCDR(node)));\r
+        r += compile_length_tree(NODE_CAR(node), reg);\r
+        n++;\r
+      } while (IS_NOT_NULL(node = NODE_CDR(node)));\r
       r += (SIZE_OP_PUSH + SIZE_OP_JUMP) * (n - 1);\r
     }\r
     break;\r
 \r
-  case NT_STR:\r
-    if (NSTRING_IS_RAW(node))\r
-      r = compile_length_string_raw_node(NSTR(node), reg);\r
+  case NODE_STRING:\r
+    if (NODE_STRING_IS_RAW(node))\r
+      r = compile_length_string_raw_node(STR_(node), reg);\r
     else\r
       r = compile_length_string_node(node, reg);\r
     break;\r
 \r
-  case NT_CCLASS:\r
-    r = compile_length_cclass_node(NCCLASS(node), reg);\r
+  case NODE_CCLASS:\r
+    r = compile_length_cclass_node(CCLASS_(node), reg);\r
     break;\r
 \r
-  case NT_CTYPE:\r
-  case NT_CANY:\r
+  case NODE_CTYPE:\r
     r = SIZE_OPCODE;\r
     break;\r
 \r
-  case NT_BREF:\r
+  case NODE_BACKREF:\r
     {\r
-      BRefNode* br = NBREF(node);\r
+      BackRefNode* br = BACKREF_(node);\r
 \r
+      if (NODE_IS_CHECKER(node)) {\r
 #ifdef USE_BACKREF_WITH_LEVEL\r
-      if (IS_BACKREF_NEST_LEVEL(br)) {\r
-        r = SIZE_OPCODE + SIZE_OPTION + SIZE_LENGTH +\r
-            SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);\r
-      }\r
-      else\r
+        if (NODE_IS_NEST_LEVEL(node)) {\r
+          r = SIZE_OPCODE + SIZE_LENGTH + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);\r
+        }\r
+        else\r
 #endif\r
-      if (br->back_num == 1) {\r
-       r = ((!IS_IGNORECASE(reg->options) && br->back_static[0] <= 2)\r
-            ? SIZE_OPCODE : (SIZE_OPCODE + SIZE_MEMNUM));\r
+          r = SIZE_OPCODE + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);\r
       }\r
       else {\r
-       r = SIZE_OPCODE + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);\r
+#ifdef USE_BACKREF_WITH_LEVEL\r
+        if (NODE_IS_NEST_LEVEL(node)) {\r
+          r = SIZE_OPCODE + SIZE_OPTION + SIZE_LENGTH +\r
+            SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);\r
+        }\r
+        else\r
+#endif\r
+        if (br->back_num == 1) {\r
+          r = ((!IS_IGNORECASE(reg->options) && br->back_static[0] <= 2)\r
+               ? SIZE_OPCODE : (SIZE_OPCODE + SIZE_MEMNUM));\r
+        }\r
+        else {\r
+          r = SIZE_OPCODE + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);\r
+        }\r
       }\r
     }\r
     break;\r
 \r
-#ifdef USE_SUBEXP_CALL\r
-  case NT_CALL:\r
+#ifdef USE_CALL\r
+  case NODE_CALL:\r
     r = SIZE_OP_CALL;\r
     break;\r
 #endif\r
 \r
-  case NT_QTFR:\r
-    r = compile_length_quantifier_node(NQTFR(node), reg);\r
+  case NODE_QUANT:\r
+    r = compile_length_quantifier_node(QUANT_(node), reg);\r
+    break;\r
+\r
+  case NODE_ENCLOSURE:\r
+    r = compile_length_enclosure_node(ENCLOSURE_(node), reg);\r
     break;\r
 \r
-  case NT_ENCLOSE:\r
-    r = compile_length_enclose_node(NENCLOSE(node), reg);\r
+  case NODE_ANCHOR:\r
+    r = compile_length_anchor_node(ANCHOR_(node), reg);\r
     break;\r
 \r
-  case NT_ANCHOR:\r
-    r = compile_length_anchor_node(NANCHOR(node), reg);\r
+  case NODE_GIMMICK:\r
+    r = compile_length_gimmick_node(GIMMICK_(node), reg);\r
     break;\r
 \r
   default:\r
@@ -1590,165 +1657,191 @@ compile_length_tree(Node* node, regex_t* reg)
 }\r
 \r
 static int\r
-compile_tree(Node* node, regex_t* reg)\r
+compile_tree(Node* node, regex_t* reg, ScanEnv* env)\r
 {\r
-  int n, type, len, pos, r = 0;\r
+  int n, len, pos, r = 0;\r
 \r
-  type = NTYPE(node);\r
-  switch (type) {\r
-  case NT_LIST:\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_LIST:\r
     do {\r
-      r = compile_tree(NCAR(node), reg);\r
-    } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
+      r = compile_tree(NODE_CAR(node), reg, env);\r
+    } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));\r
     break;\r
 \r
-  case NT_ALT:\r
+  case NODE_ALT:\r
     {\r
       Node* x = node;\r
       len = 0;\r
       do {\r
-       len += compile_length_tree(NCAR(x), reg);\r
-       if (NCDR(x) != NULL) {\r
-         len += SIZE_OP_PUSH + SIZE_OP_JUMP;\r
-       }\r
-      } while (IS_NOT_NULL(x = NCDR(x)));\r
+        len += compile_length_tree(NODE_CAR(x), reg);\r
+        if (IS_NOT_NULL(NODE_CDR(x))) {\r
+          len += SIZE_OP_PUSH + SIZE_OP_JUMP;\r
+        }\r
+      } while (IS_NOT_NULL(x = NODE_CDR(x)));\r
       pos = reg->used + len;  /* goal position */\r
 \r
       do {\r
-       len = compile_length_tree(NCAR(node), reg);\r
-       if (IS_NOT_NULL(NCDR(node))) {\r
-         r = add_opcode_rel_addr(reg, OP_PUSH, len + SIZE_OP_JUMP);\r
-         if (r) break;\r
-       }\r
-       r = compile_tree(NCAR(node), reg);\r
-       if (r) break;\r
-       if (IS_NOT_NULL(NCDR(node))) {\r
-         len = pos - (reg->used + SIZE_OP_JUMP);\r
-         r = add_opcode_rel_addr(reg, OP_JUMP, len);\r
-         if (r) break;\r
-       }\r
-      } while (IS_NOT_NULL(node = NCDR(node)));\r
-    }\r
-    break;\r
-\r
-  case NT_STR:\r
-    if (NSTRING_IS_RAW(node))\r
-      r = compile_string_raw_node(NSTR(node), reg);\r
+        len = compile_length_tree(NODE_CAR(node), reg);\r
+        if (IS_NOT_NULL(NODE_CDR(node))) {\r
+          enum OpCode push = NODE_IS_SUPER(node) ? OP_PUSH_SUPER : OP_PUSH;\r
+          r = add_opcode_rel_addr(reg, push, len + SIZE_OP_JUMP);\r
+          if (r != 0) break;\r
+        }\r
+        r = compile_tree(NODE_CAR(node), reg, env);\r
+        if (r != 0) break;\r
+        if (IS_NOT_NULL(NODE_CDR(node))) {\r
+          len = pos - (reg->used + SIZE_OP_JUMP);\r
+          r = add_opcode_rel_addr(reg, OP_JUMP, len);\r
+          if (r != 0) break;\r
+        }\r
+      } while (IS_NOT_NULL(node = NODE_CDR(node)));\r
+    }\r
+    break;\r
+\r
+  case NODE_STRING:\r
+    if (NODE_STRING_IS_RAW(node))\r
+      r = compile_string_raw_node(STR_(node), reg);\r
     else\r
       r = compile_string_node(node, reg);\r
     break;\r
 \r
-  case NT_CCLASS:\r
-    r = compile_cclass_node(NCCLASS(node), reg);\r
+  case NODE_CCLASS:\r
+    r = compile_cclass_node(CCLASS_(node), reg);\r
     break;\r
 \r
-  case NT_CTYPE:\r
+  case NODE_CTYPE:\r
     {\r
       int op;\r
 \r
-      switch (NCTYPE(node)->ctype) {\r
+      switch (CTYPE_(node)->ctype) {\r
+      case CTYPE_ANYCHAR:\r
+        if (IS_MULTILINE(CTYPE_OPTION(node, reg)))\r
+          r = add_opcode(reg, OP_ANYCHAR_ML);\r
+        else\r
+          r = add_opcode(reg, OP_ANYCHAR);\r
+        break;\r
+\r
       case ONIGENC_CTYPE_WORD:\r
-       if (NCTYPE(node)->not != 0)  op = OP_NOT_WORD;\r
-       else                         op = OP_WORD;\r
-       break;\r
+        if (CTYPE_(node)->ascii_mode == 0) {\r
+          op = CTYPE_(node)->not != 0 ? OP_NO_WORD : OP_WORD;\r
+        }\r
+        else {\r
+          op = CTYPE_(node)->not != 0 ? OP_NO_WORD_ASCII : OP_WORD_ASCII;\r
+        }\r
+        r = add_opcode(reg, op);\r
+        break;\r
+\r
       default:\r
-       return ONIGERR_TYPE_BUG;\r
-       break;\r
+        return ONIGERR_TYPE_BUG;\r
+        break;\r
       }\r
-      r = add_opcode(reg, op);\r
     }\r
     break;\r
 \r
-  case NT_CANY:\r
-    if (IS_MULTILINE(reg->options))\r
-      r = add_opcode(reg, OP_ANYCHAR_ML);\r
-    else\r
-      r = add_opcode(reg, OP_ANYCHAR);\r
-    break;\r
-\r
-  case NT_BREF:\r
+  case NODE_BACKREF:\r
     {\r
-      BRefNode* br = NBREF(node);\r
+      BackRefNode* br = BACKREF_(node);\r
 \r
+      if (NODE_IS_CHECKER(node)) {\r
 #ifdef USE_BACKREF_WITH_LEVEL\r
-      if (IS_BACKREF_NEST_LEVEL(br)) {\r
-       r = add_opcode(reg, OP_BACKREF_WITH_LEVEL);\r
-       if (r) return r;\r
-       r = add_option(reg, (reg->options & ONIG_OPTION_IGNORECASE));\r
-       if (r) return r;\r
-       r = add_length(reg, br->nest_level);\r
-       if (r) return r;\r
-\r
-       goto add_bacref_mems;\r
-      }\r
-      else\r
+        if (NODE_IS_NEST_LEVEL(node)) {\r
+          r = add_opcode(reg, OP_BACKREF_CHECK_WITH_LEVEL);\r
+          if (r != 0) return r;\r
+          r = add_length(reg, br->nest_level);\r
+          if (r != 0) return r;\r
+        }\r
+        else\r
 #endif\r
-      if (br->back_num == 1) {\r
-       n = br->back_static[0];\r
-       if (IS_IGNORECASE(reg->options)) {\r
-         r = add_opcode(reg, OP_BACKREFN_IC);\r
-         if (r) return r;\r
-         r = add_mem_num(reg, n);\r
-       }\r
-       else {\r
-         switch (n) {\r
-         case 1:  r = add_opcode(reg, OP_BACKREF1); break;\r
-         case 2:  r = add_opcode(reg, OP_BACKREF2); break;\r
-         default:\r
-           r = add_opcode(reg, OP_BACKREFN);\r
-           if (r) return r;\r
-           r = add_mem_num(reg, n);\r
-           break;\r
-         }\r
-       }\r
+          {\r
+            r = add_opcode(reg, OP_BACKREF_CHECK);\r
+            if (r != 0) return r;\r
+          }\r
+\r
+        goto add_bacref_mems;\r
       }\r
       else {\r
-       int i;\r
-       int* p;\r
-\r
-        if (IS_IGNORECASE(reg->options)) {\r
-          r = add_opcode(reg, OP_BACKREF_MULTI_IC);\r
+#ifdef USE_BACKREF_WITH_LEVEL\r
+        if (NODE_IS_NEST_LEVEL(node)) {\r
+          r = add_opcode(reg, OP_BACKREF_WITH_LEVEL);\r
+          if (r != 0) return r;\r
+          r = add_option(reg, (reg->options & ONIG_OPTION_IGNORECASE));\r
+          if (r != 0) return r;\r
+          r = add_length(reg, br->nest_level);\r
+          if (r != 0) return r;\r
+\r
+          goto add_bacref_mems;\r
         }\r
-        else {\r
-          r = add_opcode(reg, OP_BACKREF_MULTI);\r
+        else\r
+#endif\r
+        if (br->back_num == 1) {\r
+          n = br->back_static[0];\r
+          if (IS_IGNORECASE(reg->options)) {\r
+            r = add_opcode(reg, OP_BACKREF_N_IC);\r
+            if (r != 0) return r;\r
+            r = add_mem_num(reg, n);\r
+          }\r
+          else {\r
+            switch (n) {\r
+            case 1:  r = add_opcode(reg, OP_BACKREF1); break;\r
+            case 2:  r = add_opcode(reg, OP_BACKREF2); break;\r
+            default:\r
+              r = add_opcode(reg, OP_BACKREF_N);\r
+              if (r != 0) return r;\r
+              r = add_mem_num(reg, n);\r
+              break;\r
+            }\r
+          }\r
         }\r
-       if (r) return r;\r
+        else {\r
+          int i;\r
+          int* p;\r
 \r
-#ifdef USE_BACKREF_WITH_LEVEL\r
-      add_bacref_mems:\r
-#endif\r
-       r = add_length(reg, br->back_num);\r
-       if (r) return r;\r
-       p = BACKREFS_P(br);\r
-       for (i = br->back_num - 1; i >= 0; i--) {\r
-         r = add_mem_num(reg, p[i]);\r
-         if (r) return r;\r
-       }\r
+          if (IS_IGNORECASE(reg->options)) {\r
+            r = add_opcode(reg, OP_BACKREF_MULTI_IC);\r
+          }\r
+          else {\r
+            r = add_opcode(reg, OP_BACKREF_MULTI);\r
+          }\r
+          if (r != 0) return r;\r
+\r
+        add_bacref_mems:\r
+          r = add_length(reg, br->back_num);\r
+          if (r != 0) return r;\r
+          p = BACKREFS_P(br);\r
+          for (i = br->back_num - 1; i >= 0; i--) {\r
+            r = add_mem_num(reg, p[i]);\r
+            if (r != 0) return r;\r
+          }\r
+        }\r
       }\r
     }\r
     break;\r
 \r
-#ifdef USE_SUBEXP_CALL\r
-  case NT_CALL:\r
-    r = compile_call(NCALL(node), reg);\r
+#ifdef USE_CALL\r
+  case NODE_CALL:\r
+    r = compile_call(CALL_(node), reg, env);\r
     break;\r
 #endif\r
 \r
-  case NT_QTFR:\r
-    r = compile_quantifier_node(NQTFR(node), reg);\r
+  case NODE_QUANT:\r
+    r = compile_quantifier_node(QUANT_(node), reg, env);\r
     break;\r
 \r
-  case NT_ENCLOSE:\r
-    r = compile_enclose_node(NENCLOSE(node), reg);\r
+  case NODE_ENCLOSURE:\r
+    r = compile_enclosure_node(ENCLOSURE_(node), reg, env);\r
     break;\r
 \r
-  case NT_ANCHOR:\r
-    r = compile_anchor_node(NANCHOR(node), reg);\r
+  case NODE_ANCHOR:\r
+    r = compile_anchor_node(ANCHOR_(node), reg, env);\r
+    break;\r
+\r
+  case NODE_GIMMICK:\r
+    r = compile_gimmick_node(GIMMICK_(node), reg);\r
     break;\r
 \r
   default:\r
 #ifdef ONIG_DEBUG\r
-    fprintf(stderr, "compile_tree: undefined node type %d\n", NTYPE(node));\r
+    fprintf(stderr, "compile_tree: undefined node type %d\n", NODE_TYPE(node));\r
 #endif\r
     break;\r
   }\r
@@ -1756,55 +1849,70 @@ compile_tree(Node* node, regex_t* reg)
   return r;\r
 }\r
 \r
-#ifdef USE_NAMED_GROUP\r
-\r
 static int\r
 noname_disable_map(Node** plink, GroupNumRemap* map, int* counter)\r
 {\r
   int r = 0;\r
   Node* node = *plink;\r
 \r
-  switch (NTYPE(node)) {\r
-  case NT_LIST:\r
-  case NT_ALT:\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_LIST:\r
+  case NODE_ALT:\r
     do {\r
-      r = noname_disable_map(&(NCAR(node)), map, counter);\r
-    } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
+      r = noname_disable_map(&(NODE_CAR(node)), map, counter);\r
+    } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));\r
     break;\r
 \r
-  case NT_QTFR:\r
+  case NODE_QUANT:\r
     {\r
-      Node** ptarget = &(NQTFR(node)->target);\r
+      Node** ptarget = &(NODE_BODY(node));\r
       Node*  old = *ptarget;\r
       r = noname_disable_map(ptarget, map, counter);\r
-      if (*ptarget != old && NTYPE(*ptarget) == NT_QTFR) {\r
-       onig_reduce_nested_quantifier(node, *ptarget);\r
+      if (*ptarget != old && NODE_TYPE(*ptarget) == NODE_QUANT) {\r
+        onig_reduce_nested_quantifier(node, *ptarget);\r
       }\r
     }\r
     break;\r
 \r
-  case NT_ENCLOSE:\r
+  case NODE_ENCLOSURE:\r
     {\r
-      EncloseNode* en = NENCLOSE(node);\r
-      if (en->type == ENCLOSE_MEMORY) {\r
-       if (IS_ENCLOSE_NAMED_GROUP(en)) {\r
-         (*counter)++;\r
-         map[en->regnum].new_val = *counter;\r
-         en->regnum = *counter;\r
-         r = noname_disable_map(&(en->target), map, counter);\r
-       }\r
-       else {\r
-         *plink = en->target;\r
-         en->target = NULL_NODE;\r
-         onig_node_free(node);\r
-         r = noname_disable_map(plink, map, counter);\r
-       }\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+      if (en->type == ENCLOSURE_MEMORY) {\r
+        if (NODE_IS_NAMED_GROUP(node)) {\r
+          (*counter)++;\r
+          map[en->m.regnum].new_val = *counter;\r
+          en->m.regnum = *counter;\r
+          r = noname_disable_map(&(NODE_BODY(node)), map, counter);\r
+        }\r
+        else {\r
+          *plink = NODE_BODY(node);\r
+          NODE_BODY(node) = NULL_NODE;\r
+          onig_node_free(node);\r
+          r = noname_disable_map(plink, map, counter);\r
+        }\r
+      }\r
+      else if (en->type == ENCLOSURE_IF_ELSE) {\r
+        r = noname_disable_map(&(NODE_ENCLOSURE_BODY(en)), map, counter);\r
+        if (r != 0) return r;\r
+        if (IS_NOT_NULL(en->te.Then)) {\r
+          r = noname_disable_map(&(en->te.Then), map, counter);\r
+          if (r != 0) return r;\r
+        }\r
+        if (IS_NOT_NULL(en->te.Else)) {\r
+          r = noname_disable_map(&(en->te.Else), map, counter);\r
+          if (r != 0) return r;\r
+        }\r
       }\r
       else\r
-       r = noname_disable_map(&(en->target), map, counter);\r
+        r = noname_disable_map(&(NODE_BODY(node)), map, counter);\r
     }\r
     break;\r
 \r
+  case NODE_ANCHOR:\r
+    if (IS_NOT_NULL(NODE_BODY(node)))\r
+      r = noname_disable_map(&(NODE_BODY(node)), map, counter);\r
+    break;\r
+\r
   default:\r
     break;\r
   }\r
@@ -1817,9 +1925,9 @@ renumber_node_backref(Node* node, GroupNumRemap* map)
 {\r
   int i, pos, n, old_num;\r
   int *backs;\r
-  BRefNode* bn = NBREF(node);\r
+  BackRefNode* bn = BACKREF_(node);\r
 \r
-  if (! IS_BACKREF_NAME_REF(bn))\r
+  if (! NODE_IS_BY_NAME(node))\r
     return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED;\r
 \r
   old_num = bn->back_num;\r
@@ -1845,24 +1953,47 @@ renumber_by_map(Node* node, GroupNumRemap* map)
 {\r
   int r = 0;\r
 \r
-  switch (NTYPE(node)) {\r
-  case NT_LIST:\r
-  case NT_ALT:\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_LIST:\r
+  case NODE_ALT:\r
     do {\r
-      r = renumber_by_map(NCAR(node), map);\r
-    } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
+      r = renumber_by_map(NODE_CAR(node), map);\r
+    } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));\r
     break;\r
-  case NT_QTFR:\r
-    r = renumber_by_map(NQTFR(node)->target, map);\r
+\r
+  case NODE_QUANT:\r
+    r = renumber_by_map(NODE_BODY(node), map);\r
     break;\r
-  case NT_ENCLOSE:\r
-    r = renumber_by_map(NENCLOSE(node)->target, map);\r
+\r
+  case NODE_ENCLOSURE:\r
+    {\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+\r
+      r = renumber_by_map(NODE_BODY(node), map);\r
+      if (r != 0) return r;\r
+\r
+      if (en->type == ENCLOSURE_IF_ELSE) {\r
+        if (IS_NOT_NULL(en->te.Then)) {\r
+          r = renumber_by_map(en->te.Then, map);\r
+          if (r != 0) return r;\r
+        }\r
+        if (IS_NOT_NULL(en->te.Else)) {\r
+          r = renumber_by_map(en->te.Else, map);\r
+          if (r != 0) return r;\r
+        }\r
+      }\r
+    }\r
     break;\r
 \r
-  case NT_BREF:\r
+  case NODE_BACKREF:\r
     r = renumber_node_backref(node, map);\r
     break;\r
 \r
+  case NODE_ANCHOR:\r
+    if (IS_NOT_NULL(NODE_BODY(node)))\r
+      r = renumber_by_map(NODE_BODY(node), map);\r
+    break;\r
+\r
   default:\r
     break;\r
   }\r
@@ -1875,22 +2006,45 @@ numbered_ref_check(Node* node)
 {\r
   int r = 0;\r
 \r
-  switch (NTYPE(node)) {\r
-  case NT_LIST:\r
-  case NT_ALT:\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_LIST:\r
+  case NODE_ALT:\r
     do {\r
-      r = numbered_ref_check(NCAR(node));\r
-    } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
+      r = numbered_ref_check(NODE_CAR(node));\r
+    } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));\r
     break;\r
-  case NT_QTFR:\r
-    r = numbered_ref_check(NQTFR(node)->target);\r
+\r
+  case NODE_ANCHOR:\r
+    if (IS_NULL(NODE_BODY(node)))\r
+      break;\r
+    /* fall */\r
+  case NODE_QUANT:\r
+    r = numbered_ref_check(NODE_BODY(node));\r
     break;\r
-  case NT_ENCLOSE:\r
-    r = numbered_ref_check(NENCLOSE(node)->target);\r
+\r
+  case NODE_ENCLOSURE:\r
+    {\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+\r
+      r = numbered_ref_check(NODE_BODY(node));\r
+      if (r != 0) return r;\r
+\r
+      if (en->type == ENCLOSURE_IF_ELSE) {\r
+        if (IS_NOT_NULL(en->te.Then)) {\r
+          r = numbered_ref_check(en->te.Then);\r
+          if (r != 0) return r;\r
+        }\r
+        if (IS_NOT_NULL(en->te.Else)) {\r
+          r = numbered_ref_check(en->te.Else);\r
+          if (r != 0) return r;\r
+        }\r
+      }\r
+    }\r
+\r
     break;\r
 \r
-  case NT_BREF:\r
-    if (! IS_BACKREF_NAME_REF(NBREF(node)))\r
+  case NODE_BACKREF:\r
+    if (! NODE_IS_BY_NAME(node))\r
       return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED;\r
     break;\r
 \r
@@ -1905,8 +2059,8 @@ static int
 disable_noname_group_capture(Node** root, regex_t* reg, ScanEnv* env)\r
 {\r
   int r, i, pos, counter;\r
-  int Result;\r
-  BitStatusType loc;\r
+  int result;\r
+  MemStatusType loc;\r
   GroupNumRemap* map;\r
 \r
   map = (GroupNumRemap* )xmalloc(sizeof(GroupNumRemap) * (env->num_mem + 1));\r
@@ -1923,476 +2077,204 @@ disable_noname_group_capture(Node** root, regex_t* reg, ScanEnv* env)
 \r
   for (i = 1, pos = 1; i <= env->num_mem; i++) {\r
     if (map[i].new_val > 0) {\r
-      SCANENV_MEM_NODES(env)[pos] = SCANENV_MEM_NODES(env)[i];\r
+      SCANENV_MEMENV(env)[pos] = SCANENV_MEMENV(env)[i];\r
       pos++;\r
     }\r
   }\r
 \r
   loc = env->capture_history;\r
-  BIT_STATUS_CLEAR(env->capture_history);\r
+  MEM_STATUS_CLEAR(env->capture_history);\r
   for (i = 1; i <= ONIG_MAX_CAPTURE_HISTORY_GROUP; i++) {\r
-    if (BIT_STATUS_AT(loc, i)) {\r
-      BIT_STATUS_ON_AT_SIMPLE(env->capture_history, map[i].new_val);\r
+    if (MEM_STATUS_AT(loc, i)) {\r
+      MEM_STATUS_ON_SIMPLE(env->capture_history, map[i].new_val);\r
     }\r
   }\r
 \r
   env->num_mem = env->num_named;\r
   reg->num_mem = env->num_named;\r
-\r
-  Result = onig_renumber_name_table(reg, map);\r
+  result = onig_renumber_name_table(reg, map);\r
   xfree(map);\r
-  return Result;\r
+  return result;\r
 }\r
-#endif /* USE_NAMED_GROUP */\r
 \r
-#ifdef USE_SUBEXP_CALL\r
+#ifdef USE_CALL\r
 static int\r
-unset_addr_list_fix(UnsetAddrList* uslist, regex_t* reg)\r
+fix_unset_addr_list(UnsetAddrList* uslist, regex_t* reg)\r
 {\r
   int i, offset;\r
-  EncloseNode* en;\r
+  EnclosureNode* en;\r
   AbsAddrType addr;\r
 \r
   for (i = 0; i < uslist->num; i++) {\r
-    en = NENCLOSE(uslist->us[i].target);\r
-    if (! IS_ENCLOSE_ADDR_FIXED(en)) return ONIGERR_PARSER_BUG;\r
-    addr = en->call_addr;\r
+    if (! NODE_IS_ADDR_FIXED(uslist->us[i].target))\r
+      return ONIGERR_PARSER_BUG;\r
+\r
+    en = ENCLOSURE_(uslist->us[i].target);\r
+    addr   = en->m.called_addr;\r
     offset = uslist->us[i].offset;\r
 \r
-    BBUF_WRITE(reg, offset, &addr, SIZE_ABSADDR);\r
+    BB_WRITE(reg, offset, &addr, SIZE_ABSADDR);\r
   }\r
   return 0;\r
 }\r
 #endif\r
 \r
-#ifdef USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT\r
+\r
+#define GET_CHAR_LEN_VARLEN           -1\r
+#define GET_CHAR_LEN_TOP_ALT_VARLEN   -2\r
+\r
+/* fixed size pattern node only */\r
 static int\r
-quantifiers_memory_node_info(Node* node)\r
+get_char_length_tree1(Node* node, regex_t* reg, int* len, int level)\r
 {\r
+  int tlen;\r
   int r = 0;\r
 \r
-  switch (NTYPE(node)) {\r
-  case NT_LIST:\r
-  case NT_ALT:\r
-    {\r
-      int v;\r
-      do {\r
-       v = quantifiers_memory_node_info(NCAR(node));\r
-       if (v > r) r = v;\r
-      } while (v >= 0 && IS_NOT_NULL(node = NCDR(node)));\r
-    }\r
+  level++;\r
+  *len = 0;\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_LIST:\r
+    do {\r
+      r = get_char_length_tree1(NODE_CAR(node), reg, &tlen, level);\r
+      if (r == 0)\r
+        *len = distance_add(*len, tlen);\r
+    } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));\r
     break;\r
 \r
-#ifdef USE_SUBEXP_CALL\r
-  case NT_CALL:\r
-    if (IS_CALL_RECURSION(NCALL(node))) {\r
-      return NQ_TARGET_IS_EMPTY_REC; /* tiny version */\r
+  case NODE_ALT:\r
+    {\r
+      int tlen2;\r
+      int varlen = 0;\r
+\r
+      r = get_char_length_tree1(NODE_CAR(node), reg, &tlen, level);\r
+      while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node))) {\r
+        r = get_char_length_tree1(NODE_CAR(node), reg, &tlen2, level);\r
+        if (r == 0) {\r
+          if (tlen != tlen2)\r
+            varlen = 1;\r
+        }\r
+      }\r
+      if (r == 0) {\r
+        if (varlen != 0) {\r
+          if (level == 1)\r
+            r = GET_CHAR_LEN_TOP_ALT_VARLEN;\r
+          else\r
+            r = GET_CHAR_LEN_VARLEN;\r
+        }\r
+        else\r
+          *len = tlen;\r
+      }\r
     }\r
-    else\r
-      r = quantifiers_memory_node_info(NCALL(node)->target);\r
     break;\r
-#endif\r
 \r
-  case NT_QTFR:\r
+  case NODE_STRING:\r
     {\r
-      QtfrNode* qn = NQTFR(node);\r
-      if (qn->upper != 0) {\r
-       r = quantifiers_memory_node_info(qn->target);\r
+      StrNode* sn = STR_(node);\r
+      UChar *s = sn->s;\r
+\r
+      while (s < sn->end) {\r
+        s += enclen(reg->enc, s);\r
+        (*len)++;\r
       }\r
     }\r
     break;\r
 \r
-  case NT_ENCLOSE:\r
+  case NODE_QUANT:\r
     {\r
-      EncloseNode* en = NENCLOSE(node);\r
-      switch (en->type) {\r
-      case ENCLOSE_MEMORY:\r
-       return NQ_TARGET_IS_EMPTY_MEM;\r
-       break;\r
-\r
-      case ENCLOSE_OPTION:\r
-      case ENCLOSE_STOP_BACKTRACK:\r
-       r = quantifiers_memory_node_info(en->target);\r
-       break;\r
-      default:\r
-       break;\r
-      }\r
-    }\r
-    break;\r
-\r
-  case NT_BREF:\r
-  case NT_STR:\r
-  case NT_CTYPE:\r
-  case NT_CCLASS:\r
-  case NT_CANY:\r
-  case NT_ANCHOR:\r
-  default:\r
-    break;\r
-  }\r
-\r
-  return r;\r
-}\r
-#endif /* USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT */\r
-\r
-static int\r
-get_min_match_length(Node* node, OnigDistance *min, ScanEnv* env)\r
-{\r
-  OnigDistance tmin;\r
-  int r = 0;\r
-\r
-  *min = 0;\r
-  switch (NTYPE(node)) {\r
-  case NT_BREF:\r
-    {\r
-      int i;\r
-      int* backs;\r
-      Node** nodes = SCANENV_MEM_NODES(env);\r
-      BRefNode* br = NBREF(node);\r
-      if (br->state & NST_RECURSION) break;\r
-\r
-      backs = BACKREFS_P(br);\r
-      if (backs[0] > env->num_mem)  return ONIGERR_INVALID_BACKREF;\r
-      r = get_min_match_length(nodes[backs[0]], min, env);\r
-      if (r != 0) break;\r
-      for (i = 1; i < br->back_num; i++) {\r
-       if (backs[i] > env->num_mem)  return ONIGERR_INVALID_BACKREF;\r
-       r = get_min_match_length(nodes[backs[i]], &tmin, env);\r
-       if (r != 0) break;\r
-       if (*min > tmin) *min = tmin;\r
-      }\r
-    }\r
-    break;\r
-\r
-#ifdef USE_SUBEXP_CALL\r
-  case NT_CALL:\r
-    if (IS_CALL_RECURSION(NCALL(node))) {\r
-      EncloseNode* en = NENCLOSE(NCALL(node)->target);\r
-      if (IS_ENCLOSE_MIN_FIXED(en))\r
-       *min = en->min_len;\r
-    }\r
-    else\r
-      r = get_min_match_length(NCALL(node)->target, min, env);\r
-    break;\r
-#endif\r
-\r
-  case NT_LIST:\r
-    do {\r
-      r = get_min_match_length(NCAR(node), &tmin, env);\r
-      if (r == 0) *min += tmin;\r
-    } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
-    break;\r
-\r
-  case NT_ALT:\r
-    {\r
-      Node *x, *y;\r
-      y = node;\r
-      do {\r
-       x = NCAR(y);\r
-       r = get_min_match_length(x, &tmin, env);\r
-       if (r != 0) break;\r
-       if (y == node) *min = tmin;\r
-       else if (*min > tmin) *min = tmin;\r
-      } while (r == 0 && IS_NOT_NULL(y = NCDR(y)));\r
-    }\r
-    break;\r
-\r
-  case NT_STR:\r
-    {\r
-      StrNode* sn = NSTR(node);\r
-      *min = (OnigDistance)(sn->end - sn->s);\r
-    }\r
-    break;\r
-\r
-  case NT_CTYPE:\r
-    *min = 1;\r
-    break;\r
-\r
-  case NT_CCLASS:\r
-  case NT_CANY:\r
-    *min = 1;\r
-    break;\r
-\r
-  case NT_QTFR:\r
-    {\r
-      QtfrNode* qn = NQTFR(node);\r
-\r
-      if (qn->lower > 0) {\r
-       r = get_min_match_length(qn->target, min, env);\r
-       if (r == 0)\r
-         *min = distance_multiply(*min, qn->lower);\r
-      }\r
-    }\r
-    break;\r
-\r
-  case NT_ENCLOSE:\r
-    {\r
-      EncloseNode* en = NENCLOSE(node);\r
-      switch (en->type) {\r
-      case ENCLOSE_MEMORY:\r
-#ifdef USE_SUBEXP_CALL\r
-       if (IS_ENCLOSE_MIN_FIXED(en))\r
-         *min = en->min_len;\r
-       else {\r
-         r = get_min_match_length(en->target, min, env);\r
-         if (r == 0) {\r
-           en->min_len = *min;\r
-           SET_ENCLOSE_STATUS(node, NST_MIN_FIXED);\r
-         }\r
-       }\r
-       break;\r
-#endif\r
-      case ENCLOSE_OPTION:\r
-      case ENCLOSE_STOP_BACKTRACK:\r
-       r = get_min_match_length(en->target, min, env);\r
-       break;\r
-      }\r
-    }\r
-    break;\r
-\r
-  case NT_ANCHOR:\r
-  default:\r
-    break;\r
-  }\r
-\r
-  return r;\r
-}\r
-\r
-static int\r
-get_max_match_length(Node* node, OnigDistance *max, ScanEnv* env)\r
-{\r
-  OnigDistance tmax;\r
-  int r = 0;\r
-\r
-  *max = 0;\r
-  switch (NTYPE(node)) {\r
-  case NT_LIST:\r
-    do {\r
-      r = get_max_match_length(NCAR(node), &tmax, env);\r
-      if (r == 0)\r
-       *max = distance_add(*max, tmax);\r
-    } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
-    break;\r
-\r
-  case NT_ALT:\r
-    do {\r
-      r = get_max_match_length(NCAR(node), &tmax, env);\r
-      if (r == 0 && *max < tmax) *max = tmax;\r
-    } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
-    break;\r
-\r
-  case NT_STR:\r
-    {\r
-      StrNode* sn = NSTR(node);\r
-      *max = (OnigDistance)(sn->end - sn->s);\r
-    }\r
-    break;\r
-\r
-  case NT_CTYPE:\r
-    *max = ONIGENC_MBC_MAXLEN_DIST(env->enc);\r
-    break;\r
-\r
-  case NT_CCLASS:\r
-  case NT_CANY:\r
-    *max = ONIGENC_MBC_MAXLEN_DIST(env->enc);\r
-    break;\r
-\r
-  case NT_BREF:\r
-    {\r
-      int i;\r
-      int* backs;\r
-      Node** nodes = SCANENV_MEM_NODES(env);\r
-      BRefNode* br = NBREF(node);\r
-      if (br->state & NST_RECURSION) {\r
-       *max = ONIG_INFINITE_DISTANCE;\r
-       break;\r
-      }\r
-      backs = BACKREFS_P(br);\r
-      for (i = 0; i < br->back_num; i++) {\r
-       if (backs[i] > env->num_mem)  return ONIGERR_INVALID_BACKREF;\r
-       r = get_max_match_length(nodes[backs[i]], &tmax, env);\r
-       if (r != 0) break;\r
-       if (*max < tmax) *max = tmax;\r
-      }\r
-    }\r
-    break;\r
-\r
-#ifdef USE_SUBEXP_CALL\r
-  case NT_CALL:\r
-    if (! IS_CALL_RECURSION(NCALL(node)))\r
-      r = get_max_match_length(NCALL(node)->target, max, env);\r
-    else\r
-      *max = ONIG_INFINITE_DISTANCE;\r
-    break;\r
-#endif\r
-\r
-  case NT_QTFR:\r
-    {\r
-      QtfrNode* qn = NQTFR(node);\r
-\r
-      if (qn->upper != 0) {\r
-       r = get_max_match_length(qn->target, max, env);\r
-       if (r == 0 && *max != 0) {\r
-         if (! IS_REPEAT_INFINITE(qn->upper))\r
-           *max = distance_multiply(*max, qn->upper);\r
-         else\r
-           *max = ONIG_INFINITE_DISTANCE;\r
-       }\r
-      }\r
-    }\r
-    break;\r
-\r
-  case NT_ENCLOSE:\r
-    {\r
-      EncloseNode* en = NENCLOSE(node);\r
-      switch (en->type) {\r
-      case ENCLOSE_MEMORY:\r
-#ifdef USE_SUBEXP_CALL\r
-       if (IS_ENCLOSE_MAX_FIXED(en))\r
-         *max = en->max_len;\r
-       else {\r
-         r = get_max_match_length(en->target, max, env);\r
-         if (r == 0) {\r
-           en->max_len = *max;\r
-           SET_ENCLOSE_STATUS(node, NST_MAX_FIXED);\r
-         }\r
-       }\r
-       break;\r
-#endif\r
-      case ENCLOSE_OPTION:\r
-      case ENCLOSE_STOP_BACKTRACK:\r
-       r = get_max_match_length(en->target, max, env);\r
-       break;\r
-      }\r
-    }\r
-    break;\r
-\r
-  case NT_ANCHOR:\r
-  default:\r
-    break;\r
-  }\r
-\r
-  return r;\r
-}\r
-\r
-#define GET_CHAR_LEN_VARLEN           -1\r
-#define GET_CHAR_LEN_TOP_ALT_VARLEN   -2\r
-\r
-/* fixed size pattern node only */\r
-static int\r
-get_char_length_tree1(Node* node, regex_t* reg, int* len, int level)\r
-{\r
-  int tlen;\r
-  int r = 0;\r
-\r
-  level++;\r
-  *len = 0;\r
-  switch (NTYPE(node)) {\r
-  case NT_LIST:\r
-    do {\r
-      r = get_char_length_tree1(NCAR(node), reg, &tlen, level);\r
-      if (r == 0)\r
-       *len = distance_add(*len, tlen);\r
-    } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
-    break;\r
-\r
-  case NT_ALT:\r
-    {\r
-      int tlen2;\r
-      int varlen = 0;\r
+      QuantNode* qn = QUANT_(node);\r
 \r
-      r = get_char_length_tree1(NCAR(node), reg, &tlen, level);\r
-      while (r == 0 && IS_NOT_NULL(node = NCDR(node))) {\r
-       r = get_char_length_tree1(NCAR(node), reg, &tlen2, level);\r
-       if (r == 0) {\r
-         if (tlen != tlen2)\r
-           varlen = 1;\r
-       }\r
-      }\r
-      if (r == 0) {\r
-       if (varlen != 0) {\r
-         if (level == 1)\r
-           r = GET_CHAR_LEN_TOP_ALT_VARLEN;\r
-         else\r
-           r = GET_CHAR_LEN_VARLEN;\r
-       }\r
-       else\r
-         *len = tlen;\r
-      }\r
-    }\r
-    break;\r
-\r
-  case NT_STR:\r
-    {\r
-      StrNode* sn = NSTR(node);\r
-      UChar *s = sn->s;\r
-      while (s < sn->end) {\r
-       s += enclen(reg->enc, s);\r
-       (*len)++;\r
-      }\r
-    }\r
-    break;\r
-\r
-  case NT_QTFR:\r
-    {\r
-      QtfrNode* qn = NQTFR(node);\r
       if (qn->lower == qn->upper) {\r
-       r = get_char_length_tree1(qn->target, reg, &tlen, level);\r
-       if (r == 0)\r
-         *len = distance_multiply(tlen, qn->lower);\r
+        if (qn->upper == 0) {\r
+          *len = 0;\r
+        }\r
+        else {\r
+          r = get_char_length_tree1(NODE_BODY(node), reg, &tlen, level);\r
+          if (r == 0)\r
+            *len = distance_multiply(tlen, qn->lower);\r
+        }\r
       }\r
       else\r
-       r = GET_CHAR_LEN_VARLEN;\r
+        r = GET_CHAR_LEN_VARLEN;\r
     }\r
     break;\r
 \r
-#ifdef USE_SUBEXP_CALL\r
-  case NT_CALL:\r
-    if (! IS_CALL_RECURSION(NCALL(node)))\r
-      r = get_char_length_tree1(NCALL(node)->target, reg, len, level);\r
+#ifdef USE_CALL\r
+  case NODE_CALL:\r
+    if (! NODE_IS_RECURSION(node))\r
+      r = get_char_length_tree1(NODE_BODY(node), reg, len, level);\r
     else\r
       r = GET_CHAR_LEN_VARLEN;\r
     break;\r
 #endif\r
 \r
-  case NT_CTYPE:\r
-    *len = 1;\r
-    break;\r
-\r
-  case NT_CCLASS:\r
-  case NT_CANY:\r
+  case NODE_CTYPE:\r
+  case NODE_CCLASS:\r
     *len = 1;\r
     break;\r
 \r
-  case NT_ENCLOSE:\r
+  case NODE_ENCLOSURE:\r
     {\r
-      EncloseNode* en = NENCLOSE(node);\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+\r
       switch (en->type) {\r
-      case ENCLOSE_MEMORY:\r
-#ifdef USE_SUBEXP_CALL\r
-       if (IS_ENCLOSE_CLEN_FIXED(en))\r
-         *len = en->char_len;\r
-       else {\r
-         r = get_char_length_tree1(en->target, reg, len, level);\r
-         if (r == 0) {\r
-           en->char_len = *len;\r
-           SET_ENCLOSE_STATUS(node, NST_CLEN_FIXED);\r
-         }\r
-       }\r
-       break;\r
+      case ENCLOSURE_MEMORY:\r
+#ifdef USE_CALL\r
+        if (NODE_IS_CLEN_FIXED(node))\r
+          *len = en->char_len;\r
+        else {\r
+          r = get_char_length_tree1(NODE_BODY(node), reg, len, level);\r
+          if (r == 0) {\r
+            en->char_len = *len;\r
+            NODE_STATUS_ADD(node, CLEN_FIXED);\r
+          }\r
+        }\r
+        break;\r
 #endif\r
-      case ENCLOSE_OPTION:\r
-      case ENCLOSE_STOP_BACKTRACK:\r
-       r = get_char_length_tree1(en->target, reg, len, level);\r
-       break;\r
+      case ENCLOSURE_OPTION:\r
+      case ENCLOSURE_STOP_BACKTRACK:\r
+        r = get_char_length_tree1(NODE_BODY(node), reg, len, level);\r
+        break;\r
+      case ENCLOSURE_IF_ELSE:\r
+        {\r
+          int clen, elen;\r
+\r
+          r = get_char_length_tree1(NODE_BODY(node), reg, &clen, level);\r
+          if (r == 0) {\r
+            if (IS_NOT_NULL(en->te.Then)) {\r
+              r = get_char_length_tree1(en->te.Then, reg, &tlen, level);\r
+              if (r != 0) break;\r
+            }\r
+            else tlen = 0;\r
+            if (IS_NOT_NULL(en->te.Else)) {\r
+              r = get_char_length_tree1(en->te.Else, reg, &elen, level);\r
+              if (r != 0) break;\r
+            }\r
+            else elen = 0;\r
+\r
+            if (clen + tlen != elen) {\r
+              r = GET_CHAR_LEN_VARLEN;\r
+            }\r
+            else {\r
+              *len = elen;\r
+            }\r
+          }\r
+        }\r
+        break;\r
+\r
       default:\r
-       break;\r
+        break;\r
       }\r
     }\r
     break;\r
 \r
-  case NT_ANCHOR:\r
+  case NODE_ANCHOR:\r
+  case NODE_GIMMICK:\r
     break;\r
 \r
+  case NODE_BACKREF:\r
+    if (NODE_IS_CHECKER(node))\r
+      break;\r
+    /* fall */\r
   default:\r
     r = GET_CHAR_LEN_VARLEN;\r
     break;\r
@@ -2409,142 +2291,165 @@ get_char_length_tree(Node* node, regex_t* reg, int* len)
 \r
 /* x is not included y ==>  1 : 0 */\r
 static int\r
-is_not_included(Node* x, Node* y, regex_t* reg)\r
+is_exclusive(Node* x, Node* y, regex_t* reg)\r
 {\r
   int i, len;\r
   OnigCodePoint code;\r
   UChar *p;\r
-  int ytype;\r
+  NodeType ytype;\r
 \r
  retry:\r
-  ytype = NTYPE(y);\r
-  switch (NTYPE(x)) {\r
-  case NT_CTYPE:\r
+  ytype = NODE_TYPE(y);\r
+  switch (NODE_TYPE(x)) {\r
+  case NODE_CTYPE:\r
     {\r
+      if (CTYPE_(x)->ctype == CTYPE_ANYCHAR ||\r
+          CTYPE_(y)->ctype == CTYPE_ANYCHAR)\r
+        break;\r
+\r
       switch (ytype) {\r
-      case NT_CTYPE:\r
-       if (NCTYPE(y)->ctype == NCTYPE(x)->ctype &&\r
-           NCTYPE(y)->not   != NCTYPE(x)->not)\r
-         return 1;\r
-       else\r
-         return 0;\r
-       break;\r
-\r
-      case NT_CCLASS:\r
+      case NODE_CTYPE:\r
+        if (CTYPE_(y)->ctype == CTYPE_(x)->ctype &&\r
+            CTYPE_(y)->not   != CTYPE_(x)->not &&\r
+            CTYPE_(y)->ascii_mode == CTYPE_(x)->ascii_mode)\r
+          return 1;\r
+        else\r
+          return 0;\r
+        break;\r
+\r
+      case NODE_CCLASS:\r
       swap:\r
-       {\r
-         Node* tmp;\r
-         tmp = x; x = y; y = tmp;\r
-         goto retry;\r
-       }\r
-       break;\r
+        {\r
+          Node* tmp;\r
+          tmp = x; x = y; y = tmp;\r
+          goto retry;\r
+        }\r
+        break;\r
 \r
-      case NT_STR:\r
-       goto swap;\r
-       break;\r
+      case NODE_STRING:\r
+        goto swap;\r
+        break;\r
 \r
       default:\r
-       break;\r
+        break;\r
       }\r
     }\r
     break;\r
 \r
-  case NT_CCLASS:\r
+  case NODE_CCLASS:\r
     {\r
-      CClassNode* xc = NCCLASS(x);\r
+      int range;\r
+      CClassNode* xc = CCLASS_(x);\r
+\r
       switch (ytype) {\r
-      case NT_CTYPE:\r
-       switch (NCTYPE(y)->ctype) {\r
-       case ONIGENC_CTYPE_WORD:\r
-         if (NCTYPE(y)->not == 0) {\r
-           if (IS_NULL(xc->mbuf) && !IS_NCCLASS_NOT(xc)) {\r
-             for (i = 0; i < SINGLE_BYTE_SIZE; i++) {\r
-               if (BITSET_AT(xc->bs, i)) {\r
-                 if (IS_CODE_SB_WORD(reg->enc, i)) return 0;\r
-               }\r
-             }\r
-             return 1;\r
-           }\r
-           return 0;\r
-         }\r
-         else {\r
-           for (i = 0; i < SINGLE_BYTE_SIZE; i++) {\r
-             if (! IS_CODE_SB_WORD(reg->enc, i)) {\r
-               if (!IS_NCCLASS_NOT(xc)) {\r
-                 if (BITSET_AT(xc->bs, i))\r
-                   return 0;\r
-               }\r
-               else {\r
-                 if (! BITSET_AT(xc->bs, i))\r
-                   return 0;\r
-               }\r
-             }\r
-           }\r
-           return 1;\r
-         }\r
-         break;\r
-\r
-       default:\r
-         break;\r
-       }\r
-       break;\r
-\r
-      case NT_CCLASS:\r
-       {\r
-         int v;\r
-         CClassNode* yc = NCCLASS(y);\r
-\r
-         for (i = 0; i < SINGLE_BYTE_SIZE; i++) {\r
-           v = BITSET_AT(xc->bs, i);\r
-           if ((v != 0 && !IS_NCCLASS_NOT(xc)) ||\r
-                (v == 0 && IS_NCCLASS_NOT(xc))) {\r
-             v = BITSET_AT(yc->bs, i);\r
-             if ((v != 0 && !IS_NCCLASS_NOT(yc)) ||\r
+      case NODE_CTYPE:\r
+        switch (CTYPE_(y)->ctype) {\r
+        case CTYPE_ANYCHAR:\r
+          return 0;\r
+          break;\r
+\r
+        case ONIGENC_CTYPE_WORD:\r
+          if (CTYPE_(y)->not == 0) {\r
+            if (IS_NULL(xc->mbuf) && !IS_NCCLASS_NOT(xc)) {\r
+              range = CTYPE_(y)->ascii_mode != 0 ? 128 : SINGLE_BYTE_SIZE;\r
+              for (i = 0; i < range; i++) {\r
+                if (BITSET_AT(xc->bs, i)) {\r
+                  if (ONIGENC_IS_CODE_WORD(reg->enc, i)) return 0;\r
+                }\r
+              }\r
+              return 1;\r
+            }\r
+            return 0;\r
+          }\r
+          else {\r
+            if (IS_NOT_NULL(xc->mbuf)) return 0;\r
+            if (IS_NCCLASS_NOT(xc)) return 0;\r
+\r
+            range = CTYPE_(y)->ascii_mode != 0 ? 128 : SINGLE_BYTE_SIZE;\r
+            for (i = 0; i < range; i++) {\r
+              if (! ONIGENC_IS_CODE_WORD(reg->enc, i)) {\r
+                if (BITSET_AT(xc->bs, i))\r
+                  return 0;\r
+              }\r
+            }\r
+            for (i = range; i < SINGLE_BYTE_SIZE; i++) {\r
+              if (BITSET_AT(xc->bs, i)) return 0;\r
+            }\r
+            return 1;\r
+          }\r
+          break;\r
+\r
+        default:\r
+          break;\r
+        }\r
+        break;\r
+\r
+      case NODE_CCLASS:\r
+        {\r
+          int v;\r
+          CClassNode* yc = CCLASS_(y);\r
+\r
+          for (i = 0; i < SINGLE_BYTE_SIZE; i++) {\r
+            v = BITSET_AT(xc->bs, i);\r
+            if ((v != 0 && !IS_NCCLASS_NOT(xc)) || (v == 0 && IS_NCCLASS_NOT(xc))) {\r
+              v = BITSET_AT(yc->bs, i);\r
+              if ((v != 0 && !IS_NCCLASS_NOT(yc)) ||\r
                   (v == 0 && IS_NCCLASS_NOT(yc)))\r
-               return 0;\r
-           }\r
-         }\r
-         if ((IS_NULL(xc->mbuf) && !IS_NCCLASS_NOT(xc)) ||\r
-             (IS_NULL(yc->mbuf) && !IS_NCCLASS_NOT(yc)))\r
-           return 1;\r
-         return 0;\r
-       }\r
-       break;\r
-\r
-      case NT_STR:\r
-       goto swap;\r
-       break;\r
+                return 0;\r
+            }\r
+          }\r
+          if ((IS_NULL(xc->mbuf) && !IS_NCCLASS_NOT(xc)) ||\r
+              (IS_NULL(yc->mbuf) && !IS_NCCLASS_NOT(yc)))\r
+            return 1;\r
+          return 0;\r
+        }\r
+        break;\r
+\r
+      case NODE_STRING:\r
+        goto swap;\r
+        break;\r
 \r
       default:\r
-       break;\r
+        break;\r
       }\r
     }\r
     break;\r
 \r
-  case NT_STR:\r
+  case NODE_STRING:\r
     {\r
-      StrNode* xs = NSTR(x);\r
-      if (NSTRING_LEN(x) == 0)\r
-       break;\r
+      StrNode* xs = STR_(x);\r
+\r
+      if (NODE_STRING_LEN(x) == 0)\r
+        break;\r
 \r
-      //c = *(xs->s);\r
       switch (ytype) {\r
-      case NT_CTYPE:\r
-        switch (NCTYPE(y)->ctype) {\r
+      case NODE_CTYPE:\r
+        switch (CTYPE_(y)->ctype) {\r
+        case CTYPE_ANYCHAR:\r
+          break;\r
+\r
         case ONIGENC_CTYPE_WORD:\r
-          if (ONIGENC_IS_MBC_WORD(reg->enc, xs->s, xs->end))\r
-            return NCTYPE(y)->not;\r
-          else\r
-            return !(NCTYPE(y)->not);\r
+          if (CTYPE_(y)->ascii_mode == 0) {\r
+            if (ONIGENC_IS_MBC_WORD(reg->enc, xs->s, xs->end))\r
+              return CTYPE_(y)->not;\r
+            else\r
+              return !(CTYPE_(y)->not);\r
+          }\r
+          else {\r
+            if (ONIGENC_IS_MBC_WORD_ASCII(reg->enc, xs->s, xs->end))\r
+              return CTYPE_(y)->not;\r
+            else\r
+              return !(CTYPE_(y)->not);\r
+          }\r
           break;\r
         default:\r
           break;\r
         }\r
         break;\r
 \r
-      case NT_CCLASS:\r
+      case NODE_CCLASS:\r
         {\r
-          CClassNode* cc = NCCLASS(y);\r
+          CClassNode* cc = CCLASS_(y);\r
 \r
           code = ONIGENC_MBC_TO_CODE(reg->enc, xs->s,\r
                                      xs->s + ONIGENC_MBC_MAXLEN(reg->enc));\r
@@ -2552,13 +2457,14 @@ is_not_included(Node* x, Node* y, regex_t* reg)
         }\r
         break;\r
 \r
-      case NT_STR:\r
+      case NODE_STRING:\r
         {\r
           UChar *q;\r
-          StrNode* ys = NSTR(y);\r
-          len = NSTRING_LEN(x);\r
-          if (len > NSTRING_LEN(y)) len = NSTRING_LEN(y);\r
-          if (NSTRING_IS_AMBIG(x) || NSTRING_IS_AMBIG(y)) {\r
+          StrNode* ys = STR_(y);\r
+\r
+          len = NODE_STRING_LEN(x);\r
+          if (len > NODE_STRING_LEN(y)) len = NODE_STRING_LEN(y);\r
+          if (NODE_STRING_IS_AMBIG(x) || NODE_STRING_IS_AMBIG(y)) {\r
             /* tiny version */\r
             return 0;\r
           }\r
@@ -2569,7 +2475,7 @@ is_not_included(Node* x, Node* y, regex_t* reg)
           }\r
         }\r
         break;\r
-       \r
+\r
       default:\r
         break;\r
       }\r
@@ -2588,81 +2494,85 @@ get_head_value_node(Node* node, int exact, regex_t* reg)
 {\r
   Node* n = NULL_NODE;\r
 \r
-  switch (NTYPE(node)) {\r
-  case NT_BREF:\r
-  case NT_ALT:\r
-  case NT_CANY:\r
-#ifdef USE_SUBEXP_CALL\r
-  case NT_CALL:\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_BACKREF:\r
+  case NODE_ALT:\r
+#ifdef USE_CALL\r
+  case NODE_CALL:\r
 #endif\r
     break;\r
 \r
-  case NT_CTYPE:\r
-  case NT_CCLASS:\r
+  case NODE_CTYPE:\r
+    if (CTYPE_(node)->ctype == CTYPE_ANYCHAR)\r
+      break;\r
+    /* fall */\r
+  case NODE_CCLASS:\r
     if (exact == 0) {\r
       n = node;\r
     }\r
     break;\r
 \r
-  case NT_LIST:\r
-    n = get_head_value_node(NCAR(node), exact, reg);\r
+  case NODE_LIST:\r
+    n = get_head_value_node(NODE_CAR(node), exact, reg);\r
     break;\r
 \r
-  case NT_STR:\r
+  case NODE_STRING:\r
     {\r
-      StrNode* sn = NSTR(node);\r
+      StrNode* sn = STR_(node);\r
 \r
       if (sn->end <= sn->s)\r
-       break;\r
+        break;\r
 \r
       if (exact != 0 &&\r
-         !NSTRING_IS_RAW(node) && IS_IGNORECASE(reg->options)) {\r
+          !NODE_STRING_IS_RAW(node) && IS_IGNORECASE(reg->options)) {\r
       }\r
       else {\r
-       n = node;\r
+        n = node;\r
       }\r
     }\r
     break;\r
 \r
-  case NT_QTFR:\r
+  case NODE_QUANT:\r
     {\r
-      QtfrNode* qn = NQTFR(node);\r
+      QuantNode* qn = QUANT_(node);\r
       if (qn->lower > 0) {\r
-       if (IS_NOT_NULL(qn->head_exact))\r
-         n = qn->head_exact;\r
-       else\r
-         n = get_head_value_node(qn->target, exact, reg);\r
+        if (IS_NOT_NULL(qn->head_exact))\r
+          n = qn->head_exact;\r
+        else\r
+          n = get_head_value_node(NODE_BODY(node), exact, reg);\r
       }\r
     }\r
     break;\r
 \r
-  case NT_ENCLOSE:\r
+  case NODE_ENCLOSURE:\r
     {\r
-      EncloseNode* en = NENCLOSE(node);\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
       switch (en->type) {\r
-      case ENCLOSE_OPTION:\r
-       {\r
-         OnigOptionType options = reg->options;\r
-\r
-         reg->options = NENCLOSE(node)->option;\r
-         n = get_head_value_node(NENCLOSE(node)->target, exact, reg);\r
-         reg->options = options;\r
-       }\r
-       break;\r
-\r
-      case ENCLOSE_MEMORY:\r
-      case ENCLOSE_STOP_BACKTRACK:\r
-       n = get_head_value_node(en->target, exact, reg);\r
-       break;\r
+      case ENCLOSURE_OPTION:\r
+        {\r
+          OnigOptionType options = reg->options;\r
+\r
+          reg->options = ENCLOSURE_(node)->o.options;\r
+          n = get_head_value_node(NODE_BODY(node), exact, reg);\r
+          reg->options = options;\r
+        }\r
+        break;\r
+\r
+      case ENCLOSURE_MEMORY:\r
+      case ENCLOSURE_STOP_BACKTRACK:\r
+      case ENCLOSURE_IF_ELSE:\r
+        n = get_head_value_node(NODE_BODY(node), exact, reg);\r
+        break;\r
       }\r
     }\r
     break;\r
 \r
-  case NT_ANCHOR:\r
-    if (NANCHOR(node)->type == ANCHOR_PREC_READ)\r
-      n = get_head_value_node(NANCHOR(node)->target, exact, reg);\r
+  case NODE_ANCHOR:\r
+    if (ANCHOR_(node)->type == ANCHOR_PREC_READ)\r
+      n = get_head_value_node(NODE_BODY(node), exact, reg);\r
     break;\r
 \r
+  case NODE_GIMMICK:\r
   default:\r
     break;\r
   }\r
@@ -2671,247 +2581,396 @@ get_head_value_node(Node* node, int exact, regex_t* reg)
 }\r
 \r
 static int\r
-check_type_tree(Node* node, int type_mask, int enclose_mask, int anchor_mask)\r
+check_type_tree(Node* node, int type_mask, int enclosure_mask, int anchor_mask)\r
 {\r
-  int type, r = 0;\r
+  NodeType type;\r
+  int r = 0;\r
 \r
-  type = NTYPE(node);\r
-  if ((NTYPE2BIT(type) & type_mask) == 0)\r
+  type = NODE_TYPE(node);\r
+  if ((NODE_TYPE2BIT(type) & type_mask) == 0)\r
     return 1;\r
 \r
   switch (type) {\r
-  case NT_LIST:\r
-  case NT_ALT:\r
+  case NODE_LIST:\r
+  case NODE_ALT:\r
     do {\r
-      r = check_type_tree(NCAR(node), type_mask, enclose_mask,\r
-                         anchor_mask);\r
-    } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
+      r = check_type_tree(NODE_CAR(node), type_mask, enclosure_mask,\r
+                          anchor_mask);\r
+    } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));\r
     break;\r
 \r
-  case NT_QTFR:\r
-    r = check_type_tree(NQTFR(node)->target, type_mask, enclose_mask,\r
-                       anchor_mask);\r
+  case NODE_QUANT:\r
+    r = check_type_tree(NODE_BODY(node), type_mask, enclosure_mask, anchor_mask);\r
     break;\r
 \r
-  case NT_ENCLOSE:\r
+  case NODE_ENCLOSURE:\r
     {\r
-      EncloseNode* en = NENCLOSE(node);\r
-      if ((en->type & enclose_mask) == 0)\r
-       return 1;\r
-\r
-      r = check_type_tree(en->target, type_mask, enclose_mask, anchor_mask);\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+      if (((1<<en->type) & enclosure_mask) == 0)\r
+        return 1;\r
+\r
+      r = check_type_tree(NODE_BODY(node), type_mask, enclosure_mask, anchor_mask);\r
+      if (r == 0 && en->type == ENCLOSURE_IF_ELSE) {\r
+        if (IS_NOT_NULL(en->te.Then)) {\r
+          r = check_type_tree(en->te.Then, type_mask, enclosure_mask, anchor_mask);\r
+          if (r != 0) break;\r
+        }\r
+        if (IS_NOT_NULL(en->te.Else)) {\r
+          r = check_type_tree(en->te.Else, type_mask, enclosure_mask, anchor_mask);\r
+        }\r
+      }\r
     }\r
     break;\r
 \r
-  case NT_ANCHOR:\r
-    type = NANCHOR(node)->type;\r
+  case NODE_ANCHOR:\r
+    type = ANCHOR_(node)->type;\r
     if ((type & anchor_mask) == 0)\r
       return 1;\r
 \r
-    if (NANCHOR(node)->target)\r
-      r = check_type_tree(NANCHOR(node)->target,\r
-                         type_mask, enclose_mask, anchor_mask);\r
+    if (IS_NOT_NULL(NODE_BODY(node)))\r
+      r = check_type_tree(NODE_BODY(node), type_mask, enclosure_mask, anchor_mask);\r
     break;\r
 \r
+  case NODE_GIMMICK:\r
   default:\r
     break;\r
   }\r
   return r;\r
 }\r
 \r
-#ifdef USE_SUBEXP_CALL\r
-\r
-#define RECURSION_EXIST       1\r
-#define RECURSION_INFINITE    2\r
-\r
-static int\r
-subexp_inf_recursive_check(Node* node, ScanEnv* env, int head)\r
+static OnigLen\r
+tree_min_len(Node* node, ScanEnv* env)\r
 {\r
-  int type;\r
-  int r = 0;\r
+  OnigLen len;\r
+  OnigLen tmin;\r
 \r
-  type = NTYPE(node);\r
-  switch (type) {\r
-  case NT_LIST:\r
-    {\r
-      Node *x;\r
-      OnigDistance min;\r
-      int ret;\r
+  len = 0;\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_BACKREF:\r
+    if (! NODE_IS_CHECKER(node)) {\r
+      int i;\r
+      int* backs;\r
+      MemEnv* mem_env = SCANENV_MEMENV(env);\r
+      BackRefNode* br = BACKREF_(node);\r
+      if (NODE_IS_RECURSION(node)) break;\r
 \r
-      x = node;\r
-      do {\r
-       ret = subexp_inf_recursive_check(NCAR(x), env, head);\r
-       if (ret < 0 || ret == RECURSION_INFINITE) return ret;\r
-       r |= ret;\r
-       if (head) {\r
-         ret = get_min_match_length(NCAR(x), &min, env);\r
-         if (ret != 0) return ret;\r
-         if (min != 0) head = 0;\r
-       }\r
-      } while (IS_NOT_NULL(x = NCDR(x)));\r
+      backs = BACKREFS_P(br);\r
+      len = tree_min_len(mem_env[backs[0]].node, env);\r
+      for (i = 1; i < br->back_num; i++) {\r
+        tmin = tree_min_len(mem_env[backs[i]].node, env);\r
+        if (len > tmin) len = tmin;\r
+      }\r
     }\r
     break;\r
 \r
-  case NT_ALT:\r
+#ifdef USE_CALL\r
+  case NODE_CALL:\r
     {\r
-      int ret;\r
-      r = RECURSION_EXIST;\r
+      Node* t = NODE_BODY(node);\r
+      if (NODE_IS_RECURSION(node)) {\r
+        if (NODE_IS_MIN_FIXED(t))\r
+          len = ENCLOSURE_(t)->min_len;\r
+      }\r
+      else\r
+        len = tree_min_len(t, env);\r
+    }\r
+    break;\r
+#endif\r
+\r
+  case NODE_LIST:\r
+    do {\r
+      tmin = tree_min_len(NODE_CAR(node), env);\r
+      len = distance_add(len, tmin);\r
+    } while (IS_NOT_NULL(node = NODE_CDR(node)));\r
+    break;\r
+\r
+  case NODE_ALT:\r
+    {\r
+      Node *x, *y;\r
+      y = node;\r
       do {\r
-       ret = subexp_inf_recursive_check(NCAR(node), env, head);\r
-       if (ret < 0 || ret == RECURSION_INFINITE) return ret;\r
-       r &= ret;\r
-      } while (IS_NOT_NULL(node = NCDR(node)));\r
+        x = NODE_CAR(y);\r
+        tmin = tree_min_len(x, env);\r
+        if (y == node) len = tmin;\r
+        else if (len > tmin) len = tmin;\r
+      } while (IS_NOT_NULL(y = NODE_CDR(y)));\r
     }\r
     break;\r
 \r
-  case NT_QTFR:\r
-    r = subexp_inf_recursive_check(NQTFR(node)->target, env, head);\r
-    if (r == RECURSION_EXIST) {\r
-      if (NQTFR(node)->lower == 0) r = 0;\r
+  case NODE_STRING:\r
+    {\r
+      StrNode* sn = STR_(node);\r
+      len = (int )(sn->end - sn->s);\r
     }\r
     break;\r
 \r
-  case NT_ANCHOR:\r
+  case NODE_CTYPE:\r
+  case NODE_CCLASS:\r
+    len = ONIGENC_MBC_MINLEN(env->enc);\r
+    break;\r
+\r
+  case NODE_QUANT:\r
     {\r
-      AnchorNode* an = NANCHOR(node);\r
-      switch (an->type) {\r
-      case ANCHOR_PREC_READ:\r
-      case ANCHOR_PREC_READ_NOT:\r
-      case ANCHOR_LOOK_BEHIND:\r
-      case ANCHOR_LOOK_BEHIND_NOT:\r
-       r = subexp_inf_recursive_check(an->target, env, head);\r
-       break;\r
+      QuantNode* qn = QUANT_(node);\r
+\r
+      if (qn->lower > 0) {\r
+        len = tree_min_len(NODE_BODY(node), env);\r
+        len = distance_multiply(len, qn->lower);\r
       }\r
     }\r
     break;\r
 \r
-  case NT_CALL:\r
-    r = subexp_inf_recursive_check(NCALL(node)->target, env, head);\r
-    break;\r
+  case NODE_ENCLOSURE:\r
+    {\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+      switch (en->type) {\r
+      case ENCLOSURE_MEMORY:\r
+        if (NODE_IS_MIN_FIXED(node))\r
+          len = en->min_len;\r
+        else {\r
+          if (NODE_IS_MARK1(node))\r
+            len = 0;  /* recursive */\r
+          else {\r
+            NODE_STATUS_ADD(node, MARK1);\r
+            len = tree_min_len(NODE_BODY(node), env);\r
+            NODE_STATUS_REMOVE(node, MARK1);\r
 \r
-  case NT_ENCLOSE:\r
-    if (IS_ENCLOSE_MARK2(NENCLOSE(node)))\r
-      return 0;\r
-    else if (IS_ENCLOSE_MARK1(NENCLOSE(node)))\r
-      return (head == 0 ? RECURSION_EXIST : RECURSION_INFINITE);\r
-    else {\r
-      SET_ENCLOSE_STATUS(node, NST_MARK2);\r
-      r = subexp_inf_recursive_check(NENCLOSE(node)->target, env, head);\r
-      CLEAR_ENCLOSE_STATUS(node, NST_MARK2);\r
+            en->min_len = len;\r
+            NODE_STATUS_ADD(node, MIN_FIXED);\r
+          }\r
+        }\r
+        break;\r
+\r
+      case ENCLOSURE_OPTION:\r
+      case ENCLOSURE_STOP_BACKTRACK:\r
+        len = tree_min_len(NODE_BODY(node), env);\r
+        break;\r
+      case ENCLOSURE_IF_ELSE:\r
+        {\r
+          OnigLen elen;\r
+\r
+          len = tree_min_len(NODE_BODY(node), env);\r
+          if (IS_NOT_NULL(en->te.Then))\r
+            len += tree_min_len(en->te.Then, env);\r
+          if (IS_NOT_NULL(en->te.Else))\r
+            elen = tree_min_len(en->te.Else, env);\r
+          else elen = 0;\r
+\r
+          if (elen < len) len = elen;\r
+        }\r
+        break;\r
+      }\r
     }\r
     break;\r
 \r
+  case NODE_GIMMICK:\r
+    {\r
+      GimmickNode* g = GIMMICK_(node);\r
+      if (g->type == GIMMICK_FAIL) {\r
+        len = INFINITE_LEN;\r
+        break;\r
+      }\r
+    }\r
+    /* fall */\r
+  case NODE_ANCHOR:\r
   default:\r
     break;\r
   }\r
 \r
-  return r;\r
+  return len;\r
 }\r
 \r
-static int\r
-subexp_inf_recursive_check_trav(Node* node, ScanEnv* env)\r
+static OnigLen\r
+tree_max_len(Node* node, ScanEnv* env)\r
 {\r
-  int type;\r
-  int r = 0;\r
+  OnigLen len;\r
+  OnigLen tmax;\r
 \r
-  type = NTYPE(node);\r
-  switch (type) {\r
-  case NT_LIST:\r
-  case NT_ALT:\r
+  len = 0;\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_LIST:\r
     do {\r
-      r = subexp_inf_recursive_check_trav(NCAR(node), env);\r
-    } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
+      tmax = tree_max_len(NODE_CAR(node), env);\r
+      len = distance_add(len, tmax);\r
+    } while (IS_NOT_NULL(node = NODE_CDR(node)));\r
     break;\r
 \r
-  case NT_QTFR:\r
-    r = subexp_inf_recursive_check_trav(NQTFR(node)->target, env);\r
+  case NODE_ALT:\r
+    do {\r
+      tmax = tree_max_len(NODE_CAR(node), env);\r
+      if (len < tmax) len = tmax;\r
+    } while (IS_NOT_NULL(node = NODE_CDR(node)));\r
     break;\r
 \r
-  case NT_ANCHOR:\r
+  case NODE_STRING:\r
     {\r
-      AnchorNode* an = NANCHOR(node);\r
-      switch (an->type) {\r
-      case ANCHOR_PREC_READ:\r
-      case ANCHOR_PREC_READ_NOT:\r
-      case ANCHOR_LOOK_BEHIND:\r
-      case ANCHOR_LOOK_BEHIND_NOT:\r
-       r = subexp_inf_recursive_check_trav(an->target, env);\r
-       break;\r
+      StrNode* sn = STR_(node);\r
+      len = (OnigLen )(sn->end - sn->s);\r
+    }\r
+    break;\r
+\r
+  case NODE_CTYPE:\r
+  case NODE_CCLASS:\r
+    len = ONIGENC_MBC_MAXLEN_DIST(env->enc);\r
+    break;\r
+\r
+  case NODE_BACKREF:\r
+    if (! NODE_IS_CHECKER(node)) {\r
+      int i;\r
+      int* backs;\r
+      MemEnv* mem_env = SCANENV_MEMENV(env);\r
+      BackRefNode* br = BACKREF_(node);\r
+      if (NODE_IS_RECURSION(node)) {\r
+        len = INFINITE_LEN;\r
+        break;\r
+      }\r
+      backs = BACKREFS_P(br);\r
+      for (i = 0; i < br->back_num; i++) {\r
+        tmax = tree_max_len(mem_env[backs[i]].node, env);\r
+        if (len < tmax) len = tmax;\r
       }\r
     }\r
     break;\r
 \r
-  case NT_ENCLOSE:\r
+#ifdef USE_CALL\r
+  case NODE_CALL:\r
+    if (! NODE_IS_RECURSION(node))\r
+      len = tree_max_len(NODE_BODY(node), env);\r
+    else\r
+      len = INFINITE_LEN;\r
+    break;\r
+#endif\r
+\r
+  case NODE_QUANT:\r
     {\r
-      EncloseNode* en = NENCLOSE(node);\r
+      QuantNode* qn = QUANT_(node);\r
 \r
-      if (IS_ENCLOSE_RECURSION(en)) {\r
-       SET_ENCLOSE_STATUS(node, NST_MARK1);\r
-       r = subexp_inf_recursive_check(en->target, env, 1);\r
-       if (r > 0) return ONIGERR_NEVER_ENDING_RECURSION;\r
-       CLEAR_ENCLOSE_STATUS(node, NST_MARK1);\r
+      if (qn->upper != 0) {\r
+        len = tree_max_len(NODE_BODY(node), env);\r
+        if (len != 0) {\r
+          if (! IS_REPEAT_INFINITE(qn->upper))\r
+            len = distance_multiply(len, qn->upper);\r
+          else\r
+            len = INFINITE_LEN;\r
+        }\r
       }\r
-      r = subexp_inf_recursive_check_trav(en->target, env);\r
     }\r
+    break;\r
+\r
+  case NODE_ENCLOSURE:\r
+    {\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+      switch (en->type) {\r
+      case ENCLOSURE_MEMORY:\r
+        if (NODE_IS_MAX_FIXED(node))\r
+          len = en->max_len;\r
+        else {\r
+          if (NODE_IS_MARK1(node))\r
+            len = INFINITE_LEN;\r
+          else {\r
+            NODE_STATUS_ADD(node, MARK1);\r
+            len = tree_max_len(NODE_BODY(node), env);\r
+            NODE_STATUS_REMOVE(node, MARK1);\r
+\r
+            en->max_len = len;\r
+            NODE_STATUS_ADD(node, MAX_FIXED);\r
+          }\r
+        }\r
+        break;\r
+\r
+      case ENCLOSURE_OPTION:\r
+      case ENCLOSURE_STOP_BACKTRACK:\r
+        len = tree_max_len(NODE_BODY(node), env);\r
+        break;\r
+      case ENCLOSURE_IF_ELSE:\r
+        {\r
+          OnigLen tlen, elen;\r
+\r
+          len = tree_max_len(NODE_BODY(node), env);\r
+          if (IS_NOT_NULL(en->te.Then)) {\r
+            tlen = tree_max_len(en->te.Then, env);\r
+            len = distance_add(len, tlen);\r
+          }\r
+          if (IS_NOT_NULL(en->te.Else))\r
+            elen = tree_max_len(en->te.Else, env);\r
+          else elen = 0;\r
 \r
+          if (elen > len) len = elen;\r
+        }\r
+        break;\r
+      }\r
+    }\r
     break;\r
 \r
+  case NODE_ANCHOR:\r
+  case NODE_GIMMICK:\r
   default:\r
     break;\r
   }\r
 \r
-  return r;\r
+  return len;\r
 }\r
 \r
 static int\r
-subexp_recursive_check(Node* node)\r
+check_backrefs(Node* node, ScanEnv* env)\r
 {\r
-  int r = 0;\r
+  int r;\r
 \r
-  switch (NTYPE(node)) {\r
-  case NT_LIST:\r
-  case NT_ALT:\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_LIST:\r
+  case NODE_ALT:\r
     do {\r
-      r |= subexp_recursive_check(NCAR(node));\r
-    } while (IS_NOT_NULL(node = NCDR(node)));\r
+      r = check_backrefs(NODE_CAR(node), env);\r
+    } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));\r
     break;\r
 \r
-  case NT_QTFR:\r
-    r = subexp_recursive_check(NQTFR(node)->target);\r
+  case NODE_ANCHOR:\r
+    if (! ANCHOR_HAS_BODY(ANCHOR_(node))) {\r
+      r = 0;\r
+      break;\r
+    }\r
+    /* fall */\r
+  case NODE_QUANT:\r
+    r = check_backrefs(NODE_BODY(node), env);\r
     break;\r
 \r
-  case NT_ANCHOR:\r
+  case NODE_ENCLOSURE:\r
+    r = check_backrefs(NODE_BODY(node), env);\r
     {\r
-      AnchorNode* an = NANCHOR(node);\r
-      switch (an->type) {\r
-      case ANCHOR_PREC_READ:\r
-      case ANCHOR_PREC_READ_NOT:\r
-      case ANCHOR_LOOK_BEHIND:\r
-      case ANCHOR_LOOK_BEHIND_NOT:\r
-       r = subexp_recursive_check(an->target);\r
-       break;\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+\r
+      if (en->type == ENCLOSURE_IF_ELSE) {\r
+        if (r != 0) return r;\r
+        if (IS_NOT_NULL(en->te.Then)) {\r
+          r = check_backrefs(en->te.Then, env);\r
+          if (r != 0) return r;\r
+        }\r
+        if (IS_NOT_NULL(en->te.Else)) {\r
+          r = check_backrefs(en->te.Else, env);\r
+        }\r
       }\r
     }\r
     break;\r
 \r
-  case NT_CALL:\r
-    r = subexp_recursive_check(NCALL(node)->target);\r
-    if (r != 0) SET_CALL_RECURSION(node);\r
-    break;\r
+  case NODE_BACKREF:\r
+    {\r
+      int i;\r
+      BackRefNode* br = BACKREF_(node);\r
+      int* backs = BACKREFS_P(br);\r
+      MemEnv* mem_env = SCANENV_MEMENV(env);\r
 \r
-  case NT_ENCLOSE:\r
-    if (IS_ENCLOSE_MARK2(NENCLOSE(node)))\r
-      return 0;\r
-    else if (IS_ENCLOSE_MARK1(NENCLOSE(node)))\r
-      return 1; /* recursion */\r
-    else {\r
-      SET_ENCLOSE_STATUS(node, NST_MARK2);\r
-      r = subexp_recursive_check(NENCLOSE(node)->target);\r
-      CLEAR_ENCLOSE_STATUS(node, NST_MARK2);\r
+      for (i = 0; i < br->back_num; i++) {\r
+        if (backs[i] > env->num_mem)\r
+          return ONIGERR_INVALID_BACKREF;\r
+\r
+        NODE_STATUS_ADD(mem_env[backs[i]].node, BACKREF);\r
+      }\r
+      r = 0;\r
     }\r
     break;\r
 \r
   default:\r
+    r = 0;\r
     break;\r
   }\r
 \r
@@ -2919,65 +2978,114 @@ subexp_recursive_check(Node* node)
 }\r
 \r
 \r
+#ifdef USE_CALL\r
+\r
+#define RECURSION_EXIST        (1<<0)\r
+#define RECURSION_MUST         (1<<1)\r
+#define RECURSION_INFINITE     (1<<2)\r
+\r
 static int\r
-subexp_recursive_check_trav(Node* node, ScanEnv* env)\r
+infinite_recursive_call_check(Node* node, ScanEnv* env, int head)\r
 {\r
-#define FOUND_CALLED_NODE    1\r
-\r
-  int type;\r
+  int ret;\r
   int r = 0;\r
 \r
-  type = NTYPE(node);\r
-  switch (type) {\r
-  case NT_LIST:\r
-  case NT_ALT:\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_LIST:\r
     {\r
-      int ret;\r
+      Node *x;\r
+      OnigLen min;\r
+\r
+      x = node;\r
       do {\r
-       ret = subexp_recursive_check_trav(NCAR(node), env);\r
-       if (ret == FOUND_CALLED_NODE) r = FOUND_CALLED_NODE;\r
-       else if (ret < 0) return ret;\r
-      } while (IS_NOT_NULL(node = NCDR(node)));\r
+        ret = infinite_recursive_call_check(NODE_CAR(x), env, head);\r
+        if (ret < 0 || (ret & RECURSION_INFINITE) != 0) return ret;\r
+        r |= ret;\r
+        if (head != 0) {\r
+          min = tree_min_len(NODE_CAR(x), env);\r
+          if (min != 0) head = 0;\r
+        }\r
+      } while (IS_NOT_NULL(x = NODE_CDR(x)));\r
     }\r
     break;\r
 \r
-  case NT_QTFR:\r
-    r = subexp_recursive_check_trav(NQTFR(node)->target, env);\r
-    if (NQTFR(node)->upper == 0) {\r
-      if (r == FOUND_CALLED_NODE)\r
-       NQTFR(node)->is_refered = 1;\r
+  case NODE_ALT:\r
+    {\r
+      int must;\r
+\r
+      must = RECURSION_MUST;\r
+      do {\r
+        ret = infinite_recursive_call_check(NODE_CAR(node), env, head);\r
+        if (ret < 0 || (ret & RECURSION_INFINITE) != 0) return ret;\r
+\r
+        r    |= (ret & RECURSION_EXIST);\r
+        must &= ret;\r
+      } while (IS_NOT_NULL(node = NODE_CDR(node)));\r
+      r |= must;\r
     }\r
     break;\r
 \r
-  case NT_ANCHOR:\r
-    {\r
-      AnchorNode* an = NANCHOR(node);\r
-      switch (an->type) {\r
-      case ANCHOR_PREC_READ:\r
-      case ANCHOR_PREC_READ_NOT:\r
-      case ANCHOR_LOOK_BEHIND:\r
-      case ANCHOR_LOOK_BEHIND_NOT:\r
-       r = subexp_recursive_check_trav(an->target, env);\r
-       break;\r
-      }\r
+  case NODE_QUANT:\r
+    r = infinite_recursive_call_check(NODE_BODY(node), env, head);\r
+    if (r < 0) return r;\r
+    if ((r & RECURSION_MUST) != 0) {\r
+      if (QUANT_(node)->lower == 0)\r
+        r &= ~RECURSION_MUST;\r
     }\r
     break;\r
 \r
-  case NT_ENCLOSE:\r
+  case NODE_ANCHOR:\r
+    if (! ANCHOR_HAS_BODY(ANCHOR_(node)))\r
+      break;\r
+    /* fall */\r
+  case NODE_CALL:\r
+    r = infinite_recursive_call_check(NODE_BODY(node), env, head);\r
+    break;\r
+\r
+  case NODE_ENCLOSURE:\r
     {\r
-      EncloseNode* en = NENCLOSE(node);\r
-\r
-      if (! IS_ENCLOSE_RECURSION(en)) {\r
-       if (IS_ENCLOSE_CALLED(en)) {\r
-         SET_ENCLOSE_STATUS(node, NST_MARK1);\r
-         r = subexp_recursive_check(en->target);\r
-         if (r != 0) SET_ENCLOSE_STATUS(node, NST_RECURSION);\r
-         CLEAR_ENCLOSE_STATUS(node, NST_MARK1);\r
-       }\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+\r
+      if (en->type == ENCLOSURE_MEMORY) {\r
+        if (NODE_IS_MARK2(node))\r
+          return 0;\r
+        else if (NODE_IS_MARK1(node))\r
+          return (head == 0 ? RECURSION_EXIST | RECURSION_MUST\r
+                  : RECURSION_EXIST | RECURSION_MUST | RECURSION_INFINITE);\r
+        else {\r
+          NODE_STATUS_ADD(node, MARK2);\r
+          r = infinite_recursive_call_check(NODE_BODY(node), env, head);\r
+          NODE_STATUS_REMOVE(node, MARK2);\r
+        }\r
+      }\r
+      else if (en->type == ENCLOSURE_IF_ELSE) {\r
+        int eret;\r
+\r
+        ret = infinite_recursive_call_check(NODE_BODY(node), env, head);\r
+        if (ret < 0 || (ret & RECURSION_INFINITE) != 0) return ret;\r
+        r |= ret;\r
+        if (IS_NOT_NULL(en->te.Then)) {\r
+          OnigLen min;\r
+          if (head != 0) {\r
+            min = tree_min_len(NODE_BODY(node), env);\r
+          }\r
+          else min = 0;\r
+\r
+          ret = infinite_recursive_call_check(en->te.Then, env, min != 0 ? 0:head);\r
+          if (ret < 0 || (ret & RECURSION_INFINITE) != 0) return ret;\r
+          r |= ret;\r
+        }\r
+        if (IS_NOT_NULL(en->te.Else)) {\r
+          eret = infinite_recursive_call_check(en->te.Else, env, head);\r
+          if (eret < 0 || (eret & RECURSION_INFINITE) != 0) return eret;\r
+          r |= (eret & RECURSION_EXIST);\r
+          if ((eret & RECURSION_MUST) == 0)\r
+            r &= ~RECURSION_MUST;\r
+        }\r
+      }\r
+      else {\r
+        r = infinite_recursive_call_check(NODE_BODY(node), env, head);\r
       }\r
-      r = subexp_recursive_check_trav(en->target, env);\r
-      if (IS_ENCLOSE_CALLED(en))\r
-       r |= FOUND_CALLED_NODE;\r
     }\r
     break;\r
 \r
@@ -2989,102 +3097,217 @@ subexp_recursive_check_trav(Node* node, ScanEnv* env)
 }\r
 \r
 static int\r
-setup_subexp_call(Node* node, ScanEnv* env)\r
+infinite_recursive_call_check_trav(Node* node, ScanEnv* env)\r
 {\r
-  int type;\r
-  int r = 0;\r
+  int r;\r
 \r
-  type = NTYPE(node);\r
-  switch (type) {\r
-  case NT_LIST:\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_LIST:\r
+  case NODE_ALT:\r
     do {\r
-      r = setup_subexp_call(NCAR(node), env);\r
-    } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
+      r = infinite_recursive_call_check_trav(NODE_CAR(node), env);\r
+    } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));\r
+    break;\r
+\r
+  case NODE_ANCHOR:\r
+    if (! ANCHOR_HAS_BODY(ANCHOR_(node))) {\r
+      r = 0;\r
+      break;\r
+    }\r
+    /* fall */\r
+  case NODE_QUANT:\r
+    r = infinite_recursive_call_check_trav(NODE_BODY(node), env);\r
+    break;\r
+\r
+  case NODE_ENCLOSURE:\r
+    {\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+\r
+      if (en->type == ENCLOSURE_MEMORY) {\r
+        if (NODE_IS_RECURSION(node) && NODE_IS_CALLED(node)) {\r
+          int ret;\r
+\r
+          NODE_STATUS_ADD(node, MARK1);\r
+\r
+          ret = infinite_recursive_call_check(NODE_BODY(node), env, 1);\r
+          if (ret < 0) return ret;\r
+          else if ((ret & (RECURSION_MUST | RECURSION_INFINITE)) != 0)\r
+            return ONIGERR_NEVER_ENDING_RECURSION;\r
+\r
+          NODE_STATUS_REMOVE(node, MARK1);\r
+        }\r
+      }\r
+      else if (en->type == ENCLOSURE_IF_ELSE) {\r
+        if (IS_NOT_NULL(en->te.Then)) {\r
+          r = infinite_recursive_call_check_trav(en->te.Then, env);\r
+          if (r != 0) return r;\r
+        }\r
+        if (IS_NOT_NULL(en->te.Else)) {\r
+          r = infinite_recursive_call_check_trav(en->te.Else, env);\r
+          if (r != 0) return r;\r
+        }\r
+      }\r
+    }\r
+\r
+    r = infinite_recursive_call_check_trav(NODE_BODY(node), env);\r
+    break;\r
+\r
+  default:\r
+    r = 0;\r
     break;\r
+  }\r
+\r
+  return r;\r
+}\r
+\r
+static int\r
+recursive_call_check(Node* node)\r
+{\r
+  int r;\r
 \r
-  case NT_ALT:\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_LIST:\r
+  case NODE_ALT:\r
+    r = 0;\r
     do {\r
-      r = setup_subexp_call(NCAR(node), env);\r
-    } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
+      r |= recursive_call_check(NODE_CAR(node));\r
+    } while (IS_NOT_NULL(node = NODE_CDR(node)));\r
     break;\r
 \r
-  case NT_QTFR:\r
-    r = setup_subexp_call(NQTFR(node)->target, env);\r
+  case NODE_ANCHOR:\r
+    if (! ANCHOR_HAS_BODY(ANCHOR_(node))) {\r
+      r = 0;\r
+      break;\r
+    }\r
+    /* fall */\r
+  case NODE_QUANT:\r
+    r = recursive_call_check(NODE_BODY(node));\r
     break;\r
-  case NT_ENCLOSE:\r
-    r = setup_subexp_call(NENCLOSE(node)->target, env);\r
+\r
+  case NODE_CALL:\r
+    r = recursive_call_check(NODE_BODY(node));\r
+    if (r != 0) {\r
+      if (NODE_IS_MARK1(NODE_BODY(node)))\r
+        NODE_STATUS_ADD(node, RECURSION);\r
+    }\r
     break;\r
 \r
-  case NT_CALL:\r
+  case NODE_ENCLOSURE:\r
     {\r
-      CallNode* cn = NCALL(node);\r
-      Node** nodes = SCANENV_MEM_NODES(env);\r
-\r
-      if (cn->group_num != 0) {\r
-       int gnum = cn->group_num;\r
-\r
-#ifdef USE_NAMED_GROUP\r
-       if (env->num_named > 0 &&\r
-           IS_SYNTAX_BV(env->syntax, ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP) &&\r
-           !ONIG_IS_OPTION_ON(env->option, ONIG_OPTION_CAPTURE_GROUP)) {\r
-         return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED;\r
-       }\r
-#endif\r
-       if (gnum > env->num_mem) {\r
-         onig_scan_env_set_error_string(env,\r
-                ONIGERR_UNDEFINED_GROUP_REFERENCE, cn->name, cn->name_end);\r
-         return ONIGERR_UNDEFINED_GROUP_REFERENCE;\r
-       }\r
-\r
-#ifdef USE_NAMED_GROUP\r
-      set_call_attr:\r
-#endif\r
-       cn->target = nodes[cn->group_num];\r
-       if (IS_NULL(cn->target)) {\r
-         onig_scan_env_set_error_string(env,\r
-                ONIGERR_UNDEFINED_NAME_REFERENCE, cn->name, cn->name_end);\r
-         return ONIGERR_UNDEFINED_NAME_REFERENCE;\r
-       }\r
-       SET_ENCLOSE_STATUS(cn->target, NST_CALLED);\r
-       BIT_STATUS_ON_AT(env->bt_mem_start, cn->group_num);\r
-       cn->unset_addr_list = env->unset_addr_list;\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+\r
+      if (en->type == ENCLOSURE_MEMORY) {\r
+        if (NODE_IS_MARK2(node))\r
+          return 0;\r
+        else if (NODE_IS_MARK1(node))\r
+          return 1; /* recursion */\r
+        else {\r
+          NODE_STATUS_ADD(node, MARK2);\r
+          r = recursive_call_check(NODE_BODY(node));\r
+          NODE_STATUS_REMOVE(node, MARK2);\r
+        }\r
+      }\r
+      else if (en->type == ENCLOSURE_IF_ELSE) {\r
+        r = 0;\r
+        if (IS_NOT_NULL(en->te.Then)) {\r
+          r |= recursive_call_check(en->te.Then);\r
+        }\r
+        if (IS_NOT_NULL(en->te.Else)) {\r
+          r |= recursive_call_check(en->te.Else);\r
+        }\r
+        r |= recursive_call_check(NODE_BODY(node));\r
       }\r
-#ifdef USE_NAMED_GROUP\r
       else {\r
-       int *refs;\r
-\r
-       int n = onig_name_to_group_numbers(env->reg, cn->name, cn->name_end,\r
-                                          &refs);\r
-       if (n <= 0) {\r
-         onig_scan_env_set_error_string(env,\r
-                ONIGERR_UNDEFINED_NAME_REFERENCE, cn->name, cn->name_end);\r
-         return ONIGERR_UNDEFINED_NAME_REFERENCE;\r
-       }\r
-       else if (n > 1) {\r
-         onig_scan_env_set_error_string(env,\r
-           ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL, cn->name, cn->name_end);\r
-         return ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL;\r
-       }\r
-       else {\r
-         cn->group_num = refs[0];\r
-         goto set_call_attr;\r
-       }\r
+        r = recursive_call_check(NODE_BODY(node));\r
       }\r
-#endif\r
     }\r
     break;\r
 \r
-  case NT_ANCHOR:\r
+  default:\r
+    r = 0;\r
+    break;\r
+  }\r
+\r
+  return r;\r
+}\r
+\r
+#define IN_RECURSION         (1<<0)\r
+#define FOUND_CALLED_NODE    1\r
+\r
+static int\r
+recursive_call_check_trav(Node* node, ScanEnv* env, int state)\r
+{\r
+  int r = 0;\r
+\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_LIST:\r
+  case NODE_ALT:\r
     {\r
-      AnchorNode* an = NANCHOR(node);\r
+      int ret;\r
+      do {\r
+        ret = recursive_call_check_trav(NODE_CAR(node), env, state);\r
+        if (ret == FOUND_CALLED_NODE) r = FOUND_CALLED_NODE;\r
+        else if (ret < 0) return ret;\r
+      } while (IS_NOT_NULL(node = NODE_CDR(node)));\r
+    }\r
+    break;\r
 \r
-      switch (an->type) {\r
-      case ANCHOR_PREC_READ:\r
-      case ANCHOR_PREC_READ_NOT:\r
-      case ANCHOR_LOOK_BEHIND:\r
-      case ANCHOR_LOOK_BEHIND_NOT:\r
-       r = setup_subexp_call(an->target, env);\r
-       break;\r
+  case NODE_QUANT:\r
+    r = recursive_call_check_trav(NODE_BODY(node), env, state);\r
+    if (QUANT_(node)->upper == 0) {\r
+      if (r == FOUND_CALLED_NODE)\r
+        QUANT_(node)->is_refered = 1;\r
+    }\r
+    break;\r
+\r
+  case NODE_ANCHOR:\r
+    {\r
+      AnchorNode* an = ANCHOR_(node);\r
+      if (ANCHOR_HAS_BODY(an))\r
+        r = recursive_call_check_trav(NODE_ANCHOR_BODY(an), env, state);\r
+    }\r
+    break;\r
+\r
+  case NODE_ENCLOSURE:\r
+    {\r
+      int ret;\r
+      int state1;\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+\r
+      if (en->type == ENCLOSURE_MEMORY) {\r
+        if (NODE_IS_CALLED(node) || (state & IN_RECURSION) != 0) {\r
+          if (! NODE_IS_RECURSION(node)) {\r
+            NODE_STATUS_ADD(node, MARK1);\r
+            r = recursive_call_check(NODE_BODY(node));\r
+            if (r != 0)\r
+              NODE_STATUS_ADD(node, RECURSION);\r
+            NODE_STATUS_REMOVE(node, MARK1);\r
+          }\r
+\r
+          if (NODE_IS_CALLED(node))\r
+            r = FOUND_CALLED_NODE;\r
+        }\r
+      }\r
+\r
+      state1 = state;\r
+      if (NODE_IS_RECURSION(node))\r
+        state1 |= IN_RECURSION;\r
+\r
+      ret = recursive_call_check_trav(NODE_BODY(node), env, state1);\r
+      if (ret == FOUND_CALLED_NODE)\r
+        r = FOUND_CALLED_NODE;\r
+\r
+      if (en->type == ENCLOSURE_IF_ELSE) {\r
+        if (IS_NOT_NULL(en->te.Then)) {\r
+          ret = recursive_call_check_trav(en->te.Then, env, state1);\r
+          if (ret == FOUND_CALLED_NODE)\r
+            r = FOUND_CALLED_NODE;\r
+        }\r
+        if (IS_NOT_NULL(en->te.Else)) {\r
+          ret = recursive_call_check_trav(en->te.Else, env, state1);\r
+          if (ret == FOUND_CALLED_NODE)\r
+            r = FOUND_CALLED_NODE;\r
+        }\r
       }\r
     }\r
     break;\r
@@ -3095,6 +3318,7 @@ setup_subexp_call(Node* node, ScanEnv* env)
 \r
   return r;\r
 }\r
+\r
 #endif\r
 \r
 /* divide different length alternatives in look-behind.\r
@@ -3105,28 +3329,28 @@ static int
 divide_look_behind_alternatives(Node* node)\r
 {\r
   Node *head, *np, *insert_node;\r
-  AnchorNode* an = NANCHOR(node);\r
+  AnchorNode* an = ANCHOR_(node);\r
   int anc_type = an->type;\r
 \r
-  head = an->target;\r
-  np = NCAR(head);\r
+  head = NODE_ANCHOR_BODY(an);\r
+  np = NODE_CAR(head);\r
   swap_node(node, head);\r
-  NCAR(node) = head;\r
-  NANCHOR(head)->target = np;\r
+  NODE_CAR(node) = head;\r
+  NODE_BODY(head) = np;\r
 \r
   np = node;\r
-  while ((np = NCDR(np)) != NULL_NODE) {\r
-    insert_node = onig_node_new_anchor(anc_type);\r
+  while (IS_NOT_NULL(np = NODE_CDR(np))) {\r
+    insert_node = onig_node_new_anchor(anc_type, an->ascii_mode);\r
     CHECK_NULL_RETURN_MEMERR(insert_node);\r
-    NANCHOR(insert_node)->target = NCAR(np);\r
-    NCAR(np) = insert_node;\r
+    NODE_BODY(insert_node) = NODE_CAR(np);\r
+    NODE_CAR(np) = insert_node;\r
   }\r
 \r
   if (anc_type == ANCHOR_LOOK_BEHIND_NOT) {\r
     np = node;\r
     do {\r
-      SET_NTYPE(np, NT_LIST);  /* alt -> list */\r
-    } while ((np = NCDR(np)) != NULL_NODE);\r
+      NODE_SET_TYPE(np, NODE_LIST);  /* alt -> list */\r
+    } while (IS_NOT_NULL(np = NODE_CDR(np)));\r
   }\r
   return 0;\r
 }\r
@@ -3135,9 +3359,9 @@ static int
 setup_look_behind(Node* node, regex_t* reg, ScanEnv* env)\r
 {\r
   int r, len;\r
-  AnchorNode* an = NANCHOR(node);\r
+  AnchorNode* an = ANCHOR_(node);\r
 \r
-  r = get_char_length_tree(an->target, reg, &len);\r
+  r = get_char_length_tree(NODE_ANCHOR_BODY(an), reg, &len);\r
   if (r == 0)\r
     an->char_len = len;\r
   else if (r == GET_CHAR_LEN_VARLEN)\r
@@ -3155,44 +3379,43 @@ setup_look_behind(Node* node, regex_t* reg, ScanEnv* env)
 static int\r
 next_setup(Node* node, Node* next_node, regex_t* reg)\r
 {\r
-  int type;\r
+  NodeType type;\r
 \r
  retry:\r
-  type = NTYPE(node);\r
-  if (type == NT_QTFR) {\r
-    QtfrNode* qn = NQTFR(node);\r
+  type = NODE_TYPE(node);\r
+  if (type == NODE_QUANT) {\r
+    QuantNode* qn = QUANT_(node);\r
     if (qn->greedy && IS_REPEAT_INFINITE(qn->upper)) {\r
-#ifdef USE_QTFR_PEEK_NEXT\r
+#ifdef USE_QUANT_PEEK_NEXT\r
       Node* n = get_head_value_node(next_node, 1, reg);\r
       /* '\0': for UTF-16BE etc... */\r
-      if (IS_NOT_NULL(n) && NSTR(n)->s[0] != '\0') {\r
-       qn->next_head_exact = n;\r
+      if (IS_NOT_NULL(n) && STR_(n)->s[0] != '\0') {\r
+        qn->next_head_exact = n;\r
       }\r
 #endif\r
       /* automatic posseivation a*b ==> (?>a*)b */\r
       if (qn->lower <= 1) {\r
-       int ttype = NTYPE(qn->target);\r
-       if (IS_NODE_TYPE_SIMPLE(ttype)) {\r
-         Node *x, *y;\r
-         x = get_head_value_node(qn->target, 0, reg);\r
-         if (IS_NOT_NULL(x)) {\r
-           y = get_head_value_node(next_node,  0, reg);\r
-           if (IS_NOT_NULL(y) && is_not_included(x, y, reg)) {\r
-             Node* en = onig_node_new_enclose(ENCLOSE_STOP_BACKTRACK);\r
-             CHECK_NULL_RETURN_MEMERR(en);\r
-             SET_ENCLOSE_STATUS(en, NST_STOP_BT_SIMPLE_REPEAT);\r
-             swap_node(node, en);\r
-             NENCLOSE(node)->target = en;\r
-           }\r
-         }\r
-       }\r
+        if (NODE_IS_SIMPLE_TYPE(NODE_BODY(node))) {\r
+          Node *x, *y;\r
+          x = get_head_value_node(NODE_BODY(node), 0, reg);\r
+          if (IS_NOT_NULL(x)) {\r
+            y = get_head_value_node(next_node,  0, reg);\r
+            if (IS_NOT_NULL(y) && is_exclusive(x, y, reg)) {\r
+              Node* en = onig_node_new_enclosure(ENCLOSURE_STOP_BACKTRACK);\r
+              CHECK_NULL_RETURN_MEMERR(en);\r
+              NODE_STATUS_ADD(en, STOP_BT_SIMPLE_REPEAT);\r
+              swap_node(node, en);\r
+              NODE_BODY(node) = en;\r
+            }\r
+          }\r
+        }\r
       }\r
     }\r
   }\r
-  else if (type == NT_ENCLOSE) {\r
-    EncloseNode* en = NENCLOSE(node);\r
-    if (en->type == ENCLOSE_MEMORY) {\r
-      node = en->target;\r
+  else if (type == NODE_ENCLOSURE) {\r
+    EnclosureNode* en = ENCLOSURE_(node);\r
+    if (en->type == ENCLOSURE_MEMORY) {\r
+      node = NODE_BODY(node);\r
       goto retry;\r
     }\r
   }\r
@@ -3206,10 +3429,10 @@ update_string_node_case_fold(regex_t* reg, Node *node)
   UChar *p, *end, buf[ONIGENC_MBC_CASE_FOLD_MAXLEN];\r
   UChar *sbuf, *ebuf, *sp;\r
   int r, i, len, sbuf_size;\r
-  StrNode* sn = NSTR(node);\r
+  StrNode* sn = STR_(node);\r
 \r
   end = sn->end;\r
-  sbuf_size = (int)(end - sn->s) * 2;\r
+  sbuf_size = (int )(end - sn->s) * 2;\r
   sbuf = (UChar* )xmalloc(sbuf_size);\r
   CHECK_NULL_RETURN_MEMERR(sbuf);\r
   ebuf = sbuf + sbuf_size;\r
@@ -3242,8 +3465,7 @@ update_string_node_case_fold(regex_t* reg, Node *node)
 }\r
 \r
 static int\r
-expand_case_fold_make_rem_string(Node** rnode, UChar *s, UChar *end,\r
-                                regex_t* reg)\r
+expand_case_fold_make_rem_string(Node** rnode, UChar *s, UChar *end, regex_t* reg)\r
 {\r
   int r;\r
   Node *node;\r
@@ -3257,21 +3479,21 @@ expand_case_fold_make_rem_string(Node** rnode, UChar *s, UChar *end,
     return r;\r
   }\r
 \r
-  NSTRING_SET_AMBIG(node);\r
-  NSTRING_SET_DONT_GET_OPT_INFO(node);\r
+  NODE_STRING_SET_AMBIG(node);\r
+  NODE_STRING_SET_DONT_GET_OPT_INFO(node);\r
   *rnode = node;\r
   return 0;\r
 }\r
 \r
 static int\r
-expand_case_fold_string_alt(int item_num, OnigCaseFoldCodeItem items[],\r
-                           UChar *p, int slen, UChar *end,\r
-                           regex_t* reg, Node **rnode)\r
+expand_case_fold_string_alt(int item_num, OnigCaseFoldCodeItem items[], UChar *p,\r
+                            int slen, UChar *end, regex_t* reg, Node **rnode)\r
 {\r
-  int r, i, j, len, varlen;\r
+  int r, i, j;\r
+  int len;\r
+  int varlen;\r
   Node *anode, *var_anode, *snode, *xnode, *an;\r
   UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN];\r
-  xnode = NULL_NODE;\r
 \r
   *rnode = var_anode = NULL_NODE;\r
 \r
@@ -3289,11 +3511,11 @@ expand_case_fold_string_alt(int item_num, OnigCaseFoldCodeItem items[],
 \r
     xnode = onig_node_new_list(NULL, NULL);\r
     if (IS_NULL(xnode)) goto mem_err;\r
-    NCAR(var_anode) = xnode;\r
+    NODE_CAR(var_anode) = xnode;\r
 \r
     anode = onig_node_new_alt(NULL_NODE, NULL_NODE);\r
     if (IS_NULL(anode)) goto mem_err;\r
-    NCAR(xnode) = anode;\r
+    NODE_CAR(xnode) = anode;\r
   }\r
   else {\r
     *rnode = anode = onig_node_new_alt(NULL_NODE, NULL_NODE);\r
@@ -3303,7 +3525,7 @@ expand_case_fold_string_alt(int item_num, OnigCaseFoldCodeItem items[],
   snode = onig_node_new_str(p, p + slen);\r
   if (IS_NULL(snode)) goto mem_err;\r
 \r
-  NCAR(anode) = snode;\r
+  NODE_CAR(anode) = snode;\r
 \r
   for (i = 0; i < item_num; i++) {\r
     snode = onig_node_new_str(NULL, NULL);\r
@@ -3312,8 +3534,8 @@ expand_case_fold_string_alt(int item_num, OnigCaseFoldCodeItem items[],
     for (j = 0; j < items[i].code_len; j++) {\r
       len = ONIGENC_CODE_TO_MBC(reg->enc, items[i].code[j], buf);\r
       if (len < 0) {\r
-       r = len;\r
-       goto mem_err2;\r
+        r = len;\r
+        goto mem_err2;\r
       }\r
 \r
       r = onig_node_str_cat(snode, buf, buf + len);\r
@@ -3326,7 +3548,7 @@ expand_case_fold_string_alt(int item_num, OnigCaseFoldCodeItem items[],
     }\r
 \r
     if (items[i].byte_len != slen) {\r
-      Node *rem = NULL_NODE;\r
+      Node *rem;\r
       UChar *q = p + items[i].byte_len;\r
 \r
       if (q < end) {\r
@@ -3349,24 +3571,18 @@ expand_case_fold_string_alt(int item_num, OnigCaseFoldCodeItem items[],
           goto mem_err;\r
         }\r
 \r
-        NCAR(an) = xnode;\r
+        NODE_CAR(an) = xnode;\r
       }\r
       else {\r
-        NCAR(an) = snode;\r
+        NODE_CAR(an) = snode;\r
       }\r
 \r
-      if (var_anode == NULL) {\r
-        onig_node_free(an);\r
-        onig_node_free(xnode);\r
-        onig_node_free(rem);\r
-        goto mem_err2;\r
-      }\r
-      NCDR(var_anode) = an;\r
+      NODE_CDR(var_anode) = an;\r
       var_anode = an;\r
     }\r
     else {\r
-      NCAR(an)     = snode;\r
-      NCDR(anode) = an;\r
+      NODE_CAR(an)     = snode;\r
+      NODE_CDR(anode) = an;\r
       anode = an;\r
     }\r
   }\r
@@ -3391,9 +3607,9 @@ expand_case_fold_string(Node* node, regex_t* reg)
   UChar *start, *end, *p;\r
   Node *top_root, *root, *snode, *prev_node;\r
   OnigCaseFoldCodeItem items[ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM];\r
-  StrNode* sn = NSTR(node);\r
+  StrNode* sn = STR_(node);\r
 \r
-  if (NSTRING_IS_AMBIG(node)) return 0;\r
+  if (NODE_STRING_IS_AMBIG(node)) return 0;\r
 \r
   start = sn->s;\r
   end   = sn->end;\r
@@ -3404,8 +3620,8 @@ expand_case_fold_string(Node* node, regex_t* reg)
   alt_num = 1;\r
   p = start;\r
   while (p < end) {\r
-    n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(reg->enc, reg->case_fold_flag,\r
-                                          p, end, items);\r
+    n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(reg->enc, reg->case_fold_flag, p, end,\r
+                                           items);\r
     if (n < 0) {\r
       r = n;\r
       goto err;\r
@@ -3415,22 +3631,22 @@ expand_case_fold_string(Node* node, regex_t* reg)
 \r
     if (n == 0) {\r
       if (IS_NULL(snode)) {\r
-       if (IS_NULL(root) && IS_NOT_NULL(prev_node)) {\r
-         top_root = root = onig_node_list_add(NULL_NODE, prev_node);\r
-         if (IS_NULL(root)) {\r
-           onig_node_free(prev_node);\r
-           goto mem_err;\r
-         }\r
-       }\r
-\r
-       prev_node = snode = onig_node_new_str(NULL, NULL);\r
-       if (IS_NULL(snode)) goto mem_err;\r
-       if (IS_NOT_NULL(root)) {\r
-         if (IS_NULL(onig_node_list_add(root, snode))) {\r
-           onig_node_free(snode);\r
-           goto mem_err;\r
-         }\r
-       }\r
+        if (IS_NULL(root) && IS_NOT_NULL(prev_node)) {\r
+          top_root = root = onig_node_list_add(NULL_NODE, prev_node);\r
+          if (IS_NULL(root)) {\r
+            onig_node_free(prev_node);\r
+            goto mem_err;\r
+          }\r
+        }\r
+\r
+        prev_node = snode = onig_node_new_str(NULL, NULL);\r
+        if (IS_NULL(snode)) goto mem_err;\r
+        if (IS_NOT_NULL(root)) {\r
+          if (IS_NULL(onig_node_list_add(root, snode))) {\r
+            onig_node_free(snode);\r
+            goto mem_err;\r
+          }\r
+        }\r
       }\r
 \r
       r = onig_node_str_cat(snode, p, p + len);\r
@@ -3441,37 +3657,37 @@ expand_case_fold_string(Node* node, regex_t* reg)
       if (alt_num > THRESHOLD_CASE_FOLD_ALT_FOR_EXPANSION) break;\r
 \r
       if (IS_NULL(root) && IS_NOT_NULL(prev_node)) {\r
-       top_root = root = onig_node_list_add(NULL_NODE, prev_node);\r
-       if (IS_NULL(root)) {\r
-         onig_node_free(prev_node);\r
-         goto mem_err;\r
-       }\r
+        top_root = root = onig_node_list_add(NULL_NODE, prev_node);\r
+        if (IS_NULL(root)) {\r
+          onig_node_free(prev_node);\r
+          goto mem_err;\r
+        }\r
       }\r
 \r
       r = expand_case_fold_string_alt(n, items, p, len, end, reg, &prev_node);\r
       if (r < 0) goto mem_err;\r
       if (r == 1) {\r
-       if (IS_NULL(root)) {\r
-         top_root = prev_node;\r
-       }\r
-       else {\r
-         if (IS_NULL(onig_node_list_add(root, prev_node))) {\r
-           onig_node_free(prev_node);\r
-           goto mem_err;\r
-         }\r
-       }\r
-\r
-       root = NCAR(prev_node);\r
-      }\r
-      else { /* r == 0 */\r
-       if (IS_NOT_NULL(root)) {\r
-         if (IS_NULL(onig_node_list_add(root, prev_node))) {\r
-           onig_node_free(prev_node);\r
-           goto mem_err;\r
-         }\r
-       }\r
-      }\r
-\r
+        if (IS_NULL(root)) {\r
+          top_root = prev_node;\r
+        }\r
+        else {\r
+          if (IS_NULL(onig_node_list_add(root, prev_node))) {\r
+            onig_node_free(prev_node);\r
+            goto mem_err;\r
+          }\r
+        }\r
+\r
+        root = NODE_CAR(prev_node);\r
+      }\r
+      else { /* r == 0 */\r
+        if (IS_NOT_NULL(root)) {\r
+          if (IS_NULL(onig_node_list_add(root, prev_node))) {\r
+            onig_node_free(prev_node);\r
+            goto mem_err;\r
+          }\r
+        }\r
+      }\r
+\r
       snode = NULL_NODE;\r
     }\r
 \r
@@ -3487,185 +3703,712 @@ expand_case_fold_string(Node* node, regex_t* reg)
     if (IS_NOT_NULL(prev_node) && IS_NULL(root)) {\r
       top_root = root = onig_node_list_add(NULL_NODE, prev_node);\r
       if (IS_NULL(root)) {\r
-       onig_node_free(srem);\r
-       onig_node_free(prev_node);\r
-       goto mem_err;\r
+        onig_node_free(srem);\r
+        onig_node_free(prev_node);\r
+        goto mem_err;\r
+      }\r
+    }\r
+\r
+    if (IS_NULL(root)) {\r
+      prev_node = srem;\r
+    }\r
+    else {\r
+      if (IS_NULL(onig_node_list_add(root, srem))) {\r
+        onig_node_free(srem);\r
+        goto mem_err;\r
+      }\r
+    }\r
+  }\r
+\r
+  /* ending */\r
+  top_root = (IS_NOT_NULL(top_root) ? top_root : prev_node);\r
+  swap_node(node, top_root);\r
+  onig_node_free(top_root);\r
+  return 0;\r
+\r
+ mem_err:\r
+  r = ONIGERR_MEMORY;\r
+\r
+ err:\r
+  onig_node_free(top_root);\r
+  return r;\r
+}\r
+\r
+#ifdef USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT\r
+static enum QuantBodyEmpty\r
+quantifiers_memory_node_info(Node* node)\r
+{\r
+  int r = QUANT_BODY_IS_EMPTY;\r
+\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_LIST:\r
+  case NODE_ALT:\r
+    {\r
+      int v;\r
+      do {\r
+        v = quantifiers_memory_node_info(NODE_CAR(node));\r
+        if (v > r) r = v;\r
+      } while (IS_NOT_NULL(node = NODE_CDR(node)));\r
+    }\r
+    break;\r
+\r
+#ifdef USE_CALL\r
+  case NODE_CALL:\r
+    if (NODE_IS_RECURSION(node)) {\r
+      return QUANT_BODY_IS_EMPTY_REC; /* tiny version */\r
+    }\r
+    else\r
+      r = quantifiers_memory_node_info(NODE_BODY(node));\r
+    break;\r
+#endif\r
+\r
+  case NODE_QUANT:\r
+    {\r
+      QuantNode* qn = QUANT_(node);\r
+      if (qn->upper != 0) {\r
+        r = quantifiers_memory_node_info(NODE_BODY(node));\r
+      }\r
+    }\r
+    break;\r
+\r
+  case NODE_ENCLOSURE:\r
+    {\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+      switch (en->type) {\r
+      case ENCLOSURE_MEMORY:\r
+        if (NODE_IS_RECURSION(node)) {\r
+          return QUANT_BODY_IS_EMPTY_REC;\r
+        }\r
+        return QUANT_BODY_IS_EMPTY_MEM;\r
+        break;\r
+\r
+      case ENCLOSURE_OPTION:\r
+      case ENCLOSURE_STOP_BACKTRACK:\r
+        r = quantifiers_memory_node_info(NODE_BODY(node));\r
+        break;\r
+      case ENCLOSURE_IF_ELSE:\r
+        {\r
+          int v;\r
+          r = quantifiers_memory_node_info(NODE_BODY(node));\r
+          if (IS_NOT_NULL(en->te.Then)) {\r
+            v = quantifiers_memory_node_info(en->te.Then);\r
+            if (v > r) r = v;\r
+          }\r
+          if (IS_NOT_NULL(en->te.Else)) {\r
+            v = quantifiers_memory_node_info(en->te.Else);\r
+            if (v > r) r = v;\r
+          }\r
+        }\r
+        break;\r
+      default:\r
+        break;\r
+      }\r
+    }\r
+    break;\r
+\r
+  case NODE_BACKREF:\r
+  case NODE_STRING:\r
+  case NODE_CTYPE:\r
+  case NODE_CCLASS:\r
+  case NODE_ANCHOR:\r
+  case NODE_GIMMICK:\r
+  default:\r
+    break;\r
+  }\r
+\r
+  return r;\r
+}\r
+#endif /* USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT */\r
+\r
+\r
+#define IN_ALT          (1<<0)\r
+#define IN_NOT          (1<<1)\r
+#define IN_REAL_REPEAT  (1<<2)\r
+#define IN_VAR_REPEAT   (1<<3)\r
+#define IN_ZERO_REPEAT  (1<<4)\r
+#define IN_MULTI_ENTRY  (1<<5)\r
+\r
+#ifdef USE_CALL\r
+\r
+#ifdef __GNUC__\r
+__inline\r
+#endif\r
+static int\r
+setup_call_node_call(CallNode* cn, ScanEnv* env, int state)\r
+{\r
+  MemEnv* mem_env = SCANENV_MEMENV(env);\r
+\r
+  if (cn->by_number != 0) {\r
+    int gnum = cn->group_num;\r
+\r
+    if (env->num_named > 0 &&\r
+        IS_SYNTAX_BV(env->syntax, ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP) &&\r
+        ! ONIG_IS_OPTION_ON(env->options, ONIG_OPTION_CAPTURE_GROUP)) {\r
+      return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED;\r
+    }\r
+\r
+    if (gnum > env->num_mem) {\r
+      onig_scan_env_set_error_string(env, ONIGERR_UNDEFINED_GROUP_REFERENCE,\r
+                                     cn->name, cn->name_end);\r
+      return ONIGERR_UNDEFINED_GROUP_REFERENCE;\r
+    }\r
+\r
+  set_call_attr:\r
+    NODE_CALL_BODY(cn) = mem_env[cn->group_num].node;\r
+    if (IS_NULL(NODE_CALL_BODY(cn))) {\r
+      onig_scan_env_set_error_string(env, ONIGERR_UNDEFINED_NAME_REFERENCE,\r
+                                     cn->name, cn->name_end);\r
+      return ONIGERR_UNDEFINED_NAME_REFERENCE;\r
+    }\r
+  }\r
+  else {\r
+    int *refs;\r
+\r
+    int n = onig_name_to_group_numbers(env->reg, cn->name, cn->name_end, &refs);\r
+    if (n <= 0) {\r
+      onig_scan_env_set_error_string(env, ONIGERR_UNDEFINED_NAME_REFERENCE,\r
+                                     cn->name, cn->name_end);\r
+      return ONIGERR_UNDEFINED_NAME_REFERENCE;\r
+    }\r
+    else if (n > 1) {\r
+      onig_scan_env_set_error_string(env, ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL,\r
+                                     cn->name, cn->name_end);\r
+      return ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL;\r
+    }\r
+    else {\r
+      cn->group_num = refs[0];\r
+      goto set_call_attr;\r
+    }\r
+  }\r
+\r
+  return 0;\r
+}\r
+\r
+static void\r
+setup_call2_call(Node* node)\r
+{\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_LIST:\r
+  case NODE_ALT:\r
+    do {\r
+      setup_call2_call(NODE_CAR(node));\r
+    } while (IS_NOT_NULL(node = NODE_CDR(node)));\r
+    break;\r
+\r
+  case NODE_QUANT:\r
+    setup_call2_call(NODE_BODY(node));\r
+    break;\r
+\r
+  case NODE_ANCHOR:\r
+    if (ANCHOR_HAS_BODY(ANCHOR_(node)))\r
+      setup_call2_call(NODE_BODY(node));\r
+    break;\r
+\r
+  case NODE_ENCLOSURE:\r
+    {\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+\r
+      if (en->type == ENCLOSURE_MEMORY) {\r
+        if (! NODE_IS_MARK1(node)) {\r
+          NODE_STATUS_ADD(node, MARK1);\r
+          setup_call2_call(NODE_BODY(node));\r
+          NODE_STATUS_REMOVE(node, MARK1);\r
+        }\r
+      }\r
+      else if (en->type == ENCLOSURE_IF_ELSE) {\r
+        setup_call2_call(NODE_BODY(node));\r
+        if (IS_NOT_NULL(en->te.Then))\r
+          setup_call2_call(en->te.Then);\r
+        if (IS_NOT_NULL(en->te.Else))\r
+          setup_call2_call(en->te.Else);\r
+      }\r
+      else {\r
+        setup_call2_call(NODE_BODY(node));\r
+      }\r
+    }\r
+    break;\r
+\r
+  case NODE_CALL:\r
+    if (! NODE_IS_MARK1(node)) {\r
+      NODE_STATUS_ADD(node, MARK1);\r
+      {\r
+        CallNode* cn = CALL_(node);\r
+        Node* called = NODE_CALL_BODY(cn);\r
+\r
+        cn->entry_count++;\r
+\r
+        NODE_STATUS_ADD(called, CALLED);\r
+        ENCLOSURE_(called)->m.entry_count++;\r
+        setup_call2_call(called);\r
+      }\r
+      NODE_STATUS_REMOVE(node, MARK1);\r
+    }\r
+    break;\r
+\r
+  default:\r
+    break;\r
+  }\r
+}\r
+\r
+static int\r
+setup_call(Node* node, ScanEnv* env, int state)\r
+{\r
+  int r;\r
+\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_LIST:\r
+  case NODE_ALT:\r
+    do {\r
+      r = setup_call(NODE_CAR(node), env, state);\r
+    } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));\r
+    break;\r
+\r
+  case NODE_QUANT:\r
+    if (QUANT_(node)->upper == 0)\r
+      state |= IN_ZERO_REPEAT;\r
+\r
+    r = setup_call(NODE_BODY(node), env, state);\r
+    break;\r
+\r
+  case NODE_ANCHOR:\r
+    if (ANCHOR_HAS_BODY(ANCHOR_(node)))\r
+      r = setup_call(NODE_BODY(node), env, state);\r
+    else\r
+      r = 0;\r
+    break;\r
+\r
+  case NODE_ENCLOSURE:\r
+    {\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+\r
+      if (en->type == ENCLOSURE_MEMORY) {\r
+        if ((state & IN_ZERO_REPEAT) != 0) {\r
+          NODE_STATUS_ADD(node, IN_ZERO_REPEAT);\r
+          ENCLOSURE_(node)->m.entry_count--;\r
+        }\r
+        r = setup_call(NODE_BODY(node), env, state);\r
+      }\r
+      else if (en->type == ENCLOSURE_IF_ELSE) {\r
+        r = setup_call(NODE_BODY(node), env, state);\r
+        if (r != 0) return r;\r
+        if (IS_NOT_NULL(en->te.Then)) {\r
+          r = setup_call(en->te.Then, env, state);\r
+          if (r != 0) return r;\r
+        }\r
+        if (IS_NOT_NULL(en->te.Else))\r
+          r = setup_call(en->te.Else, env, state);\r
+      }\r
+      else\r
+        r = setup_call(NODE_BODY(node), env, state);\r
+    }\r
+    break;\r
+\r
+  case NODE_CALL:\r
+    if ((state & IN_ZERO_REPEAT) != 0) {\r
+      NODE_STATUS_ADD(node, IN_ZERO_REPEAT);\r
+      CALL_(node)->entry_count--;\r
+    }\r
+\r
+    r = setup_call_node_call(CALL_(node), env, state);\r
+    break;\r
+\r
+  default:\r
+    r = 0;\r
+    break;\r
+  }\r
+\r
+  return r;\r
+}\r
+\r
+static int\r
+setup_call2(Node* node)\r
+{\r
+  int r = 0;\r
+\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_LIST:\r
+  case NODE_ALT:\r
+    do {\r
+      r = setup_call2(NODE_CAR(node));\r
+    } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));\r
+    break;\r
+\r
+  case NODE_QUANT:\r
+    if (QUANT_(node)->upper != 0)\r
+      r = setup_call2(NODE_BODY(node));\r
+    break;\r
+\r
+  case NODE_ANCHOR:\r
+    if (ANCHOR_HAS_BODY(ANCHOR_(node)))\r
+      r = setup_call2(NODE_BODY(node));\r
+    break;\r
+\r
+  case NODE_ENCLOSURE:\r
+    if (! NODE_IS_IN_ZERO_REPEAT(node))\r
+      r = setup_call2(NODE_BODY(node));\r
+\r
+    {\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+\r
+      if (r != 0) return r;\r
+      if (en->type == ENCLOSURE_IF_ELSE) {\r
+        if (IS_NOT_NULL(en->te.Then)) {\r
+          r = setup_call2(en->te.Then);\r
+          if (r != 0) return r;\r
+        }\r
+        if (IS_NOT_NULL(en->te.Else))\r
+          r = setup_call2(en->te.Else);\r
+      }\r
+    }\r
+    break;\r
+\r
+  case NODE_CALL:\r
+    if (! NODE_IS_IN_ZERO_REPEAT(node)) {\r
+      setup_call2_call(node);\r
+    }\r
+    break;\r
+\r
+  default:\r
+    break;\r
+  }\r
+\r
+  return r;\r
+}\r
+\r
+\r
+static void\r
+setup_called_state_call(Node* node, int state)\r
+{\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_ALT:\r
+    state |= IN_ALT;\r
+    /* fall */\r
+  case NODE_LIST:\r
+    do {\r
+      setup_called_state_call(NODE_CAR(node), state);\r
+    } while (IS_NOT_NULL(node = NODE_CDR(node)));\r
+    break;\r
+\r
+  case NODE_QUANT:\r
+    {\r
+      QuantNode* qn = QUANT_(node);\r
+\r
+      if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 2)\r
+        state |= IN_REAL_REPEAT;\r
+      if (qn->lower != qn->upper)\r
+        state |= IN_VAR_REPEAT;\r
+\r
+      setup_called_state_call(NODE_QUANT_BODY(qn), state);\r
+    }\r
+    break;\r
+\r
+  case NODE_ANCHOR:\r
+    {\r
+      AnchorNode* an = ANCHOR_(node);\r
+\r
+      switch (an->type) {\r
+      case ANCHOR_PREC_READ_NOT:\r
+      case ANCHOR_LOOK_BEHIND_NOT:\r
+        state |= IN_NOT;\r
+        /* fall */\r
+      case ANCHOR_PREC_READ:\r
+      case ANCHOR_LOOK_BEHIND:\r
+        setup_called_state_call(NODE_ANCHOR_BODY(an), state);\r
+        break;\r
+      default:\r
+        break;\r
+      }\r
+    }\r
+    break;\r
+\r
+  case NODE_ENCLOSURE:\r
+    {\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+\r
+      if (en->type == ENCLOSURE_MEMORY) {\r
+        if (NODE_IS_MARK1(node)) {\r
+          if ((~en->m.called_state & state) != 0) {\r
+            en->m.called_state |= state;\r
+            setup_called_state_call(NODE_BODY(node), state);\r
+          }\r
+        }\r
+        else {\r
+          NODE_STATUS_ADD(node, MARK1);\r
+          en->m.called_state |= state;\r
+          setup_called_state_call(NODE_BODY(node), state);\r
+          NODE_STATUS_REMOVE(node, MARK1);\r
+        }\r
+      }\r
+      else if (en->type == ENCLOSURE_IF_ELSE) {\r
+        if (IS_NOT_NULL(en->te.Then)) {\r
+          setup_called_state_call(en->te.Then, state);\r
+        }\r
+        if (IS_NOT_NULL(en->te.Else))\r
+          setup_called_state_call(en->te.Else, state);\r
+      }\r
+      else {\r
+        setup_called_state_call(NODE_BODY(node), state);\r
+      }\r
+    }\r
+    break;\r
+\r
+  case NODE_CALL:\r
+    setup_called_state_call(NODE_BODY(node), state);\r
+    break;\r
+\r
+  default:\r
+    break;\r
+  }\r
+}\r
+\r
+static void\r
+setup_called_state(Node* node, int state)\r
+{\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_ALT:\r
+    state |= IN_ALT;\r
+    /* fall */\r
+  case NODE_LIST:\r
+    do {\r
+      setup_called_state(NODE_CAR(node), state);\r
+    } while (IS_NOT_NULL(node = NODE_CDR(node)));\r
+    break;\r
+\r
+#ifdef USE_CALL\r
+  case NODE_CALL:\r
+    setup_called_state_call(node, state);\r
+    break;\r
+#endif\r
+\r
+  case NODE_ENCLOSURE:\r
+    {\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+\r
+      switch (en->type) {\r
+      case ENCLOSURE_MEMORY:\r
+        if (en->m.entry_count > 1)\r
+          state |= IN_MULTI_ENTRY;\r
+\r
+        en->m.called_state |= state;\r
+        /* fall */\r
+      case ENCLOSURE_OPTION:\r
+      case ENCLOSURE_STOP_BACKTRACK:\r
+        setup_called_state(NODE_BODY(node), state);\r
+        break;\r
+      case ENCLOSURE_IF_ELSE:\r
+        setup_called_state(NODE_BODY(node), state);\r
+        if (IS_NOT_NULL(en->te.Then))\r
+          setup_called_state(en->te.Then, state);\r
+        if (IS_NOT_NULL(en->te.Else))\r
+          setup_called_state(en->te.Else, state);\r
+        break;\r
+      }\r
+    }\r
+    break;\r
+\r
+  case NODE_QUANT:\r
+    {\r
+      QuantNode* qn = QUANT_(node);\r
+\r
+      if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 2)\r
+        state |= IN_REAL_REPEAT;\r
+      if (qn->lower != qn->upper)\r
+        state |= IN_VAR_REPEAT;\r
+\r
+      setup_called_state(NODE_QUANT_BODY(qn), state);\r
+    }\r
+    break;\r
+\r
+  case NODE_ANCHOR:\r
+    {\r
+      AnchorNode* an = ANCHOR_(node);\r
+\r
+      switch (an->type) {\r
+      case ANCHOR_PREC_READ_NOT:\r
+      case ANCHOR_LOOK_BEHIND_NOT:\r
+        state |= IN_NOT;\r
+        /* fall */\r
+      case ANCHOR_PREC_READ:\r
+      case ANCHOR_LOOK_BEHIND:\r
+        setup_called_state(NODE_ANCHOR_BODY(an), state);\r
+        break;\r
+      default:\r
+        break;\r
       }\r
     }\r
+    break;\r
 \r
-    if (IS_NULL(root)) {\r
-      prev_node = srem;\r
-    }\r
-    else {\r
-      if (IS_NULL(onig_node_list_add(root, srem))) {\r
-       onig_node_free(srem);\r
-       goto mem_err;\r
-      }\r
-    }\r
+  case NODE_BACKREF:\r
+  case NODE_STRING:\r
+  case NODE_CTYPE:\r
+  case NODE_CCLASS:\r
+  case NODE_GIMMICK:\r
+  default:\r
+    break;\r
   }\r
+}\r
 \r
-  /* ending */\r
-  top_root = (IS_NOT_NULL(top_root) ? top_root : prev_node);\r
-  swap_node(node, top_root);\r
-  onig_node_free(top_root);\r
-  return 0;\r
+#endif  /* USE_CALL */\r
 \r
- mem_err:\r
-  r = ONIGERR_MEMORY;\r
 \r
- err:\r
-  onig_node_free(top_root);\r
-  return r;\r
-}\r
+static int setup_tree(Node* node, regex_t* reg, int state, ScanEnv* env);\r
+\r
+#ifdef __GNUC__\r
+__inline\r
+#endif\r
+static int\r
+setup_anchor(Node* node, regex_t* reg, int state, ScanEnv* env)\r
+{\r
+/* allowed node types in look-behind */\r
+#define ALLOWED_TYPE_IN_LB \\r
+  ( NODE_BIT_LIST | NODE_BIT_ALT | NODE_BIT_STRING | NODE_BIT_CCLASS \\r
+  | NODE_BIT_CTYPE | NODE_BIT_ANCHOR | NODE_BIT_ENCLOSURE | NODE_BIT_QUANT \\r
+  | NODE_BIT_CALL | NODE_BIT_GIMMICK)\r
 \r
+#define ALLOWED_ENCLOSURE_IN_LB       ( 1<<ENCLOSURE_MEMORY | 1<<ENCLOSURE_OPTION )\r
+#define ALLOWED_ENCLOSURE_IN_LB_NOT   (1<<ENCLOSURE_OPTION)\r
 \r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
+#define ALLOWED_ANCHOR_IN_LB \\r
+  ( ANCHOR_LOOK_BEHIND | ANCHOR_BEGIN_LINE | ANCHOR_END_LINE | ANCHOR_BEGIN_BUF \\r
+  | ANCHOR_BEGIN_POSITION | ANCHOR_WORD_BOUNDARY | ANCHOR_NO_WORD_BOUNDARY \\r
+  | ANCHOR_WORD_BEGIN | ANCHOR_WORD_END \\r
+  | ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY \\r
+  | ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY )\r
 \r
-#define CEC_THRES_NUM_BIG_REPEAT         512\r
-#define CEC_INFINITE_NUM          0x7fffffff\r
+#define ALLOWED_ANCHOR_IN_LB_NOT \\r
+  ( ANCHOR_LOOK_BEHIND | ANCHOR_LOOK_BEHIND_NOT | ANCHOR_BEGIN_LINE \\r
+  | ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION | ANCHOR_WORD_BOUNDARY \\r
+  | ANCHOR_NO_WORD_BOUNDARY | ANCHOR_WORD_BEGIN | ANCHOR_WORD_END \\r
+  | ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY \\r
+  | ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY )\r
 \r
-#define CEC_IN_INFINITE_REPEAT    (1<<0)\r
-#define CEC_IN_FINITE_REPEAT      (1<<1)\r
-#define CEC_CONT_BIG_REPEAT       (1<<2)\r
+  int r;\r
+  AnchorNode* an = ANCHOR_(node);\r
 \r
-static int\r
-setup_comb_exp_check(Node* node, int state, ScanEnv* env)\r
-{\r
-  int type;\r
-  int r = state;\r
+  switch (an->type) {\r
+  case ANCHOR_PREC_READ:\r
+    r = setup_tree(NODE_ANCHOR_BODY(an), reg, state, env);\r
+    break;\r
+  case ANCHOR_PREC_READ_NOT:\r
+    r = setup_tree(NODE_ANCHOR_BODY(an), reg, (state | IN_NOT), env);\r
+    break;\r
 \r
-  type = NTYPE(node);\r
-  switch (type) {\r
-  case NT_LIST:\r
+  case ANCHOR_LOOK_BEHIND:\r
     {\r
-      Node* prev = NULL_NODE;\r
-      do {\r
-       r = setup_comb_exp_check(NCAR(node), r, env);\r
-       prev = NCAR(node);\r
-      } while (r >= 0 && IS_NOT_NULL(node = NCDR(node)));\r
+      r = check_type_tree(NODE_ANCHOR_BODY(an), ALLOWED_TYPE_IN_LB,\r
+                          ALLOWED_ENCLOSURE_IN_LB, ALLOWED_ANCHOR_IN_LB);\r
+      if (r < 0) return r;\r
+      if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;\r
+      r = setup_tree(NODE_ANCHOR_BODY(an), reg, state, env);\r
+      if (r != 0) return r;\r
+      r = setup_look_behind(node, reg, env);\r
     }\r
     break;\r
 \r
-  case NT_ALT:\r
+  case ANCHOR_LOOK_BEHIND_NOT:\r
     {\r
-      int ret;\r
-      do {\r
-       ret = setup_comb_exp_check(NCAR(node), state, env);\r
-       r |= ret;\r
-      } while (ret >= 0 && IS_NOT_NULL(node = NCDR(node)));\r
+      r = check_type_tree(NODE_ANCHOR_BODY(an), ALLOWED_TYPE_IN_LB,\r
+                          ALLOWED_ENCLOSURE_IN_LB_NOT, ALLOWED_ANCHOR_IN_LB_NOT);\r
+      if (r < 0) return r;\r
+      if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;\r
+      r = setup_tree(NODE_ANCHOR_BODY(an), reg, (state | IN_NOT), env);\r
+      if (r != 0) return r;\r
+      r = setup_look_behind(node, reg, env);\r
     }\r
     break;\r
 \r
-  case NT_QTFR:\r
-    {\r
-      int child_state = state;\r
-      int add_state = 0;\r
-      QtfrNode* qn = NQTFR(node);\r
-      Node* target = qn->target;\r
-      int var_num;\r
-\r
-      if (! IS_REPEAT_INFINITE(qn->upper)) {\r
-       if (qn->upper > 1) {\r
-         /* {0,1}, {1,1} are allowed */\r
-         child_state |= CEC_IN_FINITE_REPEAT;\r
-\r
-         /* check (a*){n,m}, (a+){n,m} => (a*){n,n}, (a+){n,n} */\r
-         if (env->backrefed_mem == 0) {\r
-           if (NTYPE(qn->target) == NT_ENCLOSE) {\r
-             EncloseNode* en = NENCLOSE(qn->target);\r
-             if (en->type == ENCLOSE_MEMORY) {\r
-               if (NTYPE(en->target) == NT_QTFR) {\r
-                 QtfrNode* q = NQTFR(en->target);\r
-                 if (IS_REPEAT_INFINITE(q->upper)\r
-                     && q->greedy == qn->greedy) {\r
-                   qn->upper = (qn->lower == 0 ? 1 : qn->lower);\r
-                   if (qn->upper == 1)\r
-                     child_state = state;\r
-                 }\r
-               }\r
-             }\r
-           }\r
-         }\r
-       }\r
-      }\r
+  default:\r
+    r = 0;\r
+    break;\r
+  }\r
 \r
-      if (state & CEC_IN_FINITE_REPEAT) {\r
-       qn->comb_exp_check_num = -1;\r
-      }\r
-      else {\r
-       if (IS_REPEAT_INFINITE(qn->upper)) {\r
-         var_num = CEC_INFINITE_NUM;\r
-         child_state |= CEC_IN_INFINITE_REPEAT;\r
-       }\r
-       else {\r
-         var_num = qn->upper - qn->lower;\r
-       }\r
-\r
-       if (var_num >= CEC_THRES_NUM_BIG_REPEAT)\r
-         add_state |= CEC_CONT_BIG_REPEAT;\r
-\r
-       if (((state & CEC_IN_INFINITE_REPEAT) != 0 && var_num != 0) ||\r
-           ((state & CEC_CONT_BIG_REPEAT) != 0 &&\r
-            var_num >= CEC_THRES_NUM_BIG_REPEAT)) {\r
-         if (qn->comb_exp_check_num == 0) {\r
-           env->num_comb_exp_check++;\r
-           qn->comb_exp_check_num = env->num_comb_exp_check;\r
-           if (env->curr_max_regnum > env->comb_exp_max_regnum)\r
-             env->comb_exp_max_regnum = env->curr_max_regnum;\r
-         }\r
-       }\r
-      }\r
+  return r;\r
+}\r
 \r
-      r = setup_comb_exp_check(target, child_state, env);\r
-      r |= add_state;\r
+#ifdef __GNUC__\r
+__inline\r
+#endif\r
+static int\r
+setup_quant(Node* node, regex_t* reg, int state, ScanEnv* env)\r
+{\r
+  int r;\r
+  OnigLen d;\r
+  QuantNode* qn = QUANT_(node);\r
+  Node* body = NODE_BODY(node);\r
+\r
+  if ((state & IN_REAL_REPEAT) != 0) {\r
+    NODE_STATUS_ADD(node, IN_REAL_REPEAT);\r
+  }\r
+  if ((state & IN_MULTI_ENTRY) != 0) {\r
+    NODE_STATUS_ADD(node, IN_MULTI_ENTRY);\r
+  }\r
+\r
+  if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 1) {\r
+    d = tree_min_len(body, env);\r
+    if (d == 0) {\r
+#ifdef USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT\r
+      qn->body_empty_info = quantifiers_memory_node_info(body);\r
+      if (qn->body_empty_info == QUANT_BODY_IS_EMPTY_REC) {\r
+        if (NODE_TYPE(body) == NODE_ENCLOSURE &&\r
+            ENCLOSURE_(body)->type == ENCLOSURE_MEMORY) {\r
+          MEM_STATUS_ON(env->bt_mem_end, ENCLOSURE_(body)->m.regnum);\r
+        }\r
+      }\r
+#else\r
+      qn->body_empty_info = QUANT_BODY_IS_EMPTY;\r
+#endif\r
     }\r
-    break;\r
-\r
-  case NT_ENCLOSE:\r
-    {\r
-      EncloseNode* en = NENCLOSE(node);\r
+  }\r
 \r
-      switch (en->type) {\r
-      case ENCLOSE_MEMORY:\r
-       {\r
-         if (env->curr_max_regnum < en->regnum)\r
-           env->curr_max_regnum = en->regnum;\r
+  if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 2)\r
+    state |= IN_REAL_REPEAT;\r
+  if (qn->lower != qn->upper)\r
+    state |= IN_VAR_REPEAT;\r
 \r
-         r = setup_comb_exp_check(en->target, state, env);\r
-       }\r
-       break;\r
+  r = setup_tree(body, reg, state, env);\r
+  if (r != 0) return r;\r
 \r
-      default:\r
-       r = setup_comb_exp_check(en->target, state, env);\r
-       break;\r
+  /* expand string */\r
+#define EXPAND_STRING_MAX_LENGTH  100\r
+  if (NODE_TYPE(body) == NODE_STRING) {\r
+    if (!IS_REPEAT_INFINITE(qn->lower) && qn->lower == qn->upper &&\r
+        qn->lower > 1 && qn->lower <= EXPAND_STRING_MAX_LENGTH) {\r
+      int len = NODE_STRING_LEN(body);\r
+      StrNode* sn = STR_(body);\r
+\r
+      if (len * qn->lower <= EXPAND_STRING_MAX_LENGTH) {\r
+        int i, n = qn->lower;\r
+        onig_node_conv_to_str_node(node, STR_(body)->flag);\r
+        for (i = 0; i < n; i++) {\r
+          r = onig_node_str_cat(node, sn->s, sn->end);\r
+          if (r != 0) return r;\r
+        }\r
+        onig_node_free(body);\r
+        return r;\r
       }\r
     }\r
-    break;\r
-\r
-#ifdef USE_SUBEXP_CALL\r
-  case NT_CALL:\r
-    if (IS_CALL_RECURSION(NCALL(node)))\r
-      env->has_recursion = 1;\r
-    else\r
-      r = setup_comb_exp_check(NCALL(node)->target, state, env);\r
-    break;\r
-#endif\r
+  }\r
 \r
-  default:\r
-    break;\r
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT\r
+  if (qn->greedy && (qn->body_empty_info != QUANT_BODY_IS_NOT_EMPTY)) {\r
+    if (NODE_TYPE(body) == NODE_QUANT) {\r
+      QuantNode* tqn = QUANT_(body);\r
+      if (IS_NOT_NULL(tqn->head_exact)) {\r
+        qn->head_exact  = tqn->head_exact;\r
+        tqn->head_exact = NULL;\r
+      }\r
+    }\r
+    else {\r
+      qn->head_exact = get_head_value_node(NODE_BODY(node), 1, reg);\r
+    }\r
   }\r
+#endif\r
 \r
   return r;\r
 }\r
-#endif\r
-\r
-#define IN_ALT        (1<<0)\r
-#define IN_NOT        (1<<1)\r
-#define IN_REPEAT     (1<<2)\r
-#define IN_VAR_REPEAT (1<<3)\r
 \r
 /* setup_tree does the following work.\r
- 1. check empty loop. (set qn->target_empty_info)\r
+ 1. check empty loop. (set qn->body_empty_info)\r
  2. expand ignore-case in char class.\r
  3. set memory status bit flags. (reg->mem_stats)\r
  4. set qn->head_exact for [push, exact] -> [push_or_jump_exact1, exact].\r
@@ -3675,242 +4418,122 @@ setup_comb_exp_check(Node* node, int state, ScanEnv* env)
 static int\r
 setup_tree(Node* node, regex_t* reg, int state, ScanEnv* env)\r
 {\r
-  int type;\r
   int r = 0;\r
 \r
-  type = NTYPE(node);\r
-  switch (type) {\r
-  case NT_LIST:\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_LIST:\r
     {\r
       Node* prev = NULL_NODE;\r
       do {\r
-       r = setup_tree(NCAR(node), reg, state, env);\r
-       if (IS_NOT_NULL(prev) && r == 0) {\r
-         r = next_setup(prev, NCAR(node), reg);\r
-       }\r
-       prev = NCAR(node);\r
-      } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
+        r = setup_tree(NODE_CAR(node), reg, state, env);\r
+        if (IS_NOT_NULL(prev) && r == 0) {\r
+          r = next_setup(prev, NODE_CAR(node), reg);\r
+        }\r
+        prev = NODE_CAR(node);\r
+      } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));\r
     }\r
     break;\r
 \r
-  case NT_ALT:\r
+  case NODE_ALT:\r
     do {\r
-      r = setup_tree(NCAR(node), reg, (state | IN_ALT), env);\r
-    } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
+      r = setup_tree(NODE_CAR(node), reg, (state | IN_ALT), env);\r
+    } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));\r
     break;\r
 \r
-  case NT_CCLASS:\r
-    break;\r
-\r
-  case NT_STR:\r
-    if (IS_IGNORECASE(reg->options) && !NSTRING_IS_RAW(node)) {\r
+  case NODE_STRING:\r
+    if (IS_IGNORECASE(reg->options) && !NODE_STRING_IS_RAW(node)) {\r
       r = expand_case_fold_string(node, reg);\r
     }\r
     break;\r
 \r
-  case NT_CTYPE:\r
-  case NT_CANY:\r
-    break;\r
-\r
-#ifdef USE_SUBEXP_CALL\r
-  case NT_CALL:\r
-    break;\r
-#endif\r
-\r
-  case NT_BREF:\r
+  case NODE_BACKREF:\r
     {\r
       int i;\r
       int* p;\r
-      Node** nodes = SCANENV_MEM_NODES(env);\r
-      BRefNode* br = NBREF(node);\r
+      BackRefNode* br = BACKREF_(node);\r
       p = BACKREFS_P(br);\r
       for (i = 0; i < br->back_num; i++) {\r
-       if (p[i] > env->num_mem)  return ONIGERR_INVALID_BACKREF;\r
-       BIT_STATUS_ON_AT(env->backrefed_mem, p[i]);\r
-       BIT_STATUS_ON_AT(env->bt_mem_start, p[i]);\r
+        if (p[i] > env->num_mem)  return ONIGERR_INVALID_BACKREF;\r
+        MEM_STATUS_ON(env->backrefed_mem, p[i]);\r
+        MEM_STATUS_ON(env->bt_mem_start, p[i]);\r
 #ifdef USE_BACKREF_WITH_LEVEL\r
-       if (IS_BACKREF_NEST_LEVEL(br)) {\r
-         BIT_STATUS_ON_AT(env->bt_mem_end, p[i]);\r
-       }\r
+        if (NODE_IS_NEST_LEVEL(node)) {\r
+          MEM_STATUS_ON(env->bt_mem_end, p[i]);\r
+        }\r
 #endif\r
-       SET_ENCLOSE_STATUS(nodes[p[i]], NST_MEM_BACKREFED);\r
       }\r
     }\r
     break;\r
 \r
-  case NT_QTFR:\r
+  case NODE_ENCLOSURE:\r
     {\r
-      OnigDistance d;\r
-      QtfrNode* qn = NQTFR(node);\r
-      Node* target = qn->target;\r
-\r
-      if ((state & IN_REPEAT) != 0) {\r
-        qn->state |= NST_IN_REPEAT;\r
-      }\r
-\r
-      if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 1) {\r
-       r = get_min_match_length(target, &d, env);\r
-       if (r) break;\r
-       if (d == 0) {\r
-         qn->target_empty_info = NQ_TARGET_IS_EMPTY;\r
-#ifdef USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT\r
-         r = quantifiers_memory_node_info(target);\r
-         if (r < 0) break;\r
-         if (r > 0) {\r
-           qn->target_empty_info = r;\r
-         }\r
-#endif\r
-#if 0\r
-         r = get_max_match_length(target, &d, env);\r
-         if (r == 0 && d == 0) {\r
-           /*  ()* ==> ()?, ()+ ==> ()  */\r
-           qn->upper = 1;\r
-           if (qn->lower > 1) qn->lower = 1;\r
-           if (NTYPE(target) == NT_STR) {\r
-             qn->upper = qn->lower = 0;  /* /(?:)+/ ==> // */\r
-           }\r
-         }\r
-#endif\r
-       }\r
-      }\r
-\r
-      state |= IN_REPEAT;\r
-      if (qn->lower != qn->upper)\r
-       state |= IN_VAR_REPEAT;\r
-      r = setup_tree(target, reg, state, env);\r
-      if (r) break;\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
 \r
-      /* expand string */\r
-#define EXPAND_STRING_MAX_LENGTH  100\r
-      if (NTYPE(target) == NT_STR) {\r
-       if (!IS_REPEAT_INFINITE(qn->lower) && qn->lower == qn->upper &&\r
-           qn->lower > 1 && qn->lower <= EXPAND_STRING_MAX_LENGTH) {\r
-         int len = NSTRING_LEN(target);\r
-         StrNode* sn = NSTR(target);\r
-\r
-         if (len * qn->lower <= EXPAND_STRING_MAX_LENGTH) {\r
-           int i, n = qn->lower;\r
-           onig_node_conv_to_str_node(node, NSTR(target)->flag);\r
-           for (i = 0; i < n; i++) {\r
-             r = onig_node_str_cat(node, sn->s, sn->end);\r
-             if (r) break;\r
-           }\r
-           onig_node_free(target);\r
-           break; /* break case NT_QTFR: */\r
-         }\r
-       }\r
-      }\r
+      switch (en->type) {\r
+      case ENCLOSURE_OPTION:\r
+        {\r
+          OnigOptionType options = reg->options;\r
+          reg->options = ENCLOSURE_(node)->o.options;\r
+          r = setup_tree(NODE_BODY(node), reg, state, env);\r
+          reg->options = options;\r
+        }\r
+        break;\r
 \r
-#ifdef USE_OP_PUSH_OR_JUMP_EXACT\r
-      if (qn->greedy && (qn->target_empty_info != 0)) {\r
-       if (NTYPE(target) == NT_QTFR) {\r
-         QtfrNode* tqn = NQTFR(target);\r
-         if (IS_NOT_NULL(tqn->head_exact)) {\r
-           qn->head_exact  = tqn->head_exact;\r
-           tqn->head_exact = NULL;\r
-         }\r
-       }\r
-       else {\r
-         qn->head_exact = get_head_value_node(qn->target, 1, reg);\r
-       }\r
-      }\r
+      case ENCLOSURE_MEMORY:\r
+#ifdef USE_CALL\r
+        state |= en->m.called_state;\r
 #endif\r
-    }\r
-    break;\r
 \r
-  case NT_ENCLOSE:\r
-    {\r
-      EncloseNode* en = NENCLOSE(node);\r
+        if ((state & (IN_ALT | IN_NOT | IN_VAR_REPEAT | IN_MULTI_ENTRY)) != 0\r
+            || NODE_IS_RECURSION(node)) {\r
+          MEM_STATUS_ON(env->bt_mem_start, en->m.regnum);\r
+        }\r
+        r = setup_tree(NODE_BODY(node), reg, state, env);\r
+        break;\r
 \r
-      switch (en->type) {\r
-      case ENCLOSE_OPTION:\r
-       {\r
-         OnigOptionType options = reg->options;\r
-         reg->options = NENCLOSE(node)->option;\r
-         r = setup_tree(NENCLOSE(node)->target, reg, state, env);\r
-         reg->options = options;\r
-       }\r
-       break;\r
-\r
-      case ENCLOSE_MEMORY:\r
-       if ((state & (IN_ALT | IN_NOT | IN_VAR_REPEAT)) != 0) {\r
-         BIT_STATUS_ON_AT(env->bt_mem_start, en->regnum);\r
-         /* SET_ENCLOSE_STATUS(node, NST_MEM_IN_ALT_NOT); */\r
-       }\r
-        r = setup_tree(en->target, reg, state, env);\r
+      case ENCLOSURE_STOP_BACKTRACK:\r
+        {\r
+          Node* target = NODE_BODY(node);\r
+          r = setup_tree(target, reg, state, env);\r
+          if (NODE_TYPE(target) == NODE_QUANT) {\r
+            QuantNode* tqn = QUANT_(target);\r
+            if (IS_REPEAT_INFINITE(tqn->upper) && tqn->lower <= 1 &&\r
+                tqn->greedy != 0) {  /* (?>a*), a*+ etc... */\r
+              if (NODE_IS_SIMPLE_TYPE(NODE_BODY(target)))\r
+                NODE_STATUS_ADD(node, STOP_BT_SIMPLE_REPEAT);\r
+            }\r
+          }\r
+        }\r
         break;\r
 \r
-      case ENCLOSE_STOP_BACKTRACK:\r
-       {\r
-         Node* target = en->target;\r
-         r = setup_tree(target, reg, state, env);\r
-         if (NTYPE(target) == NT_QTFR) {\r
-           QtfrNode* tqn = NQTFR(target);\r
-           if (IS_REPEAT_INFINITE(tqn->upper) && tqn->lower <= 1 &&\r
-               tqn->greedy != 0) {  /* (?>a*), a*+ etc... */\r
-             int qtype = NTYPE(tqn->target);\r
-             if (IS_NODE_TYPE_SIMPLE(qtype))\r
-               SET_ENCLOSE_STATUS(node, NST_STOP_BT_SIMPLE_REPEAT);\r
-           }\r
-         }\r
-       }\r
-       break;\r
+      case ENCLOSURE_IF_ELSE:\r
+        r = setup_tree(NODE_BODY(node), reg, (state | IN_ALT), env);\r
+        if (r != 0) return r;\r
+        if (IS_NOT_NULL(en->te.Then)) {\r
+          r = setup_tree(en->te.Then, reg, (state | IN_ALT), env);\r
+          if (r != 0) return r;\r
+        }\r
+        if (IS_NOT_NULL(en->te.Else))\r
+          r = setup_tree(en->te.Else, reg, (state | IN_ALT), env);\r
+        break;\r
       }\r
     }\r
     break;\r
 \r
-  case NT_ANCHOR:\r
-    {\r
-      AnchorNode* an = NANCHOR(node);\r
-\r
-      switch (an->type) {\r
-      case ANCHOR_PREC_READ:\r
-       r = setup_tree(an->target, reg, state, env);\r
-       break;\r
-      case ANCHOR_PREC_READ_NOT:\r
-       r = setup_tree(an->target, reg, (state | IN_NOT), env);\r
-       break;\r
-\r
-/* allowed node types in look-behind */\r
-#define ALLOWED_TYPE_IN_LB  \\r
-  ( BIT_NT_LIST | BIT_NT_ALT | BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE | \\r
-    BIT_NT_CANY | BIT_NT_ANCHOR | BIT_NT_ENCLOSE | BIT_NT_QTFR | BIT_NT_CALL )\r
-\r
-#define ALLOWED_ENCLOSE_IN_LB       ( ENCLOSE_MEMORY )\r
-#define ALLOWED_ENCLOSE_IN_LB_NOT   0\r
-\r
-#define ALLOWED_ANCHOR_IN_LB \\r
-( ANCHOR_LOOK_BEHIND | ANCHOR_BEGIN_LINE | ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION )\r
-#define ALLOWED_ANCHOR_IN_LB_NOT \\r
-( ANCHOR_LOOK_BEHIND | ANCHOR_LOOK_BEHIND_NOT | ANCHOR_BEGIN_LINE | ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION )\r
-\r
-      case ANCHOR_LOOK_BEHIND:\r
-       {\r
-         r = check_type_tree(an->target, ALLOWED_TYPE_IN_LB,\r
-                             ALLOWED_ENCLOSE_IN_LB, ALLOWED_ANCHOR_IN_LB);\r
-         if (r < 0) return r;\r
-         if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;\r
-         r = setup_look_behind(node, reg, env);\r
-         if (r != 0) return r;\r
-         r = setup_tree(an->target, reg, state, env);\r
-       }\r
-       break;\r
+  case NODE_QUANT:\r
+    r = setup_quant(node, reg, state, env);\r
+    break;\r
 \r
-      case ANCHOR_LOOK_BEHIND_NOT:\r
-       {\r
-         r = check_type_tree(an->target, ALLOWED_TYPE_IN_LB,\r
-                     ALLOWED_ENCLOSE_IN_LB_NOT, ALLOWED_ANCHOR_IN_LB_NOT);\r
-         if (r < 0) return r;\r
-         if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;\r
-         r = setup_look_behind(node, reg, env);\r
-         if (r != 0) return r;\r
-         r = setup_tree(an->target, reg, (state | IN_NOT), env);\r
-       }\r
-       break;\r
-      }\r
-    }\r
+  case NODE_ANCHOR:\r
+    r = setup_anchor(node, reg, state, env);\r
     break;\r
 \r
+#ifdef USE_CALL\r
+  case NODE_CALL:\r
+#endif\r
+  case NODE_CTYPE:\r
+  case NODE_CCLASS:\r
+  case NODE_GIMMICK:\r
   default:\r
     break;\r
   }\r
@@ -3918,19 +4541,19 @@ setup_tree(Node* node, regex_t* reg, int state, ScanEnv* env)
   return r;\r
 }\r
 \r
-/* set skip map for Boyer-Moor search */\r
+/* set skip map for Boyer-Moore search */\r
 static int\r
 set_bm_skip(UChar* s, UChar* end, OnigEncoding enc ARG_UNUSED,\r
-           UChar skip[], int** int_skip)\r
+            UChar skip[], int** int_skip)\r
 {\r
   int i, len;\r
 \r
-  len = (int)(end - s);\r
+  len = (int )(end - s);\r
   if (len < ONIG_CHAR_TABLE_SIZE) {\r
-    for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) skip[i] = (UChar)len;\r
+    for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) skip[i] = len;\r
 \r
     for (i = 0; i < len - 1; i++)\r
-      skip[s[i]] = (UChar)(len - 1 - i);\r
+      skip[s[i]] = len - 1 - i;\r
   }\r
   else {\r
     if (IS_NULL(*int_skip)) {\r
@@ -3948,12 +4571,12 @@ set_bm_skip(UChar* s, UChar* end, OnigEncoding enc ARG_UNUSED,
 #define OPT_EXACT_MAXLEN   24\r
 \r
 typedef struct {\r
-  OnigDistance min;  /* min byte length */\r
-  OnigDistance max;  /* max byte length */\r
-} MinMaxLen;\r
+  OnigLen min;  /* min byte length */\r
+  OnigLen max;  /* max byte length */\r
+} MinMax;\r
 \r
 typedef struct {\r
-  MinMaxLen        mmd;\r
+  MinMax           mmd;\r
   OnigEncoding     enc;\r
   OnigOptionType   options;\r
   OnigCaseFoldType case_fold_flag;\r
@@ -3961,44 +4584,40 @@ typedef struct {
 } OptEnv;\r
 \r
 typedef struct {\r
-  int left_anchor;\r
-  int right_anchor;\r
-} OptAncInfo;\r
+  int left;\r
+  int right;\r
+} OptAnc;\r
 \r
 typedef struct {\r
-  MinMaxLen  mmd; /* info position */\r
-  OptAncInfo anc;\r
-\r
-  int   reach_end;\r
-  int   ignore_case;\r
-  int   len;\r
-  UChar s[OPT_EXACT_MAXLEN];\r
-} OptExactInfo;\r
+  MinMax     mmd;   /* position */\r
+  OptAnc     anc;\r
+  int        reach_end;\r
+  int        ignore_case;\r
+  int        len;\r
+  UChar      s[OPT_EXACT_MAXLEN];\r
+} OptExact;\r
 \r
 typedef struct {\r
-  MinMaxLen mmd; /* info position */\r
-  OptAncInfo anc;\r
-\r
-  int   value;      /* weighted value */\r
-  UChar map[ONIG_CHAR_TABLE_SIZE];\r
-} OptMapInfo;\r
+  MinMax    mmd;    /* position */\r
+  OptAnc    anc;\r
+  int       value;  /* weighted value */\r
+  UChar     map[ONIG_CHAR_TABLE_SIZE];\r
+} OptMap;\r
 \r
 typedef struct {\r
-  MinMaxLen    len;\r
-\r
-  OptAncInfo   anc;\r
-  OptExactInfo exb;    /* boundary */\r
-  OptExactInfo exm;    /* middle */\r
-  OptExactInfo expr;   /* prec read (?=...) */\r
-\r
-  OptMapInfo   map;   /* boundary */\r
-} NodeOptInfo;\r
+  MinMax    len;\r
+  OptAnc    anc;\r
+  OptExact  exb;     /* boundary */\r
+  OptExact  exm;     /* middle */\r
+  OptExact  expr;    /* prec read (?=...) */\r
+  OptMap    map;     /* boundary */\r
+} NodeOpt;\r
 \r
 \r
 static int\r
 map_position_value(OnigEncoding enc, int i)\r
 {\r
-  static const short int ByteValTable[] = {\r
+  static const short int Vals[] = {\r
      5,  1,  1,  1,  1,  1,  1,  1,  1, 10, 10,  1,  1, 10,  1,  1,\r
      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,\r
     12,  4,  7,  4,  4,  4,  4,  4,  4,  5,  5,  5,  5,  5,  5,  5,\r
@@ -4009,18 +4628,18 @@ map_position_value(OnigEncoding enc, int i)
      6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  5,  5,  5,  5,  1\r
   };\r
 \r
-  if (i < (int )(sizeof(ByteValTable)/sizeof(ByteValTable[0]))) {\r
+  if (i < (int )(sizeof(Vals)/sizeof(Vals[0]))) {\r
     if (i == 0 && ONIGENC_MBC_MINLEN(enc) > 1)\r
       return 20;\r
     else\r
-      return (int )ByteValTable[i];\r
+      return (int )Vals[i];\r
   }\r
   else\r
     return 4;   /* Take it easy. */\r
 }\r
 \r
 static int\r
-distance_value(MinMaxLen* mm)\r
+distance_value(MinMax* mm)\r
 {\r
   /* 1000 / (min-max-dist + 1) */\r
   static const short int dist_vals[] = {\r
@@ -4036,12 +4655,12 @@ distance_value(MinMaxLen* mm)
       11,   11,   11,   11,   11,   10,   10,   10,   10,   10\r
   };\r
 \r
-  int d;\r
+  OnigLen d;\r
 \r
-  if (mm->max == ONIG_INFINITE_DISTANCE) return 0;\r
+  if (mm->max == INFINITE_LEN) return 0;\r
 \r
   d = mm->max - mm->min;\r
-  if (d < (int )(sizeof(dist_vals)/sizeof(dist_vals[0])))\r
+  if (d < (OnigLen )(sizeof(dist_vals)/sizeof(dist_vals[0])))\r
     /* return dist_vals[d] * 16 / (mm->min + 12); */\r
     return (int )dist_vals[d];\r
   else\r
@@ -4049,7 +4668,7 @@ distance_value(MinMaxLen* mm)
 }\r
 \r
 static int\r
-comp_distance_value(MinMaxLen* d1, MinMaxLen* d2, int v1, int v2)\r
+comp_distance_value(MinMax* d1, MinMax* d2, int v1, int v2)\r
 {\r
   if (v2 <= 0) return -1;\r
   if (v1 <= 0) return  1;\r
@@ -4066,50 +4685,40 @@ comp_distance_value(MinMaxLen* d1, MinMaxLen* d2, int v1, int v2)
 }\r
 \r
 static int\r
-is_equal_mml(MinMaxLen* a, MinMaxLen* b)\r
+is_equal_mml(MinMax* a, MinMax* b)\r
 {\r
   return (a->min == b->min && a->max == b->max) ? 1 : 0;\r
 }\r
 \r
-\r
 static void\r
-set_mml(MinMaxLen* mml, OnigDistance min, OnigDistance max)\r
+set_mml(MinMax* l, OnigLen min, OnigLen max)\r
 {\r
-  mml->min = min;\r
-  mml->max = max;\r
+  l->min = min;\r
+  l->max = max;\r
 }\r
 \r
 static void\r
-clear_mml(MinMaxLen* mml)\r
+clear_mml(MinMaxl)\r
 {\r
-  mml->min = mml->max = 0;\r
+  l->min = l->max = 0;\r
 }\r
 \r
 static void\r
-copy_mml(MinMaxLen* to, MinMaxLen* from)\r
+copy_mml(MinMax* to, MinMax* from)\r
 {\r
   to->min = from->min;\r
   to->max = from->max;\r
 }\r
 \r
 static void\r
-add_mml(MinMaxLen* to, MinMaxLen* from)\r
+add_mml(MinMax* to, MinMax* from)\r
 {\r
   to->min = distance_add(to->min, from->min);\r
   to->max = distance_add(to->max, from->max);\r
 }\r
 \r
-#if 0\r
-static void\r
-add_len_mml(MinMaxLen* to, OnigDistance len)\r
-{\r
-  to->min = distance_add(to->min, len);\r
-  to->max = distance_add(to->max, len);\r
-}\r
-#endif\r
-\r
 static void\r
-alt_merge_mml(MinMaxLen* to, MinMaxLen* from)\r
+alt_merge_mml(MinMax* to, MinMax* from)\r
 {\r
   if (to->min > from->min) to->min = from->min;\r
   if (to->max < from->max) to->max = from->max;\r
@@ -4118,124 +4727,130 @@ alt_merge_mml(MinMaxLen* to, MinMaxLen* from)
 static void\r
 copy_opt_env(OptEnv* to, OptEnv* from)\r
 {\r
-  CopyMem (to, from, sizeof (OptEnv));\r
+  *to = *from;\r
 }\r
 \r
 static void\r
-clear_opt_anc_info(OptAncInfo* anc)\r
+clear_opt_anc_info(OptAnc* a)\r
 {\r
-  anc->left_anchor  = 0;\r
-  anc->right_anchor = 0;\r
+  a->left  = 0;\r
+  a->right = 0;\r
 }\r
 \r
 static void\r
-copy_opt_anc_info(OptAncInfo* to, OptAncInfo* from)\r
+copy_opt_anc_info(OptAnc* to, OptAnc* from)\r
 {\r
-  CopyMem (to, from, sizeof (OptAncInfo));\r
+  *to = *from;\r
 }\r
 \r
 static void\r
-concat_opt_anc_info(OptAncInfo* to, OptAncInfo* left, OptAncInfo* right,\r
-                   OnigDistance left_len, OnigDistance right_len)\r
+concat_opt_anc_info(OptAnc* to, OptAnc* left, OptAnc* right,\r
+                    OnigLen left_len, OnigLen right_len)\r
 {\r
   clear_opt_anc_info(to);\r
 \r
-  to->left_anchor = left->left_anchor;\r
+  to->left = left->left;\r
   if (left_len == 0) {\r
-    to->left_anchor |= right->left_anchor;\r
+    to->left |= right->left;\r
   }\r
 \r
-  to->right_anchor = right->right_anchor;\r
+  to->right = right->right;\r
   if (right_len == 0) {\r
-    to->right_anchor |= left->right_anchor;\r
+    to->right |= left->right;\r
+  }\r
+  else {\r
+    to->right |= (left->right & ANCHOR_PREC_READ_NOT);\r
   }\r
 }\r
 \r
 static int\r
-is_left_anchor(int anc)\r
+is_left(int a)\r
 {\r
-  if (anc == ANCHOR_END_BUF || anc == ANCHOR_SEMI_END_BUF ||\r
-      anc == ANCHOR_END_LINE || anc == ANCHOR_PREC_READ ||\r
-      anc == ANCHOR_PREC_READ_NOT)\r
+  if (a == ANCHOR_END_BUF  || a == ANCHOR_SEMI_END_BUF ||\r
+      a == ANCHOR_END_LINE || a == ANCHOR_PREC_READ || a == ANCHOR_PREC_READ_NOT)\r
     return 0;\r
 \r
   return 1;\r
 }\r
 \r
 static int\r
-is_set_opt_anc_info(OptAncInfo* to, int anc)\r
+is_set_opt_anc_info(OptAnc* to, int anc)\r
 {\r
-  if ((to->left_anchor & anc) != 0) return 1;\r
+  if ((to->left & anc) != 0) return 1;\r
 \r
-  return ((to->right_anchor & anc) != 0 ? 1 : 0);\r
+  return ((to->right & anc) != 0 ? 1 : 0);\r
 }\r
 \r
 static void\r
-add_opt_anc_info(OptAncInfo* to, int anc)\r
+add_opt_anc_info(OptAnc* to, int anc)\r
 {\r
-  if (is_left_anchor(anc))\r
-    to->left_anchor |= anc;\r
+  if (is_left(anc))\r
+    to->left |= anc;\r
   else\r
-    to->right_anchor |= anc;\r
+    to->right |= anc;\r
 }\r
 \r
 static void\r
-remove_opt_anc_info(OptAncInfo* to, int anc)\r
+remove_opt_anc_info(OptAnc* to, int anc)\r
 {\r
-  if (is_left_anchor(anc))\r
-    to->left_anchor &= ~anc;\r
+  if (is_left(anc))\r
+    to->left &= ~anc;\r
   else\r
-    to->right_anchor &= ~anc;\r
+    to->right &= ~anc;\r
 }\r
 \r
 static void\r
-alt_merge_opt_anc_info(OptAncInfo* to, OptAncInfo* add)\r
+alt_merge_opt_anc_info(OptAnc* to, OptAnc* add)\r
 {\r
-  to->left_anchor  &= add->left_anchor;\r
-  to->right_anchor &= add->right_anchor;\r
+  to->left  &= add->left;\r
+  to->right &= add->right;\r
 }\r
 \r
 static int\r
-is_full_opt_exact_info(OptExactInfo* ex)\r
+is_full_opt_exact(OptExact* e)\r
 {\r
-  return (ex->len >= OPT_EXACT_MAXLEN ? 1 : 0);\r
+  return (e->len >= OPT_EXACT_MAXLEN ? 1 : 0);\r
 }\r
 \r
 static void\r
-clear_opt_exact_info(OptExactInfo* ex)\r
+clear_opt_exact(OptExact* e)\r
 {\r
-  clear_mml(&ex->mmd);\r
-  clear_opt_anc_info(&ex->anc);\r
-  ex->reach_end   = 0;\r
-  ex->ignore_case = 0;\r
-  ex->len         = 0;\r
-  ex->s[0]        = '\0';\r
+  clear_mml(&e->mmd);\r
+  clear_opt_anc_info(&e->anc);\r
+  e->reach_end   = 0;\r
+  e->ignore_case = 0;\r
+  e->len         = 0;\r
+  e->s[0]        = '\0';\r
 }\r
 \r
 static void\r
-copy_opt_exact_info(OptExactInfo* to, OptExactInfo* from)\r
+copy_opt_exact(OptExact* to, OptExact* from)\r
 {\r
-  CopyMem (to, from, sizeof (OptExactInfo));\r
+  *to = *from;\r
 }\r
 \r
-static void\r
-concat_opt_exact_info(OptExactInfo* to, OptExactInfo* add, OnigEncoding enc)\r
+static int\r
+concat_opt_exact(OptExact* to, OptExact* add, OnigEncoding enc)\r
 {\r
-  int i, j, len;\r
+  int i, j, len, r;\r
   UChar *p, *end;\r
-  OptAncInfo tanc;\r
+  OptAnc tanc;\r
 \r
   if (! to->ignore_case && add->ignore_case) {\r
-    if (to->len >= add->len) return ;  /* avoid */\r
+    if (to->len >= add->len) return 0;  /* avoid */\r
 \r
     to->ignore_case = 1;\r
   }\r
 \r
+  r = 0;\r
   p = add->s;\r
   end = p + add->len;\r
   for (i = to->len; p < end; ) {\r
     len = enclen(enc, p);\r
-    if (i + len > OPT_EXACT_MAXLEN) break;\r
+    if (i + len > OPT_EXACT_MAXLEN) {\r
+      r = 1; /* 1:full */\r
+      break;\r
+    }\r
     for (j = 0; j < len && p < end; j++)\r
       to->s[i++] = *p++;\r
   }\r
@@ -4244,13 +4859,14 @@ concat_opt_exact_info(OptExactInfo* to, OptExactInfo* add, OnigEncoding enc)
   to->reach_end = (p == end ? add->reach_end : 0);\r
 \r
   concat_opt_anc_info(&tanc, &to->anc, &add->anc, 1, 1);\r
-  if (! to->reach_end) tanc.right_anchor = 0;\r
+  if (! to->reach_end) tanc.right = 0;\r
   copy_opt_anc_info(&to->anc, &tanc);\r
+\r
+  return r;\r
 }\r
 \r
 static void\r
-concat_opt_exact_info_str(OptExactInfo* to, UChar* s, UChar* end,\r
-                         int raw ARG_UNUSED, OnigEncoding enc)\r
+concat_opt_exact_str(OptExact* to, UChar* s, UChar* end, OnigEncoding enc)\r
 {\r
   int i, j, len;\r
   UChar *p;\r
@@ -4266,17 +4882,17 @@ concat_opt_exact_info_str(OptExactInfo* to, UChar* s, UChar* end,
 }\r
 \r
 static void\r
-alt_merge_opt_exact_info(OptExactInfo* to, OptExactInfo* add, OptEnv* env)\r
+alt_merge_opt_exact(OptExact* to, OptExact* add, OptEnv* env)\r
 {\r
   int i, j, len;\r
 \r
   if (add->len == 0 || to->len == 0) {\r
-    clear_opt_exact_info(to);\r
+    clear_opt_exact(to);\r
     return ;\r
   }\r
 \r
   if (! is_equal_mml(&to->mmd, &add->mmd)) {\r
-    clear_opt_exact_info(to);\r
+    clear_opt_exact(to);\r
     return ;\r
   }\r
 \r
@@ -4298,44 +4914,44 @@ alt_merge_opt_exact_info(OptExactInfo* to, OptExactInfo* add, OptEnv* env)
   to->ignore_case |= add->ignore_case;\r
 \r
   alt_merge_opt_anc_info(&to->anc, &add->anc);\r
-  if (! to->reach_end) to->anc.right_anchor = 0;\r
+  if (! to->reach_end) to->anc.right = 0;\r
 }\r
 \r
 static void\r
-select_opt_exact_info(OnigEncoding enc, OptExactInfo* now, OptExactInfo* alt)\r
+select_opt_exact(OnigEncoding enc, OptExact* now, OptExact* alt)\r
 {\r
-  int v1, v2;\r
+  int vn, va;\r
 \r
-  v1 = now->len;\r
-  v2 = alt->len;\r
+  vn = now->len;\r
+  va = alt->len;\r
 \r
-  if (v2 == 0) {\r
+  if (va == 0) {\r
     return ;\r
   }\r
-  else if (v1 == 0) {\r
-    copy_opt_exact_info(now, alt);\r
+  else if (vn == 0) {\r
+    copy_opt_exact(now, alt);\r
     return ;\r
   }\r
-  else if (v1 <= 2 && v2 <= 2) {\r
+  else if (vn <= 2 && va <= 2) {\r
     /* ByteValTable[x] is big value --> low price */\r
-    v2 = map_position_value(enc, now->s[0]);\r
-    v1 = map_position_value(enc, alt->s[0]);\r
+    va = map_position_value(enc, now->s[0]);\r
+    vn = map_position_value(enc, alt->s[0]);\r
 \r
-    if (now->len > 1) v1 += 5;\r
-    if (alt->len > 1) v2 += 5;\r
+    if (now->len > 1) vn += 5;\r
+    if (alt->len > 1) va += 5;\r
   }\r
 \r
-  if (now->ignore_case == 0) v1 *= 2;\r
-  if (alt->ignore_case == 0) v2 *= 2;\r
+  if (now->ignore_case == 0) vn *= 2;\r
+  if (alt->ignore_case == 0) va *= 2;\r
 \r
-  if (comp_distance_value(&now->mmd, &alt->mmd, v1, v2) > 0)\r
-    copy_opt_exact_info(now, alt);\r
+  if (comp_distance_value(&now->mmd, &alt->mmd, vn, va) > 0)\r
+    copy_opt_exact(now, alt);\r
 }\r
 \r
 static void\r
-clear_opt_map_info(OptMapInfo* map)\r
+clear_opt_map(OptMap* map)\r
 {\r
-  static const OptMapInfo clean_info = {\r
+  static const OptMap clean_info = {\r
     {0, 0}, {0, 0}, 0,\r
     {\r
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
@@ -4357,87 +4973,87 @@ clear_opt_map_info(OptMapInfo* map)
     }\r
   };\r
 \r
-  xmemcpy(map, &clean_info, sizeof(OptMapInfo));\r
+  xmemcpy(map, &clean_info, sizeof(OptMap));\r
 }\r
 \r
 static void\r
-copy_opt_map_info(OptMapInfo* to, OptMapInfo* from)\r
+copy_opt_map(OptMap* to, OptMap* from)\r
 {\r
-  CopyMem (to, from, sizeof (OptMapInfo));\r
+  xmemcpy(to,from,sizeof(OptMap));\r
 }\r
 \r
 static void\r
-add_char_opt_map_info(OptMapInfo* map, UChar c, OnigEncoding enc)\r
+add_char_opt_map(OptMap* m, UChar c, OnigEncoding enc)\r
 {\r
-  if (map->map[c] == 0) {\r
-    map->map[c] = 1;\r
-    map->value += map_position_value(enc, c);\r
+  if (m->map[c] == 0) {\r
+    m->map[c] = 1;\r
+    m->value += map_position_value(enc, c);\r
   }\r
 }\r
 \r
 static int\r
-add_char_amb_opt_map_info(OptMapInfo* map, UChar* p, UChar* end,\r
-                          OnigEncoding enc, OnigCaseFoldType case_fold_flag)\r
+add_char_amb_opt_map(OptMap* map, UChar* p, UChar* end,\r
+                     OnigEncoding enc, OnigCaseFoldType fold_flag)\r
 {\r
   OnigCaseFoldCodeItem items[ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM];\r
   UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN];\r
   int i, n;\r
 \r
-  add_char_opt_map_info(map, p[0], enc);\r
+  add_char_opt_map(map, p[0], enc);\r
 \r
-  case_fold_flag = DISABLE_CASE_FOLD_MULTI_CHAR(case_fold_flag);\r
-  n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc, case_fold_flag, p, end, items);\r
+  fold_flag = DISABLE_CASE_FOLD_MULTI_CHAR(fold_flag);\r
+  n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc, fold_flag, p, end, items);\r
   if (n < 0) return n;\r
 \r
   for (i = 0; i < n; i++) {\r
     ONIGENC_CODE_TO_MBC(enc, items[i].code[0], buf);\r
-    add_char_opt_map_info(map, buf[0], enc);\r
+    add_char_opt_map(map, buf[0], enc);\r
   }\r
 \r
   return 0;\r
 }\r
 \r
 static void\r
-select_opt_map_info(OptMapInfo* now, OptMapInfo* alt)\r
+select_opt_map(OptMap* now, OptMap* alt)\r
 {\r
   static int z = 1<<15; /* 32768: something big value */\r
 \r
-  int v1, v2;\r
+  int vn, va;\r
 \r
   if (alt->value == 0) return ;\r
   if (now->value == 0) {\r
-    copy_opt_map_info(now, alt);\r
+    copy_opt_map(now, alt);\r
     return ;\r
   }\r
 \r
-  v1 = z / now->value;\r
-  v2 = z / alt->value;\r
-  if (comp_distance_value(&now->mmd, &alt->mmd, v1, v2) > 0)\r
-    copy_opt_map_info(now, alt);\r
+  vn = z / now->value;\r
+  va = z / alt->value;\r
+  if (comp_distance_value(&now->mmd, &alt->mmd, vn, va) > 0)\r
+    copy_opt_map(now, alt);\r
 }\r
 \r
 static int\r
-comp_opt_exact_or_map_info(OptExactInfo* e, OptMapInfo* m)\r
+comp_opt_exact_or_map(OptExact* e, OptMap* m)\r
 {\r
 #define COMP_EM_BASE  20\r
-  int ve, vm;\r
+  int ae, am;\r
 \r
   if (m->value <= 0) return -1;\r
 \r
-  ve = COMP_EM_BASE * e->len * (e->ignore_case ? 1 : 2);\r
-  vm = COMP_EM_BASE * 5 * 2 / m->value;\r
-  return comp_distance_value(&e->mmd, &m->mmd, ve, vm);\r
+  ae = COMP_EM_BASE * e->len * (e->ignore_case ? 1 : 2);\r
+  am = COMP_EM_BASE * 5 * 2 / m->value;\r
+  return comp_distance_value(&e->mmd, &m->mmd, ae, am);\r
 }\r
 \r
 static void\r
-alt_merge_opt_map_info(OnigEncoding enc, OptMapInfo* to, OptMapInfo* add)\r
+alt_merge_opt_map(OnigEncoding enc, OptMap* to, OptMap* add)\r
 {\r
   int i, val;\r
 \r
   /* if (! is_equal_mml(&to->mmd, &add->mmd)) return ; */\r
   if (to->value == 0) return ;\r
   if (add->value == 0 || to->mmd.max < add->mmd.min) {\r
-    clear_opt_map_info(to);\r
+    clear_opt_map(to);\r
     return ;\r
   }\r
 \r
@@ -4457,48 +5073,47 @@ alt_merge_opt_map_info(OnigEncoding enc, OptMapInfo* to, OptMapInfo* add)
 }\r
 \r
 static void\r
-set_bound_node_opt_info(NodeOptInfo* opt, MinMaxLen* mmd)\r
+set_bound_node_opt_info(NodeOpt* opt, MinMax* plen)\r
 {\r
-  copy_mml(&(opt->exb.mmd),  mmd);\r
-  copy_mml(&(opt->expr.mmd), mmd);\r
-  copy_mml(&(opt->map.mmd),  mmd);\r
+  copy_mml(&(opt->exb.mmd),  plen);\r
+  copy_mml(&(opt->expr.mmd), plen);\r
+  copy_mml(&(opt->map.mmd),  plen);\r
 }\r
 \r
 static void\r
-clear_node_opt_info(NodeOptInfo* opt)\r
+clear_node_opt_info(NodeOpt* opt)\r
 {\r
   clear_mml(&opt->len);\r
   clear_opt_anc_info(&opt->anc);\r
-  clear_opt_exact_info(&opt->exb);\r
-  clear_opt_exact_info(&opt->exm);\r
-  clear_opt_exact_info(&opt->expr);\r
-  clear_opt_map_info(&opt->map);\r
+  clear_opt_exact(&opt->exb);\r
+  clear_opt_exact(&opt->exm);\r
+  clear_opt_exact(&opt->expr);\r
+  clear_opt_map(&opt->map);\r
 }\r
 \r
 static void\r
-copy_node_opt_info(NodeOptInfo* to, NodeOptInfo* from)\r
+copy_node_opt_info(NodeOpt* to, NodeOpt* from)\r
 {\r
-  CopyMem (to, from, sizeof (NodeOptInfo));\r
+  xmemcpy(to,from,sizeof(NodeOpt));\r
 }\r
 \r
 static void\r
-concat_left_node_opt_info(OnigEncoding enc, NodeOptInfo* to, NodeOptInfo* add)\r
+concat_left_node_opt_info(OnigEncoding enc, NodeOpt* to, NodeOpt* add)\r
 {\r
   int exb_reach, exm_reach;\r
-  OptAncInfo tanc;\r
+  OptAnc tanc;\r
 \r
   concat_opt_anc_info(&tanc, &to->anc, &add->anc, to->len.max, add->len.max);\r
   copy_opt_anc_info(&to->anc, &tanc);\r
 \r
   if (add->exb.len > 0 && to->len.max == 0) {\r
-    concat_opt_anc_info(&tanc, &to->anc, &add->exb.anc,\r
-                       to->len.max, add->len.max);\r
+    concat_opt_anc_info(&tanc, &to->anc, &add->exb.anc, to->len.max, add->len.max);\r
     copy_opt_anc_info(&add->exb.anc, &tanc);\r
   }\r
 \r
   if (add->map.value > 0 && to->len.max == 0) {\r
     if (add->map.mmd.max == 0)\r
-      add->map.anc.left_anchor |= to->anc.left_anchor;\r
+      add->map.anc.left |= to->anc.left;\r
   }\r
 \r
   exb_reach = to->exb.reach_end;\r
@@ -4509,45 +5124,44 @@ concat_left_node_opt_info(OnigEncoding enc, NodeOptInfo* to, NodeOptInfo* add)
 \r
   if (add->exb.len > 0) {\r
     if (exb_reach) {\r
-      concat_opt_exact_info(&to->exb, &add->exb, enc);\r
-      clear_opt_exact_info(&add->exb);\r
+      concat_opt_exact(&to->exb, &add->exb, enc);\r
+      clear_opt_exact(&add->exb);\r
     }\r
     else if (exm_reach) {\r
-      concat_opt_exact_info(&to->exm, &add->exb, enc);\r
-      clear_opt_exact_info(&add->exb);\r
+      concat_opt_exact(&to->exm, &add->exb, enc);\r
+      clear_opt_exact(&add->exb);\r
     }\r
   }\r
-  select_opt_exact_info(enc, &to->exm, &add->exb);\r
-  select_opt_exact_info(enc, &to->exm, &add->exm);\r
+  select_opt_exact(enc, &to->exm, &add->exb);\r
+  select_opt_exact(enc, &to->exm, &add->exm);\r
 \r
   if (to->expr.len > 0) {\r
     if (add->len.max > 0) {\r
       if (to->expr.len > (int )add->len.max)\r
-       to->expr.len = add->len.max;\r
+        to->expr.len = add->len.max;\r
 \r
       if (to->expr.mmd.max == 0)\r
-       select_opt_exact_info(enc, &to->exb, &to->expr);\r
+        select_opt_exact(enc, &to->exb, &to->expr);\r
       else\r
-       select_opt_exact_info(enc, &to->exm, &to->expr);\r
+        select_opt_exact(enc, &to->exm, &to->expr);\r
     }\r
   }\r
   else if (add->expr.len > 0) {\r
-    copy_opt_exact_info(&to->expr, &add->expr);\r
+    copy_opt_exact(&to->expr, &add->expr);\r
   }\r
 \r
-  select_opt_map_info(&to->map, &add->map);\r
-\r
+  select_opt_map(&to->map, &add->map);\r
   add_mml(&to->len, &add->len);\r
 }\r
 \r
 static void\r
-alt_merge_node_opt_info(NodeOptInfo* to, NodeOptInfo* add, OptEnv* env)\r
+alt_merge_node_opt_info(NodeOpt* to, NodeOpt* add, OptEnv* env)\r
 {\r
-  alt_merge_opt_anc_info  (&to->anc,  &add->anc);\r
-  alt_merge_opt_exact_info(&to->exb,  &add->exb, env);\r
-  alt_merge_opt_exact_info(&to->exm,  &add->exm, env);\r
-  alt_merge_opt_exact_info(&to->expr, &add->expr, env);\r
-  alt_merge_opt_map_info(env->enc, &to->map,  &add->map);\r
+  alt_merge_opt_anc_info(&to->anc, &add->anc);\r
+  alt_merge_opt_exact(&to->exb,  &add->exb, env);\r
+  alt_merge_opt_exact(&to->exm,  &add->exm, env);\r
+  alt_merge_opt_exact(&to->expr, &add->expr, env);\r
+  alt_merge_opt_map(env->enc, &to->map, &add->map);\r
 \r
   alt_merge_mml(&to->len, &add->len);\r
 }\r
@@ -4556,341 +5170,354 @@ alt_merge_node_opt_info(NodeOptInfo* to, NodeOptInfo* add, OptEnv* env)
 #define MAX_NODE_OPT_INFO_REF_COUNT    5\r
 \r
 static int\r
-optimize_node_left(Node* node, NodeOptInfo* opt, OptEnv* env)\r
+optimize_nodes(Node* node, NodeOpt* opt, OptEnv* env)\r
 {\r
-  int type;\r
-  int r = 0;\r
+  int i;\r
+  int r;\r
+  NodeOpt xo;\r
+  OnigEncoding enc;\r
 \r
+  r = 0;\r
+  enc = env->enc;\r
   clear_node_opt_info(opt);\r
   set_bound_node_opt_info(opt, &env->mmd);\r
 \r
-  type = NTYPE(node);\r
-  switch (type) {\r
-  case NT_LIST:\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_LIST:\r
     {\r
       OptEnv nenv;\r
-      NodeOptInfo nopt;\r
       Node* nd = node;\r
 \r
       copy_opt_env(&nenv, env);\r
       do {\r
-       r = optimize_node_left(NCAR(nd), &nopt, &nenv);\r
-       if (r == 0) {\r
-         add_mml(&nenv.mmd, &nopt.len);\r
-         concat_left_node_opt_info(env->enc, opt, &nopt);\r
-       }\r
-      } while (r == 0 && IS_NOT_NULL(nd = NCDR(nd)));\r
+        r = optimize_nodes(NODE_CAR(nd), &xo, &nenv);\r
+        if (r == 0) {\r
+          add_mml(&nenv.mmd, &xo.len);\r
+          concat_left_node_opt_info(enc, opt, &xo);\r
+        }\r
+      } while (r == 0 && IS_NOT_NULL(nd = NODE_CDR(nd)));\r
     }\r
     break;\r
 \r
-  case NT_ALT:\r
+  case NODE_ALT:\r
     {\r
-      NodeOptInfo nopt;\r
       Node* nd = node;\r
 \r
       do {\r
-       r = optimize_node_left(NCAR(nd), &nopt, env);\r
-       if (r == 0) {\r
-         if (nd == node) copy_node_opt_info(opt, &nopt);\r
-         else            alt_merge_node_opt_info(opt, &nopt, env);\r
-       }\r
-      } while ((r == 0) && IS_NOT_NULL(nd = NCDR(nd)));\r
+        r = optimize_nodes(NODE_CAR(nd), &xo, env);\r
+        if (r == 0) {\r
+          if (nd == node) copy_node_opt_info(opt, &xo);\r
+          else            alt_merge_node_opt_info(opt, &xo, env);\r
+        }\r
+      } while ((r == 0) && IS_NOT_NULL(nd = NODE_CDR(nd)));\r
     }\r
     break;\r
 \r
-  case NT_STR:\r
+  case NODE_STRING:\r
     {\r
-      StrNode* sn = NSTR(node);\r
-      int slen = (int)(sn->end - sn->s);\r
-      int is_raw = NSTRING_IS_RAW(node);\r
-\r
-      if (! NSTRING_IS_AMBIG(node)) {\r
-       concat_opt_exact_info_str(&opt->exb, sn->s, sn->end,\r
-                                 NSTRING_IS_RAW(node), env->enc);\r
-       if (slen > 0) {\r
-         add_char_opt_map_info(&opt->map, *(sn->s), env->enc);\r
-       }\r
+      StrNode* sn = STR_(node);\r
+      int slen = (int )(sn->end - sn->s);\r
+      /* int is_raw = NODE_STRING_IS_RAW(node); */\r
+\r
+      if (! NODE_STRING_IS_AMBIG(node)) {\r
+        concat_opt_exact_str(&opt->exb, sn->s, sn->end, enc);\r
+        if (slen > 0) {\r
+          add_char_opt_map(&opt->map, *(sn->s), enc);\r
+        }\r
         set_mml(&opt->len, slen, slen);\r
       }\r
       else {\r
         int max;\r
 \r
-       if (NSTRING_IS_DONT_GET_OPT_INFO(node)) {\r
-          int n = onigenc_strlen(env->enc, sn->s, sn->end);\r
-          max = ONIGENC_MBC_MAXLEN_DIST(env->enc) * n;\r
-       }\r
-       else {\r
-         concat_opt_exact_info_str(&opt->exb, sn->s, sn->end,\r
-                                   is_raw, env->enc);\r
-         opt->exb.ignore_case = 1;\r
+        if (NODE_STRING_IS_DONT_GET_OPT_INFO(node)) {\r
+          int n = onigenc_strlen(enc, sn->s, sn->end);\r
+          max = ONIGENC_MBC_MAXLEN_DIST(enc) * n;\r
+        }\r
+        else {\r
+          concat_opt_exact_str(&opt->exb, sn->s, sn->end, enc);\r
+          opt->exb.ignore_case = 1;\r
 \r
-         if (slen > 0) {\r
-           r = add_char_amb_opt_map_info(&opt->map, sn->s, sn->end,\r
-                                         env->enc, env->case_fold_flag);\r
-           if (r != 0) break;\r
-         }\r
+          if (slen > 0) {\r
+            r = add_char_amb_opt_map(&opt->map, sn->s, sn->end,\r
+                                     enc, env->case_fold_flag);\r
+            if (r != 0) break;\r
+          }\r
 \r
-         max = slen;\r
-       }\r
+          max = slen;\r
+        }\r
 \r
         set_mml(&opt->len, slen, max);\r
       }\r
 \r
       if (opt->exb.len == slen)\r
-       opt->exb.reach_end = 1;\r
+        opt->exb.reach_end = 1;\r
     }\r
     break;\r
 \r
-  case NT_CCLASS:\r
+  case NODE_CCLASS:\r
     {\r
-      int i, z;\r
-      CClassNode* cc = NCCLASS(node);\r
+      int z;\r
+      CClassNode* cc = CCLASS_(node);\r
 \r
-      /* no need to check ignore case. (setted in setup_tree()) */\r
+      /* no need to check ignore case. (set in setup_tree()) */\r
 \r
       if (IS_NOT_NULL(cc->mbuf) || IS_NCCLASS_NOT(cc)) {\r
-        OnigDistance min = ONIGENC_MBC_MINLEN(env->enc);\r
-       OnigDistance max = ONIGENC_MBC_MAXLEN_DIST(env->enc);\r
+        OnigLen min = ONIGENC_MBC_MINLEN(enc);\r
+        OnigLen max = ONIGENC_MBC_MAXLEN_DIST(enc);\r
 \r
-       set_mml(&opt->len, min, max);\r
+        set_mml(&opt->len, min, max);\r
       }\r
       else {\r
         for (i = 0; i < SINGLE_BYTE_SIZE; i++) {\r
           z = BITSET_AT(cc->bs, i);\r
-          if ((z && !IS_NCCLASS_NOT(cc)) || (!z && IS_NCCLASS_NOT(cc))) {\r
-            add_char_opt_map_info(&opt->map, (UChar )i, env->enc);\r
+          if ((z && ! IS_NCCLASS_NOT(cc)) || (! z && IS_NCCLASS_NOT(cc))) {\r
+            add_char_opt_map(&opt->map, (UChar )i, enc);\r
           }\r
         }\r
-       set_mml(&opt->len, 1, 1);\r
+        set_mml(&opt->len, 1, 1);\r
       }\r
     }\r
     break;\r
 \r
-  case NT_CTYPE:\r
+  case NODE_CTYPE:\r
     {\r
-      int i, min, max;\r
+      int min, max;\r
+      int range;\r
 \r
-      max = ONIGENC_MBC_MAXLEN_DIST(env->enc);\r
+      max = ONIGENC_MBC_MAXLEN_DIST(enc);\r
 \r
       if (max == 1) {\r
         min = 1;\r
 \r
-       switch (NCTYPE(node)->ctype) {\r
-       case ONIGENC_CTYPE_WORD:\r
-         if (NCTYPE(node)->not != 0) {\r
-           for (i = 0; i < SINGLE_BYTE_SIZE; i++) {\r
-             if (! ONIGENC_IS_CODE_WORD(env->enc, i)) {\r
-               add_char_opt_map_info(&opt->map, (UChar )i, env->enc);\r
-             }\r
-           }\r
-         }\r
-         else {\r
-           for (i = 0; i < SINGLE_BYTE_SIZE; i++) {\r
-             if (ONIGENC_IS_CODE_WORD(env->enc, i)) {\r
-               add_char_opt_map_info(&opt->map, (UChar )i, env->enc);\r
-             }\r
-           }\r
-         }\r
-         break;\r
-       }\r
+        switch (CTYPE_(node)->ctype) {\r
+        case CTYPE_ANYCHAR:\r
+          break;\r
+\r
+        case ONIGENC_CTYPE_WORD:\r
+          range = CTYPE_(node)->ascii_mode != 0 ? 128 : SINGLE_BYTE_SIZE;\r
+          if (CTYPE_(node)->not != 0) {\r
+            for (i = 0; i < range; i++) {\r
+              if (! ONIGENC_IS_CODE_WORD(enc, i)) {\r
+                add_char_opt_map(&opt->map, (UChar )i, enc);\r
+              }\r
+            }\r
+            for (i = range; i < SINGLE_BYTE_SIZE; i++) {\r
+              add_char_opt_map(&opt->map, (UChar )i, enc);\r
+            }\r
+          }\r
+          else {\r
+            for (i = 0; i < range; i++) {\r
+              if (ONIGENC_IS_CODE_WORD(enc, i)) {\r
+                add_char_opt_map(&opt->map, (UChar )i, enc);\r
+              }\r
+            }\r
+          }\r
+          break;\r
+        }\r
       }\r
       else {\r
-        min = ONIGENC_MBC_MINLEN(env->enc);\r
+        min = ONIGENC_MBC_MINLEN(enc);\r
       }\r
       set_mml(&opt->len, min, max);\r
     }\r
     break;\r
 \r
-  case NT_CANY:\r
-    {\r
-      OnigDistance min = ONIGENC_MBC_MINLEN(env->enc);\r
-      OnigDistance max = ONIGENC_MBC_MAXLEN_DIST(env->enc);\r
-      set_mml(&opt->len, min, max);\r
-    }\r
-    break;\r
-\r
-  case NT_ANCHOR:\r
-    switch (NANCHOR(node)->type) {\r
+  case NODE_ANCHOR:\r
+    switch (ANCHOR_(node)->type) {\r
     case ANCHOR_BEGIN_BUF:\r
     case ANCHOR_BEGIN_POSITION:\r
     case ANCHOR_BEGIN_LINE:\r
     case ANCHOR_END_BUF:\r
     case ANCHOR_SEMI_END_BUF:\r
     case ANCHOR_END_LINE:\r
-      add_opt_anc_info(&opt->anc, NANCHOR(node)->type);\r
+    case ANCHOR_PREC_READ_NOT:\r
+    case ANCHOR_LOOK_BEHIND:\r
+      add_opt_anc_info(&opt->anc, ANCHOR_(node)->type);\r
       break;\r
 \r
     case ANCHOR_PREC_READ:\r
       {\r
-       NodeOptInfo nopt;\r
+        r = optimize_nodes(NODE_BODY(node), &xo, env);\r
+        if (r == 0) {\r
+          if (xo.exb.len > 0)\r
+            copy_opt_exact(&opt->expr, &xo.exb);\r
+          else if (xo.exm.len > 0)\r
+            copy_opt_exact(&opt->expr, &xo.exm);\r
 \r
-       r = optimize_node_left(NANCHOR(node)->target, &nopt, env);\r
-       if (r == 0) {\r
-         if (nopt.exb.len > 0)\r
-           copy_opt_exact_info(&opt->expr, &nopt.exb);\r
-         else if (nopt.exm.len > 0)\r
-           copy_opt_exact_info(&opt->expr, &nopt.exm);\r
+          opt->expr.reach_end = 0;\r
 \r
-         opt->expr.reach_end = 0;\r
-\r
-         if (nopt.map.value > 0)\r
-           copy_opt_map_info(&opt->map, &nopt.map);\r
-       }\r
+          if (xo.map.value > 0)\r
+            copy_opt_map(&opt->map, &xo.map);\r
+        }\r
       }\r
       break;\r
 \r
-    case ANCHOR_PREC_READ_NOT:\r
-    case ANCHOR_LOOK_BEHIND: /* Sorry, I can't make use of it. */\r
     case ANCHOR_LOOK_BEHIND_NOT:\r
       break;\r
     }\r
     break;\r
 \r
-  case NT_BREF:\r
-    {\r
-      int i;\r
+  case NODE_BACKREF:\r
+    if (! NODE_IS_CHECKER(node)) {\r
       int* backs;\r
-      OnigDistance min, max, tmin, tmax;\r
-      Node** nodes = SCANENV_MEM_NODES(env->scan_env);\r
-      BRefNode* br = NBREF(node);\r
+      OnigLen min, max, tmin, tmax;\r
+      MemEnv* mem_env = SCANENV_MEMENV(env->scan_env);\r
+      BackRefNode* br = BACKREF_(node);\r
 \r
-      if (br->state & NST_RECURSION) {\r
-       set_mml(&opt->len, 0, ONIG_INFINITE_DISTANCE);\r
-       break;\r
+      if (NODE_IS_RECURSION(node)) {\r
+        set_mml(&opt->len, 0, INFINITE_LEN);\r
+        break;\r
       }\r
       backs = BACKREFS_P(br);\r
-      r = get_min_match_length(nodes[backs[0]], &min, env->scan_env);\r
-      if (r != 0) break;\r
-      r = get_max_match_length(nodes[backs[0]], &max, env->scan_env);\r
-      if (r != 0) break;\r
+      min = tree_min_len(mem_env[backs[0]].node, env->scan_env);\r
+      max = tree_max_len(mem_env[backs[0]].node, env->scan_env);\r
       for (i = 1; i < br->back_num; i++) {\r
-       r = get_min_match_length(nodes[backs[i]], &tmin, env->scan_env);\r
-       if (r != 0) break;\r
-       r = get_max_match_length(nodes[backs[i]], &tmax, env->scan_env);\r
-       if (r != 0) break;\r
-       if (min > tmin) min = tmin;\r
-       if (max < tmax) max = tmax;\r
+        tmin = tree_min_len(mem_env[backs[i]].node, env->scan_env);\r
+        tmax = tree_max_len(mem_env[backs[i]].node, env->scan_env);\r
+        if (min > tmin) min = tmin;\r
+        if (max < tmax) max = tmax;\r
       }\r
-      if (r == 0) set_mml(&opt->len, min, max);\r
+      set_mml(&opt->len, min, max);\r
     }\r
     break;\r
 \r
-#ifdef USE_SUBEXP_CALL\r
-  case NT_CALL:\r
-    if (IS_CALL_RECURSION(NCALL(node)))\r
-      set_mml(&opt->len, 0, ONIG_INFINITE_DISTANCE);\r
+#ifdef USE_CALL\r
+  case NODE_CALL:\r
+    if (NODE_IS_RECURSION(node))\r
+      set_mml(&opt->len, 0, INFINITE_LEN);\r
     else {\r
       OnigOptionType save = env->options;\r
-      env->options = NENCLOSE(NCALL(node)->target)->option;\r
-      r = optimize_node_left(NCALL(node)->target, opt, env);\r
+      env->options = ENCLOSURE_(NODE_BODY(node))->o.options;\r
+      r = optimize_nodes(NODE_BODY(node), opt, env);\r
       env->options = save;\r
     }\r
     break;\r
 #endif\r
 \r
-  case NT_QTFR:\r
+  case NODE_QUANT:\r
     {\r
-      int i;\r
-      OnigDistance min, max;\r
-      NodeOptInfo nopt;\r
-      QtfrNode* qn = NQTFR(node);\r
-\r
-      r = optimize_node_left(qn->target, &nopt, env);\r
-      if (r) break;\r
-\r
-      if (qn->lower == 0 && IS_REPEAT_INFINITE(qn->upper)) {\r
-       if (env->mmd.max == 0 &&\r
-           NTYPE(qn->target) == NT_CANY && qn->greedy) {\r
-         if (IS_MULTILINE(env->options))\r
-           add_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR_ML);\r
-         else\r
-           add_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR);\r
-       }\r
+      OnigLen min, max;\r
+      QuantNode* qn = QUANT_(node);\r
+\r
+      r = optimize_nodes(NODE_BODY(node), &xo, env);\r
+      if (r != 0) break;\r
+\r
+      if (qn->lower > 0) {\r
+        copy_node_opt_info(opt, &xo);\r
+        if (xo.exb.len > 0) {\r
+          if (xo.exb.reach_end) {\r
+            for (i = 2; i <= qn->lower && ! is_full_opt_exact(&opt->exb); i++) {\r
+              int rc = concat_opt_exact(&opt->exb, &xo.exb, enc);\r
+              if (rc > 0) break;\r
+            }\r
+            if (i < qn->lower) opt->exb.reach_end = 0;\r
+          }\r
+        }\r
+\r
+        if (qn->lower != qn->upper) {\r
+          opt->exb.reach_end = 0;\r
+          opt->exm.reach_end = 0;\r
+        }\r
+        if (qn->lower > 1)\r
+          opt->exm.reach_end = 0;\r
+      }\r
+\r
+      if (IS_REPEAT_INFINITE(qn->upper)) {\r
+        if (env->mmd.max == 0 &&\r
+            NODE_IS_ANYCHAR(NODE_BODY(node)) && qn->greedy != 0) {\r
+          if (IS_MULTILINE(CTYPE_OPTION(NODE_QUANT_BODY(qn), env)))\r
+            add_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_INF_ML);\r
+          else\r
+            add_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_INF);\r
+        }\r
+\r
+        max = (xo.len.max > 0 ? INFINITE_LEN : 0);\r
       }\r
       else {\r
-       if (qn->lower > 0) {\r
-         copy_node_opt_info(opt, &nopt);\r
-         if (nopt.exb.len > 0) {\r
-           if (nopt.exb.reach_end) {\r
-             for (i = 2; i <= qn->lower &&\r
-                         ! is_full_opt_exact_info(&opt->exb); i++) {\r
-               concat_opt_exact_info(&opt->exb, &nopt.exb, env->enc);\r
-             }\r
-             if (i < qn->lower) {\r
-               opt->exb.reach_end = 0;\r
-             }\r
-           }\r
-         }\r
-\r
-         if (qn->lower != qn->upper) {\r
-           opt->exb.reach_end = 0;\r
-           opt->exm.reach_end = 0;\r
-         }\r
-         if (qn->lower > 1)\r
-           opt->exm.reach_end = 0;\r
-       }\r
+        max = distance_multiply(xo.len.max, qn->upper);\r
       }\r
 \r
-      min = distance_multiply(nopt.len.min, qn->lower);\r
-      if (IS_REPEAT_INFINITE(qn->upper))\r
-       max = (nopt.len.max > 0 ? ONIG_INFINITE_DISTANCE : 0);\r
-      else\r
-       max = distance_multiply(nopt.len.max, qn->upper);\r
-\r
+      min = distance_multiply(xo.len.min, qn->lower);\r
       set_mml(&opt->len, min, max);\r
     }\r
     break;\r
 \r
-  case NT_ENCLOSE:\r
-    {\r
-      EncloseNode* en = NENCLOSE(node);\r
-\r
-      switch (en->type) {\r
-      case ENCLOSE_OPTION:\r
-       {\r
-         OnigOptionType save = env->options;\r
-\r
-         env->options = en->option;\r
-         r = optimize_node_left(en->target, opt, env);\r
-         env->options = save;\r
-       }\r
-       break;\r
-\r
-      case ENCLOSE_MEMORY:\r
-#ifdef USE_SUBEXP_CALL\r
-       en->opt_count++;\r
-       if (en->opt_count > MAX_NODE_OPT_INFO_REF_COUNT) {\r
-         OnigDistance min, max;\r
-\r
-         min = 0;\r
-         max = ONIG_INFINITE_DISTANCE;\r
-         if (IS_ENCLOSE_MIN_FIXED(en)) min = en->min_len;\r
-         if (IS_ENCLOSE_MAX_FIXED(en)) max = en->max_len;\r
-         set_mml(&opt->len, min, max);\r
-       }\r
-       else\r
-#endif\r
-       {\r
-         r = optimize_node_left(en->target, opt, env);\r
-\r
-         if (is_set_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR_MASK)) {\r
-           if (BIT_STATUS_AT(env->scan_env->backrefed_mem, en->regnum))\r
-             remove_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR_MASK);\r
-         }\r
-       }\r
-       break;\r
-\r
-      case ENCLOSE_STOP_BACKTRACK:\r
-       r = optimize_node_left(en->target, opt, env);\r
-       break;\r
-      }\r
-    }\r
+  case NODE_ENCLOSURE:\r
+    {\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+\r
+      switch (en->type) {\r
+      case ENCLOSURE_OPTION:\r
+        {\r
+          OnigOptionType save = env->options;\r
+\r
+          env->options = en->o.options;\r
+          r = optimize_nodes(NODE_BODY(node), opt, env);\r
+          env->options = save;\r
+        }\r
+        break;\r
+\r
+      case ENCLOSURE_MEMORY:\r
+#ifdef USE_CALL\r
+        en->opt_count++;\r
+        if (en->opt_count > MAX_NODE_OPT_INFO_REF_COUNT) {\r
+          OnigLen min, max;\r
+\r
+          min = 0;\r
+          max = INFINITE_LEN;\r
+          if (NODE_IS_MIN_FIXED(node)) min = en->min_len;\r
+          if (NODE_IS_MAX_FIXED(node)) max = en->max_len;\r
+          set_mml(&opt->len, min, max);\r
+        }\r
+        else\r
+#endif\r
+          {\r
+            r = optimize_nodes(NODE_BODY(node), opt, env);\r
+            if (is_set_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_INF_MASK)) {\r
+              if (MEM_STATUS_AT0(env->scan_env->backrefed_mem, en->m.regnum))\r
+                remove_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_INF_MASK);\r
+            }\r
+          }\r
+        break;\r
+\r
+      case ENCLOSURE_STOP_BACKTRACK:\r
+        r = optimize_nodes(NODE_BODY(node), opt, env);\r
+        break;\r
+\r
+      case ENCLOSURE_IF_ELSE:\r
+        {\r
+          OptEnv nenv;\r
+\r
+          copy_opt_env(&nenv, env);\r
+          r = optimize_nodes(NODE_ENCLOSURE_BODY(en), &xo, &nenv);\r
+          if (r == 0) {\r
+            add_mml(&nenv.mmd, &xo.len);\r
+            concat_left_node_opt_info(enc, opt, &xo);\r
+            if (IS_NOT_NULL(en->te.Then)) {\r
+              r = optimize_nodes(en->te.Then, &xo, &nenv);\r
+              if (r == 0) {\r
+                concat_left_node_opt_info(enc, opt, &xo);\r
+              }\r
+            }\r
+\r
+            if (IS_NOT_NULL(en->te.Else)) {\r
+              r = optimize_nodes(en->te.Else, &xo, env);\r
+              if (r == 0)\r
+                alt_merge_node_opt_info(opt, &xo, env);\r
+            }\r
+          }\r
+        }\r
+        break;\r
+      }\r
+    }\r
+    break;\r
+\r
+  case NODE_GIMMICK:\r
     break;\r
 \r
   default:\r
 #ifdef ONIG_DEBUG\r
-    fprintf(stderr, "optimize_node_left: undefined node type %d\n",\r
-           NTYPE(node));\r
+    fprintf(stderr, "optimize_nodes: undefined node type %d\n", NODE_TYPE(node));\r
 #endif\r
     r = ONIGERR_TYPE_BUG;\r
     break;\r
@@ -4900,7 +5527,7 @@ optimize_node_left(Node* node, NodeOptInfo* opt, OptEnv* env)
 }\r
 \r
 static int\r
-set_optimize_exact_info(regex_t* reg, OptExactInfo* e)\r
+set_optimize_exact(regex_t* reg, OptExact* e)\r
 {\r
   int r;\r
 \r
@@ -4911,90 +5538,94 @@ set_optimize_exact_info(regex_t* reg, OptExactInfo* e)
     CHECK_NULL_RETURN_MEMERR(reg->exact);\r
     xmemcpy(reg->exact, e->s, e->len);\r
     reg->exact_end = reg->exact + e->len;\r
-    reg->optimize = ONIG_OPTIMIZE_EXACT_IC;\r
+    reg->optimize = OPTIMIZE_EXACT_IC;\r
   }\r
   else {\r
     int allow_reverse;\r
 \r
-    reg->exact = str_dup(e->s, e->s + e->len);\r
+    reg->exact = onigenc_strdup(reg->enc, e->s, e->s + e->len);\r
     CHECK_NULL_RETURN_MEMERR(reg->exact);\r
     reg->exact_end = reg->exact + e->len;\r
  \r
     allow_reverse =\r
-       ONIGENC_IS_ALLOWED_REVERSE_MATCH(reg->enc, reg->exact, reg->exact_end);\r
+      ONIGENC_IS_ALLOWED_REVERSE_MATCH(reg->enc, reg->exact, reg->exact_end);\r
 \r
     if (e->len >= 3 || (e->len >= 2 && allow_reverse)) {\r
       r = set_bm_skip(reg->exact, reg->exact_end, reg->enc,\r
-                     reg->map, &(reg->int_map));\r
-      if (r) return r;\r
+                      reg->map, &(reg->int_map));\r
+      if (r != 0) return r;\r
 \r
       reg->optimize = (allow_reverse != 0\r
-                      ? ONIG_OPTIMIZE_EXACT_BM : ONIG_OPTIMIZE_EXACT_BM_NOT_REV);\r
+                       ? OPTIMIZE_EXACT_BM : OPTIMIZE_EXACT_BM_NO_REV);\r
     }\r
     else {\r
-      reg->optimize = ONIG_OPTIMIZE_EXACT;\r
+      reg->optimize = OPTIMIZE_EXACT;\r
     }\r
   }\r
 \r
   reg->dmin = e->mmd.min;\r
   reg->dmax = e->mmd.max;\r
 \r
-  if (reg->dmin != ONIG_INFINITE_DISTANCE) {\r
-    reg->threshold_len = reg->dmin + (int)(reg->exact_end - reg->exact);\r
+  if (reg->dmin != INFINITE_LEN) {\r
+    reg->threshold_len = reg->dmin + (int )(reg->exact_end - reg->exact);\r
   }\r
 \r
   return 0;\r
 }\r
 \r
 static void\r
-set_optimize_map_info(regex_t* reg, OptMapInfo* m)\r
+set_optimize_map(regex_t* reg, OptMap* m)\r
 {\r
   int i;\r
 \r
   for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)\r
     reg->map[i] = m->map[i];\r
 \r
-  reg->optimize   = ONIG_OPTIMIZE_MAP;\r
+  reg->optimize   = OPTIMIZE_MAP;\r
   reg->dmin       = m->mmd.min;\r
   reg->dmax       = m->mmd.max;\r
 \r
-  if (reg->dmin != ONIG_INFINITE_DISTANCE) {\r
+  if (reg->dmin != INFINITE_LEN) {\r
     reg->threshold_len = reg->dmin + 1;\r
   }\r
 }\r
 \r
 static void\r
-set_sub_anchor(regex_t* reg, OptAncInfo* anc)\r
+set_sub_anchor(regex_t* reg, OptAnc* anc)\r
 {\r
-  reg->sub_anchor |= anc->left_anchor  & ANCHOR_BEGIN_LINE;\r
-  reg->sub_anchor |= anc->right_anchor & ANCHOR_END_LINE;\r
+  reg->sub_anchor |= anc->left  & ANCHOR_BEGIN_LINE;\r
+  reg->sub_anchor |= anc->right & ANCHOR_END_LINE;\r
 }\r
 \r
-#ifdef ONIG_DEBUG\r
+#if defined(ONIG_DEBUG_COMPILE) || defined(ONIG_DEBUG_MATCH)\r
 static void print_optimize_info(FILE* f, regex_t* reg);\r
 #endif\r
 \r
 static int\r
 set_optimize_info_from_tree(Node* node, regex_t* reg, ScanEnv* scan_env)\r
 {\r
-\r
   int r;\r
-  NodeOptInfo opt;\r
+  NodeOpt opt;\r
   OptEnv env;\r
 \r
   env.enc            = reg->enc;\r
   env.options        = reg->options;\r
   env.case_fold_flag = reg->case_fold_flag;\r
-  env.scan_env   = scan_env;\r
+  env.scan_env       = scan_env;\r
   clear_mml(&env.mmd);\r
 \r
-  r = optimize_node_left(node, &opt, &env);\r
-  if (r) return r;\r
+  r = optimize_nodes(node, &opt, &env);\r
+  if (r != 0) return r;\r
+\r
+  reg->anchor = opt.anc.left & (ANCHOR_BEGIN_BUF |\r
+        ANCHOR_BEGIN_POSITION | ANCHOR_ANYCHAR_INF | ANCHOR_ANYCHAR_INF_ML |\r
+        ANCHOR_LOOK_BEHIND);\r
 \r
-  reg->anchor = opt.anc.left_anchor & (ANCHOR_BEGIN_BUF |\r
-        ANCHOR_BEGIN_POSITION | ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_ML);\r
+  if ((opt.anc.left & (ANCHOR_LOOK_BEHIND | ANCHOR_PREC_READ_NOT)) != 0)\r
+    reg->anchor &= ~ANCHOR_ANYCHAR_INF_ML;\r
 \r
-  reg->anchor |= opt.anc.right_anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF);\r
+  reg->anchor |= opt.anc.right & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF |\r
+       ANCHOR_PREC_READ_NOT);\r
 \r
   if (reg->anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF)) {\r
     reg->anchor_dmin = opt.len.min;\r
@@ -5002,25 +5633,24 @@ set_optimize_info_from_tree(Node* node, regex_t* reg, ScanEnv* scan_env)
   }\r
 \r
   if (opt.exb.len > 0 || opt.exm.len > 0) {\r
-    select_opt_exact_info(reg->enc, &opt.exb, &opt.exm);\r
-    if (opt.map.value > 0 &&\r
-       comp_opt_exact_or_map_info(&opt.exb, &opt.map) > 0) {\r
+    select_opt_exact(reg->enc, &opt.exb, &opt.exm);\r
+    if (opt.map.value > 0 && comp_opt_exact_or_map(&opt.exb, &opt.map) > 0) {\r
       goto set_map;\r
     }\r
     else {\r
-      r = set_optimize_exact_info(reg, &opt.exb);\r
+      r = set_optimize_exact(reg, &opt.exb);\r
       set_sub_anchor(reg, &opt.exb.anc);\r
     }\r
   }\r
   else if (opt.map.value > 0) {\r
   set_map:\r
-    set_optimize_map_info(reg, &opt.map);\r
+    set_optimize_map(reg, &opt.map);\r
     set_sub_anchor(reg, &opt.map.anc);\r
   }\r
   else {\r
-    reg->sub_anchor |= opt.anc.left_anchor & ANCHOR_BEGIN_LINE;\r
+    reg->sub_anchor |= opt.anc.left & ANCHOR_BEGIN_LINE;\r
     if (opt.len.max == 0)\r
-      reg->sub_anchor |= opt.anc.right_anchor & ANCHOR_END_LINE;\r
+      reg->sub_anchor |= opt.anc.right & ANCHOR_END_LINE;\r
   }\r
 \r
 #if defined(ONIG_DEBUG_COMPILE) || defined(ONIG_DEBUG_MATCH)\r
@@ -5032,7 +5662,7 @@ set_optimize_info_from_tree(Node* node, regex_t* reg, ScanEnv* scan_env)
 static void\r
 clear_optimize_info(regex_t* reg)\r
 {\r
-  reg->optimize      = ONIG_OPTIMIZE_NONE;\r
+  reg->optimize      = OPTIMIZE_NONE;\r
   reg->anchor        = 0;\r
   reg->anchor_dmin   = 0;\r
   reg->anchor_dmax   = 0;\r
@@ -5048,7 +5678,7 @@ clear_optimize_info(regex_t* reg)
 #ifdef ONIG_DEBUG\r
 \r
 static void print_enc_string(FILE* fp, OnigEncoding enc,\r
-                            const UChar *s, const UChar *end)\r
+                             const UChar *s, const UChar *end)\r
 {\r
   fprintf(fp, "\nPATTERN: /");\r
 \r
@@ -5060,10 +5690,10 @@ static void print_enc_string(FILE* fp, OnigEncoding enc,
     while (p < end) {\r
       code = ONIGENC_MBC_TO_CODE(enc, p, end);\r
       if (code >= 0x80) {\r
-       fprintf(fp, " 0x%04x ", (int )code);\r
+        fprintf(fp, " 0x%04x ", (int )code);\r
       }\r
       else {\r
-       fputc((int )code, fp);\r
+        fputc((int )code, fp);\r
       }\r
 \r
       p += enclen(enc, p);\r
@@ -5079,17 +5709,21 @@ static void print_enc_string(FILE* fp, OnigEncoding enc,
   fprintf(fp, "/\n");\r
 }\r
 \r
+#endif /* ONIG_DEBUG */\r
+\r
+#if defined(ONIG_DEBUG_COMPILE) || defined(ONIG_DEBUG_MATCH)\r
+\r
 static void\r
-print_distance_range(FILE* f, OnigDistance a, OnigDistance b)\r
+print_distance_range(FILE* f, OnigLen a, OnigLen b)\r
 {\r
-  if (a == ONIG_INFINITE_DISTANCE)\r
+  if (a == INFINITE_LEN)\r
     fputs("inf", f);\r
   else\r
     fprintf(f, "(%u)", a);\r
 \r
   fputs("-", f);\r
 \r
-  if (b == ONIG_INFINITE_DISTANCE)\r
+  if (b == INFINITE_LEN)\r
     fputs("inf", f);\r
   else\r
     fprintf(f, "(%u)", b);\r
@@ -5131,14 +5765,14 @@ print_anchor(FILE* f, int anchor)
     q = 1;\r
     fprintf(f, "end-line");\r
   }\r
-  if (anchor & ANCHOR_ANYCHAR_STAR) {\r
+  if (anchor & ANCHOR_ANYCHAR_INF) {\r
     if (q) fprintf(f, ", ");\r
     q = 1;\r
-    fprintf(f, "anychar-star");\r
+    fprintf(f, "anychar-inf");\r
   }\r
-  if (anchor & ANCHOR_ANYCHAR_STAR_ML) {\r
+  if (anchor & ANCHOR_ANYCHAR_INF_ML) {\r
     if (q) fprintf(f, ", ");\r
-    fprintf(f, "anychar-star-pl");\r
+    fprintf(f, "anychar-inf-ml");\r
   }\r
 \r
   fprintf(f, "]");\r
@@ -5168,9 +5802,9 @@ print_optimize_info(FILE* f, regex_t* reg)
     for (p = reg->exact; p < reg->exact_end; p++) {\r
       fputc(*p, f);\r
     }\r
-    fprintf(f, "]: length: %d\n", (reg->exact_end - reg->exact));\r
+    fprintf(f, "]: length: %ld\n", (reg->exact_end - reg->exact));\r
   }\r
-  else if (reg->optimize & ONIG_OPTIMIZE_MAP) {\r
+  else if (reg->optimize & OPTIMIZE_MAP) {\r
     int c, i, n = 0;\r
 \r
     for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)\r
@@ -5181,7 +5815,7 @@ print_optimize_info(FILE* f, regex_t* reg)
       c = 0;\r
       fputc('[', f);\r
       for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) {\r
-       if (reg->map[i] != 0) {\r
+        if (reg->map[i] != 0) {\r
           if (c > 0)  fputs(", ", f);\r
           c++;\r
           if (ONIGENC_MBC_MAXLEN(reg->enc) == 1 &&\r
@@ -5195,7 +5829,67 @@ print_optimize_info(FILE* f, regex_t* reg)
     }\r
   }\r
 }\r
-#endif /* ONIG_DEBUG */\r
+#endif\r
+\r
+\r
+extern RegexExt*\r
+onig_get_regex_ext(regex_t* reg)\r
+{\r
+  if (IS_NULL(REG_EXTP(reg))) {\r
+    RegexExt* ext = (RegexExt* )xmalloc(sizeof(*ext));\r
+    if (IS_NULL(ext)) return 0;\r
+\r
+    ext->pattern      = 0;\r
+    ext->pattern_end  = 0;\r
+#ifdef USE_CALLOUT\r
+    ext->tag_table    = 0;\r
+    ext->callout_num  = 0;\r
+    ext->callout_list_alloc = 0;\r
+    ext->callout_list = 0;\r
+#endif\r
+\r
+    REG_EXTPL(reg) = (void* )ext;\r
+  }\r
+\r
+  return REG_EXTP(reg);\r
+}\r
+\r
+static void\r
+free_regex_ext(RegexExt* ext)\r
+{\r
+  if (IS_NOT_NULL(ext)) {\r
+    if (IS_NOT_NULL(ext->pattern))\r
+      xfree((void* )ext->pattern);\r
+\r
+#ifdef USE_CALLOUT\r
+    if (IS_NOT_NULL(ext->tag_table))\r
+      onig_callout_tag_table_free(ext->tag_table);\r
+\r
+    if (IS_NOT_NULL(ext->callout_list))\r
+      onig_free_reg_callout_list(ext->callout_num, ext->callout_list);\r
+#endif\r
+\r
+    xfree(ext);\r
+  }\r
+}\r
+\r
+extern int\r
+onig_ext_set_pattern(regex_t* reg, const UChar* pattern, const UChar* pattern_end)\r
+{\r
+  RegexExt* ext;\r
+  UChar* s;\r
+\r
+  ext = onig_get_regex_ext(reg);\r
+  CHECK_NULL_RETURN_MEMERR(ext);\r
+\r
+  s = onigenc_strdup(reg->enc, pattern, pattern_end);\r
+  CHECK_NULL_RETURN_MEMERR(s);\r
+\r
+  ext->pattern     = s;\r
+  ext->pattern_end = s + (pattern_end - pattern);\r
+\r
+  return ONIG_NORMAL;\r
+}\r
 \r
 \r
 extern void\r
@@ -5207,11 +5901,12 @@ onig_free_body(regex_t* reg)
     if (IS_NOT_NULL(reg->int_map))          xfree(reg->int_map);\r
     if (IS_NOT_NULL(reg->int_map_backward)) xfree(reg->int_map_backward);\r
     if (IS_NOT_NULL(reg->repeat_range))     xfree(reg->repeat_range);\r
-    if (IS_NOT_NULL(reg->chain))            onig_free(reg->chain);\r
+    if (IS_NOT_NULL(REG_EXTP(reg))) {\r
+      free_regex_ext(REG_EXTP(reg));\r
+      REG_EXTPL(reg) = 0;\r
+    }\r
 \r
-#ifdef USE_NAMED_GROUP\r
     onig_names_free(reg);\r
-#endif\r
   }\r
 }\r
 \r
@@ -5225,7 +5920,6 @@ onig_free(regex_t* reg)
 }\r
 \r
 #define REGEX_TRANSFER(to,from) do {\\r
-  (to)->state = ONIG_STATE_MODIFY;\\r
   onig_free_body(to);\\r
   xmemcpy(to, from, sizeof(regex_t));\\r
   xfree(from);\\r
@@ -5234,76 +5928,41 @@ onig_free(regex_t* reg)
 extern void\r
 onig_transfer(regex_t* to, regex_t* from)\r
 {\r
-  THREAD_ATOMIC_START;\r
   REGEX_TRANSFER(to, from);\r
-  THREAD_ATOMIC_END;\r
-}\r
-\r
-#define REGEX_CHAIN_HEAD(reg) do {\\r
-  while (IS_NOT_NULL((reg)->chain)) {\\r
-    (reg) = (reg)->chain;\\r
-  }\\r
-} while (0)\r
-\r
-extern void\r
-onig_chain_link_add(regex_t* to, regex_t* add)\r
-{\r
-  THREAD_ATOMIC_START;\r
-  REGEX_CHAIN_HEAD(to);\r
-  to->chain = add;\r
-  THREAD_ATOMIC_END;\r
 }\r
 \r
-extern void\r
-onig_chain_reduce(regex_t* reg)\r
-{\r
-  regex_t *head, *prev;\r
-\r
-  prev = reg;\r
-  head = prev->chain;\r
-  if (IS_NOT_NULL(head)) {\r
-    reg->state = ONIG_STATE_MODIFY;\r
-    while (IS_NOT_NULL(head->chain)) {\r
-      prev = head;\r
-      head = head->chain;\r
-    }\r
-    prev->chain = (regex_t* )NULL;\r
-    REGEX_TRANSFER(reg, head);\r
-  }\r
-}\r
 \r
-#ifdef ONIG_DEBUG\r
-static void print_compiled_byte_code_list P_((FILE* f, regex_t* reg));\r
-#endif\r
-#ifdef ONIG_DEBUG_PARSE_TREE\r
+#ifdef ONIG_DEBUG_PARSE\r
 static void print_tree P_((FILE* f, Node* node));\r
 #endif\r
 \r
 extern int\r
 onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,\r
-             OnigErrorInfo* einfo)\r
+             OnigErrorInfo* einfo)\r
 {\r
 #define COMPILE_INIT_SIZE  20\r
 \r
   int r, init_size;\r
   Node*  root;\r
   ScanEnv  scan_env;\r
-#ifdef USE_SUBEXP_CALL\r
+#ifdef USE_CALL\r
   UnsetAddrList  uslist;\r
 #endif\r
 \r
-  if (IS_NOT_NULL(einfo)) einfo->par = (UChar* )NULL;\r
-\r
-  reg->state = ONIG_STATE_COMPILING;\r
+  root = 0;\r
+  if (IS_NOT_NULL(einfo)) {\r
+    einfo->enc = reg->enc;\r
+    einfo->par = (UChar* )NULL;\r
+  }\r
 \r
 #ifdef ONIG_DEBUG\r
   print_enc_string(stderr, reg->enc, pattern, pattern_end);\r
 #endif\r
 \r
   if (reg->alloc == 0) {\r
-    init_size = ((int)(pattern_end - pattern)) * 2;\r
+    init_size = (int )(pattern_end - pattern) * 2;\r
     if (init_size <= 0) init_size = COMPILE_INIT_SIZE;\r
-    r = BBUF_INIT(reg, init_size);\r
+    r = BB_INIT(reg, init_size);\r
     if (r != 0) goto end;\r
   }\r
   else\r
@@ -5314,18 +5973,14 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
   reg->num_null_check     = 0;\r
   reg->repeat_range_alloc = 0;\r
   reg->repeat_range       = (OnigRepeatRange* )NULL;\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-  reg->num_comb_exp_check = 0;\r
-#endif\r
 \r
-  r = onig_parse_make_tree(&root, pattern, pattern_end, reg, &scan_env);\r
-  if (r != 0 || root == NULL) goto err;\r
+  r = onig_parse_tree(&root, pattern, pattern_end, reg, &scan_env);\r
+  if (r != 0) goto err;\r
 \r
-#ifdef USE_NAMED_GROUP\r
   /* mixed use named group and no-named group */\r
   if (scan_env.num_named > 0 &&\r
       IS_SYNTAX_BV(scan_env.syntax, ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP) &&\r
-      !ONIG_IS_OPTION_ON(reg->options, ONIG_OPTION_CAPTURE_GROUP)) {\r
+      ! ONIG_IS_OPTION_ON(reg->options, ONIG_OPTION_CAPTURE_GROUP)) {\r
     if (scan_env.num_named != scan_env.num_mem)\r
       r = disable_noname_group_capture(&root, reg, &scan_env);\r
     else\r
@@ -5333,30 +5988,34 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
 \r
     if (r != 0) goto err;\r
   }\r
-#endif\r
 \r
-#ifdef USE_SUBEXP_CALL\r
+  r = check_backrefs(root, &scan_env);\r
+  if (r != 0) goto err;\r
+\r
+#ifdef USE_CALL\r
   if (scan_env.num_call > 0) {\r
     r = unset_addr_list_init(&uslist, scan_env.num_call);\r
     if (r != 0) goto err;\r
     scan_env.unset_addr_list = &uslist;\r
-    r = setup_subexp_call(root, &scan_env);\r
+    r = setup_call(root, &scan_env, 0);\r
+    if (r != 0) goto err_unset;\r
+    r = setup_call2(root);\r
     if (r != 0) goto err_unset;\r
-    r = subexp_recursive_check_trav(root, &scan_env);\r
+    r = recursive_call_check_trav(root, &scan_env, 0);\r
     if (r  < 0) goto err_unset;\r
-    r = subexp_inf_recursive_check_trav(root, &scan_env);\r
+    r = infinite_recursive_call_check_trav(root, &scan_env);\r
     if (r != 0) goto err_unset;\r
 \r
-    reg->num_call = scan_env.num_call;\r
+    setup_called_state(root, 0);\r
   }\r
-  else\r
-    reg->num_call = 0;\r
+\r
+  reg->num_call = scan_env.num_call;\r
 #endif\r
 \r
   r = setup_tree(root, reg, 0, &scan_env);\r
   if (r != 0) goto err_unset;\r
 \r
-#ifdef ONIG_DEBUG_PARSE_TREE\r
+#ifdef ONIG_DEBUG_PARSE\r
   print_tree(stderr, root);\r
 #endif\r
 \r
@@ -5364,38 +6023,12 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
   reg->bt_mem_start     = scan_env.bt_mem_start;\r
   reg->bt_mem_start    |= reg->capture_history;\r
   if (IS_FIND_CONDITION(reg->options))\r
-    BIT_STATUS_ON_ALL(reg->bt_mem_end);\r
+    MEM_STATUS_ON_ALL(reg->bt_mem_end);\r
   else {\r
     reg->bt_mem_end  = scan_env.bt_mem_end;\r
     reg->bt_mem_end |= reg->capture_history;\r
   }\r
-\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-  if (scan_env.backrefed_mem == 0\r
-#ifdef USE_SUBEXP_CALL\r
-      || scan_env.num_call == 0\r
-#endif\r
-      ) {\r
-    setup_comb_exp_check(root, 0, &scan_env);\r
-#ifdef USE_SUBEXP_CALL\r
-    if (scan_env.has_recursion != 0) {\r
-      scan_env.num_comb_exp_check = 0;\r
-    }\r
-    else\r
-#endif\r
-    if (scan_env.comb_exp_max_regnum > 0) {\r
-      int i;\r
-      for (i = 1; i <= scan_env.comb_exp_max_regnum; i++) {\r
-       if (BIT_STATUS_AT(scan_env.backrefed_mem, i) != 0) {\r
-         scan_env.num_comb_exp_check = 0;\r
-         break;\r
-       }\r
-      }\r
-    }\r
-  }\r
-\r
-  reg->num_comb_exp_check = scan_env.num_comb_exp_check;\r
-#endif\r
+  reg->bt_mem_start |= reg->bt_mem_end;\r
 \r
   clear_optimize_info(reg);\r
 #ifndef ONIG_DONT_OPTIMIZE\r
@@ -5403,32 +6036,45 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
   if (r != 0) goto err_unset;\r
 #endif\r
 \r
-  if (IS_NOT_NULL(scan_env.mem_nodes_dynamic)) {\r
-    xfree(scan_env.mem_nodes_dynamic);\r
-    scan_env.mem_nodes_dynamic = (Node** )NULL;\r
+  if (IS_NOT_NULL(scan_env.mem_env_dynamic)) {\r
+    xfree(scan_env.mem_env_dynamic);\r
+    scan_env.mem_env_dynamic = (MemEnv* )NULL;\r
   }\r
 \r
-  r = compile_tree(root, reg);\r
+  r = compile_tree(root, reg, &scan_env);\r
   if (r == 0) {\r
+    if (scan_env.keep_num > 0) {\r
+      r = add_opcode(reg, OP_UPDATE_VAR);\r
+      if (r != 0) goto err;\r
+      r = add_update_var_type(reg, UPDATE_VAR_KEEP_FROM_STACK_LAST);\r
+      if (r != 0) goto err;\r
+      r = add_mem_num(reg, 0 /* not used */);\r
+      if (r != 0) goto err;\r
+    }\r
+\r
     r = add_opcode(reg, OP_END);\r
-#ifdef USE_SUBEXP_CALL\r
+#ifdef USE_CALL\r
     if (scan_env.num_call > 0) {\r
-      r = unset_addr_list_fix(&uslist, reg);\r
+      r = fix_unset_addr_list(&uslist, reg);\r
       unset_addr_list_end(&uslist);\r
-      if (r) goto err;\r
+      if (r != 0) goto err;\r
     }\r
 #endif\r
 \r
-    if ((reg->num_repeat != 0) || (reg->bt_mem_end != 0))\r
+    if ((reg->num_repeat != 0) || (reg->bt_mem_end != 0)\r
+#ifdef USE_CALLOUT\r
+        || (IS_NOT_NULL(REG_EXTP(reg)) && REG_EXTP(reg)->callout_num != 0)\r
+#endif\r
+        )\r
       reg->stack_pop_level = STACK_POP_LEVEL_ALL;\r
     else {\r
       if (reg->bt_mem_start != 0)\r
-       reg->stack_pop_level = STACK_POP_LEVEL_MEM_START;\r
+        reg->stack_pop_level = STACK_POP_LEVEL_MEM_START;\r
       else\r
-       reg->stack_pop_level = STACK_POP_LEVEL_FREE;\r
+        reg->stack_pop_level = STACK_POP_LEVEL_FREE;\r
     }\r
   }\r
-#ifdef USE_SUBEXP_CALL\r
+#ifdef USE_CALL\r
   else if (scan_env.num_call > 0) {\r
     unset_addr_list_end(&uslist);\r
   }\r
@@ -5436,18 +6082,15 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
   onig_node_free(root);\r
 \r
 #ifdef ONIG_DEBUG_COMPILE\r
-#ifdef USE_NAMED_GROUP\r
   onig_print_names(stderr, reg);\r
-#endif\r
-  print_compiled_byte_code_list(stderr, reg);\r
+  onig_print_compiled_byte_code_list(stderr, reg);\r
 #endif\r
 \r
  end:\r
-  reg->state = ONIG_STATE_NORMAL;\r
   return r;\r
 \r
  err_unset:\r
-#ifdef USE_SUBEXP_CALL\r
+#ifdef USE_CALL\r
   if (scan_env.num_call > 0) {\r
     unset_addr_list_end(&uslist);\r
   }\r
@@ -5455,48 +6098,39 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
  err:\r
   if (IS_NOT_NULL(scan_env.error)) {\r
     if (IS_NOT_NULL(einfo)) {\r
-      einfo->enc     = scan_env.enc;\r
       einfo->par     = scan_env.error;\r
       einfo->par_end = scan_env.error_end;\r
     }\r
   }\r
 \r
   onig_node_free(root);\r
-  if (IS_NOT_NULL(scan_env.mem_nodes_dynamic))\r
-      xfree(scan_env.mem_nodes_dynamic);\r
+  if (IS_NOT_NULL(scan_env.mem_env_dynamic))\r
+      xfree(scan_env.mem_env_dynamic);\r
   return r;\r
 }\r
 \r
-#ifdef USE_RECOMPILE_API\r
+\r
+static int onig_inited = 0;\r
+\r
 extern int\r
-onig_recompile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,\r
-           OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax,\r
-           OnigErrorInfo* einfo)\r
+onig_reg_init(regex_t* reg, OnigOptionType option, OnigCaseFoldType case_fold_flag,\r
+              OnigEncoding enc, OnigSyntaxType* syntax)\r
 {\r
   int r;\r
-  regex_t *new_reg;\r
 \r
-  r = onig_new(&new_reg, pattern, pattern_end, option, enc, syntax, einfo);\r
-  if (r) return r;\r
-  if (ONIG_STATE(reg) == ONIG_STATE_NORMAL) {\r
-    onig_transfer(reg, new_reg);\r
-  }\r
-  else {\r
-    onig_chain_link_add(reg, new_reg);\r
-  }\r
-  return 0;\r
-}\r
-#endif\r
+  xmemset(reg, 0, sizeof(*reg));\r
 \r
-static int onig_inited = 0;\r
+  if (onig_inited == 0) {\r
+#if 0\r
+    return ONIGERR_LIBRARY_IS_NOT_INITIALIZED;\r
+#else\r
+    r = onig_initialize(&enc, 1);\r
+    if (r != 0)\r
+      return ONIGERR_FAIL_TO_INITIALIZE;\r
 \r
-extern int\r
-onig_reg_init(regex_t* reg, OnigOptionType option,\r
-             OnigCaseFoldType case_fold_flag,\r
-             OnigEncoding enc, OnigSyntaxType* syntax)\r
-{\r
-  if (! onig_inited)\r
-    onig_init();\r
+    onig_warning("You didn't call onig_initialize() explicitly");\r
+#endif\r
+  }\r
 \r
   if (IS_NULL(reg))\r
     return ONIGERR_INVALID_ARGUMENT;\r
@@ -5509,8 +6143,6 @@ onig_reg_init(regex_t* reg, OnigOptionType option,
     return ONIGERR_INVALID_COMBINATION_OF_OPTIONS;\r
   }\r
 \r
-  (reg)->state = ONIG_STATE_MODIFY;\r
-\r
   if ((option & ONIG_OPTION_NEGATE_SINGLELINE) != 0) {\r
     option |= syntax->options;\r
     option &= ~ONIG_OPTION_SINGLELINE;\r
@@ -5525,7 +6157,7 @@ onig_reg_init(regex_t* reg, OnigOptionType option,
   (reg)->exact            = (UChar* )NULL;\r
   (reg)->int_map          = (int* )NULL;\r
   (reg)->int_map_backward = (int* )NULL;\r
-  (reg)->chain            = (regex_t* )NULL;\r
+  REG_EXTPL(reg) = NULL;\r
 \r
   (reg)->p                = (UChar* )NULL;\r
   (reg)->alloc            = 0;\r
@@ -5537,14 +6169,15 @@ onig_reg_init(regex_t* reg, OnigOptionType option,
 }\r
 \r
 extern int\r
-onig_new_without_alloc(regex_t* reg, const UChar* pattern,\r
-          const UChar* pattern_end, OnigOptionType option, OnigEncoding enc,\r
-          OnigSyntaxType* syntax, OnigErrorInfo* einfo)\r
+onig_new_without_alloc(regex_t* reg,\r
+                       const UChar* pattern, const UChar* pattern_end,\r
+                       OnigOptionType option, OnigEncoding enc,\r
+                       OnigSyntaxType* syntax, OnigErrorInfo* einfo)\r
 {\r
   int r;\r
 \r
   r = onig_reg_init(reg, option, ONIGENC_CASE_FOLD_DEFAULT, enc, syntax);\r
-  if (r) return r;\r
+  if (r != 0) return r;\r
 \r
   r = onig_compile(reg, pattern, pattern_end, einfo);\r
   return r;\r
@@ -5552,8 +6185,8 @@ onig_new_without_alloc(regex_t* reg, const UChar* pattern,
 \r
 extern int\r
 onig_new(regex_t** reg, const UChar* pattern, const UChar* pattern_end,\r
-         OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax,\r
-         OnigErrorInfo* einfo)\r
+         OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax,\r
+         OnigErrorInfo* einfo)\r
 {\r
   int r;\r
 \r
@@ -5561,10 +6194,10 @@ onig_new(regex_t** reg, const UChar* pattern, const UChar* pattern_end,
   if (IS_NULL(*reg)) return ONIGERR_MEMORY;\r
 \r
   r = onig_reg_init(*reg, option, ONIGENC_CASE_FOLD_DEFAULT, enc, syntax);\r
-  if (r) goto err;\r
+  if (r != 0) goto err;\r
 \r
   r = onig_compile(*reg, pattern, pattern_end, einfo);\r
-  if (r) {\r
+  if (r != 0) {\r
   err:\r
     onig_free(*reg);\r
     *reg = NULL;\r
@@ -5572,37 +6205,41 @@ onig_new(regex_t** reg, const UChar* pattern, const UChar* pattern_end,
   return r;\r
 }\r
 \r
-\r
 extern int\r
-onig_init(void)\r
+onig_initialize(OnigEncoding encodings[], int n)\r
 {\r
+  int i;\r
+  int r;\r
+\r
   if (onig_inited != 0)\r
     return 0;\r
 \r
-  THREAD_SYSTEM_INIT;\r
-  THREAD_ATOMIC_START;\r
+  onigenc_init();\r
 \r
   onig_inited = 1;\r
 \r
-  onigenc_init();\r
-  /* onigenc_set_default_caseconv_table((UChar* )0); */\r
-\r
-#ifdef ONIG_DEBUG_STATISTICS\r
-  onig_statistics_init();\r
-#endif\r
+  for (i = 0; i < n; i++) {\r
+    OnigEncoding enc = encodings[i];\r
+    r = onig_initialize_encoding(enc);\r
+    if (r != 0)\r
+      return r;\r
+  }\r
 \r
-  THREAD_ATOMIC_END;\r
-  return 0;\r
+  return ONIG_NORMAL;\r
 }\r
 \r
+typedef struct EndCallListItem {\r
+  struct EndCallListItem* next;\r
+  void (*func)(void);\r
+} EndCallListItemType;\r
 \r
-static OnigEndCallListItemType* EndCallTop;\r
+static EndCallListItemType* EndCallTop;\r
 \r
 extern void onig_add_end_call(void (*func)(void))\r
 {\r
-  OnigEndCallListItemType* item;\r
+  EndCallListItemType* item;\r
 \r
-  item = (OnigEndCallListItemType* )xmalloc(sizeof(*item));\r
+  item = (EndCallListItemType* )xmalloc(sizeof(*item));\r
   if (item == 0) return ;\r
 \r
   item->next = EndCallTop;\r
@@ -5614,7 +6251,7 @@ extern void onig_add_end_call(void (*func)(void))
 static void\r
 exec_end_call_list(void)\r
 {\r
-  OnigEndCallListItemType* prev;\r
+  EndCallListItemType* prev;\r
   void (*func)(void);\r
 \r
   while (EndCallTop != 0) {\r
@@ -5630,26 +6267,16 @@ exec_end_call_list(void)
 extern int\r
 onig_end(void)\r
 {\r
-  THREAD_ATOMIC_START;\r
-\r
   exec_end_call_list();\r
 \r
-#ifdef ONIG_DEBUG_STATISTICS\r
-  onig_print_statistics(stderr);\r
+#ifdef USE_CALLOUT\r
+  onig_global_callout_names_free();\r
 #endif\r
 \r
-#ifdef USE_SHARED_CCLASS_TABLE\r
-  onig_free_shared_cclass_table();\r
-#endif\r
-\r
-#ifdef USE_PARSE_TREE_NODE_RECYCLE\r
-  onig_free_node_list();\r
-#endif\r
+  onigenc_end();\r
 \r
   onig_inited = 0;\r
 \r
-  THREAD_ATOMIC_END;\r
-  THREAD_SYSTEM_END;\r
   return 0;\r
 }\r
 \r
@@ -5675,9 +6302,10 @@ onig_is_in_code_range(const UChar* p, OnigCodePoint code)
 }\r
 \r
 extern int\r
-onig_is_code_in_cc_len(int elen, OnigCodePoint code, CClassNode* cc)\r
+onig_is_code_in_cc_len(int elen, OnigCodePoint code, /* CClassNode* */ void* cc_arg)\r
 {\r
   int found;\r
+  CClassNode* cc = (CClassNode* )cc_arg;\r
 \r
   if (elen > 1 || (code >= SINGLE_BYTE_SIZE)) {\r
     if (IS_NULL(cc->mbuf)) {\r
@@ -5712,141 +6340,7 @@ onig_is_code_in_cc(OnigEncoding enc, OnigCodePoint code, CClassNode* cc)
 }\r
 \r
 \r
-#ifdef ONIG_DEBUG\r
-\r
-/* arguments type */\r
-#define ARG_SPECIAL     -1\r
-#define ARG_NON          0\r
-#define ARG_RELADDR      1\r
-#define ARG_ABSADDR      2\r
-#define ARG_LENGTH       3\r
-#define ARG_MEMNUM       4\r
-#define ARG_OPTION       5\r
-#define ARG_STATE_CHECK  6\r
-\r
-OnigOpInfoType OnigOpInfo[] = {\r
-  { OP_FINISH,            "finish",          ARG_NON },\r
-  { OP_END,               "end",             ARG_NON },\r
-  { OP_EXACT1,            "exact1",          ARG_SPECIAL },\r
-  { OP_EXACT2,            "exact2",          ARG_SPECIAL },\r
-  { OP_EXACT3,            "exact3",          ARG_SPECIAL },\r
-  { OP_EXACT4,            "exact4",          ARG_SPECIAL },\r
-  { OP_EXACT5,            "exact5",          ARG_SPECIAL },\r
-  { OP_EXACTN,            "exactn",          ARG_SPECIAL },\r
-  { OP_EXACTMB2N1,        "exactmb2-n1",     ARG_SPECIAL },\r
-  { OP_EXACTMB2N2,        "exactmb2-n2",     ARG_SPECIAL },\r
-  { OP_EXACTMB2N3,        "exactmb2-n3",     ARG_SPECIAL },\r
-  { OP_EXACTMB2N,         "exactmb2-n",      ARG_SPECIAL },\r
-  { OP_EXACTMB3N,         "exactmb3n"  ,     ARG_SPECIAL },\r
-  { OP_EXACTMBN,          "exactmbn",        ARG_SPECIAL },\r
-  { OP_EXACT1_IC,         "exact1-ic",       ARG_SPECIAL },\r
-  { OP_EXACTN_IC,         "exactn-ic",       ARG_SPECIAL },\r
-  { OP_CCLASS,            "cclass",          ARG_SPECIAL },\r
-  { OP_CCLASS_MB,         "cclass-mb",       ARG_SPECIAL },\r
-  { OP_CCLASS_MIX,        "cclass-mix",      ARG_SPECIAL },\r
-  { OP_CCLASS_NOT,        "cclass-not",      ARG_SPECIAL },\r
-  { OP_CCLASS_MB_NOT,     "cclass-mb-not",   ARG_SPECIAL },\r
-  { OP_CCLASS_MIX_NOT,    "cclass-mix-not",  ARG_SPECIAL },\r
-  { OP_CCLASS_NODE,       "cclass-node",     ARG_SPECIAL },\r
-  { OP_ANYCHAR,           "anychar",         ARG_NON },\r
-  { OP_ANYCHAR_ML,        "anychar-ml",      ARG_NON },\r
-  { OP_ANYCHAR_STAR,      "anychar*",        ARG_NON },\r
-  { OP_ANYCHAR_ML_STAR,   "anychar-ml*",     ARG_NON },\r
-  { OP_ANYCHAR_STAR_PEEK_NEXT, "anychar*-peek-next", ARG_SPECIAL },\r
-  { OP_ANYCHAR_ML_STAR_PEEK_NEXT, "anychar-ml*-peek-next", ARG_SPECIAL },\r
-  { OP_WORD,                "word",            ARG_NON },\r
-  { OP_NOT_WORD,            "not-word",        ARG_NON },\r
-  { OP_WORD_BOUND,          "word-bound",      ARG_NON },\r
-  { OP_NOT_WORD_BOUND,      "not-word-bound",  ARG_NON },\r
-  { OP_WORD_BEGIN,          "word-begin",      ARG_NON },\r
-  { OP_WORD_END,            "word-end",        ARG_NON },\r
-  { OP_BEGIN_BUF,           "begin-buf",       ARG_NON },\r
-  { OP_END_BUF,             "end-buf",         ARG_NON },\r
-  { OP_BEGIN_LINE,          "begin-line",      ARG_NON },\r
-  { OP_END_LINE,            "end-line",        ARG_NON },\r
-  { OP_SEMI_END_BUF,        "semi-end-buf",    ARG_NON },\r
-  { OP_BEGIN_POSITION,      "begin-position",  ARG_NON },\r
-  { OP_BACKREF1,            "backref1",             ARG_NON },\r
-  { OP_BACKREF2,            "backref2",             ARG_NON },\r
-  { OP_BACKREFN,            "backrefn",             ARG_MEMNUM  },\r
-  { OP_BACKREFN_IC,         "backrefn-ic",          ARG_SPECIAL },\r
-  { OP_BACKREF_MULTI,       "backref_multi",        ARG_SPECIAL },\r
-  { OP_BACKREF_MULTI_IC,    "backref_multi-ic",     ARG_SPECIAL },\r
-  { OP_BACKREF_WITH_LEVEL,    "backref_at_level",     ARG_SPECIAL },\r
-  { OP_MEMORY_START_PUSH,   "mem-start-push",       ARG_MEMNUM  },\r
-  { OP_MEMORY_START,        "mem-start",            ARG_MEMNUM  },\r
-  { OP_MEMORY_END_PUSH,     "mem-end-push",         ARG_MEMNUM  },\r
-  { OP_MEMORY_END_PUSH_REC, "mem-end-push-rec",     ARG_MEMNUM  },\r
-  { OP_MEMORY_END,          "mem-end",              ARG_MEMNUM  },\r
-  { OP_MEMORY_END_REC,      "mem-end-rec",          ARG_MEMNUM  },\r
-  { OP_SET_OPTION_PUSH,     "set-option-push",      ARG_OPTION  },\r
-  { OP_SET_OPTION,          "set-option",           ARG_OPTION  },\r
-  { OP_FAIL,                "fail",                 ARG_NON },\r
-  { OP_JUMP,                "jump",                 ARG_RELADDR },\r
-  { OP_PUSH,                "push",                 ARG_RELADDR },\r
-  { OP_POP,                 "pop",                  ARG_NON },\r
-  { OP_PUSH_OR_JUMP_EXACT1, "push-or-jump-e1",      ARG_SPECIAL },\r
-  { OP_PUSH_IF_PEEK_NEXT,   "push-if-peek-next",    ARG_SPECIAL },\r
-  { OP_REPEAT,              "repeat",               ARG_SPECIAL },\r
-  { OP_REPEAT_NG,           "repeat-ng",            ARG_SPECIAL },\r
-  { OP_REPEAT_INC,          "repeat-inc",           ARG_MEMNUM  },\r
-  { OP_REPEAT_INC_NG,       "repeat-inc-ng",        ARG_MEMNUM  },\r
-  { OP_REPEAT_INC_SG,       "repeat-inc-sg",        ARG_MEMNUM  },\r
-  { OP_REPEAT_INC_NG_SG,    "repeat-inc-ng-sg",     ARG_MEMNUM  },\r
-  { OP_NULL_CHECK_START,    "null-check-start",     ARG_MEMNUM  },\r
-  { OP_NULL_CHECK_END,      "null-check-end",       ARG_MEMNUM  },\r
-  { OP_NULL_CHECK_END_MEMST,"null-check-end-memst", ARG_MEMNUM  },\r
-  { OP_NULL_CHECK_END_MEMST_PUSH,"null-check-end-memst-push", ARG_MEMNUM  },\r
-  { OP_PUSH_POS,             "push-pos",             ARG_NON },\r
-  { OP_POP_POS,              "pop-pos",              ARG_NON },\r
-  { OP_PUSH_POS_NOT,         "push-pos-not",         ARG_RELADDR },\r
-  { OP_FAIL_POS,             "fail-pos",             ARG_NON },\r
-  { OP_PUSH_STOP_BT,         "push-stop-bt",         ARG_NON },\r
-  { OP_POP_STOP_BT,          "pop-stop-bt",          ARG_NON },\r
-  { OP_LOOK_BEHIND,          "look-behind",          ARG_SPECIAL },\r
-  { OP_PUSH_LOOK_BEHIND_NOT, "push-look-behind-not", ARG_SPECIAL },\r
-  { OP_FAIL_LOOK_BEHIND_NOT, "fail-look-behind-not", ARG_NON },\r
-  { OP_CALL,                 "call",                 ARG_ABSADDR },\r
-  { OP_RETURN,               "return",               ARG_NON },\r
-  { OP_STATE_CHECK_PUSH,         "state-check-push",         ARG_SPECIAL },\r
-  { OP_STATE_CHECK_PUSH_OR_JUMP, "state-check-push-or-jump", ARG_SPECIAL },\r
-  { OP_STATE_CHECK,              "state-check",              ARG_STATE_CHECK },\r
-  { OP_STATE_CHECK_ANYCHAR_STAR, "state-check-anychar*",     ARG_STATE_CHECK },\r
-  { OP_STATE_CHECK_ANYCHAR_ML_STAR,\r
-    "state-check-anychar-ml*", ARG_STATE_CHECK },\r
-  { -1, "", ARG_NON }\r
-};\r
-\r
-static char*\r
-op2name(int opcode)\r
-{\r
-  int i;\r
-\r
-  for (i = 0; OnigOpInfo[i].opcode >= 0; i++) {\r
-    if (opcode == OnigOpInfo[i].opcode)\r
-      return OnigOpInfo[i].name;\r
-  }\r
-  return "";\r
-}\r
-\r
-static int\r
-op2arg_type(int opcode)\r
-{\r
-  int i;\r
-\r
-  for (i = 0; OnigOpInfo[i].opcode >= 0; i++) {\r
-    if (opcode == OnigOpInfo[i].opcode)\r
-      return OnigOpInfo[i].arg_type;\r
-  }\r
-  return ARG_SPECIAL;\r
-}\r
-\r
-static void\r
-Indent(FILE* f, int indent)\r
-{\r
-  int i;\r
-  for (i = 0; i < indent; i++) putc(' ', f);\r
-}\r
+#ifdef ONIG_DEBUG_PARSE\r
 \r
 static void\r
 p_string(FILE* f, int len, UChar* s)\r
@@ -5856,288 +6350,19 @@ p_string(FILE* f, int len, UChar* s)
 }\r
 \r
 static void\r
-p_len_string(FILE* f, LengthType len, int mb_len, UChar* s)\r
-{\r
-  int x = len * mb_len;\r
-\r
-  fprintf(f, ":%d:", len);\r
-  while (x-- > 0) { fputc(*s++, f); }\r
-}\r
-\r
-extern void\r
-onig_print_compiled_byte_code(FILE* f, UChar* bp, UChar** nextp,\r
-                              OnigEncoding enc)\r
-{\r
-  int i, n, arg_type;\r
-  RelAddrType addr;\r
-  LengthType len;\r
-  MemNumType mem;\r
-  StateCheckNumType scn;\r
-  OnigCodePoint code;\r
-  UChar *q;\r
-\r
-  fprintf(f, "[%s", op2name(*bp));\r
-  arg_type = op2arg_type(*bp);\r
-  if (arg_type != ARG_SPECIAL) {\r
-    bp++;\r
-    switch (arg_type) {\r
-    case ARG_NON:\r
-      break;\r
-    case ARG_RELADDR:\r
-      GET_RELADDR_INC(addr, bp);\r
-      fprintf(f, ":(%d)", addr);\r
-      break;\r
-    case ARG_ABSADDR:\r
-      GET_ABSADDR_INC(addr, bp);\r
-      fprintf(f, ":(%d)", addr);\r
-      break;\r
-    case ARG_LENGTH:\r
-      GET_LENGTH_INC(len, bp);\r
-      fprintf(f, ":%d", len);\r
-      break;\r
-    case ARG_MEMNUM:\r
-      mem = *((MemNumType* )bp);\r
-      bp += SIZE_MEMNUM;\r
-      fprintf(f, ":%d", mem);\r
-      break;\r
-    case ARG_OPTION:\r
-      {\r
-       OnigOptionType option = *((OnigOptionType* )bp);\r
-       bp += SIZE_OPTION;\r
-       fprintf(f, ":%d", option);\r
-      }\r
-      break;\r
-\r
-    case ARG_STATE_CHECK:\r
-      scn = *((StateCheckNumType* )bp);\r
-      bp += SIZE_STATE_CHECK_NUM;\r
-      fprintf(f, ":%d", scn);\r
-      break;\r
-    }\r
-  }\r
-  else {\r
-    switch (*bp++) {\r
-    case OP_EXACT1:\r
-    case OP_ANYCHAR_STAR_PEEK_NEXT:\r
-    case OP_ANYCHAR_ML_STAR_PEEK_NEXT:\r
-      p_string(f, 1, bp++); break;\r
-    case OP_EXACT2:\r
-      p_string(f, 2, bp); bp += 2; break;\r
-    case OP_EXACT3:\r
-      p_string(f, 3, bp); bp += 3; break;\r
-    case OP_EXACT4:\r
-      p_string(f, 4, bp); bp += 4; break;\r
-    case OP_EXACT5:\r
-      p_string(f, 5, bp); bp += 5; break;\r
-    case OP_EXACTN:\r
-      GET_LENGTH_INC(len, bp);\r
-      p_len_string(f, len, 1, bp);\r
-      bp += len;\r
-      break;\r
-    \r
-    case OP_EXACTMB2N1:\r
-      p_string(f, 2, bp); bp += 2; break;\r
-    case OP_EXACTMB2N2:\r
-      p_string(f, 4, bp); bp += 4; break;\r
-    case OP_EXACTMB2N3:\r
-      p_string(f, 6, bp); bp += 6; break;\r
-    case OP_EXACTMB2N:\r
-      GET_LENGTH_INC(len, bp);\r
-      p_len_string(f, len, 2, bp);\r
-      bp += len * 2;\r
-      break;\r
-    case OP_EXACTMB3N:\r
-      GET_LENGTH_INC(len, bp);\r
-      p_len_string(f, len, 3, bp);\r
-      bp += len * 3;\r
-      break;\r
-    case OP_EXACTMBN:\r
-      {\r
-       int mb_len;\r
-      \r
-       GET_LENGTH_INC(mb_len, bp);\r
-       GET_LENGTH_INC(len, bp);\r
-       fprintf(f, ":%d:%d:", mb_len, len);\r
-       n = len * mb_len;\r
-       while (n-- > 0) { fputc(*bp++, f); }\r
-      }\r
-      break;\r
-\r
-    case OP_EXACT1_IC:\r
-      len = enclen(enc, bp);\r
-      p_string(f, len, bp);\r
-      bp += len;\r
-      break;\r
-    case OP_EXACTN_IC:\r
-      GET_LENGTH_INC(len, bp);\r
-      p_len_string(f, len, 1, bp);\r
-      bp += len;\r
-      break;\r
-\r
-    case OP_CCLASS:\r
-      n = bitset_on_num((BitSetRef )bp);\r
-      bp += SIZE_BITSET;\r
-      fprintf(f, ":%d", n);\r
-      break;\r
-\r
-    case OP_CCLASS_NOT:\r
-      n = bitset_on_num((BitSetRef )bp);\r
-      bp += SIZE_BITSET;\r
-      fprintf(f, ":%d", n);\r
-      break;\r
-\r
-    case OP_CCLASS_MB:\r
-    case OP_CCLASS_MB_NOT:\r
-      GET_LENGTH_INC(len, bp);\r
-      q = bp;\r
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS\r
-      ALIGNMENT_RIGHT(q);\r
-#endif\r
-      GET_CODE_POINT(code, q);\r
-      bp += len;\r
-      fprintf(f, ":%d:%d", (int )code, len);\r
-      break;\r
-\r
-    case OP_CCLASS_MIX:\r
-    case OP_CCLASS_MIX_NOT:\r
-      n = bitset_on_num((BitSetRef )bp);\r
-      bp += SIZE_BITSET;\r
-      GET_LENGTH_INC(len, bp);\r
-      q = bp;\r
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS\r
-      ALIGNMENT_RIGHT(q);\r
-#endif\r
-      GET_CODE_POINT(code, q);\r
-      bp += len;\r
-      fprintf(f, ":%d:%d:%d", n, (int )code, len);\r
-      break;\r
-\r
-    case OP_CCLASS_NODE:\r
-      {\r
-        CClassNode *cc;\r
-\r
-        GET_POINTER_INC(cc, bp);\r
-        n = bitset_on_num(cc->bs);\r
-        fprintf(f, ":%u:%d", (unsigned int )cc, n);\r
-      }\r
-      break;\r
-\r
-    case OP_BACKREFN_IC:\r
-      mem = *((MemNumType* )bp);\r
-      bp += SIZE_MEMNUM;\r
-      fprintf(f, ":%d", mem);\r
-      break;\r
-\r
-    case OP_BACKREF_MULTI_IC:\r
-    case OP_BACKREF_MULTI:\r
-      fputs(" ", f);\r
-      GET_LENGTH_INC(len, bp);\r
-      for (i = 0; i < len; i++) {\r
-       GET_MEMNUM_INC(mem, bp);\r
-       if (i > 0) fputs(", ", f);\r
-       fprintf(f, "%d", mem);\r
-      }\r
-      break;\r
-\r
-    case OP_BACKREF_WITH_LEVEL:\r
-      {\r
-       OnigOptionType option;\r
-       LengthType level;\r
-\r
-       GET_OPTION_INC(option, bp);\r
-       fprintf(f, ":%d", option);\r
-       GET_LENGTH_INC(level, bp);\r
-       fprintf(f, ":%d", level);\r
-\r
-       fputs(" ", f);\r
-       GET_LENGTH_INC(len, bp);\r
-       for (i = 0; i < len; i++) {\r
-         GET_MEMNUM_INC(mem, bp);\r
-         if (i > 0) fputs(", ", f);\r
-         fprintf(f, "%d", mem);\r
-       }\r
-      }\r
-      break;\r
-\r
-    case OP_REPEAT:\r
-    case OP_REPEAT_NG:\r
-      {\r
-       mem = *((MemNumType* )bp);\r
-       bp += SIZE_MEMNUM;\r
-       addr = *((RelAddrType* )bp);\r
-       bp += SIZE_RELADDR;\r
-       fprintf(f, ":%d:%d", mem, addr);\r
-      }\r
-      break;\r
-\r
-    case OP_PUSH_OR_JUMP_EXACT1:\r
-    case OP_PUSH_IF_PEEK_NEXT:\r
-      addr = *((RelAddrType* )bp);\r
-      bp += SIZE_RELADDR;\r
-      fprintf(f, ":(%d)", addr);\r
-      p_string(f, 1, bp);\r
-      bp += 1;\r
-      break;\r
-\r
-    case OP_LOOK_BEHIND:\r
-      GET_LENGTH_INC(len, bp);\r
-      fprintf(f, ":%d", len);\r
-      break;\r
-\r
-    case OP_PUSH_LOOK_BEHIND_NOT:\r
-      GET_RELADDR_INC(addr, bp);\r
-      GET_LENGTH_INC(len, bp);\r
-      fprintf(f, ":%d:(%d)", len, addr);\r
-      break;\r
-\r
-    case OP_STATE_CHECK_PUSH:\r
-    case OP_STATE_CHECK_PUSH_OR_JUMP:\r
-      scn = *((StateCheckNumType* )bp);\r
-      bp += SIZE_STATE_CHECK_NUM;\r
-      addr = *((RelAddrType* )bp);\r
-      bp += SIZE_RELADDR;\r
-      fprintf(f, ":%d:(%d)", scn, addr);\r
-      break;\r
-\r
-    default:\r
-      fprintf(stderr, "onig_print_compiled_byte_code: undefined code %d\n",\r
-             *--bp);\r
-    }\r
-  }\r
-  fputs("]", f);\r
-  if (nextp) *nextp = bp;\r
-}\r
-\r
-static void\r
-print_compiled_byte_code_list(FILE* f, regex_t* reg)\r
+Indent(FILE* f, int indent)\r
 {\r
-  int ncode;\r
-  UChar* bp = reg->p;\r
-  UChar* end = reg->p + reg->used;\r
-\r
-  fprintf(f, "code length: %d\n", reg->used);\r
-\r
-  ncode = 0;\r
-  while (bp < end) {\r
-    ncode++;\r
-    if (bp > reg->p) {\r
-      if (ncode % 5 == 0)\r
-       fprintf(f, "\n");\r
-      else\r
-       fputs(" ", f);\r
-    }\r
-    onig_print_compiled_byte_code(f, bp, &bp, reg->enc);\r
-  }\r
-\r
-  fprintf(f, "\n");\r
+  int i;\r
+  for (i = 0; i < indent; i++) putc(' ', f);\r
 }\r
 \r
 static void\r
 print_indent_tree(FILE* f, Node* node, int indent)\r
 {\r
-  int i, type;\r
-  int add = 3;\r
+  int i;\r
+  NodeType type;\r
   UChar* p;\r
+  int add = 3;\r
 \r
   Indent(f, indent);\r
   if (IS_NULL(node)) {\r
@@ -6145,57 +6370,64 @@ print_indent_tree(FILE* f, Node* node, int indent)
     exit (0);\r
   }\r
 \r
-  type = NTYPE(node);\r
+  type = NODE_TYPE(node);\r
   switch (type) {\r
-  case NT_LIST:\r
-  case NT_ALT:\r
-    if (NTYPE(node) == NT_LIST)\r
-      fprintf(f, "<list:%x>\n", (int )node);\r
+  case NODE_LIST:\r
+  case NODE_ALT:\r
+    if (type == NODE_LIST)\r
+      fprintf(f, "<list:%p>\n", node);\r
     else\r
-      fprintf(f, "<alt:%x>\n", (int )node);\r
+      fprintf(f, "<alt:%p>\n", node);\r
 \r
-    print_indent_tree(f, NCAR(node), indent + add);\r
-    while (IS_NOT_NULL(node = NCDR(node))) {\r
-      if (NTYPE(node) != type) {\r
-       fprintf(f, "ERROR: list/alt right is not a cons. %d\n", NTYPE(node));\r
-       exit(0);\r
+    print_indent_tree(f, NODE_CAR(node), indent + add);\r
+    while (IS_NOT_NULL(node = NODE_CDR(node))) {\r
+      if (NODE_TYPE(node) != type) {\r
+        fprintf(f, "ERROR: list/alt right is not a cons. %d\n", NODE_TYPE(node));\r
+        exit(0);\r
       }\r
-      print_indent_tree(f, NCAR(node), indent + add);\r
+      print_indent_tree(f, NODE_CAR(node), indent + add);\r
     }\r
     break;\r
 \r
-  case NT_STR:\r
-    fprintf(f, "<string%s:%x>",\r
-           (NSTRING_IS_RAW(node) ? "-raw" : ""), (int )node);\r
-    for (p = NSTR(node)->s; p < NSTR(node)->end; p++) {\r
+  case NODE_STRING:\r
+    fprintf(f, "<string%s:%p>", (NODE_STRING_IS_RAW(node) ? "-raw" : ""), node);\r
+    for (p = STR_(node)->s; p < STR_(node)->end; p++) {\r
       if (*p >= 0x20 && *p < 0x7f)\r
-       fputc(*p, f);\r
+        fputc(*p, f);\r
       else {\r
-       fprintf(f, " 0x%02x", *p);\r
+        fprintf(f, " 0x%02x", *p);\r
       }\r
     }\r
     break;\r
 \r
-  case NT_CCLASS:\r
-    fprintf(f, "<cclass:%x>", (int )node);\r
-    if (IS_NCCLASS_NOT(NCCLASS(node))) fputs(" not", f);\r
-    if (NCCLASS(node)->mbuf) {\r
-      BBuf* bbuf = NCCLASS(node)->mbuf;\r
+  case NODE_CCLASS:\r
+    fprintf(f, "<cclass:%p>", node);\r
+    if (IS_NCCLASS_NOT(CCLASS_(node))) fputs(" not", f);\r
+    if (CCLASS_(node)->mbuf) {\r
+      BBuf* bbuf = CCLASS_(node)->mbuf;\r
       for (i = 0; i < bbuf->used; i++) {\r
-       if (i > 0) fprintf(f, ",");\r
-       fprintf(f, "%0x", bbuf->p[i]);\r
+        if (i > 0) fprintf(f, ",");\r
+        fprintf(f, "%0x", bbuf->p[i]);\r
       }\r
     }\r
     break;\r
 \r
-  case NT_CTYPE:\r
-    fprintf(f, "<ctype:%x> ", (int )node);\r
-    switch (NCTYPE(node)->ctype) {\r
+  case NODE_CTYPE:\r
+    fprintf(f, "<ctype:%p> ", node);\r
+    switch (CTYPE_(node)->ctype) {\r
+    case CTYPE_ANYCHAR:\r
+      fprintf(f, "<anychar:%p>", node);\r
+      break;\r
+\r
     case ONIGENC_CTYPE_WORD:\r
-      if (NCTYPE(node)->not != 0)\r
-       fputs("not word",       f);\r
+      if (CTYPE_(node)->not != 0)\r
+        fputs("not word", f);\r
       else\r
-       fputs("word",           f);\r
+        fputs("word",     f);\r
+\r
+      if (CTYPE_(node)->ascii_mode != 0)\r
+        fputs(" (ascii)", f);\r
+\r
       break;\r
 \r
     default:\r
@@ -6204,30 +6436,42 @@ print_indent_tree(FILE* f, Node* node, int indent)
     }\r
     break;\r
 \r
-  case NT_CANY:\r
-    fprintf(f, "<anychar:%x>", (int )node);\r
-    break;\r
-\r
-  case NT_ANCHOR:\r
-    fprintf(f, "<anchor:%x> ", (int )node);\r
-    switch (NANCHOR(node)->type) {\r
-    case ANCHOR_BEGIN_BUF:      fputs("begin buf",      f); break;\r
-    case ANCHOR_END_BUF:        fputs("end buf",        f); break;\r
-    case ANCHOR_BEGIN_LINE:     fputs("begin line",     f); break;\r
-    case ANCHOR_END_LINE:       fputs("end line",       f); break;\r
-    case ANCHOR_SEMI_END_BUF:   fputs("semi end buf",   f); break;\r
-    case ANCHOR_BEGIN_POSITION: fputs("begin position", f); break;\r
+  case NODE_ANCHOR:\r
+    fprintf(f, "<anchor:%p> ", node);\r
+    switch (ANCHOR_(node)->type) {\r
+    case ANCHOR_BEGIN_BUF:        fputs("begin buf",      f); break;\r
+    case ANCHOR_END_BUF:          fputs("end buf",        f); break;\r
+    case ANCHOR_BEGIN_LINE:       fputs("begin line",     f); break;\r
+    case ANCHOR_END_LINE:         fputs("end line",       f); break;\r
+    case ANCHOR_SEMI_END_BUF:     fputs("semi end buf",   f); break;\r
+    case ANCHOR_BEGIN_POSITION:   fputs("begin position", f); break;\r
 \r
-    case ANCHOR_WORD_BOUND:      fputs("word bound",     f); break;\r
-    case ANCHOR_NOT_WORD_BOUND:  fputs("not word bound", f); break;\r
+    case ANCHOR_WORD_BOUNDARY:    fputs("word boundary",     f); break;\r
+    case ANCHOR_NO_WORD_BOUNDARY: fputs("not word boundary", f); break;\r
 #ifdef USE_WORD_BEGIN_END\r
-    case ANCHOR_WORD_BEGIN:      fputs("word begin", f);     break;\r
-    case ANCHOR_WORD_END:        fputs("word end", f);       break;\r
+    case ANCHOR_WORD_BEGIN:       fputs("word begin", f);     break;\r
+    case ANCHOR_WORD_END:         fputs("word end", f);       break;\r
 #endif\r
-    case ANCHOR_PREC_READ:       fputs("prec read",      f); break;\r
-    case ANCHOR_PREC_READ_NOT:   fputs("prec read not",  f); break;\r
-    case ANCHOR_LOOK_BEHIND:     fputs("look_behind",    f); break;\r
-    case ANCHOR_LOOK_BEHIND_NOT: fputs("look_behind_not",f); break;\r
+    case ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:\r
+      fputs("extended-grapheme-cluster boundary", f); break;\r
+    case ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:\r
+      fputs("no-extended-grapheme-cluster boundary", f); break;\r
+    case ANCHOR_PREC_READ:\r
+      fprintf(f, "prec read\n");\r
+      print_indent_tree(f, NODE_BODY(node), indent + add);\r
+      break;\r
+    case ANCHOR_PREC_READ_NOT:\r
+      fprintf(f, "prec read not\n");\r
+      print_indent_tree(f, NODE_BODY(node), indent + add);\r
+      break;\r
+    case ANCHOR_LOOK_BEHIND:\r
+      fprintf(f, "look behind\n");\r
+      print_indent_tree(f, NODE_BODY(node), indent + add);\r
+      break;\r
+    case ANCHOR_LOOK_BEHIND_NOT:\r
+      fprintf(f, "look behind not\n");\r
+      print_indent_tree(f, NODE_BODY(node), indent + add);\r
+      break;\r
 \r
     default:\r
       fprintf(f, "ERROR: undefined anchor type.\n");\r
@@ -6235,46 +6479,46 @@ print_indent_tree(FILE* f, Node* node, int indent)
     }\r
     break;\r
 \r
-  case NT_BREF:\r
+  case NODE_BACKREF:\r
     {\r
       int* p;\r
-      BRefNode* br = NBREF(node);\r
+      BackRefNode* br = BACKREF_(node);\r
       p = BACKREFS_P(br);\r
-      fprintf(f, "<backref:%x>", (int )node);\r
+      fprintf(f, "<backref%s:%p>", NODE_IS_CHECKER(node) ? "-checker" : "", node);\r
       for (i = 0; i < br->back_num; i++) {\r
-       if (i > 0) fputs(", ", f);\r
-       fprintf(f, "%d", p[i]);\r
+        if (i > 0) fputs(", ", f);\r
+        fprintf(f, "%d", p[i]);\r
       }\r
     }\r
     break;\r
 \r
-#ifdef USE_SUBEXP_CALL\r
-  case NT_CALL:\r
+#ifdef USE_CALL\r
+  case NODE_CALL:\r
     {\r
-      CallNode* cn = NCALL(node);\r
-      fprintf(f, "<call:%x>", (int )node);\r
+      CallNode* cn = CALL_(node);\r
+      fprintf(f, "<call:%p>", node);\r
       p_string(f, cn->name_end - cn->name, cn->name);\r
     }\r
     break;\r
 #endif\r
 \r
-  case NT_QTFR:\r
-    fprintf(f, "<quantifier:%x>{%d,%d}%s\n", (int )node,\r
-           NQTFR(node)->lower, NQTFR(node)->upper,\r
-           (NQTFR(node)->greedy ? "" : "?"));\r
-    print_indent_tree(f, NQTFR(node)->target, indent + add);\r
+  case NODE_QUANT:\r
+    fprintf(f, "<quantifier:%p>{%d,%d}%s\n", node,\r
+            QUANT_(node)->lower, QUANT_(node)->upper,\r
+            (QUANT_(node)->greedy ? "" : "?"));\r
+    print_indent_tree(f, NODE_BODY(node), indent + add);\r
     break;\r
 \r
-  case NT_ENCLOSE:\r
-    fprintf(f, "<enclose:%x> ", (int )node);\r
-    switch (NENCLOSE(node)->type) {\r
-    case ENCLOSE_OPTION:\r
-      fprintf(f, "option:%d", NENCLOSE(node)->option);\r
+  case NODE_ENCLOSURE:\r
+    fprintf(f, "<enclosure:%p> ", node);\r
+    switch (ENCLOSURE_(node)->type) {\r
+    case ENCLOSURE_OPTION:\r
+      fprintf(f, "option:%d", ENCLOSURE_(node)->o.options);\r
       break;\r
-    case ENCLOSE_MEMORY:\r
-      fprintf(f, "memory:%d", NENCLOSE(node)->regnum);\r
+    case ENCLOSURE_MEMORY:\r
+      fprintf(f, "memory:%d", ENCLOSURE_(node)->m.regnum);\r
       break;\r
-    case ENCLOSE_STOP_BACKTRACK:\r
+    case ENCLOSURE_STOP_BACKTRACK:\r
       fprintf(f, "stop-bt");\r
       break;\r
 \r
@@ -6282,22 +6526,49 @@ print_indent_tree(FILE* f, Node* node, int indent)
       break;\r
     }\r
     fprintf(f, "\n");\r
-    print_indent_tree(f, NENCLOSE(node)->target, indent + add);\r
+    print_indent_tree(f, NODE_BODY(node), indent + add);\r
+    break;\r
+\r
+  case NODE_GIMMICK:\r
+    fprintf(f, "<gimmick:%p> ", node);\r
+    switch (GIMMICK_(node)->type) {\r
+    case GIMMICK_FAIL:\r
+      fprintf(f, "fail");\r
+      break;\r
+    case GIMMICK_KEEP:\r
+      fprintf(f, "keep:%d", GIMMICK_(node)->id);\r
+      break;\r
+    case GIMMICK_SAVE:\r
+      fprintf(f, "save:%d:%d", GIMMICK_(node)->detail_type, GIMMICK_(node)->id);\r
+      break;\r
+    case GIMMICK_UPDATE_VAR:\r
+      fprintf(f, "update_var:%d:%d", GIMMICK_(node)->detail_type, GIMMICK_(node)->id);\r
+      break;\r
+#ifdef USE_CALLOUT\r
+    case GIMMICK_CALLOUT:\r
+      switch (GIMMICK_(node)->detail_type) {\r
+      case ONIG_CALLOUT_OF_CONTENTS:\r
+        fprintf(f, "callout:contents:%d", GIMMICK_(node)->num);\r
+        break;\r
+      case ONIG_CALLOUT_OF_NAME:\r
+        fprintf(f, "callout:name:%d:%d", GIMMICK_(node)->id, GIMMICK_(node)->num);\r
+        break;\r
+      }\r
+#endif\r
+    }\r
     break;\r
 \r
   default:\r
-    fprintf(f, "print_indent_tree: undefined node type %d\n", NTYPE(node));\r
+    fprintf(f, "print_indent_tree: undefined node type %d\n", NODE_TYPE(node));\r
     break;\r
   }\r
 \r
-  if (type != NT_LIST && type != NT_ALT && type != NT_QTFR &&\r
-      type != NT_ENCLOSE)\r
+  if (type != NODE_LIST && type != NODE_ALT && type != NODE_QUANT &&\r
+      type != NODE_ENCLOSURE)\r
     fprintf(f, "\n");\r
   fflush(f);\r
 }\r
-#endif /* ONIG_DEBUG */\r
 \r
-#ifdef ONIG_DEBUG_PARSE_TREE\r
 static void\r
 print_tree(FILE* f, Node* node)\r
 {\r
index ec052627da6f5ae17872123cfae0379d9fe3d660..90547d359e77e440891667a547aad2412b3c7b70 100644 (file)
@@ -2,10 +2,8 @@
   regenc.c -  Oniguruma (regular expression library)\r
 **********************************************************************/\r
 /*-\r
- * Copyright (c) 2002-2007  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
  * All rights reserved.\r
- * \r
- * (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>\r
  *\r
  * Redistribution and use in source and binary forms, with or without\r
  * modification, are permitted provided that the following conditions\r
 \r
 OnigEncoding OnigEncDefaultCharEncoding = ONIG_ENCODING_INIT_DEFAULT;\r
 \r
+#define INITED_LIST_SIZE  20\r
+\r
+static int InitedListNum;\r
+\r
+static struct {\r
+  OnigEncoding enc;\r
+  int          inited;\r
+} InitedList[INITED_LIST_SIZE];\r
+\r
+static int\r
+enc_inited_entry(OnigEncoding enc)\r
+{\r
+  int i;\r
+\r
+  for (i = 0; i < InitedListNum; i++) {\r
+    if (InitedList[i].enc == enc) {\r
+      InitedList[i].inited = 1;\r
+      return i;\r
+    }\r
+  }\r
+\r
+  i = InitedListNum;\r
+  if (i < INITED_LIST_SIZE - 1) {\r
+    InitedList[i].enc    = enc;\r
+    InitedList[i].inited = 1;\r
+    InitedListNum++;\r
+    return i;\r
+  }\r
+\r
+  return -1;\r
+}\r
+\r
+static int\r
+enc_is_inited(OnigEncoding enc)\r
+{\r
+  int i;\r
+\r
+  for (i = 0; i < InitedListNum; i++) {\r
+    if (InitedList[i].enc == enc) {\r
+      return InitedList[i].inited;\r
+    }\r
+  }\r
+\r
+  return 0;\r
+}\r
+\r
+extern int\r
+onigenc_end(void)\r
+{\r
+  int i;\r
+\r
+  for (i = 0; i < InitedListNum; i++) {\r
+    InitedList[i].enc    = 0;\r
+    InitedList[i].inited = 0;\r
+  }\r
+\r
+  InitedListNum = 0;\r
+  return ONIG_NORMAL;\r
+}\r
+\r
 extern int\r
 onigenc_init(void)\r
 {\r
   return 0;\r
 }\r
 \r
+extern int\r
+onig_initialize_encoding(OnigEncoding enc)\r
+{\r
+  int r;\r
+\r
+  if (enc != ONIG_ENCODING_ASCII &&\r
+      ONIGENC_IS_ASCII_COMPATIBLE_ENCODING(enc)) {\r
+    OnigEncoding ascii = ONIG_ENCODING_ASCII;\r
+    if (ascii->init != 0 && enc_is_inited(ascii) == 0) {\r
+      r = ascii->init();\r
+      if (r != ONIG_NORMAL) return r;\r
+      enc_inited_entry(ascii);\r
+    }\r
+  }\r
+\r
+  if (enc->init != 0 &&\r
+      enc_is_inited(enc) == 0) {\r
+    r = (enc->init)();\r
+    if (r == ONIG_NORMAL)\r
+      enc_inited_entry(enc);\r
+    return r;\r
+  }\r
+\r
+  return 0;\r
+}\r
+\r
 extern OnigEncoding\r
 onigenc_get_default_encoding(void)\r
 {\r
@@ -52,6 +136,25 @@ onigenc_set_default_encoding(OnigEncoding enc)
   return 0;\r
 }\r
 \r
+extern UChar*\r
+onigenc_strdup(OnigEncoding enc, const UChar* s, const UChar* end)\r
+{\r
+  int slen, term_len, i;\r
+  UChar *r;\r
+\r
+  slen = (int )(end - s);\r
+  term_len = ONIGENC_MBC_MINLEN(enc);\r
+\r
+  r = (UChar* )xmalloc(slen + term_len);\r
+  CHECK_NULL_RETURN(r);\r
+  xmemcpy(r, s, slen);\r
+\r
+  for (i = 0; i < term_len; i++)\r
+    r[slen + i] = (UChar )0;\r
+\r
+  return r;\r
+}\r
+\r
 extern UChar*\r
 onigenc_get_right_adjust_char_head(OnigEncoding enc, const UChar* start, const UChar* s)\r
 {\r
@@ -99,6 +202,20 @@ onigenc_step_back(OnigEncoding enc, const UChar* start, const UChar* s, int n)
   return (UChar* )s;\r
 }\r
 \r
+#if 0\r
+extern int\r
+onigenc_mbc_enc_len_end(OnigEncoding enc, const UChar* p, const UChar* end)\r
+{\r
+  int len;\r
+  int n;\r
+\r
+  len = ONIGENC_MBC_ENC_LEN(enc, p);\r
+  n = (int )(end - p);\r
+\r
+  return (n < len ? n : len);\r
+}\r
+#endif\r
+\r
 extern UChar*\r
 onigenc_step(OnigEncoding enc, const UChar* p, const UChar* end, int n)\r
 {\r
@@ -172,74 +289,74 @@ onigenc_str_bytelen_null(OnigEncoding enc, const UChar* s)
 }\r
 \r
 const UChar OnigEncAsciiToLowerCaseTable[] = {\r
-  0000, 0001, 0002, 0003, 0004, 0005, 0006, 0007,\r
-  0010, 0011, 0012, 0013, 0014, 0015, 0016, 0017,\r
-  0020, 0021, 0022, 0023, 0024, 0025, 0026, 0027,\r
-  0030, 0031, 0032, 0033, 0034, 0035, 0036, 0037,\r
-  0040, 0041, 0042, 0043, 0044, 0045, 0046, 0047,\r
-  0050, 0051, 0052, 0053, 0054, 0055, 0056, 0057,\r
-  0060, 0061, 0062, 0063, 0064, 0065, 0066, 0067,\r
-  0070, 0071, 0072, 0073, 0074, 0075, 0076, 0077,\r
-  0100, 0141, 0142, 0143, 0144, 0145, 0146, 0147,\r
-  0150, 0151, 0152, 0153, 0154, 0155, 0156, 0157,\r
-  0160, 0161, 0162, 0163, 0164, 0165, 0166, 0167,\r
-  0170, 0171, 0172, 0133, 0134, 0135, 0136, 0137,\r
-  0140, 0141, 0142, 0143, 0144, 0145, 0146, 0147,\r
-  0150, 0151, 0152, 0153, 0154, 0155, 0156, 0157,\r
-  0160, 0161, 0162, 0163, 0164, 0165, 0166, 0167,\r
-  0170, 0171, 0172, 0173, 0174, 0175, 0176, 0177,\r
-  0200, 0201, 0202, 0203, 0204, 0205, 0206, 0207,\r
-  0210, 0211, 0212, 0213, 0214, 0215, 0216, 0217,\r
-  0220, 0221, 0222, 0223, 0224, 0225, 0226, 0227,\r
-  0230, 0231, 0232, 0233, 0234, 0235, 0236, 0237,\r
-  0240, 0241, 0242, 0243, 0244, 0245, 0246, 0247,\r
-  0250, 0251, 0252, 0253, 0254, 0255, 0256, 0257,\r
-  0260, 0261, 0262, 0263, 0264, 0265, 0266, 0267,\r
-  0270, 0271, 0272, 0273, 0274, 0275, 0276, 0277,\r
-  0300, 0301, 0302, 0303, 0304, 0305, 0306, 0307,\r
-  0310, 0311, 0312, 0313, 0314, 0315, 0316, 0317,\r
-  0320, 0321, 0322, 0323, 0324, 0325, 0326, 0327,\r
-  0330, 0331, 0332, 0333, 0334, 0335, 0336, 0337,\r
-  0340, 0341, 0342, 0343, 0344, 0345, 0346, 0347,\r
-  0350, 0351, 0352, 0353, 0354, 0355, 0356, 0357,\r
-  0360, 0361, 0362, 0363, 0364, 0365, 0366, 0367,\r
-  0370, 0371, 0372, 0373, 0374, 0375, 0376, 0377,\r
+  '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',\r
+  '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',\r
+  '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',\r
+  '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',\r
+  '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',\r
+  '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',\r
+  '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',\r
+  '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',\r
+  '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',\r
+  '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',\r
+  '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',\r
+  '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',\r
+  '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',\r
+  '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',\r
+  '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',\r
+  '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',\r
+  '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',\r
+  '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',\r
+  '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',\r
+  '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',\r
+  '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',\r
+  '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',\r
+  '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',\r
+  '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',\r
+  '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',\r
+  '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',\r
+  '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',\r
+  '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',\r
+  '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',\r
+  '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',\r
+  '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',\r
+  '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',\r
 };\r
 \r
 #ifdef USE_UPPER_CASE_TABLE\r
 const UChar OnigEncAsciiToUpperCaseTable[256] = {\r
-  0000, 0001, 0002, 0003, 0004, 0005, 0006, 0007,\r
-  0010, 0011, 0012, 0013, 0014, 0015, 0016, 0017,\r
-  0020, 0021, 0022, 0023, 0024, 0025, 0026, 0027,\r
-  0030, 0031, 0032, 0033, 0034, 0035, 0036, 0037,\r
-  0040, 0041, 0042, 0043, 0044, 0045, 0046, 0047,\r
-  0050, 0051, 0052, 0053, 0054, 0055, 0056, 0057,\r
-  0060, 0061, 0062, 0063, 0064, 0065, 0066, 0067,\r
-  0070, 0071, 0072, 0073, 0074, 0075, 0076, 0077,\r
-  0100, 0101, 0102, 0103, 0104, 0105, 0106, 0107,\r
-  0110, 0111, 0112, 0113, 0114, 0115, 0116, 0117,\r
-  0120, 0121, 0122, 0123, 0124, 0125, 0126, 0127,\r
-  0130, 0131, 0132, 0133, 0134, 0135, 0136, 0137,\r
-  0140, 0101, 0102, 0103, 0104, 0105, 0106, 0107,\r
-  0110, 0111, 0112, 0113, 0114, 0115, 0116, 0117,\r
-  0120, 0121, 0122, 0123, 0124, 0125, 0126, 0127,\r
-  0130, 0131, 0132, 0173, 0174, 0175, 0176, 0177,\r
-  0200, 0201, 0202, 0203, 0204, 0205, 0206, 0207,\r
-  0210, 0211, 0212, 0213, 0214, 0215, 0216, 0217,\r
-  0220, 0221, 0222, 0223, 0224, 0225, 0226, 0227,\r
-  0230, 0231, 0232, 0233, 0234, 0235, 0236, 0237,\r
-  0240, 0241, 0242, 0243, 0244, 0245, 0246, 0247,\r
-  0250, 0251, 0252, 0253, 0254, 0255, 0256, 0257,\r
-  0260, 0261, 0262, 0263, 0264, 0265, 0266, 0267,\r
-  0270, 0271, 0272, 0273, 0274, 0275, 0276, 0277,\r
-  0300, 0301, 0302, 0303, 0304, 0305, 0306, 0307,\r
-  0310, 0311, 0312, 0313, 0314, 0315, 0316, 0317,\r
-  0320, 0321, 0322, 0323, 0324, 0325, 0326, 0327,\r
-  0330, 0331, 0332, 0333, 0334, 0335, 0336, 0337,\r
-  0340, 0341, 0342, 0343, 0344, 0345, 0346, 0347,\r
-  0350, 0351, 0352, 0353, 0354, 0355, 0356, 0357,\r
-  0360, 0361, 0362, 0363, 0364, 0365, 0366, 0367,\r
-  0370, 0371, 0372, 0373, 0374, 0375, 0376, 0377,\r
+  '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',\r
+  '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',\r
+  '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',\r
+  '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',\r
+  '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',\r
+  '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',\r
+  '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',\r
+  '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',\r
+  '\100', '\101', '\102', '\103', '\104', '\105', '\106', '\107',\r
+  '\110', '\111', '\112', '\113', '\114', '\115', '\116', '\117',\r
+  '\120', '\121', '\122', '\123', '\124', '\125', '\126', '\127',\r
+  '\130', '\131', '\132', '\133', '\134', '\135', '\136', '\137',\r
+  '\140', '\101', '\102', '\103', '\104', '\105', '\106', '\107',\r
+  '\110', '\111', '\112', '\113', '\114', '\115', '\116', '\117',\r
+  '\120', '\121', '\122', '\123', '\124', '\125', '\126', '\127',\r
+  '\130', '\131', '\132', '\173', '\174', '\175', '\176', '\177',\r
+  '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',\r
+  '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',\r
+  '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',\r
+  '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',\r
+  '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',\r
+  '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',\r
+  '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',\r
+  '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',\r
+  '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',\r
+  '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',\r
+  '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',\r
+  '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',\r
+  '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',\r
+  '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',\r
+  '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',\r
+  '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',\r
 };\r
 #endif\r
 \r
@@ -279,74 +396,74 @@ const unsigned short OnigEncAsciiCtypeTable[256] = {
 };\r
 \r
 const UChar OnigEncISO_8859_1_ToLowerCaseTable[256] = {\r
-  0000, 0001, 0002, 0003, 0004, 0005, 0006, 0007,\r
-  0010, 0011, 0012, 0013, 0014, 0015, 0016, 0017,\r
-  0020, 0021, 0022, 0023, 0024, 0025, 0026, 0027,\r
-  0030, 0031, 0032, 0033, 0034, 0035, 0036, 0037,\r
-  0040, 0041, 0042, 0043, 0044, 0045, 0046, 0047,\r
-  0050, 0051, 0052, 0053, 0054, 0055, 0056, 0057,\r
-  0060, 0061, 0062, 0063, 0064, 0065, 0066, 0067,\r
-  0070, 0071, 0072, 0073, 0074, 0075, 0076, 0077,\r
-  0100, 0141, 0142, 0143, 0144, 0145, 0146, 0147,\r
-  0150, 0151, 0152, 0153, 0154, 0155, 0156, 0157,\r
-  0160, 0161, 0162, 0163, 0164, 0165, 0166, 0167,\r
-  0170, 0171, 0172, 0133, 0134, 0135, 0136, 0137,\r
-  0140, 0141, 0142, 0143, 0144, 0145, 0146, 0147,\r
-  0150, 0151, 0152, 0153, 0154, 0155, 0156, 0157,\r
-  0160, 0161, 0162, 0163, 0164, 0165, 0166, 0167,\r
-  0170, 0171, 0172, 0173, 0174, 0175, 0176, 0177,\r
-  0200, 0201, 0202, 0203, 0204, 0205, 0206, 0207,\r
-  0210, 0211, 0212, 0213, 0214, 0215, 0216, 0217,\r
-  0220, 0221, 0222, 0223, 0224, 0225, 0226, 0227,\r
-  0230, 0231, 0232, 0233, 0234, 0235, 0236, 0237,\r
-  0240, 0241, 0242, 0243, 0244, 0245, 0246, 0247,\r
-  0250, 0251, 0252, 0253, 0254, 0255, 0256, 0257,\r
-  0260, 0261, 0262, 0263, 0264, 0265, 0266, 0267,\r
-  0270, 0271, 0272, 0273, 0274, 0275, 0276, 0277,\r
-  0340, 0341, 0342, 0343, 0344, 0345, 0346, 0347,\r
-  0350, 0351, 0352, 0353, 0354, 0355, 0356, 0357,\r
-  0360, 0361, 0362, 0363, 0364, 0365, 0366, 0327,\r
-  0370, 0371, 0372, 0373, 0374, 0375, 0376, 0337,\r
-  0340, 0341, 0342, 0343, 0344, 0345, 0346, 0347,\r
-  0350, 0351, 0352, 0353, 0354, 0355, 0356, 0357,\r
-  0360, 0361, 0362, 0363, 0364, 0365, 0366, 0367,\r
-  0370, 0371, 0372, 0373, 0374, 0375, 0376, 0377\r
+  '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',\r
+  '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',\r
+  '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',\r
+  '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',\r
+  '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',\r
+  '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',\r
+  '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',\r
+  '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',\r
+  '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',\r
+  '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',\r
+  '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',\r
+  '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',\r
+  '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',\r
+  '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',\r
+  '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',\r
+  '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',\r
+  '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',\r
+  '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',\r
+  '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',\r
+  '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',\r
+  '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',\r
+  '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',\r
+  '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',\r
+  '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',\r
+  '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',\r
+  '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',\r
+  '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\327',\r
+  '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337',\r
+  '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',\r
+  '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',\r
+  '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',\r
+  '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377'\r
 };\r
 \r
 #ifdef USE_UPPER_CASE_TABLE\r
 const UChar OnigEncISO_8859_1_ToUpperCaseTable[256] = {\r
-  0000, 0001, 0002, 0003, 0004, 0005, 0006, 0007,\r
-  0010, 0011, 0012, 0013, 0014, 0015, 0016, 0017,\r
-  0020, 0021, 0022, 0023, 0024, 0025, 0026, 0027,\r
-  0030, 0031, 0032, 0033, 0034, 0035, 0036, 0037,\r
-  0040, 0041, 0042, 0043, 0044, 0045, 0046, 0047,\r
-  0050, 0051, 0052, 0053, 0054, 0055, 0056, 0057,\r
-  0060, 0061, 0062, 0063, 0064, 0065, 0066, 0067,\r
-  0070, 0071, 0072, 0073, 0074, 0075, 0076, 0077,\r
-  0100, 0101, 0102, 0103, 0104, 0105, 0106, 0107,\r
-  0110, 0111, 0112, 0113, 0114, 0115, 0116, 0117,\r
-  0120, 0121, 0122, 0123, 0124, 0125, 0126, 0127,\r
-  0130, 0131, 0132, 0133, 0134, 0135, 0136, 0137,\r
-  0140, 0101, 0102, 0103, 0104, 0105, 0106, 0107,\r
-  0110, 0111, 0112, 0113, 0114, 0115, 0116, 0117,\r
-  0120, 0121, 0122, 0123, 0124, 0125, 0126, 0127,\r
-  0130, 0131, 0132, 0173, 0174, 0175, 0176, 0177,\r
-  0200, 0201, 0202, 0203, 0204, 0205, 0206, 0207,\r
-  0210, 0211, 0212, 0213, 0214, 0215, 0216, 0217,\r
-  0220, 0221, 0222, 0223, 0224, 0225, 0226, 0227,\r
-  0230, 0231, 0232, 0233, 0234, 0235, 0236, 0237,\r
-  0240, 0241, 0242, 0243, 0244, 0245, 0246, 0247,\r
-  0250, 0251, 0252, 0253, 0254, 0255, 0256, 0257,\r
-  0260, 0261, 0262, 0263, 0264, 0265, 0266, 0267,\r
-  0270, 0271, 0272, 0273, 0274, 0275, 0276, 0277,\r
-  0300, 0301, 0302, 0303, 0304, 0305, 0306, 0307,\r
-  0310, 0311, 0312, 0313, 0314, 0315, 0316, 0317,\r
-  0320, 0321, 0322, 0323, 0324, 0325, 0326, 0327,\r
-  0330, 0331, 0332, 0333, 0334, 0335, 0336, 0337,\r
-  0300, 0301, 0302, 0303, 0304, 0305, 0306, 0307,\r
-  0310, 0311, 0312, 0313, 0314, 0315, 0316, 0317,\r
-  0320, 0321, 0322, 0323, 0324, 0325, 0326, 0367,\r
-  0330, 0331, 0332, 0333, 0334, 0335, 0336, 0377,\r
+  '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',\r
+  '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',\r
+  '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',\r
+  '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',\r
+  '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',\r
+  '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',\r
+  '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',\r
+  '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',\r
+  '\100', '\101', '\102', '\103', '\104', '\105', '\106', '\107',\r
+  '\110', '\111', '\112', '\113', '\114', '\115', '\116', '\117',\r
+  '\120', '\121', '\122', '\123', '\124', '\125', '\126', '\127',\r
+  '\130', '\131', '\132', '\133', '\134', '\135', '\136', '\137',\r
+  '\140', '\101', '\102', '\103', '\104', '\105', '\106', '\107',\r
+  '\110', '\111', '\112', '\113', '\114', '\115', '\116', '\117',\r
+  '\120', '\121', '\122', '\123', '\124', '\125', '\126', '\127',\r
+  '\130', '\131', '\132', '\173', '\174', '\175', '\176', '\177',\r
+  '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',\r
+  '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',\r
+  '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',\r
+  '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',\r
+  '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',\r
+  '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',\r
+  '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',\r
+  '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',\r
+  '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',\r
+  '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',\r
+  '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',\r
+  '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',\r
+  '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',\r
+  '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',\r
+  '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\367',\r
+  '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\377',\r
 };\r
 #endif\r
 \r
@@ -640,6 +757,33 @@ onigenc_always_false_is_allowed_reverse_match(const UChar* s   ARG_UNUSED,
   return FALSE;\r
 }\r
 \r
+extern int\r
+onigenc_always_true_is_valid_mbc_string(const UChar* s   ARG_UNUSED,\r
+                                       const UChar* end ARG_UNUSED)\r
+{\r
+  return TRUE;\r
+}\r
+\r
+extern int\r
+onigenc_length_check_is_valid_mbc_string(OnigEncoding enc,\r
+                                        const UChar* p, const UChar* end)\r
+{\r
+  while (p < end) {\r
+    p += enclen(enc, p);\r
+  }\r
+\r
+  if (p != end)\r
+    return FALSE;\r
+  else\r
+    return TRUE;\r
+}\r
+\r
+extern int\r
+onigenc_is_valid_mbc_string(OnigEncoding enc, const UChar* s, const UChar* end)\r
+{\r
+  return ONIGENC_IS_VALID_MBC_STRING(enc, s, end);\r
+}\r
+\r
 extern OnigCodePoint\r
 onigenc_mbn_mbc_to_code(OnigEncoding enc, const UChar* p, const UChar* end)\r
 {\r
@@ -730,7 +874,7 @@ onigenc_mb2_code_to_mbc(OnigEncoding enc, OnigCodePoint code, UChar *buf)
   if (enclen(enc, buf) != (p - buf))\r
     return ONIGERR_INVALID_CODE_POINT_VALUE;\r
 #endif\r
-  return (int)(p - buf);\r
+  return (int )(p - buf);\r
 }\r
 \r
 extern int\r
@@ -753,7 +897,7 @@ onigenc_mb4_code_to_mbc(OnigEncoding enc, OnigCodePoint code, UChar *buf)
   if (enclen(enc, buf) != (p - buf))\r
     return ONIGERR_INVALID_CODE_POINT_VALUE;\r
 #endif\r
-  return (int)(p - buf);\r
+  return (int )(p - buf);\r
 }\r
 \r
 extern int\r
@@ -790,6 +934,16 @@ onigenc_minimum_property_name_to_ctype(OnigEncoding enc, UChar* p, UChar* end)
   return ONIGERR_INVALID_CHAR_PROPERTY_NAME;\r
 }\r
 \r
+extern int\r
+onigenc_is_mbc_word_ascii(OnigEncoding enc, UChar* s, const UChar* end)\r
+{\r
+  OnigCodePoint code = ONIGENC_MBC_TO_CODE(enc, s, end);\r
+\r
+  if (code > 127) return 0;\r
+\r
+  return ONIGENC_IS_ASCII_CODE_WORD(code);\r
+}\r
+\r
 extern int\r
 onigenc_mb2_is_code_ctype(OnigEncoding enc, OnigCodePoint code,\r
                          unsigned int ctype)\r
@@ -839,66 +993,29 @@ onigenc_with_ascii_strncmp(OnigEncoding enc, const UChar* p, const UChar* end,
   return 0;\r
 }\r
 \r
-/* Property management */\r
-static int\r
-resize_property_list(int new_size, const OnigCodePoint*** plist, int* psize)\r
-{\r
-  int size;\r
-  const OnigCodePoint **list = *plist;\r
-\r
-  size = sizeof(OnigCodePoint*) * new_size;\r
-  if (IS_NULL(list)) {\r
-    list = (const OnigCodePoint** )xmalloc(size);\r
-  }\r
-  else {\r
-    list = (const OnigCodePoint** )xrealloc((void* )list, size, *psize * sizeof(OnigCodePoint*));\r
-  }\r
-\r
-  if (IS_NULL(list)) return ONIGERR_MEMORY;\r
-\r
-  *plist = list;\r
-  *psize = new_size;\r
-\r
-  return 0;\r
-}\r
-\r
 extern int\r
-onigenc_property_list_add_property(UChar* name, const OnigCodePoint* prop,\r
-     hash_table_type **table, const OnigCodePoint*** plist, int *pnum,\r
-     int *psize)\r
+onig_codes_cmp(OnigCodePoint a[], OnigCodePoint b[], int n)\r
 {\r
-#define PROP_INIT_SIZE     16\r
+  int i;\r
 \r
-  int r;\r
-\r
-  if (*psize <= *pnum) {\r
-    int new_size = (*psize == 0 ? PROP_INIT_SIZE : *psize * 2);\r
-    r = resize_property_list(new_size, plist, psize);\r
-    if (r != 0) return r;\r
+  for (i = 0; i < n; i++) {\r
+    if (a[i] != b[i])\r
+      return -1;\r
   }\r
 \r
-  (*plist)[*pnum] = prop;\r
-\r
-  if (ONIG_IS_NULL(*table)) {\r
-    *table = onig_st_init_strend_table_with_size(PROP_INIT_SIZE);\r
-    if (ONIG_IS_NULL(*table)) return ONIGERR_MEMORY;\r
-  }\r
-\r
-  *pnum = *pnum + 1;\r
-  onig_st_insert_strend(*table, name, name + strlen_s((char* )name, MAX_STRING_SIZE),\r
-                       (hash_data_type )(*pnum + ONIGENC_MAX_STD_CTYPE));\r
   return 0;\r
 }\r
 \r
 extern int\r
-onigenc_property_list_init(int (*f)(void))\r
+onig_codes_byte_at(OnigCodePoint codes[], int at)\r
 {\r
-  int r;\r
-\r
-  THREAD_ATOMIC_START;\r
+  int index;\r
+  int b;\r
+  OnigCodePoint code;\r
 \r
-  r = f();\r
+  index = at / 3;\r
+  b     = at % 3;\r
+  code = codes[index];\r
 \r
-  THREAD_ATOMIC_END;\r
-  return r;\r
+  return ((code >> ((2 - b) * 8)) & 0xff);\r
 }\r
index 1d39f9c054e95c09a14bcf2007e6d5bb510b9779..6235520a1ed641f277f1324bec7a7a2b687a239c 100644 (file)
@@ -4,7 +4,7 @@
   regenc.h -  Oniguruma (regular expression library)\r
 **********************************************************************/\r
 /*-\r
- * Copyright (c) 2002-2008  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
  * All rights reserved.\r
  *\r
  * Redistribution and use in source and binary forms, with or without\r
  * SUCH DAMAGE.\r
  */\r
 \r
-#ifndef PACKAGE\r
-/* PACKAGE is defined in config.h */\r
-//#include "config.h"\r
+#ifndef ONIGURUMA_EXPORT\r
+#define ONIGURUMA_EXPORT\r
 #endif\r
 \r
+//#include "config.h"\r
+//#include <stddef.h>\r
+\r
 #ifdef ONIG_ESCAPE_UCHAR_COLLISION\r
 #undef ONIG_ESCAPE_UCHAR_COLLISION\r
 #endif\r
@@ -71,7 +73,9 @@ typedef struct {
 #define ONIG_CHECK_NULL_RETURN(p)          if (ONIG_IS_NULL(p)) return NULL\r
 #define ONIG_CHECK_NULL_RETURN_VAL(p,val)  if (ONIG_IS_NULL(p)) return (val)\r
 \r
-#define enclen(enc,p)      ONIGENC_MBC_ENC_LEN(enc,p)\r
+#define MAX_CODE_POINT         (~((OnigCodePoint )0))\r
+\r
+#define enclen(enc,p)          ONIGENC_MBC_ENC_LEN(enc,p)\r
 \r
 /* character types bit flag */\r
 #define BIT_CTYPE_NEWLINE  (1<< ONIGENC_CTYPE_NEWLINE)\r
@@ -102,88 +106,157 @@ typedef struct {
   short int len;\r
 } PosixBracketEntryType;\r
 \r
+struct PropertyNameCtype {\r
+  char *name;\r
+  int ctype;\r
+};\r
 \r
 /* #define USE_CRNL_AS_LINE_TERMINATOR */\r
 #define USE_UNICODE_PROPERTIES\r
+#define USE_UNICODE_EXTENDED_GRAPHEME_CLUSTER\r
 /* #define USE_UNICODE_CASE_FOLD_TURKISH_AZERI */\r
-/* #define USE_UNICODE_ALL_LINE_TERMINATORS */  /* see Unicode.org UTF#18 */\r
+/* #define USE_UNICODE_ALL_LINE_TERMINATORS */  /* see Unicode.org UT#18 */\r
 \r
 \r
 #define ONIG_ENCODING_INIT_DEFAULT           ONIG_ENCODING_ASCII\r
 \r
+\r
+#define ENC_FLAG_ASCII_COMPATIBLE      (1<<0)\r
+#define ENC_FLAG_UNICODE               (1<<1)\r
+\r
+\r
 /* for encoding system implementation (internal) */\r
-ONIG_EXTERN int onigenc_ascii_apply_all_case_fold P_((OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg));\r
-ONIG_EXTERN int onigenc_ascii_get_case_fold_codes_by_str P_((OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]));\r
-ONIG_EXTERN int onigenc_apply_all_case_fold_with_map P_((int map_size, const OnigPairCaseFoldCodes map[], int ess_tsett_flag, OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg));\r
-ONIG_EXTERN int onigenc_get_case_fold_codes_by_str_with_map P_((int map_size, const OnigPairCaseFoldCodes map[], int ess_tsett_flag, OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]));\r
-ONIG_EXTERN int onigenc_not_support_get_ctype_code_range P_((OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[]));\r
-ONIG_EXTERN int onigenc_is_mbc_newline_0x0a P_((const UChar* p, const UChar* end));\r
+extern int onigenc_end(void);\r
+extern int onigenc_ascii_apply_all_case_fold P_((OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg));\r
+extern int onigenc_ascii_get_case_fold_codes_by_str P_((OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]));\r
+extern int onigenc_apply_all_case_fold_with_map P_((int map_size, const OnigPairCaseFoldCodes map[], int ess_tsett_flag, OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg));\r
+extern int onigenc_get_case_fold_codes_by_str_with_map P_((int map_size, const OnigPairCaseFoldCodes map[], int ess_tsett_flag, OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]));\r
+extern int onigenc_not_support_get_ctype_code_range P_((OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[]));\r
+extern int onigenc_is_mbc_newline_0x0a P_((const UChar* p, const UChar* end));\r
 \r
 \r
 /* methods for single byte encoding */\r
-ONIG_EXTERN int onigenc_ascii_mbc_case_fold P_((OnigCaseFoldType flag, const UChar** p, const UChar* end, UChar* lower));\r
-ONIG_EXTERN int onigenc_single_byte_mbc_enc_len P_((const UChar* p));\r
-ONIG_EXTERN OnigCodePoint onigenc_single_byte_mbc_to_code P_((const UChar* p, const UChar* end));\r
-ONIG_EXTERN int onigenc_single_byte_code_to_mbclen P_((OnigCodePoint code));\r
-ONIG_EXTERN int onigenc_single_byte_code_to_mbc P_((OnigCodePoint code, UChar *buf));\r
-ONIG_EXTERN UChar* onigenc_single_byte_left_adjust_char_head P_((const UChar* start, const UChar* s));\r
-ONIG_EXTERN int onigenc_always_true_is_allowed_reverse_match P_((const UChar* s, const UChar* end));\r
-ONIG_EXTERN int onigenc_always_false_is_allowed_reverse_match P_((const UChar* s, const UChar* end));\r
+extern int onigenc_ascii_mbc_case_fold P_((OnigCaseFoldType flag, const UChar** p, const UChar* end, UChar* lower));\r
+extern int onigenc_single_byte_mbc_enc_len P_((const UChar* p));\r
+extern OnigCodePoint onigenc_single_byte_mbc_to_code P_((const UChar* p, const UChar* end));\r
+extern int onigenc_single_byte_code_to_mbclen P_((OnigCodePoint code));\r
+extern int onigenc_single_byte_code_to_mbc P_((OnigCodePoint code, UChar *buf));\r
+extern UChar* onigenc_single_byte_left_adjust_char_head P_((const UChar* start, const UChar* s));\r
+extern int onigenc_always_true_is_allowed_reverse_match P_((const UChar* s, const UChar* end));\r
+extern int onigenc_always_false_is_allowed_reverse_match P_((const UChar* s, const UChar* end));\r
+extern int onigenc_always_true_is_valid_mbc_string P_((const UChar* s, const UChar* end));\r
+extern int onigenc_length_check_is_valid_mbc_string P_((OnigEncoding enc, const UChar* s, const UChar* end));\r
 \r
 /* methods for multi byte encoding */\r
-ONIG_EXTERN OnigCodePoint onigenc_mbn_mbc_to_code P_((OnigEncoding enc, const UChar* p, const UChar* end));\r
-ONIG_EXTERN int onigenc_mbn_mbc_case_fold P_((OnigEncoding enc, OnigCaseFoldType flag, const UChar** p, const UChar* end, UChar* lower));\r
-ONIG_EXTERN int onigenc_mb2_code_to_mbclen P_((OnigCodePoint code));\r
-ONIG_EXTERN int onigenc_mb2_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, UChar *buf));\r
-ONIG_EXTERN int onigenc_minimum_property_name_to_ctype P_((OnigEncoding enc, UChar* p, UChar* end));\r
-ONIG_EXTERN int onigenc_unicode_property_name_to_ctype P_((OnigEncoding enc, UChar* p, UChar* end));\r
-ONIG_EXTERN int onigenc_mb2_is_code_ctype P_((OnigEncoding enc, OnigCodePoint code, unsigned int ctype));\r
-ONIG_EXTERN int onigenc_mb4_code_to_mbclen P_((OnigCodePoint code));\r
-ONIG_EXTERN int onigenc_mb4_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, UChar *buf));\r
-ONIG_EXTERN int onigenc_mb4_is_code_ctype P_((OnigEncoding enc, OnigCodePoint code, unsigned int ctype));\r
-\r
+extern OnigCodePoint onigenc_mbn_mbc_to_code P_((OnigEncoding enc, const UChar* p, const UChar* end));\r
+extern int onigenc_mbn_mbc_case_fold P_((OnigEncoding enc, OnigCaseFoldType flag, const UChar** p, const UChar* end, UChar* lower));\r
+extern int onigenc_mb2_code_to_mbclen P_((OnigCodePoint code));\r
+extern int onigenc_mb2_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, UChar *buf));\r
+extern int onigenc_minimum_property_name_to_ctype P_((OnigEncoding enc, UChar* p, UChar* end));\r
+extern int onigenc_unicode_property_name_to_ctype P_((OnigEncoding enc, UChar* p, UChar* end));\r
+extern int onigenc_is_mbc_word_ascii P_((OnigEncoding enc, UChar* s, const UChar* end));\r
+extern int onigenc_mb2_is_code_ctype P_((OnigEncoding enc, OnigCodePoint code, unsigned int ctype));\r
+extern int onigenc_mb4_code_to_mbclen P_((OnigCodePoint code));\r
+extern int onigenc_mb4_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, UChar *buf));\r
+extern int onigenc_mb4_is_code_ctype P_((OnigEncoding enc, OnigCodePoint code, unsigned int ctype));\r
+extern struct PropertyNameCtype* onigenc_euc_jp_lookup_property_name P_((register const char *str, register size_t len));\r
+extern struct PropertyNameCtype* onigenc_sjis_lookup_property_name P_((register const char *str, register size_t len));\r
 \r
 /* in enc/unicode.c */\r
-ONIG_EXTERN int onigenc_unicode_is_code_ctype P_((OnigCodePoint code, unsigned int ctype));\r
-ONIG_EXTERN int onigenc_utf16_32_get_ctype_code_range P_((OnigCtype ctype, OnigCodePoint *sb_out, const OnigCodePoint* ranges[]));\r
-ONIG_EXTERN int onigenc_unicode_ctype_code_range P_((int ctype, const OnigCodePoint* ranges[]));\r
-ONIG_EXTERN int onigenc_unicode_get_case_fold_codes_by_str P_((OnigEncoding enc, OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]));\r
-ONIG_EXTERN int onigenc_unicode_mbc_case_fold P_((OnigEncoding enc, OnigCaseFoldType flag, const UChar** pp, const UChar* end, UChar* fold));\r
-ONIG_EXTERN int onigenc_unicode_apply_all_case_fold P_((OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg));\r
+extern int onigenc_unicode_is_code_ctype P_((OnigCodePoint code, unsigned int ctype));\r
+extern int onigenc_utf16_32_get_ctype_code_range P_((OnigCtype ctype, OnigCodePoint *sb_out, const OnigCodePoint* ranges[]));\r
+extern int onigenc_unicode_ctype_code_range P_((OnigCtype ctype, const OnigCodePoint* ranges[]));\r
+extern int onigenc_unicode_get_case_fold_codes_by_str P_((OnigEncoding enc, OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]));\r
+extern int onigenc_unicode_mbc_case_fold P_((OnigEncoding enc, OnigCaseFoldType flag, const UChar** pp, const UChar* end, UChar* fold));\r
+extern int onigenc_unicode_apply_all_case_fold P_((OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg));\r
+extern int onigenc_egcb_is_break_position P_((OnigEncoding enc, UChar* p, UChar* prev, const UChar* start, const UChar* end));\r
 \r
 \r
 #define UTF16_IS_SURROGATE_FIRST(c)    (((c) & 0xfc) == 0xd8)\r
 #define UTF16_IS_SURROGATE_SECOND(c)   (((c) & 0xfc) == 0xdc)\r
 \r
+/* from unicode generated codes */\r
+#define FOLDS1_FOLD(i)         (OnigUnicodeFolds1 + (i))\r
+#define FOLDS2_FOLD(i)         (OnigUnicodeFolds2 + (i))\r
+#define FOLDS3_FOLD(i)         (OnigUnicodeFolds3 + (i))\r
+#define FOLDS1_UNFOLDS_NUM(i)  (OnigUnicodeFolds1[(i)+1])\r
+#define FOLDS2_UNFOLDS_NUM(i)  (OnigUnicodeFolds2[(i)+2])\r
+#define FOLDS3_UNFOLDS_NUM(i)  (OnigUnicodeFolds3[(i)+3])\r
+#define FOLDS1_UNFOLDS(i)      (OnigUnicodeFolds1 + (i) + 2)\r
+#define FOLDS2_UNFOLDS(i)      (OnigUnicodeFolds2 + (i) + 3)\r
+#define FOLDS3_UNFOLDS(i)      (OnigUnicodeFolds3 + (i) + 4)\r
+#define FOLDS1_NEXT_INDEX(i)   ((i) + 2 + OnigUnicodeFolds1[(i)+1])\r
+#define FOLDS2_NEXT_INDEX(i)   ((i) + 3 + OnigUnicodeFolds2[(i)+2])\r
+#define FOLDS3_NEXT_INDEX(i)   ((i) + 4 + OnigUnicodeFolds3[(i)+3])\r
+\r
+#define FOLDS_FOLD_ADDR_BUK(buk, addr) do {\\r
+  if ((buk)->fold_len == 1)\\r
+    addr = OnigUnicodeFolds1 + (buk)->index;\\r
+  else if ((buk)->fold_len == 2)\\r
+    addr = OnigUnicodeFolds2 + (buk)->index;\\r
+  else if ((buk)->fold_len == 3)\\r
+    addr = OnigUnicodeFolds3 + (buk)->index;\\r
+  else\\r
+    addr = 0;\\r
+} while (0)\r
+\r
+extern OnigCodePoint OnigUnicodeFolds1[];\r
+extern OnigCodePoint OnigUnicodeFolds2[];\r
+extern OnigCodePoint OnigUnicodeFolds3[];\r
+\r
+struct ByUnfoldKey {\r
+  OnigCodePoint code;\r
+  short int     index;\r
+  short int     fold_len;\r
+};\r
+\r
+extern const struct ByUnfoldKey* onigenc_unicode_unfold_key(OnigCodePoint code);\r
+extern int onigenc_unicode_fold1_key(OnigCodePoint code[]);\r
+extern int onigenc_unicode_fold2_key(OnigCodePoint code[]);\r
+extern int onigenc_unicode_fold3_key(OnigCodePoint code[]);\r
+\r
+extern int onig_codes_cmp(OnigCodePoint a[], OnigCodePoint b[], int n);\r
+extern int onig_codes_byte_at(OnigCodePoint code[], int at);\r
+\r
+\r
+\r
 #define ONIGENC_ISO_8859_1_TO_LOWER_CASE(c) \\r
   OnigEncISO_8859_1_ToLowerCaseTable[c]\r
 #define ONIGENC_ISO_8859_1_TO_UPPER_CASE(c) \\r
   OnigEncISO_8859_1_ToUpperCaseTable[c]\r
 \r
-ONIG_EXTERN const UChar OnigEncISO_8859_1_ToLowerCaseTable[];\r
-ONIG_EXTERN const UChar OnigEncISO_8859_1_ToUpperCaseTable[];\r
+extern const UChar OnigEncISO_8859_1_ToLowerCaseTable[];\r
+extern const UChar OnigEncISO_8859_1_ToUpperCaseTable[];\r
 \r
-ONIG_EXTERN int\r
+extern int\r
 onigenc_with_ascii_strncmp P_((OnigEncoding enc, const UChar* p, const UChar* end, const UChar* sascii /* ascii */, int n));\r
-ONIG_EXTERN UChar*\r
+extern UChar*\r
 onigenc_step P_((OnigEncoding enc, const UChar* p, const UChar* end, int n));\r
 \r
 /* defined in regexec.c, but used in enc/xxx.c */\r
 extern int  onig_is_in_code_range P_((const UChar* p, OnigCodePoint code));\r
 \r
-ONIG_EXTERN OnigEncoding  OnigEncDefaultCharEncoding;\r
-ONIG_EXTERN const UChar  OnigEncAsciiToLowerCaseTable[];\r
-ONIG_EXTERN const UChar  OnigEncAsciiToUpperCaseTable[];\r
-ONIG_EXTERN const unsigned short OnigEncAsciiCtypeTable[];\r
+extern OnigEncoding  OnigEncDefaultCharEncoding;\r
+extern const UChar  OnigEncAsciiToLowerCaseTable[];\r
+extern const UChar  OnigEncAsciiToUpperCaseTable[];\r
+extern const unsigned short OnigEncAsciiCtypeTable[];\r
+\r
 \r
 #define ONIGENC_IS_ASCII_CODE(code)  ((code) < 0x80)\r
 #define ONIGENC_ASCII_CODE_TO_LOWER_CASE(c) OnigEncAsciiToLowerCaseTable[c]\r
 #define ONIGENC_ASCII_CODE_TO_UPPER_CASE(c) OnigEncAsciiToUpperCaseTable[c]\r
 #define ONIGENC_IS_ASCII_CODE_CTYPE(code,ctype) \\r
   ((OnigEncAsciiCtypeTable[code] & CTYPE_TO_BIT(ctype)) != 0)\r
+#define ONIGENC_IS_ASCII_CODE_WORD(code) \\r
+  ((OnigEncAsciiCtypeTable[code] & CTYPE_TO_BIT(ONIGENC_CTYPE_WORD)) != 0)\r
 #define ONIGENC_IS_ASCII_CODE_CASE_AMBIG(code) \\r
  (ONIGENC_IS_ASCII_CODE_CTYPE(code, ONIGENC_CTYPE_UPPER) ||\\r
   ONIGENC_IS_ASCII_CODE_CTYPE(code, ONIGENC_CTYPE_LOWER))\r
    \r
+#define ONIGENC_IS_UNICODE_ENCODING(enc) \\r
+  (((enc)->flag & ENC_FLAG_UNICODE) != 0)\r
+\r
+#define ONIGENC_IS_ASCII_COMPATIBLE_ENCODING(enc)  \\r
+  (((enc)->flag & ENC_FLAG_ASCII_COMPATIBLE) != 0)\r
 \r
 #endif /* REGENC_H */\r
index 1544e23f103711a4d309fdce39a8463ba7bb8ca6..222e8e613673ab2adb601f1cc5f07c9572f62d30 100644 (file)
@@ -2,11 +2,9 @@
   regerror.c -  Oniguruma (regular expression library)\r
 **********************************************************************/\r
 /*-\r
- * Copyright (c) 2002-2007  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
  * All rights reserved.\r
  *\r
- * (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>\r
- *\r
  * Redistribution and use in source and binary forms, with or without\r
  * modification, are permitted provided that the following conditions\r
  * are met:\r
  * SUCH DAMAGE.\r
  */\r
 \r
-#define HAVE_STDARG_PROTOTYPES\r
-\r
 #include "regint.h"\r
-\r
+#define HAVE_STDARG_PROTOTYPES\r
 #if 0\r
 #include <stdio.h> /* for vsnprintf() */\r
 \r
@@ -50,17 +46,21 @@ onig_error_code_to_format(int code)
 {\r
   char *p;\r
 \r
-  if (code >= 0) return (UChar* )0;\r
-\r
   switch (code) {\r
   case ONIG_MISMATCH:\r
     p = "mismatch"; break;\r
   case ONIG_NO_SUPPORT_CONFIG:\r
     p = "no support in this configuration"; break;\r
+  case ONIG_ABORT:\r
+    p = "abort"; break;\r
   case ONIGERR_MEMORY:\r
     p = "fail to memory allocation"; break;\r
   case ONIGERR_MATCH_STACK_LIMIT_OVER:\r
     p = "match-stack limit over"; break;\r
+  case ONIGERR_PARSE_DEPTH_LIMIT_OVER:\r
+    p = "parse depth limit over"; break;\r
+  case ONIGERR_RETRY_LIMIT_IN_MATCH_OVER:\r
+    p = "retry-limit-in-match over"; break;\r
   case ONIGERR_TYPE_BUG:\r
     p = "undefined type (bug)"; break;\r
   case ONIGERR_PARSER_BUG:\r
@@ -75,6 +75,8 @@ onig_error_code_to_format(int code)
     p = "default multibyte-encoding is not setted"; break;\r
   case ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR:\r
     p = "can't convert to wide-char on specified multibyte-encoding"; break;\r
+  case ONIGERR_FAIL_TO_INITIALIZE:\r
+    p = "fail to initialize"; break;\r
   case ONIGERR_INVALID_ARGUMENT:\r
     p = "invalid argument"; break;\r
   case ONIGERR_END_PATTERN_AT_LEFT_BRACE:\r
@@ -138,13 +140,11 @@ onig_error_code_to_format(int code)
   case ONIGERR_TOO_BIG_BACKREF_NUMBER:\r
     p = "too big backref number"; break;\r
   case ONIGERR_INVALID_BACKREF:\r
-#ifdef USE_NAMED_GROUP\r
     p = "invalid backref number/name"; break;\r
-#else\r
-    p = "invalid backref number"; break;\r
-#endif\r
   case ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED:\r
     p = "numbered backref/call is not allowed. (use name)"; break;\r
+  case ONIGERR_TOO_MANY_CAPTURES:\r
+    p = "too many captures"; break;\r
   case ONIGERR_TOO_BIG_WIDE_CHAR_VALUE:\r
     p = "too big wide-char value"; break;\r
   case ONIGERR_TOO_LONG_WIDE_CHAR_VALUE:\r
@@ -156,11 +156,7 @@ onig_error_code_to_format(int code)
   case ONIGERR_INVALID_GROUP_NAME:\r
     p = "invalid group name <%n>"; break;\r
   case ONIGERR_INVALID_CHAR_IN_GROUP_NAME:\r
-#ifdef USE_NAMED_GROUP\r
     p = "invalid char in group name <%n>"; break;\r
-#else\r
-    p = "invalid char in group number <%n>"; break;\r
-#endif\r
   case ONIGERR_UNDEFINED_NAME_REFERENCE:\r
     p = "undefined name <%n> reference"; break;\r
   case ONIGERR_UNDEFINED_GROUP_REFERENCE:\r
@@ -175,12 +171,30 @@ onig_error_code_to_format(int code)
     p = "group number is too big for capture history"; break;\r
   case ONIGERR_INVALID_CHAR_PROPERTY_NAME:\r
     p = "invalid character property name {%n}"; break;\r
+  case ONIGERR_INVALID_IF_ELSE_SYNTAX:\r
+    p = "invalid if-else syntax"; break;\r
+  case ONIGERR_INVALID_ABSENT_GROUP_PATTERN:\r
+    p = "invalid absent group pattern"; break;\r
+  case ONIGERR_INVALID_ABSENT_GROUP_GENERATOR_PATTERN:\r
+    p = "invalid absent group generator pattern"; break;\r
+  case ONIGERR_INVALID_CALLOUT_PATTERN:\r
+    p = "invalid callout pattern"; break;\r
+  case ONIGERR_INVALID_CALLOUT_NAME:\r
+    p = "invalid callout name"; break;\r
+  case ONIGERR_UNDEFINED_CALLOUT_NAME:\r
+    p = "undefined callout name"; break;\r
+  case ONIGERR_INVALID_CALLOUT_BODY:\r
+    p = "invalid callout body"; break;\r
+  case ONIGERR_INVALID_CALLOUT_TAG_NAME:\r
+    p = "invalid callout tag name"; break;\r
+  case ONIGERR_INVALID_CALLOUT_ARG:\r
+    p = "invalid callout arg"; break;\r
   case ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION:\r
     p = "not supported encoding combination"; break;\r
   case ONIGERR_INVALID_COMBINATION_OF_OPTIONS:\r
     p = "invalid combination of options"; break;\r
-  case ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT:\r
-    p = "over thread pass limit count"; break;\r
+  case ONIGERR_LIBRARY_IS_NOT_INITIALIZED:\r
+    p = "library is not initialized"; break;\r
 \r
   default:\r
     p = "undefined error code"; break;\r
@@ -212,24 +226,24 @@ static int to_ascii(OnigEncoding enc, UChar *s, UChar *end,
     while (p < end) {\r
       code = ONIGENC_MBC_TO_CODE(enc, p, end);\r
       if (code >= 0x80) {\r
-       if (code > 0xffff && len + 10 <= buf_size) {\r
-         sprint_byte_with_x((char*)(&(buf[len])), (unsigned int)(code >> 24));\r
-         sprint_byte((char*)(&(buf[len+4])),      (unsigned int)(code >> 16));\r
-         sprint_byte((char*)(&(buf[len+6])),      (unsigned int)(code >>  8));\r
-         sprint_byte((char*)(&(buf[len+8])),      (unsigned int)code);\r
-         len += 10;\r
-       }\r
-       else if (len + 6 <= buf_size) {\r
-         sprint_byte_with_x((char*)(&(buf[len])), (unsigned int)(code >> 8));\r
-         sprint_byte((char*)(&(buf[len+4])),      (unsigned int)code);\r
-         len += 6;\r
-       }\r
-       else {\r
-         break;\r
-       }\r
+        if (code > 0xffff && len + 10 <= buf_size) {\r
+          sprint_byte_with_x((char*)(&(buf[len])), (unsigned int)(code >> 24));\r
+          sprint_byte((char*)(&(buf[len+4])),      (unsigned int)(code >> 16));\r
+          sprint_byte((char*)(&(buf[len+6])),      (unsigned int)(code >>  8));\r
+          sprint_byte((char*)(&(buf[len+8])),      (unsigned int)code);\r
+          len += 10;\r
+        }\r
+        else if (len + 6 <= buf_size) {\r
+          sprint_byte_with_x((char*)(&(buf[len])), (unsigned int)(code >> 8));\r
+          sprint_byte((char*)(&(buf[len+4])),      (unsigned int)code);\r
+          len += 6;\r
+        }\r
+        else {\r
+          break;\r
+        }\r
       }\r
       else {\r
-       buf[len++] = (UChar )code;\r
+        buf[len++] = (UChar )code;\r
       }\r
 \r
       p += enclen(enc, p);\r
@@ -239,7 +253,7 @@ static int to_ascii(OnigEncoding enc, UChar *s, UChar *end,
     *is_over = ((p < end) ? 1 : 0);\r
   }\r
   else {\r
-    len = MIN((int)(end - s), buf_size);\r
+    len = MIN((int )(end - s), buf_size);\r
     xmemcpy(buf, s, (size_t )len);\r
     *is_over = ((buf_size < (end - s)) ? 1 : 0);\r
   }\r
@@ -280,39 +294,35 @@ onig_error_code_to_str(s, code, va_alist)
   case ONIGERR_INVALID_CHAR_PROPERTY_NAME:\r
     einfo = va_arg(vargs, OnigErrorInfo*);\r
     len = to_ascii(einfo->enc, einfo->par, einfo->par_end,\r
-                  parbuf, MAX_ERROR_PAR_LEN - 3, &is_over);\r
+                   parbuf, MAX_ERROR_PAR_LEN - 3, &is_over);\r
     q = onig_error_code_to_format(code);\r
     p = s;\r
     while (*q != '\0') {\r
       if (*q == '%') {\r
-       q++;\r
-       if (*q == 'n') { /* '%n': name */\r
-         xmemcpy(p, parbuf, len);\r
-         p += len;\r
-         if (is_over != 0) {\r
-           xmemcpy(p, "...", 3);\r
-           p += 3;\r
-         }\r
-         q++;\r
-       }\r
-       else\r
-         goto normal_char;\r
+        q++;\r
+        if (*q == 'n') { /* '%n': name */\r
+          xmemcpy(p, parbuf, len);\r
+          p += len;\r
+          if (is_over != 0) {\r
+            xmemcpy(p, "...", 3);\r
+            p += 3;\r
+          }\r
+          q++;\r
+        }\r
+        else\r
+          goto normal_char;\r
       }\r
       else {\r
       normal_char:\r
-       *p++ = *q++;\r
+        *p++ = *q++;\r
       }\r
     }\r
     *p = '\0';\r
-    len = (int)(p - s);\r
+    len = (int )(p - s);\r
     break;\r
 \r
   default:\r
     q = onig_error_code_to_format(code);\r
-    if (q == NULL) {\r
-      len = 0;\r
-      break;\r
-    }\r
     len = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, q);\r
     xmemcpy(s, q, len);\r
     s[len] = '\0';\r
@@ -349,7 +359,7 @@ onig_snprintf_with_pattern(buf, bufsize, enc, pat, pat_end, fmt, va_alist)
   n = xvsnprintf((char* )buf, bufsize, (const char* )fmt, args);\r
   va_end(args);\r
 \r
-  need = (int)(pat_end - pat) * 4 + 4;\r
+  need = (int )(pat_end - pat) * 4 + 4;\r
 \r
   if (n + need < bufsize) {\r
     strcat_s((char* )buf, bufsize, ": /");\r
@@ -357,40 +367,40 @@ onig_snprintf_with_pattern(buf, bufsize, enc, pat, pat_end, fmt, va_alist)
 \r
     p = pat;\r
     while (p < pat_end) {\r
-      if (*p == '\\') {\r
-       *s++ = *p++;\r
-       len = enclen(enc, p);\r
-       while (len-- > 0) *s++ = *p++;\r
-      }\r
-      else if (*p == '/') {\r
-       *s++ = (unsigned char )'\\';\r
-       *s++ = *p++;\r
-      }\r
-      else if (ONIGENC_IS_MBC_HEAD(enc, p)) {\r
+      if (ONIGENC_IS_MBC_HEAD(enc, p)) {\r
         len = enclen(enc, p);\r
         if (ONIGENC_MBC_MINLEN(enc) == 1) {\r
           while (len-- > 0) *s++ = *p++;\r
         }\r
-        else { /* for UTF16 */\r
+        else { /* for UTF16/32 */\r
           int blen;\r
 \r
           while (len-- > 0) {\r
-           sprint_byte_with_x((char* )bs, (unsigned int )(*p++));\r
+            sprint_byte_with_x((char* )bs, (unsigned int )(*p++));\r
             blen = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, bs);\r
             bp = bs;\r
             while (blen-- > 0) *s++ = *bp++;\r
           }\r
         }\r
       }\r
+      else if (*p == '\\') {\r
+        *s++ = *p++;\r
+        len = enclen(enc, p);\r
+        while (len-- > 0) *s++ = *p++;\r
+      }\r
+      else if (*p == '/') {\r
+        *s++ = (unsigned char )'\\';\r
+        *s++ = *p++;\r
+      }\r
       else if (!ONIGENC_IS_CODE_PRINT(enc, *p) &&\r
-              !ONIGENC_IS_CODE_SPACE(enc, *p)) {\r
-       sprint_byte_with_x((char* )bs, (unsigned int )(*p++));\r
-       len = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, bs);\r
+               !ONIGENC_IS_CODE_SPACE(enc, *p)) {\r
+        sprint_byte_with_x((char* )bs, (unsigned int )(*p++));\r
+        len = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, bs);\r
         bp = bs;\r
-       while (len-- > 0) *s++ = *bp++;\r
+        while (len-- > 0) *s++ = *bp++;\r
       }\r
       else {\r
-       *s++ = *p++;\r
+        *s++ = *p++;\r
       }\r
     }\r
 \r
index a175f3a6cc499c100d7cf44a32d15ea4e2298d26..7b0fda07f8966d0a43fc352b2f2fdc39a97286c1 100644 (file)
@@ -2,11 +2,9 @@
   regexec.c -  Oniguruma (regular expression library)\r
 **********************************************************************/\r
 /*-\r
- * Copyright (c) 2002-2008  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
  * All rights reserved.\r
  *\r
- * (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>\r
- *\r
  * Redistribution and use in source and binary forms, with or without\r
  * modification, are permitted provided that the following conditions\r
  * are met:\r
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
  * SUCH DAMAGE.\r
  */\r
-\r
 #include "regint.h"\r
 \r
-#define USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE\r
+#define IS_MBC_WORD_ASCII_MODE(enc,s,end,mode) \\r
+  ((mode) == 0 ? ONIGENC_IS_MBC_WORD(enc,s,end) : ONIGENC_IS_MBC_WORD_ASCII(enc,s,end))\r
 \r
 #ifdef USE_CRNL_AS_LINE_TERMINATOR\r
 #define ONIGENC_IS_MBC_CRNL(enc,p,end) \\r
    ONIGENC_IS_MBC_NEWLINE(enc,(p+enclen(enc,p)),end))\r
 #endif\r
 \r
+#define CHECK_INTERRUPT_IN_MATCH\r
+\r
+#ifdef USE_CALLOUT\r
+typedef struct {\r
+  int last_match_at_call_counter;\r
+  struct {\r
+    OnigType  type;\r
+    OnigValue val;\r
+  } slot[ONIG_CALLOUT_DATA_SLOT_NUM];\r
+} CalloutData;\r
+#endif\r
+\r
+struct OnigMatchParamStruct {\r
+  unsigned int    match_stack_limit;\r
+  unsigned long   retry_limit_in_match;\r
+#ifdef USE_CALLOUT\r
+  OnigCalloutFunc progress_callout_of_contents;\r
+  OnigCalloutFunc retraction_callout_of_contents;\r
+  int             match_at_call_counter;\r
+  void*           callout_user_data;\r
+  CalloutData*    callout_data;\r
+  int             callout_data_alloc_num;\r
+#endif\r
+};\r
+\r
+extern int\r
+onig_set_match_stack_limit_size_of_match_param(OnigMatchParam* param,\r
+                                               unsigned int limit)\r
+{\r
+  param->match_stack_limit = limit;\r
+  return ONIG_NORMAL;\r
+}\r
+\r
+extern int\r
+onig_set_retry_limit_in_match_of_match_param(OnigMatchParam* param,\r
+                                             unsigned long limit)\r
+{\r
+  param->retry_limit_in_match = limit;\r
+  return ONIG_NORMAL;\r
+}\r
+\r
+extern int\r
+onig_set_progress_callout_of_match_param(OnigMatchParam* param, OnigCalloutFunc f)\r
+{\r
+#ifdef USE_CALLOUT\r
+  param->progress_callout_of_contents = f;\r
+  return ONIG_NORMAL;\r
+#else\r
+  return ONIG_NO_SUPPORT_CONFIG;\r
+#endif\r
+}\r
+\r
+extern int\r
+onig_set_retraction_callout_of_match_param(OnigMatchParam* param, OnigCalloutFunc f)\r
+{\r
+#ifdef USE_CALLOUT\r
+  param->retraction_callout_of_contents = f;\r
+  return ONIG_NORMAL;\r
+#else\r
+  return ONIG_NO_SUPPORT_CONFIG;\r
+#endif\r
+}\r
+\r
+extern int\r
+onig_set_callout_user_data_of_match_param(OnigMatchParam* param, void* user_data)\r
+{\r
+#ifdef USE_CALLOUT\r
+  param->callout_user_data = user_data;\r
+  return ONIG_NORMAL;\r
+#else\r
+  return ONIG_NO_SUPPORT_CONFIG;\r
+#endif\r
+}\r
+\r
+\r
+\r
+typedef struct {\r
+  void* stack_p;\r
+  int   stack_n;\r
+  OnigOptionType options;\r
+  OnigRegion*    region;\r
+  int            ptr_num;\r
+  const UChar*   start;   /* search start position (for \G: BEGIN_POSITION) */\r
+  unsigned int   match_stack_limit;\r
+  unsigned long  retry_limit_in_match;\r
+  OnigMatchParam* mp;\r
+#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE\r
+  int    best_len;      /* for ONIG_OPTION_FIND_LONGEST */\r
+  UChar* best_s;\r
+#endif\r
+} MatchArg;\r
+\r
+\r
+#ifdef ONIG_DEBUG\r
+\r
+/* arguments type */\r
+typedef enum {\r
+  ARG_SPECIAL =  -1,\r
+  ARG_NON     =   0,\r
+  ARG_RELADDR =   1,\r
+  ARG_ABSADDR =   2,\r
+  ARG_LENGTH  =   3,\r
+  ARG_MEMNUM  =   4,\r
+  ARG_OPTION  =   5,\r
+  ARG_MODE    =   6\r
+} OpArgType;\r
+\r
+typedef struct {\r
+  short int opcode;\r
+  char*     name;\r
+  OpArgType arg_type;\r
+} OpInfoType;\r
+\r
+static OpInfoType OpInfo[] = {\r
+  { OP_FINISH,            "finish",          ARG_NON },\r
+  { OP_END,               "end",             ARG_NON },\r
+  { OP_EXACT1,            "exact1",          ARG_SPECIAL },\r
+  { OP_EXACT2,            "exact2",          ARG_SPECIAL },\r
+  { OP_EXACT3,            "exact3",          ARG_SPECIAL },\r
+  { OP_EXACT4,            "exact4",          ARG_SPECIAL },\r
+  { OP_EXACT5,            "exact5",          ARG_SPECIAL },\r
+  { OP_EXACTN,            "exactn",          ARG_SPECIAL },\r
+  { OP_EXACTMB2N1,        "exactmb2-n1",     ARG_SPECIAL },\r
+  { OP_EXACTMB2N2,        "exactmb2-n2",     ARG_SPECIAL },\r
+  { OP_EXACTMB2N3,        "exactmb2-n3",     ARG_SPECIAL },\r
+  { OP_EXACTMB2N,         "exactmb2-n",      ARG_SPECIAL },\r
+  { OP_EXACTMB3N,         "exactmb3n"  ,     ARG_SPECIAL },\r
+  { OP_EXACTMBN,          "exactmbn",        ARG_SPECIAL },\r
+  { OP_EXACT1_IC,         "exact1-ic",       ARG_SPECIAL },\r
+  { OP_EXACTN_IC,         "exactn-ic",       ARG_SPECIAL },\r
+  { OP_CCLASS,            "cclass",          ARG_SPECIAL },\r
+  { OP_CCLASS_MB,         "cclass-mb",       ARG_SPECIAL },\r
+  { OP_CCLASS_MIX,        "cclass-mix",      ARG_SPECIAL },\r
+  { OP_CCLASS_NOT,        "cclass-not",      ARG_SPECIAL },\r
+  { OP_CCLASS_MB_NOT,     "cclass-mb-not",   ARG_SPECIAL },\r
+  { OP_CCLASS_MIX_NOT,    "cclass-mix-not",  ARG_SPECIAL },\r
+#ifdef USE_OP_CCLASS_NODE\r
+  { OP_CCLASS_NODE,       "cclass-node",     ARG_SPECIAL },\r
+#endif\r
+  { OP_ANYCHAR,           "anychar",         ARG_NON },\r
+  { OP_ANYCHAR_ML,        "anychar-ml",      ARG_NON },\r
+  { OP_ANYCHAR_STAR,      "anychar*",        ARG_NON },\r
+  { OP_ANYCHAR_ML_STAR,   "anychar-ml*",     ARG_NON },\r
+  { OP_ANYCHAR_STAR_PEEK_NEXT, "anychar*-peek-next", ARG_SPECIAL },\r
+  { OP_ANYCHAR_ML_STAR_PEEK_NEXT, "anychar-ml*-peek-next", ARG_SPECIAL },\r
+  { OP_WORD,                "word",            ARG_NON },\r
+  { OP_WORD_ASCII,          "word-ascii",      ARG_NON },\r
+  { OP_NO_WORD,             "not-word",        ARG_NON },\r
+  { OP_NO_WORD_ASCII,       "not-word-ascii",  ARG_NON },\r
+  { OP_WORD_BOUNDARY,       "word-boundary",     ARG_MODE },\r
+  { OP_NO_WORD_BOUNDARY,    "not-word-boundary", ARG_MODE },\r
+  { OP_WORD_BEGIN,          "word-begin",      ARG_MODE },\r
+  { OP_WORD_END,            "word-end",        ARG_MODE },\r
+  { OP_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY, "extended-grapheme-cluster-boundary", ARG_NON },\r
+  { OP_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY, "no-extended-grapheme-cluster-boundary", ARG_NON },\r
+  { OP_BEGIN_BUF,           "begin-buf",       ARG_NON },\r
+  { OP_END_BUF,             "end-buf",         ARG_NON },\r
+  { OP_BEGIN_LINE,          "begin-line",      ARG_NON },\r
+  { OP_END_LINE,            "end-line",        ARG_NON },\r
+  { OP_SEMI_END_BUF,        "semi-end-buf",    ARG_NON },\r
+  { OP_BEGIN_POSITION,      "begin-position",  ARG_NON },\r
+  { OP_BACKREF1,            "backref1",             ARG_NON },\r
+  { OP_BACKREF2,            "backref2",             ARG_NON },\r
+  { OP_BACKREF_N,            "backref-n",           ARG_MEMNUM  },\r
+  { OP_BACKREF_N_IC,         "backref-n-ic",        ARG_SPECIAL },\r
+  { OP_BACKREF_MULTI,       "backref_multi",        ARG_SPECIAL },\r
+  { OP_BACKREF_MULTI_IC,    "backref_multi-ic",     ARG_SPECIAL },\r
+  { OP_BACKREF_WITH_LEVEL,  "backref_with_level",   ARG_SPECIAL },\r
+  { OP_BACKREF_CHECK,       "backref_check",        ARG_SPECIAL },\r
+  { OP_BACKREF_CHECK_WITH_LEVEL, "backref_check_with_level", ARG_SPECIAL },\r
+  { OP_MEMORY_START_PUSH,   "mem-start-push",       ARG_MEMNUM  },\r
+  { OP_MEMORY_START,        "mem-start",            ARG_MEMNUM  },\r
+  { OP_MEMORY_END_PUSH,     "mem-end-push",         ARG_MEMNUM  },\r
+  { OP_MEMORY_END_PUSH_REC, "mem-end-push-rec",     ARG_MEMNUM  },\r
+  { OP_MEMORY_END,          "mem-end",              ARG_MEMNUM  },\r
+  { OP_MEMORY_END_REC,      "mem-end-rec",          ARG_MEMNUM  },\r
+  { OP_FAIL,                "fail",                 ARG_NON },\r
+  { OP_JUMP,                "jump",                 ARG_RELADDR },\r
+  { OP_PUSH,                "push",                 ARG_RELADDR },\r
+  { OP_PUSH_SUPER,          "push-super",           ARG_RELADDR },\r
+  { OP_POP_OUT,             "pop-out",              ARG_NON },\r
+  { OP_PUSH_OR_JUMP_EXACT1, "push-or-jump-e1",      ARG_SPECIAL },\r
+  { OP_PUSH_IF_PEEK_NEXT,   "push-if-peek-next",    ARG_SPECIAL },\r
+  { OP_REPEAT,              "repeat",               ARG_SPECIAL },\r
+  { OP_REPEAT_NG,           "repeat-ng",            ARG_SPECIAL },\r
+  { OP_REPEAT_INC,          "repeat-inc",           ARG_MEMNUM  },\r
+  { OP_REPEAT_INC_NG,       "repeat-inc-ng",        ARG_MEMNUM  },\r
+  { OP_REPEAT_INC_SG,       "repeat-inc-sg",        ARG_MEMNUM  },\r
+  { OP_REPEAT_INC_NG_SG,    "repeat-inc-ng-sg",     ARG_MEMNUM  },\r
+  { OP_EMPTY_CHECK_START,   "empty-check-start",    ARG_MEMNUM  },\r
+  { OP_EMPTY_CHECK_END,     "empty-check-end",      ARG_MEMNUM  },\r
+  { OP_EMPTY_CHECK_END_MEMST,"empty-check-end-memst", ARG_MEMNUM  },\r
+  { OP_EMPTY_CHECK_END_MEMST_PUSH,"empty-check-end-memst-push", ARG_MEMNUM  },\r
+  { OP_PREC_READ_START,      "push-pos",             ARG_NON },\r
+  { OP_PREC_READ_END,        "pop-pos",              ARG_NON },\r
+  { OP_PREC_READ_NOT_START,  "prec-read-not-start",  ARG_RELADDR },\r
+  { OP_PREC_READ_NOT_END,    "prec-read-not-end",    ARG_NON },\r
+  { OP_ATOMIC_START,         "atomic-start",         ARG_NON },\r
+  { OP_ATOMIC_END,           "atomic-end",           ARG_NON },\r
+  { OP_LOOK_BEHIND,          "look-behind",          ARG_SPECIAL },\r
+  { OP_LOOK_BEHIND_NOT_START, "look-behind-not-start", ARG_SPECIAL },\r
+  { OP_LOOK_BEHIND_NOT_END,  "look-behind-not-end",  ARG_NON },\r
+  { OP_CALL,                 "call",                 ARG_ABSADDR },\r
+  { OP_RETURN,               "return",               ARG_NON },\r
+  { OP_PUSH_SAVE_VAL,        "push-save-val",        ARG_SPECIAL },\r
+  { OP_UPDATE_VAR,           "update-var",           ARG_SPECIAL },\r
+#ifdef USE_CALLOUT\r
+  { OP_CALLOUT_CONTENTS,     "callout-contents",     ARG_SPECIAL },\r
+  { OP_CALLOUT_NAME,         "callout-name",         ARG_SPECIAL },\r
+#endif\r
+  { -1, "", ARG_NON }\r
+};\r
+\r
+static char*\r
+op2name(int opcode)\r
+{\r
+  int i;\r
+\r
+  for (i = 0; OpInfo[i].opcode >= 0; i++) {\r
+    if (opcode == OpInfo[i].opcode)\r
+      return OpInfo[i].name;\r
+  }\r
+  return "";\r
+}\r
+\r
+static int\r
+op2arg_type(int opcode)\r
+{\r
+  int i;\r
+\r
+  for (i = 0; OpInfo[i].opcode >= 0; i++) {\r
+    if (opcode == OpInfo[i].opcode)\r
+      return OpInfo[i].arg_type;\r
+  }\r
+  return ARG_SPECIAL;\r
+}\r
+\r
+static void\r
+p_string(FILE* f, int len, UChar* s)\r
+{\r
+  fputs(":", f);\r
+  while (len-- > 0) { fputc(*s++, f); }\r
+}\r
+\r
+static void\r
+p_len_string(FILE* f, LengthType len, int mb_len, UChar* s)\r
+{\r
+  int x = len * mb_len;\r
+\r
+  fprintf(f, ":%d:", len);\r
+  while (x-- > 0) { fputc(*s++, f); }\r
+}\r
+\r
+static void\r
+p_rel_addr(FILE* f, RelAddrType rel_addr, UChar* p, UChar* start)\r
+{\r
+  RelAddrType curr = (RelAddrType )(p - start);\r
+\r
+  fprintf(f, "{%d/%d}", rel_addr, curr + rel_addr);\r
+}\r
+\r
+static int\r
+bitset_on_num(BitSetRef bs)\r
+{\r
+  int i, n;\r
+\r
+  n = 0;\r
+  for (i = 0; i < SINGLE_BYTE_SIZE; i++) {\r
+    if (BITSET_AT(bs, i)) n++;\r
+  }\r
+  return n;\r
+}\r
+\r
+extern void\r
+onig_print_compiled_byte_code(FILE* f, UChar* bp, UChar** nextp, UChar* start,\r
+                              OnigEncoding enc)\r
+{\r
+  int i, n;\r
+  OpArgType   arg_type;\r
+  RelAddrType addr;\r
+  LengthType  len;\r
+  MemNumType  mem;\r
+  OnigCodePoint  code;\r
+  OnigOptionType option;\r
+  ModeType mode;\r
+  UChar *q;\r
+\r
+  fprintf(f, "%s", op2name(*bp));\r
+  arg_type = op2arg_type(*bp);\r
+  if (arg_type != ARG_SPECIAL) {\r
+    bp++;\r
+    switch (arg_type) {\r
+    case ARG_NON:\r
+      break;\r
+    case ARG_RELADDR:\r
+      GET_RELADDR_INC(addr, bp);\r
+      fputc(':', f);\r
+      p_rel_addr(f, addr, bp, start);\r
+      break;\r
+    case ARG_ABSADDR:\r
+      GET_ABSADDR_INC(addr, bp);\r
+      fprintf(f, ":{/%d}", addr);\r
+      break;\r
+    case ARG_LENGTH:\r
+      GET_LENGTH_INC(len, bp);\r
+      fprintf(f, ":%d", len);\r
+      break;\r
+    case ARG_MEMNUM:\r
+      mem = *((MemNumType* )bp);\r
+      bp += SIZE_MEMNUM;\r
+      fprintf(f, ":%d", mem);\r
+      break;\r
+    case ARG_OPTION:\r
+      {\r
+        OnigOptionType option = *((OnigOptionType* )bp);\r
+        bp += SIZE_OPTION;\r
+        fprintf(f, ":%d", option);\r
+      }\r
+      break;\r
+    case ARG_MODE:\r
+      mode = *((ModeType* )bp);\r
+      bp += SIZE_MODE;\r
+      fprintf(f, ":%d", mode);\r
+      break;\r
+    default:\r
+      break;\r
+    }\r
+  }\r
+  else {\r
+    switch (*bp++) {\r
+    case OP_EXACT1:\r
+    case OP_ANYCHAR_STAR_PEEK_NEXT:\r
+    case OP_ANYCHAR_ML_STAR_PEEK_NEXT:\r
+      p_string(f, 1, bp++); break;\r
+    case OP_EXACT2:\r
+      p_string(f, 2, bp); bp += 2; break;\r
+    case OP_EXACT3:\r
+      p_string(f, 3, bp); bp += 3; break;\r
+    case OP_EXACT4:\r
+      p_string(f, 4, bp); bp += 4; break;\r
+    case OP_EXACT5:\r
+      p_string(f, 5, bp); bp += 5; break;\r
+    case OP_EXACTN:\r
+      GET_LENGTH_INC(len, bp);\r
+      p_len_string(f, len, 1, bp);\r
+      bp += len;\r
+      break;\r
+\r
+    case OP_EXACTMB2N1:\r
+      p_string(f, 2, bp); bp += 2; break;\r
+    case OP_EXACTMB2N2:\r
+      p_string(f, 4, bp); bp += 4; break;\r
+    case OP_EXACTMB2N3:\r
+      p_string(f, 6, bp); bp += 6; break;\r
+    case OP_EXACTMB2N:\r
+      GET_LENGTH_INC(len, bp);\r
+      p_len_string(f, len, 2, bp);\r
+      bp += len * 2;\r
+      break;\r
+    case OP_EXACTMB3N:\r
+      GET_LENGTH_INC(len, bp);\r
+      p_len_string(f, len, 3, bp);\r
+      bp += len * 3;\r
+      break;\r
+    case OP_EXACTMBN:\r
+      {\r
+        int mb_len;\r
+\r
+        GET_LENGTH_INC(mb_len, bp);\r
+        GET_LENGTH_INC(len, bp);\r
+        fprintf(f, ":%d:%d:", mb_len, len);\r
+        n = len * mb_len;\r
+        while (n-- > 0) { fputc(*bp++, f); }\r
+      }\r
+      break;\r
+\r
+    case OP_EXACT1_IC:\r
+      len = enclen(enc, bp);\r
+      p_string(f, len, bp);\r
+      bp += len;\r
+      break;\r
+    case OP_EXACTN_IC:\r
+      GET_LENGTH_INC(len, bp);\r
+      p_len_string(f, len, 1, bp);\r
+      bp += len;\r
+      break;\r
+\r
+    case OP_CCLASS:\r
+      n = bitset_on_num((BitSetRef )bp);\r
+      bp += SIZE_BITSET;\r
+      fprintf(f, ":%d", n);\r
+      break;\r
+\r
+    case OP_CCLASS_NOT:\r
+      n = bitset_on_num((BitSetRef )bp);\r
+      bp += SIZE_BITSET;\r
+      fprintf(f, ":%d", n);\r
+      break;\r
+\r
+    case OP_CCLASS_MB:\r
+    case OP_CCLASS_MB_NOT:\r
+      GET_LENGTH_INC(len, bp);\r
+      q = bp;\r
+#ifndef PLATFORM_UNALIGNED_WORD_ACCESS\r
+      ALIGNMENT_RIGHT(q);\r
+#endif\r
+      GET_CODE_POINT(code, q);\r
+      bp += len;\r
+      fprintf(f, ":%d:%d", (int )code, len);\r
+      break;\r
+\r
+    case OP_CCLASS_MIX:\r
+    case OP_CCLASS_MIX_NOT:\r
+      n = bitset_on_num((BitSetRef )bp);\r
+      bp += SIZE_BITSET;\r
+      GET_LENGTH_INC(len, bp);\r
+      q = bp;\r
+#ifndef PLATFORM_UNALIGNED_WORD_ACCESS\r
+      ALIGNMENT_RIGHT(q);\r
+#endif\r
+      GET_CODE_POINT(code, q);\r
+      bp += len;\r
+      fprintf(f, ":%d:%d:%d", n, (int )code, len);\r
+      break;\r
+\r
+#ifdef USE_OP_CCLASS_NODE\r
+    case OP_CCLASS_NODE:\r
+      {\r
+        CClassNode *cc;\r
+\r
+        GET_POINTER_INC(cc, bp);\r
+        n = bitset_on_num(cc->bs);\r
+        fprintf(f, ":%p:%d", cc, n);\r
+      }\r
+      break;\r
+#endif\r
+\r
+    case OP_BACKREF_N_IC:\r
+      mem = *((MemNumType* )bp);\r
+      bp += SIZE_MEMNUM;\r
+      fprintf(f, ":%d", mem);\r
+      break;\r
+\r
+    case OP_BACKREF_MULTI_IC:\r
+    case OP_BACKREF_MULTI:\r
+    case OP_BACKREF_CHECK:\r
+      fputs(" ", f);\r
+      GET_LENGTH_INC(len, bp);\r
+      for (i = 0; i < len; i++) {\r
+        GET_MEMNUM_INC(mem, bp);\r
+        if (i > 0) fputs(", ", f);\r
+        fprintf(f, "%d", mem);\r
+      }\r
+      break;\r
+\r
+    case OP_BACKREF_WITH_LEVEL:\r
+      GET_OPTION_INC(option, bp);\r
+      fprintf(f, ":%d", option);\r
+      /* fall */\r
+    case OP_BACKREF_CHECK_WITH_LEVEL:\r
+      {\r
+        LengthType level;\r
+\r
+        GET_LENGTH_INC(level, bp);\r
+        fprintf(f, ":%d", level);\r
+\r
+        fputs(" ", f);\r
+        GET_LENGTH_INC(len, bp);\r
+        for (i = 0; i < len; i++) {\r
+          GET_MEMNUM_INC(mem, bp);\r
+          if (i > 0) fputs(", ", f);\r
+          fprintf(f, "%d", mem);\r
+        }\r
+      }\r
+      break;\r
+\r
+    case OP_REPEAT:\r
+    case OP_REPEAT_NG:\r
+      {\r
+        mem = *((MemNumType* )bp);\r
+        bp += SIZE_MEMNUM;\r
+        addr = *((RelAddrType* )bp);\r
+        bp += SIZE_RELADDR;\r
+        fprintf(f, ":%d:%d", mem, addr);\r
+      }\r
+      break;\r
+\r
+    case OP_PUSH_OR_JUMP_EXACT1:\r
+    case OP_PUSH_IF_PEEK_NEXT:\r
+      addr = *((RelAddrType* )bp);\r
+      bp += SIZE_RELADDR;\r
+      fputc(':', f);\r
+      p_rel_addr(f, addr, bp, start);\r
+      p_string(f, 1, bp);\r
+      bp += 1;\r
+      break;\r
+\r
+    case OP_LOOK_BEHIND:\r
+      GET_LENGTH_INC(len, bp);\r
+      fprintf(f, ":%d", len);\r
+      break;\r
+\r
+    case OP_LOOK_BEHIND_NOT_START:\r
+      GET_RELADDR_INC(addr, bp);\r
+      GET_LENGTH_INC(len, bp);\r
+      fprintf(f, ":%d:", len);\r
+      p_rel_addr(f, addr, bp, start);\r
+      break;\r
+\r
+    case OP_PUSH_SAVE_VAL:\r
+      {\r
+        SaveType type;\r
+        GET_SAVE_TYPE_INC(type, bp);\r
+        GET_MEMNUM_INC(mem, bp);\r
+        fprintf(f, ":%d:%d", type, mem);\r
+      }\r
+      break;\r
+\r
+    case OP_UPDATE_VAR:\r
+      {\r
+        UpdateVarType type;\r
+        GET_UPDATE_VAR_TYPE_INC(type, bp);\r
+        GET_MEMNUM_INC(mem, bp);\r
+        fprintf(f, ":%d:%d", type, mem);\r
+      }\r
+      break;\r
+\r
+#ifdef USE_CALLOUT\r
+    case OP_CALLOUT_CONTENTS:\r
+      {\r
+        GET_MEMNUM_INC(mem,  bp); /* number */\r
+        fprintf(f, ":%d", mem);\r
+      }\r
+      break;\r
+\r
+    case OP_CALLOUT_NAME:\r
+      {\r
+        int id;\r
+\r
+        GET_MEMNUM_INC(id,   bp); /* id */\r
+        GET_MEMNUM_INC(mem,  bp); /* number */\r
+\r
+        fprintf(f, ":%d:%d", id, mem);\r
+      }\r
+      break;\r
+#endif\r
+\r
+    default:\r
+      fprintf(stderr, "onig_print_compiled_byte_code: undefined code %d\n", *--bp);\r
+    }\r
+  }\r
+  if (nextp) *nextp = bp;\r
+}\r
+#endif /* ONIG_DEBUG */\r
+\r
+#ifdef ONIG_DEBUG_COMPILE\r
+extern void\r
+onig_print_compiled_byte_code_list(FILE* f, regex_t* reg)\r
+{\r
+  UChar* bp;\r
+  UChar* start = reg->p;\r
+  UChar* end   = reg->p + reg->used;\r
+\r
+  fprintf(f, "bt_mem_start: 0x%x, bt_mem_end: 0x%x\n",\r
+          reg->bt_mem_start, reg->bt_mem_end);\r
+  fprintf(f, "code-length: %d\n", reg->used);\r
+\r
+  bp = start;\r
+  while (bp < end) {\r
+    int pos = bp - start;\r
+\r
+    fprintf(f, "%4d: ", pos);\r
+    onig_print_compiled_byte_code(f, bp, &bp, start, reg->enc);\r
+    fprintf(f, "\n");\r
+  }\r
+  fprintf(f, "\n");\r
+}\r
+#endif\r
+\r
+\r
 #ifdef USE_CAPTURE_HISTORY\r
 static void history_tree_free(OnigCaptureTreeNode* node);\r
 \r
@@ -243,16 +821,15 @@ onig_region_new(void)
   OnigRegion* r;\r
 \r
   r = (OnigRegion* )xmalloc(sizeof(OnigRegion));\r
-  if (r != NULL) {\r
-    onig_region_init(r);\r
-  }\r
+  CHECK_NULL_RETURN(r);\r
+  onig_region_init(r);\r
   return r;\r
 }\r
 \r
 extern void\r
 onig_region_free(OnigRegion* r, int free_self)\r
 {\r
-  if (r) {\r
+  if (r != 0) {\r
     if (r->allocated > 0) {\r
       if (r->beg) xfree(r->beg);\r
       if (r->end) xfree(r->end);\r
@@ -276,20 +853,20 @@ onig_region_copy(OnigRegion* to, OnigRegion* from)
   if (to->allocated == 0) {\r
     if (from->num_regs > 0) {\r
       to->beg = (int* )xmalloc(RREGC_SIZE);\r
+      if (IS_NULL(to->beg)) return;\r
       to->end = (int* )xmalloc(RREGC_SIZE);\r
+      if (IS_NULL(to->end)) return;\r
       to->allocated = from->num_regs;\r
     }\r
   }\r
   else if (to->allocated < from->num_regs) {\r
     to->beg = (int* )xrealloc(to->beg, RREGC_SIZE, sizeof(int) * to->allocated);\r
+    if (IS_NULL(to->beg)) return;\r
     to->end = (int* )xrealloc(to->end, RREGC_SIZE, sizeof(int) * to->allocated);\r
+    if (IS_NULL(to->end)) return;\r
     to->allocated = from->num_regs;\r
   }\r
 \r
-  if (to->beg == NULL || to->end == NULL) {\r
-    return;\r
-  }\r
-\r
   for (i = 0; i < from->num_regs; i++) {\r
     to->beg[i] = from->beg[i];\r
     to->end[i] = from->end[i];\r
@@ -305,251 +882,604 @@ onig_region_copy(OnigRegion* to, OnigRegion* from)
 #endif\r
 }\r
 \r
+#ifdef USE_CALLOUT\r
+#define CALLOUT_BODY(func, ain, aname_id, anum, user, args, result) do { \\r
+  args.in            = (ain);\\r
+  args.name_id       = (aname_id);\\r
+  args.num           = anum;\\r
+  args.regex         = reg;\\r
+  args.string        = str;\\r
+  args.string_end    = end;\\r
+  args.start         = sstart;\\r
+  args.right_range   = right_range;\\r
+  args.current       = s;\\r
+  args.retry_in_match_counter = retry_in_match_counter;\\r
+  args.msa           = msa;\\r
+  args.stk_base      = stk_base;\\r
+  args.stk           = stk;\\r
+  args.mem_start_stk = mem_start_stk;\\r
+  args.mem_end_stk   = mem_end_stk;\\r
+  result = (func)(&args, user);\\r
+} while (0)\r
+\r
+#define RETRACTION_CALLOUT(func, aname_id, anum, user) do {\\r
+  int result;\\r
+  OnigCalloutArgs args;\\r
+  CALLOUT_BODY(func, ONIG_CALLOUT_IN_RETRACTION, aname_id, anum, user, args, result);\\r
+  switch (result) {\\r
+  case ONIG_CALLOUT_FAIL:\\r
+  case ONIG_CALLOUT_SUCCESS:\\r
+    break;\\r
+  default:\\r
+    if (result > 0) {\\r
+      result = ONIGERR_INVALID_ARGUMENT;\\r
+    }\\r
+    best_len = result;\\r
+    goto finish;\\r
+    break;\\r
+  }\\r
+} while(0)\r
+#endif\r
+\r
 \r
 /** stack **/\r
 #define INVALID_STACK_INDEX   -1\r
 \r
+#define STK_ALT_FLAG               0x0001\r
+\r
 /* stack type */\r
 /* used by normal-POP */\r
-#define STK_ALT                    0x0001\r
-#define STK_LOOK_BEHIND_NOT        0x0002\r
-#define STK_POS_NOT                0x0003\r
+#define STK_SUPER_ALT             STK_ALT_FLAG\r
+#define STK_ALT                   (0x0002 | STK_ALT_FLAG)\r
+#define STK_ALT_PREC_READ_NOT     (0x0004 | STK_ALT_FLAG)\r
+#define STK_ALT_LOOK_BEHIND_NOT   (0x0006 | STK_ALT_FLAG)\r
+\r
 /* handled by normal-POP */\r
-#define STK_MEM_START              0x0100\r
-#define STK_MEM_END                0x8200\r
-#define STK_REPEAT_INC             0x0300\r
-#define STK_STATE_CHECK_MARK       0x1000\r
+#define STK_MEM_START              0x0010\r
+#define STK_MEM_END                0x8030\r
+#define STK_REPEAT_INC             0x0050\r
+#ifdef USE_CALLOUT\r
+#define STK_CALLOUT                0x0070\r
+#endif\r
+\r
 /* avoided by normal-POP */\r
-#define STK_NULL_CHECK_START       0x3000\r
-#define STK_NULL_CHECK_END         0x5000  /* for recursive call */\r
-#define STK_MEM_END_MARK           0x8400\r
-#define STK_POS                    0x0500  /* used when POP-POS */\r
-#define STK_STOP_BT                0x0600  /* mark for "(?>...)" */\r
-#define STK_REPEAT                 0x0700\r
-#define STK_CALL_FRAME             0x0800\r
-#define STK_RETURN                 0x0900\r
-#define STK_VOID                   0x0a00  /* for fill a blank */\r
+#define STK_VOID                   0x0000  /* for fill a blank */\r
+#define STK_EMPTY_CHECK_START      0x3000\r
+#define STK_EMPTY_CHECK_END        0x5000  /* for recursive call */\r
+#define STK_MEM_END_MARK           0x8100\r
+#define STK_TO_VOID_START          0x1200  /* mark for "(?>...)" */\r
+#define STK_REPEAT                 0x0300\r
+#define STK_CALL_FRAME             0x0400\r
+#define STK_RETURN                 0x0500\r
+#define STK_SAVE_VAL               0x0600\r
 \r
 /* stack type check mask */\r
-#define STK_MASK_POP_USED          0x00ff\r
-#define STK_MASK_TO_VOID_TARGET    0x10ff\r
+#define STK_MASK_POP_USED          STK_ALT_FLAG\r
+#define STK_MASK_POP_HANDLED       0x0010\r
+#define STK_MASK_POP_HANDLED_TIL   (STK_MASK_POP_HANDLED | 0x0004)\r
+#define STK_MASK_TO_VOID_TARGET    0x100e\r
 #define STK_MASK_MEM_END_OR_MARK   0x8000  /* MEM_END or MEM_END_MARK */\r
 \r
+typedef intptr_t StackIndex;\r
+\r
+typedef struct _StackType {\r
+  unsigned int type;\r
+  int zid;\r
+  union {\r
+    struct {\r
+      UChar *pcode;      /* byte code position */\r
+      UChar *pstr;       /* string position */\r
+      UChar *pstr_prev;  /* previous char position of pstr */\r
+    } state;\r
+    struct {\r
+      int   count;       /* for OP_REPEAT_INC, OP_REPEAT_INC_NG */\r
+      UChar *pcode;      /* byte code position (head of repeated target) */\r
+    } repeat;\r
+    struct {\r
+      StackIndex si;     /* index of stack */\r
+    } repeat_inc;\r
+    struct {\r
+      UChar *pstr;       /* start/end position */\r
+      /* Following information is set, if this stack type is MEM-START */\r
+      StackIndex prev_start;  /* prev. info (for backtrack  "(...)*" ) */\r
+      StackIndex prev_end;    /* prev. info (for backtrack  "(...)*" ) */\r
+    } mem;\r
+    struct {\r
+      UChar *pstr;       /* start position */\r
+    } empty_check;\r
+#ifdef USE_CALL\r
+    struct {\r
+      UChar *ret_addr;   /* byte code position */\r
+      UChar *pstr;       /* string position */\r
+    } call_frame;\r
+#endif\r
+    struct {\r
+      enum SaveType type;\r
+      UChar* v;\r
+      UChar* v2;\r
+    } val;\r
+#ifdef USE_CALLOUT\r
+    struct {\r
+      int num;\r
+      OnigCalloutFunc func;\r
+    } callout;\r
+#endif\r
+  } u;\r
+} StackType;\r
+\r
+#ifdef USE_CALLOUT\r
+\r
+struct OnigCalloutArgsStruct {\r
+  OnigCalloutIn    in;\r
+  int              name_id;   /* name id or ONIG_NON_NAME_ID */\r
+  int              num;\r
+  OnigRegex        regex;\r
+  const OnigUChar* string;\r
+  const OnigUChar* string_end;\r
+  const OnigUChar* start;\r
+  const OnigUChar* right_range;\r
+  const OnigUChar* current;  /* current matching position */\r
+  unsigned long    retry_in_match_counter;\r
+\r
+  /* invisible to users */\r
+  MatchArg*   msa;\r
+  StackType*  stk_base;\r
+  StackType*  stk;\r
+  StackIndex* mem_start_stk;\r
+  StackIndex* mem_end_stk;\r
+};\r
+\r
+#endif\r
+\r
+\r
 #ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE\r
-#define MATCH_ARG_INIT(msa, arg_option, arg_region, arg_start) do {\\r
+#define MATCH_ARG_INIT(msa, reg, arg_option, arg_region, arg_start, mp) do { \\r
   (msa).stack_p  = (void* )0;\\r
   (msa).options  = (arg_option);\\r
   (msa).region   = (arg_region);\\r
   (msa).start    = (arg_start);\\r
+  (msa).match_stack_limit  = (mp)->match_stack_limit;\\r
+  (msa).retry_limit_in_match = (mp)->retry_limit_in_match;\\r
+  (msa).mp = mp;\\r
   (msa).best_len = ONIG_MISMATCH;\\r
+  (msa).ptr_num  = (reg)->num_repeat + ((reg)->num_mem + 1) * 2; \\r
 } while(0)\r
 #else\r
-#define MATCH_ARG_INIT(msa, arg_option, arg_region, arg_start) do {\\r
+#define MATCH_ARG_INIT(msa, reg, arg_option, arg_region, arg_start, mp) do { \\r
   (msa).stack_p  = (void* )0;\\r
   (msa).options  = (arg_option);\\r
   (msa).region   = (arg_region);\\r
   (msa).start    = (arg_start);\\r
+  (msa).match_stack_limit  = (mp)->match_stack_limit;\\r
+  (msa).retry_limit_in_match = (mp)->retry_limit_in_match;\\r
+  (msa).mp = mp;\\r
+  (msa).ptr_num  = (reg)->num_repeat + ((reg)->num_mem + 1) * 2; \\r
 } while(0)\r
 #endif\r
 \r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-\r
-#define STATE_CHECK_BUFF_MALLOC_THRESHOLD_SIZE  16\r
-\r
-#define STATE_CHECK_BUFF_INIT(msa, str_len, offset, state_num) do {    \\r
-  if ((state_num) > 0 && str_len >= STATE_CHECK_STRING_THRESHOLD_LEN) {\\r
-    unsigned int size = (unsigned int )(((str_len) + 1) * (state_num) + 7) >> 3;\\r
-    offset = ((offset) * (state_num)) >> 3;\\r
-    if (size > 0 && offset < size && size < STATE_CHECK_BUFF_MAX_SIZE) {\\r
-      if (size >= STATE_CHECK_BUFF_MALLOC_THRESHOLD_SIZE) \\r
-        (msa).state_check_buff = (void* )xmalloc(size);\\r
-      else \\r
-        (msa).state_check_buff = (void* )xalloca(size);\\r
-      xmemset(((char* )((msa).state_check_buff)+(offset)), 0, \\r
-              (size_t )(size - (offset))); \\r
-      (msa).state_check_buff_size = size;\\r
-    }\\r
-    else {\\r
-      (msa).state_check_buff = (void* )0;\\r
-      (msa).state_check_buff_size = 0;\\r
-    }\\r
-  }\\r
-  else {\\r
-    (msa).state_check_buff = (void* )0;\\r
-    (msa).state_check_buff_size = 0;\\r
-  }\\r
-  } while(0)\r
-\r
-#define MATCH_ARG_FREE(msa) do {\\r
-  if ((msa).stack_p) xfree((msa).stack_p);\\r
-  if ((msa).state_check_buff_size >= STATE_CHECK_BUFF_MALLOC_THRESHOLD_SIZE) { \\r
-    if ((msa).state_check_buff) xfree((msa).state_check_buff);\\r
-  }\\r
-} while(0)\r
-#else\r
-#define STATE_CHECK_BUFF_INIT(msa, str_len, offset, state_num)\r
 #define MATCH_ARG_FREE(msa)  if ((msa).stack_p) xfree((msa).stack_p)\r
-#endif\r
 \r
 \r
+#define ALLOCA_PTR_NUM_LIMIT   50\r
 \r
-#define STACK_INIT(alloc_addr, ptr_num, stack_num)  do {\\r
+#define STACK_INIT(stack_num)  do {\\r
   if (msa->stack_p) {\\r
-    alloc_addr = (char* )xmalloc(sizeof(char*) * (ptr_num));\\r
-    stk_alloc  = (OnigStackType* )(msa->stack_p);\\r
-    stk_base   = stk_alloc;\\r
+    is_alloca  = 0;\\r
+    alloc_base = msa->stack_p;\\r
+    stk_base   = (StackType* )(alloc_base\\r
+                 + (sizeof(StackIndex) * msa->ptr_num));\\r
     stk        = stk_base;\\r
     stk_end    = stk_base + msa->stack_n;\\r
   }\\r
+  else if (msa->ptr_num > ALLOCA_PTR_NUM_LIMIT) {\\r
+    is_alloca  = 0;\\r
+    alloc_base = (char* )xmalloc(sizeof(StackIndex) * msa->ptr_num\\r
+                  + sizeof(StackType) * (stack_num));\\r
+    CHECK_NULL_RETURN_MEMERR(alloc_base);\\r
+    stk_base   = (StackType* )(alloc_base\\r
+                 + (sizeof(StackIndex) * msa->ptr_num));\\r
+    stk        = stk_base;\\r
+    stk_end    = stk_base + (stack_num);\\r
+  }\\r
   else {\\r
-    alloc_addr = (char* )xmalloc(sizeof(char*) * (ptr_num)\\r
-                      + sizeof(OnigStackType) * (stack_num));\\r
-    stk_alloc  = (OnigStackType* )(alloc_addr + sizeof(char*) * (ptr_num));\\r
-    stk_base   = stk_alloc;\\r
+    is_alloca  = 1;\\r
+    alloc_base = (char* )xmalloc(sizeof(StackIndex) * msa->ptr_num\\r
+                 + sizeof(StackType) * (stack_num));\\r
+    CHECK_NULL_RETURN_MEMERR(alloc_base);\\r
+    stk_base   = (StackType* )(alloc_base\\r
+                 + (sizeof(StackIndex) * msa->ptr_num));\\r
     stk        = stk_base;\\r
     stk_end    = stk_base + (stack_num);\\r
   }\\r
-} while(0)\r
+} while(0);\r
+\r
 \r
 #define STACK_SAVE do{\\r
-  if (stk_base != stk_alloc) {\\r
-    msa->stack_p = stk_base;\\r
-    msa->stack_n = (int)(stk_end - stk_base);\\r
+    msa->stack_n = (int )(stk_end - stk_base);\\r
+  if (is_alloca != 0) {\\r
+    size_t size = sizeof(StackIndex) * msa->ptr_num \\r
+                + sizeof(StackType) * msa->stack_n;\\r
+    msa->stack_p = xmalloc(size);\\r
+    CHECK_NULL_RETURN_MEMERR(msa->stack_p);\\r
+    xmemcpy(msa->stack_p, alloc_base, size);\\r
+  }\\r
+  else {\\r
+    msa->stack_p = alloc_base;\\r
   };\\r
 } while(0)\r
 \r
-static unsigned int MatchStackLimitSize = DEFAULT_MATCH_STACK_LIMIT_SIZE;\r
+#define UPDATE_FOR_STACK_REALLOC do{\\r
+  repeat_stk    = (StackIndex* )alloc_base;\\r
+  mem_start_stk = (StackIndex* )(repeat_stk + reg->num_repeat);\\r
+  mem_end_stk   = mem_start_stk + num_mem + 1;\\r
+} while(0)\r
+\r
+static unsigned int MatchStackLimit = DEFAULT_MATCH_STACK_LIMIT_SIZE;\r
 \r
 extern unsigned int\r
 onig_get_match_stack_limit_size(void)\r
 {\r
-  return MatchStackLimitSize;\r
+  return MatchStackLimit;\r
 }\r
 \r
 extern int\r
 onig_set_match_stack_limit_size(unsigned int size)\r
 {\r
-  MatchStackLimitSize = size;\r
+  MatchStackLimit = size;\r
   return 0;\r
 }\r
 \r
-static int\r
-stack_double(OnigStackType** arg_stk_base, OnigStackType** arg_stk_end,\r
-            OnigStackType** arg_stk, OnigStackType* stk_alloc, OnigMatchArg* msa)\r
-{\r
-  unsigned int n;\r
-  OnigStackType *x, *stk_base, *stk_end, *stk;\r
+#ifdef USE_RETRY_LIMIT_IN_MATCH\r
 \r
-  stk_base = *arg_stk_base;\r
-  stk_end  = *arg_stk_end;\r
-  stk      = *arg_stk;\r
+static unsigned long RetryLimitInMatch = DEFAULT_RETRY_LIMIT_IN_MATCH;\r
 \r
-  n = (unsigned int)(stk_end - stk_base);\r
-  if (stk_base == stk_alloc && IS_NULL(msa->stack_p)) {\r
-    x = (OnigStackType* )xmalloc(sizeof(OnigStackType) * n * 2);\r
-    if (IS_NULL(x)) {\r
-      STACK_SAVE;\r
-      return ONIGERR_MEMORY;\r
-    }\r
-    xmemcpy(x, stk_base, n * sizeof(OnigStackType));\r
-    n *= 2;\r
-  }\r
-  else {\r
-    n *= 2;\r
-    if (MatchStackLimitSize != 0 && n > MatchStackLimitSize) {\r
-      if ((unsigned int )(stk_end - stk_base) == MatchStackLimitSize)\r
-        return ONIGERR_MATCH_STACK_LIMIT_OVER;\r
-      else\r
-        n = MatchStackLimitSize;\r
-    }\r
-    x = (OnigStackType* )xrealloc(stk_base, sizeof(OnigStackType) * n, sizeof(OnigStackType) * (stk_end - stk_base));\r
-    if (IS_NULL(x)) {\r
-      STACK_SAVE;\r
-      return ONIGERR_MEMORY;\r
-    }\r
-  }\r
-  *arg_stk      = x + (stk - stk_base);\r
-  *arg_stk_base = x;\r
-  *arg_stk_end  = x + n;\r
-  return 0;\r
-}\r
+#define CHECK_RETRY_LIMIT_IN_MATCH  do {\\r
+  if (retry_in_match_counter++ > retry_limit_in_match) goto retry_limit_in_match_over;\\r
+} while (0)\r
 \r
-#define STACK_ENSURE(n)        do {\\r
-  if (stk_end - stk < (n)) {\\r
-    int r = stack_double(&stk_base, &stk_end, &stk, stk_alloc, msa);\\r
-    if (r != 0) { STACK_SAVE; return r; } \\r
-  }\\r
-} while(0)\r
+#else\r
 \r
-#define STACK_AT(index)        (stk_base + (index))\r
-#define GET_STACK_INDEX(stk)   ((OnigStackIndex)((stk) - stk_base))\r
+#define CHECK_RETRY_LIMIT_IN_MATCH\r
 \r
-#define STACK_PUSH_TYPE(stack_type) do {\\r
-  STACK_ENSURE(1);\\r
-  stk->type = (stack_type);\\r
-  STACK_INC;\\r
-} while(0)\r
+#endif /* USE_RETRY_LIMIT_IN_MATCH */\r
 \r
-#define IS_TO_VOID_TARGET(stk) (((stk)->type & STK_MASK_TO_VOID_TARGET) != 0)\r
+extern unsigned long\r
+onig_get_retry_limit_in_match(void)\r
+{\r
+#ifdef USE_RETRY_LIMIT_IN_MATCH\r
+  return RetryLimitInMatch;\r
+#else\r
+  /* return ONIG_NO_SUPPORT_CONFIG; */\r
+  return 0;\r
+#endif\r
+}\r
 \r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-#define STATE_CHECK_POS(s,snum) \\r
-  (((s) - str) * num_comb_exp_check + ((snum) - 1))\r
-#define STATE_CHECK_VAL(v,snum) do {\\r
-  if (state_check_buff != NULL) {\\r
-    int x = STATE_CHECK_POS(s,snum);\\r
-    (v) = state_check_buff[x/8] & (1<<(x%8));\\r
-  }\\r
-  else (v) = 0;\\r
-} while(0)\r
+extern int\r
+onig_set_retry_limit_in_match(unsigned long size)\r
+{\r
+#ifdef USE_RETRY_LIMIT_IN_MATCH\r
+  RetryLimitInMatch = size;\r
+  return 0;\r
+#else\r
+  return ONIG_NO_SUPPORT_CONFIG;\r
+#endif\r
+}\r
+\r
+static OnigCalloutFunc DefaultProgressCallout;\r
+static OnigCalloutFunc DefaultRetractionCallout;\r
 \r
+extern OnigMatchParam*\r
+onig_new_match_param(void)\r
+{\r
+  OnigMatchParam* p;\r
 \r
-#define ELSE_IF_STATE_CHECK_MARK(stk) \\r
-  else if ((stk)->type == STK_STATE_CHECK_MARK) { \\r
-    int x = STATE_CHECK_POS(stk->u.state.pstr, stk->u.state.state_check);\\r
-    state_check_buff[x/8] |= (1<<(x%8));                               \\r
+  p = (OnigMatchParam* )xmalloc(sizeof(*p));\r
+  if (IS_NOT_NULL(p)) {\r
+    onig_initialize_match_param(p);\r
   }\r
 \r
-#define STACK_PUSH(stack_type,pat,s,sprev) do {\\r
-  STACK_ENSURE(1);\\r
-  stk->type = (stack_type);\\r
-  stk->u.state.pcode     = (pat);\\r
-  stk->u.state.pstr      = (s);\\r
-  stk->u.state.pstr_prev = (sprev);\\r
-  stk->u.state.state_check = 0;\\r
-  STACK_INC;\\r
-} while(0)\r
+  return p;\r
+}\r
 \r
-#define STACK_PUSH_ENSURED(stack_type,pat) do {\\r
-  stk->type = (stack_type);\\r
-  stk->u.state.pcode = (pat);\\r
-  stk->u.state.state_check = 0;\\r
-  STACK_INC;\\r
-} while(0)\r
+extern void\r
+onig_free_match_param_content(OnigMatchParam* p)\r
+{\r
+#ifdef USE_CALLOUT\r
+  if (IS_NOT_NULL(p->callout_data)) {\r
+    xfree(p->callout_data);\r
+    p->callout_data = 0;\r
+  }\r
+#endif\r
+}\r
 \r
-#define STACK_PUSH_ALT_WITH_STATE_CHECK(pat,s,sprev,snum) do {\\r
-  STACK_ENSURE(1);\\r
-  stk->type = STK_ALT;\\r
-  stk->u.state.pcode     = (pat);\\r
-  stk->u.state.pstr      = (s);\\r
-  stk->u.state.pstr_prev = (sprev);\\r
-  stk->u.state.state_check = ((state_check_buff != NULL) ? (snum) : 0);\\r
-  STACK_INC;\\r
-} while(0)\r
+extern void\r
+onig_free_match_param(OnigMatchParam* p)\r
+{\r
+  if (IS_NOT_NULL(p)) {\r
+    onig_free_match_param_content(p);\r
+    xfree(p);\r
+  }\r
+}\r
+\r
+extern int\r
+onig_initialize_match_param(OnigMatchParam* mp)\r
+{\r
+  mp->match_stack_limit  = MatchStackLimit;\r
+#ifdef USE_RETRY_LIMIT_IN_MATCH\r
+  mp->retry_limit_in_match = RetryLimitInMatch;\r
+#endif\r
+  mp->progress_callout_of_contents   = DefaultProgressCallout;\r
+  mp->retraction_callout_of_contents = DefaultRetractionCallout;\r
+\r
+#ifdef USE_CALLOUT\r
+  mp->match_at_call_counter  = 0;\r
+  mp->callout_user_data      = 0;\r
+  mp->callout_data           = 0;\r
+  mp->callout_data_alloc_num = 0;\r
+#endif\r
+\r
+  return ONIG_NORMAL;\r
+}\r
+\r
+#ifdef USE_CALLOUT\r
+\r
+static int\r
+adjust_match_param(regex_t* reg, OnigMatchParam* mp)\r
+{\r
+  RegexExt* ext = REG_EXTP(reg);\r
+\r
+  mp->match_at_call_counter = 0;\r
+\r
+  if (IS_NULL(ext) || ext->callout_num == 0) return ONIG_NORMAL;\r
+\r
+  if (ext->callout_num > mp->callout_data_alloc_num) {\r
+    CalloutData* d;\r
+    size_t n = ext->callout_num * sizeof(*d);\r
+    if (IS_NOT_NULL(mp->callout_data))\r
+      d = (CalloutData* )xrealloc(mp->callout_data, n, mp->callout_data_alloc_num * sizeof(*d));\r
+    else\r
+      d = (CalloutData* )xmalloc(n);\r
+    CHECK_NULL_RETURN_MEMERR(d);\r
+\r
+    mp->callout_data = d;\r
+    mp->callout_data_alloc_num = ext->callout_num;\r
+  }\r
+\r
+  xmemset(mp->callout_data, 0, mp->callout_data_alloc_num * sizeof(CalloutData));\r
+  return ONIG_NORMAL;\r
+}\r
+\r
+#define ADJUST_MATCH_PARAM(reg, mp) \\r
+  r = adjust_match_param(reg, mp);\\r
+  if (r != ONIG_NORMAL) return r;\r
+\r
+#define CALLOUT_DATA_AT_NUM(mp, num)  ((mp)->callout_data + ((num) - 1))\r
+\r
+extern int\r
+onig_check_callout_data_and_clear_old_values(OnigCalloutArgs* args)\r
+{\r
+  OnigMatchParam* mp;\r
+  int num;\r
+  CalloutData* d;\r
+\r
+  mp  = args->msa->mp;\r
+  num = args->num;\r
+\r
+  d = CALLOUT_DATA_AT_NUM(mp, num);\r
+  if (d->last_match_at_call_counter != mp->match_at_call_counter) {\r
+    xmemset(d, 0, sizeof(*d));\r
+    d->last_match_at_call_counter = mp->match_at_call_counter;\r
+    return d->last_match_at_call_counter;\r
+  }\r
+\r
+  return 0;\r
+}\r
+\r
+extern int\r
+onig_get_callout_data_dont_clear_old(regex_t* reg, OnigMatchParam* mp,\r
+                                     int callout_num, int slot,\r
+                                     OnigType* type, OnigValue* val)\r
+{\r
+  OnigType t;\r
+  CalloutData* d;\r
+\r
+  if (callout_num <= 0) return ONIGERR_INVALID_ARGUMENT;\r
+\r
+  d = CALLOUT_DATA_AT_NUM(mp, callout_num);\r
+  t = d->slot[slot].type;\r
+  if (IS_NOT_NULL(type)) *type = t;\r
+  if (IS_NOT_NULL(val))  *val  = d->slot[slot].val;\r
+  return (t == ONIG_TYPE_VOID ? 1 : ONIG_NORMAL);\r
+}\r
+\r
+extern int\r
+onig_get_callout_data_by_callout_args_self_dont_clear_old(OnigCalloutArgs* args,\r
+                                                          int slot, OnigType* type,\r
+                                                          OnigValue* val)\r
+{\r
+  return onig_get_callout_data_dont_clear_old(args->regex, args->msa->mp,\r
+                                              args->num, slot, type, val);\r
+}\r
+\r
+extern int\r
+onig_get_callout_data(regex_t* reg, OnigMatchParam* mp,\r
+                      int callout_num, int slot,\r
+                      OnigType* type, OnigValue* val)\r
+{\r
+  OnigType t;\r
+  CalloutData* d;\r
+\r
+  if (callout_num <= 0) return ONIGERR_INVALID_ARGUMENT;\r
+\r
+  d = CALLOUT_DATA_AT_NUM(mp, callout_num);\r
+  if (d->last_match_at_call_counter != mp->match_at_call_counter) {\r
+    xmemset(d, 0, sizeof(*d));\r
+    d->last_match_at_call_counter = mp->match_at_call_counter;\r
+  }\r
+\r
+  t = d->slot[slot].type;\r
+  if (IS_NOT_NULL(type)) *type = t;\r
+  if (IS_NOT_NULL(val))  *val  = d->slot[slot].val;\r
+  return (t == ONIG_TYPE_VOID ? 1 : ONIG_NORMAL);\r
+}\r
+\r
+extern int\r
+onig_get_callout_data_by_tag(regex_t* reg, OnigMatchParam* mp,\r
+                             const UChar* tag, const UChar* tag_end, int slot,\r
+                             OnigType* type, OnigValue* val)\r
+{\r
+  int num;\r
+\r
+  num = onig_get_callout_num_by_tag(reg, tag, tag_end);\r
+  if (num < 0)  return num;\r
+  if (num == 0) return ONIGERR_INVALID_CALLOUT_TAG_NAME;\r
+\r
+  return onig_get_callout_data(reg, mp, num, slot, type, val);\r
+}\r
+\r
+extern int\r
+onig_get_callout_data_by_callout_args(OnigCalloutArgs* args,\r
+                                      int callout_num, int slot,\r
+                                      OnigType* type, OnigValue* val)\r
+{\r
+  return onig_get_callout_data(args->regex, args->msa->mp, callout_num, slot,\r
+                               type, val);\r
+}\r
+\r
+extern int\r
+onig_get_callout_data_by_callout_args_self(OnigCalloutArgs* args,\r
+                                           int slot, OnigType* type, OnigValue* val)\r
+{\r
+  return onig_get_callout_data(args->regex, args->msa->mp, args->num, slot,\r
+                               type, val);\r
+}\r
+\r
+extern int\r
+onig_set_callout_data(regex_t* reg, OnigMatchParam* mp,\r
+                      int callout_num, int slot,\r
+                      OnigType type, OnigValue* val)\r
+{\r
+  CalloutData* d;\r
+\r
+  if (callout_num <= 0) return ONIGERR_INVALID_ARGUMENT;\r
+\r
+  d = CALLOUT_DATA_AT_NUM(mp, callout_num);\r
+  d->slot[slot].type = type;\r
+  d->slot[slot].val  = *val;\r
+  d->last_match_at_call_counter = mp->match_at_call_counter;\r
+\r
+  return ONIG_NORMAL;\r
+}\r
+\r
+extern int\r
+onig_set_callout_data_by_tag(regex_t* reg, OnigMatchParam* mp,\r
+                             const UChar* tag, const UChar* tag_end, int slot,\r
+                             OnigType type, OnigValue* val)\r
+{\r
+  int num;\r
+\r
+  num = onig_get_callout_num_by_tag(reg, tag, tag_end);\r
+  if (num < 0)  return num;\r
+  if (num == 0) return ONIGERR_INVALID_CALLOUT_TAG_NAME;\r
+\r
+  return onig_set_callout_data(reg, mp, num, slot, type, val);\r
+}\r
+\r
+extern int\r
+onig_set_callout_data_by_callout_args(OnigCalloutArgs* args,\r
+                                      int callout_num, int slot,\r
+                                      OnigType type, OnigValue* val)\r
+{\r
+  return onig_set_callout_data(args->regex, args->msa->mp, callout_num, slot,\r
+                               type, val);\r
+}\r
+\r
+extern int\r
+onig_set_callout_data_by_callout_args_self(OnigCalloutArgs* args,\r
+                                           int slot, OnigType type, OnigValue* val)\r
+{\r
+  return onig_set_callout_data(args->regex, args->msa->mp, args->num, slot,\r
+                               type, val);\r
+}\r
+\r
+#else\r
+#define ADJUST_MATCH_PARAM(reg, mp)\r
+#endif /* USE_CALLOUT */\r
+\r
+\r
+static int\r
+stack_double(int is_alloca, char** arg_alloc_base,\r
+             StackType** arg_stk_base, StackType** arg_stk_end, StackType** arg_stk,\r
+             MatchArg* msa)\r
+{\r
+  unsigned int n;\r
+  int used;\r
+  size_t size;\r
+  size_t new_size;\r
+  char* alloc_base;\r
+  char* new_alloc_base;\r
+  StackType *stk_base, *stk_end, *stk;\r
+\r
+  alloc_base = *arg_alloc_base;\r
+  stk_base = *arg_stk_base;\r
+  stk_end  = *arg_stk_end;\r
+  stk      = *arg_stk;\r
+\r
+  n = (unsigned int )(stk_end - stk_base);\r
+  size = sizeof(StackIndex) * msa->ptr_num + sizeof(StackType) * n;\r
+  n *= 2;\r
+  new_size = sizeof(StackIndex) * msa->ptr_num + sizeof(StackType) * n;\r
+  if (is_alloca != 0) {\r
+    new_alloc_base = (char* )xmalloc(new_size);\r
+    if (IS_NULL(new_alloc_base)) {\r
+      STACK_SAVE;\r
+      return ONIGERR_MEMORY;\r
+    }\r
+    xmemcpy(new_alloc_base, alloc_base, size);\r
+  }\r
+  else {\r
+    if (msa->match_stack_limit != 0 && n > msa->match_stack_limit) {\r
+      if ((unsigned int )(stk_end - stk_base) == msa->match_stack_limit)\r
+        return ONIGERR_MATCH_STACK_LIMIT_OVER;\r
+      else\r
+        n = msa->match_stack_limit;\r
+    }\r
+    new_alloc_base = (char* )xrealloc(alloc_base, new_size, size);\r
+    if (IS_NULL(new_alloc_base)) {\r
+      STACK_SAVE;\r
+      return ONIGERR_MEMORY;\r
+    }\r
+  }\r
+\r
+  alloc_base = new_alloc_base;\r
+  used = (int )(stk - stk_base);\r
+  *arg_alloc_base = alloc_base;\r
+  *arg_stk_base   = (StackType* )(alloc_base\r
+                                  + (sizeof(StackIndex) * msa->ptr_num));\r
+  *arg_stk      = *arg_stk_base + used;\r
+  *arg_stk_end  = *arg_stk_base + n;\r
+  return 0;\r
+}\r
 \r
-#define STACK_PUSH_STATE_CHECK(s,snum) do {\\r
-  if (state_check_buff != NULL) {\\r
-    STACK_ENSURE(1);\\r
-    stk->type = STK_STATE_CHECK_MARK;\\r
-    stk->u.state.pstr = (s);\\r
-    stk->u.state.state_check = (snum);\\r
-    STACK_INC;\\r
+#define STACK_ENSURE(n) do {\\r
+    if ((int )(stk_end - stk) < (n)) {\\r
+    int r = stack_double(is_alloca, &alloc_base, &stk_base, &stk_end, &stk, msa);\\r
+    if (r != 0) { STACK_SAVE; return r; } \\r
+    is_alloca = 0;\\r
+    UPDATE_FOR_STACK_REALLOC;\\r
   }\\r
 } while(0)\r
 \r
-#else /* USE_COMBINATION_EXPLOSION_CHECK */\r
+#define STACK_AT(index)        (stk_base + (index))\r
+#define GET_STACK_INDEX(stk)   ((stk) - stk_base)\r
+\r
+#define STACK_PUSH_TYPE(stack_type) do {\\r
+  STACK_ENSURE(1);\\r
+  stk->type = (stack_type);\\r
+  STACK_INC;\\r
+} while(0)\r
 \r
-#define ELSE_IF_STATE_CHECK_MARK(stk)\r
+#define IS_TO_VOID_TARGET(stk) (((stk)->type & STK_MASK_TO_VOID_TARGET) != 0)\r
 \r
 #define STACK_PUSH(stack_type,pat,s,sprev) do {\\r
   STACK_ENSURE(1);\\r
@@ -565,19 +1495,37 @@ stack_double(OnigStackType** arg_stk_base, OnigStackType** arg_stk_end,
   stk->u.state.pcode = (pat);\\r
   STACK_INC;\\r
 } while(0)\r
-#endif /* USE_COMBINATION_EXPLOSION_CHECK */\r
 \r
-#define STACK_PUSH_ALT(pat,s,sprev)     STACK_PUSH(STK_ALT,pat,s,sprev)\r
-#define STACK_PUSH_POS(s,sprev)         STACK_PUSH(STK_POS,NULL_UCHARP,s,sprev)\r
-#define STACK_PUSH_POS_NOT(pat,s,sprev) STACK_PUSH(STK_POS_NOT,pat,s,sprev)\r
-#define STACK_PUSH_STOP_BT              STACK_PUSH_TYPE(STK_STOP_BT)\r
-#define STACK_PUSH_LOOK_BEHIND_NOT(pat,s,sprev) \\r
-        STACK_PUSH(STK_LOOK_BEHIND_NOT,pat,s,sprev)\r
+#ifdef ONIG_DEBUG_MATCH\r
+#define STACK_PUSH_BOTTOM(stack_type,pat) do {\\r
+  stk->type = (stack_type);\\r
+  stk->u.state.pcode = (pat);\\r
+  stk->u.state.pstr      = s;\\r
+  stk->u.state.pstr_prev = sprev;\\r
+  STACK_INC;\\r
+} while (0)\r
+#else\r
+#define STACK_PUSH_BOTTOM(stack_type,pat) do {\\r
+  stk->type = (stack_type);\\r
+  stk->u.state.pcode = (pat);\\r
+  STACK_INC;\\r
+} while (0)\r
+#endif\r
 \r
-#define STACK_PUSH_REPEAT(id, pat) do {\\r
+#define STACK_PUSH_ALT(pat,s,sprev)       STACK_PUSH(STK_ALT,pat,s,sprev)\r
+#define STACK_PUSH_SUPER_ALT(pat,s,sprev) STACK_PUSH(STK_SUPER_ALT,pat,s,sprev)\r
+#define STACK_PUSH_POS(s,sprev) \\r
+  STACK_PUSH(STK_TO_VOID_START,NULL_UCHARP,s,sprev)\r
+#define STACK_PUSH_ALT_PREC_READ_NOT(pat,s,sprev) \\r
+  STACK_PUSH(STK_ALT_PREC_READ_NOT,pat,s,sprev)\r
+#define STACK_PUSH_TO_VOID_START        STACK_PUSH_TYPE(STK_TO_VOID_START)\r
+#define STACK_PUSH_ALT_LOOK_BEHIND_NOT(pat,s,sprev) \\r
+  STACK_PUSH(STK_ALT_LOOK_BEHIND_NOT,pat,s,sprev)\r
+\r
+#define STACK_PUSH_REPEAT(sid, pat) do {\\r
   STACK_ENSURE(1);\\r
   stk->type = STK_REPEAT;\\r
-  stk->u.repeat.num    = (id);\\r
+  stk->zid  = (sid);\\r
   stk->u.repeat.pcode  = (pat);\\r
   stk->u.repeat.count  = 0;\\r
   STACK_INC;\\r
@@ -593,22 +1541,22 @@ stack_double(OnigStackType** arg_stk_base, OnigStackType** arg_stk_end,
 #define STACK_PUSH_MEM_START(mnum, s) do {\\r
   STACK_ENSURE(1);\\r
   stk->type = STK_MEM_START;\\r
-  stk->u.mem.num      = (int)(mnum);\\r
-  stk->u.mem.pstr     = (s);\\r
-  stk->u.mem.start    = mem_start_stk[mnum];\\r
-  stk->u.mem.end      = mem_end_stk[mnum];\\r
-  mem_start_stk[mnum] = GET_STACK_INDEX(stk);\\r
-  mem_end_stk[mnum]   = INVALID_STACK_INDEX;\\r
+  stk->zid  = (mnum);\\r
+  stk->u.mem.pstr       = (s);\\r
+  stk->u.mem.prev_start = mem_start_stk[mnum];\\r
+  stk->u.mem.prev_end   = mem_end_stk[mnum];\\r
+  mem_start_stk[mnum]   = GET_STACK_INDEX(stk);\\r
+  mem_end_stk[mnum]     = INVALID_STACK_INDEX;\\r
   STACK_INC;\\r
 } while(0)\r
 \r
 #define STACK_PUSH_MEM_END(mnum, s) do {\\r
   STACK_ENSURE(1);\\r
   stk->type = STK_MEM_END;\\r
-  stk->u.mem.num    = (mnum);\\r
-  stk->u.mem.pstr   = (s);\\r
-  stk->u.mem.start  = mem_start_stk[mnum];\\r
-  stk->u.mem.end    = mem_end_stk[mnum];\\r
+  stk->zid  = (mnum);\\r
+  stk->u.mem.pstr       = (s);\\r
+  stk->u.mem.prev_start = mem_start_stk[mnum];\\r
+  stk->u.mem.prev_end   = mem_end_stk[mnum];\\r
   mem_end_stk[mnum] = GET_STACK_INDEX(stk);\\r
   STACK_INC;\\r
 } while(0)\r
@@ -616,7 +1564,7 @@ stack_double(OnigStackType** arg_stk_base, OnigStackType** arg_stk_end,
 #define STACK_PUSH_MEM_END_MARK(mnum) do {\\r
   STACK_ENSURE(1);\\r
   stk->type = STK_MEM_END_MARK;\\r
-  stk->u.mem.num = (mnum);\\r
+  stk->zid  = (mnum);\\r
   STACK_INC;\\r
 } while(0)\r
 \r
@@ -626,10 +1574,10 @@ stack_double(OnigStackType** arg_stk_base, OnigStackType** arg_stk_end,
   while (k > stk_base) {\\r
     k--;\\r
     if ((k->type & STK_MASK_MEM_END_OR_MARK) != 0 \\r
-      && k->u.mem.num == (mnum)) {\\r
+      && k->zid == (mnum)) {\\r
       level++;\\r
     }\\r
-    else if (k->type == STK_MEM_START && k->u.mem.num == (mnum)) {\\r
+    else if (k->type == STK_MEM_START && k->zid == (mnum)) {\\r
       if (level == 0) break;\\r
       level--;\\r
     }\\r
@@ -654,18 +1602,18 @@ stack_double(OnigStackType** arg_stk_base, OnigStackType** arg_stk_end,
   }\\r
 } while(0)\r
 \r
-#define STACK_PUSH_NULL_CHECK_START(cnum, s) do {\\r
+#define STACK_PUSH_EMPTY_CHECK_START(cnum, s) do {\\r
   STACK_ENSURE(1);\\r
-  stk->type = STK_NULL_CHECK_START;\\r
-  stk->u.null_check.num  = (cnum);\\r
-  stk->u.null_check.pstr = (s);\\r
+  stk->type = STK_EMPTY_CHECK_START;\\r
+  stk->zid  = (cnum);\\r
+  stk->u.empty_check.pstr = (s);\\r
   STACK_INC;\\r
 } while(0)\r
 \r
-#define STACK_PUSH_NULL_CHECK_END(cnum) do {\\r
+#define STACK_PUSH_EMPTY_CHECK_END(cnum) do {\\r
   STACK_ENSURE(1);\\r
-  stk->type = STK_NULL_CHECK_END;\\r
-  stk->u.null_check.num  = (cnum);\\r
+  stk->type = STK_EMPTY_CHECK_END;\\r
+  stk->zid  = (cnum);\\r
   STACK_INC;\\r
 } while(0)\r
 \r
@@ -682,6 +1630,115 @@ stack_double(OnigStackType** arg_stk_base, OnigStackType** arg_stk_end,
   STACK_INC;\\r
 } while(0)\r
 \r
+#define STACK_PUSH_SAVE_VAL(sid, stype, sval) do {\\r
+  STACK_ENSURE(1);\\r
+  stk->type = STK_SAVE_VAL;\\r
+  stk->zid  = (sid);\\r
+  stk->u.val.type = (stype);\\r
+  stk->u.val.v    = (UChar* )(sval);\\r
+  STACK_INC;\\r
+} while(0)\r
+\r
+#define STACK_PUSH_SAVE_VAL_WITH_SPREV(sid, stype, sval) do {\\r
+  STACK_ENSURE(1);\\r
+  stk->type = STK_SAVE_VAL;\\r
+  stk->zid  = (sid);\\r
+  stk->u.val.type = (stype);\\r
+  stk->u.val.v    = (UChar* )(sval);\\r
+  stk->u.val.v2   = sprev;\\r
+  STACK_INC;\\r
+} while(0)\r
+\r
+#define STACK_GET_SAVE_VAL_TYPE_LAST(stype, sval) do {\\r
+  StackType *k = stk;\\r
+  while (k > stk_base) {\\r
+    k--;\\r
+    STACK_BASE_CHECK(k, "STACK_GET_SAVE_VAL_TYPE_LAST"); \\r
+    if (k->type == STK_SAVE_VAL && k->u.val.type == (stype)) {\\r
+      (sval) = k->u.val.v;\\r
+      break;\\r
+    }\\r
+  }\\r
+} while (0)\r
+\r
+#define STACK_GET_SAVE_VAL_TYPE_LAST_ID(stype, sid, sval) do { \\r
+  int level = 0;\\r
+  StackType *k = stk;\\r
+  while (k > stk_base) {\\r
+    k--;\\r
+    STACK_BASE_CHECK(k, "STACK_GET_SAVE_VAL_TYPE_LAST_ID"); \\r
+    if (k->type == STK_SAVE_VAL && k->u.val.type == (stype)\\r
+        && k->zid == (sid)) {\\r
+      if (level == 0) {\\r
+        (sval) = k->u.val.v;\\r
+        break;\\r
+      }\\r
+    }\\r
+    else if (k->type == STK_CALL_FRAME)\\r
+      level--;\\r
+    else if (k->type == STK_RETURN)\\r
+      level++;\\r
+  }\\r
+} while (0)\r
+\r
+#define STACK_GET_SAVE_VAL_TYPE_LAST_ID_WITH_SPREV(stype, sid, sval) do { \\r
+  int level = 0;\\r
+  StackType *k = stk;\\r
+  while (k > stk_base) {\\r
+    k--;\\r
+    STACK_BASE_CHECK(k, "STACK_GET_SAVE_VAL_TYPE_LAST_ID"); \\r
+    if (k->type == STK_SAVE_VAL && k->u.val.type == (stype)\\r
+        && k->zid == (sid)) {\\r
+      if (level == 0) {\\r
+        (sval) = k->u.val.v;\\r
+        sprev  = k->u.val.v2;\\r
+        break;\\r
+      }\\r
+    }\\r
+    else if (k->type == STK_CALL_FRAME)\\r
+      level--;\\r
+    else if (k->type == STK_RETURN)\\r
+      level++;\\r
+  }\\r
+} while (0)\r
+\r
+#define STACK_GET_SAVE_VAL_TYPE_LAST_ID_FROM(stype, sid, sval, stk_from) do { \\r
+  int level = 0;\\r
+  StackType *k = (stk_from);\\r
+  while (k > stk_base) {\\r
+    STACK_BASE_CHECK(k, "STACK_GET_SAVE_VAL_TYPE_LAST_ID_FROM"); \\r
+    if (k->type == STK_SAVE_VAL && k->u.val.type == (stype)\\r
+        && k->u.val.id == (sid)) {\\r
+      if (level == 0) {\\r
+        (sval) = k->u.val.v;\\r
+        break;\\r
+      }\\r
+    }\\r
+    else if (k->type == STK_CALL_FRAME)\\r
+      level--;\\r
+    else if (k->type == STK_RETURN)\\r
+      level++;\\r
+    k--;\\r
+  }\\r
+} while (0)\r
+\r
+#define STACK_PUSH_CALLOUT_CONTENTS(anum, func) do {\\r
+  STACK_ENSURE(1);\\r
+  stk->type = STK_CALLOUT;\\r
+  stk->zid  = ONIG_NON_NAME_ID;\\r
+  stk->u.callout.num = (anum);\\r
+  stk->u.callout.func = (func);\\r
+  STACK_INC;\\r
+} while(0)\r
+\r
+#define STACK_PUSH_CALLOUT_NAME(aid, anum, func) do {\\r
+  STACK_ENSURE(1);\\r
+  stk->type = STK_CALLOUT;\\r
+  stk->zid  = (aid);\\r
+  stk->u.callout.num = (anum);\\r
+  stk->u.callout.func = (func);\\r
+  STACK_INC;\\r
+} while(0)\r
 \r
 #ifdef ONIG_DEBUG\r
 #define STACK_BASE_CHECK(p, at) \\r
@@ -698,6 +1755,16 @@ stack_double(OnigStackType** arg_stk_base, OnigStackType** arg_stk_end,
   STACK_BASE_CHECK(stk, "STACK_POP_ONE"); \\r
 } while(0)\r
 \r
+\r
+#ifdef USE_CALLOUT\r
+#define POP_CALLOUT_CASE \\r
+  else if (stk->type == STK_CALLOUT) {\\r
+    RETRACTION_CALLOUT(stk->u.callout.func, stk->zid, stk->u.callout.num, msa->mp->callout_user_data);\\r
+  }\r
+#else\r
+#define POP_CALLOUT_CASE\r
+#endif\r
+\r
 #define STACK_POP  do {\\r
   switch (pop_level) {\\r
   case STACK_POP_LEVEL_FREE:\\r
@@ -705,7 +1772,6 @@ stack_double(OnigStackType** arg_stk_base, OnigStackType** arg_stk_end,
       stk--;\\r
       STACK_BASE_CHECK(stk, "STACK_POP"); \\r
       if ((stk->type & STK_MASK_POP_USED) != 0)  break;\\r
-      ELSE_IF_STATE_CHECK_MARK(stk);\\r
     }\\r
     break;\\r
   case STACK_POP_LEVEL_MEM_START:\\r
@@ -714,10 +1780,9 @@ stack_double(OnigStackType** arg_stk_base, OnigStackType** arg_stk_end,
       STACK_BASE_CHECK(stk, "STACK_POP 2"); \\r
       if ((stk->type & STK_MASK_POP_USED) != 0)  break;\\r
       else if (stk->type == STK_MEM_START) {\\r
-        mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\\r
-        mem_end_stk[stk->u.mem.num]   = stk->u.mem.end;\\r
+        mem_start_stk[stk->zid] = stk->u.mem.prev_start;\\r
+        mem_end_stk[stk->zid]   = stk->u.mem.prev_end;\\r
       }\\r
-      ELSE_IF_STATE_CHECK_MARK(stk);\\r
     }\\r
     break;\\r
   default:\\r
@@ -725,136 +1790,108 @@ stack_double(OnigStackType** arg_stk_base, OnigStackType** arg_stk_end,
       stk--;\\r
       STACK_BASE_CHECK(stk, "STACK_POP 3"); \\r
       if ((stk->type & STK_MASK_POP_USED) != 0)  break;\\r
-      else if (stk->type == STK_MEM_START) {\\r
-        mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\\r
-        mem_end_stk[stk->u.mem.num]   = stk->u.mem.end;\\r
-      }\\r
-      else if (stk->type == STK_REPEAT_INC) {\\r
-        STACK_AT(stk->u.repeat_inc.si)->u.repeat.count--;\\r
-      }\\r
-      else if (stk->type == STK_MEM_END) {\\r
-        mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\\r
-        mem_end_stk[stk->u.mem.num]   = stk->u.mem.end;\\r
+      else if ((stk->type & STK_MASK_POP_HANDLED) != 0) {\\r
+        if (stk->type == STK_MEM_START) {\\r
+          mem_start_stk[stk->zid] = stk->u.mem.prev_start;\\r
+          mem_end_stk[stk->zid]   = stk->u.mem.prev_end;\\r
+        }\\r
+        else if (stk->type == STK_REPEAT_INC) {\\r
+          STACK_AT(stk->u.repeat_inc.si)->u.repeat.count--;\\r
+        }\\r
+        else if (stk->type == STK_MEM_END) {\\r
+          mem_start_stk[stk->zid] = stk->u.mem.prev_start;\\r
+          mem_end_stk[stk->zid]   = stk->u.mem.prev_end;\\r
+        }\\r
+        POP_CALLOUT_CASE\\r
       }\\r
-      ELSE_IF_STATE_CHECK_MARK(stk);\\r
     }\\r
     break;\\r
   }\\r
 } while(0)\r
 \r
-#define STACK_POP_TIL_POS_NOT  do {\\r
+#define POP_TIL_BODY(aname, til_type) do {\\r
   while (1) {\\r
     stk--;\\r
-    STACK_BASE_CHECK(stk, "STACK_POP_TIL_POS_NOT"); \\r
-    if (stk->type == STK_POS_NOT) break;\\r
-    else if (stk->type == STK_MEM_START) {\\r
-      mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\\r
-      mem_end_stk[stk->u.mem.num]   = stk->u.mem.end;\\r
-    }\\r
-    else if (stk->type == STK_REPEAT_INC) {\\r
-      STACK_AT(stk->u.repeat_inc.si)->u.repeat.count--;\\r
-    }\\r
-    else if (stk->type == STK_MEM_END) {\\r
-      mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\\r
-      mem_end_stk[stk->u.mem.num]   = stk->u.mem.end;\\r
+    STACK_BASE_CHECK(stk, (aname));\\r
+    if ((stk->type & STK_MASK_POP_HANDLED_TIL) != 0) {\\r
+      if (stk->type == (til_type)) break;\\r
+      else {\\r
+        if (stk->type == STK_MEM_START) {\\r
+          mem_start_stk[stk->zid] = stk->u.mem.prev_start;\\r
+          mem_end_stk[stk->zid]   = stk->u.mem.prev_end;\\r
+        }\\r
+        else if (stk->type == STK_REPEAT_INC) {\\r
+          STACK_AT(stk->u.repeat_inc.si)->u.repeat.count--;\\r
+        }\\r
+        else if (stk->type == STK_MEM_END) {\\r
+          mem_start_stk[stk->zid] = stk->u.mem.prev_start;\\r
+          mem_end_stk[stk->zid]   = stk->u.mem.prev_end;\\r
+        }\\r
+        /* Don't call callout here because negation of total success by (?!..) (?<!..) */\\r
+      }\\r
     }\\r
-    ELSE_IF_STATE_CHECK_MARK(stk);\\r
   }\\r
 } while(0)\r
 \r
-#define STACK_POP_TIL_LOOK_BEHIND_NOT  do {\\r
-  while (1) {\\r
-    stk--;\\r
-    STACK_BASE_CHECK(stk, "STACK_POP_TIL_LOOK_BEHIND_NOT"); \\r
-    if (stk->type == STK_LOOK_BEHIND_NOT) break;\\r
-    else if (stk->type == STK_MEM_START) {\\r
-      mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\\r
-      mem_end_stk[stk->u.mem.num]   = stk->u.mem.end;\\r
-    }\\r
-    else if (stk->type == STK_REPEAT_INC) {\\r
-      STACK_AT(stk->u.repeat_inc.si)->u.repeat.count--;\\r
-    }\\r
-    else if (stk->type == STK_MEM_END) {\\r
-      mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\\r
-      mem_end_stk[stk->u.mem.num]   = stk->u.mem.end;\\r
-    }\\r
-    ELSE_IF_STATE_CHECK_MARK(stk);\\r
-  }\\r
+#define STACK_POP_TIL_ALT_PREC_READ_NOT  do {\\r
+  POP_TIL_BODY("STACK_POP_TIL_ALT_PREC_READ_NOT", STK_ALT_PREC_READ_NOT);\\r
 } while(0)\r
 \r
-#define STACK_POS_END(k) do {\\r
-  k = stk;\\r
-  while (1) {\\r
-    k--;\\r
-    STACK_BASE_CHECK(k, "STACK_POS_END"); \\r
-    if (IS_TO_VOID_TARGET(k)) {\\r
-      k->type = STK_VOID;\\r
-    }\\r
-    else if (k->type == STK_POS) {\\r
-      k->type = STK_VOID;\\r
-      break;\\r
-    }\\r
-  }\\r
+#define STACK_POP_TIL_ALT_LOOK_BEHIND_NOT  do {\\r
+  POP_TIL_BODY("STACK_POP_TIL_ALT_LOOK_BEHIND_NOT", STK_ALT_LOOK_BEHIND_NOT);\\r
 } while(0)\r
 \r
-#define STACK_STOP_BT_END do {\\r
-  OnigStackType *k = stk;\\r
+\r
+#define STACK_EXEC_TO_VOID(k) do {\\r
+  k = stk;\\r
   while (1) {\\r
     k--;\\r
-    STACK_BASE_CHECK(k, "STACK_STOP_BT_END"); \\r
+    STACK_BASE_CHECK(k, "STACK_EXEC_TO_VOID"); \\r
     if (IS_TO_VOID_TARGET(k)) {\\r
+      if (k->type == STK_TO_VOID_START) {\\r
+        k->type = STK_VOID;\\r
+        break;\\r
+      }\\r
       k->type = STK_VOID;\\r
     }\\r
-    else if (k->type == STK_STOP_BT) {\\r
-      k->type = STK_VOID;\\r
-      break;\\r
-    }\\r
   }\\r
 } while(0)\r
 \r
-#define STACK_NULL_CHECK(isnull,id,s) do {\\r
-  OnigStackType* k = stk;\\r
+#define STACK_EMPTY_CHECK(isnull,sid,s) do {\\r
+  StackType* k = stk;\\r
   while (1) {\\r
     k--;\\r
-    STACK_BASE_CHECK(k, "STACK_NULL_CHECK"); \\r
-    if (k->type == STK_NULL_CHECK_START) {\\r
-      if (k->u.null_check.num == (id)) {\\r
-        (isnull) = (k->u.null_check.pstr == (s));\\r
+    STACK_BASE_CHECK(k, "STACK_EMPTY_CHECK"); \\r
+    if (k->type == STK_EMPTY_CHECK_START) {\\r
+      if (k->zid == (sid)) {\\r
+        (isnull) = (k->u.empty_check.pstr == (s));\\r
         break;\\r
       }\\r
     }\\r
   }\\r
 } while(0)\r
 \r
-#define STACK_NULL_CHECK_REC(isnull,id,s) do {\\r
-  int level = 0;\\r
-  OnigStackType* k = stk;\\r
-  while (1) {\\r
-    k--;\\r
-    STACK_BASE_CHECK(k, "STACK_NULL_CHECK_REC"); \\r
-    if (k->type == STK_NULL_CHECK_START) {\\r
-      if (k->u.null_check.num == (id)) {\\r
-        if (level == 0) {\\r
-          (isnull) = (k->u.null_check.pstr == (s));\\r
-          break;\\r
-        }\\r
-        else level--;\\r
-      }\\r
-    }\\r
-    else if (k->type == STK_NULL_CHECK_END) {\\r
-      level++;\\r
-    }\\r
+#define STACK_MEM_START_GET_PREV_END_ADDR(k /* STK_MEM_START*/, reg, addr) do {\\r
+  if (k->u.mem.prev_end == INVALID_STACK_INDEX) {\\r
+    (addr) = 0;\\r
   }\\r
-} while(0)\r
+  else {\\r
+    if (MEM_STATUS_AT((reg)->bt_mem_end, k->zid))\\r
+      (addr) = STACK_AT(k->u.mem.prev_end)->u.mem.pstr;\\r
+    else\\r
+      (addr) = (UChar* )k->u.mem.prev_end;\\r
+  }\\r
+} while (0)\r
 \r
-#define STACK_NULL_CHECK_MEMST(isnull,id,s,reg) do {\\r
-  OnigStackType* k = stk;\\r
+#ifdef USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT\r
+#define STACK_EMPTY_CHECK_MEM(isnull,sid,s,reg) do {\\r
+  StackType* k = stk;\\r
   while (1) {\\r
     k--;\\r
-    STACK_BASE_CHECK(k, "STACK_NULL_CHECK_MEMST"); \\r
-    if (k->type == STK_NULL_CHECK_START) {\\r
-      if (k->u.null_check.num == (id)) {\\r
-        if (k->u.null_check.pstr != (s)) {\\r
+    STACK_BASE_CHECK(k, "STACK_EMPTY_CHECK_MEM"); \\r
+    if (k->type == STK_EMPTY_CHECK_START) {\\r
+      if (k->zid == (sid)) {\\r
+        if (k->u.empty_check.pstr != (s)) {\\r
           (isnull) = 0;\\r
           break;\\r
         }\\r
@@ -863,14 +1900,11 @@ stack_double(OnigStackType** arg_stk_base, OnigStackType** arg_stk_end,
           (isnull) = 1;\\r
           while (k < stk) {\\r
             if (k->type == STK_MEM_START) {\\r
-              if (k->u.mem.end == INVALID_STACK_INDEX) {\\r
+              STACK_MEM_START_GET_PREV_END_ADDR(k, reg, endp);\\r
+              if (endp == 0) {\\r
                 (isnull) = 0; break;\\r
               }\\r
-              if (BIT_STATUS_AT(reg->bt_mem_end, k->u.mem.num))\\r
-                endp = STACK_AT(k->u.mem.end)->u.mem.pstr;\\r
-              else\\r
-                endp = (UChar* )(UINTN)k->u.mem.end;\\r
-              if (STACK_AT(k->u.mem.start)->u.mem.pstr != endp) {\\r
+              else if (STACK_AT(k->u.mem.prev_start)->u.mem.pstr != endp) {\\r
                 (isnull) = 0; break;\\r
               }\\r
               else if (endp != s) {\\r
@@ -879,23 +1913,23 @@ stack_double(OnigStackType** arg_stk_base, OnigStackType** arg_stk_end,
             }\\r
             k++;\\r
           }\\r
-         break;\\r
+          break;\\r
         }\\r
       }\\r
     }\\r
   }\\r
 } while(0)\r
 \r
-#define STACK_NULL_CHECK_MEMST_REC(isnull,id,s,reg) do {\\r
+#define STACK_EMPTY_CHECK_MEM_REC(isnull,sid,s,reg) do {\\r
   int level = 0;\\r
-  OnigStackType* k = stk;\\r
+  StackType* k = stk;\\r
   while (1) {\\r
     k--;\\r
-    STACK_BASE_CHECK(k, "STACK_NULL_CHECK_MEMST_REC"); \\r
-    if (k->type == STK_NULL_CHECK_START) {\\r
-      if (k->u.null_check.num == (id)) {\\r
+    STACK_BASE_CHECK(k, "STACK_EMPTY_CHECK_MEM_REC");\\r
+    if (k->type == STK_EMPTY_CHECK_START) {\\r
+      if (k->zid == (sid)) {\\r
         if (level == 0) {\\r
-          if (k->u.null_check.pstr != (s)) {\\r
+          if (k->u.empty_check.pstr != (s)) {\\r
             (isnull) = 0;\\r
             break;\\r
           }\\r
@@ -904,23 +1938,28 @@ stack_double(OnigStackType** arg_stk_base, OnigStackType** arg_stk_end,
             (isnull) = 1;\\r
             while (k < stk) {\\r
               if (k->type == STK_MEM_START) {\\r
-                if (k->u.mem.end == INVALID_STACK_INDEX) {\\r
-                  (isnull) = 0; break;\\r
-                }\\r
-                if (BIT_STATUS_AT(reg->bt_mem_end, k->u.mem.num))\\r
-                  endp = STACK_AT(k->u.mem.end)->u.mem.pstr;\\r
-                else\\r
-                  endp = (UChar* )(UINTN)k->u.mem.end;\\r
-                if (STACK_AT(k->u.mem.start)->u.mem.pstr != endp) {\\r
-                  (isnull) = 0; break;\\r
-                }\\r
-                else if (endp != s) {\\r
-                  (isnull) = -1; /* empty, but position changed */ \\r
+                if (level == 0) {\\r
+                  STACK_MEM_START_GET_PREV_END_ADDR(k, reg, endp);\\r
+                  if (endp == 0) {\\r
+                    (isnull) = 0; break;\\r
+                  }\\r
+                  else if (STACK_AT(k->u.mem.prev_start)->u.mem.pstr != endp) { \\r
+                    (isnull) = 0; break;\\r
+                  }\\r
+                  else if (endp != s) {\\r
+                    (isnull) = -1; /* empty, but position changed */\\r
+                  }\\r
                 }\\r
               }\\r
+              else if (k->type == STK_EMPTY_CHECK_START) {\\r
+                if (k->zid == (sid)) level++;\\r
+              }\\r
+              else if (k->type == STK_EMPTY_CHECK_END) {\\r
+                if (k->zid == (sid)) level--;\\r
+              }\\r
               k++;\\r
             }\\r
-           break;\\r
+            break;\\r
           }\\r
         }\\r
         else {\\r
@@ -928,13 +1967,35 @@ stack_double(OnigStackType** arg_stk_base, OnigStackType** arg_stk_end,
         }\\r
       }\\r
     }\\r
-    else if (k->type == STK_NULL_CHECK_END) {\\r
-      if (k->u.null_check.num == (id)) level++;\\r
+    else if (k->type == STK_EMPTY_CHECK_END) {\\r
+      if (k->zid == (sid)) level++;\\r
+    }\\r
+  }\\r
+} while(0)\r
+#else\r
+#define STACK_EMPTY_CHECK_REC(isnull,id,s) do {\\r
+  int level = 0;\\r
+  StackType* k = stk;\\r
+  while (1) {\\r
+    k--;\\r
+    STACK_BASE_CHECK(k, "STACK_EMPTY_CHECK_REC"); \\r
+    if (k->type == STK_EMPTY_CHECK_START) {\\r
+      if (k->u.empty_check.num == (id)) {\\r
+        if (level == 0) {\\r
+          (isnull) = (k->u.empty_check.pstr == (s));\\r
+          break;\\r
+        }\\r
+      }\\r
+      level--;\\r
+    }\\r
+    else if (k->type == STK_EMPTY_CHECK_END) {\\r
+      level++;\\r
     }\\r
   }\\r
 } while(0)\r
+#endif /* USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT */\r
 \r
-#define STACK_GET_REPEAT(id, k) do {\\r
+#define STACK_GET_REPEAT(sid, k) do {\\r
   int level = 0;\\r
   k = stk;\\r
   while (1) {\\r
@@ -942,7 +2003,7 @@ stack_double(OnigStackType** arg_stk_base, OnigStackType** arg_stk_end,
     STACK_BASE_CHECK(k, "STACK_GET_REPEAT"); \\r
     if (k->type == STK_REPEAT) {\\r
       if (level == 0) {\\r
-        if (k->u.repeat.num == (id)) {\\r
+        if (k->zid == (sid)) {\\r
           break;\\r
         }\\r
       }\\r
@@ -954,7 +2015,7 @@ stack_double(OnigStackType** arg_stk_base, OnigStackType** arg_stk_end,
 \r
 #define STACK_RETURN(addr)  do {\\r
   int level = 0;\\r
-  OnigStackType* k = stk;\\r
+  StackType* k = stk;\\r
   while (1) {\\r
     k--;\\r
     STACK_BASE_CHECK(k, "STACK_RETURN"); \\r
@@ -983,7 +2044,7 @@ stack_double(OnigStackType** arg_stk_base, OnigStackType** arg_stk_end,
 } while(0)\r
 \r
 static int string_cmp_ic(OnigEncoding enc, int case_fold_flag,\r
-                        UChar* s1, UChar** ps2, int mblen)\r
+                         UChar* s1, UChar** ps2, int mblen)\r
 {\r
   UChar buf1[ONIGENC_MBC_CASE_FOLD_MAXLEN];\r
   UChar buf2[ONIGENC_MBC_CASE_FOLD_MAXLEN];\r
@@ -1028,33 +2089,28 @@ static int string_cmp_ic(OnigEncoding enc, int case_fold_flag,
 \r
 \r
 #define IS_EMPTY_STR           (str == end)\r
-#define ON_STR_BEGIN(s)       ((s) == str)\r
-#define ON_STR_END(s)         ((s) == end)\r
-#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE\r
+#define ON_STR_BEGIN(s)        ((s) == str)\r
+#define ON_STR_END(s)          ((s) == end)\r
 #define DATA_ENSURE_CHECK1     (s < right_range)\r
 #define DATA_ENSURE_CHECK(n)   (s + (n) <= right_range)\r
 #define DATA_ENSURE(n)         if (s + (n) > right_range) goto fail\r
-#else\r
-#define DATA_ENSURE_CHECK1     (s < end)\r
-#define DATA_ENSURE_CHECK(n)   (s + (n) <= end)\r
-#define DATA_ENSURE(n)         if (s + (n) > end) goto fail\r
-#endif /* USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE */\r
 \r
+#define INIT_RIGHT_RANGE    right_range = (UChar* )in_right_range\r
 \r
 #ifdef USE_CAPTURE_HISTORY\r
 static int\r
-make_capture_history_tree(OnigCaptureTreeNode* node, OnigStackType** kp,\r
-                          OnigStackType* stk_top, UChar* str, regex_t* reg)\r
+make_capture_history_tree(OnigCaptureTreeNode* node, StackType** kp,\r
+                          StackType* stk_top, UChar* str, regex_t* reg)\r
 {\r
   int n, r;\r
   OnigCaptureTreeNode* child;\r
-  OnigStackType* k = *kp;\r
+  StackType* k = *kp;\r
 \r
   while (k < stk_top) {\r
     if (k->type == STK_MEM_START) {\r
-      n = k->u.mem.num;\r
+      n = k->zid;\r
       if (n <= ONIG_MAX_CAPTURE_HISTORY_GROUP &&\r
-          BIT_STATUS_AT(reg->capture_history, n) != 0) {\r
+          MEM_STATUS_AT(reg->capture_history, n) != 0) {\r
         child = history_node_new();\r
         CHECK_NULL_RETURN_MEMERR(child);\r
         child->group = n;\r
@@ -1070,7 +2126,7 @@ make_capture_history_tree(OnigCaptureTreeNode* node, OnigStackType** kp,
       }\r
     }\r
     else if (k->type == STK_MEM_END) {\r
-      if (k->u.mem.num == node->group) {\r
+      if (k->zid == node->group) {\r
         node->end = (int )(k->u.mem.pstr - str);\r
         *kp = k;\r
         return 0;\r
@@ -1096,14 +2152,16 @@ static int mem_is_in_memp(int mem, int num, UChar* memp)
   return 0;\r
 }\r
 \r
-static int backref_match_at_nested_level(regex_t* reg\r
-        , OnigStackType* top, OnigStackType* stk_base\r
-        , int ignore_case, int case_fold_flag\r
-        , int nest, int mem_num, UChar* memp, UChar** s, const UChar* send)\r
+static int\r
+backref_match_at_nested_level(regex_t* reg,\r
+                              StackType* top, StackType* stk_base,\r
+                              int ignore_case, int case_fold_flag,\r
+                              int nest, int mem_num, UChar* memp,\r
+                              UChar** s, const UChar* send)\r
 {\r
   UChar *ss, *p, *pstart, *pend = NULL_UCHARP;\r
   int level;\r
-  OnigStackType* k;\r
+  StackType* k;\r
 \r
   level = 0;\r
   k = top;\r
@@ -1117,33 +2175,64 @@ static int backref_match_at_nested_level(regex_t* reg
     }\r
     else if (level == nest) {\r
       if (k->type == STK_MEM_START) {\r
-       if (mem_is_in_memp(k->u.mem.num, mem_num, memp)) {\r
-         pstart = k->u.mem.pstr;\r
-         if (pend != NULL_UCHARP) {\r
-           if (pend - pstart > send - *s) return 0; /* or goto next_mem; */\r
-           p  = pstart;\r
-           ss = *s;\r
-\r
-           if (ignore_case != 0) {\r
-             if (string_cmp_ic(reg->enc, case_fold_flag,\r
-                               pstart, &ss, (int )(pend - pstart)) == 0)\r
-               return 0; /* or goto next_mem; */\r
-           }\r
-           else {\r
-             while (p < pend) {\r
-               if (*p++ != *ss++) return 0; /* or goto next_mem; */\r
-             }\r
-           }\r
-\r
-           *s = ss;\r
-           return 1;\r
-         }\r
-       }\r
+        if (mem_is_in_memp(k->zid, mem_num, memp)) {\r
+          pstart = k->u.mem.pstr;\r
+          if (IS_NOT_NULL(pend)) {\r
+            if (pend - pstart > send - *s) return 0; /* or goto next_mem; */\r
+            p  = pstart;\r
+            ss = *s;\r
+\r
+            if (ignore_case != 0) {\r
+              if (string_cmp_ic(reg->enc, case_fold_flag,\r
+                                pstart, &ss, (int )(pend - pstart)) == 0)\r
+                return 0; /* or goto next_mem; */\r
+            }\r
+            else {\r
+              while (p < pend) {\r
+                if (*p++ != *ss++) return 0; /* or goto next_mem; */\r
+              }\r
+            }\r
+\r
+            *s = ss;\r
+            return 1;\r
+          }\r
+        }\r
       }\r
       else if (k->type == STK_MEM_END) {\r
-       if (mem_is_in_memp(k->u.mem.num, mem_num, memp)) {\r
-         pend = k->u.mem.pstr;\r
-       }\r
+        if (mem_is_in_memp(k->zid, mem_num, memp)) {\r
+          pend = k->u.mem.pstr;\r
+        }\r
+      }\r
+    }\r
+    k--;\r
+  }\r
+\r
+  return 0;\r
+}\r
+\r
+static int\r
+backref_check_at_nested_level(regex_t* reg,\r
+                              StackType* top, StackType* stk_base,\r
+                              int nest, int mem_num, UChar* memp)\r
+{\r
+  int level;\r
+  StackType* k;\r
+\r
+  level = 0;\r
+  k = top;\r
+  k--;\r
+  while (k >= stk_base) {\r
+    if (k->type == STK_CALL_FRAME) {\r
+      level--;\r
+    }\r
+    else if (k->type == STK_RETURN) {\r
+      level++;\r
+    }\r
+    else if (level == nest) {\r
+      if (k->type == STK_MEM_END) {\r
+        if (mem_is_in_memp(k->zid, mem_num, memp)) {\r
+          return 1;\r
+        }\r
       }\r
     }\r
     k--;\r
@@ -1185,14 +2274,14 @@ static int OpCurr = OP_FINISH;
 static int OpPrevTarget = OP_FAIL;\r
 static int MaxStackDepth = 0;\r
 \r
-#define MOP_IN(opcode) do {\\r
+#define SOP_IN(opcode) do {\\r
   if (opcode == OpPrevTarget) OpPrevCounter[OpCurr]++;\\r
   OpCurr = opcode;\\r
   OpCounter[opcode]++;\\r
   GETTIME(ts);\\r
 } while(0)\r
 \r
-#define MOP_OUT do {\\r
+#define SOP_OUT do {\\r
   GETTIME(te);\\r
   OpTime[OpCurr] += TIMEDIFF(te, ts);\\r
 } while(0)\r
@@ -1207,16 +2296,24 @@ onig_statistics_init(void)
   MaxStackDepth = 0;\r
 }\r
 \r
-extern void\r
+extern int\r
 onig_print_statistics(FILE* f)\r
 {\r
+  int r;\r
   int i;\r
-  fprintf(f, "   count      prev        time\n");\r
-  for (i = 0; OnigOpInfo[i].opcode >= 0; i++) {\r
-    fprintf(f, "%8d: %8d: %10ld: %s\n",\r
-           OpCounter[i], OpPrevCounter[i], OpTime[i], OnigOpInfo[i].name);\r
+\r
+  r = fprintf(f, "   count      prev        time\n");\r
+  if (r < 0) return -1;\r
+\r
+  for (i = 0; OpInfo[i].opcode >= 0; i++) {\r
+    r = fprintf(f, "%8d: %8d: %10ld: %s\n",\r
+                OpCounter[i], OpPrevCounter[i], OpTime[i], OpInfo[i].name);\r
+    if (r < 0) return -1;\r
   }\r
-  fprintf(f, "\nmax stack depth: %d\n", MaxStackDepth);\r
+  r = fprintf(f, "\nmax stack depth: %d\n", MaxStackDepth);\r
+  if (r < 0) return -1;\r
+\r
+  return 0;\r
 }\r
 \r
 #define STACK_INC do {\\r
@@ -1228,8 +2325,8 @@ onig_print_statistics(FILE* f)
 #else\r
 #define STACK_INC     stk++\r
 \r
-#define MOP_IN(opcode)\r
-#define MOP_OUT\r
+#define SOP_IN(opcode)\r
+#define SOP_OUT\r
 #endif\r
 \r
 \r
@@ -1245,10 +2342,8 @@ typedef struct {
 /* if sstart == str then set sprev to NULL. */\r
 static int\r
 match_at(regex_t* reg, const UChar* str, const UChar* end,\r
-#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE\r
-        const UChar* right_range,\r
-#endif\r
-        const UChar* sstart, UChar* sprev, OnigMatchArg* msa)\r
+         const UChar* in_right_range, const UChar* sstart, UChar* sprev,\r
+         MatchArg* msa)\r
 {\r
   static UChar FinishCode[] = { OP_FINISH };\r
 \r
@@ -1256,133 +2351,159 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
   LengthType tlen, tlen2;\r
   MemNumType mem;\r
   RelAddrType addr;\r
+  UChar *s, *q, *sbegin;\r
+  UChar *right_range;\r
+  int is_alloca;\r
+  char *alloc_base;\r
+  StackType *stk_base, *stk, *stk_end;\r
+  StackType *stkp; /* used as any purpose. */\r
+  StackIndex si;\r
+  StackIndex *repeat_stk;\r
+  StackIndex *mem_start_stk, *mem_end_stk;\r
+  UChar* keep;\r
+#ifdef USE_RETRY_LIMIT_IN_MATCH\r
+  unsigned long retry_limit_in_match;\r
+  unsigned long retry_in_match_counter;\r
+#endif\r
+\r
+#ifdef USE_CALLOUT\r
+  int of;\r
+#endif\r
+\r
+  UChar *p = reg->p;\r
   OnigOptionType option = reg->options;\r
   OnigEncoding encode = reg->enc;\r
   OnigCaseFoldType case_fold_flag = reg->case_fold_flag;\r
-  UChar *s, *q, *sbegin;\r
-  UChar *p = reg->p;\r
-  char *alloca_base;\r
-  OnigStackType *stk_alloc, *stk_base, *stk, *stk_end;\r
-  OnigStackType *stkp; /* used as any purpose. */\r
-  OnigStackIndex si;\r
-  OnigStackIndex *repeat_stk;\r
-  OnigStackIndex *mem_start_stk, *mem_end_stk;\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-  int scv;\r
-  unsigned char* state_check_buff = msa->state_check_buff;\r
-  int num_comb_exp_check = reg->num_comb_exp_check;\r
-#endif\r
-  n = reg->num_repeat + reg->num_mem * 2;\r
-\r
-  STACK_INIT(alloca_base, n, INIT_MATCH_STACK_SIZE);\r
+\r
+#ifdef USE_CALLOUT\r
+  msa->mp->match_at_call_counter++;\r
+#endif\r
+\r
+#ifdef USE_RETRY_LIMIT_IN_MATCH\r
+  retry_limit_in_match = msa->retry_limit_in_match;\r
+#endif\r
+\r
   pop_level = reg->stack_pop_level;\r
   num_mem = reg->num_mem;\r
-  repeat_stk = (OnigStackIndex* )alloca_base;\r
-\r
-  mem_start_stk = (OnigStackIndex* )(repeat_stk + reg->num_repeat);\r
-  mem_end_stk   = mem_start_stk + num_mem;\r
-  mem_start_stk--; /* for index start from 1,\r
-                     mem_start_stk[1]..mem_start_stk[num_mem] */\r
-  mem_end_stk--;   /* for index start from 1,\r
-                     mem_end_stk[1]..mem_end_stk[num_mem] */\r
+  STACK_INIT(INIT_MATCH_STACK_SIZE);\r
+  UPDATE_FOR_STACK_REALLOC;\r
   for (i = 1; i <= num_mem; i++) {\r
     mem_start_stk[i] = mem_end_stk[i] = INVALID_STACK_INDEX;\r
   }\r
 \r
 #ifdef ONIG_DEBUG_MATCH\r
-  fprintf(stderr, "match_at: str: %d, end: %d, start: %d, sprev: %d\n",\r
-         (int )str, (int )end, (int )sstart, (int )sprev);\r
+  fprintf(stderr, "match_at: str: %p, end: %p, start: %p, sprev: %p\n",\r
+          str, end, sstart, sprev);\r
   fprintf(stderr, "size: %d, start offset: %d\n",\r
-         (int )(end - str), (int )(sstart - str));\r
+          (int )(end - str), (int )(sstart - str));\r
 #endif\r
 \r
-  STACK_PUSH_ENSURED(STK_ALT, FinishCode);  /* bottom stack */\r
   best_len = ONIG_MISMATCH;\r
-  s = (UChar* )sstart;\r
+  keep = s = (UChar* )sstart;\r
+  STACK_PUSH_BOTTOM(STK_ALT, FinishCode);  /* bottom stack */\r
+  INIT_RIGHT_RANGE;\r
+\r
+#ifdef USE_RETRY_LIMIT_IN_MATCH\r
+  retry_in_match_counter = 0;\r
+#endif\r
+\r
   while (1) {\r
 #ifdef ONIG_DEBUG_MATCH\r
     {\r
+      static unsigned int counter = 1;\r
+\r
       UChar *q, *bp, buf[50];\r
       int len;\r
-      fprintf(stderr, "%4d> \"", (int )(s - str));\r
+      fprintf(stderr, "%7u: %7ld: %4d> \"",\r
+              counter, GET_STACK_INDEX(stk), (int )(s - str));\r
+      counter++;\r
+\r
       bp = buf;\r
       for (i = 0, q = s; i < 7 && q < end; i++) {\r
-       len = enclen(encode, q);\r
-       while (len-- > 0) *bp++ = *q++;\r
+        len = enclen(encode, q);\r
+        while (len-- > 0) *bp++ = *q++;\r
       }\r
       if (q < end) { xmemcpy(bp, "...\"", 4); bp += 4; }\r
       else         { xmemcpy(bp, "\"",    1); bp += 1; }\r
       *bp = 0;\r
       fputs((char* )buf, stderr);\r
+\r
       for (i = 0; i < 20 - (bp - buf); i++) fputc(' ', stderr);\r
-      onig_print_compiled_byte_code(stderr, p, NULL, encode);\r
+      if (p == FinishCode)\r
+        fprintf(stderr, "----: ");\r
+      else\r
+        fprintf(stderr, "%4d: ", (int )(p - reg->p));\r
+      onig_print_compiled_byte_code(stderr, p, NULL, reg->p, encode);\r
       fprintf(stderr, "\n");\r
     }\r
 #endif\r
 \r
     sbegin = s;\r
     switch (*p++) {\r
-    case OP_END:  MOP_IN(OP_END);\r
-      n = (int)(s - sstart);\r
+    case OP_END:  SOP_IN(OP_END);\r
+      n = (int )(s - sstart);\r
       if (n > best_len) {\r
-       OnigRegion* region;\r
+        OnigRegion* region;\r
 #ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE\r
-       if (IS_FIND_LONGEST(option)) {\r
-         if (n > msa->best_len) {\r
-           msa->best_len = n;\r
-           msa->best_s   = (UChar* )sstart;\r
-         }\r
-         else\r
-           goto end_best_len;\r
+        if (IS_FIND_LONGEST(option)) {\r
+          if (n > msa->best_len) {\r
+            msa->best_len = n;\r
+            msa->best_s   = (UChar* )sstart;\r
+          }\r
+          else\r
+            goto end_best_len;\r
         }\r
 #endif\r
-       best_len = n;\r
-       region = msa->region;\r
-       if (region) {\r
+        best_len = n;\r
+        region = msa->region;\r
+        if (region) {\r
+          if (keep > s) keep = s;\r
+\r
 #ifdef USE_POSIX_API_REGION_OPTION\r
-         if (IS_POSIX_REGION(msa->options)) {\r
-           posix_regmatch_t* rmt = (posix_regmatch_t* )region;\r
-\r
-           rmt[0].rm_so = (regoff_t)(sstart - str);\r
-           rmt[0].rm_eo = (regoff_t)(s      - str);\r
-           for (i = 1; i <= num_mem; i++) {\r
-             if (mem_end_stk[i] != INVALID_STACK_INDEX) {\r
-               if (BIT_STATUS_AT(reg->bt_mem_start, i))\r
-                 rmt[i].rm_so = (regoff_t)(STACK_AT(mem_start_stk[i])->u.mem.pstr - str);\r
-               else\r
-                 rmt[i].rm_so = (regoff_t)((UChar* )((void* )(UINTN)(mem_start_stk[i])) - str);\r
-\r
-               rmt[i].rm_eo = (regoff_t)((BIT_STATUS_AT(reg->bt_mem_end, i)\r
-                               ? STACK_AT(mem_end_stk[i])->u.mem.pstr\r
-                               : (UChar* )((void* )(UINTN)mem_end_stk[i])) - str);\r
-             }\r
-             else {\r
-               rmt[i].rm_so = rmt[i].rm_eo = ONIG_REGION_NOTPOS;\r
-             }\r
-           }\r
-         }\r
-         else {\r
+          if (IS_POSIX_REGION(msa->options)) {\r
+            posix_regmatch_t* rmt = (posix_regmatch_t* )region;\r
+\r
+            rmt[0].rm_so = (regoff_t )(keep - str);\r
+            rmt[0].rm_eo = (regoff_t )(s    - str);\r
+            for (i = 1; i <= num_mem; i++) {\r
+              if (mem_end_stk[i] != INVALID_STACK_INDEX) {\r
+                if (MEM_STATUS_AT(reg->bt_mem_start, i))\r
+                  rmt[i].rm_so = (regoff_t )(STACK_AT(mem_start_stk[i])->u.mem.pstr - str);\r
+                else\r
+                  rmt[i].rm_so = (regoff_t )((UChar* )((void* )(mem_start_stk[i])) - str);\r
+\r
+                rmt[i].rm_eo = (regoff_t )((MEM_STATUS_AT(reg->bt_mem_end, i)\r
+                                            ? STACK_AT(mem_end_stk[i])->u.mem.pstr\r
+                                            : (UChar* )((void* )mem_end_stk[i]))\r
+                                           - str);\r
+              }\r
+              else {\r
+                rmt[i].rm_so = rmt[i].rm_eo = ONIG_REGION_NOTPOS;\r
+              }\r
+            }\r
+          }\r
+          else {\r
 #endif /* USE_POSIX_API_REGION_OPTION */\r
-           region->beg[0] = (int)(sstart - str);\r
-           region->end[0] = (int)(s      - str);\r
-           for (i = 1; i <= num_mem; i++) {\r
-             if (mem_end_stk[i] != INVALID_STACK_INDEX) {\r
-               if (BIT_STATUS_AT(reg->bt_mem_start, i))\r
-                 region->beg[i] = (int)(STACK_AT(mem_start_stk[i])->u.mem.pstr - str);\r
-               else\r
-                 region->beg[i] = (int)((UChar* )((void* )(UINTN)mem_start_stk[i]) - str);\r
-\r
-               region->end[i] = (int)((BIT_STATUS_AT(reg->bt_mem_end, i)\r
-                                 ? STACK_AT(mem_end_stk[i])->u.mem.pstr\r
-                                 : (UChar* )((void* )(UINTN)mem_end_stk[i])) - str);\r
-             }\r
-             else {\r
-               region->beg[i] = region->end[i] = ONIG_REGION_NOTPOS;\r
-             }\r
-           }\r
+            region->beg[0] = (int )(keep - str);\r
+            region->end[0] = (int )(s    - str);\r
+            for (i = 1; i <= num_mem; i++) {\r
+              if (mem_end_stk[i] != INVALID_STACK_INDEX) {\r
+                if (MEM_STATUS_AT(reg->bt_mem_start, i))\r
+                  region->beg[i] = (int )(STACK_AT(mem_start_stk[i])->u.mem.pstr - str);\r
+                else\r
+                  region->beg[i] = (int )((UChar* )((void* )mem_start_stk[i]) - str);\r
+\r
+                region->end[i] = (int )((MEM_STATUS_AT(reg->bt_mem_end, i)\r
+                                         ? STACK_AT(mem_end_stk[i])->u.mem.pstr\r
+                                         : (UChar* )((void* )mem_end_stk[i])) - str);\r
+              }\r
+              else {\r
+                region->beg[i] = region->end[i] = ONIG_REGION_NOTPOS;\r
+              }\r
+            }\r
 \r
 #ifdef USE_CAPTURE_HISTORY\r
-           if (reg->capture_history != 0) {\r
+            if (reg->capture_history != 0) {\r
               int r;\r
               OnigCaptureTreeNode* node;\r
 \r
@@ -1396,8 +2517,8 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
               }\r
 \r
               node->group = 0;\r
-              node->beg   = (int)(sstart - str);\r
-              node->end   = (int)(s      - str);\r
+              node->beg   = (int )(keep - str);\r
+              node->end   = (int )(s    - str);\r
 \r
               stkp = stk_base;\r
               r = make_capture_history_tree(region->history_root, &stkp,\r
@@ -1406,79 +2527,74 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
                 best_len = r; /* error code */\r
                 goto finish;\r
               }\r
-           }\r
+            }\r
 #endif /* USE_CAPTURE_HISTORY */\r
 #ifdef USE_POSIX_API_REGION_OPTION\r
-         } /* else IS_POSIX_REGION() */\r
+          } /* else IS_POSIX_REGION() */\r
 #endif\r
-       } /* if (region) */\r
+        } /* if (region) */\r
       } /* n > best_len */\r
 \r
 #ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE\r
     end_best_len:\r
 #endif\r
-      MOP_OUT;\r
+      SOP_OUT;\r
 \r
       if (IS_FIND_CONDITION(option)) {\r
-       if (IS_FIND_NOT_EMPTY(option) && s == sstart) {\r
-         best_len = ONIG_MISMATCH;\r
-         goto fail; /* for retry */\r
-       }\r
-       if (IS_FIND_LONGEST(option) && DATA_ENSURE_CHECK1) {\r
-         goto fail; /* for retry */\r
-       }\r
+        if (IS_FIND_NOT_EMPTY(option) && s == sstart) {\r
+          best_len = ONIG_MISMATCH;\r
+          goto fail; /* for retry */\r
+        }\r
+        if (IS_FIND_LONGEST(option) && DATA_ENSURE_CHECK1) {\r
+          goto fail; /* for retry */\r
+        }\r
       }\r
 \r
       /* default behavior: return first-matching result. */\r
       goto finish;\r
       break;\r
 \r
-    case OP_EXACT1:  MOP_IN(OP_EXACT1);\r
-#if 0\r
+    case OP_EXACT1:  SOP_IN(OP_EXACT1);\r
       DATA_ENSURE(1);\r
       if (*p != *s) goto fail;\r
       p++; s++;\r
-#endif\r
-      if (*p != *s++) goto fail;\r
-      DATA_ENSURE(0);\r
-      p++;\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       break;\r
 \r
-    case OP_EXACT1_IC:  MOP_IN(OP_EXACT1_IC);\r
+    case OP_EXACT1_IC:  SOP_IN(OP_EXACT1_IC);\r
       {\r
-       int len;\r
-       UChar *q1, lowbuf[ONIGENC_MBC_CASE_FOLD_MAXLEN];\r
-\r
-       DATA_ENSURE(1);\r
-       len = ONIGENC_MBC_CASE_FOLD(encode,\r
-                   /* DISABLE_CASE_FOLD_MULTI_CHAR(case_fold_flag), */\r
-                   case_fold_flag,\r
-                   &s, end, lowbuf);\r
-       DATA_ENSURE(0);\r
-       q1 = lowbuf;\r
-       while (len-- > 0) {\r
-         if (*p != *q1) {\r
+        int len;\r
+        UChar *q, lowbuf[ONIGENC_MBC_CASE_FOLD_MAXLEN];\r
+\r
+        DATA_ENSURE(1);\r
+        len = ONIGENC_MBC_CASE_FOLD(encode,\r
+                 /* DISABLE_CASE_FOLD_MULTI_CHAR(case_fold_flag), */\r
+                                    case_fold_flag,\r
+                                    &s, end, lowbuf);\r
+        DATA_ENSURE(0);\r
+        q = lowbuf;\r
+        while (len-- > 0) {\r
+          if (*p != *q) {\r
             goto fail;\r
           }\r
-         p++; q1++;\r
-       }\r
+          p++; q++;\r
+        }\r
       }\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       break;\r
 \r
-    case OP_EXACT2:  MOP_IN(OP_EXACT2);\r
+    case OP_EXACT2:  SOP_IN(OP_EXACT2);\r
       DATA_ENSURE(2);\r
       if (*p != *s) goto fail;\r
       p++; s++;\r
       if (*p != *s) goto fail;\r
       sprev = s;\r
       p++; s++;\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_EXACT3:  MOP_IN(OP_EXACT3);\r
+    case OP_EXACT3:  SOP_IN(OP_EXACT3);\r
       DATA_ENSURE(3);\r
       if (*p != *s) goto fail;\r
       p++; s++;\r
@@ -1487,11 +2603,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       if (*p != *s) goto fail;\r
       sprev = s;\r
       p++; s++;\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_EXACT4:  MOP_IN(OP_EXACT4);\r
+    case OP_EXACT4:  SOP_IN(OP_EXACT4);\r
       DATA_ENSURE(4);\r
       if (*p != *s) goto fail;\r
       p++; s++;\r
@@ -1502,11 +2618,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       if (*p != *s) goto fail;\r
       sprev = s;\r
       p++; s++;\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_EXACT5:  MOP_IN(OP_EXACT5);\r
+    case OP_EXACT5:  SOP_IN(OP_EXACT5);\r
       DATA_ENSURE(5);\r
       if (*p != *s) goto fail;\r
       p++; s++;\r
@@ -1519,59 +2635,59 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       if (*p != *s) goto fail;\r
       sprev = s;\r
       p++; s++;\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_EXACTN:  MOP_IN(OP_EXACTN);\r
+    case OP_EXACTN:  SOP_IN(OP_EXACTN);\r
       GET_LENGTH_INC(tlen, p);\r
       DATA_ENSURE(tlen);\r
       while (tlen-- > 0) {\r
-       if (*p++ != *s++) goto fail;\r
+        if (*p++ != *s++) goto fail;\r
       }\r
       sprev = s - 1;\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_EXACTN_IC:  MOP_IN(OP_EXACTN_IC);\r
+    case OP_EXACTN_IC:  SOP_IN(OP_EXACTN_IC);\r
       {\r
-       int len;\r
-       UChar *qn, *endp, lowbuf[ONIGENC_MBC_CASE_FOLD_MAXLEN];\r
-\r
-       GET_LENGTH_INC(tlen, p);\r
-       endp = p + tlen;\r
-\r
-       while (p < endp) {\r
-         sprev = s;\r
-         DATA_ENSURE(1);\r
-         len = ONIGENC_MBC_CASE_FOLD(encode,\r
-                     /* DISABLE_CASE_FOLD_MULTI_CHAR(case_fold_flag), */\r
-                     case_fold_flag,\r
-                     &s, end, lowbuf);\r
-         DATA_ENSURE(0);\r
-         qn = lowbuf;\r
-         while (len-- > 0) {\r
-           if (*p != *qn) goto fail;\r
-           p++; qn++;\r
-         }\r
-       }\r
-      }\r
-\r
-      MOP_OUT;\r
+        int len;\r
+        UChar *q, *endp, lowbuf[ONIGENC_MBC_CASE_FOLD_MAXLEN];\r
+\r
+        GET_LENGTH_INC(tlen, p);\r
+        endp = p + tlen;\r
+\r
+        while (p < endp) {\r
+          sprev = s;\r
+          DATA_ENSURE(1);\r
+          len = ONIGENC_MBC_CASE_FOLD(encode,\r
+                        /* DISABLE_CASE_FOLD_MULTI_CHAR(case_fold_flag), */\r
+                                      case_fold_flag,\r
+                                      &s, end, lowbuf);\r
+          DATA_ENSURE(0);\r
+          q = lowbuf;\r
+          while (len-- > 0) {\r
+            if (*p != *q) goto fail;\r
+            p++; q++;\r
+          }\r
+        }\r
+      }\r
+\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_EXACTMB2N1:  MOP_IN(OP_EXACTMB2N1);\r
+    case OP_EXACTMB2N1:  SOP_IN(OP_EXACTMB2N1);\r
       DATA_ENSURE(2);\r
       if (*p != *s) goto fail;\r
       p++; s++;\r
       if (*p != *s) goto fail;\r
       p++; s++;\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       break;\r
 \r
-    case OP_EXACTMB2N2:  MOP_IN(OP_EXACTMB2N2);\r
+    case OP_EXACTMB2N2:  SOP_IN(OP_EXACTMB2N2);\r
       DATA_ENSURE(4);\r
       if (*p != *s) goto fail;\r
       p++; s++;\r
@@ -1582,11 +2698,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       p++; s++;\r
       if (*p != *s) goto fail;\r
       p++; s++;\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_EXACTMB2N3:  MOP_IN(OP_EXACTMB2N3);\r
+    case OP_EXACTMB2N3:  SOP_IN(OP_EXACTMB2N3);\r
       DATA_ENSURE(6);\r
       if (*p != *s) goto fail;\r
       p++; s++;\r
@@ -1601,469 +2717,488 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       p++; s++;\r
       if (*p != *s) goto fail;\r
       p++; s++;\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_EXACTMB2N:  MOP_IN(OP_EXACTMB2N);\r
+    case OP_EXACTMB2N:  SOP_IN(OP_EXACTMB2N);\r
       GET_LENGTH_INC(tlen, p);\r
       DATA_ENSURE(tlen * 2);\r
       while (tlen-- > 0) {\r
-       if (*p != *s) goto fail;\r
-       p++; s++;\r
-       if (*p != *s) goto fail;\r
-       p++; s++;\r
+        if (*p != *s) goto fail;\r
+        p++; s++;\r
+        if (*p != *s) goto fail;\r
+        p++; s++;\r
       }\r
       sprev = s - 2;\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_EXACTMB3N:  MOP_IN(OP_EXACTMB3N);\r
+    case OP_EXACTMB3N:  SOP_IN(OP_EXACTMB3N);\r
       GET_LENGTH_INC(tlen, p);\r
       DATA_ENSURE(tlen * 3);\r
       while (tlen-- > 0) {\r
-       if (*p != *s) goto fail;\r
-       p++; s++;\r
-       if (*p != *s) goto fail;\r
-       p++; s++;\r
-       if (*p != *s) goto fail;\r
-       p++; s++;\r
+        if (*p != *s) goto fail;\r
+        p++; s++;\r
+        if (*p != *s) goto fail;\r
+        p++; s++;\r
+        if (*p != *s) goto fail;\r
+        p++; s++;\r
       }\r
       sprev = s - 3;\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_EXACTMBN:  MOP_IN(OP_EXACTMBN);\r
+    case OP_EXACTMBN:  SOP_IN(OP_EXACTMBN);\r
       GET_LENGTH_INC(tlen,  p);  /* mb-len */\r
       GET_LENGTH_INC(tlen2, p);  /* string len */\r
       tlen2 *= tlen;\r
       DATA_ENSURE(tlen2);\r
       while (tlen2-- > 0) {\r
-       if (*p != *s) goto fail;\r
-       p++; s++;\r
+        if (*p != *s) goto fail;\r
+        p++; s++;\r
       }\r
       sprev = s - tlen;\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_CCLASS:  MOP_IN(OP_CCLASS);\r
+    case OP_CCLASS:  SOP_IN(OP_CCLASS);\r
       DATA_ENSURE(1);\r
       if (BITSET_AT(((BitSetRef )p), *s) == 0) goto fail;\r
       p += SIZE_BITSET;\r
       s += enclen(encode, s);   /* OP_CCLASS can match mb-code. \D, \S */\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       break;\r
 \r
-    case OP_CCLASS_MB:  MOP_IN(OP_CCLASS_MB);\r
+    case OP_CCLASS_MB:  SOP_IN(OP_CCLASS_MB);\r
       if (! ONIGENC_IS_MBC_HEAD(encode, s)) goto fail;\r
 \r
     cclass_mb:\r
       GET_LENGTH_INC(tlen, p);\r
       {\r
-       OnigCodePoint code;\r
-       UChar *ss;\r
-       int mb_len;\r
+        OnigCodePoint code;\r
+        UChar *ss;\r
+        int mb_len;\r
 \r
-       DATA_ENSURE(1);\r
-       mb_len = enclen(encode, s);\r
-       DATA_ENSURE(mb_len);\r
-       ss = s;\r
-       s += mb_len;\r
-       code = ONIGENC_MBC_TO_CODE(encode, ss, s);\r
+        DATA_ENSURE(1);\r
+        mb_len = enclen(encode, s);\r
+        DATA_ENSURE(mb_len);\r
+        ss = s;\r
+        s += mb_len;\r
+        code = ONIGENC_MBC_TO_CODE(encode, ss, s);\r
 \r
 #ifdef PLATFORM_UNALIGNED_WORD_ACCESS\r
-       if (! onig_is_in_code_range(p, code)) goto fail;\r
+        if (! onig_is_in_code_range(p, code)) goto fail;\r
 #else\r
-       q = p;\r
-       ALIGNMENT_RIGHT(q);\r
-       if (! onig_is_in_code_range(q, code)) goto fail;\r
+        q = p;\r
+        ALIGNMENT_RIGHT(q);\r
+        if (! onig_is_in_code_range(q, code)) goto fail;\r
 #endif\r
       }\r
       p += tlen;\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       break;\r
 \r
-    case OP_CCLASS_MIX:  MOP_IN(OP_CCLASS_MIX);\r
+    case OP_CCLASS_MIX:  SOP_IN(OP_CCLASS_MIX);\r
       DATA_ENSURE(1);\r
       if (ONIGENC_IS_MBC_HEAD(encode, s)) {\r
-       p += SIZE_BITSET;\r
-       goto cclass_mb;\r
+        p += SIZE_BITSET;\r
+        goto cclass_mb;\r
       }\r
       else {\r
-       if (BITSET_AT(((BitSetRef )p), *s) == 0)\r
-         goto fail;\r
+        if (BITSET_AT(((BitSetRef )p), *s) == 0)\r
+          goto fail;\r
 \r
-       p += SIZE_BITSET;\r
-       GET_LENGTH_INC(tlen, p);\r
-       p += tlen;\r
-       s++;\r
+        p += SIZE_BITSET;\r
+        GET_LENGTH_INC(tlen, p);\r
+        p += tlen;\r
+        s++;\r
       }\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       break;\r
 \r
-    case OP_CCLASS_NOT:  MOP_IN(OP_CCLASS_NOT);\r
+    case OP_CCLASS_NOT:  SOP_IN(OP_CCLASS_NOT);\r
       DATA_ENSURE(1);\r
       if (BITSET_AT(((BitSetRef )p), *s) != 0) goto fail;\r
       p += SIZE_BITSET;\r
       s += enclen(encode, s);\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       break;\r
 \r
-    case OP_CCLASS_MB_NOT:  MOP_IN(OP_CCLASS_MB_NOT);\r
+    case OP_CCLASS_MB_NOT:  SOP_IN(OP_CCLASS_MB_NOT);\r
       DATA_ENSURE(1);\r
       if (! ONIGENC_IS_MBC_HEAD(encode, s)) {\r
-       s++;\r
-       GET_LENGTH_INC(tlen, p);\r
-       p += tlen;\r
-       goto cc_mb_not_success;\r
+        s++;\r
+        GET_LENGTH_INC(tlen, p);\r
+        p += tlen;\r
+        goto cc_mb_not_success;\r
       }\r
 \r
     cclass_mb_not:\r
       GET_LENGTH_INC(tlen, p);\r
       {\r
-       OnigCodePoint code;\r
-       UChar *ss;\r
-       int mb_len = enclen(encode, s);\r
+        OnigCodePoint code;\r
+        UChar *ss;\r
+        int mb_len = enclen(encode, s);\r
 \r
-       if (! DATA_ENSURE_CHECK(mb_len)) {\r
+        if (! DATA_ENSURE_CHECK(mb_len)) {\r
           DATA_ENSURE(1);\r
-         s = (UChar* )end;\r
-         p += tlen;\r
-         goto cc_mb_not_success;\r
-       }\r
+          s = (UChar* )end;\r
+          p += tlen;\r
+          goto cc_mb_not_success;\r
+        }\r
 \r
-       ss = s;\r
-       s += mb_len;\r
-       code = ONIGENC_MBC_TO_CODE(encode, ss, s);\r
+        ss = s;\r
+        s += mb_len;\r
+        code = ONIGENC_MBC_TO_CODE(encode, ss, s);\r
 \r
 #ifdef PLATFORM_UNALIGNED_WORD_ACCESS\r
-       if (onig_is_in_code_range(p, code)) goto fail;\r
+        if (onig_is_in_code_range(p, code)) goto fail;\r
 #else\r
-       q = p;\r
-       ALIGNMENT_RIGHT(q);\r
-       if (onig_is_in_code_range(q, code)) goto fail;\r
+        q = p;\r
+        ALIGNMENT_RIGHT(q);\r
+        if (onig_is_in_code_range(q, code)) goto fail;\r
 #endif\r
       }\r
       p += tlen;\r
 \r
     cc_mb_not_success:\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       break;\r
 \r
-    case OP_CCLASS_MIX_NOT:  MOP_IN(OP_CCLASS_MIX_NOT);\r
+    case OP_CCLASS_MIX_NOT:  SOP_IN(OP_CCLASS_MIX_NOT);\r
       DATA_ENSURE(1);\r
       if (ONIGENC_IS_MBC_HEAD(encode, s)) {\r
-       p += SIZE_BITSET;\r
-       goto cclass_mb_not;\r
+        p += SIZE_BITSET;\r
+        goto cclass_mb_not;\r
       }\r
       else {\r
-       if (BITSET_AT(((BitSetRef )p), *s) != 0)\r
-         goto fail;\r
+        if (BITSET_AT(((BitSetRef )p), *s) != 0)\r
+          goto fail;\r
 \r
-       p += SIZE_BITSET;\r
-       GET_LENGTH_INC(tlen, p);\r
-       p += tlen;\r
-       s++;\r
+        p += SIZE_BITSET;\r
+        GET_LENGTH_INC(tlen, p);\r
+        p += tlen;\r
+        s++;\r
       }\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       break;\r
 \r
-    case OP_CCLASS_NODE:  MOP_IN(OP_CCLASS_NODE);\r
+#ifdef USE_OP_CCLASS_NODE\r
+    case OP_CCLASS_NODE:  SOP_IN(OP_CCLASS_NODE);\r
       {\r
-       OnigCodePoint code;\r
+        OnigCodePoint code;\r
         void *node;\r
         int mb_len;\r
         UChar *ss;\r
 \r
         DATA_ENSURE(1);\r
         GET_POINTER_INC(node, p);\r
-       mb_len = enclen(encode, s);\r
-       ss = s;\r
-       s += mb_len;\r
-       DATA_ENSURE(0);\r
-       code = ONIGENC_MBC_TO_CODE(encode, ss, s);\r
-       if (onig_is_code_in_cc_len(mb_len, code, node) == 0) goto fail;\r
+        mb_len = enclen(encode, s);\r
+        ss = s;\r
+        s += mb_len;\r
+        DATA_ENSURE(0);\r
+        code = ONIGENC_MBC_TO_CODE(encode, ss, s);\r
+        if (onig_is_code_in_cc_len(mb_len, code, node) == 0) goto fail;\r
       }\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       break;\r
+#endif\r
 \r
-    case OP_ANYCHAR:  MOP_IN(OP_ANYCHAR);\r
+    case OP_ANYCHAR:  SOP_IN(OP_ANYCHAR);\r
       DATA_ENSURE(1);\r
       n = enclen(encode, s);\r
       DATA_ENSURE(n);\r
       if (ONIGENC_IS_MBC_NEWLINE(encode, s, end)) goto fail;\r
       s += n;\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       break;\r
 \r
-    case OP_ANYCHAR_ML:  MOP_IN(OP_ANYCHAR_ML);\r
+    case OP_ANYCHAR_ML:  SOP_IN(OP_ANYCHAR_ML);\r
       DATA_ENSURE(1);\r
       n = enclen(encode, s);\r
       DATA_ENSURE(n);\r
       s += n;\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       break;\r
 \r
-    case OP_ANYCHAR_STAR:  MOP_IN(OP_ANYCHAR_STAR);\r
+    case OP_ANYCHAR_STAR:  SOP_IN(OP_ANYCHAR_STAR);\r
       while (DATA_ENSURE_CHECK1) {\r
-       STACK_PUSH_ALT(p, s, sprev);\r
-       n = enclen(encode, s);\r
+        STACK_PUSH_ALT(p, s, sprev);\r
+        n = enclen(encode, s);\r
         DATA_ENSURE(n);\r
         if (ONIGENC_IS_MBC_NEWLINE(encode, s, end))  goto fail;\r
         sprev = s;\r
         s += n;\r
       }\r
-      MOP_OUT;\r
+      SOP_OUT;\r
+      continue;\r
       break;\r
 \r
-    case OP_ANYCHAR_ML_STAR:  MOP_IN(OP_ANYCHAR_ML_STAR);\r
+    case OP_ANYCHAR_ML_STAR:  SOP_IN(OP_ANYCHAR_ML_STAR);\r
       while (DATA_ENSURE_CHECK1) {\r
-       STACK_PUSH_ALT(p, s, sprev);\r
-       n = enclen(encode, s);\r
-       if (n > 1) {\r
-         DATA_ENSURE(n);\r
-         sprev = s;\r
-         s += n;\r
-       }\r
-       else {\r
-         sprev = s;\r
-         s++;\r
-       }\r
-      }\r
-      MOP_OUT;\r
-      break;\r
-\r
-    case OP_ANYCHAR_STAR_PEEK_NEXT:  MOP_IN(OP_ANYCHAR_STAR_PEEK_NEXT);\r
+        STACK_PUSH_ALT(p, s, sprev);\r
+        n = enclen(encode, s);\r
+        if (n > 1) {\r
+          DATA_ENSURE(n);\r
+          sprev = s;\r
+          s += n;\r
+        }\r
+        else {\r
+          sprev = s;\r
+          s++;\r
+        }\r
+      }\r
+      SOP_OUT;\r
+      continue;\r
+      break;\r
+\r
+    case OP_ANYCHAR_STAR_PEEK_NEXT:  SOP_IN(OP_ANYCHAR_STAR_PEEK_NEXT);\r
       while (DATA_ENSURE_CHECK1) {\r
-       if (*p == *s) {\r
-         STACK_PUSH_ALT(p + 1, s, sprev);\r
-       }\r
-       n = enclen(encode, s);\r
+        if (*p == *s) {\r
+          STACK_PUSH_ALT(p + 1, s, sprev);\r
+        }\r
+        n = enclen(encode, s);\r
         DATA_ENSURE(n);\r
         if (ONIGENC_IS_MBC_NEWLINE(encode, s, end))  goto fail;\r
         sprev = s;\r
         s += n;\r
       }\r
       p++;\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       break;\r
 \r
-    case OP_ANYCHAR_ML_STAR_PEEK_NEXT:MOP_IN(OP_ANYCHAR_ML_STAR_PEEK_NEXT);\r
+    case OP_ANYCHAR_ML_STAR_PEEK_NEXT:SOP_IN(OP_ANYCHAR_ML_STAR_PEEK_NEXT);\r
       while (DATA_ENSURE_CHECK1) {\r
-       if (*p == *s) {\r
-         STACK_PUSH_ALT(p + 1, s, sprev);\r
-       }\r
-       n = enclen(encode, s);\r
-       if (n > 1) {\r
-         DATA_ENSURE(n);\r
-         sprev = s;\r
-         s += n;\r
-       }\r
-       else {\r
-         sprev = s;\r
-         s++;\r
-       }\r
+        if (*p == *s) {\r
+          STACK_PUSH_ALT(p + 1, s, sprev);\r
+        }\r
+        n = enclen(encode, s);\r
+        if (n > 1) {\r
+          DATA_ENSURE(n);\r
+          sprev = s;\r
+          s += n;\r
+        }\r
+        else {\r
+          sprev = s;\r
+          s++;\r
+        }\r
       }\r
       p++;\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       break;\r
 \r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-    case OP_STATE_CHECK_ANYCHAR_STAR:  MOP_IN(OP_STATE_CHECK_ANYCHAR_STAR);\r
-      GET_STATE_CHECK_NUM_INC(mem, p);\r
-      while (DATA_ENSURE_CHECK1) {\r
-       STATE_CHECK_VAL(scv, mem);\r
-       if (scv) goto fail;\r
+    case OP_WORD:  SOP_IN(OP_WORD);\r
+      DATA_ENSURE(1);\r
+      if (! ONIGENC_IS_MBC_WORD(encode, s, end))\r
+        goto fail;\r
 \r
-       STACK_PUSH_ALT_WITH_STATE_CHECK(p, s, sprev, mem);\r
-       n = enclen(encode, s);\r
-        DATA_ENSURE(n);\r
-        if (ONIGENC_IS_MBC_NEWLINE(encode, s, end))  goto fail;\r
-        sprev = s;\r
-        s += n;\r
-      }\r
-      MOP_OUT;\r
+      s += enclen(encode, s);\r
+      SOP_OUT;\r
       break;\r
 \r
-    case OP_STATE_CHECK_ANYCHAR_ML_STAR:\r
-      MOP_IN(OP_STATE_CHECK_ANYCHAR_ML_STAR);\r
-\r
-      GET_STATE_CHECK_NUM_INC(mem, p);\r
-      while (DATA_ENSURE_CHECK1) {\r
-       STATE_CHECK_VAL(scv, mem);\r
-       if (scv) goto fail;\r
-\r
-       STACK_PUSH_ALT_WITH_STATE_CHECK(p, s, sprev, mem);\r
-       n = enclen(encode, s);\r
-       if (n > 1) {\r
-         DATA_ENSURE(n);\r
-         sprev = s;\r
-         s += n;\r
-       }\r
-       else {\r
-         sprev = s;\r
-         s++;\r
-       }\r
-      }\r
-      MOP_OUT;\r
-      break;\r
-#endif /* USE_COMBINATION_EXPLOSION_CHECK */\r
-\r
-    case OP_WORD:  MOP_IN(OP_WORD);\r
+    case OP_WORD_ASCII:  SOP_IN(OP_WORD_ASCII);\r
       DATA_ENSURE(1);\r
-      if (! ONIGENC_IS_MBC_WORD(encode, s, end))\r
-       goto fail;\r
+      if (! ONIGENC_IS_MBC_WORD_ASCII(encode, s, end))\r
+        goto fail;\r
 \r
       s += enclen(encode, s);\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       break;\r
 \r
-    case OP_NOT_WORD:  MOP_IN(OP_NOT_WORD);\r
+    case OP_NO_WORD:  SOP_IN(OP_NO_WORD);\r
       DATA_ENSURE(1);\r
       if (ONIGENC_IS_MBC_WORD(encode, s, end))\r
-       goto fail;\r
+        goto fail;\r
 \r
       s += enclen(encode, s);\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       break;\r
 \r
-    case OP_WORD_BOUND:  MOP_IN(OP_WORD_BOUND);\r
-      if (ON_STR_BEGIN(s)) {\r
-       DATA_ENSURE(1);\r
-       if (! ONIGENC_IS_MBC_WORD(encode, s, end))\r
-         goto fail;\r
-      }\r
-      else if (ON_STR_END(s)) {\r
-       if (! ONIGENC_IS_MBC_WORD(encode, sprev, end))\r
-         goto fail;\r
-      }\r
-      else {\r
-       if (ONIGENC_IS_MBC_WORD(encode, s, end)\r
-           == ONIGENC_IS_MBC_WORD(encode, sprev, end))\r
-         goto fail;\r
+    case OP_NO_WORD_ASCII:  SOP_IN(OP_NO_WORD_ASCII);\r
+      DATA_ENSURE(1);\r
+      if (ONIGENC_IS_MBC_WORD_ASCII(encode, s, end))\r
+        goto fail;\r
+\r
+      s += enclen(encode, s);\r
+      SOP_OUT;\r
+      break;\r
+\r
+    case OP_WORD_BOUNDARY:  SOP_IN(OP_WORD_BOUNDARY);\r
+      {\r
+        ModeType mode;\r
+        GET_MODE_INC(mode, p); /* ascii_mode */\r
+\r
+        if (ON_STR_BEGIN(s)) {\r
+          DATA_ENSURE(1);\r
+          if (! IS_MBC_WORD_ASCII_MODE(encode, s, end, mode))\r
+            goto fail;\r
+        }\r
+        else if (ON_STR_END(s)) {\r
+          if (! IS_MBC_WORD_ASCII_MODE(encode, sprev, end, mode))\r
+            goto fail;\r
+        }\r
+        else {\r
+          if (IS_MBC_WORD_ASCII_MODE(encode, s, end, mode)\r
+              == IS_MBC_WORD_ASCII_MODE(encode, sprev, end, mode))\r
+            goto fail;\r
+        }\r
       }\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_NOT_WORD_BOUND:  MOP_IN(OP_NOT_WORD_BOUND);\r
-      if (ON_STR_BEGIN(s)) {\r
-       if (DATA_ENSURE_CHECK1 && ONIGENC_IS_MBC_WORD(encode, s, end))\r
-         goto fail;\r
-      }\r
-      else if (ON_STR_END(s)) {\r
-       if (ONIGENC_IS_MBC_WORD(encode, sprev, end))\r
-         goto fail;\r
-      }\r
-      else {\r
-       if (ONIGENC_IS_MBC_WORD(encode, s, end)\r
-           != ONIGENC_IS_MBC_WORD(encode, sprev, end))\r
-         goto fail;\r
+    case OP_NO_WORD_BOUNDARY:  SOP_IN(OP_NO_WORD_BOUNDARY);\r
+      {\r
+        ModeType mode;\r
+        GET_MODE_INC(mode, p); /* ascii_mode */\r
+\r
+        if (ON_STR_BEGIN(s)) {\r
+          if (DATA_ENSURE_CHECK1 && IS_MBC_WORD_ASCII_MODE(encode, s, end, mode))\r
+            goto fail;\r
+        }\r
+        else if (ON_STR_END(s)) {\r
+          if (IS_MBC_WORD_ASCII_MODE(encode, sprev, end, mode))\r
+            goto fail;\r
+        }\r
+        else {\r
+          if (IS_MBC_WORD_ASCII_MODE(encode, s, end, mode)\r
+              != IS_MBC_WORD_ASCII_MODE(encode, sprev, end, mode))\r
+            goto fail;\r
+        }\r
       }\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
 #ifdef USE_WORD_BEGIN_END\r
-    case OP_WORD_BEGIN:  MOP_IN(OP_WORD_BEGIN);\r
-      if (DATA_ENSURE_CHECK1 && ONIGENC_IS_MBC_WORD(encode, s, end)) {\r
-       if (ON_STR_BEGIN(s) || !ONIGENC_IS_MBC_WORD(encode, sprev, end)) {\r
-         MOP_OUT;\r
-         continue;\r
-       }\r
+    case OP_WORD_BEGIN:  SOP_IN(OP_WORD_BEGIN);\r
+      {\r
+        ModeType mode;\r
+        GET_MODE_INC(mode, p); /* ascii_mode */\r
+\r
+        if (DATA_ENSURE_CHECK1 && IS_MBC_WORD_ASCII_MODE(encode, s, end, mode)) {\r
+          if (ON_STR_BEGIN(s) || !IS_MBC_WORD_ASCII_MODE(encode, sprev, end, mode)) {\r
+            SOP_OUT;\r
+            continue;\r
+          }\r
+        }\r
       }\r
       goto fail;\r
       break;\r
 \r
-    case OP_WORD_END:  MOP_IN(OP_WORD_END);\r
-      if (!ON_STR_BEGIN(s) && ONIGENC_IS_MBC_WORD(encode, sprev, end)) {\r
-       if (ON_STR_END(s) || !ONIGENC_IS_MBC_WORD(encode, s, end)) {\r
-         MOP_OUT;\r
-         continue;\r
-       }\r
+    case OP_WORD_END:  SOP_IN(OP_WORD_END);\r
+      {\r
+        ModeType mode;\r
+        GET_MODE_INC(mode, p); /* ascii_mode */\r
+\r
+        if (!ON_STR_BEGIN(s) && IS_MBC_WORD_ASCII_MODE(encode, sprev, end, mode)) {\r
+          if (ON_STR_END(s) || ! IS_MBC_WORD_ASCII_MODE(encode, s, end, mode)) {\r
+            SOP_OUT;\r
+            continue;\r
+          }\r
+        }\r
       }\r
       goto fail;\r
       break;\r
 #endif\r
 \r
-    case OP_BEGIN_BUF:  MOP_IN(OP_BEGIN_BUF);\r
+    case OP_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:\r
+      SOP_IN(OP_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY);\r
+      if (onigenc_egcb_is_break_position(encode, s, sprev, str, end)) {\r
+        SOP_OUT;\r
+        continue;\r
+      }\r
+      goto fail;\r
+      break;\r
+\r
+    case OP_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:\r
+      SOP_IN(OP_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY);\r
+      if (onigenc_egcb_is_break_position(encode, s, sprev, str, end))\r
+        goto fail;\r
+\r
+      SOP_OUT;\r
+      continue;\r
+      break;\r
+\r
+    case OP_BEGIN_BUF:  SOP_IN(OP_BEGIN_BUF);\r
       if (! ON_STR_BEGIN(s)) goto fail;\r
 \r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_END_BUF:  MOP_IN(OP_END_BUF);\r
+    case OP_END_BUF:  SOP_IN(OP_END_BUF);\r
       if (! ON_STR_END(s)) goto fail;\r
 \r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_BEGIN_LINE:  MOP_IN(OP_BEGIN_LINE);\r
+    case OP_BEGIN_LINE:  SOP_IN(OP_BEGIN_LINE);\r
       if (ON_STR_BEGIN(s)) {\r
-       if (IS_NOTBOL(msa->options)) goto fail;\r
-       MOP_OUT;\r
-       continue;\r
+        if (IS_NOTBOL(msa->options)) goto fail;\r
+        SOP_OUT;\r
+        continue;\r
       }\r
       else if (ONIGENC_IS_MBC_NEWLINE(encode, sprev, end) && !ON_STR_END(s)) {\r
-       MOP_OUT;\r
-       continue;\r
+        SOP_OUT;\r
+        continue;\r
       }\r
       goto fail;\r
       break;\r
 \r
-    case OP_END_LINE:  MOP_IN(OP_END_LINE);\r
+    case OP_END_LINE:  SOP_IN(OP_END_LINE);\r
       if (ON_STR_END(s)) {\r
 #ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE\r
-       if (IS_EMPTY_STR || !ONIGENC_IS_MBC_NEWLINE(encode, sprev, end)) {\r
+        if (IS_EMPTY_STR || !ONIGENC_IS_MBC_NEWLINE(encode, sprev, end)) {\r
 #endif\r
-         if (IS_NOTEOL(msa->options)) goto fail;\r
-         MOP_OUT;\r
-         continue;\r
+          if (IS_NOTEOL(msa->options)) goto fail;\r
+          SOP_OUT;\r
+          continue;\r
 #ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE\r
-       }\r
+        }\r
 #endif\r
       }\r
       else if (ONIGENC_IS_MBC_NEWLINE(encode, s, end)) {\r
-       MOP_OUT;\r
-       continue;\r
+        SOP_OUT;\r
+        continue;\r
       }\r
 #ifdef USE_CRNL_AS_LINE_TERMINATOR\r
       else if (ONIGENC_IS_MBC_CRNL(encode, s, end)) {\r
-       MOP_OUT;\r
-       continue;\r
+        SOP_OUT;\r
+        continue;\r
       }\r
 #endif\r
       goto fail;\r
       break;\r
 \r
-    case OP_SEMI_END_BUF:  MOP_IN(OP_SEMI_END_BUF);\r
+    case OP_SEMI_END_BUF:  SOP_IN(OP_SEMI_END_BUF);\r
       if (ON_STR_END(s)) {\r
 #ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE\r
-       if (IS_EMPTY_STR || !ONIGENC_IS_MBC_NEWLINE(encode, sprev, end)) {\r
+        if (IS_EMPTY_STR || !ONIGENC_IS_MBC_NEWLINE(encode, sprev, end)) {\r
 #endif\r
-         if (IS_NOTEOL(msa->options)) goto fail;\r
-         MOP_OUT;\r
-         continue;\r
+          if (IS_NOTEOL(msa->options)) goto fail;\r
+          SOP_OUT;\r
+          continue;\r
 #ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE\r
-       }\r
+        }\r
 #endif\r
       }\r
       else if (ONIGENC_IS_MBC_NEWLINE(encode, s, end) &&\r
-              ON_STR_END(s + enclen(encode, s))) {\r
-       MOP_OUT;\r
-       continue;\r
+               ON_STR_END(s + enclen(encode, s))) {\r
+        SOP_OUT;\r
+        continue;\r
       }\r
 #ifdef USE_CRNL_AS_LINE_TERMINATOR\r
       else if (ONIGENC_IS_MBC_CRNL(encode, s, end)) {\r
         UChar* ss = s + enclen(encode, s);\r
-       ss += enclen(encode, ss);\r
+        ss += enclen(encode, ss);\r
         if (ON_STR_END(ss)) {\r
-          MOP_OUT;\r
+          SOP_OUT;\r
           continue;\r
         }\r
       }\r
@@ -2071,477 +3206,464 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       goto fail;\r
       break;\r
 \r
-    case OP_BEGIN_POSITION:  MOP_IN(OP_BEGIN_POSITION);\r
+    case OP_BEGIN_POSITION:  SOP_IN(OP_BEGIN_POSITION);\r
       if (s != msa->start)\r
-       goto fail;\r
+        goto fail;\r
 \r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_MEMORY_START_PUSH:  MOP_IN(OP_MEMORY_START_PUSH);\r
+    case OP_MEMORY_START_PUSH:  SOP_IN(OP_MEMORY_START_PUSH);\r
       GET_MEMNUM_INC(mem, p);\r
       STACK_PUSH_MEM_START(mem, s);\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_MEMORY_START:  MOP_IN(OP_MEMORY_START);\r
+    case OP_MEMORY_START:  SOP_IN(OP_MEMORY_START);\r
       GET_MEMNUM_INC(mem, p);\r
-      mem_start_stk[mem] = (OnigStackIndex )(UINTN)((void* )s);\r
-      MOP_OUT;\r
+      mem_start_stk[mem] = (StackIndex )((void* )s);\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_MEMORY_END_PUSH:  MOP_IN(OP_MEMORY_END_PUSH);\r
+    case OP_MEMORY_END_PUSH:  SOP_IN(OP_MEMORY_END_PUSH);\r
       GET_MEMNUM_INC(mem, p);\r
       STACK_PUSH_MEM_END(mem, s);\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_MEMORY_END:  MOP_IN(OP_MEMORY_END);\r
+    case OP_MEMORY_END:  SOP_IN(OP_MEMORY_END);\r
       GET_MEMNUM_INC(mem, p);\r
-      mem_end_stk[mem] = (OnigStackIndex )(UINTN)((void* )s);\r
-      MOP_OUT;\r
+      mem_end_stk[mem] = (StackIndex )((void* )s);\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-#ifdef USE_SUBEXP_CALL\r
-    case OP_MEMORY_END_PUSH_REC:  MOP_IN(OP_MEMORY_END_PUSH_REC);\r
+#ifdef USE_CALL\r
+    case OP_MEMORY_END_PUSH_REC:  SOP_IN(OP_MEMORY_END_PUSH_REC);\r
       GET_MEMNUM_INC(mem, p);\r
       STACK_GET_MEM_START(mem, stkp); /* should be before push mem-end. */\r
       STACK_PUSH_MEM_END(mem, s);\r
       mem_start_stk[mem] = GET_STACK_INDEX(stkp);\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_MEMORY_END_REC:  MOP_IN(OP_MEMORY_END_REC);\r
+    case OP_MEMORY_END_REC:  SOP_IN(OP_MEMORY_END_REC);\r
       GET_MEMNUM_INC(mem, p);\r
-      mem_end_stk[mem] = (OnigStackIndex )(UINTN)((void* )s);\r
+      mem_end_stk[mem] = (StackIndex )((void* )s);\r
       STACK_GET_MEM_START(mem, stkp);\r
 \r
-      if (BIT_STATUS_AT(reg->bt_mem_start, mem))\r
-       mem_start_stk[mem] = GET_STACK_INDEX(stkp);\r
+      if (MEM_STATUS_AT(reg->bt_mem_start, mem))\r
+        mem_start_stk[mem] = GET_STACK_INDEX(stkp);\r
       else\r
-       mem_start_stk[mem] = (OnigStackIndex )(UINTN)((void* )stkp->u.mem.pstr);\r
+        mem_start_stk[mem] = (StackIndex )((void* )stkp->u.mem.pstr);\r
 \r
       STACK_PUSH_MEM_END_MARK(mem);\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 #endif\r
 \r
-    case OP_BACKREF1:  MOP_IN(OP_BACKREF1);\r
+    case OP_BACKREF1:  SOP_IN(OP_BACKREF1);\r
       mem = 1;\r
       goto backref;\r
       break;\r
 \r
-    case OP_BACKREF2:  MOP_IN(OP_BACKREF2);\r
+    case OP_BACKREF2:  SOP_IN(OP_BACKREF2);\r
       mem = 2;\r
       goto backref;\r
       break;\r
 \r
-    case OP_BACKREFN:  MOP_IN(OP_BACKREFN);\r
+    case OP_BACKREF_N:  SOP_IN(OP_BACKREF_N);\r
       GET_MEMNUM_INC(mem, p);\r
     backref:\r
       {\r
-       int len;\r
-       UChar *pstart, *pend;\r
+        int len;\r
+        UChar *pstart, *pend;\r
 \r
-       /* if you want to remove following line, \r
-          you should check in parse and compile time. */\r
-       if (mem > num_mem) goto fail;\r
-       if (mem_end_stk[mem]   == INVALID_STACK_INDEX) goto fail;\r
-       if (mem_start_stk[mem] == INVALID_STACK_INDEX) goto fail;\r
+        if (mem_end_stk[mem]   == INVALID_STACK_INDEX) goto fail;\r
+        if (mem_start_stk[mem] == INVALID_STACK_INDEX) goto fail;\r
 \r
-       if (BIT_STATUS_AT(reg->bt_mem_start, mem))\r
-         pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr;\r
-       else\r
-         pstart = (UChar* )((void* )(UINTN)mem_start_stk[mem]);\r
+        if (MEM_STATUS_AT(reg->bt_mem_start, mem))\r
+          pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr;\r
+        else\r
+          pstart = (UChar* )((void* )mem_start_stk[mem]);\r
 \r
-       pend = (BIT_STATUS_AT(reg->bt_mem_end, mem)\r
-               ? STACK_AT(mem_end_stk[mem])->u.mem.pstr\r
-               : (UChar* )((void* )(UINTN)mem_end_stk[mem]));\r
-       n = (int)(pend - pstart);\r
-       DATA_ENSURE(n);\r
-       sprev = s;\r
-       STRING_CMP(pstart, s, n);\r
-       while (sprev + (len = enclen(encode, sprev)) < s)\r
-         sprev += len;\r
+        pend = (MEM_STATUS_AT(reg->bt_mem_end, mem)\r
+                ? STACK_AT(mem_end_stk[mem])->u.mem.pstr\r
+                : (UChar* )((void* )mem_end_stk[mem]));\r
+        n = (int )(pend - pstart);\r
+        DATA_ENSURE(n);\r
+        sprev = s;\r
+        STRING_CMP(pstart, s, n);\r
+        while (sprev + (len = enclen(encode, sprev)) < s)\r
+          sprev += len;\r
 \r
-       MOP_OUT;\r
-       continue;\r
+        SOP_OUT;\r
+        continue;\r
       }\r
       break;\r
 \r
-    case OP_BACKREFN_IC:  MOP_IN(OP_BACKREFN_IC);\r
+    case OP_BACKREF_N_IC:  SOP_IN(OP_BACKREF_N_IC);\r
       GET_MEMNUM_INC(mem, p);\r
       {\r
-       int len;\r
-       UChar *pstart, *pend;\r
+        int len;\r
+        UChar *pstart, *pend;\r
 \r
-       /* if you want to remove following line, \r
-          you should check in parse and compile time. */\r
-       if (mem > num_mem) goto fail;\r
-       if (mem_end_stk[mem]   == INVALID_STACK_INDEX) goto fail;\r
-       if (mem_start_stk[mem] == INVALID_STACK_INDEX) goto fail;\r
+        if (mem_end_stk[mem]   == INVALID_STACK_INDEX) goto fail;\r
+        if (mem_start_stk[mem] == INVALID_STACK_INDEX) goto fail;\r
 \r
-       if (BIT_STATUS_AT(reg->bt_mem_start, mem))\r
-         pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr;\r
-       else\r
-         pstart = (UChar* )((void* )(UINTN)mem_start_stk[mem]);\r
+        if (MEM_STATUS_AT(reg->bt_mem_start, mem))\r
+          pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr;\r
+        else\r
+          pstart = (UChar* )((void* )mem_start_stk[mem]);\r
 \r
-       pend = (BIT_STATUS_AT(reg->bt_mem_end, mem)\r
-               ? STACK_AT(mem_end_stk[mem])->u.mem.pstr\r
-               : (UChar* )((void* )(UINTN)mem_end_stk[mem]));\r
-       n = (int)(pend - pstart);\r
-       DATA_ENSURE(n);\r
-       sprev = s;\r
-       STRING_CMP_IC(case_fold_flag, pstart, &s, n);\r
-       while (sprev + (len = enclen(encode, sprev)) < s)\r
-         sprev += len;\r
+        pend = (MEM_STATUS_AT(reg->bt_mem_end, mem)\r
+                ? STACK_AT(mem_end_stk[mem])->u.mem.pstr\r
+                : (UChar* )((void* )mem_end_stk[mem]));\r
+        n = (int )(pend - pstart);\r
+        DATA_ENSURE(n);\r
+        sprev = s;\r
+        STRING_CMP_IC(case_fold_flag, pstart, &s, n);\r
+        while (sprev + (len = enclen(encode, sprev)) < s)\r
+          sprev += len;\r
 \r
-       MOP_OUT;\r
-       continue;\r
+        SOP_OUT;\r
+        continue;\r
       }\r
       break;\r
 \r
-    case OP_BACKREF_MULTI:  MOP_IN(OP_BACKREF_MULTI);\r
+    case OP_BACKREF_MULTI:  SOP_IN(OP_BACKREF_MULTI);\r
       {\r
-       int len, is_fail;\r
-       UChar *pstart, *pend, *swork;\r
-\r
-       GET_LENGTH_INC(tlen, p);\r
-       for (i = 0; i < tlen; i++) {\r
-         GET_MEMNUM_INC(mem, p);\r
-\r
-         if (mem_end_stk[mem]   == INVALID_STACK_INDEX) continue;\r
-         if (mem_start_stk[mem] == INVALID_STACK_INDEX) continue;\r
-\r
-         if (BIT_STATUS_AT(reg->bt_mem_start, mem))\r
-           pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr;\r
-         else\r
-           pstart = (UChar* )((void* )(UINTN)mem_start_stk[mem]);\r
-\r
-         pend = (BIT_STATUS_AT(reg->bt_mem_end, mem)\r
-                 ? STACK_AT(mem_end_stk[mem])->u.mem.pstr\r
-                 : (UChar* )((void* )(UINTN)mem_end_stk[mem]));\r
-         n = (int)(pend - pstart);\r
-         DATA_ENSURE(n);\r
-         sprev = s;\r
-         swork = s;\r
-         STRING_CMP_VALUE(pstart, swork, n, is_fail);\r
-         if (is_fail) continue;\r
-         s = swork;\r
-         while (sprev + (len = enclen(encode, sprev)) < s)\r
-           sprev += len;\r
-\r
-         p += (SIZE_MEMNUM * (tlen - i - 1));\r
-         break; /* success */\r
-       }\r
-       if (i == tlen) goto fail;\r
-       MOP_OUT;\r
-       continue;\r
-      }\r
-      break;\r
-\r
-    case OP_BACKREF_MULTI_IC:  MOP_IN(OP_BACKREF_MULTI_IC);\r
+        int len, is_fail;\r
+        UChar *pstart, *pend, *swork;\r
+\r
+        GET_LENGTH_INC(tlen, p);\r
+        for (i = 0; i < tlen; i++) {\r
+          GET_MEMNUM_INC(mem, p);\r
+\r
+          if (mem_end_stk[mem]   == INVALID_STACK_INDEX) continue;\r
+          if (mem_start_stk[mem] == INVALID_STACK_INDEX) continue;\r
+\r
+          if (MEM_STATUS_AT(reg->bt_mem_start, mem))\r
+            pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr;\r
+          else\r
+            pstart = (UChar* )((void* )mem_start_stk[mem]);\r
+\r
+          pend = (MEM_STATUS_AT(reg->bt_mem_end, mem)\r
+                  ? STACK_AT(mem_end_stk[mem])->u.mem.pstr\r
+                  : (UChar* )((void* )mem_end_stk[mem]));\r
+          n = (int )(pend - pstart);\r
+          DATA_ENSURE(n);\r
+          sprev = s;\r
+          swork = s;\r
+          STRING_CMP_VALUE(pstart, swork, n, is_fail);\r
+          if (is_fail) continue;\r
+          s = swork;\r
+          while (sprev + (len = enclen(encode, sprev)) < s)\r
+            sprev += len;\r
+\r
+          p += (SIZE_MEMNUM * (tlen - i - 1));\r
+          break; /* success */\r
+        }\r
+        if (i == tlen) goto fail;\r
+        SOP_OUT;\r
+        continue;\r
+      }\r
+      break;\r
+\r
+    case OP_BACKREF_MULTI_IC:  SOP_IN(OP_BACKREF_MULTI_IC);\r
       {\r
-       int len, is_fail;\r
-       UChar *pstart, *pend, *swork;\r
-\r
-       GET_LENGTH_INC(tlen, p);\r
-       for (i = 0; i < tlen; i++) {\r
-         GET_MEMNUM_INC(mem, p);\r
-\r
-         if (mem_end_stk[mem]   == INVALID_STACK_INDEX) continue;\r
-         if (mem_start_stk[mem] == INVALID_STACK_INDEX) continue;\r
-\r
-         if (BIT_STATUS_AT(reg->bt_mem_start, mem))\r
-           pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr;\r
-         else\r
-           pstart = (UChar* )((void* )(UINTN)mem_start_stk[mem]);\r
-\r
-         pend = (BIT_STATUS_AT(reg->bt_mem_end, mem)\r
-                 ? STACK_AT(mem_end_stk[mem])->u.mem.pstr\r
-                 : (UChar* )((void* )(UINTN)mem_end_stk[mem]));\r
-         n = (int)(pend - pstart);\r
-         DATA_ENSURE(n);\r
-         sprev = s;\r
-         swork = s;\r
-         STRING_CMP_VALUE_IC(case_fold_flag, pstart, &swork, n, is_fail);\r
-         if (is_fail) continue;\r
-         s = swork;\r
-         while (sprev + (len = enclen(encode, sprev)) < s)\r
-           sprev += len;\r
-\r
-         p += (SIZE_MEMNUM * (tlen - i - 1));\r
-         break; /* success */\r
-       }\r
-       if (i == tlen) goto fail;\r
-       MOP_OUT;\r
-       continue;\r
+        int len, is_fail;\r
+        UChar *pstart, *pend, *swork;\r
+\r
+        GET_LENGTH_INC(tlen, p);\r
+        for (i = 0; i < tlen; i++) {\r
+          GET_MEMNUM_INC(mem, p);\r
+\r
+          if (mem_end_stk[mem]   == INVALID_STACK_INDEX) continue;\r
+          if (mem_start_stk[mem] == INVALID_STACK_INDEX) continue;\r
+\r
+          if (MEM_STATUS_AT(reg->bt_mem_start, mem))\r
+            pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr;\r
+          else\r
+            pstart = (UChar* )((void* )mem_start_stk[mem]);\r
+\r
+          pend = (MEM_STATUS_AT(reg->bt_mem_end, mem)\r
+                  ? STACK_AT(mem_end_stk[mem])->u.mem.pstr\r
+                  : (UChar* )((void* )mem_end_stk[mem]));\r
+          n = (int )(pend - pstart);\r
+          DATA_ENSURE(n);\r
+          sprev = s;\r
+          swork = s;\r
+          STRING_CMP_VALUE_IC(case_fold_flag, pstart, &swork, n, is_fail);\r
+          if (is_fail) continue;\r
+          s = swork;\r
+          while (sprev + (len = enclen(encode, sprev)) < s)\r
+            sprev += len;\r
+\r
+          p += (SIZE_MEMNUM * (tlen - i - 1));\r
+          break; /* success */\r
+        }\r
+        if (i == tlen) goto fail;\r
+        SOP_OUT;\r
+        continue;\r
       }\r
       break;\r
 \r
 #ifdef USE_BACKREF_WITH_LEVEL\r
     case OP_BACKREF_WITH_LEVEL:\r
       {\r
-       int len;\r
-       OnigOptionType ic;\r
-       LengthType level;\r
-\r
-       GET_OPTION_INC(ic,    p);\r
-       GET_LENGTH_INC(level, p);\r
-       GET_LENGTH_INC(tlen,  p);\r
+        int len;\r
+        OnigOptionType ic;\r
+        LengthType level;\r
 \r
-       sprev = s;\r
-       if (backref_match_at_nested_level(reg, stk, stk_base, ic\r
-                 , case_fold_flag, (int )level, (int )tlen, p, &s, end)) {\r
-         while (sprev + (len = enclen(encode, sprev)) < s)\r
-           sprev += len;\r
+        GET_OPTION_INC(ic,    p);\r
+        GET_LENGTH_INC(level, p);\r
+        GET_LENGTH_INC(tlen,  p);\r
 \r
-         p += (SIZE_MEMNUM * tlen);\r
-       }\r
-       else\r
-         goto fail;\r
+        sprev = s;\r
+        if (backref_match_at_nested_level(reg, stk, stk_base, ic\r
+                     , case_fold_flag, (int )level, (int )tlen, p, &s, end)) {\r
+          if (sprev < end) {\r
+            while (sprev + (len = enclen(encode, sprev)) < s)\r
+              sprev += len;\r
+          }\r
+          p += (SIZE_MEMNUM * tlen);\r
+        }\r
+        else\r
+          goto fail;\r
 \r
-       MOP_OUT;\r
-       continue;\r
+        SOP_OUT;\r
+        continue;\r
       }\r
-      \r
       break;\r
 #endif\r
 \r
-#if 0   /* no need: IS_DYNAMIC_OPTION() == 0 */\r
-    case OP_SET_OPTION_PUSH:  MOP_IN(OP_SET_OPTION_PUSH);\r
-      GET_OPTION_INC(option, p);\r
-      STACK_PUSH_ALT(p, s, sprev);\r
-      p += SIZE_OP_SET_OPTION + SIZE_OP_FAIL;\r
-      MOP_OUT;\r
-      continue;\r
+    case OP_BACKREF_CHECK:  SOP_IN(OP_BACKREF_CHECK);\r
+      {\r
+        GET_LENGTH_INC(tlen, p);\r
+        for (i = 0; i < tlen; i++) {\r
+          GET_MEMNUM_INC(mem, p);\r
+\r
+          if (mem_end_stk[mem]   == INVALID_STACK_INDEX) continue;\r
+          if (mem_start_stk[mem] == INVALID_STACK_INDEX) continue;\r
+\r
+          p += (SIZE_MEMNUM * (tlen - i - 1));\r
+          break; /* success */\r
+        }\r
+        if (i == tlen) goto fail;\r
+        SOP_OUT;\r
+        continue;\r
+      }\r
       break;\r
 \r
-    case OP_SET_OPTION:  MOP_IN(OP_SET_OPTION);\r
-      GET_OPTION_INC(option, p);\r
-      MOP_OUT;\r
-      continue;\r
+#ifdef USE_BACKREF_WITH_LEVEL\r
+    case OP_BACKREF_CHECK_WITH_LEVEL:\r
+      {\r
+        LengthType level;\r
+\r
+        GET_LENGTH_INC(level, p);\r
+        GET_LENGTH_INC(tlen,  p);\r
+\r
+        if (backref_check_at_nested_level(reg, stk, stk_base,\r
+                                          (int )level, (int )tlen, p) != 0) {\r
+          p += (SIZE_MEMNUM * tlen);\r
+        }\r
+        else\r
+          goto fail;\r
+\r
+        SOP_OUT;\r
+        continue;\r
+      }\r
       break;\r
 #endif\r
 \r
-    case OP_NULL_CHECK_START:  MOP_IN(OP_NULL_CHECK_START);\r
+    case OP_EMPTY_CHECK_START:  SOP_IN(OP_EMPTY_CHECK_START);\r
       GET_MEMNUM_INC(mem, p);    /* mem: null check id */\r
-      STACK_PUSH_NULL_CHECK_START(mem, s);\r
-      MOP_OUT;\r
+      STACK_PUSH_EMPTY_CHECK_START(mem, s);\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_NULL_CHECK_END:  MOP_IN(OP_NULL_CHECK_END);\r
+    case OP_EMPTY_CHECK_END:  SOP_IN(OP_EMPTY_CHECK_END);\r
       {\r
-       int isnull;\r
+        int is_empty;\r
 \r
-       GET_MEMNUM_INC(mem, p); /* mem: null check id */\r
-       STACK_NULL_CHECK(isnull, mem, s);\r
-       if (isnull) {\r
+        GET_MEMNUM_INC(mem, p); /* mem: null check id */\r
+        STACK_EMPTY_CHECK(is_empty, mem, s);\r
+        if (is_empty) {\r
 #ifdef ONIG_DEBUG_MATCH\r
-         fprintf(stderr, "NULL_CHECK_END: skip  id:%d, s:%d\n",\r
-                 (int )mem, (int )s);\r
-#endif\r
-       null_check_found:\r
-         /* empty loop founded, skip next instruction */\r
-         switch (*p++) {\r
-         case OP_JUMP:\r
-         case OP_PUSH:\r
-           p += SIZE_RELADDR;\r
-           break;\r
-         case OP_REPEAT_INC:\r
-         case OP_REPEAT_INC_NG:\r
-         case OP_REPEAT_INC_SG:\r
-         case OP_REPEAT_INC_NG_SG:\r
-           p += SIZE_MEMNUM;\r
-           break;\r
-         default:\r
-           goto unexpected_bytecode_error;\r
-           break;\r
-         }\r
-       }\r
-      }\r
-      MOP_OUT;\r
+          fprintf(stderr, "EMPTY_CHECK_END: skip  id:%d, s:%p\n", (int )mem, s);\r
+#endif\r
+        empty_check_found:\r
+          /* empty loop founded, skip next instruction */\r
+          switch (*p++) {\r
+          case OP_JUMP:\r
+          case OP_PUSH:\r
+            p += SIZE_RELADDR;\r
+            break;\r
+          case OP_REPEAT_INC:\r
+          case OP_REPEAT_INC_NG:\r
+          case OP_REPEAT_INC_SG:\r
+          case OP_REPEAT_INC_NG_SG:\r
+            p += SIZE_MEMNUM;\r
+            break;\r
+          default:\r
+            goto unexpected_bytecode_error;\r
+            break;\r
+          }\r
+        }\r
+      }\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-#ifdef USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT\r
-    case OP_NULL_CHECK_END_MEMST:  MOP_IN(OP_NULL_CHECK_END_MEMST);\r
+#ifdef USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT\r
+    case OP_EMPTY_CHECK_END_MEMST:  SOP_IN(OP_EMPTY_CHECK_END_MEMST);\r
       {\r
-       int isnull;\r
+        int is_empty;\r
 \r
-       GET_MEMNUM_INC(mem, p); /* mem: null check id */\r
-       STACK_NULL_CHECK_MEMST(isnull, mem, s, reg);\r
-       if (isnull) {\r
+        GET_MEMNUM_INC(mem, p); /* mem: null check id */\r
+        STACK_EMPTY_CHECK_MEM(is_empty, mem, s, reg);\r
+        if (is_empty) {\r
 #ifdef ONIG_DEBUG_MATCH\r
-         fprintf(stderr, "NULL_CHECK_END_MEMST: skip  id:%d, s:%d\n",\r
-                 (int )mem, (int )s);\r
+          fprintf(stderr, "EMPTY_CHECK_END_MEM: skip  id:%d, s:%p\n", (int)mem, s);\r
 #endif\r
-         if (isnull == -1) goto fail;\r
-         goto  null_check_found;\r
-       }\r
+          if (is_empty == -1) goto fail;\r
+          goto empty_check_found;\r
+        }\r
       }\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 #endif\r
 \r
-#ifdef USE_SUBEXP_CALL\r
-    case OP_NULL_CHECK_END_MEMST_PUSH:\r
-      MOP_IN(OP_NULL_CHECK_END_MEMST_PUSH);\r
+#ifdef USE_CALL\r
+    case OP_EMPTY_CHECK_END_MEMST_PUSH:\r
+      SOP_IN(OP_EMPTY_CHECK_END_MEMST_PUSH);\r
       {\r
-       int isnull;\r
+        int is_empty;\r
 \r
-       GET_MEMNUM_INC(mem, p); /* mem: null check id */\r
-#ifdef USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT\r
-       STACK_NULL_CHECK_MEMST_REC(isnull, mem, s, reg);\r
+        GET_MEMNUM_INC(mem, p); /* mem: null check id */\r
+#ifdef USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT\r
+        STACK_EMPTY_CHECK_MEM_REC(is_empty, mem, s, reg);\r
 #else\r
-       STACK_NULL_CHECK_REC(isnull, mem, s);\r
+        STACK_EMPTY_CHECK_REC(is_empty, mem, s);\r
 #endif\r
-       if (isnull) {\r
+        if (is_empty) {\r
 #ifdef ONIG_DEBUG_MATCH\r
-         fprintf(stderr, "NULL_CHECK_END_MEMST_PUSH: skip  id:%d, s:%d\n",\r
-                 (int )mem, (int )s);\r
+          fprintf(stderr, "EMPTY_CHECK_END_MEM_PUSH: skip  id:%d, s:%p\n",\r
+                  (int )mem, s);\r
 #endif\r
-         if (isnull == -1) goto fail;\r
-         goto  null_check_found;\r
-       }\r
-       else {\r
-         STACK_PUSH_NULL_CHECK_END(mem);\r
-       }\r
-      }\r
-      MOP_OUT;\r
-      continue;\r
+          if (is_empty == -1) goto fail;\r
+          goto empty_check_found;\r
+        }\r
+        else {\r
+          STACK_PUSH_EMPTY_CHECK_END(mem);\r
+        }\r
+      }\r
+      SOP_OUT;\r
+      continue;\r
       break;\r
 #endif\r
 \r
-    case OP_JUMP:  MOP_IN(OP_JUMP);\r
+    case OP_JUMP:  SOP_IN(OP_JUMP);\r
       GET_RELADDR_INC(addr, p);\r
       p += addr;\r
-      MOP_OUT;\r
-      CHECK_INTERRUPT_IN_MATCH_AT;\r
+      SOP_OUT;\r
+      CHECK_INTERRUPT_IN_MATCH;\r
       continue;\r
       break;\r
 \r
-    case OP_PUSH:  MOP_IN(OP_PUSH);\r
+    case OP_PUSH:  SOP_IN(OP_PUSH);\r
       GET_RELADDR_INC(addr, p);\r
       STACK_PUSH_ALT(p + addr, s, sprev);\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-    case OP_STATE_CHECK_PUSH:  MOP_IN(OP_STATE_CHECK_PUSH);\r
-      GET_STATE_CHECK_NUM_INC(mem, p);\r
-      STATE_CHECK_VAL(scv, mem);\r
-      if (scv) goto fail;\r
-\r
+    case OP_PUSH_SUPER:  SOP_IN(OP_PUSH_SUPER);\r
       GET_RELADDR_INC(addr, p);\r
-      STACK_PUSH_ALT_WITH_STATE_CHECK(p + addr, s, sprev, mem);\r
-      MOP_OUT;\r
-      continue;\r
-      break;\r
-\r
-    case OP_STATE_CHECK_PUSH_OR_JUMP:  MOP_IN(OP_STATE_CHECK_PUSH_OR_JUMP);\r
-      GET_STATE_CHECK_NUM_INC(mem, p);\r
-      GET_RELADDR_INC(addr, p);\r
-      STATE_CHECK_VAL(scv, mem);\r
-      if (scv) {\r
-       p += addr;\r
-      }\r
-      else {\r
-       STACK_PUSH_ALT_WITH_STATE_CHECK(p + addr, s, sprev, mem);\r
-      }\r
-      MOP_OUT;\r
+      STACK_PUSH_SUPER_ALT(p + addr, s, sprev);\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_STATE_CHECK:  MOP_IN(OP_STATE_CHECK);\r
-      GET_STATE_CHECK_NUM_INC(mem, p);\r
-      STATE_CHECK_VAL(scv, mem);\r
-      if (scv) goto fail;\r
-\r
-      STACK_PUSH_STATE_CHECK(s, mem);\r
-      MOP_OUT;\r
-      continue;\r
-      break;\r
-#endif /* USE_COMBINATION_EXPLOSION_CHECK */\r
-\r
-    case OP_POP:  MOP_IN(OP_POP);\r
+    case OP_POP_OUT:  SOP_IN(OP_POP_OUT);\r
       STACK_POP_ONE;\r
-      MOP_OUT;\r
+      /* for stop backtrack */\r
+      /* CHECK_RETRY_LIMIT_IN_MATCH; */\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_PUSH_OR_JUMP_EXACT1:  MOP_IN(OP_PUSH_OR_JUMP_EXACT1);\r
+    case OP_PUSH_OR_JUMP_EXACT1:  SOP_IN(OP_PUSH_OR_JUMP_EXACT1);\r
       GET_RELADDR_INC(addr, p);\r
       if (*p == *s && DATA_ENSURE_CHECK1) {\r
-       p++;\r
-       STACK_PUSH_ALT(p + addr, s, sprev);\r
-       MOP_OUT;\r
-       continue;\r
+        p++;\r
+        STACK_PUSH_ALT(p + addr, s, sprev);\r
+        SOP_OUT;\r
+        continue;\r
       }\r
       p += (addr + 1);\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_PUSH_IF_PEEK_NEXT:  MOP_IN(OP_PUSH_IF_PEEK_NEXT);\r
+    case OP_PUSH_IF_PEEK_NEXT:  SOP_IN(OP_PUSH_IF_PEEK_NEXT);\r
       GET_RELADDR_INC(addr, p);\r
       if (*p == *s) {\r
-       p++;\r
-       STACK_PUSH_ALT(p + addr, s, sprev);\r
-       MOP_OUT;\r
-       continue;\r
+        p++;\r
+        STACK_PUSH_ALT(p + addr, s, sprev);\r
+        SOP_OUT;\r
+        continue;\r
       }\r
       p++;\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_REPEAT:  MOP_IN(OP_REPEAT);\r
+    case OP_REPEAT:  SOP_IN(OP_REPEAT);\r
       {\r
-       GET_MEMNUM_INC(mem, p);    /* mem: OP_REPEAT ID */\r
-       GET_RELADDR_INC(addr, p);\r
+        GET_MEMNUM_INC(mem, p);    /* mem: OP_REPEAT ID */\r
+        GET_RELADDR_INC(addr, p);\r
 \r
-       STACK_ENSURE(1);\r
-       repeat_stk[mem] = GET_STACK_INDEX(stk);\r
-       STACK_PUSH_REPEAT(mem, p);\r
+        STACK_ENSURE(1);\r
+        repeat_stk[mem] = GET_STACK_INDEX(stk);\r
+        STACK_PUSH_REPEAT(mem, p);\r
 \r
-       if (reg->repeat_range[mem].lower == 0) {\r
-         STACK_PUSH_ALT(p + addr, s, sprev);\r
-       }\r
+        if (reg->repeat_range[mem].lower == 0) {\r
+          STACK_PUSH_ALT(p + addr, s, sprev);\r
+        }\r
       }\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_REPEAT_NG:  MOP_IN(OP_REPEAT_NG);\r
+    case OP_REPEAT_NG:  SOP_IN(OP_REPEAT_NG);\r
       {\r
-       GET_MEMNUM_INC(mem, p);    /* mem: OP_REPEAT ID */\r
-       GET_RELADDR_INC(addr, p);\r
+        GET_MEMNUM_INC(mem, p);    /* mem: OP_REPEAT ID */\r
+        GET_RELADDR_INC(addr, p);\r
 \r
-       STACK_ENSURE(1);\r
-       repeat_stk[mem] = GET_STACK_INDEX(stk);\r
-       STACK_PUSH_REPEAT(mem, p);\r
+        STACK_ENSURE(1);\r
+        repeat_stk[mem] = GET_STACK_INDEX(stk);\r
+        STACK_PUSH_REPEAT(mem, p);\r
 \r
-       if (reg->repeat_range[mem].lower == 0) {\r
-         STACK_PUSH_ALT(p, s, sprev);\r
-         p += addr;\r
-       }\r
+        if (reg->repeat_range[mem].lower == 0) {\r
+          STACK_PUSH_ALT(p, s, sprev);\r
+          p += addr;\r
+        }\r
       }\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_REPEAT_INC:  MOP_IN(OP_REPEAT_INC);\r
+    case OP_REPEAT_INC:  SOP_IN(OP_REPEAT_INC);\r
       GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */\r
       si = repeat_stk[mem];\r
       stkp = STACK_AT(si);\r
@@ -2559,19 +3681,19 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         p = stkp->u.repeat.pcode;\r
       }\r
       STACK_PUSH_REPEAT_INC(si);\r
-      MOP_OUT;\r
-      CHECK_INTERRUPT_IN_MATCH_AT;\r
+      SOP_OUT;\r
+      CHECK_INTERRUPT_IN_MATCH;\r
       continue;\r
       break;\r
 \r
-    case OP_REPEAT_INC_SG:  MOP_IN(OP_REPEAT_INC_SG);\r
+    case OP_REPEAT_INC_SG:  SOP_IN(OP_REPEAT_INC_SG);\r
       GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */\r
       STACK_GET_REPEAT(mem, stkp);\r
       si = GET_STACK_INDEX(stkp);\r
       goto repeat_inc;\r
       break;\r
 \r
-    case OP_REPEAT_INC_NG:  MOP_IN(OP_REPEAT_INC_NG);\r
+    case OP_REPEAT_INC_NG:  SOP_IN(OP_REPEAT_INC_NG);\r
       GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */\r
       si = repeat_stk[mem];\r
       stkp = STACK_AT(si);\r
@@ -2593,104 +3715,234 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       else if (stkp->u.repeat.count == reg->repeat_range[mem].upper) {\r
         STACK_PUSH_REPEAT_INC(si);\r
       }\r
-      MOP_OUT;\r
-      CHECK_INTERRUPT_IN_MATCH_AT;\r
+      SOP_OUT;\r
+      CHECK_INTERRUPT_IN_MATCH;\r
       continue;\r
       break;\r
 \r
-    case OP_REPEAT_INC_NG_SG:  MOP_IN(OP_REPEAT_INC_NG_SG);\r
+    case OP_REPEAT_INC_NG_SG:  SOP_IN(OP_REPEAT_INC_NG_SG);\r
       GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */\r
       STACK_GET_REPEAT(mem, stkp);\r
       si = GET_STACK_INDEX(stkp);\r
       goto repeat_inc_ng;\r
       break;\r
 \r
-    case OP_PUSH_POS:  MOP_IN(OP_PUSH_POS);\r
+    case OP_PREC_READ_START:  SOP_IN(OP_PREC_READ_START);\r
       STACK_PUSH_POS(s, sprev);\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_POP_POS:  MOP_IN(OP_POP_POS);\r
+    case OP_PREC_READ_END:  SOP_IN(OP_PREC_READ_END);\r
       {\r
-       STACK_POS_END(stkp);\r
-       s     = stkp->u.state.pstr;\r
-       sprev = stkp->u.state.pstr_prev;\r
+        STACK_EXEC_TO_VOID(stkp);\r
+        s     = stkp->u.state.pstr;\r
+        sprev = stkp->u.state.pstr_prev;\r
       }\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_PUSH_POS_NOT:  MOP_IN(OP_PUSH_POS_NOT);\r
+    case OP_PREC_READ_NOT_START:  SOP_IN(OP_PREC_READ_NOT_START);\r
       GET_RELADDR_INC(addr, p);\r
-      STACK_PUSH_POS_NOT(p + addr, s, sprev);\r
-      MOP_OUT;\r
+      STACK_PUSH_ALT_PREC_READ_NOT(p + addr, s, sprev);\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_FAIL_POS:  MOP_IN(OP_FAIL_POS);\r
-      STACK_POP_TIL_POS_NOT;\r
+    case OP_PREC_READ_NOT_END:  SOP_IN(OP_PREC_READ_NOT_END);\r
+      STACK_POP_TIL_ALT_PREC_READ_NOT;\r
       goto fail;\r
       break;\r
 \r
-    case OP_PUSH_STOP_BT:  MOP_IN(OP_PUSH_STOP_BT);\r
-      STACK_PUSH_STOP_BT;\r
-      MOP_OUT;\r
+    case OP_ATOMIC_START:  SOP_IN(OP_ATOMIC_START);\r
+      STACK_PUSH_TO_VOID_START;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_POP_STOP_BT:  MOP_IN(OP_POP_STOP_BT);\r
-      STACK_STOP_BT_END;\r
-      MOP_OUT;\r
+    case OP_ATOMIC_END:  SOP_IN(OP_ATOMIC_END);\r
+      STACK_EXEC_TO_VOID(stkp);\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_LOOK_BEHIND:  MOP_IN(OP_LOOK_BEHIND);\r
+    case OP_LOOK_BEHIND:  SOP_IN(OP_LOOK_BEHIND);\r
       GET_LENGTH_INC(tlen, p);\r
       s = (UChar* )ONIGENC_STEP_BACK(encode, str, s, (int )tlen);\r
       if (IS_NULL(s)) goto fail;\r
       sprev = (UChar* )onigenc_get_prev_char_head(encode, str, s);\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_PUSH_LOOK_BEHIND_NOT:  MOP_IN(OP_PUSH_LOOK_BEHIND_NOT);\r
+    case OP_LOOK_BEHIND_NOT_START:  SOP_IN(OP_LOOK_BEHIND_NOT_START);\r
       GET_RELADDR_INC(addr, p);\r
       GET_LENGTH_INC(tlen, p);\r
       q = (UChar* )ONIGENC_STEP_BACK(encode, str, s, (int )tlen);\r
       if (IS_NULL(q)) {\r
-       /* too short case -> success. ex. /(?<!XXX)a/.match("a")\r
-          If you want to change to fail, replace following line. */\r
-       p += addr;\r
-       /* goto fail; */\r
+        /* too short case -> success. ex. /(?<!XXX)a/.match("a")\r
+           If you want to change to fail, replace following line. */\r
+        p += addr;\r
+        /* goto fail; */\r
       }\r
       else {\r
-       STACK_PUSH_LOOK_BEHIND_NOT(p + addr, s, sprev);\r
-       s = q;\r
-       sprev = (UChar* )onigenc_get_prev_char_head(encode, str, s);\r
+        STACK_PUSH_ALT_LOOK_BEHIND_NOT(p + addr, s, sprev);\r
+        s = q;\r
+        sprev = (UChar* )onigenc_get_prev_char_head(encode, str, s);\r
       }\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_FAIL_LOOK_BEHIND_NOT:  MOP_IN(OP_FAIL_LOOK_BEHIND_NOT);\r
-      STACK_POP_TIL_LOOK_BEHIND_NOT;\r
+    case OP_LOOK_BEHIND_NOT_END:  SOP_IN(OP_LOOK_BEHIND_NOT_END);\r
+      STACK_POP_TIL_ALT_LOOK_BEHIND_NOT;\r
       goto fail;\r
       break;\r
 \r
-#ifdef USE_SUBEXP_CALL\r
-    case OP_CALL:  MOP_IN(OP_CALL);\r
+#ifdef USE_CALL\r
+    case OP_CALL:  SOP_IN(OP_CALL);\r
       GET_ABSADDR_INC(addr, p);\r
       STACK_PUSH_CALL_FRAME(p);\r
       p = reg->p + addr;\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
-    case OP_RETURN:  MOP_IN(OP_RETURN);\r
+    case OP_RETURN:  SOP_IN(OP_RETURN);\r
       STACK_RETURN(p);\r
       STACK_PUSH_RETURN;\r
-      MOP_OUT;\r
+      SOP_OUT;\r
+      continue;\r
+      break;\r
+#endif\r
+\r
+    case OP_PUSH_SAVE_VAL: SOP_IN(OP_PUSH_SAVE_VAL);\r
+      {\r
+        SaveType type;\r
+        GET_SAVE_TYPE_INC(type, p);\r
+        GET_MEMNUM_INC(mem, p); /* mem: save id */\r
+        switch ((enum SaveType )type) {\r
+        case SAVE_KEEP:\r
+          STACK_PUSH_SAVE_VAL(mem, type, s);\r
+          break;\r
+\r
+        case SAVE_S:\r
+          STACK_PUSH_SAVE_VAL_WITH_SPREV(mem, type, s);\r
+          break;\r
+\r
+        case SAVE_RIGHT_RANGE:\r
+          STACK_PUSH_SAVE_VAL(mem, SAVE_RIGHT_RANGE, right_range);\r
+          break;\r
+        }\r
+      }\r
+      SOP_OUT;\r
+      continue;\r
+      break;\r
+\r
+    case OP_UPDATE_VAR: SOP_IN(OP_UPDATE_VAR);\r
+      {\r
+        UpdateVarType type;\r
+        enum SaveType save_type;\r
+\r
+        GET_UPDATE_VAR_TYPE_INC(type, p);\r
+        GET_MEMNUM_INC(mem, p); /* mem: save id */\r
+        switch ((enum UpdateVarType )type) {\r
+        case UPDATE_VAR_KEEP_FROM_STACK_LAST:\r
+          STACK_GET_SAVE_VAL_TYPE_LAST(SAVE_KEEP, keep);\r
+          break;\r
+        case UPDATE_VAR_S_FROM_STACK:\r
+          STACK_GET_SAVE_VAL_TYPE_LAST_ID_WITH_SPREV(SAVE_S, mem, s);\r
+          break;\r
+        case UPDATE_VAR_RIGHT_RANGE_FROM_S_STACK:\r
+          save_type = SAVE_S;\r
+          goto get_save_val_type_last_id;\r
+          break;\r
+        case UPDATE_VAR_RIGHT_RANGE_FROM_STACK:\r
+          save_type = SAVE_RIGHT_RANGE;\r
+        get_save_val_type_last_id:\r
+          STACK_GET_SAVE_VAL_TYPE_LAST_ID(save_type, mem, right_range);\r
+          break;\r
+        case UPDATE_VAR_RIGHT_RANGE_INIT:\r
+          INIT_RIGHT_RANGE;\r
+          break;\r
+        }\r
+      }\r
+      SOP_OUT;\r
+      continue;\r
+      break;\r
+\r
+#ifdef USE_CALLOUT\r
+    case OP_CALLOUT_CONTENTS: SOP_IN(OP_CALLOUT_CONTENTS);\r
+      of = ONIG_CALLOUT_OF_CONTENTS;\r
+      goto callout_common_entry;\r
+\r
+      SOP_OUT;\r
+      continue;\r
+      break;\r
+\r
+    case OP_CALLOUT_NAME: SOP_IN(OP_CALLOUT_NAME);\r
+      {\r
+        int call_result;\r
+        int name_id;\r
+        int num;\r
+        int in;\r
+        CalloutListEntry* e;\r
+        OnigCalloutFunc func;\r
+        OnigCalloutArgs args;\r
+\r
+        of = ONIG_CALLOUT_OF_NAME;\r
+        GET_MEMNUM_INC(name_id, p);\r
+\r
+      callout_common_entry:\r
+        GET_MEMNUM_INC(num, p);\r
+        e = onig_reg_callout_list_at(reg, num);\r
+        in = e->in;\r
+        if (of == ONIG_CALLOUT_OF_NAME) {\r
+          func = onig_get_callout_start_func(reg, num);\r
+        }\r
+        else {\r
+          name_id = ONIG_NON_NAME_ID;\r
+          func = msa->mp->progress_callout_of_contents;\r
+        }\r
+\r
+        if (IS_NOT_NULL(func) && (in & ONIG_CALLOUT_IN_PROGRESS) != 0) {\r
+          CALLOUT_BODY(func, ONIG_CALLOUT_IN_PROGRESS, name_id,\r
+                       num, msa->mp->callout_user_data, args, call_result);\r
+          switch (call_result) {\r
+          case ONIG_CALLOUT_FAIL:\r
+            goto fail;\r
+            break;\r
+          case ONIG_CALLOUT_SUCCESS:\r
+            goto retraction_callout2;\r
+            break;\r
+          default: /* error code */\r
+            if (call_result > 0) {\r
+              call_result = ONIGERR_INVALID_ARGUMENT;\r
+            }\r
+            best_len = call_result;\r
+            goto finish;\r
+            break;\r
+          }\r
+        }\r
+        else {\r
+        retraction_callout2:\r
+          if ((in & ONIG_CALLOUT_IN_RETRACTION) != 0) {\r
+            if (of == ONIG_CALLOUT_OF_NAME) {\r
+              if (IS_NOT_NULL(func)) {\r
+                STACK_PUSH_CALLOUT_NAME(name_id, num, func);\r
+              }\r
+            }\r
+            else {\r
+              func = msa->mp->retraction_callout_of_contents;\r
+              if (IS_NOT_NULL(func)) {\r
+                STACK_PUSH_CALLOUT_CONTENTS(num, func);\r
+              }\r
+            }\r
+          }\r
+        }\r
+      }\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 #endif\r
@@ -2700,22 +3952,15 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       break;\r
 \r
     fail:\r
-      MOP_OUT;\r
+      SOP_OUT;\r
       /* fall */\r
-    case OP_FAIL:  MOP_IN(OP_FAIL);\r
+    case OP_FAIL:  SOP_IN(OP_FAIL);\r
       STACK_POP;\r
       p     = stk->u.state.pcode;\r
       s     = stk->u.state.pstr;\r
       sprev = stk->u.state.pstr_prev;\r
-\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-      if (stk->u.state.state_check != 0) {\r
-        stk->type = STK_STATE_CHECK_MARK;\r
-        stk++;\r
-      }\r
-#endif\r
-\r
-      MOP_OUT;\r
+      CHECK_RETRY_LIMIT_IN_MATCH;\r
+      SOP_OUT;\r
       continue;\r
       break;\r
 \r
@@ -2728,31 +3973,33 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
 \r
  finish:\r
   STACK_SAVE;\r
-  xfree(alloca_base);\r
   return best_len;\r
 \r
 #ifdef ONIG_DEBUG\r
  stack_error:\r
   STACK_SAVE;\r
-  xfree(alloca_base);\r
   return ONIGERR_STACK_BUG;\r
 #endif\r
 \r
  bytecode_error:\r
   STACK_SAVE;\r
-  xfree(alloca_base);\r
   return ONIGERR_UNDEFINED_BYTECODE;\r
 \r
  unexpected_bytecode_error:\r
   STACK_SAVE;\r
-  xfree(alloca_base);\r
   return ONIGERR_UNEXPECTED_BYTECODE;\r
+\r
+#ifdef USE_RETRY_LIMIT_IN_MATCH\r
+ retry_limit_in_match_over:\r
+  STACK_SAVE;\r
+  return ONIGERR_RETRY_LIMIT_IN_MATCH_OVER;\r
+#endif\r
 }\r
 \r
 \r
 static UChar*\r
 slow_search(OnigEncoding enc, UChar* target, UChar* target_end,\r
-           const UChar* text, const UChar* text_end, UChar* text_range)\r
+            const UChar* text, const UChar* text_end, UChar* text_range)\r
 {\r
   UChar *t, *p, *s, *end;\r
 \r
@@ -2768,12 +4015,12 @@ slow_search(OnigEncoding enc, UChar* target, UChar* target_end,
       p = s + 1;\r
       t = target + 1;\r
       while (t < target_end) {\r
-       if (*t != *p++)\r
-         break;\r
-       t++;\r
+        if (*t != *p++)\r
+          break;\r
+        t++;\r
       }\r
       if (t == target_end)\r
-       return s;\r
+        return s;\r
     }\r
     s += enclen(enc, s);\r
   }\r
@@ -2784,7 +4031,7 @@ slow_search(OnigEncoding enc, UChar* target, UChar* target_end,
 static int\r
 str_lower_case_match(OnigEncoding enc, int case_fold_flag,\r
                      const UChar* t, const UChar* tend,\r
-                    const UChar* p, const UChar* end)\r
+                     const UChar* p, const UChar* end)\r
 {\r
   int lowlen;\r
   UChar *q, lowbuf[ONIGENC_MBC_CASE_FOLD_MAXLEN];\r
@@ -2793,7 +4040,7 @@ str_lower_case_match(OnigEncoding enc, int case_fold_flag,
     lowlen = ONIGENC_MBC_CASE_FOLD(enc, case_fold_flag, &p, end, lowbuf);\r
     q = lowbuf;\r
     while (lowlen > 0) {\r
-      if (*t++ != *q++)        return 0;\r
+      if (*t++ != *q++) return 0;\r
       lowlen--;\r
     }\r
   }\r
@@ -2803,8 +4050,8 @@ str_lower_case_match(OnigEncoding enc, int case_fold_flag,
 \r
 static UChar*\r
 slow_search_ic(OnigEncoding enc, int case_fold_flag,\r
-              UChar* target, UChar* target_end,\r
-              const UChar* text, const UChar* text_end, UChar* text_range)\r
+               UChar* target, UChar* target_end,\r
+               const UChar* text, const UChar* text_end, UChar* text_range)\r
 {\r
   UChar *s, *end;\r
 \r
@@ -2817,7 +4064,7 @@ slow_search_ic(OnigEncoding enc, int case_fold_flag,
 \r
   while (s < end) {\r
     if (str_lower_case_match(enc, case_fold_flag, target, target_end,\r
-                            s, text_end))\r
+                             s, text_end))\r
       return s;\r
 \r
     s += enclen(enc, s);\r
@@ -2828,8 +4075,8 @@ slow_search_ic(OnigEncoding enc, int case_fold_flag,
 \r
 static UChar*\r
 slow_search_backward(OnigEncoding enc, UChar* target, UChar* target_end,\r
-                    const UChar* text, const UChar* adjust_text,\r
-                    const UChar* text_end, const UChar* text_start)\r
+                     const UChar* text, const UChar* adjust_text,\r
+                     const UChar* text_end, const UChar* text_start)\r
 {\r
   UChar *t, *p, *s;\r
 \r
@@ -2845,12 +4092,12 @@ slow_search_backward(OnigEncoding enc, UChar* target, UChar* target_end,
       p = s + 1;\r
       t = target + 1;\r
       while (t < target_end) {\r
-       if (*t != *p++)\r
-         break;\r
-       t++;\r
+        if (*t != *p++)\r
+          break;\r
+        t++;\r
       }\r
       if (t == target_end)\r
-       return s;\r
+        return s;\r
     }\r
     s = (UChar* )onigenc_get_prev_char_head(enc, adjust_text, s);\r
   }\r
@@ -2860,9 +4107,9 @@ slow_search_backward(OnigEncoding enc, UChar* target, UChar* target_end,
 \r
 static UChar*\r
 slow_search_backward_ic(OnigEncoding enc, int case_fold_flag,\r
-                       UChar* target, UChar* target_end,\r
-                       const UChar* text, const UChar* adjust_text,\r
-                       const UChar* text_end, const UChar* text_start)\r
+                        UChar* target, UChar* target_end,\r
+                        const UChar* text, const UChar* adjust_text,\r
+                        const UChar* text_end, const UChar* text_start)\r
 {\r
   UChar *s;\r
 \r
@@ -2886,20 +4133,20 @@ slow_search_backward_ic(OnigEncoding enc, int case_fold_flag,
 \r
 static UChar*\r
 bm_search_notrev(regex_t* reg, const UChar* target, const UChar* target_end,\r
-                const UChar* text, const UChar* text_end,\r
-                const UChar* text_range)\r
+                 const UChar* text, const UChar* text_end,\r
+                 const UChar* text_range)\r
 {\r
   const UChar *s, *se, *t, *p, *end;\r
   const UChar *tail;\r
   int skip, tlen1;\r
 \r
 #ifdef ONIG_DEBUG_SEARCH\r
-  fprintf(stderr, "bm_search_notrev: text: %d, text_end: %d, text_range: %d\n",\r
-         (int )text, (int )text_end, (int )text_range);\r
+  fprintf(stderr, "bm_search_notrev: text: %p, text_end: %p, text_range: %p\n",\r
+          text, text_end, text_range);\r
 #endif\r
 \r
   tail = target_end - 1;\r
-  tlen1 = (int)(tail - target);\r
+  tlen1 = (int )(tail - target);\r
   end = text_range;\r
   if (end + tlen1 > text_end)\r
     end = text_end - tlen1;\r
@@ -2911,8 +4158,8 @@ bm_search_notrev(regex_t* reg, const UChar* target, const UChar* target_end,
       p = se = s + tlen1;\r
       t = tail;\r
       while (*p == *t) {\r
-       if (t == target) return (UChar* )s;\r
-       p--; t--;\r
+        if (t == target) return (UChar* )s;\r
+        p--; t--;\r
       }\r
       skip = reg->map[*se];\r
       t = s;\r
@@ -2926,8 +4173,8 @@ bm_search_notrev(regex_t* reg, const UChar* target, const UChar* target_end,
       p = se = s + tlen1;\r
       t = tail;\r
       while (*p == *t) {\r
-       if (t == target) return (UChar* )s;\r
-       p--; t--;\r
+        if (t == target) return (UChar* )s;\r
+        p--; t--;\r
       }\r
       skip = reg->int_map[*se];\r
       t = s;\r
@@ -2942,7 +4189,7 @@ bm_search_notrev(regex_t* reg, const UChar* target, const UChar* target_end,
 \r
 static UChar*\r
 bm_search(regex_t* reg, const UChar* target, const UChar* target_end,\r
-         const UChar* text, const UChar* text_end, const UChar* text_range)\r
+          const UChar* text, const UChar* text_end, const UChar* text_range)\r
 {\r
   const UChar *s, *t, *p, *end;\r
   const UChar *tail;\r
@@ -2958,8 +4205,8 @@ bm_search(regex_t* reg, const UChar* target, const UChar* target_end,
       p = s;\r
       t = tail;\r
       while (*p == *t) {\r
-       if (t == target) return (UChar* )p;\r
-       p--; t--;\r
+        if (t == target) return (UChar* )p;\r
+        p--; t--;\r
       }\r
       s += reg->map[*s];\r
     }\r
@@ -2969,8 +4216,8 @@ bm_search(regex_t* reg, const UChar* target, const UChar* target_end,
       p = s;\r
       t = tail;\r
       while (*p == *t) {\r
-       if (t == target) return (UChar* )p;\r
-       p--; t--;\r
+        if (t == target) return (UChar* )p;\r
+        p--; t--;\r
       }\r
       s += reg->int_map[*s];\r
     }\r
@@ -2978,10 +4225,9 @@ bm_search(regex_t* reg, const UChar* target, const UChar* target_end,
   return (UChar* )NULL;\r
 }\r
 \r
+#ifdef USE_INT_MAP_BACKWARD\r
 static int\r
-set_bm_backward_skip(UChar* s, UChar* end, OnigEncoding enc ARG_UNUSED,\r
-                    int** skip)\r
-                    \r
+set_bm_backward_skip(UChar* s, UChar* end, OnigEncoding enc ARG_UNUSED, int** skip)\r
 {\r
   int i, len;\r
 \r
@@ -2990,7 +4236,7 @@ set_bm_backward_skip(UChar* s, UChar* end, OnigEncoding enc ARG_UNUSED,
     if (IS_NULL(*skip)) return ONIGERR_MEMORY;\r
   }\r
 \r
-  len = (int)(end - s);\r
+  len = end - s;\r
   for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)\r
     (*skip)[i] = len;\r
 \r
@@ -3002,8 +4248,8 @@ set_bm_backward_skip(UChar* s, UChar* end, OnigEncoding enc ARG_UNUSED,
 \r
 static UChar*\r
 bm_search_backward(regex_t* reg, const UChar* target, const UChar* target_end,\r
-                  const UChar* text, const UChar* adjust_text,\r
-                  const UChar* text_end, const UChar* text_start)\r
+                   const UChar* text, const UChar* adjust_text,\r
+                   const UChar* text_end, const UChar* text_start)\r
 {\r
   const UChar *s, *t, *p;\r
 \r
@@ -3028,10 +4274,11 @@ bm_search_backward(regex_t* reg, const UChar* target, const UChar* target_end,
 \r
   return (UChar* )NULL;\r
 }\r
+#endif\r
 \r
 static UChar*\r
 map_search(OnigEncoding enc, UChar map[],\r
-          const UChar* text, const UChar* text_range)\r
+           const UChar* text, const UChar* text_range)\r
 {\r
   const UChar *s = text;\r
 \r
@@ -3045,8 +4292,8 @@ map_search(OnigEncoding enc, UChar map[],
 \r
 static UChar*\r
 map_search_backward(OnigEncoding enc, UChar map[],\r
-                   const UChar* text, const UChar* adjust_text,\r
-                   const UChar* text_start)\r
+                    const UChar* text, const UChar* adjust_text,\r
+                    const UChar* text_start)\r
 {\r
   const UChar *s = text_start;\r
 \r
@@ -3057,48 +4304,30 @@ map_search_backward(OnigEncoding enc, UChar map[],
   }\r
   return (UChar* )NULL;\r
 }\r
+extern int\r
+onig_match(regex_t* reg, const UChar* str, const UChar* end, const UChar* at,\r
+           OnigRegion* region, OnigOptionType option)\r
+{\r
+  int r;\r
+  OnigMatchParam mp;\r
+\r
+  onig_initialize_match_param(&mp);\r
+  r = onig_match_with_param(reg, str, end, at, region, option, &mp);\r
+  onig_free_match_param_content(&mp);\r
+  return r;\r
+}\r
 \r
 extern int\r
-onig_match(regex_t* reg, const UChar* str, const UChar* end, const UChar* at, OnigRegion* region,\r
-           OnigOptionType option)\r
+onig_match_with_param(regex_t* reg, const UChar* str, const UChar* end,\r
+                      const UChar* at, OnigRegion* region, OnigOptionType option,\r
+                      OnigMatchParam* mp)\r
 {\r
   int r;\r
   UChar *prev;\r
-  OnigMatchArg msa;\r
-\r
-#if defined(USE_RECOMPILE_API) && defined(USE_MULTI_THREAD_SYSTEM)\r
- start:\r
-  THREAD_ATOMIC_START;\r
-  if (ONIG_STATE(reg) >= ONIG_STATE_NORMAL) {\r
-    ONIG_STATE_INC(reg);\r
-    if (IS_NOT_NULL(reg->chain) && ONIG_STATE(reg) == ONIG_STATE_NORMAL) {\r
-      onig_chain_reduce(reg);\r
-      ONIG_STATE_INC(reg);\r
-    }\r
-  }\r
-  else {\r
-    int n;\r
-\r
-    THREAD_ATOMIC_END;\r
-    n = 0;\r
-    while (ONIG_STATE(reg) < ONIG_STATE_NORMAL) {\r
-      if (++n > THREAD_PASS_LIMIT_COUNT)\r
-       return ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT;\r
-      THREAD_PASS;\r
-    }\r
-    goto start;\r
-  }\r
-  THREAD_ATOMIC_END;\r
-#endif /* USE_RECOMPILE_API && USE_MULTI_THREAD_SYSTEM */\r
-\r
-  MATCH_ARG_INIT(msa, option, region, at);\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-  {\r
-    int offset = at - str;\r
-    STATE_CHECK_BUFF_INIT(msa, end - str, offset, reg->num_comb_exp_check);\r
-  }\r
-#endif\r
+  MatchArg msa;\r
 \r
+  ADJUST_MATCH_PARAM(reg, mp);\r
+  MATCH_ARG_INIT(msa, reg, option, region, at, mp);\r
   if (region\r
 #ifdef USE_POSIX_API_REGION_OPTION\r
       && !IS_POSIX_REGION(option)\r
@@ -3110,28 +4339,31 @@ onig_match(regex_t* reg, const UChar* str, const UChar* end, const UChar* at, On
     r = 0;\r
 \r
   if (r == 0) {\r
+    if (ONIG_IS_OPTION_ON(option, ONIG_OPTION_CHECK_VALIDITY_OF_STRING)) {\r
+      if (! ONIGENC_IS_VALID_MBC_STRING(reg->enc, str, end)) {\r
+        r = ONIGERR_INVALID_WIDE_CHAR_VALUE;\r
+        goto end;\r
+      }\r
+    }\r
+\r
     prev = (UChar* )onigenc_get_prev_char_head(reg->enc, str, at);\r
-    r = match_at(reg, str, end,\r
-#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE\r
-                end,\r
-#endif\r
-                at, prev, &msa);\r
+    r = match_at(reg, str, end, end, at, prev, &msa);\r
   }\r
 \r
+ end:\r
   MATCH_ARG_FREE(msa);\r
-  ONIG_STATE_DEC_THREAD(reg);\r
   return r;\r
 }\r
 \r
 static int\r
 forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s,\r
-                    UChar* range, UChar** low, UChar** high, UChar** low_prev)\r
+                     UChar* range, UChar** low, UChar** high, UChar** low_prev)\r
 {\r
   UChar *p, *pprev = (UChar* )NULL;\r
 \r
 #ifdef ONIG_DEBUG_SEARCH\r
-  fprintf(stderr, "forward_search_range: str: %d, end: %d, s: %d, range: %d\n",\r
-         (int )str, (int )end, (int )s, (int )range);\r
+  fprintf(stderr, "forward_search_range: str: %p, end: %p, s: %p, range: %p\n",\r
+          str, end, s, range);\r
 #endif\r
 \r
   p = s;\r
@@ -3141,29 +4373,31 @@ forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
     }\r
     else {\r
       UChar *q = p + reg->dmin;\r
+\r
+      if (q >= end) return 0; /* fail */\r
       while (p < q) p += enclen(reg->enc, p);\r
     }\r
   }\r
 \r
  retry:\r
   switch (reg->optimize) {\r
-  case ONIG_OPTIMIZE_EXACT:\r
+  case OPTIMIZE_EXACT:\r
     p = slow_search(reg->enc, reg->exact, reg->exact_end, p, end, range);\r
     break;\r
-  case ONIG_OPTIMIZE_EXACT_IC:\r
+  case OPTIMIZE_EXACT_IC:\r
     p = slow_search_ic(reg->enc, reg->case_fold_flag,\r
                        reg->exact, reg->exact_end, p, end, range);\r
     break;\r
 \r
-  case ONIG_OPTIMIZE_EXACT_BM:\r
+  case OPTIMIZE_EXACT_BM:\r
     p = bm_search(reg, reg->exact, reg->exact_end, p, end, range);\r
     break;\r
 \r
-  case ONIG_OPTIMIZE_EXACT_BM_NOT_REV:\r
+  case OPTIMIZE_EXACT_BM_NO_REV:\r
     p = bm_search_notrev(reg, reg->exact, reg->exact_end, p, end, range);\r
     break;\r
 \r
-  case ONIG_OPTIMIZE_MAP:\r
+  case OPTIMIZE_MAP:\r
     p = map_search(reg->enc, reg->map, p, range);\r
     break;\r
   }\r
@@ -3181,58 +4415,65 @@ forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
 \r
       switch (reg->sub_anchor) {\r
       case ANCHOR_BEGIN_LINE:\r
-       if (!ON_STR_BEGIN(p)) {\r
-         prev = onigenc_get_prev_char_head(reg->enc,\r
-                                           (pprev ? pprev : str), p);\r
-         if (!ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end))\r
-           goto retry_gate;\r
-       }\r
-       break;\r
+        if (!ON_STR_BEGIN(p)) {\r
+          prev = onigenc_get_prev_char_head(reg->enc,\r
+                                            (pprev ? pprev : str), p);\r
+          if (!ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end))\r
+            goto retry_gate;\r
+        }\r
+        break;\r
 \r
       case ANCHOR_END_LINE:\r
-       if (ON_STR_END(p)) {\r
+        if (ON_STR_END(p)) {\r
 #ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE\r
-         prev = (UChar* )onigenc_get_prev_char_head(reg->enc,\r
-                                           (pprev ? pprev : str), p);\r
-         if (prev && ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end))\r
-           goto retry_gate;\r
+          prev = (UChar* )onigenc_get_prev_char_head(reg->enc,\r
+                                                     (pprev ? pprev : str), p);\r
+          if (prev && ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end))\r
+            goto retry_gate;\r
 #endif\r
-       }\r
-       else if (! ONIGENC_IS_MBC_NEWLINE(reg->enc, p, end)\r
+        }\r
+        else if (! ONIGENC_IS_MBC_NEWLINE(reg->enc, p, end)\r
 #ifdef USE_CRNL_AS_LINE_TERMINATOR\r
-              && ! ONIGENC_IS_MBC_CRNL(reg->enc, p, end)\r
+                 && ! ONIGENC_IS_MBC_CRNL(reg->enc, p, end)\r
 #endif\r
-                )\r
-         goto retry_gate;\r
-       break;\r
+                 )\r
+          goto retry_gate;\r
+        break;\r
       }\r
     }\r
 \r
     if (reg->dmax == 0) {\r
       *low = p;\r
       if (low_prev) {\r
-       if (*low > s)\r
-         *low_prev = onigenc_get_prev_char_head(reg->enc, s, p);\r
-       else\r
-         *low_prev = onigenc_get_prev_char_head(reg->enc,\r
-                                                (pprev ? pprev : str), p);\r
+        if (*low > s)\r
+          *low_prev = onigenc_get_prev_char_head(reg->enc, s, p);\r
+        else\r
+          *low_prev = onigenc_get_prev_char_head(reg->enc,\r
+                                                 (pprev ? pprev : str), p);\r
       }\r
     }\r
     else {\r
-      if (reg->dmax != ONIG_INFINITE_DISTANCE) {\r
-       *low = p - reg->dmax;\r
-       if (*low > s) {\r
-         *low = onigenc_get_right_adjust_char_head_with_prev(reg->enc, s,\r
-                                                             *low, (const UChar** )low_prev);\r
-         if (low_prev && IS_NULL(*low_prev))\r
-           *low_prev = onigenc_get_prev_char_head(reg->enc,\r
-                                                  (pprev ? pprev : s), *low);\r
-       }\r
-       else {\r
-         if (low_prev)\r
-           *low_prev = onigenc_get_prev_char_head(reg->enc,\r
-                                              (pprev ? pprev : str), *low);\r
-       }\r
+      if (reg->dmax != INFINITE_LEN) {\r
+        if (p - str < reg->dmax) {\r
+          *low = (UChar* )str;\r
+          if (low_prev)\r
+            *low_prev = onigenc_get_prev_char_head(reg->enc, str, *low);\r
+        }\r
+        else {\r
+          *low = p - reg->dmax;\r
+          if (*low > s) {\r
+            *low = onigenc_get_right_adjust_char_head_with_prev(reg->enc, s,\r
+                                                 *low, (const UChar** )low_prev);\r
+            if (low_prev && IS_NULL(*low_prev))\r
+              *low_prev = onigenc_get_prev_char_head(reg->enc,\r
+                                                     (pprev ? pprev : s), *low);\r
+          }\r
+          else {\r
+            if (low_prev)\r
+              *low_prev = onigenc_get_prev_char_head(reg->enc,\r
+                                                     (pprev ? pprev : str), *low);\r
+          }\r
+        }\r
       }\r
     }\r
     /* no needs to adjust *high, *high is used as range check only */\r
@@ -3240,8 +4481,8 @@ forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
 \r
 #ifdef ONIG_DEBUG_SEARCH\r
     fprintf(stderr,\r
-    "forward_search_range success: low: %d, high: %d, dmin: %d, dmax: %d\n",\r
-           (int )(*low - str), (int )(*high - str), reg->dmin, reg->dmax);\r
+            "forward_search_range success: low: %d, high: %d, dmin: %d, dmax: %d\n",\r
+            (int )(*low - str), (int )(*high - str), reg->dmin, reg->dmax);\r
 #endif\r
     return 1; /* success */\r
   }\r
@@ -3249,17 +4490,14 @@ forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
   return 0; /* fail */\r
 }\r
 \r
-static int set_bm_backward_skip P_((UChar* s, UChar* end, OnigEncoding enc,\r
-                                   int** skip));\r
 \r
 #define BM_BACKWARD_SEARCH_LENGTH_THRESHOLD   100\r
 \r
 static int\r
 backward_search_range(regex_t* reg, const UChar* str, const UChar* end,\r
-                     UChar* s, const UChar* range, UChar* adjrange,\r
-                     UChar** low, UChar** high)\r
+                      UChar* s, const UChar* range, UChar* adjrange,\r
+                      UChar** low, UChar** high)\r
 {\r
-  int r;\r
   UChar *p;\r
 \r
   range += reg->dmin;\r
@@ -3267,33 +4505,39 @@ backward_search_range(regex_t* reg, const UChar* str, const UChar* end,
 \r
  retry:\r
   switch (reg->optimize) {\r
-  case ONIG_OPTIMIZE_EXACT:\r
+  case OPTIMIZE_EXACT:\r
   exact_method:\r
     p = slow_search_backward(reg->enc, reg->exact, reg->exact_end,\r
-                            range, adjrange, end, p);\r
+                             range, adjrange, end, p);\r
     break;\r
 \r
-  case ONIG_OPTIMIZE_EXACT_IC:\r
+  case OPTIMIZE_EXACT_IC:\r
     p = slow_search_backward_ic(reg->enc, reg->case_fold_flag,\r
                                 reg->exact, reg->exact_end,\r
                                 range, adjrange, end, p);\r
     break;\r
 \r
-  case ONIG_OPTIMIZE_EXACT_BM:\r
-  case ONIG_OPTIMIZE_EXACT_BM_NOT_REV:\r
+  case OPTIMIZE_EXACT_BM:\r
+  case OPTIMIZE_EXACT_BM_NO_REV:\r
+#ifdef USE_INT_MAP_BACKWARD\r
     if (IS_NULL(reg->int_map_backward)) {\r
+      int r;\r
+\r
       if (s - range < BM_BACKWARD_SEARCH_LENGTH_THRESHOLD)\r
-       goto exact_method;\r
+        goto exact_method;\r
 \r
       r = set_bm_backward_skip(reg->exact, reg->exact_end, reg->enc,\r
-                              &(reg->int_map_backward));\r
-      if (r) return r;\r
+                               &(reg->int_map_backward));\r
+      if (r != 0) return r;\r
     }\r
     p = bm_search_backward(reg, reg->exact, reg->exact_end, range, adjrange,\r
-                          end, p);\r
+                           end, p);\r
+#else\r
+    goto exact_method;\r
+#endif\r
     break;\r
 \r
-  case ONIG_OPTIMIZE_MAP:\r
+  case OPTIMIZE_MAP:\r
     p = map_search_backward(reg->enc, reg->map, range, adjrange, p);\r
     break;\r
   }\r
@@ -3304,41 +4548,41 @@ backward_search_range(regex_t* reg, const UChar* str, const UChar* end,
 \r
       switch (reg->sub_anchor) {\r
       case ANCHOR_BEGIN_LINE:\r
-       if (!ON_STR_BEGIN(p)) {\r
-         prev = onigenc_get_prev_char_head(reg->enc, str, p);\r
-         if (!ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end)) {\r
-           p = prev;\r
-           goto retry;\r
-         }\r
-       }\r
-       break;\r
+        if (!ON_STR_BEGIN(p)) {\r
+          prev = onigenc_get_prev_char_head(reg->enc, str, p);\r
+          if (!ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end)) {\r
+            p = prev;\r
+            goto retry;\r
+          }\r
+        }\r
+        break;\r
 \r
       case ANCHOR_END_LINE:\r
-       if (ON_STR_END(p)) {\r
+        if (ON_STR_END(p)) {\r
 #ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE\r
-         prev = onigenc_get_prev_char_head(reg->enc, adjrange, p);\r
-         if (IS_NULL(prev)) goto fail;\r
-         if (ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end)) {\r
-           p = prev;\r
-           goto retry;\r
-         }\r
-#endif\r
-       }\r
-       else if (! ONIGENC_IS_MBC_NEWLINE(reg->enc, p, end)\r
+          prev = onigenc_get_prev_char_head(reg->enc, adjrange, p);\r
+          if (IS_NULL(prev)) goto fail;\r
+          if (ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end)) {\r
+            p = prev;\r
+            goto retry;\r
+          }\r
+#endif\r
+        }\r
+        else if (! ONIGENC_IS_MBC_NEWLINE(reg->enc, p, end)\r
 #ifdef USE_CRNL_AS_LINE_TERMINATOR\r
-              && ! ONIGENC_IS_MBC_CRNL(reg->enc, p, end)\r
+                 && ! ONIGENC_IS_MBC_CRNL(reg->enc, p, end)\r
 #endif\r
-                ) {\r
-         p = onigenc_get_prev_char_head(reg->enc, adjrange, p);\r
-         if (IS_NULL(p)) goto fail;\r
-         goto retry;\r
-       }\r
-       break;\r
+                 ) {\r
+          p = onigenc_get_prev_char_head(reg->enc, adjrange, p);\r
+          if (IS_NULL(p)) goto fail;\r
+          goto retry;\r
+        }\r
+        break;\r
       }\r
     }\r
 \r
     /* no needs to adjust *high, *high is used as range check only */\r
-    if (reg->dmax != ONIG_INFINITE_DISTANCE) {\r
+    if (reg->dmax != INFINITE_LEN) {\r
       *low  = p - reg->dmax;\r
       *high = p - reg->dmin;\r
       *high = onigenc_get_right_adjust_char_head(reg->enc, adjrange, *high);\r
@@ -3346,7 +4590,7 @@ backward_search_range(regex_t* reg, const UChar* str, const UChar* end,
 \r
 #ifdef ONIG_DEBUG_SEARCH\r
     fprintf(stderr, "backward_search_range: low: %d, high: %d\n",\r
-           (int )(*low - str), (int )(*high - str));\r
+            (int )(*low - str), (int )(*high - str));\r
 #endif\r
     return 1; /* success */\r
   }\r
@@ -3361,60 +4605,57 @@ backward_search_range(regex_t* reg, const UChar* str, const UChar* end,
 \r
 extern int\r
 onig_search(regex_t* reg, const UChar* str, const UChar* end,\r
-           const UChar* start, const UChar* range, OnigRegion* region, OnigOptionType option)\r
+            const UChar* start, const UChar* range, OnigRegion* region,\r
+            OnigOptionType option)\r
+{\r
+  int r;\r
+  OnigMatchParam mp;\r
+\r
+  onig_initialize_match_param(&mp);\r
+  r = onig_search_with_param(reg, str, end, start, range, region, option, &mp);\r
+  onig_free_match_param_content(&mp);\r
+  return r;\r
+\r
+}\r
+\r
+extern int\r
+onig_search_with_param(regex_t* reg, const UChar* str, const UChar* end,\r
+                       const UChar* start, const UChar* range, OnigRegion* region,\r
+                       OnigOptionType option, OnigMatchParam* mp)\r
 {\r
   int r;\r
   UChar *s, *prev;\r
-  OnigMatchArg msa;\r
+  MatchArg msa;\r
   const UChar *orig_start = start;\r
-#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE\r
   const UChar *orig_range = range;\r
-#endif\r
-\r
-#if defined(USE_RECOMPILE_API) && defined(USE_MULTI_THREAD_SYSTEM)\r
- start:\r
-  THREAD_ATOMIC_START;\r
-  if (ONIG_STATE(reg) >= ONIG_STATE_NORMAL) {\r
-    ONIG_STATE_INC(reg);\r
-    if (IS_NOT_NULL(reg->chain) && ONIG_STATE(reg) == ONIG_STATE_NORMAL) {\r
-      onig_chain_reduce(reg);\r
-      ONIG_STATE_INC(reg);\r
-    }\r
-  }\r
-  else {\r
-    int n;\r
-\r
-    THREAD_ATOMIC_END;\r
-    n = 0;\r
-    while (ONIG_STATE(reg) < ONIG_STATE_NORMAL) {\r
-      if (++n > THREAD_PASS_LIMIT_COUNT)\r
-       return ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT;\r
-      THREAD_PASS;\r
-    }\r
-    goto start;\r
-  }\r
-  THREAD_ATOMIC_END;\r
-#endif /* USE_RECOMPILE_API && USE_MULTI_THREAD_SYSTEM */\r
 \r
 #ifdef ONIG_DEBUG_SEARCH\r
   fprintf(stderr,\r
-     "onig_search (entry point): str: %d, end: %d, start: %d, range: %d\n",\r
-     (int )str, (int )(end - str), (int )(start - str), (int )(range - str));\r
+     "onig_search (entry point): str: %p, end: %d, start: %d, range: %d\n",\r
+     str, (int )(end - str), (int )(start - str), (int )(range - str));\r
 #endif\r
 \r
+  ADJUST_MATCH_PARAM(reg, mp);\r
+\r
   if (region\r
 #ifdef USE_POSIX_API_REGION_OPTION\r
       && !IS_POSIX_REGION(option)\r
 #endif\r
       ) {\r
     r = onig_region_resize_clear(region, reg->num_mem + 1);\r
-    if (r) goto finish_no_msa;\r
+    if (r != 0) goto finish_no_msa;\r
   }\r
 \r
   if (start > end || start < str) goto mismatch_no_msa;\r
 \r
+  if (ONIG_IS_OPTION_ON(option, ONIG_OPTION_CHECK_VALIDITY_OF_STRING)) {\r
+    if (! ONIGENC_IS_VALID_MBC_STRING(reg->enc, str, end)) {\r
+      r = ONIGERR_INVALID_WIDE_CHAR_VALUE;\r
+      goto finish_no_msa;\r
+    }\r
+  }\r
+\r
 \r
-#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE\r
 #ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE\r
 #define MATCH_AND_RETURN_CHECK(upper_range) \\r
   r = match_at(reg, str, end, (upper_range), s, prev, &msa); \\r
@@ -3436,29 +4677,6 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
     else goto finish; /* error */ \\r
   }\r
 #endif /* USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE */\r
-#else\r
-#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE\r
-#define MATCH_AND_RETURN_CHECK(none) \\r
-  r = match_at(reg, str, end, s, prev, &msa);\\r
-  if (r != ONIG_MISMATCH) {\\r
-    if (r >= 0) {\\r
-      if (! IS_FIND_LONGEST(reg->options)) {\\r
-        goto match;\\r
-      }\\r
-    }\\r
-    else goto finish; /* error */ \\r
-  }\r
-#else\r
-#define MATCH_AND_RETURN_CHECK(none) \\r
-  r = match_at(reg, str, end, s, prev, &msa);\\r
-  if (r != ONIG_MISMATCH) {\\r
-    if (r >= 0) {\\r
-      goto match;\\r
-    }\\r
-    else goto finish; /* error */ \\r
-  }\r
-#endif /* USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE */\r
-#endif /* USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE */\r
 \r
 \r
   /* anchor optimize: resume search range */\r
@@ -3469,56 +4687,55 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
       /* search start-position only */\r
     begin_position:\r
       if (range > start)\r
-       range = start + 1;\r
+        range = start + 1;\r
       else\r
-       range = start;\r
+        range = start;\r
     }\r
     else if (reg->anchor & ANCHOR_BEGIN_BUF) {\r
       /* search str-position only */\r
       if (range > start) {\r
-       if (start != str) goto mismatch_no_msa;\r
-       range = str + 1;\r
+        if (start != str) goto mismatch_no_msa;\r
+        range = str + 1;\r
       }\r
       else {\r
-       if (range <= str) {\r
-         start = str;\r
-         range = str;\r
-       }\r
-       else\r
-         goto mismatch_no_msa;\r
+        if (range <= str) {\r
+          start = str;\r
+          range = str;\r
+        }\r
+        else\r
+          goto mismatch_no_msa;\r
       }\r
     }\r
     else if (reg->anchor & ANCHOR_END_BUF) {\r
       min_semi_end = max_semi_end = (UChar* )end;\r
 \r
     end_buf:\r
-      if ((OnigDistance )(max_semi_end - str) < reg->anchor_dmin)\r
-       goto mismatch_no_msa;\r
+      if ((OnigLen )(max_semi_end - str) < reg->anchor_dmin)\r
+        goto mismatch_no_msa;\r
 \r
       if (range > start) {\r
-       if ((OnigDistance )(min_semi_end - start) > reg->anchor_dmax) {\r
-         start = min_semi_end - reg->anchor_dmax;\r
-         if (start < end)\r
-           start = onigenc_get_right_adjust_char_head(reg->enc, str, start);\r
-         else { /* match with empty at end */\r
-           start = onigenc_get_prev_char_head(reg->enc, str, end);\r
-         }\r
-       }\r
-       if ((OnigDistance )(max_semi_end - (range - 1)) < reg->anchor_dmin) {\r
-         range = max_semi_end - reg->anchor_dmin + 1;\r
-       }\r
-\r
-       if (start >= range) goto mismatch_no_msa;\r
+        if ((OnigLen )(min_semi_end - start) > reg->anchor_dmax) {\r
+          start = min_semi_end - reg->anchor_dmax;\r
+          if (start < end)\r
+            start = onigenc_get_right_adjust_char_head(reg->enc, str, start);\r
+        }\r
+        if ((OnigLen )(max_semi_end - (range - 1)) < reg->anchor_dmin) {\r
+          range = max_semi_end - reg->anchor_dmin + 1;\r
+        }\r
+\r
+        if (start > range) goto mismatch_no_msa;\r
+        /* If start == range, match with empty at end.\r
+           Backward search is used. */\r
       }\r
       else {\r
-       if ((OnigDistance )(min_semi_end - range) > reg->anchor_dmax) {\r
-         range = min_semi_end - reg->anchor_dmax;\r
-       }\r
-       if ((OnigDistance )(max_semi_end - start) < reg->anchor_dmin) {\r
-         start = max_semi_end - reg->anchor_dmin;\r
-         start = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, str, start);\r
-       }\r
-       if (range > start) goto mismatch_no_msa;\r
+        if ((OnigLen )(min_semi_end - range) > reg->anchor_dmax) {\r
+          range = min_semi_end - reg->anchor_dmax;\r
+        }\r
+        if ((OnigLen )(max_semi_end - start) < reg->anchor_dmin) {\r
+          start = max_semi_end - reg->anchor_dmin;\r
+          start = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, str, start);\r
+        }\r
+        if (range > start) goto mismatch_no_msa;\r
       }\r
     }\r
     else if (reg->anchor & ANCHOR_SEMI_END_BUF) {\r
@@ -3526,25 +4743,25 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
 \r
       max_semi_end = (UChar* )end;\r
       if (ONIGENC_IS_MBC_NEWLINE(reg->enc, pre_end, end)) {\r
-       min_semi_end = pre_end;\r
+        min_semi_end = pre_end;\r
 \r
 #ifdef USE_CRNL_AS_LINE_TERMINATOR\r
-       pre_end = ONIGENC_STEP_BACK(reg->enc, str, pre_end, 1);\r
-       if (IS_NOT_NULL(pre_end) &&\r
-           ONIGENC_IS_MBC_CRNL(reg->enc, pre_end, end)) {\r
-         min_semi_end = pre_end;\r
-       }\r
+        pre_end = ONIGENC_STEP_BACK(reg->enc, str, pre_end, 1);\r
+        if (IS_NOT_NULL(pre_end) &&\r
+            ONIGENC_IS_MBC_CRNL(reg->enc, pre_end, end)) {\r
+          min_semi_end = pre_end;\r
+        }\r
 #endif\r
-       if (min_semi_end > str && start <= min_semi_end) {\r
-         goto end_buf;\r
-       }\r
+        if (min_semi_end > str && start <= min_semi_end) {\r
+          goto end_buf;\r
+        }\r
       }\r
       else {\r
-       min_semi_end = (UChar* )end;\r
-       goto end_buf;\r
+        min_semi_end = (UChar* )end;\r
+        goto end_buf;\r
       }\r
     }\r
-    else if ((reg->anchor & ANCHOR_ANYCHAR_STAR_ML)) {\r
+    else if ((reg->anchor & ANCHOR_ANYCHAR_INF_ML)) {\r
       goto begin_position;\r
     }\r
   }\r
@@ -3560,11 +4777,7 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
       s = (UChar* )start;\r
       prev = (UChar* )NULL;\r
 \r
-      MATCH_ARG_INIT(msa, option, region, start);\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-      msa.state_check_buff = (void* )0;\r
-      msa.state_check_buff_size = 0;   /* NO NEED, for valgrind */\r
-#endif\r
+      MATCH_ARG_INIT(msa, reg, option, region, start, mp);\r
       MATCH_AND_RETURN_CHECK(end);\r
       goto mismatch;\r
     }\r
@@ -3573,16 +4786,10 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
 \r
 #ifdef ONIG_DEBUG_SEARCH\r
   fprintf(stderr, "onig_search(apply anchor): end: %d, start: %d, range: %d\n",\r
-         (int )(end - str), (int )(start - str), (int )(range - str));\r
+          (int )(end - str), (int )(start - str), (int )(range - str));\r
 #endif\r
 \r
-  MATCH_ARG_INIT(msa, option, region, orig_start);\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-  {\r
-    int offset = (MIN(start, range) - str);\r
-    STATE_CHECK_BUFF_INIT(msa, end - str, offset, reg->num_comb_exp_check);\r
-  }\r
-#endif\r
+  MATCH_ARG_INIT(msa, reg, option, region, orig_start, mp);\r
 \r
   s = (UChar* )start;\r
   if (range > start) {   /* forward search */\r
@@ -3591,51 +4798,53 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
     else\r
       prev = (UChar* )NULL;\r
 \r
-    if (reg->optimize != ONIG_OPTIMIZE_NONE) {\r
+    if (reg->optimize != OPTIMIZE_NONE) {\r
       UChar *sch_range, *low, *high, *low_prev;\r
 \r
       sch_range = (UChar* )range;\r
       if (reg->dmax != 0) {\r
-       if (reg->dmax == ONIG_INFINITE_DISTANCE)\r
-         sch_range = (UChar* )end;\r
-       else {\r
-         sch_range += reg->dmax;\r
-         if (sch_range > end) sch_range = (UChar* )end;\r
-       }\r
+        if (reg->dmax == INFINITE_LEN)\r
+          sch_range = (UChar* )end;\r
+        else {\r
+          sch_range += reg->dmax;\r
+          if (sch_range > end) sch_range = (UChar* )end;\r
+        }\r
       }\r
 \r
       if ((end - start) < reg->threshold_len)\r
         goto mismatch;\r
 \r
-      if (reg->dmax != ONIG_INFINITE_DISTANCE) {\r
-       do {\r
-         if (! forward_search_range(reg, str, end, s, sch_range,\r
-                                    &low, &high, &low_prev)) goto mismatch;\r
-         if (s < low) {\r
-           s    = low;\r
-           prev = low_prev;\r
-         }\r
-         while (s <= high) {\r
-           MATCH_AND_RETURN_CHECK(orig_range);\r
-           prev = s;\r
-           s += enclen(reg->enc, s);\r
-         }\r
-       } while (s < range);\r
-       goto mismatch;\r
+      if (reg->dmax != INFINITE_LEN) {\r
+        do {\r
+          if (! forward_search_range(reg, str, end, s, sch_range,\r
+                                     &low, &high, &low_prev)) goto mismatch;\r
+          if (s < low) {\r
+            s    = low;\r
+            prev = low_prev;\r
+          }\r
+          while (s <= high) {\r
+            MATCH_AND_RETURN_CHECK(orig_range);\r
+            prev = s;\r
+            s += enclen(reg->enc, s);\r
+          }\r
+        } while (s < range);\r
+        goto mismatch;\r
       }\r
       else { /* check only. */\r
-       if (! forward_search_range(reg, str, end, s, sch_range,\r
-                                  &low, &high, (UChar** )NULL)) goto mismatch;\r
+        if (! forward_search_range(reg, str, end, s, sch_range,\r
+                                   &low, &high, (UChar** )NULL)) goto mismatch;\r
 \r
-        if ((reg->anchor & ANCHOR_ANYCHAR_STAR) != 0) {\r
+        if ((reg->anchor & ANCHOR_ANYCHAR_INF) != 0) {\r
           do {\r
             MATCH_AND_RETURN_CHECK(orig_range);\r
             prev = s;\r
             s += enclen(reg->enc, s);\r
 \r
-            while (!ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end) && s < range) {\r
-              prev = s;\r
-              s += enclen(reg->enc, s);\r
+            if ((reg->anchor & (ANCHOR_LOOK_BEHIND | ANCHOR_PREC_READ_NOT)) == 0) {\r
+              while (!ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end) && s < range) {\r
+                prev = s;\r
+                s += enclen(reg->enc, s);\r
+              }\r
             }\r
           } while (s < range);\r
           goto mismatch;\r
@@ -3654,56 +4863,54 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
     }\r
   }\r
   else {  /* backward search */\r
-#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE\r
     if (orig_start < end)\r
       orig_start += enclen(reg->enc, orig_start); /* is upper range */\r
-#endif\r
 \r
-    if (reg->optimize != ONIG_OPTIMIZE_NONE) {\r
+    if (reg->optimize != OPTIMIZE_NONE) {\r
       UChar *low, *high, *adjrange, *sch_start;\r
 \r
       if (range < end)\r
-       adjrange = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, str, range);\r
+        adjrange = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, str, range);\r
       else\r
-       adjrange = (UChar* )end;\r
-\r
-      if (reg->dmax != ONIG_INFINITE_DISTANCE &&\r
-         (end - range) >= reg->threshold_len) {\r
-       do {\r
-         sch_start = s + reg->dmax;\r
-         if (sch_start > end) sch_start = (UChar* )end;\r
-         if (backward_search_range(reg, str, end, sch_start, range, adjrange,\r
-                                   &low, &high) <= 0)\r
-           goto mismatch;\r
-\r
-         if (s > high)\r
-           s = high;\r
-\r
-         while (s >= low) {\r
-           prev = onigenc_get_prev_char_head(reg->enc, str, s);\r
-           MATCH_AND_RETURN_CHECK(orig_start);\r
-           s = prev;\r
-         }\r
-       } while (s >= range);\r
-       goto mismatch;\r
+        adjrange = (UChar* )end;\r
+\r
+      if (reg->dmax != INFINITE_LEN &&\r
+          (end - range) >= reg->threshold_len) {\r
+        do {\r
+          sch_start = s + reg->dmax;\r
+          if (sch_start > end) sch_start = (UChar* )end;\r
+          if (backward_search_range(reg, str, end, sch_start, range, adjrange,\r
+                                    &low, &high) <= 0)\r
+            goto mismatch;\r
+\r
+          if (s > high)\r
+            s = high;\r
+\r
+          while (s >= low) {\r
+            prev = onigenc_get_prev_char_head(reg->enc, str, s);\r
+            MATCH_AND_RETURN_CHECK(orig_start);\r
+            s = prev;\r
+          }\r
+        } while (s >= range);\r
+        goto mismatch;\r
       }\r
       else { /* check only. */\r
-       if ((end - range) < reg->threshold_len) goto mismatch;\r
-\r
-       sch_start = s;\r
-       if (reg->dmax != 0) {\r
-         if (reg->dmax == ONIG_INFINITE_DISTANCE)\r
-           sch_start = (UChar* )end;\r
-         else {\r
-           sch_start += reg->dmax;\r
-           if (sch_start > end) sch_start = (UChar* )end;\r
-           else\r
-             sch_start = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc,\r
-                                                   start, sch_start);\r
-         }\r
-       }\r
-       if (backward_search_range(reg, str, end, sch_start, range, adjrange,\r
-                                 &low, &high) <= 0) goto mismatch;\r
+        if ((end - range) < reg->threshold_len) goto mismatch;\r
+\r
+        sch_start = s;\r
+        if (reg->dmax != 0) {\r
+          if (reg->dmax == INFINITE_LEN)\r
+            sch_start = (UChar* )end;\r
+          else {\r
+            sch_start += reg->dmax;\r
+            if (sch_start > end) sch_start = (UChar* )end;\r
+            else\r
+              sch_start = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc,\r
+                                                        start, sch_start);\r
+          }\r
+        }\r
+        if (backward_search_range(reg, str, end, sch_start, range, adjrange,\r
+                                  &low, &high) <= 0) goto mismatch;\r
       }\r
     }\r
 \r
@@ -3727,10 +4934,9 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
 \r
  finish:\r
   MATCH_ARG_FREE(msa);\r
-  ONIG_STATE_DEC_THREAD(reg);\r
 \r
   /* If result is mismatch and no FIND_NOT_EMPTY option,\r
-     then the region is not setted in match_at(). */\r
+     then the region is not set in match_at(). */\r
   if (IS_FIND_NOT_EMPTY(reg->options) && region\r
 #ifdef USE_POSIX_API_REGION_OPTION\r
       && !IS_POSIX_REGION(option)\r
@@ -3748,7 +4954,6 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
  mismatch_no_msa:\r
   r = ONIG_MISMATCH;\r
  finish_no_msa:\r
-  ONIG_STATE_DEC_THREAD(reg);\r
 #ifdef ONIG_DEBUG\r
   if (r != ONIG_MISMATCH)\r
     fprintf(stderr, "onig_search: error %d\n", r);\r
@@ -3756,9 +4961,57 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
   return r;\r
 \r
  match:\r
-  ONIG_STATE_DEC_THREAD(reg);\r
   MATCH_ARG_FREE(msa);\r
-  return (int)(s - str);\r
+  return (int )(s - str);\r
+}\r
+\r
+extern int\r
+onig_scan(regex_t* reg, const UChar* str, const UChar* end,\r
+          OnigRegion* region, OnigOptionType option,\r
+          int (*scan_callback)(int, int, OnigRegion*, void*),\r
+          void* callback_arg)\r
+{\r
+  int r;\r
+  int n;\r
+  int rs;\r
+  const UChar* start;\r
+\r
+  if (ONIG_IS_OPTION_ON(option, ONIG_OPTION_CHECK_VALIDITY_OF_STRING)) {\r
+    if (! ONIGENC_IS_VALID_MBC_STRING(reg->enc, str, end))\r
+      return ONIGERR_INVALID_WIDE_CHAR_VALUE;\r
+\r
+    ONIG_OPTION_OFF(option, ONIG_OPTION_CHECK_VALIDITY_OF_STRING);\r
+  }\r
+\r
+  n = 0;\r
+  start = str;\r
+  while (1) {\r
+    r = onig_search(reg, str, end, start, end, region, option);\r
+    if (r >= 0) {\r
+      rs = scan_callback(n, r, region, callback_arg);\r
+      n++;\r
+      if (rs != 0)\r
+        return rs;\r
+\r
+      if (region->end[0] == start - str) {\r
+        if (start >= end) break;\r
+        start += enclen(reg->enc, start);\r
+      }\r
+      else\r
+        start = str + region->end[0];\r
+\r
+      if (start > end)\r
+        break;\r
+    }\r
+    else if (r == ONIG_MISMATCH) {\r
+      break;\r
+    }\r
+    else { /* error */\r
+      return r;\r
+    }\r
+  }\r
+\r
+  return n;\r
 }\r
 \r
 extern OnigEncoding\r
@@ -3799,7 +5052,7 @@ onig_number_of_capture_histories(regex_t* reg)
 \r
   n = 0;\r
   for (i = 0; i <= ONIG_MAX_CAPTURE_HISTORY_GROUP; i++) {\r
-    if (BIT_STATUS_AT(reg->capture_history, i) != 0)\r
+    if (MEM_STATUS_AT(reg->capture_history, i) != 0)\r
       n++;\r
   }\r
   return n;\r
@@ -3814,3 +5067,627 @@ onig_copy_encoding(OnigEncoding to, OnigEncoding from)
   *to = *from;\r
 }\r
 \r
+\r
+/* for callout functions */\r
+\r
+#ifdef USE_CALLOUT\r
+\r
+extern OnigCalloutFunc\r
+onig_get_progress_callout(void)\r
+{\r
+  return DefaultProgressCallout;\r
+}\r
+\r
+extern int\r
+onig_set_progress_callout(OnigCalloutFunc f)\r
+{\r
+  DefaultProgressCallout = f;\r
+  return ONIG_NORMAL;\r
+}\r
+\r
+extern OnigCalloutFunc\r
+onig_get_retraction_callout(void)\r
+{\r
+  return DefaultRetractionCallout;\r
+}\r
+\r
+extern int\r
+onig_set_retraction_callout(OnigCalloutFunc f)\r
+{\r
+  DefaultRetractionCallout = f;\r
+  return ONIG_NORMAL;\r
+}\r
+\r
+extern int\r
+onig_get_callout_num_by_callout_args(OnigCalloutArgs* args)\r
+{\r
+  return args->num;\r
+}\r
+\r
+extern OnigCalloutIn\r
+onig_get_callout_in_by_callout_args(OnigCalloutArgs* args)\r
+{\r
+  return args->in;\r
+}\r
+\r
+extern int\r
+onig_get_name_id_by_callout_args(OnigCalloutArgs* args)\r
+{\r
+  return args->name_id;\r
+}\r
+\r
+extern const UChar*\r
+onig_get_contents_by_callout_args(OnigCalloutArgs* args)\r
+{\r
+  int num;\r
+  CalloutListEntry* e;\r
+\r
+  num = args->num;\r
+  e = onig_reg_callout_list_at(args->regex, num);\r
+  if (IS_NULL(e)) return 0;\r
+  if (e->of == ONIG_CALLOUT_OF_CONTENTS) {\r
+    return e->u.content.start;\r
+  }\r
+\r
+  return 0;\r
+}\r
+\r
+extern const UChar*\r
+onig_get_contents_end_by_callout_args(OnigCalloutArgs* args)\r
+{\r
+  int num;\r
+  CalloutListEntry* e;\r
+\r
+  num = args->num;\r
+  e = onig_reg_callout_list_at(args->regex, num);\r
+  if (IS_NULL(e)) return 0;\r
+  if (e->of == ONIG_CALLOUT_OF_CONTENTS) {\r
+    return e->u.content.end;\r
+  }\r
+\r
+  return 0;\r
+}\r
+\r
+extern int\r
+onig_get_args_num_by_callout_args(OnigCalloutArgs* args)\r
+{\r
+  int num;\r
+  CalloutListEntry* e;\r
+\r
+  num = args->num;\r
+  e = onig_reg_callout_list_at(args->regex, num);\r
+  if (IS_NULL(e)) return ONIGERR_INVALID_ARGUMENT;\r
+  if (e->of == ONIG_CALLOUT_OF_NAME) {\r
+    return e->u.arg.num;\r
+  }\r
+\r
+  return ONIGERR_INVALID_ARGUMENT;\r
+}\r
+\r
+extern int\r
+onig_get_passed_args_num_by_callout_args(OnigCalloutArgs* args)\r
+{\r
+  int num;\r
+  CalloutListEntry* e;\r
+\r
+  num = args->num;\r
+  e = onig_reg_callout_list_at(args->regex, num);\r
+  if (IS_NULL(e)) return ONIGERR_INVALID_ARGUMENT;\r
+  if (e->of == ONIG_CALLOUT_OF_NAME) {\r
+    return e->u.arg.passed_num;\r
+  }\r
+\r
+  return ONIGERR_INVALID_ARGUMENT;\r
+}\r
+\r
+extern int\r
+onig_get_arg_by_callout_args(OnigCalloutArgs* args, int index,\r
+                             OnigType* type, OnigValue* val)\r
+{\r
+  int num;\r
+  CalloutListEntry* e;\r
+\r
+  num = args->num;\r
+  e = onig_reg_callout_list_at(args->regex, num);\r
+  if (IS_NULL(e)) return ONIGERR_INVALID_ARGUMENT;\r
+  if (e->of == ONIG_CALLOUT_OF_NAME) {\r
+    if (IS_NOT_NULL(type)) *type = e->u.arg.types[index];\r
+    if (IS_NOT_NULL(val))  *val  = e->u.arg.vals[index];\r
+    return ONIG_NORMAL;\r
+  }\r
+\r
+  return ONIGERR_INVALID_ARGUMENT;\r
+}\r
+\r
+extern const UChar*\r
+onig_get_string_by_callout_args(OnigCalloutArgs* args)\r
+{\r
+  return args->string;\r
+}\r
+\r
+extern const UChar*\r
+onig_get_string_end_by_callout_args(OnigCalloutArgs* args)\r
+{\r
+  return args->string_end;\r
+}\r
+\r
+extern const UChar*\r
+onig_get_start_by_callout_args(OnigCalloutArgs* args)\r
+{\r
+  return args->start;\r
+}\r
+\r
+extern const UChar*\r
+onig_get_right_range_by_callout_args(OnigCalloutArgs* args)\r
+{\r
+  return args->right_range;\r
+}\r
+\r
+extern const UChar*\r
+onig_get_current_by_callout_args(OnigCalloutArgs* args)\r
+{\r
+  return args->current;\r
+}\r
+\r
+extern OnigRegex\r
+onig_get_regex_by_callout_args(OnigCalloutArgs* args)\r
+{\r
+  return args->regex;\r
+}\r
+\r
+extern unsigned long\r
+onig_get_retry_counter_by_callout_args(OnigCalloutArgs* args)\r
+{\r
+  return args->retry_in_match_counter;\r
+}\r
+\r
+\r
+extern int\r
+onig_get_capture_range_in_callout(OnigCalloutArgs* a, int mem_num, int* begin, int* end)\r
+{\r
+  OnigRegex    reg;\r
+  const UChar* str;\r
+  StackType*   stk_base;\r
+  int i;\r
+\r
+  i = mem_num;\r
+  reg = a->regex;\r
+  str = a->string;\r
+  stk_base = a->stk_base;\r
+\r
+  if (i > 0) {\r
+    if (a->mem_end_stk[i] != INVALID_STACK_INDEX) {\r
+      if (MEM_STATUS_AT(reg->bt_mem_start, i))\r
+        *begin = (int )(STACK_AT(a->mem_start_stk[i])->u.mem.pstr - str);\r
+      else\r
+        *begin = (int )((UChar* )((void* )a->mem_start_stk[i]) - str);\r
+\r
+      *end = (int )((MEM_STATUS_AT(reg->bt_mem_end, i)\r
+                     ? STACK_AT(a->mem_end_stk[i])->u.mem.pstr\r
+                     : (UChar* )((void* )a->mem_end_stk[i])) - str);\r
+    }\r
+    else {\r
+      *begin = *end = ONIG_REGION_NOTPOS;\r
+    }\r
+  }\r
+  else if (i == 0) {\r
+#if 0\r
+    *begin = a->start   - str;\r
+    *end   = a->current - str;\r
+#else\r
+    return ONIGERR_INVALID_ARGUMENT;\r
+#endif\r
+  }\r
+  else\r
+    return ONIGERR_INVALID_ARGUMENT;\r
+\r
+  return ONIG_NORMAL;\r
+}\r
+\r
+extern int\r
+onig_get_used_stack_size_in_callout(OnigCalloutArgs* a, int* used_num, int* used_bytes)\r
+{\r
+  int n;\r
+\r
+  n = (int )(a->stk - a->stk_base);\r
+\r
+  if (used_num != 0)\r
+    *used_num = n;\r
+\r
+  if (used_bytes != 0)\r
+    *used_bytes = n * sizeof(StackType);\r
+\r
+  return ONIG_NORMAL;\r
+}\r
+\r
+\r
+/* builtin callout functions */\r
+\r
+extern int\r
+onig_builtin_fail(OnigCalloutArgs* args ARG_UNUSED, void* user_data ARG_UNUSED)\r
+{\r
+  return ONIG_CALLOUT_FAIL;\r
+}\r
+\r
+extern int\r
+onig_builtin_mismatch(OnigCalloutArgs* args ARG_UNUSED, void* user_data ARG_UNUSED)\r
+{\r
+  return ONIG_MISMATCH;\r
+}\r
+\r
+#if 0\r
+extern int\r
+onig_builtin_success(OnigCalloutArgs* args ARG_UNUSED, void* user_data ARG_UNUSED)\r
+{\r
+  return ONIG_CALLOUT_SUCCESS;\r
+}\r
+#endif\r
+\r
+extern int\r
+onig_builtin_error(OnigCalloutArgs* args, void* user_data ARG_UNUSED)\r
+{\r
+  int r;\r
+  int n;\r
+  OnigValue val;\r
+\r
+  r = onig_get_arg_by_callout_args(args, 0, 0, &val);\r
+  if (r != ONIG_NORMAL) return r;\r
+\r
+  n = (int )val.l;\r
+  if (n >= 0) {\r
+    n = ONIGERR_INVALID_CALLOUT_BODY;\r
+  }\r
+\r
+  return n;\r
+}\r
+\r
+extern int\r
+onig_builtin_count(OnigCalloutArgs* args, void* user_data)\r
+{\r
+  (void )onig_check_callout_data_and_clear_old_values(args);\r
+\r
+  return onig_builtin_total_count(args, user_data);\r
+}\r
+\r
+extern int\r
+onig_builtin_total_count(OnigCalloutArgs* args, void* user_data ARG_UNUSED)\r
+{\r
+  int r;\r
+  int slot;\r
+  OnigType  type;\r
+  OnigValue val;\r
+  OnigValue aval;\r
+  OnigCodePoint count_type;\r
+\r
+  r = onig_get_arg_by_callout_args(args, 0, &type, &aval);\r
+  if (r != ONIG_NORMAL) return r;\r
+\r
+  count_type = aval.c;\r
+  if (count_type != '>' && count_type != 'X' && count_type != '<')\r
+    return ONIGERR_INVALID_CALLOUT_ARG;\r
+\r
+  r = onig_get_callout_data_by_callout_args_self_dont_clear_old(args, 0,\r
+                                                                &type, &val);\r
+  if (r < ONIG_NORMAL)\r
+    return r;\r
+  else if (r > ONIG_NORMAL) {\r
+    /* type == void: initial state */\r
+    val.l = 0;\r
+  }\r
+\r
+  if (args->in == ONIG_CALLOUT_IN_RETRACTION) {\r
+    slot = 2;\r
+    if (count_type == '<')\r
+      val.l++;\r
+    else if (count_type == 'X')\r
+      val.l--;\r
+  }\r
+  else {\r
+    slot = 1;\r
+    if (count_type != '<')\r
+      val.l++;\r
+  }\r
+\r
+  r = onig_set_callout_data_by_callout_args_self(args, 0, ONIG_TYPE_LONG, &val);\r
+  if (r != ONIG_NORMAL) return r;\r
+\r
+  /* slot 1: in progress counter, slot 2: in retraction counter */\r
+  r = onig_get_callout_data_by_callout_args_self_dont_clear_old(args, slot,\r
+                                                                &type, &val);\r
+  if (r < ONIG_NORMAL)\r
+    return r;\r
+  else if (r > ONIG_NORMAL) {\r
+    val.l = 0;\r
+  }\r
+\r
+  val.l++;\r
+  r = onig_set_callout_data_by_callout_args_self(args, slot, ONIG_TYPE_LONG, &val);\r
+  if (r != ONIG_NORMAL) return r;\r
+\r
+  return ONIG_CALLOUT_SUCCESS;\r
+}\r
+\r
+extern int\r
+onig_builtin_max(OnigCalloutArgs* args, void* user_data ARG_UNUSED)\r
+{\r
+  int r;\r
+  int slot;\r
+  long max_val;\r
+  OnigCodePoint count_type;\r
+  OnigType  type;\r
+  OnigValue val;\r
+  OnigValue aval;\r
+\r
+  (void )onig_check_callout_data_and_clear_old_values(args);\r
+\r
+  slot = 0;\r
+  r = onig_get_callout_data_by_callout_args_self(args, slot, &type, &val);\r
+  if (r < ONIG_NORMAL)\r
+    return r;\r
+  else if (r > ONIG_NORMAL) {\r
+    /* type == void: initial state */\r
+    type  = ONIG_TYPE_LONG;\r
+    val.l = 0;\r
+  }\r
+\r
+  r = onig_get_arg_by_callout_args(args, 0, &type, &aval);\r
+  if (r != ONIG_NORMAL) return r;\r
+  if (type == ONIG_TYPE_TAG) {\r
+    r = onig_get_callout_data_by_callout_args(args, aval.tag, 0, &type, &aval);\r
+    if (r < ONIG_NORMAL) return r;\r
+    else if (r > ONIG_NORMAL)\r
+      max_val = 0L;\r
+    else\r
+      max_val = aval.l;\r
+  }\r
+  else { /* LONG */\r
+    max_val = aval.l;\r
+  }\r
+\r
+  r = onig_get_arg_by_callout_args(args, 1, &type, &aval);\r
+  if (r != ONIG_NORMAL) return r;\r
+\r
+  count_type = aval.c;\r
+  if (count_type != '>' && count_type != 'X' && count_type != '<')\r
+    return ONIGERR_INVALID_CALLOUT_ARG;\r
+\r
+  if (args->in == ONIG_CALLOUT_IN_RETRACTION) {\r
+    if (count_type == '<') {\r
+      if (val.l >= max_val) return ONIG_CALLOUT_FAIL;\r
+      val.l++;\r
+    }\r
+    else if (count_type == 'X')\r
+      val.l--;\r
+  }\r
+  else {\r
+    if (count_type != '<') {\r
+      if (val.l >= max_val) return ONIG_CALLOUT_FAIL;\r
+      val.l++;\r
+    }\r
+  }\r
+\r
+  r = onig_set_callout_data_by_callout_args_self(args, slot, ONIG_TYPE_LONG, &val);\r
+  if (r != ONIG_NORMAL) return r;\r
+\r
+  return ONIG_CALLOUT_SUCCESS;\r
+}\r
+\r
+enum OP_CMP {\r
+  OP_EQ,\r
+  OP_NE,\r
+  OP_LT,\r
+  OP_GT,\r
+  OP_LE,\r
+  OP_GE\r
+};\r
+\r
+extern int\r
+onig_builtin_cmp(OnigCalloutArgs* args, void* user_data ARG_UNUSED)\r
+{\r
+  int r;\r
+  int slot;\r
+  long lv;\r
+  long rv;\r
+  OnigType  type;\r
+  OnigValue val;\r
+  regex_t* reg;\r
+  enum OP_CMP op;\r
+\r
+  reg = args->regex;\r
+\r
+  r = onig_get_arg_by_callout_args(args, 0, &type, &val);\r
+  if (r != ONIG_NORMAL) return r;\r
+\r
+  if (type == ONIG_TYPE_TAG) {\r
+    r = onig_get_callout_data_by_callout_args(args, val.tag, 0, &type, &val);\r
+    if (r < ONIG_NORMAL) return r;\r
+    else if (r > ONIG_NORMAL)\r
+      lv = 0L;\r
+    else\r
+      lv = val.l;\r
+  }\r
+  else { /* ONIG_TYPE_LONG */\r
+    lv = val.l;\r
+  }\r
+\r
+  r = onig_get_arg_by_callout_args(args, 2, &type, &val);\r
+  if (r != ONIG_NORMAL) return r;\r
+\r
+  if (type == ONIG_TYPE_TAG) {\r
+    r = onig_get_callout_data_by_callout_args(args, val.tag, 0, &type, &val);\r
+    if (r < ONIG_NORMAL) return r;\r
+    else if (r > ONIG_NORMAL)\r
+      rv = 0L;\r
+    else\r
+      rv = val.l;\r
+  }\r
+  else { /* ONIG_TYPE_LONG */\r
+    rv = val.l;\r
+  }\r
+\r
+  slot = 0;\r
+  r = onig_get_callout_data_by_callout_args_self(args, slot, &type, &val);\r
+  if (r < ONIG_NORMAL)\r
+    return r;\r
+  else if (r > ONIG_NORMAL) {\r
+    /* type == void: initial state */\r
+    OnigCodePoint c1, c2;\r
+    UChar* p;\r
+\r
+    r = onig_get_arg_by_callout_args(args, 1, &type, &val);\r
+    if (r != ONIG_NORMAL) return r;\r
+\r
+    p = val.s.start;\r
+    c1 = ONIGENC_MBC_TO_CODE(reg->enc, p, val.s.end);\r
+    p += ONIGENC_MBC_ENC_LEN(reg->enc, p);\r
+    if (p < val.s.end) {\r
+      c2 = ONIGENC_MBC_TO_CODE(reg->enc, p, val.s.end);\r
+      p += ONIGENC_MBC_ENC_LEN(reg->enc, p);\r
+      if (p != val.s.end)  return ONIGERR_INVALID_CALLOUT_ARG;\r
+    }\r
+    else\r
+      c2 = 0;\r
+\r
+    switch (c1) {\r
+    case '=':\r
+      if (c2 != '=') return ONIGERR_INVALID_CALLOUT_ARG;\r
+      op = OP_EQ;\r
+      break;\r
+    case '!':\r
+      if (c2 != '=') return ONIGERR_INVALID_CALLOUT_ARG;\r
+      op = OP_NE;\r
+      break;\r
+    case '<':\r
+      if (c2 == '=') op = OP_LE;\r
+      else if (c2 == 0) op = OP_LT;\r
+      else  return ONIGERR_INVALID_CALLOUT_ARG;\r
+      break;\r
+    case '>':\r
+      if (c2 == '=') op = OP_GE;\r
+      else if (c2 == 0) op = OP_GT;\r
+      else  return ONIGERR_INVALID_CALLOUT_ARG;\r
+      break;\r
+    default:\r
+      return ONIGERR_INVALID_CALLOUT_ARG;\r
+      break;\r
+    }\r
+    val.l = (long )op;\r
+    r = onig_set_callout_data_by_callout_args_self(args, slot, ONIG_TYPE_LONG, &val);\r
+    if (r != ONIG_NORMAL) return r;\r
+  }\r
+  else {\r
+    op = (enum OP_CMP )val.l;\r
+  }\r
+\r
+  switch (op) {\r
+  case OP_EQ: r = (lv == rv); break;\r
+  case OP_NE: r = (lv != rv); break;\r
+  case OP_LT: r = (lv <  rv); break;\r
+  case OP_GT: r = (lv >  rv); break;\r
+  case OP_LE: r = (lv <= rv); break;\r
+  case OP_GE: r = (lv >= rv); break;\r
+  }\r
+\r
+  return r == 0 ? ONIG_CALLOUT_FAIL : ONIG_CALLOUT_SUCCESS;\r
+}\r
+\r
+\r
+//#include <stdio.h>\r
+\r
+static FILE* OutFp;\r
+\r
+/* name start with "onig_" for macros. */\r
+static int\r
+onig_builtin_monitor(OnigCalloutArgs* args, void* user_data)\r
+{\r
+  int r;\r
+  int num;\r
+  size_t tag_len;\r
+  const UChar* start;\r
+  const UChar* right;\r
+  const UChar* current;\r
+  const UChar* string;\r
+  const UChar* strend;\r
+  const UChar* tag_start;\r
+  const UChar* tag_end;\r
+  regex_t* reg;\r
+  OnigCalloutIn in;\r
+  OnigType type;\r
+  OnigValue val;\r
+  char buf[20];\r
+  FILE* fp;\r
+\r
+  fp = OutFp;\r
+\r
+  r = onig_get_arg_by_callout_args(args, 0, &type, &val);\r
+  if (r != ONIG_NORMAL) return r;\r
+\r
+  in = onig_get_callout_in_by_callout_args(args);\r
+  if (in == ONIG_CALLOUT_IN_PROGRESS) {\r
+    if (val.c == '<')\r
+      return ONIG_CALLOUT_SUCCESS;\r
+  }\r
+  else {\r
+    if (val.c != 'X' && val.c != '<')\r
+      return ONIG_CALLOUT_SUCCESS;\r
+  }\r
+\r
+  num       = onig_get_callout_num_by_callout_args(args);\r
+  start     = onig_get_start_by_callout_args(args);\r
+  right     = onig_get_right_range_by_callout_args(args);\r
+  current   = onig_get_current_by_callout_args(args);\r
+  string    = onig_get_string_by_callout_args(args);\r
+  strend    = onig_get_string_end_by_callout_args(args);\r
+  reg       = onig_get_regex_by_callout_args(args);\r
+  tag_start = onig_get_callout_tag_start(reg, num);\r
+  tag_end   = onig_get_callout_tag_end(reg, num);\r
+\r
+  if (tag_start == 0)\r
+    sprintf_s(buf, sizeof(buf), "#%d", num);\r
+  else {\r
+    /* CAUTION: tag string is not terminated with NULL. */\r
+    int i;\r
+\r
+    tag_len = tag_end - tag_start;\r
+    if (tag_len >= sizeof(buf)) tag_len = sizeof(buf) - 1;\r
+    for (i = 0; i < tag_len; i++) buf[i] = tag_start[i];\r
+    buf[tag_len] = '\0';\r
+  }\r
+\r
+  fprintf(fp, "ONIG-MONITOR: %-4s %s at: %d [%d - %d] len: %d\n",\r
+          buf,\r
+          in == ONIG_CALLOUT_IN_PROGRESS ? "=>" : "<=",\r
+          (int )(current - string),\r
+          (int )(start   - string),\r
+          (int )(right   - string),\r
+          (int )(strend  - string));\r
+  //fflush(fp);\r
+\r
+  return ONIG_CALLOUT_SUCCESS;\r
+}\r
+\r
+extern int\r
+onig_setup_builtin_monitors_by_ascii_encoded_name(void* fp /* FILE* */)\r
+{\r
+  int id;\r
+  char* name;\r
+  OnigEncoding enc;\r
+  unsigned int ts[4];\r
+  OnigValue opts[4];\r
+\r
+  if (IS_NOT_NULL(fp))\r
+    OutFp = (FILE* )fp;\r
+  else\r
+    OutFp = stdout;\r
+\r
+  enc = ONIG_ENCODING_ASCII;\r
+\r
+  name = "MON";\r
+  ts[0] = ONIG_TYPE_CHAR;\r
+  opts[0].c = '>';\r
+  BC_B_O(name, monitor, 1, ts, 1, opts);\r
+\r
+  return ONIG_NORMAL;\r
+}\r
+\r
+#endif /* USE_CALLOUT */\r
index f9af9ca93c248295ffd8edcd2d0f38dbe0e2f0a3..fb1537eccb2414ce3d9cc0f11a595a7d82f05137 100644 (file)
@@ -2,11 +2,9 @@
   reggnu.c -  Oniguruma (regular expression library)\r
 **********************************************************************/\r
 /*-\r
- * Copyright (c) 2002-2008  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
  * All rights reserved.\r
  *\r
- * (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>\r
- *\r
  * Redistribution and use in source and binary forms, with or without\r
  * modification, are permitted provided that the following conditions\r
  * are met:\r
  */\r
 \r
 #include "regint.h"\r
-\r
-#ifndef ONIGGNU_H\r
 #include "oniggnu.h"\r
-#endif\r
 \r
 extern void\r
 re_free_registers(OnigRegion* r)\r
@@ -56,7 +51,7 @@ re_adjust_startpos(regex_t* reg, const char* string, int size,
     else {\r
       p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, (UChar* )string, s);\r
     }\r
-    return (int)(p - (UChar* )string);\r
+    return (int )(p - (UChar* )string);\r
   }\r
 \r
   return startpos;\r
@@ -95,29 +90,6 @@ re_compile_pattern(const char* pattern, int size, regex_t* reg, char* ebuf)
   return r;\r
 }\r
 \r
-#ifdef USE_RECOMPILE_API\r
-extern int\r
-re_recompile_pattern(const char* pattern, int size, regex_t* reg, char* ebuf)\r
-{\r
-  int r;\r
-  OnigErrorInfo einfo;\r
-  OnigEncoding enc;\r
-\r
-  /* I think encoding and options should be arguments of this function.\r
-     But this is adapted to present re.c. (2002/11/29)\r
-   */\r
-  enc = OnigEncDefaultCharEncoding;\r
-\r
-  r = onig_recompile(reg, (UChar* )pattern, (UChar* )(pattern + size),\r
-                    reg->options, enc, OnigDefaultSyntax, &einfo);\r
-  if (r != ONIG_NORMAL) {\r
-    if (IS_NOT_NULL(ebuf))\r
-      (void )onig_error_code_to_str((UChar* )ebuf, r, &einfo);\r
-  }\r
-  return r;\r
-}\r
-#endif\r
-\r
 extern void\r
 re_free_pattern(regex_t* reg)\r
 {\r
@@ -151,9 +123,9 @@ re_mbcinit(int mb_code)
   case RE_MBCTYPE_ASCII:\r
     enc = ONIG_ENCODING_ASCII;\r
     break;\r
-  default:\r
-    return;\r
   }\r
 \r
+  onig_initialize(&enc, 1);\r
+\r
   onigenc_set_default_encoding(enc);\r
 }\r
index d5b30898a36893fff1997684c19c841bb3b5db36..acfd1792ef55e23fc2df18aeaf7fe7474208ba2e 100644 (file)
@@ -4,7 +4,7 @@
   regint.h -  Oniguruma (regular expression library)\r
 **********************************************************************/\r
 /*-\r
- * Copyright (c) 2002-2013  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
  * All rights reserved.\r
  *\r
  * Redistribution and use in source and binary forms, with or without\r
@@ -30,7 +30,7 @@
  */\r
 \r
 /* for debug */\r
-/* #define ONIG_DEBUG_PARSE_TREE */\r
+/* #define ONIG_DEBUG_PARSE */\r
 /* #define ONIG_DEBUG_COMPILE */\r
 /* #define ONIG_DEBUG_SEARCH */\r
 /* #define ONIG_DEBUG_MATCH */\r
@@ -39,7 +39,7 @@
 /* for byte-code statistical data. */\r
 /* #define ONIG_DEBUG_STATISTICS */\r
 \r
-#if defined(ONIG_DEBUG_PARSE_TREE) || defined(ONIG_DEBUG_MATCH) || \\r
+#if defined(ONIG_DEBUG_PARSE) || defined(ONIG_DEBUG_MATCH) || \\r
     defined(ONIG_DEBUG_SEARCH) || defined(ONIG_DEBUG_COMPILE) || \\r
     defined(ONIG_DEBUG_STATISTICS)\r
 #ifndef ONIG_DEBUG\r
 \r
 /* config */\r
 /* spec. config */\r
-#define USE_NAMED_GROUP\r
-#define USE_SUBEXP_CALL\r
+#define USE_CALL\r
+#define USE_CALLOUT\r
 #define USE_BACKREF_WITH_LEVEL        /* \k<name+n>, \k<name-n> */\r
-#define USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT  /* /(?:()|())*\2/ */\r
+#define USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT    /* /(?:()|())*\2/ */\r
 #define USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE     /* /\n$/ =~ "\n" */\r
 #define USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR\r
-/* #define USE_RECOMPILE_API */\r
-/* !!! moved to regenc.h. */ /* #define USE_CRNL_AS_LINE_TERMINATOR */\r
+\r
+#define USE_RETRY_LIMIT_IN_MATCH\r
 \r
 /* internal config */\r
-#define USE_PARSE_TREE_NODE_RECYCLE\r
 #define USE_OP_PUSH_OR_JUMP_EXACT\r
-#define USE_QTFR_PEEK_NEXT\r
+#define USE_QUANT_PEEK_NEXT\r
 #define USE_ST_LIBRARY\r
-#define USE_SHARED_CCLASS_TABLE\r
 \r
-#define INIT_MATCH_STACK_SIZE                     160\r
-#define DEFAULT_MATCH_STACK_LIMIT_SIZE              0 /* unlimited */\r
+#include "regenc.h"\r
 \r
-#if defined(__GNUC__)\r
-#  define ARG_UNUSED  __attribute__ ((unused))\r
-#else\r
-#  define ARG_UNUSED\r
+#ifdef __cplusplus\r
+# ifndef  HAVE_STDARG_PROTOTYPES\r
+#  define HAVE_STDARG_PROTOTYPES 1\r
+# endif\r
+#endif\r
+\r
+/* escape Mac OS X/Xcode 2.4/gcc 4.0.1 problem */\r
+#if defined(__APPLE__) && defined(__GNUC__) && __GNUC__ >= 4\r
+# ifndef  HAVE_STDARG_PROTOTYPES\r
+#  define HAVE_STDARG_PROTOTYPES 1\r
+# endif\r
 #endif\r
 \r
+#ifdef HAVE_STDARG_H\r
+# ifndef  HAVE_STDARG_PROTOTYPES\r
+#  define HAVE_STDARG_PROTOTYPES 1\r
+# endif\r
+#endif\r
+\r
+\r
+#define INIT_MATCH_STACK_SIZE                     160\r
+#define DEFAULT_MATCH_STACK_LIMIT_SIZE              0 /* unlimited */\r
+#define DEFAULT_RETRY_LIMIT_IN_MATCH         10000000\r
+#define DEFAULT_PARSE_DEPTH_LIMIT                4096\r
+\r
 /* */\r
 /* escape other system UChar definition */\r
-//#include "config.h"\r
 #ifdef ONIG_ESCAPE_UCHAR_COLLISION\r
 #undef ONIG_ESCAPE_UCHAR_COLLISION\r
 #endif\r
 #define USE_VARIABLE_META_CHARS\r
 #define USE_POSIX_API_REGION_OPTION\r
 #define USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE\r
-/* #define USE_COMBINATION_EXPLOSION_CHECK */     /* (X*)* */\r
-\r
-/* #define USE_MULTI_THREAD_SYSTEM */\r
-#define THREAD_SYSTEM_INIT      /* depend on thread system */\r
-#define THREAD_SYSTEM_END       /* depend on thread system */\r
-#define THREAD_ATOMIC_START     /* depend on thread system */\r
-#define THREAD_ATOMIC_END       /* depend on thread system */\r
-#define THREAD_PASS             /* depend on thread system */\r
+\r
 #define xmalloc     malloc\r
 #define xrealloc    realloc\r
 #define xcalloc     calloc\r
 #define xfree       free\r
 \r
-#define CHECK_INTERRUPT_IN_MATCH_AT\r
-\r
 #define st_init_table                  onig_st_init_table\r
 #define st_init_table_with_size        onig_st_init_table_with_size\r
 #define st_init_numtable               onig_st_init_numtable\r
 /* */\r
 #define onig_st_is_member              st_is_member\r
 \r
-#define STATE_CHECK_STRING_THRESHOLD_LEN             7\r
-#define STATE_CHECK_BUFF_MAX_SIZE               0x4000\r
-\r
-#define THREAD_PASS_LIMIT_COUNT     8\r
 //#define xmemset     memset\r
 //#define xmemcpy     memcpy\r
 //#define xmemmove    memmove\r
 \r
 #if defined(_WIN32) && !defined(__GNUC__)\r
 #define xalloca     _alloca\r
-#define xvsnprintf  _vsnprintf\r
+#define xvsnprintf(buf,size,fmt,args)  _vsnprintf_s(buf,size,_TRUNCATE,fmt,args)\r
+#define xsnprintf   sprintf_s\r
+#define xstrcat(dest,src,size)   strcat_s(dest,size,src)\r
 #else\r
 #define xalloca     alloca\r
 #define xvsnprintf  vsnprintf\r
+#define xsnprintf   snprintf\r
+#define xstrcat(dest,src,size)   strcat(dest,src)\r
 #endif\r
 \r
 \r
-#if defined(USE_RECOMPILE_API) && defined(USE_MULTI_THREAD_SYSTEM)\r
-#define ONIG_STATE_INC(reg) (reg)->state++\r
-#define ONIG_STATE_DEC(reg) (reg)->state--\r
+// #include <stddef.h>\r
 \r
-#define ONIG_STATE_INC_THREAD(reg) do {\\r
-  THREAD_ATOMIC_START;\\r
-  (reg)->state++;\\r
-  THREAD_ATOMIC_END;\\r
-} while(0)\r
-#define ONIG_STATE_DEC_THREAD(reg) do {\\r
-  THREAD_ATOMIC_START;\\r
-  (reg)->state--;\\r
-  THREAD_ATOMIC_END;\\r
-} while(0)\r
-#else\r
-#define ONIG_STATE_INC(reg)         /* Nothing */\r
-#define ONIG_STATE_DEC(reg)         /* Nothing */\r
-#define ONIG_STATE_INC_THREAD(reg)  /* Nothing */\r
-#define ONIG_STATE_DEC_THREAD(reg)  /* Nothing */\r
-#endif /* USE_RECOMPILE_API && USE_MULTI_THREAD_SYSTEM */\r
+#ifdef HAVE_LIMITS_H\r
+#include <limits.h>\r
+#endif\r
 \r
 #if 0\r
 #ifdef HAVE_STDLIB_H\r
 #include <stdlib.h>\r
 #endif\r
 \r
+#ifdef HAVE_STDINT_H\r
+#include <stdint.h>\r
+#endif\r
+\r
 #if defined(HAVE_ALLOCA_H) && !defined(__GNUC__)\r
 #include <alloca.h>\r
 #endif\r
 #endif\r
 #endif\r
 \r
+#ifdef HAVE_INTTYPES_H\r
+#include <inttypes.h>\r
+#endif\r
+\r
 #ifdef __BORLANDC__\r
 #include <malloc.h>\r
 #endif\r
 #endif\r
 #endif\r
 \r
-#include "regenc.h"\r
+#ifdef _WIN32\r
+#if defined(_MSC_VER) && (_MSC_VER < 1300)\r
+typedef int  intptr_t;\r
+typedef unsigned int  uintptr_t;\r
+#endif\r
+#endif\r
+\r
+typedef INTN  intptr_t;\r
+typedef UINTN uintptr_t;\r
+\r
+#ifndef offsetof\r
+#define offsetof OFFSET_OF\r
+#endif\r
 \r
 #ifdef MIN\r
 #undef MIN\r
 #ifdef MAX\r
 #undef MAX\r
 #endif\r
+\r
 #define MIN(a,b) (((a)>(b))?(b):(a))\r
 #define MAX(a,b) (((a)<(b))?(b):(a))\r
 \r
 #define CHECK_NULL_RETURN_MEMERR(p)   if (IS_NULL(p)) return ONIGERR_MEMORY\r
 #define NULL_UCHARP                   ((UChar* )0)\r
 \r
+#define INFINITE_LEN        ONIG_INFINITE_DISTANCE\r
+\r
 #ifdef PLATFORM_UNALIGNED_WORD_ACCESS\r
 \r
 #define PLATFORM_GET_INC(val,p,type) do{\\r
 } while(0)\r
 \r
 /* sizeof(OnigCodePoint) */\r
-#define WORD_ALIGNMENT_SIZE     SIZEOF_LONG\r
+#ifdef SIZEOF_SIZE_T\r
+# define WORD_ALIGNMENT_SIZE     SIZEOF_SIZE_T\r
+#else\r
+# define WORD_ALIGNMENT_SIZE     SIZEOF_LONG\r
+#endif\r
 \r
 #define GET_ALIGNMENT_PAD_SIZE(addr,pad_size) do {\\r
-  (pad_size) = WORD_ALIGNMENT_SIZE \\r
-               - ((unsigned int )(UINTN)(addr) % WORD_ALIGNMENT_SIZE);\\r
+  (pad_size) = WORD_ALIGNMENT_SIZE - ((uintptr_t )(addr) % WORD_ALIGNMENT_SIZE);\\r
   if ((pad_size) == WORD_ALIGNMENT_SIZE) (pad_size) = 0;\\r
 } while (0)\r
 \r
 #define ALIGNMENT_RIGHT(addr) do {\\r
   (addr) += (WORD_ALIGNMENT_SIZE - 1);\\r
-  (addr) -= ((unsigned int )(UINTN)(addr) % WORD_ALIGNMENT_SIZE);\\r
+  (addr) -= ((uintptr_t )(addr) % WORD_ALIGNMENT_SIZE);\\r
 } while (0)\r
 \r
 #endif /* PLATFORM_UNALIGNED_WORD_ACCESS */\r
 \r
+\r
+#ifdef USE_CALLOUT\r
+\r
+typedef struct {\r
+  int           flag;\r
+  OnigCalloutOf of;\r
+  int           in;\r
+  int           name_id;\r
+  const UChar*  tag_start;\r
+  const UChar*  tag_end;\r
+  OnigCalloutType type;\r
+  OnigCalloutFunc start_func;\r
+  OnigCalloutFunc end_func;\r
+  union {\r
+    struct {\r
+      const UChar* start;\r
+      const UChar* end;\r
+    } content;\r
+    struct {\r
+      int num;\r
+      int passed_num;\r
+      OnigType  types[ONIG_CALLOUT_MAX_ARGS_NUM];\r
+      OnigValue vals[ONIG_CALLOUT_MAX_ARGS_NUM];\r
+    } arg;\r
+  } u;\r
+} CalloutListEntry;\r
+\r
+#endif\r
+\r
+typedef struct {\r
+  const UChar* pattern;\r
+  const UChar* pattern_end;\r
+#ifdef USE_CALLOUT\r
+  void*  tag_table;\r
+  int    callout_num;\r
+  int    callout_list_alloc;\r
+  CalloutListEntry* callout_list;    /* index: callout num */\r
+#endif\r
+} RegexExt;\r
+\r
+#define REG_EXTP(reg)      ((RegexExt* )((reg)->chain))\r
+#define REG_EXTPL(reg)     ((reg)->chain)\r
+\r
+struct re_pattern_buffer {\r
+  /* common members of BBuf(bytes-buffer) */\r
+  unsigned char* p;         /* compiled pattern */\r
+  unsigned int used;        /* used space for p */\r
+  unsigned int alloc;       /* allocated space for p */\r
+\r
+  int num_mem;                   /* used memory(...) num counted from 1 */\r
+  int num_repeat;                /* OP_REPEAT/OP_REPEAT_NG id-counter */\r
+  int num_null_check;            /* OP_EMPTY_CHECK_START/END id counter */\r
+  int num_comb_exp_check;        /* no longer used (combination explosion check) */\r
+  int num_call;                  /* number of subexp call */\r
+  unsigned int capture_history;  /* (?@...) flag (1-31) */\r
+  unsigned int bt_mem_start;     /* need backtrack flag */\r
+  unsigned int bt_mem_end;       /* need backtrack flag */\r
+  int stack_pop_level;\r
+  int repeat_range_alloc;\r
+  OnigRepeatRange* repeat_range;\r
+\r
+  OnigEncoding      enc;\r
+  OnigOptionType    options;\r
+  OnigSyntaxType*   syntax;\r
+  OnigCaseFoldType  case_fold_flag;\r
+  void*             name_table;\r
+\r
+  /* optimization info (string search, char-map and anchors) */\r
+  int            optimize;          /* optimize flag */\r
+  int            threshold_len;     /* search str-length for apply optimize */\r
+  int            anchor;            /* BEGIN_BUF, BEGIN_POS, (SEMI_)END_BUF */\r
+  OnigLen   anchor_dmin;       /* (SEMI_)END_BUF anchor distance */\r
+  OnigLen   anchor_dmax;       /* (SEMI_)END_BUF anchor distance */\r
+  int            sub_anchor;        /* start-anchor for exact or map */\r
+  unsigned char *exact;\r
+  unsigned char *exact_end;\r
+  unsigned char  map[ONIG_CHAR_TABLE_SIZE]; /* used as BM skip or char-map */\r
+  int           *int_map;                   /* BM skip for exact_len > 255 */\r
+  int           *int_map_backward;          /* BM skip for backward search */\r
+  OnigLen   dmin;                      /* min-distance of exact or map */\r
+  OnigLen   dmax;                      /* max-distance of exact or map */\r
+\r
+  /* regex_t link chain */\r
+  struct re_pattern_buffer* chain;  /* escape compile-conflict */\r
+};\r
+\r
+\r
 /* stack pop level */\r
-#define STACK_POP_LEVEL_FREE        0\r
-#define STACK_POP_LEVEL_MEM_START   1\r
-#define STACK_POP_LEVEL_ALL         2\r
+enum StackPopLevel {\r
+  STACK_POP_LEVEL_FREE      = 0,\r
+  STACK_POP_LEVEL_MEM_START = 1,\r
+  STACK_POP_LEVEL_ALL       = 2\r
+};\r
 \r
 /* optimize flags */\r
-#define ONIG_OPTIMIZE_NONE              0\r
-#define ONIG_OPTIMIZE_EXACT             1   /* Slow Search */\r
-#define ONIG_OPTIMIZE_EXACT_BM          2   /* Boyer Moore Search */\r
-#define ONIG_OPTIMIZE_EXACT_BM_NOT_REV  3   /* BM   (but not simple match) */\r
-#define ONIG_OPTIMIZE_EXACT_IC          4   /* Slow Search (ignore case) */\r
-#define ONIG_OPTIMIZE_MAP               5   /* char map */\r
+enum OptimizeType {\r
+  OPTIMIZE_NONE            = 0,\r
+  OPTIMIZE_EXACT           = 1,  /* Slow Search */\r
+  OPTIMIZE_EXACT_BM        = 2,  /* Boyer Moore Search */\r
+  OPTIMIZE_EXACT_BM_NO_REV = 3,  /* BM   (but not simple match) */\r
+  OPTIMIZE_EXACT_IC        = 4,  /* Slow Search (ignore case) */\r
+  OPTIMIZE_MAP             = 5   /* char map */\r
+};\r
 \r
 /* bit status */\r
-typedef unsigned int  BitStatusType;\r
-\r
-#define BIT_STATUS_BITS_NUM          (sizeof(BitStatusType) * 8)\r
-#define BIT_STATUS_CLEAR(stats)      (stats) = 0\r
-#define BIT_STATUS_ON_ALL(stats)     (stats) = ~((BitStatusType )0)\r
-#define BIT_STATUS_AT(stats,n) \\r
-  ((n) < (int )BIT_STATUS_BITS_NUM  ?  ((stats) & (1 << n)) : ((stats) & 1))\r
-\r
-#define BIT_STATUS_ON_AT(stats,n) do {\\r
-    if ((n) < (int )BIT_STATUS_BITS_NUM)       \\r
-    (stats) |= (1 << (n));\\r
+typedef unsigned int  MemStatusType;\r
+\r
+#define MEM_STATUS_BITS_NUM          (sizeof(MemStatusType) * 8)\r
+#define MEM_STATUS_CLEAR(stats)      (stats) = 0\r
+#define MEM_STATUS_ON_ALL(stats)     (stats) = ~((MemStatusType )0)\r
+#define MEM_STATUS_AT(stats,n) \\r
+  ((n) < (int )MEM_STATUS_BITS_NUM  ?  ((stats) & ((MemStatusType )1 << n)) : ((stats) & 1))\r
+#define MEM_STATUS_AT0(stats,n) \\r
+  ((n) > 0 && (n) < (int )MEM_STATUS_BITS_NUM  ?  ((stats) & ((MemStatusType )1 << n)) : ((stats) & 1))\r
+\r
+#define MEM_STATUS_ON(stats,n) do {\\r
+  if ((n) < (int )MEM_STATUS_BITS_NUM) {\\r
+    if ((n) != 0)\\r
+      (stats) |= ((MemStatusType )1 << (n));\\r
+  }\\r
   else\\r
     (stats) |= 1;\\r
 } while (0)\r
 \r
-#define BIT_STATUS_ON_AT_SIMPLE(stats,n) do {\\r
-    if ((n) < (int )BIT_STATUS_BITS_NUM)\\r
-    (stats) |= (1 << (n));\\r
+#define MEM_STATUS_ON_SIMPLE(stats,n) do {\\r
+    if ((n) < (int )MEM_STATUS_BITS_NUM)\\r
+    (stats) |= ((MemStatusType )1 << (n));\\r
 } while (0)\r
 \r
 \r
 #define INT_MAX_LIMIT           ((1UL << (SIZEOF_INT * 8 - 1)) - 1)\r
 \r
+#define IS_CODE_WORD_ASCII(enc,code) \\r
+  (ONIGENC_IS_CODE_ASCII(code) && ONIGENC_IS_CODE_WORD(enc,code))\r
+#define IS_CODE_DIGIT_ASCII(enc, code) \\r
+  (ONIGENC_IS_CODE_ASCII(code) && ONIGENC_IS_CODE_DIGIT(enc,code))\r
+#define IS_CODE_XDIGIT_ASCII(enc, code) \\r
+  (ONIGENC_IS_CODE_ASCII(code) && ONIGENC_IS_CODE_XDIGIT(enc,code))\r
+\r
 #define DIGITVAL(code)    ((code) - '0')\r
 #define ODIGITVAL(code)   DIGITVAL(code)\r
 #define XDIGITVAL(enc,code) \\r
-  (ONIGENC_IS_CODE_DIGIT(enc,code) ? DIGITVAL(code) \\r
+  (IS_CODE_DIGIT_ASCII(enc,code) ? DIGITVAL(code) \\r
    : (ONIGENC_IS_CODE_UPPER(enc,code) ? (code) - 'A' + 10 : (code) - 'a' + 10))\r
 \r
 #define IS_SINGLELINE(option)     ((option) & ONIG_OPTION_SINGLELINE)\r
@@ -299,12 +418,20 @@ typedef unsigned int  BitStatusType;
 #define IS_NOTEOL(option)         ((option) & ONIG_OPTION_NOTEOL)\r
 #define IS_POSIX_REGION(option)   ((option) & ONIG_OPTION_POSIX_REGION)\r
 \r
-/* OP_SET_OPTION is required for these options.\r
-#define IS_DYNAMIC_OPTION(option) \\r
-  (((option) & (ONIG_OPTION_MULTILINE | ONIG_OPTION_IGNORECASE)) != 0)\r
-*/\r
-/* ignore-case and multibyte status are included in compiled code. */\r
-#define IS_DYNAMIC_OPTION(option)  0\r
+#define IS_WORD_ASCII(option) \\r
+  ((option) & (ONIG_OPTION_WORD_IS_ASCII | ONIG_OPTION_POSIX_IS_ASCII))\r
+#define IS_DIGIT_ASCII(option) \\r
+  ((option) & (ONIG_OPTION_DIGIT_IS_ASCII | ONIG_OPTION_POSIX_IS_ASCII))\r
+#define IS_SPACE_ASCII(option) \\r
+  ((option) & (ONIG_OPTION_SPACE_IS_ASCII | ONIG_OPTION_POSIX_IS_ASCII))\r
+#define IS_POSIX_ASCII(option)    ((option) & ONIG_OPTION_POSIX_IS_ASCII)\r
+\r
+#define IS_ASCII_MODE_CTYPE_OPTION(ctype, options) \\r
+  ((ctype) >= 0 && \\r
+  (((ctype) < ONIGENC_CTYPE_ASCII  && IS_POSIX_ASCII(options)) ||\\r
+   ((ctype) == ONIGENC_CTYPE_WORD  && IS_WORD_ASCII(options))  ||\\r
+   ((ctype) == ONIGENC_CTYPE_DIGIT && IS_DIGIT_ASCII(options)) ||\\r
+   ((ctype) == ONIGENC_CTYPE_SPACE && IS_SPACE_ASCII(options))))\r
 \r
 #define DISABLE_CASE_FOLD_MULTI_CHAR(case_fold_flag) \\r
   ((case_fold_flag) & ~INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR)\r
@@ -329,8 +456,8 @@ typedef Bits*          BitSetRef;
 #define SIZE_BITSET        sizeof(BitSet)\r
 \r
 #define BITSET_CLEAR(bs) do {\\r
-  int id;\\r
-  for (id = 0; id < (int )BITSET_SIZE; id++) { (bs)[id] = 0; } \\r
+  int i;\\r
+  for (i = 0; i < (int )BITSET_SIZE; i++) { (bs)[i] = 0; } \\r
 } while (0)\r
 \r
 #define BS_ROOM(bs,pos)            (bs)[pos / BITS_IN_ROOM]\r
@@ -348,22 +475,22 @@ typedef struct _BBuf {
   unsigned int alloc;\r
 } BBuf;\r
 \r
-#define BBUF_INIT(buf,size)    onig_bbuf_init((BBuf* )(buf), (size))\r
+#define BB_INIT(buf,size)    onig_bbuf_init((BBuf* )(buf), (size))\r
 \r
-#define BBUF_SIZE_INC(buf,inc) do{\\r
+#define BB_SIZE_INC(buf,inc) do{\\r
   (buf)->alloc += (inc);\\r
   (buf)->p = (UChar* )xrealloc((buf)->p, (buf)->alloc);\\r
   if (IS_NULL((buf)->p)) return(ONIGERR_MEMORY);\\r
 } while (0)\r
 \r
-#define BBUF_EXPAND(buf,low) do{\\r
+#define BB_EXPAND(buf,low) do{\\r
   unsigned int OldSize_ = (buf)->alloc * sizeof((buf)->p[0]);\\r
   do { (buf)->alloc *= 2; } while ((buf)->alloc < (unsigned int )low);\\r
   (buf)->p = (UChar* )xrealloc((buf)->p, (buf)->alloc, OldSize_);\\r
   if (IS_NULL((buf)->p)) return(ONIGERR_MEMORY);\\r
 } while (0)\r
 \r
-#define BBUF_ENSURE_SIZE(buf,size) do{\\r
+#define BB_ENSURE_SIZE(buf,size) do{\\r
   unsigned int new_alloc = (buf)->alloc;\\r
   while (new_alloc < (unsigned int )(size)) { new_alloc *= 2; }\\r
   if ((buf)->alloc != new_alloc) {\\r
@@ -373,74 +500,83 @@ typedef struct _BBuf {
   }\\r
 } while (0)\r
 \r
-#define BBUF_WRITE(buf,pos,bytes,n) do{\\r
+#define BB_WRITE(buf,pos,bytes,n) do{\\r
   int used = (pos) + (n);\\r
-  if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\\r
+  if ((buf)->alloc < (unsigned int )used) BB_EXPAND((buf),used);\\r
   xmemcpy((buf)->p + (pos), (bytes), (n));\\r
   if ((buf)->used < (unsigned int )used) (buf)->used = used;\\r
 } while (0)\r
 \r
-#define BBUF_WRITE1(buf,pos,byte) do{\\r
+#define BB_WRITE1(buf,pos,byte) do{\\r
   int used = (pos) + 1;\\r
-  if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\\r
+  if ((buf)->alloc < (unsigned int )used) BB_EXPAND((buf),used);\\r
   (buf)->p[(pos)] = (byte);\\r
   if ((buf)->used < (unsigned int )used) (buf)->used = used;\\r
 } while (0)\r
 \r
-#define BBUF_ADD(buf,bytes,n)       BBUF_WRITE((buf),(buf)->used,(bytes),(n))\r
-#define BBUF_ADD1(buf,byte)         BBUF_WRITE1((buf),(buf)->used,(byte))\r
-#define BBUF_GET_ADD_ADDRESS(buf)   ((buf)->p + (buf)->used)\r
-#define BBUF_GET_OFFSET_POS(buf)    ((buf)->used)\r
+#define BB_ADD(buf,bytes,n)       BB_WRITE((buf),(buf)->used,(bytes),(n))\r
+#define BB_ADD1(buf,byte)         BB_WRITE1((buf),(buf)->used,(byte))\r
+#define BB_GET_ADD_ADDRESS(buf)   ((buf)->p + (buf)->used)\r
+#define BB_GET_OFFSET_POS(buf)    ((buf)->used)\r
 \r
 /* from < to */\r
-#define BBUF_MOVE_RIGHT(buf,from,to,n) do {\\r
-  if ((unsigned int )((to)+(n)) > (buf)->alloc) BBUF_EXPAND((buf),(to) + (n));\\r
+#define BB_MOVE_RIGHT(buf,from,to,n) do {\\r
+  if ((unsigned int )((to)+(n)) > (buf)->alloc) BB_EXPAND((buf),(to) + (n));\\r
   xmemmove((buf)->p + (to), (buf)->p + (from), (n));\\r
   if ((unsigned int )((to)+(n)) > (buf)->used) (buf)->used = (to) + (n);\\r
 } while (0)\r
 \r
 /* from > to */\r
-#define BBUF_MOVE_LEFT(buf,from,to,n) do {\\r
+#define BB_MOVE_LEFT(buf,from,to,n) do {\\r
   xmemmove((buf)->p + (to), (buf)->p + (from), (n));\\r
 } while (0)\r
 \r
 /* from > to */\r
-#define BBUF_MOVE_LEFT_REDUCE(buf,from,to) do {\\r
+#define BB_MOVE_LEFT_REDUCE(buf,from,to) do {\\r
   xmemmove((buf)->p + (to), (buf)->p + (from), (buf)->used - (from));\\r
   (buf)->used -= (from - to);\\r
 } while (0)\r
 \r
-#define BBUF_INSERT(buf,pos,bytes,n) do {\\r
+#define BB_INSERT(buf,pos,bytes,n) do {\\r
   if (pos >= (buf)->used) {\\r
-    BBUF_WRITE(buf,pos,bytes,n);\\r
+    BB_WRITE(buf,pos,bytes,n);\\r
   }\\r
   else {\\r
-    BBUF_MOVE_RIGHT((buf),(pos),(pos) + (n),((buf)->used - (pos)));\\r
+    BB_MOVE_RIGHT((buf),(pos),(pos) + (n),((buf)->used - (pos)));\\r
     xmemcpy((buf)->p + (pos), (bytes), (n));\\r
   }\\r
 } while (0)\r
 \r
-#define BBUF_GET_BYTE(buf, pos) (buf)->p[(pos)]\r
-\r
-\r
-#define ANCHOR_BEGIN_BUF        (1<<0)\r
-#define ANCHOR_BEGIN_LINE       (1<<1)\r
-#define ANCHOR_BEGIN_POSITION   (1<<2)\r
-#define ANCHOR_END_BUF          (1<<3)\r
-#define ANCHOR_SEMI_END_BUF     (1<<4)\r
-#define ANCHOR_END_LINE         (1<<5)\r
-\r
-#define ANCHOR_WORD_BOUND       (1<<6)\r
-#define ANCHOR_NOT_WORD_BOUND   (1<<7)\r
-#define ANCHOR_WORD_BEGIN       (1<<8)\r
-#define ANCHOR_WORD_END         (1<<9)\r
-#define ANCHOR_PREC_READ        (1<<10)\r
-#define ANCHOR_PREC_READ_NOT    (1<<11)\r
-#define ANCHOR_LOOK_BEHIND      (1<<12)\r
-#define ANCHOR_LOOK_BEHIND_NOT  (1<<13)\r
-\r
-#define ANCHOR_ANYCHAR_STAR     (1<<14)   /* ".*" optimize info */\r
-#define ANCHOR_ANYCHAR_STAR_ML  (1<<15)   /* ".*" optimize info (multi-line) */\r
+#define BB_GET_BYTE(buf, pos) (buf)->p[(pos)]\r
+\r
+\r
+/* has body */\r
+#define ANCHOR_PREC_READ        (1<<0)\r
+#define ANCHOR_PREC_READ_NOT    (1<<1)\r
+#define ANCHOR_LOOK_BEHIND      (1<<2)\r
+#define ANCHOR_LOOK_BEHIND_NOT  (1<<3)\r
+/* no body */\r
+#define ANCHOR_BEGIN_BUF        (1<<4)\r
+#define ANCHOR_BEGIN_LINE       (1<<5)\r
+#define ANCHOR_BEGIN_POSITION   (1<<6)\r
+#define ANCHOR_END_BUF          (1<<7)\r
+#define ANCHOR_SEMI_END_BUF     (1<<8)\r
+#define ANCHOR_END_LINE         (1<<9)\r
+#define ANCHOR_WORD_BOUNDARY    (1<<10)\r
+#define ANCHOR_NO_WORD_BOUNDARY (1<<11)\r
+#define ANCHOR_WORD_BEGIN       (1<<12)\r
+#define ANCHOR_WORD_END         (1<<13)\r
+#define ANCHOR_ANYCHAR_INF      (1<<14)\r
+#define ANCHOR_ANYCHAR_INF_ML   (1<<15)\r
+#define ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY    (1<<16)\r
+#define ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY (1<<17)\r
+\r
+\r
+#define ANCHOR_HAS_BODY(a)      ((a)->type < ANCHOR_BEGIN_BUF)\r
+\r
+#define IS_WORD_ANCHOR_TYPE(type) \\r
+  ((type) == ANCHOR_WORD_BOUNDARY || (type) == ANCHOR_NO_WORD_BOUNDARY || \\r
+   (type) == ANCHOR_WORD_BEGIN || (type) == ANCHOR_WORD_END)\r
 \r
 /* operation code */\r
 enum OpCode {\r
@@ -469,7 +605,9 @@ enum OpCode {
   OP_CCLASS_NOT,\r
   OP_CCLASS_MB_NOT,\r
   OP_CCLASS_MIX_NOT,\r
+#ifdef USE_OP_CCLASS_NODE\r
   OP_CCLASS_NODE,       /* pointer to CClassNode node */\r
+#endif\r
 \r
   OP_ANYCHAR,                 /* "."  */\r
   OP_ANYCHAR_ML,              /* "."  multi-line */\r
@@ -479,12 +617,17 @@ enum OpCode {
   OP_ANYCHAR_ML_STAR_PEEK_NEXT,\r
 \r
   OP_WORD,\r
-  OP_NOT_WORD,\r
-  OP_WORD_BOUND,\r
-  OP_NOT_WORD_BOUND,\r
+  OP_WORD_ASCII,\r
+  OP_NO_WORD,\r
+  OP_NO_WORD_ASCII,\r
+  OP_WORD_BOUNDARY,\r
+  OP_NO_WORD_BOUNDARY,\r
   OP_WORD_BEGIN,\r
   OP_WORD_END,\r
 \r
+  OP_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY,\r
+  OP_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY,\r
+\r
   OP_BEGIN_BUF,\r
   OP_END_BUF,\r
   OP_BEGIN_LINE,\r
@@ -494,11 +637,13 @@ enum OpCode {
 \r
   OP_BACKREF1,\r
   OP_BACKREF2,\r
-  OP_BACKREFN,\r
-  OP_BACKREFN_IC,\r
+  OP_BACKREF_N,\r
+  OP_BACKREF_N_IC,\r
   OP_BACKREF_MULTI,\r
   OP_BACKREF_MULTI_IC,\r
-  OP_BACKREF_WITH_LEVEL,    /* \k<xxx+n>, \k<xxx-n> */\r
+  OP_BACKREF_WITH_LEVEL,        /* \k<xxx+n>, \k<xxx-n> */\r
+  OP_BACKREF_CHECK,             /* (?(n)), (?('name')) */\r
+  OP_BACKREF_CHECK_WITH_LEVEL,  /* (?(n-level)), (?('name-level')) */\r
 \r
   OP_MEMORY_START,\r
   OP_MEMORY_START_PUSH,   /* push back-tracker to stack */\r
@@ -510,7 +655,8 @@ enum OpCode {
   OP_FAIL,               /* pop stack and move */\r
   OP_JUMP,\r
   OP_PUSH,\r
-  OP_POP,\r
+  OP_PUSH_SUPER,\r
+  OP_POP_OUT,\r
   OP_PUSH_OR_JUMP_EXACT1,  /* if match exact then push, else jump. */\r
   OP_PUSH_IF_PEEK_NEXT,    /* if match exact then push, else none. */\r
   OP_REPEAT,               /* {n,m} */\r
@@ -519,54 +665,67 @@ enum OpCode {
   OP_REPEAT_INC_NG,        /* non greedy */\r
   OP_REPEAT_INC_SG,        /* search and get in stack */\r
   OP_REPEAT_INC_NG_SG,     /* search and get in stack (non greedy) */\r
-  OP_NULL_CHECK_START,     /* null loop checker start */\r
-  OP_NULL_CHECK_END,       /* null loop checker end   */\r
-  OP_NULL_CHECK_END_MEMST, /* null loop checker end (with capture status) */\r
-  OP_NULL_CHECK_END_MEMST_PUSH, /* with capture status and push check-end */\r
-\r
-  OP_PUSH_POS,             /* (?=...)  start */\r
-  OP_POP_POS,              /* (?=...)  end   */\r
-  OP_PUSH_POS_NOT,         /* (?!...)  start */\r
-  OP_FAIL_POS,             /* (?!...)  end   */\r
-  OP_PUSH_STOP_BT,         /* (?>...)  start */\r
-  OP_POP_STOP_BT,          /* (?>...)  end   */\r
-  OP_LOOK_BEHIND,          /* (?<=...) start (no needs end opcode) */\r
-  OP_PUSH_LOOK_BEHIND_NOT, /* (?<!...) start */\r
-  OP_FAIL_LOOK_BEHIND_NOT, /* (?<!...) end   */\r
-\r
-  OP_CALL,                 /* \g<name> */\r
+  OP_EMPTY_CHECK_START,     /* null loop checker start */\r
+  OP_EMPTY_CHECK_END,       /* null loop checker end   */\r
+  OP_EMPTY_CHECK_END_MEMST, /* null loop checker end (with capture status) */\r
+  OP_EMPTY_CHECK_END_MEMST_PUSH, /* with capture status and push check-end */\r
+\r
+  OP_PREC_READ_START,       /* (?=...)  start */\r
+  OP_PREC_READ_END,         /* (?=...)  end   */\r
+  OP_PREC_READ_NOT_START,   /* (?!...)  start */\r
+  OP_PREC_READ_NOT_END,     /* (?!...)  end   */\r
+  OP_ATOMIC_START,          /* (?>...)  start */\r
+  OP_ATOMIC_END,            /* (?>...)  end   */\r
+  OP_LOOK_BEHIND,           /* (?<=...) start (no needs end opcode) */\r
+  OP_LOOK_BEHIND_NOT_START, /* (?<!...) start */\r
+  OP_LOOK_BEHIND_NOT_END,   /* (?<!...) end   */\r
+\r
+  OP_CALL,                  /* \g<name> */\r
   OP_RETURN,\r
+  OP_PUSH_SAVE_VAL,\r
+  OP_UPDATE_VAR,\r
+#ifdef USE_CALLOUT\r
+  OP_CALLOUT_CONTENTS,      /* (?{...}) (?{{...}}) */\r
+  OP_CALLOUT_NAME,          /* (*name) (*name[tag](args...)) */\r
+#endif\r
+};\r
 \r
-  OP_STATE_CHECK_PUSH,         /* combination explosion check and push */\r
-  OP_STATE_CHECK_PUSH_OR_JUMP, /* check ok -> push, else jump  */\r
-  OP_STATE_CHECK,              /* check only */\r
-  OP_STATE_CHECK_ANYCHAR_STAR,\r
-  OP_STATE_CHECK_ANYCHAR_ML_STAR,\r
+enum SaveType {\r
+  SAVE_KEEP = 0, /* SAVE S */\r
+  SAVE_S = 1,\r
+  SAVE_RIGHT_RANGE = 2,\r
+};\r
 \r
-  /* no need: IS_DYNAMIC_OPTION() == 0 */\r
-  OP_SET_OPTION_PUSH,    /* set option and push recover option */\r
-  OP_SET_OPTION          /* set option */\r
+enum UpdateVarType {\r
+  UPDATE_VAR_KEEP_FROM_STACK_LAST     = 0,\r
+  UPDATE_VAR_S_FROM_STACK             = 1,\r
+  UPDATE_VAR_RIGHT_RANGE_FROM_STACK   = 2,\r
+  UPDATE_VAR_RIGHT_RANGE_FROM_S_STACK = 3,\r
+  UPDATE_VAR_RIGHT_RANGE_INIT         = 4,\r
 };\r
 \r
 typedef int RelAddrType;\r
 typedef int AbsAddrType;\r
 typedef int LengthType;\r
 typedef int RepeatNumType;\r
-typedef short int MemNumType;\r
-typedef short int StateCheckNumType;\r
+typedef int MemNumType;\r
 typedef void* PointerType;\r
+typedef int SaveType;\r
+typedef int UpdateVarType;\r
+typedef int ModeType;\r
 \r
 #define SIZE_OPCODE           1\r
 #define SIZE_RELADDR          sizeof(RelAddrType)\r
 #define SIZE_ABSADDR          sizeof(AbsAddrType)\r
 #define SIZE_LENGTH           sizeof(LengthType)\r
 #define SIZE_MEMNUM           sizeof(MemNumType)\r
-#define SIZE_STATE_CHECK_NUM  sizeof(StateCheckNumType)\r
 #define SIZE_REPEATNUM        sizeof(RepeatNumType)\r
 #define SIZE_OPTION           sizeof(OnigOptionType)\r
 #define SIZE_CODE_POINT       sizeof(OnigCodePoint)\r
 #define SIZE_POINTER          sizeof(PointerType)\r
-\r
+#define SIZE_SAVE_TYPE        sizeof(SaveType)\r
+#define SIZE_UPDATE_VAR_TYPE  sizeof(UpdateVarType)\r
+#define SIZE_MODE             sizeof(ModeType)\r
 \r
 #define GET_RELADDR_INC(addr,p)    PLATFORM_GET_INC(addr,   p, RelAddrType)\r
 #define GET_ABSADDR_INC(addr,p)    PLATFORM_GET_INC(addr,   p, AbsAddrType)\r
@@ -575,7 +734,9 @@ typedef void* PointerType;
 #define GET_REPEATNUM_INC(num,p)   PLATFORM_GET_INC(num,    p, RepeatNumType)\r
 #define GET_OPTION_INC(option,p)   PLATFORM_GET_INC(option, p, OnigOptionType)\r
 #define GET_POINTER_INC(ptr,p)     PLATFORM_GET_INC(ptr,    p, PointerType)\r
-#define GET_STATE_CHECK_NUM_INC(num,p)  PLATFORM_GET_INC(num, p, StateCheckNumType)\r
+#define GET_SAVE_TYPE_INC(type,p)       PLATFORM_GET_INC(type, p, SaveType)\r
+#define GET_UPDATE_VAR_TYPE_INC(type,p) PLATFORM_GET_INC(type, p, UpdateVarType)\r
+#define GET_MODE_INC(mode,p)            PLATFORM_GET_INC(mode, p, ModeType)\r
 \r
 /* code point's address must be aligned address. */\r
 #define GET_CODE_POINT(code,p)   code = *((OnigCodePoint* )(p))\r
@@ -590,17 +751,17 @@ typedef void* PointerType;
 #define SIZE_OP_ANYCHAR_STAR_PEEK_NEXT (SIZE_OPCODE + 1)\r
 #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)\r
 #define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)\r
-#define SIZE_OP_POP                     SIZE_OPCODE\r
+#define SIZE_OP_PUSH_SUPER             (SIZE_OPCODE + SIZE_RELADDR)\r
+#define SIZE_OP_POP_OUT                 SIZE_OPCODE\r
 #define SIZE_OP_PUSH_OR_JUMP_EXACT1    (SIZE_OPCODE + SIZE_RELADDR + 1)\r
 #define SIZE_OP_PUSH_IF_PEEK_NEXT      (SIZE_OPCODE + SIZE_RELADDR + 1)\r
 #define SIZE_OP_REPEAT_INC             (SIZE_OPCODE + SIZE_MEMNUM)\r
 #define SIZE_OP_REPEAT_INC_NG          (SIZE_OPCODE + SIZE_MEMNUM)\r
-#define SIZE_OP_PUSH_POS                SIZE_OPCODE\r
-#define SIZE_OP_PUSH_POS_NOT           (SIZE_OPCODE + SIZE_RELADDR)\r
-#define SIZE_OP_POP_POS                 SIZE_OPCODE\r
-#define SIZE_OP_FAIL_POS                SIZE_OPCODE\r
-#define SIZE_OP_SET_OPTION             (SIZE_OPCODE + SIZE_OPTION)\r
-#define SIZE_OP_SET_OPTION_PUSH        (SIZE_OPCODE + SIZE_OPTION)\r
+#define SIZE_OP_WORD_BOUNDARY          (SIZE_OPCODE + SIZE_MODE)\r
+#define SIZE_OP_PREC_READ_START         SIZE_OPCODE\r
+#define SIZE_OP_PREC_READ_NOT_START    (SIZE_OPCODE + SIZE_RELADDR)\r
+#define SIZE_OP_PREC_READ_END           SIZE_OPCODE\r
+#define SIZE_OP_PREC_READ_NOT_END       SIZE_OPCODE\r
 #define SIZE_OP_FAIL                    SIZE_OPCODE\r
 #define SIZE_OP_MEMORY_START           (SIZE_OPCODE + SIZE_MEMNUM)\r
 #define SIZE_OP_MEMORY_START_PUSH      (SIZE_OPCODE + SIZE_MEMNUM)\r
@@ -608,21 +769,21 @@ typedef void* PointerType;
 #define SIZE_OP_MEMORY_END_PUSH_REC    (SIZE_OPCODE + SIZE_MEMNUM)\r
 #define SIZE_OP_MEMORY_END             (SIZE_OPCODE + SIZE_MEMNUM)\r
 #define SIZE_OP_MEMORY_END_REC         (SIZE_OPCODE + SIZE_MEMNUM)\r
-#define SIZE_OP_PUSH_STOP_BT            SIZE_OPCODE\r
-#define SIZE_OP_POP_STOP_BT             SIZE_OPCODE\r
-#define SIZE_OP_NULL_CHECK_START       (SIZE_OPCODE + SIZE_MEMNUM)\r
-#define SIZE_OP_NULL_CHECK_END         (SIZE_OPCODE + SIZE_MEMNUM)\r
+#define SIZE_OP_ATOMIC_START            SIZE_OPCODE\r
+#define SIZE_OP_ATOMIC_END              SIZE_OPCODE\r
+#define SIZE_OP_EMPTY_CHECK_START       (SIZE_OPCODE + SIZE_MEMNUM)\r
+#define SIZE_OP_EMPTY_CHECK_END         (SIZE_OPCODE + SIZE_MEMNUM)\r
 #define SIZE_OP_LOOK_BEHIND            (SIZE_OPCODE + SIZE_LENGTH)\r
-#define SIZE_OP_PUSH_LOOK_BEHIND_NOT   (SIZE_OPCODE + SIZE_RELADDR + SIZE_LENGTH)\r
-#define SIZE_OP_FAIL_LOOK_BEHIND_NOT    SIZE_OPCODE\r
+#define SIZE_OP_LOOK_BEHIND_NOT_START  (SIZE_OPCODE + SIZE_RELADDR + SIZE_LENGTH)\r
+#define SIZE_OP_LOOK_BEHIND_NOT_END     SIZE_OPCODE\r
 #define SIZE_OP_CALL                   (SIZE_OPCODE + SIZE_ABSADDR)\r
 #define SIZE_OP_RETURN                  SIZE_OPCODE\r
+#define SIZE_OP_PUSH_SAVE_VAL          (SIZE_OPCODE + SIZE_SAVE_TYPE + SIZE_MEMNUM)\r
+#define SIZE_OP_UPDATE_VAR             (SIZE_OPCODE + SIZE_UPDATE_VAR_TYPE + SIZE_MEMNUM)\r
 \r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-#define SIZE_OP_STATE_CHECK            (SIZE_OPCODE + SIZE_STATE_CHECK_NUM)\r
-#define SIZE_OP_STATE_CHECK_PUSH       (SIZE_OPCODE + SIZE_STATE_CHECK_NUM + SIZE_RELADDR)\r
-#define SIZE_OP_STATE_CHECK_PUSH_OR_JUMP (SIZE_OPCODE + SIZE_STATE_CHECK_NUM + SIZE_RELADDR)\r
-#define SIZE_OP_STATE_CHECK_ANYCHAR_STAR (SIZE_OPCODE + SIZE_STATE_CHECK_NUM)\r
+#ifdef USE_CALLOUT\r
+#define SIZE_OP_CALLOUT_CONTENTS       (SIZE_OPCODE + SIZE_MEMNUM)\r
+#define SIZE_OP_CALLOUT_NAME           (SIZE_OPCODE + SIZE_MEMNUM + SIZE_MEMNUM)\r
 #endif\r
 \r
 #define MC_ESC(syn)               (syn)->meta_char_table.esc\r
@@ -673,148 +834,130 @@ typedef void* PointerType;
 #define FLAG_NCCLASS_SHARE         (1<<1)\r
 \r
 #define NCCLASS_SET_NOT(nd)     NCCLASS_FLAG_SET(nd, FLAG_NCCLASS_NOT)\r
-#define NCCLASS_SET_SHARE(nd)   NCCLASS_FLAG_SET(nd, FLAG_NCCLASS_SHARE)\r
 #define NCCLASS_CLEAR_NOT(nd)   NCCLASS_FLAG_CLEAR(nd, FLAG_NCCLASS_NOT)\r
 #define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)\r
-#define IS_NCCLASS_SHARE(nd)    IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_SHARE)\r
 \r
-typedef struct {\r
-  int type;\r
-  /* struct _Node* next; */\r
-  /* unsigned int flags; */\r
-} NodeBase;\r
+extern void onig_add_end_call(void (*func)(void));\r
 \r
-typedef struct {\r
-  NodeBase base;\r
-  unsigned int flags;\r
-  BitSet bs;\r
-  BBuf*  mbuf;   /* multi-byte info or NULL */\r
-} CClassNode;\r
 \r
-typedef long OnigStackIndex;\r
+#ifdef ONIG_DEBUG\r
 \r
-typedef struct _OnigStackType {\r
-  unsigned int type;\r
-  union {\r
-    struct {\r
-      UChar *pcode;      /* byte code position */\r
-      UChar *pstr;       /* string position */\r
-      UChar *pstr_prev;  /* previous char position of pstr */\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-      unsigned int state_check;\r
-#endif\r
-    } state;\r
-    struct {\r
-      int   count;       /* for OP_REPEAT_INC, OP_REPEAT_INC_NG */\r
-      UChar *pcode;      /* byte code position (head of repeated target) */\r
-      int   num;         /* repeat id */\r
-    } repeat;\r
-    struct {\r
-      OnigStackIndex si;     /* index of stack */\r
-    } repeat_inc;\r
-    struct {\r
-      int num;           /* memory num */\r
-      UChar *pstr;       /* start/end position */\r
-      /* Following information is setted, if this stack type is MEM-START */\r
-      OnigStackIndex start;  /* prev. info (for backtrack  "(...)*" ) */\r
-      OnigStackIndex end;    /* prev. info (for backtrack  "(...)*" ) */\r
-    } mem;\r
-    struct {\r
-      int num;           /* null check id */\r
-      UChar *pstr;       /* start position */\r
-    } null_check;\r
-#ifdef USE_SUBEXP_CALL\r
-    struct {\r
-      UChar *ret_addr;   /* byte code position */\r
-      int    num;        /* null check id */\r
-      UChar *pstr;       /* string position */\r
-    } call_frame;\r
+#ifdef ONIG_DEBUG_COMPILE\r
+extern void onig_print_compiled_byte_code_list(FILE* f, regex_t* reg);\r
 #endif\r
-  } u;\r
-} OnigStackType;\r
 \r
-typedef struct {\r
-  void* stack_p;\r
-  int   stack_n;\r
-  OnigOptionType options;\r
-  OnigRegion*    region;\r
-  const UChar* start;   /* search start position (for \G: BEGIN_POSITION) */\r
-#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE\r
-  int    best_len;      /* for ONIG_OPTION_FIND_LONGEST */\r
-  UChar* best_s;\r
+#ifdef ONIG_DEBUG_STATISTICS\r
+extern void onig_statistics_init P_((void));\r
+extern int  onig_print_statistics P_((FILE* f));\r
 #endif\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-  void* state_check_buff;\r
-  int   state_check_buff_size;\r
 #endif\r
-} OnigMatchArg;\r
 \r
+extern void   onig_warning(const char* s);\r
+extern UChar* onig_error_code_to_format P_((int code));\r
+extern void EFIAPI onig_snprintf_with_pattern PV_((UChar buf[], int bufsize, OnigEncoding enc, UChar* pat, UChar* pat_end, const UChar *fmt, ...));\r
+extern int    onig_bbuf_init P_((BBuf* buf, int size));\r
+extern int    onig_compile P_((regex_t* reg, const UChar* pattern, const UChar* pattern_end, OnigErrorInfo* einfo));\r
+extern void   onig_transfer P_((regex_t* to, regex_t* from));\r
+extern int    onig_is_code_in_cc_len P_((int enclen, OnigCodePoint code, void* /* CClassNode* */ cc));\r
+extern RegexExt* onig_get_regex_ext(regex_t* reg);\r
+extern int    onig_ext_set_pattern(regex_t* reg, const UChar* pattern, const UChar* pattern_end);\r
+\r
+#ifdef USE_CALLOUT\r
+\r
+extern OnigCalloutType onig_get_callout_type_by_name_id(int name_id);\r
+extern OnigCalloutFunc onig_get_callout_start_func_by_name_id(int id);\r
+extern OnigCalloutFunc onig_get_callout_end_func_by_name_id(int id);\r
+extern int             onig_callout_tag_table_free(void* table);\r
+extern void            onig_free_reg_callout_list(int n, CalloutListEntry* list);\r
+extern CalloutListEntry* onig_reg_callout_list_at(regex_t* reg, int num);\r
+extern OnigCalloutFunc onig_get_callout_start_func(regex_t* reg, int callout_num);\r
+\r
+/* for definition of builtin callout */\r
+#define BC0_P(name, func)  do {\\r
+  int len = onigenc_str_bytelen_null(enc, (UChar* )name);\\r
+  id = onig_set_callout_of_name(enc, ONIG_CALLOUT_TYPE_SINGLE,\\r
+                              (UChar* )(name), (UChar* )((name) + len),\\r
+                              ONIG_CALLOUT_IN_PROGRESS,\\r
+                              onig_builtin_ ## func, 0, 0, 0, 0, 0);\\r
+  if (id < 0) return id;\\r
+} while(0)\r
 \r
-#define IS_CODE_SB_WORD(enc,code) \\r
-  (ONIGENC_IS_CODE_ASCII(code) && ONIGENC_IS_CODE_WORD(enc,code))\r
+#define BC0_R(name, func)  do {\\r
+  int len = onigenc_str_bytelen_null(enc, (UChar* )name);\\r
+  id = onig_set_callout_of_name(enc, ONIG_CALLOUT_TYPE_SINGLE,\\r
+                              (UChar* )(name), (UChar* )((name) + len),\\r
+                              ONIG_CALLOUT_IN_RETRACTION,\\r
+                              onig_builtin_ ## func, 0, 0, 0, 0, 0);\\r
+  if (id < 0) return id;\\r
+} while(0)\r
 \r
-typedef struct OnigEndCallListItem {\r
-  struct OnigEndCallListItem* next;\r
-  void (*func)(void);\r
-} OnigEndCallListItemType;\r
+#define BC0_B(name, func)  do {\\r
+  int len = onigenc_str_bytelen_null(enc, (UChar* )name);\\r
+  id = onig_set_callout_of_name(enc, ONIG_CALLOUT_TYPE_SINGLE,\\r
+                              (UChar* )(name), (UChar* )((name) + len),\\r
+                              ONIG_CALLOUT_IN_BOTH,\\r
+                              onig_builtin_ ## func, 0, 0, 0, 0, 0);\\r
+  if (id < 0) return id;\\r
+} while(0)\r
 \r
-extern void onig_add_end_call(void (*func)(void));\r
+#define BC_P(name, func, na, ts)  do {\\r
+  int len = onigenc_str_bytelen_null(enc, (UChar* )name);\\r
+  id = onig_set_callout_of_name(enc, ONIG_CALLOUT_TYPE_SINGLE,\\r
+                              (UChar* )(name), (UChar* )((name) + len),\\r
+                              ONIG_CALLOUT_IN_PROGRESS,\\r
+                                onig_builtin_ ## func, 0, (na), (ts), 0, 0); \\r
+  if (id < 0) return id;\\r
+} while(0)\r
 \r
+#define BC_P_O(name, func, nts, ts, nopts, opts)  do {\\r
+  int len = onigenc_str_bytelen_null(enc, (UChar* )name);\\r
+  id = onig_set_callout_of_name(enc, ONIG_CALLOUT_TYPE_SINGLE,\\r
+                           (UChar* )(name), (UChar* )((name) + len),\\r
+                           ONIG_CALLOUT_IN_PROGRESS,\\r
+                           onig_builtin_ ## func, 0, (nts), (ts), (nopts), (opts));\\r
+  if (id < 0) return id;\\r
+} while(0)\r
 \r
-#ifdef ONIG_DEBUG\r
+#define BC_B(name, func, na, ts)  do {\\r
+  int len = onigenc_str_bytelen_null(enc, (UChar* )name);\\r
+  id = onig_set_callout_of_name(enc, ONIG_CALLOUT_TYPE_SINGLE,\\r
+                              (UChar* )(name), (UChar* )((name) + len),\\r
+                              ONIG_CALLOUT_IN_BOTH,\\r
+                              onig_builtin_ ## func, 0, (na), (ts), 0, 0);\\r
+  if (id < 0) return id;\\r
+} while(0)\r
 \r
-typedef struct {\r
-  short int opcode;\r
-  char*     name;\r
-  short int arg_type;\r
-} OnigOpInfoType;\r
+#define BC_B_O(name, func, nts, ts, nopts, opts)  do {\\r
+  int len = onigenc_str_bytelen_null(enc, (UChar* )name);\\r
+  id = onig_set_callout_of_name(enc, ONIG_CALLOUT_TYPE_SINGLE,\\r
+                           (UChar* )(name), (UChar* )((name) + len),\\r
+                           ONIG_CALLOUT_IN_BOTH,\\r
+                           onig_builtin_ ## func, 0, (nts), (ts), (nopts), (opts));\\r
+  if (id < 0) return id;\\r
+} while(0)\r
 \r
-extern OnigOpInfoType OnigOpInfo[];\r
+#endif /* USE_CALLOUT */\r
 \r
 \r
-extern void onig_print_compiled_byte_code P_((FILE* f, UChar* bp, UChar** nextp, OnigEncoding enc));\r
+/* strend hash */\r
+typedef void hash_table_type;\r
 \r
-#ifdef ONIG_DEBUG_STATISTICS\r
-extern void onig_statistics_init P_((void));\r
-extern void onig_print_statistics P_((FILE* f));\r
-#endif\r
+#ifdef _WIN32\r
+# include <windows.h>\r
+typedef ULONG_PTR hash_data_type;\r
+#else\r
+//typedef unsigned long hash_data_type;\r
 #endif\r
 \r
-extern UChar* onig_error_code_to_format P_((int code));\r
-extern void EFIAPI onig_snprintf_with_pattern PV_((UChar buf[], int bufsize, OnigEncoding enc, UChar* pat, UChar* pat_end, const UChar *fmt, ...));\r
-extern int  onig_bbuf_init P_((BBuf* buf, int size));\r
-extern int  onig_compile P_((regex_t* reg, const UChar* pattern, const UChar* pattern_end, OnigErrorInfo* einfo));\r
-extern void onig_chain_reduce P_((regex_t* reg));\r
-extern void onig_chain_link_add P_((regex_t* to, regex_t* add));\r
-extern void onig_transfer P_((regex_t* to, regex_t* from));\r
-extern int  onig_is_code_in_cc P_((OnigEncoding enc, OnigCodePoint code, CClassNode* cc));\r
-extern int  onig_is_code_in_cc_len P_((int enclen, OnigCodePoint code, CClassNode* cc));\r
-\r
-/* strend hash */\r
-typedef void hash_table_type;\r
-typedef unsigned long hash_data_type;\r
+typedef UINTN hash_data_type;\r
 \r
 extern hash_table_type* onig_st_init_strend_table_with_size P_((int size));\r
 extern int onig_st_lookup_strend P_((hash_table_type* table, const UChar* str_key, const UChar* end_key, hash_data_type *value));\r
 extern int onig_st_insert_strend P_((hash_table_type* table, const UChar* str_key, const UChar* end_key, hash_data_type value));\r
 \r
-/* encoding property management */\r
-#define PROPERTY_LIST_ADD_PROP(Name, CR) \\r
-  r = onigenc_property_list_add_property((UChar* )Name, CR,\\r
-             &PropertyNameTable, &PropertyList, &PropertyListNum,\\r
-             &PropertyListSize);\\r
-  if (r != 0) goto end\r
-\r
-#define PROPERTY_LIST_INIT_CHECK \\r
-  if (PropertyInited == 0) {\\r
-    int r = onigenc_property_list_init(init_property_list);\\r
-    if (r != 0) return r;\\r
-  }\r
-\r
-extern int onigenc_property_list_add_property P_((UChar* name, const OnigCodePoint* prop, hash_table_type **table, const OnigCodePoint*** plist, int *pnum, int *psize));\r
-\r
 typedef int (*ONIGENC_INIT_PROPERTY_LIST_FUNC_TYPE)(void);\r
 \r
-extern int onigenc_property_list_init P_((ONIGENC_INIT_PROPERTY_LIST_FUNC_TYPE));\r
-\r
 #endif /* REGINT_H */\r
+#include <ProcessorBind.h>\r
+#define INT_MAX MAX_INTN\r
+#define LONG_MAX MAX_UINTN\r
index a87fbfc426c047a5e71b839f0b5616f011d98b29..d274873aae3e9f7b9358009c3f2ffc92619b330d 100644 (file)
@@ -2,11 +2,9 @@
   regparse.c -  Oniguruma (regular expression library)\r
 **********************************************************************/\r
 /*-\r
- * Copyright (c) 2002-2008  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
  * All rights reserved.\r
  *\r
- * (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>\r
- *\r
  * Redistribution and use in source and binary forms, with or without\r
  * modification, are permitted provided that the following conditions\r
  * are met:\r
 #include "regparse.h"\r
 #include "st.h"\r
 \r
+#ifdef DEBUG_NODE_FREE\r
+#include <stdio.h>\r
+#endif\r
+\r
+#define INIT_TAG_NAMES_ALLOC_NUM   5\r
+\r
 #define WARN_BUFSIZE    256\r
 \r
 #define CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS\r
 \r
+#define IS_ALLOWED_CODE_IN_CALLOUT_NAME(c) \\r
+  ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '_' /* || c == '!' */)\r
+#define IS_ALLOWED_CODE_IN_CALLOUT_TAG_NAME(c) \\r
+  ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '_')\r
+\r
+\r
+OnigSyntaxType OnigSyntaxOniguruma = {\r
+  (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |\r
+     ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |\r
+     ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_O_BRACE_OCTAL |\r
+     ONIG_SYN_OP_ESC_CONTROL_CHARS |\r
+     ONIG_SYN_OP_ESC_C_CONTROL )\r
+   & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )\r
+  , ( ONIG_SYN_OP2_QMARK_GROUP_EFFECT |\r
+      ONIG_SYN_OP2_OPTION_RUBY |\r
+      ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP | ONIG_SYN_OP2_ESC_K_NAMED_BACKREF |\r
+      ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE |\r
+      ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP |\r
+      ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS |\r
+      ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME    |\r
+      ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER |\r
+      ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE |\r
+      ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT |\r
+      ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP |\r
+      ONIG_SYN_OP2_ESC_G_SUBEXP_CALL |\r
+      ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY  |\r
+      ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT |\r
+      ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT |\r
+      ONIG_SYN_OP2_CCLASS_SET_OP | ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL |\r
+      ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META | ONIG_SYN_OP2_ESC_V_VTAB |\r
+      ONIG_SYN_OP2_ESC_H_XDIGIT | ONIG_SYN_OP2_ESC_U_HEX4 )\r
+  , ( SYN_GNU_REGEX_BV | \r
+      ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV |\r
+      ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND |\r
+      ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP |\r
+      ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME |\r
+      ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY |\r
+      ONIG_SYN_WARN_CC_OP_NOT_ESCAPED |\r
+      ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT )\r
+  , ONIG_OPTION_NONE\r
+  ,\r
+  {\r
+      (OnigCodePoint )'\\'                       /* esc */\r
+    , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.'  */\r
+    , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*'  */\r
+    , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */\r
+    , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */\r
+    , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */\r
+  }\r
+};\r
 \r
 OnigSyntaxType OnigSyntaxRuby = {\r
   (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |\r
      ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |\r
-     ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_CONTROL_CHARS |\r
+     ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_O_BRACE_OCTAL |\r
+     ONIG_SYN_OP_ESC_CONTROL_CHARS |\r
      ONIG_SYN_OP_ESC_C_CONTROL )\r
    & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )\r
   , ( ONIG_SYN_OP2_QMARK_GROUP_EFFECT |\r
       ONIG_SYN_OP2_OPTION_RUBY |\r
       ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP | ONIG_SYN_OP2_ESC_K_NAMED_BACKREF |\r
+      ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE |\r
+      ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP |\r
+      ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER |\r
+      ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE |\r
+      ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP |\r
       ONIG_SYN_OP2_ESC_G_SUBEXP_CALL |\r
       ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY  |\r
       ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT |\r
       ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT |\r
       ONIG_SYN_OP2_CCLASS_SET_OP | ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL |\r
       ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META | ONIG_SYN_OP2_ESC_V_VTAB |\r
-      ONIG_SYN_OP2_ESC_H_XDIGIT )\r
+      ONIG_SYN_OP2_ESC_H_XDIGIT | ONIG_SYN_OP2_ESC_U_HEX4 )\r
   , ( SYN_GNU_REGEX_BV | \r
       ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV |\r
       ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND |\r
@@ -73,7 +133,7 @@ OnigSyntaxType OnigSyntaxRuby = {
   }\r
 };\r
 \r
-OnigSyntaxType*  OnigDefaultSyntax = ONIG_SYNTAX_RUBY;\r
+OnigSyntaxType*  OnigDefaultSyntax = ONIG_SYNTAX_ONIGURUMA;\r
 \r
 extern void onig_null_warn(const char* s ARG_UNUSED) { }\r
 \r
@@ -99,6 +159,56 @@ extern void onig_set_verb_warn_func(OnigWarnFunc f)
   onig_verb_warn = f;\r
 }\r
 \r
+extern void\r
+onig_warning(const char* s)\r
+{\r
+  if (onig_warn == onig_null_warn) return ;\r
+\r
+  (*onig_warn)(s);\r
+}\r
+\r
+#define DEFAULT_MAX_CAPTURE_NUM   32767\r
+\r
+static int MaxCaptureNum = DEFAULT_MAX_CAPTURE_NUM;\r
+\r
+extern int\r
+onig_set_capture_num_limit(int num)\r
+{\r
+  if (num < 0) return -1;\r
+\r
+  MaxCaptureNum = num;\r
+  return 0;\r
+}\r
+\r
+static unsigned int ParseDepthLimit = DEFAULT_PARSE_DEPTH_LIMIT;\r
+\r
+extern unsigned int\r
+onig_get_parse_depth_limit(void)\r
+{\r
+  return ParseDepthLimit;\r
+}\r
+\r
+extern int\r
+onig_set_parse_depth_limit(unsigned int depth)\r
+{\r
+  if (depth == 0)\r
+    ParseDepthLimit = DEFAULT_PARSE_DEPTH_LIMIT;\r
+  else\r
+    ParseDepthLimit = depth;\r
+  return 0;\r
+}\r
+\r
+static int\r
+positive_int_multiply(int x, int y)\r
+{\r
+  if (x == 0 || y == 0) return 0;\r
+\r
+  if (x < INT_MAX / y)\r
+    return x * y;\r
+  else\r
+    return -1;\r
+}\r
+\r
 static void\r
 bbuf_free(BBuf* bbuf)\r
 {\r
@@ -116,17 +226,31 @@ bbuf_clone(BBuf** rto, BBuf* from)
 \r
   *rto = to = (BBuf* )xmalloc(sizeof(BBuf));\r
   CHECK_NULL_RETURN_MEMERR(to);\r
-  r = BBUF_INIT(to, from->alloc);\r
-  if (r != 0) return r;\r
+  r = BB_INIT(to, from->alloc);\r
+  if (r != 0) {\r
+    xfree(to->p);\r
+    *rto = 0;\r
+    return r;\r
+  }\r
   to->used = from->used;\r
   xmemcpy(to->p, from->p, from->used);\r
   return 0;\r
 }\r
 \r
-#define BACKREF_REL_TO_ABS(rel_no, env) \\r
-  ((env)->num_mem + 1 + (rel_no))\r
+static int backref_rel_to_abs(int rel_no, ScanEnv* env)\r
+{\r
+  if (rel_no > 0) {\r
+    return env->num_mem + rel_no;\r
+  }\r
+  else {\r
+    return env->num_mem + 1 + rel_no;\r
+  }\r
+}\r
+\r
+#define OPTION_ON(v,f)     ((v) |= (f))\r
+#define OPTION_OFF(v,f)    ((v) &= ~(f))\r
 \r
-#define ONOFF(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))\r
+#define OPTION_NEGATE(v,f,negative)    (negative) ? ((v) &= ~(f)) : ((v) |= (f))\r
 \r
 #define MBCODE_START_POS(enc) \\r
   (OnigCodePoint )(ONIGENC_MBC_MINLEN(enc) > 1 ? 0 : 0x80)\r
@@ -137,7 +261,7 @@ bbuf_clone(BBuf** rto, BBuf* from)
 #define ADD_ALL_MULTI_BYTE_RANGE(enc, mbuf) do {\\r
   if (! ONIGENC_IS_SINGLEBYTE(enc)) {\\r
     r = SET_ALL_MULTI_BYTE_RANGE(enc, &(mbuf));\\r
-    if (r) return r;\\r
+    if (r != 0) return r;\\r
   }\\r
 } while (0)\r
 \r
@@ -220,33 +344,40 @@ onig_strncmp(const UChar* s1, const UChar* s2, int n)
 extern void\r
 onig_strcpy(UChar* dest, const UChar* src, const UChar* end)\r
 {\r
-  int len = (int)(end - src);\r
+  int len = (int )(end - src);\r
   if (len > 0) {\r
     xmemcpy(dest, src, len);\r
     dest[len] = (UChar )0;\r
   }\r
 }\r
 \r
-#ifdef USE_NAMED_GROUP\r
-static UChar*\r
-strdup_with_null(OnigEncoding enc, UChar* s, UChar* end)\r
+static int\r
+save_entry(ScanEnv* env, enum SaveType type, int* id)\r
 {\r
-  int slen, term_len, i;\r
-  UChar *r;\r
+  int nid = env->save_num;\r
 \r
-  slen = (int)(end - s);\r
-  term_len = ONIGENC_MBC_MINLEN(enc);\r
-\r
-  r = (UChar* )xmalloc(slen + term_len);\r
-  CHECK_NULL_RETURN(r);\r
-  xmemcpy(r, s, slen);\r
+#if 0\r
+  if (IS_NULL(env->saves)) {\r
+    int n = 10;\r
+    env->saves = (SaveItem* )xmalloc(sizeof(SaveItem) * n);\r
+    CHECK_NULL_RETURN_MEMERR(env->saves);\r
+    env->save_alloc_num = n;\r
+  }\r
+  else if (env->save_alloc_num <= nid) {\r
+    int n = env->save_alloc_num * 2;\r
+    SaveItem* p = (SaveItem* )xrealloc(env->saves, sizeof(SaveItem) * n, sizeof(SaveItem)*env->save_alloc_num);\r
+    CHECK_NULL_RETURN_MEMERR(p);\r
+    env->saves = p;\r
+    env->save_alloc_num = n;\r
+  }\r
 \r
-  for (i = 0; i < term_len; i++)\r
-    r[slen + i] = (UChar )0;\r
+  env->saves[nid].type = type;\r
+#endif\r
 \r
-  return r;\r
+  env->save_num++;\r
+  *id = nid;\r
+  return 0;\r
 }\r
-#endif\r
 \r
 /* scan pattern methods */\r
 #define PEND_VALUE   0\r
@@ -277,7 +408,7 @@ strdup_with_null(OnigEncoding enc, UChar* s, UChar* end)
 \r
 static UChar*\r
 strcat_capa(UChar* dest, UChar* dest_end, const UChar* src, const UChar* src_end,\r
-             int capa, int oldCapa)\r
+            int capa, int oldCapa)\r
 {\r
   UChar* r;\r
 \r
@@ -294,7 +425,7 @@ strcat_capa(UChar* dest, UChar* dest_end, const UChar* src, const UChar* src_end
 /* dest on static area */\r
 static UChar*\r
 strcat_capa_from_static(UChar* dest, UChar* dest_end,\r
-                       const UChar* src, const UChar* src_end, int capa)\r
+                        const UChar* src, const UChar* src_end, int capa)\r
 {\r
   UChar* r;\r
 \r
@@ -362,38 +493,137 @@ onig_st_init_strend_table_with_size(int size)
 \r
 extern int\r
 onig_st_lookup_strend(hash_table_type* table, const UChar* str_key,\r
-                     const UChar* end_key, hash_data_type *value)\r
+                      const UChar* end_key, hash_data_type *value)\r
 {\r
   st_str_end_key key;\r
 \r
   key.s   = (UChar* )str_key;\r
   key.end = (UChar* )end_key;\r
 \r
-  return onig_st_lookup(table, (st_data_t )(UINTN)(&key), value);\r
+  return onig_st_lookup(table, (st_data_t )(&key), value);\r
 }\r
 \r
 extern int\r
 onig_st_insert_strend(hash_table_type* table, const UChar* str_key,\r
-                     const UChar* end_key, hash_data_type value)\r
+                      const UChar* end_key, hash_data_type value)\r
 {\r
   st_str_end_key* key;\r
   int result;\r
 \r
   key = (st_str_end_key* )xmalloc(sizeof(st_str_end_key));\r
   CHECK_NULL_RETURN_MEMERR(key);\r
+\r
   key->s   = (UChar* )str_key;\r
   key->end = (UChar* )end_key;\r
-  result = onig_st_insert(table, (st_data_t )(UINTN)key, value);\r
+  result = onig_st_insert(table, (st_data_t )key, value);\r
   if (result) {\r
     xfree(key);\r
   }\r
   return result;\r
 }\r
 \r
-#endif /* USE_ST_LIBRARY */\r
 \r
+typedef struct {\r
+  OnigEncoding enc;\r
+  int    type; /* callout type: single or not */\r
+  UChar* s;\r
+  UChar* end;\r
+} st_callout_name_key;\r
+\r
+static int\r
+callout_name_table_cmp(st_callout_name_key* x, st_callout_name_key* y)\r
+{\r
+  UChar *p, *q;\r
+  int c;\r
+\r
+  if (x->enc  != y->enc)  return 1;\r
+  if (x->type != y->type) return 1;\r
+  if ((x->end - x->s) != (y->end - y->s))\r
+    return 1;\r
+\r
+  p = x->s;\r
+  q = y->s;\r
+  while (p < x->end) {\r
+    c = (int )*p - (int )*q;\r
+    if (c != 0) return c;\r
+\r
+    p++; q++;\r
+  }\r
+\r
+  return 0;\r
+}\r
+\r
+static int\r
+callout_name_table_hash(st_callout_name_key* x)\r
+{\r
+  UChar *p;\r
+  int val = 0;\r
+\r
+  p = x->s;\r
+  while (p < x->end) {\r
+    val = val * 997 + (int )*p++;\r
+  }\r
+\r
+  /* use intptr_t for escape warning in Windows */\r
+  return val + (val >> 5) + ((intptr_t )x->enc & 0xffff) + x->type;\r
+}\r
+\r
+extern hash_table_type*\r
+onig_st_init_callout_name_table_with_size(int size)\r
+{\r
+  static struct st_hash_type hashType = {\r
+    callout_name_table_cmp,\r
+    callout_name_table_hash,\r
+  };\r
+\r
+  return (hash_table_type* )\r
+           onig_st_init_table_with_size(&hashType, size);\r
+}\r
+\r
+extern int\r
+onig_st_lookup_callout_name_table(hash_table_type* table,\r
+                                  OnigEncoding enc,\r
+                                  int type,\r
+                                  const UChar* str_key,\r
+                                  const UChar* end_key,\r
+                                  hash_data_type *value)\r
+{\r
+  st_callout_name_key key;\r
+\r
+  key.enc  = enc;\r
+  key.type = type;\r
+  key.s    = (UChar* )str_key;\r
+  key.end  = (UChar* )end_key;\r
+\r
+  return onig_st_lookup(table, (st_data_t )(&key), value);\r
+}\r
+\r
+static int\r
+st_insert_callout_name_table(hash_table_type* table,\r
+                             OnigEncoding enc, int type,\r
+                             UChar* str_key, UChar* end_key,\r
+                             hash_data_type value)\r
+{\r
+  st_callout_name_key* key;\r
+  int result;\r
+\r
+  key = (st_callout_name_key* )xmalloc(sizeof(st_callout_name_key));\r
+  CHECK_NULL_RETURN_MEMERR(key);\r
+\r
+  /* key->s: don't duplicate, because str_key is duped in callout_name_entry() */\r
+  key->enc  = enc;\r
+  key->type = type;\r
+  key->s    = str_key;\r
+  key->end  = end_key;\r
+  result = onig_st_insert(table, (st_data_t )key, value);\r
+  if (result) {\r
+    xfree(key);\r
+  }\r
+  return result;\r
+}\r
+\r
+#endif /* USE_ST_LIBRARY */\r
 \r
-#ifdef USE_NAMED_GROUP\r
 \r
 #define INIT_NAME_BACKREFS_ALLOC_NUM   8\r
 \r
@@ -408,6 +638,8 @@ typedef struct {
 \r
 #ifdef USE_ST_LIBRARY\r
 \r
+#define INIT_NAMES_ALLOC_NUM    5\r
+\r
 typedef st_table  NameTable;\r
 typedef st_data_t HashDataType;   /* 1.6 st.h doesn't define st_data_t type */\r
 \r
@@ -478,7 +710,7 @@ onig_names_free(regex_t* reg)
   NameTable* t;\r
 \r
   r = names_clear(reg);\r
-  if (r) return r;\r
+  if (r != 0) return r;\r
 \r
   t = (NameTable* )reg->name_table;\r
   if (IS_NOT_NULL(t)) onig_st_free_table(t);\r
@@ -513,8 +745,8 @@ i_names(UChar* key ARG_UNUSED, NameEntry* e, INamesArg* arg)
   int r = (*(arg->func))(e->name,\r
                          e->name + e->name_len,\r
                          e->back_num,\r
-                        (e->back_num > 1 ? e->back_refs : &(e->back_ref1)),\r
-                        arg->reg, arg->arg);\r
+                         (e->back_num > 1 ? e->back_refs : &(e->back_ref1)),\r
+                         arg->reg, arg->arg);\r
   if (r != 0) {\r
     arg->ret = r;\r
     return ST_STOP;\r
@@ -535,7 +767,7 @@ onig_foreach_name(regex_t* reg,
     narg.reg  = reg;\r
     narg.arg  = arg;\r
     narg.enc  = reg->enc; /* should be pattern encoding. */\r
-    onig_st_foreach(t, i_names, (HashDataType )(UINTN)&narg);\r
+    onig_st_foreach(t, i_names, (HashDataType )&narg);\r
   }\r
   return narg.ret;\r
 }\r
@@ -563,7 +795,7 @@ onig_renumber_name_table(regex_t* reg, GroupNumRemap* map)
   NameTable* t = (NameTable* )reg->name_table;\r
 \r
   if (IS_NOT_NULL(t)) {\r
-    onig_st_foreach(t, i_renumber_name, (HashDataType )(UINTN)map);\r
+    onig_st_foreach(t, i_renumber_name, (HashDataType )map);\r
   }\r
   return 0;\r
 }\r
@@ -604,16 +836,16 @@ onig_print_names(FILE* fp, regex_t* reg)
       e = &(t->e[i]);\r
       fprintf(fp, "%s: ", e->name);\r
       if (e->back_num == 0) {\r
-       fputs("-", fp);\r
+        fputs("-", fp);\r
       }\r
       else if (e->back_num == 1) {\r
-       fprintf(fp, "%d", e->back_ref1);\r
+        fprintf(fp, "%d", e->back_ref1);\r
       }\r
       else {\r
-       for (j = 0; j < e->back_num; j++) {\r
-         if (j > 0) fprintf(fp, ", ");\r
-         fprintf(fp, "%d", e->back_refs[j]);\r
-       }\r
+        for (j = 0; j < e->back_num; j++) {\r
+          if (j > 0) fprintf(fp, ", ");\r
+          fprintf(fp, "%d", e->back_refs[j]);\r
+        }\r
       }\r
       fputs("\n", fp);\r
     }\r
@@ -634,13 +866,13 @@ names_clear(regex_t* reg)
     for (i = 0; i < t->num; i++) {\r
       e = &(t->e[i]);\r
       if (IS_NOT_NULL(e->name)) {\r
-       xfree(e->name);\r
-       e->name       = NULL;\r
-       e->name_len   = 0;\r
-       e->back_num   = 0;\r
-       e->back_alloc = 0;\r
-       if (IS_NOT_NULL(e->back_refs)) xfree(e->back_refs);\r
-       e->back_refs = (int* )NULL;\r
+        xfree(e->name);\r
+        e->name       = NULL;\r
+        e->name_len   = 0;\r
+        e->back_num   = 0;\r
+        e->back_alloc = 0;\r
+        if (IS_NOT_NULL(e->back_refs)) xfree(e->back_refs);\r
+        e->back_refs = (int* )NULL;\r
       }\r
     }\r
     if (IS_NOT_NULL(t->e)) {\r
@@ -659,7 +891,7 @@ onig_names_free(regex_t* reg)
   NameTable* t;\r
 \r
   r = names_clear(reg);\r
-  if (r) return r;\r
+  if (r != 0) return r;\r
 \r
   t = (NameTable* )reg->name_table;\r
   if (IS_NOT_NULL(t)) xfree(t);\r
@@ -679,7 +911,7 @@ name_find(regex_t* reg, UChar* name, UChar* name_end)
     for (i = 0; i < t->num; i++) {\r
       e = &(t->e[i]);\r
       if (len == e->name_len && onig_strncmp(name, e->name, len) == 0)\r
-       return e;\r
+        return e;\r
     }\r
   }\r
   return (NameEntry* )NULL;\r
@@ -697,8 +929,8 @@ onig_foreach_name(regex_t* reg,
     for (i = 0; i < t->num; i++) {\r
       e = &(t->e[i]);\r
       r = (*func)(e->name, e->name + e->name_len, e->back_num,\r
-                 (e->back_num > 1 ? e->back_refs : &(e->back_ref1)),\r
-                 reg, arg);\r
+                  (e->back_num > 1 ? e->back_refs : &(e->back_ref1)),\r
+                  reg, arg);\r
       if (r != 0) return r;\r
     }\r
   }\r
@@ -721,6 +953,7 @@ onig_number_of_names(regex_t* reg)
 static int\r
 name_add(regex_t* reg, UChar* name, UChar* name_end, int backref, ScanEnv* env)\r
 {\r
+  int r;\r
   int alloc;\r
   NameEntry* e;\r
   NameTable* t = (NameTable* )reg->name_table;\r
@@ -732,21 +965,21 @@ name_add(regex_t* reg, UChar* name, UChar* name_end, int backref, ScanEnv* env)
   if (IS_NULL(e)) {\r
 #ifdef USE_ST_LIBRARY\r
     if (IS_NULL(t)) {\r
-      t = onig_st_init_strend_table_with_size(5);\r
-      CHECK_NULL_RETURN_MEMERR(t);\r
+      t = onig_st_init_strend_table_with_size(INIT_NAMES_ALLOC_NUM);\r
       reg->name_table = (void* )t;\r
     }\r
     e = (NameEntry* )xmalloc(sizeof(NameEntry));\r
     CHECK_NULL_RETURN_MEMERR(e);\r
 \r
-    e->name = strdup_with_null(reg->enc, name, name_end);\r
+    e->name = onigenc_strdup(reg->enc, name, name_end);\r
     if (IS_NULL(e->name)) {\r
       xfree(e);  return ONIGERR_MEMORY;\r
     }\r
-    onig_st_insert_strend(t, e->name, (e->name + (name_end - name)),\r
-                          (HashDataType )(UINTN)e);\r
+    r = onig_st_insert_strend(t, e->name, (e->name + (name_end - name)),\r
+                              (HashDataType )e);\r
+    if (r < 0) return r;\r
 \r
-    e->name_len   = (int)(name_end - name);\r
+    e->name_len   = (int )(name_end - name);\r
     e->back_num   = 0;\r
     e->back_alloc = 0;\r
     e->back_refs  = (int* )NULL;\r
@@ -763,8 +996,8 @@ name_add(regex_t* reg, UChar* name, UChar* name_end, int backref, ScanEnv* env)
 \r
       t->e = (NameEntry* )xmalloc(sizeof(NameEntry) * alloc);\r
       if (IS_NULL(t->e)) {\r
-       xfree(t);\r
-       return ONIGERR_MEMORY;\r
+        xfree(t);\r
+        return ONIGERR_MEMORY;\r
       }\r
       t->alloc = alloc;\r
       reg->name_table = t;\r
@@ -774,22 +1007,22 @@ name_add(regex_t* reg, UChar* name, UChar* name_end, int backref, ScanEnv* env)
       int i;\r
 \r
       alloc = t->alloc * 2;\r
-      t->e = (NameEntry* )xrealloc(t->e, sizeof(NameEntry) * alloc);\r
+      t->e = (NameEntry* )xrealloc(t->e, sizeof(NameEntry) * alloc, sizeof(NameEntry) * t->alloc);\r
       CHECK_NULL_RETURN_MEMERR(t->e);\r
       t->alloc = alloc;\r
 \r
     clear:\r
       for (i = t->num; i < t->alloc; i++) {\r
-       t->e[i].name       = NULL;\r
-       t->e[i].name_len   = 0;\r
-       t->e[i].back_num   = 0;\r
-       t->e[i].back_alloc = 0;\r
-       t->e[i].back_refs  = (int* )NULL;\r
+        t->e[i].name       = NULL;\r
+        t->e[i].name_len   = 0;\r
+        t->e[i].back_num   = 0;\r
+        t->e[i].back_alloc = 0;\r
+        t->e[i].back_refs  = (int* )NULL;\r
       }\r
     }\r
     e = &(t->e[t->num]);\r
     t->num++;\r
-    e->name = strdup_with_null(reg->enc, name, name_end);\r
+    e->name = onigenc_strdup(reg->enc, name, name_end);\r
     if (IS_NULL(e->name)) return ONIGERR_MEMORY;\r
     e->name_len = name_end - name;\r
 #endif\r
@@ -798,7 +1031,7 @@ name_add(regex_t* reg, UChar* name, UChar* name_end, int backref, ScanEnv* env)
   if (e->back_num >= 1 &&\r
       ! IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME)) {\r
     onig_scan_env_set_error_string(env, ONIGERR_MULTIPLEX_DEFINED_NAME,\r
-                                   name, name_end);\r
+                                   name, name_end);\r
     return ONIGERR_MULTIPLEX_DEFINED_NAME;\r
   }\r
 \r
@@ -817,10 +1050,10 @@ name_add(regex_t* reg, UChar* name, UChar* name_end, int backref, ScanEnv* env)
     }\r
     else {\r
       if (e->back_num > e->back_alloc) {\r
-       alloc = e->back_alloc * 2;\r
-       e->back_refs = (int* )xrealloc(e->back_refs, sizeof(int) * alloc, sizeof(int) * e->back_alloc);\r
-       CHECK_NULL_RETURN_MEMERR(e->back_refs);\r
-       e->back_alloc = alloc;\r
+        alloc = e->back_alloc * 2;\r
+        e->back_refs = (int* )xrealloc(e->back_refs, sizeof(int) * alloc, sizeof(int) * e->back_alloc);\r
+        CHECK_NULL_RETURN_MEMERR(e->back_refs);\r
+        e->back_alloc = alloc;\r
       }\r
       e->back_refs[e->back_num - 1] = backref;\r
     }\r
@@ -831,7 +1064,7 @@ name_add(regex_t* reg, UChar* name, UChar* name_end, int backref, ScanEnv* env)
 \r
 extern int\r
 onig_name_to_group_numbers(regex_t* reg, const UChar* name,\r
-                          const UChar* name_end, int** nums)\r
+                           const UChar* name_end, int** nums)\r
 {\r
   NameEntry* e = name_find(reg, name, name_end);\r
 \r
@@ -852,7 +1085,7 @@ onig_name_to_group_numbers(regex_t* reg, const UChar* name,
 \r
 extern int\r
 onig_name_to_backref_number(regex_t* reg, const UChar* name,\r
-                           const UChar* name_end, OnigRegion *region)\r
+                            const UChar* name_end, OnigRegion *region)\r
 {\r
   int i, n, *nums;\r
 \r
@@ -866,1117 +1099,2547 @@ onig_name_to_backref_number(regex_t* reg, const UChar* name,
   else {\r
     if (IS_NOT_NULL(region)) {\r
       for (i = n - 1; i >= 0; i--) {\r
-       if (region->beg[nums[i]] != ONIG_REGION_NOTPOS)\r
-         return nums[i];\r
+        if (region->beg[nums[i]] != ONIG_REGION_NOTPOS)\r
+          return nums[i];\r
       }\r
     }\r
     return nums[n - 1];\r
   }\r
 }\r
 \r
-#else /* USE_NAMED_GROUP */\r
-\r
-extern int\r
-onig_name_to_group_numbers(regex_t* reg, const UChar* name,\r
-                          const UChar* name_end, int** nums)\r
-{\r
-  return ONIG_NO_SUPPORT_CONFIG;\r
-}\r
-\r
-extern int\r
-onig_name_to_backref_number(regex_t* reg, const UChar* name,\r
-                           const UChar* name_end, OnigRegion* region)\r
-{\r
-  return ONIG_NO_SUPPORT_CONFIG;\r
-}\r
-\r
-extern int\r
-onig_foreach_name(regex_t* reg,\r
-  int (*func)(const UChar*, const UChar*,int,int*,regex_t*,void*), void* arg)\r
-{\r
-  return ONIG_NO_SUPPORT_CONFIG;\r
-}\r
-\r
-extern int\r
-onig_number_of_names(regex_t* reg)\r
-{\r
-  return 0;\r
-}\r
-#endif /* else USE_NAMED_GROUP */\r
-\r
 extern int\r
 onig_noname_group_capture_is_active(regex_t* reg)\r
 {\r
   if (ONIG_IS_OPTION_ON(reg->options, ONIG_OPTION_DONT_CAPTURE_GROUP))\r
     return 0;\r
 \r
-#ifdef USE_NAMED_GROUP\r
   if (onig_number_of_names(reg) > 0 &&\r
       IS_SYNTAX_BV(reg->syntax, ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP) &&\r
       !ONIG_IS_OPTION_ON(reg->options, ONIG_OPTION_CAPTURE_GROUP)) {\r
     return 0;\r
   }\r
-#endif\r
 \r
   return 1;\r
 }\r
 \r
+#ifdef USE_CALLOUT\r
 \r
-#define INIT_SCANENV_MEMNODES_ALLOC_SIZE   16\r
-\r
-static void\r
-scan_env_clear(ScanEnv* env)\r
-{\r
-  int i;\r
-\r
-  BIT_STATUS_CLEAR(env->capture_history);\r
-  BIT_STATUS_CLEAR(env->bt_mem_start);\r
-  BIT_STATUS_CLEAR(env->bt_mem_end);\r
-  BIT_STATUS_CLEAR(env->backrefed_mem);\r
-  env->error      = (UChar* )NULL;\r
-  env->error_end  = (UChar* )NULL;\r
-  env->num_call   = 0;\r
-  env->num_mem    = 0;\r
-#ifdef USE_NAMED_GROUP\r
-  env->num_named  = 0;\r
-#endif\r
-  env->mem_alloc         = 0;\r
-  env->mem_nodes_dynamic = (Node** )NULL;\r
+typedef struct {\r
+  OnigCalloutType type;\r
+  int             in;\r
+  OnigCalloutFunc start_func;\r
+  OnigCalloutFunc end_func;\r
+  int             arg_num;\r
+  int             opt_arg_num;\r
+  unsigned int    arg_types[ONIG_CALLOUT_MAX_ARGS_NUM];\r
+  OnigValue       opt_defaults[ONIG_CALLOUT_MAX_ARGS_NUM];\r
+  UChar*          name; /* reference to GlobalCalloutNameTable entry: e->name */\r
+} CalloutNameListEntry;\r
 \r
-  for (i = 0; i < SCANENV_MEMNODES_SIZE; i++)\r
-    env->mem_nodes_static[i] = NULL_NODE;\r
+typedef struct {\r
+  int  n;\r
+  int  alloc;\r
+  CalloutNameListEntry* v;\r
+} CalloutNameListType;\r
 \r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-  env->num_comb_exp_check  = 0;\r
-  env->comb_exp_max_regnum = 0;\r
-  env->curr_max_regnum     = 0;\r
-  env->has_recursion       = 0;\r
-#endif\r
-}\r
+static CalloutNameListType* GlobalCalloutNameList;\r
 \r
 static int\r
-scan_env_add_mem_entry(ScanEnv* env)\r
+make_callout_func_list(CalloutNameListType** rs, int init_size)\r
 {\r
-  int i, need, alloc;\r
-  Node** p;\r
+  CalloutNameListType* s;\r
+  CalloutNameListEntry* v;\r
 \r
-  need = env->num_mem + 1;\r
-  if (need >= SCANENV_MEMNODES_SIZE) {\r
-    if (env->mem_alloc <= need) {\r
-      if (IS_NULL(env->mem_nodes_dynamic)) {\r
-       alloc = INIT_SCANENV_MEMNODES_ALLOC_SIZE;\r
-       p = (Node** )xmalloc(sizeof(Node*) * alloc);\r
-    CHECK_NULL_RETURN_MEMERR(p);\r
-  \r
-       xmemcpy(p, env->mem_nodes_static,\r
-               sizeof(Node*) * SCANENV_MEMNODES_SIZE);\r
-      }\r
-      else {\r
-       alloc = env->mem_alloc * 2;\r
-       p = (Node** )xrealloc(env->mem_nodes_dynamic, sizeof(Node*) * alloc, sizeof(Node*) * env->mem_alloc);\r
-      }\r
-      CHECK_NULL_RETURN_MEMERR(p);\r
+  *rs = 0;\r
 \r
-      for (i = env->num_mem + 1; i < alloc; i++)\r
-       p[i] = NULL_NODE;\r
+  s = xmalloc(sizeof(*s));\r
+  if (IS_NULL(s)) return ONIGERR_MEMORY;\r
 \r
-      env->mem_nodes_dynamic = p;\r
-      env->mem_alloc = alloc;\r
-    }\r
+  v = (CalloutNameListEntry* )xmalloc(sizeof(CalloutNameListEntry) * init_size);\r
+  if (IS_NULL(v)) {\r
+    xfree(s);\r
+    return ONIGERR_MEMORY;\r
   }\r
 \r
-  env->num_mem++;\r
-  return env->num_mem;\r
-}\r
+  s->n = 0;\r
+  s->alloc = init_size;\r
+  s->v = v;\r
 \r
-static int\r
-scan_env_set_mem_node(ScanEnv* env, int num, Node* node)\r
-{\r
-  if (env->num_mem >= num)\r
-    SCANENV_MEM_NODES(env)[num] = node;\r
-  else\r
-    return ONIGERR_PARSER_BUG;\r
-  return 0;\r
+  *rs = s;\r
+  return ONIG_NORMAL;\r
 }\r
 \r
+static void\r
+free_callout_func_list(CalloutNameListType* s)\r
+{\r
+  if (IS_NOT_NULL(s)) {\r
+    if (IS_NOT_NULL(s->v)) {\r
+      int i, j;\r
+\r
+      for (i = 0; i < s->n; i++) {\r
+        CalloutNameListEntry* e = s->v + i;\r
+        for (j = e->arg_num - e->opt_arg_num; j < e->arg_num; j++) {\r
+          if (e->arg_types[j] == ONIG_TYPE_STRING) {\r
+            UChar* p = e->opt_defaults[j].s.start;\r
+            if (IS_NOT_NULL(p)) xfree(p);\r
+          }\r
+        }\r
+      }\r
+      xfree(s->v);\r
+    }\r
+    xfree(s);\r
+  }\r
+}\r
 \r
-#ifdef USE_PARSE_TREE_NODE_RECYCLE\r
-typedef struct _FreeNode {\r
-  struct _FreeNode* next;\r
-} FreeNode;\r
+static int\r
+callout_func_list_add(CalloutNameListType* s, int* rid)\r
+{\r
+  if (s->n >= s->alloc) {\r
+    int new_size = s->alloc * 2;\r
+    CalloutNameListEntry* nv = (CalloutNameListEntry* )\r
+      xrealloc(s->v, sizeof(CalloutNameListEntry) * new_size, sizeof(CalloutNameListEntry)*s->alloc);\r
+    if (IS_NULL(nv)) return ONIGERR_MEMORY;\r
 \r
-static FreeNode* FreeNodeList = (FreeNode* )NULL;\r
-#endif\r
+    s->alloc = new_size;\r
+    s->v = nv;\r
+  }\r
 \r
-extern void\r
-onig_node_free(Node* node)\r
-{\r
- start:\r
-  if (IS_NULL(node)) return ;\r
+  *rid = s->n;\r
 \r
-  switch (NTYPE(node)) {\r
-  case NT_STR:\r
-    if (NSTR(node)->capa != 0 &&\r
-       IS_NOT_NULL(NSTR(node)->s) && NSTR(node)->s != NSTR(node)->buf) {\r
-      xfree(NSTR(node)->s);\r
-    }\r
-    break;\r
+  xmemset(&(s->v[s->n]), 0, sizeof(*(s->v)));\r
+  s->n++;\r
+  return ONIG_NORMAL;\r
+}\r
 \r
-  case NT_LIST:\r
-  case NT_ALT:\r
-    onig_node_free(NCAR(node));\r
-    {\r
-      Node* next_node = NCDR(node);\r
 \r
-#ifdef USE_PARSE_TREE_NODE_RECYCLE\r
-      {\r
-       FreeNode* n = (FreeNode* )node;\r
+typedef struct {\r
+  UChar* name;\r
+  int    name_len;   /* byte length */\r
+  int    id;\r
+} CalloutNameEntry;\r
 \r
-        THREAD_ATOMIC_START;\r
-       n->next = FreeNodeList;\r
-       FreeNodeList = n;\r
-        THREAD_ATOMIC_END;\r
-      }\r
+#ifdef USE_ST_LIBRARY\r
+typedef st_table  CalloutNameTable;\r
 #else\r
-      xfree(node);\r
+typedef struct {\r
+  CalloutNameEntry* e;\r
+  int               num;\r
+  int               alloc;\r
+} CalloutNameTable;\r
 #endif\r
-      node = next_node;\r
-      goto start;\r
-    }\r
-    break;\r
 \r
-  case NT_CCLASS:\r
-    {\r
-      CClassNode* cc = NCCLASS(node);\r
+static CalloutNameTable* GlobalCalloutNameTable;\r
+static int CalloutNameIDCounter;\r
 \r
-      if (IS_NCCLASS_SHARE(cc)) return ;\r
-      if (cc->mbuf)\r
-        bbuf_free(cc->mbuf);\r
-    }\r
-    break;\r
+#ifdef USE_ST_LIBRARY\r
 \r
-  case NT_QTFR:\r
-    if (NQTFR(node)->target)\r
-      onig_node_free(NQTFR(node)->target);\r
-    break;\r
+static int\r
+i_free_callout_name_entry(st_callout_name_key* key, CalloutNameEntry* e,\r
+                          void* arg ARG_UNUSED)\r
+{\r
+  xfree(e->name);\r
+  /*xfree(key->s); */ /* is same as e->name */\r
+  xfree(key);\r
+  xfree(e);\r
+  return ST_DELETE;\r
+}\r
 \r
-  case NT_ENCLOSE:\r
-    if (NENCLOSE(node)->target)\r
-      onig_node_free(NENCLOSE(node)->target);\r
-    break;\r
+static int\r
+callout_name_table_clear(CalloutNameTable* t)\r
+{\r
+  if (IS_NOT_NULL(t)) {\r
+    onig_st_foreach(t, i_free_callout_name_entry, 0);\r
+  }\r
+  return 0;\r
+}\r
 \r
-  case NT_BREF:\r
-    if (IS_NOT_NULL(NBREF(node)->back_dynamic))\r
-      xfree(NBREF(node)->back_dynamic);\r
-    break;\r
+static int\r
+global_callout_name_table_free(void)\r
+{\r
+  if (IS_NOT_NULL(GlobalCalloutNameTable)) {\r
+    int r = callout_name_table_clear(GlobalCalloutNameTable);\r
+    if (r != 0) return r;\r
 \r
-  case NT_ANCHOR:\r
-    if (NANCHOR(node)->target)\r
-      onig_node_free(NANCHOR(node)->target);\r
-    break;\r
+    onig_st_free_table(GlobalCalloutNameTable);\r
+    GlobalCalloutNameTable = 0;\r
+    CalloutNameIDCounter = 0;\r
   }\r
 \r
-#ifdef USE_PARSE_TREE_NODE_RECYCLE\r
-  {\r
-    FreeNode* n = (FreeNode* )node;\r
+  return 0;\r
+}\r
+\r
+static CalloutNameEntry*\r
+callout_name_find(OnigEncoding enc, int is_not_single,\r
+                  const UChar* name, const UChar* name_end)\r
+{\r
+  int r;\r
+  CalloutNameEntry* e;\r
+  CalloutNameTable* t = GlobalCalloutNameTable;\r
 \r
-    THREAD_ATOMIC_START;\r
-    n->next = FreeNodeList;\r
-    FreeNodeList = n;\r
-    THREAD_ATOMIC_END;\r
+  e = (CalloutNameEntry* )NULL;\r
+  if (IS_NOT_NULL(t)) {\r
+    r = onig_st_lookup_callout_name_table(t, enc, is_not_single, name, name_end,\r
+                                          (HashDataType* )((void* )(&e)));\r
+    if (r == 0) { /* not found */\r
+      if (enc != ONIG_ENCODING_ASCII &&\r
+          ONIGENC_IS_ASCII_COMPATIBLE_ENCODING(enc)) {\r
+        enc = ONIG_ENCODING_ASCII;\r
+        onig_st_lookup_callout_name_table(t, enc, is_not_single, name, name_end,\r
+                                          (HashDataType* )((void* )(&e)));\r
+      }\r
+    }\r
   }\r
+  return e;\r
+}\r
+\r
 #else\r
-  xfree(node);\r
-#endif\r
+\r
+static int\r
+callout_name_table_clear(CalloutNameTable* t)\r
+{\r
+  int i;\r
+  CalloutNameEntry* e;\r
+\r
+  if (IS_NOT_NULL(t)) {\r
+    for (i = 0; i < t->num; i++) {\r
+      e = &(t->e[i]);\r
+      if (IS_NOT_NULL(e->name)) {\r
+        xfree(e->name);\r
+        e->name     = NULL;\r
+        e->name_len = 0;\r
+        e->id       = 0;\r
+        e->func     = 0;\r
+      }\r
+    }\r
+    if (IS_NOT_NULL(t->e)) {\r
+      xfree(t->e);\r
+      t->e = NULL;\r
+    }\r
+    t->num = 0;\r
+  }\r
+  return 0;\r
 }\r
 \r
-#ifdef USE_PARSE_TREE_NODE_RECYCLE\r
-extern int\r
-onig_free_node_list(void)\r
+static int\r
+global_callout_name_table_free(void)\r
 {\r
-  FreeNode* n;\r
+  if (IS_NOT_NULL(GlobalCalloutNameTable)) {\r
+    int r = callout_name_table_clear(GlobalCalloutNameTable);\r
+    if (r != 0) return r;\r
 \r
-  /* THREAD_ATOMIC_START; */\r
-  while (IS_NOT_NULL(FreeNodeList)) {\r
-    n = FreeNodeList;\r
-    FreeNodeList = FreeNodeList->next;\r
-    xfree(n);\r
+    xfree(GlobalCalloutNameTable);\r
+    GlobalCalloutNameTable = 0;\r
+    CalloutNameIDCounter = 0;\r
   }\r
-  /* THREAD_ATOMIC_END; */\r
   return 0;\r
 }\r
-#endif\r
 \r
-static Node*\r
-node_new(void)\r
+static CalloutNameEntry*\r
+callout_name_find(UChar* name, UChar* name_end)\r
 {\r
-  Node* node;\r
+  int i, len;\r
+  CalloutNameEntry* e;\r
+  CalloutNameTable* t = Calloutnames;\r
 \r
-#ifdef USE_PARSE_TREE_NODE_RECYCLE\r
-  THREAD_ATOMIC_START;\r
-  if (IS_NOT_NULL(FreeNodeList)) {\r
-    node = (Node* )FreeNodeList;\r
-    FreeNodeList = FreeNodeList->next;\r
-    THREAD_ATOMIC_END;\r
-    return node;\r
+  if (IS_NOT_NULL(t)) {\r
+    len = name_end - name;\r
+    for (i = 0; i < t->num; i++) {\r
+      e = &(t->e[i]);\r
+      if (len == e->name_len && onig_strncmp(name, e->name, len) == 0)\r
+        return e;\r
+    }\r
   }\r
-  THREAD_ATOMIC_END;\r
+  return (CalloutNameEntry* )NULL;\r
+}\r
+\r
 #endif\r
 \r
-  node = (Node* )xmalloc(sizeof(Node));\r
-  /* xmemset(node, 0, sizeof(Node)); */\r
-  return node;\r
-}\r
+/* name string must be single byte char string. */\r
+static int\r
+callout_name_entry(CalloutNameEntry** rentry, OnigEncoding enc,\r
+                   int is_not_single, UChar* name, UChar* name_end)\r
+{\r
+  int r;\r
+  CalloutNameEntry* e;\r
+  CalloutNameTable* t = GlobalCalloutNameTable;\r
 \r
+  *rentry = 0;\r
+  if (name_end - name <= 0)\r
+    return ONIGERR_INVALID_CALLOUT_NAME;\r
 \r
-static void\r
-initialize_cclass(CClassNode* cc)\r
+  e = callout_name_find(enc, is_not_single, name, name_end);\r
+  if (IS_NULL(e)) {\r
+#ifdef USE_ST_LIBRARY\r
+    if (IS_NULL(t)) {\r
+      t = onig_st_init_callout_name_table_with_size(INIT_NAMES_ALLOC_NUM);\r
+      GlobalCalloutNameTable = t;\r
+    }\r
+    e = (CalloutNameEntry* )xmalloc(sizeof(CalloutNameEntry));\r
+    CHECK_NULL_RETURN_MEMERR(e);\r
+\r
+    e->name = onigenc_strdup(enc, name, name_end);\r
+    if (IS_NULL(e->name)) {\r
+      xfree(e);  return ONIGERR_MEMORY;\r
+    }\r
+\r
+    r = st_insert_callout_name_table(t, enc, is_not_single,\r
+                                     e->name, (e->name + (name_end - name)),\r
+                                     (HashDataType )e);\r
+    if (r < 0) return r;\r
+\r
+#else\r
+\r
+    int alloc;\r
+\r
+    if (IS_NULL(t)) {\r
+      alloc = INIT_NAMES_ALLOC_NUM;\r
+      t = (CalloutNameTable* )xmalloc(sizeof(CalloutNameTable));\r
+      CHECK_NULL_RETURN_MEMERR(t);\r
+      t->e     = NULL;\r
+      t->alloc = 0;\r
+      t->num   = 0;\r
+\r
+      t->e = (CalloutNameEntry* )xmalloc(sizeof(CalloutNameEntry) * alloc);\r
+      if (IS_NULL(t->e)) {\r
+        xfree(t);\r
+        return ONIGERR_MEMORY;\r
+      }\r
+      t->alloc = alloc;\r
+      GlobalCalloutNameTable = t;\r
+      goto clear;\r
+    }\r
+    else if (t->num == t->alloc) {\r
+      int i;\r
+\r
+      alloc = t->alloc * 2;\r
+      t->e = (CalloutNameEntry* )xrealloc(t->e, sizeof(CalloutNameEntry) * alloc, sizeof(CalloutNameEntry)*t->alloc);\r
+      CHECK_NULL_RETURN_MEMERR(t->e);\r
+      t->alloc = alloc;\r
+\r
+    clear:\r
+      for (i = t->num; i < t->alloc; i++) {\r
+        t->e[i].name       = NULL;\r
+        t->e[i].name_len   = 0;\r
+        t->e[i].id         = 0;\r
+      }\r
+    }\r
+    e = &(t->e[t->num]);\r
+    t->num++;\r
+    e->name = onigenc_strdup(enc, name, name_end);\r
+    if (IS_NULL(e->name)) return ONIGERR_MEMORY;\r
+#endif\r
+\r
+    CalloutNameIDCounter++;\r
+    e->id = CalloutNameIDCounter;\r
+    e->name_len = (int )(name_end - name);\r
+  }\r
+\r
+  *rentry = e;\r
+  return e->id;\r
+}\r
+\r
+static int\r
+is_allowed_callout_name(OnigEncoding enc, UChar* name, UChar* name_end)\r
 {\r
-  BITSET_CLEAR(cc->bs);\r
-  /* cc->base.flags = 0; */\r
-  cc->flags = 0;\r
-  cc->mbuf  = NULL;\r
+  UChar* p;\r
+  OnigCodePoint c;\r
+\r
+  if (name >= name_end) return 0;\r
+\r
+  p = name;\r
+  while (p < name_end) {\r
+    c = ONIGENC_MBC_TO_CODE(enc, p, name_end);\r
+    if (! IS_ALLOWED_CODE_IN_CALLOUT_NAME(c))\r
+      return 0;\r
+\r
+    if (p == name) {\r
+      if (c >= '0' && c <= '9') return 0;\r
+    }\r
+\r
+    p += ONIGENC_MBC_ENC_LEN(enc, p);\r
+  }\r
+\r
+  return 1;\r
 }\r
 \r
-static Node*\r
-node_new_cclass(void)\r
+static int\r
+is_allowed_callout_tag_name(OnigEncoding enc, UChar* name, UChar* name_end)\r
 {\r
-  Node* node = node_new();\r
-  CHECK_NULL_RETURN(node);\r
+  UChar* p;\r
+  OnigCodePoint c;\r
 \r
-  SET_NTYPE(node, NT_CCLASS);\r
-  initialize_cclass(NCCLASS(node));\r
-  return node;\r
+  if (name >= name_end) return 0;\r
+\r
+  p = name;\r
+  while (p < name_end) {\r
+    c = ONIGENC_MBC_TO_CODE(enc, p, name_end);\r
+    if (! IS_ALLOWED_CODE_IN_CALLOUT_TAG_NAME(c))\r
+      return 0;\r
+\r
+    if (p == name) {\r
+      if (c >= '0' && c <= '9') return 0;\r
+    }\r
+\r
+    p += ONIGENC_MBC_ENC_LEN(enc, p);\r
+  }\r
+\r
+  return 1;\r
 }\r
 \r
-static Node*\r
-node_new_cclass_by_codepoint_range(int not, OnigCodePoint sb_out,\r
-                                  const OnigCodePoint ranges[])\r
+extern int\r
+onig_set_callout_of_name(OnigEncoding enc, OnigCalloutType callout_type,\r
+                         UChar* name, UChar* name_end, int in,\r
+                         OnigCalloutFunc start_func,\r
+                         OnigCalloutFunc end_func,\r
+                         int arg_num, unsigned int arg_types[],\r
+                         int opt_arg_num, OnigValue opt_defaults[])\r
 {\r
-  int n, i;\r
-  CClassNode* cc;\r
-  OnigCodePoint j;\r
+  int r;\r
+  int i;\r
+  int j;\r
+  int id;\r
+  int is_not_single;\r
+  CalloutNameEntry* e;\r
+  CalloutNameListEntry* fe;\r
 \r
-  Node* node = node_new_cclass();\r
-  CHECK_NULL_RETURN(node);\r
+  if (callout_type != ONIG_CALLOUT_TYPE_SINGLE)\r
+    return ONIGERR_INVALID_ARGUMENT;\r
 \r
-  cc = NCCLASS(node);\r
-  if (not != 0) NCCLASS_SET_NOT(cc);\r
+  if (arg_num < 0 || arg_num > ONIG_CALLOUT_MAX_ARGS_NUM)\r
+    return ONIGERR_INVALID_CALLOUT_ARG;\r
 \r
-  BITSET_CLEAR(cc->bs);\r
-  if (sb_out > 0 && IS_NOT_NULL(ranges)) {\r
-    n = ONIGENC_CODE_RANGE_NUM(ranges);\r
-    for (i = 0; i < n; i++) {\r
-      for (j  = ONIGENC_CODE_RANGE_FROM(ranges, i);\r
-           j <= (OnigCodePoint )ONIGENC_CODE_RANGE_TO(ranges, i); j++) {\r
-       if (j >= sb_out) goto sb_end;\r
+  if (opt_arg_num < 0 || opt_arg_num > arg_num)\r
+    return ONIGERR_INVALID_CALLOUT_ARG;\r
 \r
-        BITSET_SET_BIT(cc->bs, j);\r
+  if (start_func == 0 && end_func == 0)\r
+    return ONIGERR_INVALID_CALLOUT_ARG;\r
+\r
+  if ((in & ONIG_CALLOUT_IN_PROGRESS) == 0 && (in & ONIG_CALLOUT_IN_RETRACTION) == 0)\r
+    return ONIGERR_INVALID_CALLOUT_ARG;\r
+\r
+  for (i = 0; i < arg_num; i++) {\r
+    unsigned int t = arg_types[i];\r
+    if (t == ONIG_TYPE_VOID)\r
+      return ONIGERR_INVALID_CALLOUT_ARG;\r
+    else {\r
+      if (i >= arg_num - opt_arg_num) {\r
+        if (t != ONIG_TYPE_LONG && t != ONIG_TYPE_CHAR && t != ONIG_TYPE_STRING &&\r
+            t != ONIG_TYPE_TAG)\r
+          return ONIGERR_INVALID_CALLOUT_ARG;\r
+      }\r
+      else {\r
+        if (t != ONIG_TYPE_LONG) {\r
+          t = t & ~ONIG_TYPE_LONG;\r
+          if (t != ONIG_TYPE_CHAR && t != ONIG_TYPE_STRING && t != ONIG_TYPE_TAG)\r
+            return ONIGERR_INVALID_CALLOUT_ARG;\r
+        }\r
       }\r
     }\r
   }\r
 \r
- sb_end:\r
-  if (IS_NULL(ranges)) {\r
-  is_null:\r
-    cc->mbuf = NULL;\r
+  if (! is_allowed_callout_name(enc, name, name_end)) {\r
+    return ONIGERR_INVALID_CALLOUT_NAME;\r
   }\r
-  else {\r
-    BBuf* bbuf;\r
 \r
-    n = ONIGENC_CODE_RANGE_NUM(ranges);\r
-    if (n == 0) goto is_null;\r
+  is_not_single = (callout_type != ONIG_CALLOUT_TYPE_SINGLE);\r
+  id = callout_name_entry(&e, enc, is_not_single, name, name_end);\r
+  if (id < 0) return id;\r
 \r
-    bbuf = (BBuf* )xmalloc(sizeof(BBuf));\r
-    CHECK_NULL_RETURN(bbuf);\r
-    bbuf->alloc = n + 1;\r
-    bbuf->used  = n + 1;\r
-    bbuf->p     = (UChar* )((void* )ranges);\r
+  r = ONIG_NORMAL;\r
+  if (IS_NULL(GlobalCalloutNameList)) {\r
+    r = make_callout_func_list(&GlobalCalloutNameList, 10);\r
+    if (r != ONIG_NORMAL) return r;\r
+  }\r
 \r
-    cc->mbuf = bbuf;\r
+  while (id >= GlobalCalloutNameList->n) {\r
+    int rid;\r
+    r = callout_func_list_add(GlobalCalloutNameList, &rid);\r
+    if (r != ONIG_NORMAL) return r;\r
   }\r
 \r
-  return node;\r
-}\r
+  fe = GlobalCalloutNameList->v + id;\r
+  fe->type         = callout_type;\r
+  fe->in           = in;\r
+  fe->start_func   = start_func;\r
+  fe->end_func     = end_func;\r
+  fe->arg_num      = arg_num;\r
+  fe->opt_arg_num  = opt_arg_num;\r
+  fe->name         = e->name;\r
 \r
-static Node*\r
-node_new_ctype(int type, int not)\r
-{\r
-  Node* node = node_new();\r
-  CHECK_NULL_RETURN(node);\r
+  for (i = 0; i < arg_num; i++) {\r
+    fe->arg_types[i] = arg_types[i];\r
+  }\r
+  for (i = arg_num - opt_arg_num, j = 0; i < arg_num; i++, j++) {\r
+    if (fe->arg_types[i] == ONIG_TYPE_STRING) {\r
+      OnigValue* val = opt_defaults + j;\r
+      UChar* ds = onigenc_strdup(enc, val->s.start, val->s.end);\r
+      CHECK_NULL_RETURN_MEMERR(ds);\r
 \r
-  SET_NTYPE(node, NT_CTYPE);\r
-  NCTYPE(node)->ctype = type;\r
-  NCTYPE(node)->not   = not;\r
-  return node;\r
+      fe->opt_defaults[i].s.start = ds;\r
+      fe->opt_defaults[i].s.end   = ds + (val->s.end - val->s.start);\r
+    }\r
+    else {\r
+      fe->opt_defaults[i] = opt_defaults[j];\r
+    }\r
+  }\r
+\r
+  r = id;\r
+  return r;\r
 }\r
 \r
-static Node*\r
-node_new_anychar(void)\r
+static int\r
+get_callout_name_id_by_name(OnigEncoding enc, int is_not_single,\r
+                            UChar* name, UChar* name_end, int* rid)\r
 {\r
-  Node* node = node_new();\r
-  CHECK_NULL_RETURN(node);\r
+  int r;\r
+  CalloutNameEntry* e;\r
 \r
-  SET_NTYPE(node, NT_CANY);\r
-  return node;\r
+  if (! is_allowed_callout_name(enc, name, name_end)) {\r
+    return ONIGERR_INVALID_CALLOUT_NAME;\r
+  }\r
+\r
+  e = callout_name_find(enc, is_not_single, name, name_end);\r
+  if (IS_NULL(e)) {\r
+    return ONIGERR_UNDEFINED_CALLOUT_NAME;\r
+  }\r
+\r
+  r = ONIG_NORMAL;\r
+  *rid = e->id;\r
+\r
+  return r;\r
 }\r
 \r
-static Node*\r
-node_new_list(Node* left, Node* right)\r
+extern OnigCalloutFunc\r
+onig_get_callout_start_func(regex_t* reg, int callout_num)\r
 {\r
-  Node* node = node_new();\r
-  CHECK_NULL_RETURN(node);\r
+  /* If used for callouts of contents, return 0. */\r
+  CalloutListEntry* e;\r
 \r
-  SET_NTYPE(node, NT_LIST);\r
-  NCAR(node)  = left;\r
-  NCDR(node) = right;\r
-  return node;\r
+  e = onig_reg_callout_list_at(reg, callout_num);\r
+  return e->start_func;\r
 }\r
 \r
-extern Node*\r
-onig_node_new_list(Node* left, Node* right)\r
+extern const UChar*\r
+onig_get_callout_tag_start(regex_t* reg, int callout_num)\r
 {\r
-  return node_new_list(left, right);\r
+  CalloutListEntry* e = onig_reg_callout_list_at(reg, callout_num);\r
+  return e->tag_start;\r
 }\r
 \r
-extern Node*\r
-onig_node_list_add(Node* list, Node* x)\r
+extern const UChar*\r
+onig_get_callout_tag_end(regex_t* reg, int callout_num)\r
 {\r
-  Node *n;\r
-\r
-  n = onig_node_new_list(x, NULL);\r
-  if (IS_NULL(n)) return NULL_NODE;\r
+  CalloutListEntry* e = onig_reg_callout_list_at(reg, callout_num);\r
+  return e->tag_end;\r
+}\r
 \r
-  if (IS_NOT_NULL(list)) {\r
-    while (IS_NOT_NULL(NCDR(list)))\r
-      list = NCDR(list);\r
 \r
-    NCDR(list) = n;\r
-  }\r
+extern OnigCalloutType\r
+onig_get_callout_type_by_name_id(int name_id)\r
+{\r
+  if (name_id < 0 || name_id >= GlobalCalloutNameList->n)\r
+    return 0;\r
 \r
-  return n;\r
+  return GlobalCalloutNameList->v[name_id].type;\r
 }\r
 \r
-extern Node*\r
-onig_node_new_alt(Node* left, Node* right)\r
+extern OnigCalloutFunc\r
+onig_get_callout_start_func_by_name_id(int name_id)\r
 {\r
-  Node* node = node_new();\r
-  CHECK_NULL_RETURN(node);\r
+  if (name_id < 0 || name_id >= GlobalCalloutNameList->n)\r
+    return 0;\r
 \r
-  SET_NTYPE(node, NT_ALT);\r
-  NCAR(node)  = left;\r
-  NCDR(node) = right;\r
-  return node;\r
+  return GlobalCalloutNameList->v[name_id].start_func;\r
 }\r
 \r
-extern Node*\r
-onig_node_new_anchor(int type)\r
+extern OnigCalloutFunc\r
+onig_get_callout_end_func_by_name_id(int name_id)\r
 {\r
-  Node* node = node_new();\r
-  CHECK_NULL_RETURN(node);\r
+  if (name_id < 0 || name_id >= GlobalCalloutNameList->n)\r
+    return 0;\r
 \r
-  SET_NTYPE(node, NT_ANCHOR);\r
-  NANCHOR(node)->type     = type;\r
-  NANCHOR(node)->target   = NULL;\r
-  NANCHOR(node)->char_len = -1;\r
-  return node;\r
+  return GlobalCalloutNameList->v[name_id].end_func;\r
 }\r
 \r
-static Node*\r
-node_new_backref(int back_num, int* backrefs, int by_name,\r
-#ifdef USE_BACKREF_WITH_LEVEL\r
-                int exist_level, int nest_level,\r
-#endif\r
-                ScanEnv* env)\r
+extern int\r
+onig_get_callout_in_by_name_id(int name_id)\r
 {\r
-  int i;\r
-  Node* node = node_new();\r
+  if (name_id < 0 || name_id >= GlobalCalloutNameList->n)\r
+    return 0;\r
 \r
-  CHECK_NULL_RETURN(node);\r
+  return GlobalCalloutNameList->v[name_id].in;\r
+}\r
 \r
-  SET_NTYPE(node, NT_BREF);\r
-  NBREF(node)->state    = 0;\r
-  NBREF(node)->back_num = back_num;\r
-  NBREF(node)->back_dynamic = (int* )NULL;\r
-  if (by_name != 0)\r
-    NBREF(node)->state |= NST_NAME_REF;\r
+static int\r
+get_callout_arg_num_by_name_id(int name_id)\r
+{\r
+  return GlobalCalloutNameList->v[name_id].arg_num;\r
+}\r
 \r
-#ifdef USE_BACKREF_WITH_LEVEL\r
-  if (exist_level != 0) {\r
-    NBREF(node)->state |= NST_NEST_LEVEL;\r
-    NBREF(node)->nest_level  = nest_level;\r
-  }\r
-#endif\r
-\r
-  for (i = 0; i < back_num; i++) {\r
-    if (backrefs[i] <= env->num_mem &&\r
-       IS_NULL(SCANENV_MEM_NODES(env)[backrefs[i]])) {\r
-      NBREF(node)->state |= NST_RECURSION;   /* /...(\1).../ */\r
-      break;\r
-    }\r
-  }\r
-\r
-  if (back_num <= NODE_BACKREFS_SIZE) {\r
-    for (i = 0; i < back_num; i++)\r
-      NBREF(node)->back_static[i] = backrefs[i];\r
-  }\r
-  else {\r
-    int* p = (int* )xmalloc(sizeof(int) * back_num);\r
-    if (IS_NULL(p)) {\r
-      onig_node_free(node);\r
-      return NULL;\r
-    }\r
-    NBREF(node)->back_dynamic = p;\r
-    for (i = 0; i < back_num; i++)\r
-      p[i] = backrefs[i];\r
-  }\r
-  return node;\r
-}\r
-\r
-#ifdef USE_SUBEXP_CALL\r
-static Node*\r
-node_new_call(UChar* name, UChar* name_end, int gnum)\r
+static int\r
+get_callout_opt_arg_num_by_name_id(int name_id)\r
 {\r
-  Node* node = node_new();\r
-  CHECK_NULL_RETURN(node);\r
-\r
-  SET_NTYPE(node, NT_CALL);\r
-  NCALL(node)->state     = 0;\r
-  NCALL(node)->target    = NULL_NODE;\r
-  NCALL(node)->name      = name;\r
-  NCALL(node)->name_end  = name_end;\r
-  NCALL(node)->group_num = gnum;  /* call by number if gnum != 0 */\r
-  return node;\r
+  return GlobalCalloutNameList->v[name_id].opt_arg_num;\r
 }\r
-#endif\r
 \r
-static Node*\r
-node_new_quantifier(int lower, int upper, int by_number)\r
+static unsigned int\r
+get_callout_arg_type_by_name_id(int name_id, int index)\r
 {\r
-  Node* node = node_new();\r
-  CHECK_NULL_RETURN(node);\r
-\r
-  SET_NTYPE(node, NT_QTFR);\r
-  NQTFR(node)->state  = 0;\r
-  NQTFR(node)->target = NULL;\r
-  NQTFR(node)->lower  = lower;\r
-  NQTFR(node)->upper  = upper;\r
-  NQTFR(node)->greedy = 1;\r
-  NQTFR(node)->target_empty_info = NQ_TARGET_ISNOT_EMPTY;\r
-  NQTFR(node)->head_exact        = NULL_NODE;\r
-  NQTFR(node)->next_head_exact   = NULL_NODE;\r
-  NQTFR(node)->is_refered        = 0;\r
-  if (by_number != 0)\r
-    NQTFR(node)->state |= NST_BY_NUMBER;\r
-\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-  NQTFR(node)->comb_exp_check_num = 0;\r
-#endif\r
-\r
-  return node;\r
+  return GlobalCalloutNameList->v[name_id].arg_types[index];\r
 }\r
 \r
-static Node*\r
-node_new_enclose(int type)\r
+static OnigValue\r
+get_callout_opt_default_by_name_id(int name_id, int index)\r
 {\r
-  Node* node = node_new();\r
-  CHECK_NULL_RETURN(node);\r
-\r
-  SET_NTYPE(node, NT_ENCLOSE);\r
-  NENCLOSE(node)->type      = type;\r
-  NENCLOSE(node)->state     =  0;\r
-  NENCLOSE(node)->regnum    =  0;\r
-  NENCLOSE(node)->option    =  0;\r
-  NENCLOSE(node)->target    = NULL;\r
-  NENCLOSE(node)->call_addr = -1;\r
-  NENCLOSE(node)->opt_count =  0;\r
-  return node;\r
+  return GlobalCalloutNameList->v[name_id].opt_defaults[index];\r
 }\r
 \r
-extern Node*\r
-onig_node_new_enclose(int type)\r
+extern UChar*\r
+onig_get_callout_name_by_name_id(int name_id)\r
 {\r
-  return node_new_enclose(type);\r
+  if (name_id < 0 || name_id >= GlobalCalloutNameList->n)\r
+    return 0;\r
+\r
+  return GlobalCalloutNameList->v[name_id].name;\r
 }\r
 \r
-static Node*\r
-node_new_enclose_memory(OnigOptionType option, int is_named)\r
+extern int\r
+onig_global_callout_names_free(void)\r
 {\r
-  Node* node = node_new_enclose(ENCLOSE_MEMORY);\r
-  CHECK_NULL_RETURN(node);\r
-  if (is_named != 0)\r
-    SET_ENCLOSE_STATUS(node, NST_NAMED_GROUP);\r
+  free_callout_func_list(GlobalCalloutNameList);\r
+  GlobalCalloutNameList = 0;\r
 \r
-#ifdef USE_SUBEXP_CALL\r
-  NENCLOSE(node)->option = option;\r
-#endif\r
-  return node;\r
+  global_callout_name_table_free();\r
+  return ONIG_NORMAL;\r
 }\r
 \r
-static Node*\r
-node_new_option(OnigOptionType option)\r
-{\r
-  Node* node = node_new_enclose(ENCLOSE_OPTION);\r
-  CHECK_NULL_RETURN(node);\r
-  NENCLOSE(node)->option = option;\r
-  return node;\r
-}\r
 \r
-extern int\r
-onig_node_str_cat(Node* node, const UChar* s, const UChar* end)\r
-{\r
-  int addlen = (int)(end - s);\r
+typedef st_table   CalloutTagTable;\r
+typedef intptr_t   CalloutTagVal;\r
 \r
-  if (addlen > 0) {\r
-    int len  = (int)(NSTR(node)->end - NSTR(node)->s);\r
+#define CALLOUT_TAG_LIST_FLAG_TAG_EXIST     (1<<0)\r
 \r
-    if (NSTR(node)->capa > 0 || (len + addlen > NODE_STR_BUF_SIZE - 1)) {\r
-      UChar* p;\r
-      int capa = len + addlen + NODE_STR_MARGIN;\r
+static int\r
+i_callout_callout_list_set(UChar* key, CalloutTagVal e, void* arg)\r
+{\r
+  int num;\r
+  RegexExt* ext = (RegexExt* )arg;\r
 \r
-      if (capa <= NSTR(node)->capa) {\r
-       onig_strcpy(NSTR(node)->s + len, s, end);\r
-      }\r
-      else {\r
-       if (NSTR(node)->s == NSTR(node)->buf)\r
-         p = strcat_capa_from_static(NSTR(node)->s, NSTR(node)->end,\r
-                                     s, end, capa);\r
-       else\r
-         p = strcat_capa(NSTR(node)->s, NSTR(node)->end, s, end, capa, NSTR(node)->capa);\r
+  num = (int )e - 1;\r
+  ext->callout_list[num].flag |= CALLOUT_TAG_LIST_FLAG_TAG_EXIST;\r
+  return ST_CONTINUE;\r
+}\r
 \r
-       CHECK_NULL_RETURN_MEMERR(p);\r
-       NSTR(node)->s    = p;\r
-       NSTR(node)->capa = capa;\r
+static int\r
+setup_ext_callout_list_values(regex_t* reg)\r
+{\r
+  int i, j;\r
+  RegexExt* ext;\r
+\r
+  ext = REG_EXTP(reg);\r
+  if (IS_NOT_NULL(ext->tag_table)) {\r
+    onig_st_foreach((CalloutTagTable *)ext->tag_table, i_callout_callout_list_set,\r
+                    (st_data_t )ext);\r
+  }\r
+\r
+  for (i = 0; i < ext->callout_num; i++) {\r
+    CalloutListEntry* e = ext->callout_list + i;\r
+    if (e->of == ONIG_CALLOUT_OF_NAME) {\r
+      for (j = 0; j < e->u.arg.num; j++) {\r
+        if (e->u.arg.types[j] == ONIG_TYPE_TAG) {\r
+          UChar* start;\r
+          UChar* end;\r
+          int num;\r
+          start = e->u.arg.vals[j].s.start;\r
+          end   = e->u.arg.vals[j].s.end;\r
+          num = onig_get_callout_num_by_tag(reg, start, end);\r
+          if (num < 0) return num;\r
+          e->u.arg.vals[j].tag = num;\r
+        }\r
       }\r
     }\r
-    else {\r
-      onig_strcpy(NSTR(node)->s + len, s, end);\r
-    }\r
-    NSTR(node)->end = NSTR(node)->s + len + addlen;\r
   }\r
 \r
-  return 0;\r
+  return ONIG_NORMAL;\r
 }\r
 \r
 extern int\r
-onig_node_str_set(Node* node, const UChar* s, const UChar* end)\r
+onig_callout_tag_is_exist_at_callout_num(regex_t* reg, int callout_num)\r
 {\r
-  onig_node_str_clear(node);\r
-  return onig_node_str_cat(node, s, end);\r
-}\r
+  RegexExt* ext = REG_EXTP(reg);\r
 \r
-static int\r
-node_str_cat_char(Node* node, UChar c)\r
-{\r
-  UChar s[1];\r
+  if (IS_NULL(ext) || IS_NULL(ext->callout_list)) return 0;\r
+  if (callout_num > ext->callout_num) return 0;\r
 \r
-  s[0] = c;\r
-  return onig_node_str_cat(node, s, s + 1);\r
+  return (ext->callout_list[callout_num].flag &\r
+          CALLOUT_TAG_LIST_FLAG_TAG_EXIST) != 0  ? 1 : 0;\r
 }\r
 \r
-extern void\r
-onig_node_conv_to_str_node(Node* node, int flag)\r
+static int\r
+i_free_callout_tag_entry(UChar* key, CalloutTagVal e, void* arg ARG_UNUSED)\r
 {\r
-  SET_NTYPE(node, NT_STR);\r
-  NSTR(node)->flag = flag;\r
-  NSTR(node)->capa = 0;\r
-  NSTR(node)->s    = NSTR(node)->buf;\r
-  NSTR(node)->end  = NSTR(node)->buf;\r
+  xfree(key);\r
+  return ST_DELETE;\r
 }\r
 \r
-extern void\r
-onig_node_str_clear(Node* node)\r
+static int\r
+callout_tag_table_clear(CalloutTagTable* t)\r
 {\r
-  if (NSTR(node)->capa != 0 &&\r
-      IS_NOT_NULL(NSTR(node)->s) && NSTR(node)->s != NSTR(node)->buf) {\r
-    xfree(NSTR(node)->s);\r
+  if (IS_NOT_NULL(t)) {\r
+    onig_st_foreach(t, i_free_callout_tag_entry, 0);\r
   }\r
-\r
-  NSTR(node)->capa = 0;\r
-  NSTR(node)->flag = 0;\r
-  NSTR(node)->s    = NSTR(node)->buf;\r
-  NSTR(node)->end  = NSTR(node)->buf;\r
+  return 0;\r
 }\r
 \r
-static Node*\r
-node_new_str(const UChar* s, const UChar* end)\r
+extern int\r
+onig_callout_tag_table_free(void* table)\r
 {\r
-  Node* node = node_new();\r
-  CHECK_NULL_RETURN(node);\r
+  CalloutTagTable* t = (CalloutTagTable* )table;\r
 \r
-  SET_NTYPE(node, NT_STR);\r
-  NSTR(node)->capa = 0;\r
-  NSTR(node)->flag = 0;\r
-  NSTR(node)->s    = NSTR(node)->buf;\r
-  NSTR(node)->end  = NSTR(node)->buf;\r
-  if (onig_node_str_cat(node, s, end)) {\r
-    onig_node_free(node);\r
-    return NULL;\r
-  }\r
-  return node;\r
-}\r
+  if (IS_NOT_NULL(t)) {\r
+    int r = callout_tag_table_clear(t);\r
+    if (r != 0) return r;\r
 \r
-extern Node*\r
-onig_node_new_str(const UChar* s, const UChar* end)\r
-{\r
-  return node_new_str(s, end);\r
-}\r
+    onig_st_free_table(t);\r
+  }\r
 \r
-static Node*\r
-node_new_str_raw(UChar* s, UChar* end)\r
-{\r
-  Node* node = node_new_str(s, end);\r
-  CHECK_NULL_RETURN(node);\r
-  NSTRING_SET_RAW(node);\r
-  return node;\r
+  return 0;\r
 }\r
 \r
-static Node*\r
-node_new_empty(void)\r
+extern int\r
+onig_get_callout_num_by_tag(regex_t* reg,\r
+                            const UChar* tag, const UChar* tag_end)\r
 {\r
-  return node_new_str(NULL, NULL);\r
-}\r
+  int r;\r
+  RegexExt* ext;\r
+  CalloutTagVal e;\r
 \r
-static Node*\r
-node_new_str_raw_char(UChar c)\r
-{\r
-  UChar p[1];\r
+  ext = REG_EXTP(reg);\r
+  if (IS_NULL(ext) || IS_NULL(ext->tag_table))\r
+    return ONIGERR_INVALID_CALLOUT_TAG_NAME;\r
 \r
-  p[0] = c;\r
-  return node_new_str_raw(p, p + 1);\r
+  r = onig_st_lookup_strend(ext->tag_table, tag, tag_end,\r
+                            (HashDataType* )((void* )(&e)));\r
+  if (r == 0) return ONIGERR_INVALID_CALLOUT_TAG_NAME;\r
+  return (int )e;\r
 }\r
 \r
-static Node*\r
-str_node_split_last_char(StrNode* sn, OnigEncoding enc)\r
+static CalloutTagVal\r
+callout_tag_find(CalloutTagTable* t, const UChar* name, const UChar* name_end)\r
 {\r
-  const UChar *p;\r
-  Node* n = NULL_NODE;\r
+  CalloutTagVal e;\r
 \r
-  if (sn->end > sn->s) {\r
-    p = onigenc_get_prev_char_head(enc, sn->s, sn->end);\r
-    if (p && p > sn->s) { /* can be splitted. */\r
-      n = node_new_str(p, sn->end);\r
-      CHECK_NULL_RETURN(n);\r
-      if ((sn->flag & NSTR_RAW) != 0)\r
-       NSTRING_SET_RAW(n);\r
-      sn->end = (UChar* )p;\r
-    }\r
+  e = -1;\r
+  if (IS_NOT_NULL(t)) {\r
+    onig_st_lookup_strend(t, name, name_end, (HashDataType* )((void* )(&e)));\r
   }\r
-  return n;\r
+  return e;\r
 }\r
 \r
 static int\r
-str_node_can_be_split(StrNode* sn, OnigEncoding enc)\r
+callout_tag_table_new(CalloutTagTable** rt)\r
 {\r
-  if (sn->end > sn->s) {\r
-    return ((enclen(enc, sn->s) < sn->end - sn->s)  ?  1 : 0);\r
-  }\r
-  return 0;\r
+  CalloutTagTable* t;\r
+\r
+  *rt = 0;\r
+  t = onig_st_init_strend_table_with_size(INIT_TAG_NAMES_ALLOC_NUM);\r
+  CHECK_NULL_RETURN_MEMERR(t);\r
+\r
+  *rt = t;\r
+  return ONIG_NORMAL;\r
 }\r
 \r
-#ifdef USE_PAD_TO_SHORT_BYTE_CHAR\r
 static int\r
-node_str_head_pad(StrNode* sn, int num, UChar val)\r
+callout_tag_entry_raw(CalloutTagTable* t, UChar* name, UChar* name_end,\r
+                      CalloutTagVal entry_val)\r
 {\r
-  UChar buf[NODE_STR_BUF_SIZE];\r
-  int i, len;\r
-\r
-  len = sn->end - sn->s;\r
-  onig_strcpy(buf, sn->s, sn->end);\r
-  onig_strcpy(&(sn->s[num]), buf, buf + len);\r
-  sn->end += num;\r
+  int r;\r
+  CalloutTagVal val;\r
 \r
-  for (i = 0; i < num; i++) {\r
-    sn->s[i] = val;\r
-  }\r
-}\r
-#endif\r
+  if (name_end - name <= 0)\r
+    return ONIGERR_INVALID_CALLOUT_TAG_NAME;\r
 \r
-extern int\r
-onig_scan_unsigned_number(UChar** src, const UChar* end, OnigEncoding enc)\r
-{\r
-  unsigned int num, val;\r
-  OnigCodePoint c;\r
-  UChar* p = *src;\r
-  PFETCH_READY;\r
+  val = callout_tag_find(t, name, name_end);\r
+  if (val >= 0)\r
+    return ONIGERR_MULTIPLEX_DEFINED_NAME;\r
 \r
-  num = 0;\r
-  while (!PEND) {\r
-    PFETCH(c);\r
-    if (ONIGENC_IS_CODE_DIGIT(enc, c)) {\r
-      val = (unsigned int )DIGITVAL(c);\r
-      if ((INT_MAX_LIMIT - val) / 10UL < num)\r
-       return -1;  /* overflow */\r
+  r = onig_st_insert_strend(t, name, name_end, (HashDataType )entry_val);\r
+  if (r < 0) return r;\r
 \r
-      num = num * 10 + val;\r
-    }\r
-    else {\r
-      PUNFETCH;\r
-      break;\r
-    }\r
-  }\r
-  *src = p;\r
-  return num;\r
+  return ONIG_NORMAL;\r
 }\r
 \r
 static int\r
-scan_unsigned_hexadecimal_number(UChar** src, UChar* end, int maxlen,\r
-                                OnigEncoding enc)\r
+ext_ensure_tag_table(regex_t* reg)\r
 {\r
-  OnigCodePoint c;\r
-  unsigned int num, val;\r
-  UChar* p = *src;\r
-  PFETCH_READY;\r
+  int r;\r
+  RegexExt* ext;\r
+  CalloutTagTable* t;\r
 \r
-  num = 0;\r
-  while (!PEND && maxlen-- != 0) {\r
-    PFETCH(c);\r
-    if (ONIGENC_IS_CODE_XDIGIT(enc, c)) {\r
-      val = (unsigned int )XDIGITVAL(enc,c);\r
-      if ((INT_MAX_LIMIT - val) / 16UL < num)\r
-       return -1;  /* overflow */\r
+  ext = onig_get_regex_ext(reg);\r
+  CHECK_NULL_RETURN_MEMERR(ext);\r
 \r
-      num = (num << 4) + XDIGITVAL(enc,c);\r
-    }\r
-    else {\r
-      PUNFETCH;\r
-      break;\r
-    }\r
+  if (IS_NULL(ext->tag_table)) {\r
+    r = callout_tag_table_new(&t);\r
+    if (r != ONIG_NORMAL) return r;\r
+\r
+    ext->tag_table = t;\r
   }\r
-  *src = p;\r
-  return num;\r
+\r
+  return ONIG_NORMAL;\r
 }\r
 \r
 static int\r
-scan_unsigned_octal_number(UChar** src, UChar* end, int maxlen,\r
-                          OnigEncoding enc)\r
+callout_tag_entry(regex_t* reg, UChar* name, UChar* name_end,\r
+                  CalloutTagVal entry_val)\r
 {\r
-  OnigCodePoint c;\r
-  unsigned int num, val;\r
-  UChar* p = *src;\r
-  PFETCH_READY;\r
+  int r;\r
+  RegexExt* ext;\r
+  CalloutListEntry* e;\r
 \r
-  num = 0;\r
-  while (!PEND && maxlen-- != 0) {\r
-    PFETCH(c);\r
-    if (ONIGENC_IS_CODE_DIGIT(enc, c) && c < '8') {\r
-      val = ODIGITVAL(c);\r
-      if ((INT_MAX_LIMIT - val) / 8UL < num)\r
-       return -1;  /* overflow */\r
+  r = ext_ensure_tag_table(reg);\r
+  if (r != ONIG_NORMAL) return r;\r
 \r
-      num = (num << 3) + val;\r
-    }\r
-    else {\r
-      PUNFETCH;\r
-      break;\r
-    }\r
-  }\r
-  *src = p;\r
-  return num;\r
-}\r
+  ext = onig_get_regex_ext(reg);\r
+  r = callout_tag_entry_raw(ext->tag_table, name, name_end, entry_val);\r
 \r
+  e = onig_reg_callout_list_at(reg, (int )entry_val);\r
+  e->tag_start = name;\r
+  e->tag_end   = name_end;\r
 \r
-#define BBUF_WRITE_CODE_POINT(bbuf,pos,code) \\r
-    BBUF_WRITE(bbuf, pos, &(code), SIZE_CODE_POINT)\r
+  return r;\r
+}\r
 \r
-/* data format:\r
-     [n][from-1][to-1][from-2][to-2] ... [from-n][to-n]\r
-     (all data size is OnigCodePoint)\r
- */\r
-static int\r
-new_code_range(BBuf** pbuf)\r
-{\r
-#define INIT_MULTI_BYTE_RANGE_SIZE  (SIZE_CODE_POINT * 5)\r
-  int r;\r
-  OnigCodePoint n;\r
-  BBuf* bbuf;\r
+#endif /* USE_CALLOUT */\r
 \r
-  bbuf = *pbuf = (BBuf* )xmalloc(sizeof(BBuf));\r
-  CHECK_NULL_RETURN_MEMERR(*pbuf);\r
-  r = BBUF_INIT(*pbuf, INIT_MULTI_BYTE_RANGE_SIZE);\r
-  if (r) return r;\r
 \r
-  n = 0;\r
-  BBUF_WRITE_CODE_POINT(bbuf, 0, n);\r
-  return 0;\r
-}\r
+#define INIT_SCANENV_MEMENV_ALLOC_SIZE   16\r
 \r
-static int\r
-add_code_range_to_buf(BBuf** pbuf, OnigCodePoint from, OnigCodePoint to)\r
+static void\r
+scan_env_clear(ScanEnv* env)\r
 {\r
-  int r, inc_n, pos;\r
-  int low, high, bound, x;\r
-  OnigCodePoint n, *data;\r
-  BBuf* bbuf;\r
+  MEM_STATUS_CLEAR(env->capture_history);\r
+  MEM_STATUS_CLEAR(env->bt_mem_start);\r
+  MEM_STATUS_CLEAR(env->bt_mem_end);\r
+  MEM_STATUS_CLEAR(env->backrefed_mem);\r
+  env->error      = (UChar* )NULL;\r
+  env->error_end  = (UChar* )NULL;\r
+  env->num_call   = 0;\r
 \r
-  if (from > to) {\r
-    n = from; from = to; to = n;\r
-  }\r
+#ifdef USE_CALL\r
+  env->unset_addr_list = NULL;\r
+  env->has_call_zero   = 0;\r
+#endif\r
 \r
-  if (IS_NULL(*pbuf)) {\r
-    r = new_code_range(pbuf);\r
-    if (r) return r;\r
-    bbuf = *pbuf;\r
-    n = 0;\r
-  }\r
-  else {\r
-    bbuf = *pbuf;\r
-    GET_CODE_POINT(n, bbuf->p);\r
-  }\r
-  data = (OnigCodePoint* )(bbuf->p);\r
-  data++;\r
+  env->num_mem    = 0;\r
+  env->num_named  = 0;\r
+  env->mem_alloc  = 0;\r
+  env->mem_env_dynamic = (MemEnv* )NULL;\r
 \r
-  for (low = 0, bound = n; low < bound; ) {\r
-    x = (low + bound) >> 1;\r
-    if (from > data[x*2 + 1])\r
-      low = x + 1;\r
-    else\r
-      bound = x;\r
-  }\r
+  xmemset(env->mem_env_static, 0, sizeof(env->mem_env_static));\r
 \r
-  for (high = low, bound = n; high < bound; ) {\r
-    x = (high + bound) >> 1;\r
-    if (to >= data[x*2] - 1)\r
-      high = x + 1;\r
-    else\r
-      bound = x;\r
-  }\r
+  env->parse_depth         = 0;\r
+  env->keep_num            = 0;\r
+  env->save_num            = 0;\r
+  env->save_alloc_num      = 0;\r
+  env->saves               = 0;\r
+}\r
 \r
-  inc_n = low + 1 - high;\r
-  if (n + inc_n > ONIG_MAX_MULTI_BYTE_RANGES_NUM)\r
-    return ONIGERR_TOO_MANY_MULTI_BYTE_RANGES;\r
+static int\r
+scan_env_add_mem_entry(ScanEnv* env)\r
+{\r
+  int i, need, alloc;\r
+  MemEnv* p;\r
 \r
-  if (inc_n != 1) {\r
-    if (from > data[low*2])\r
-      from = data[low*2];\r
-    if (to < data[(high - 1)*2 + 1])\r
-      to = data[(high - 1)*2 + 1];\r
-  }\r
+  need = env->num_mem + 1;\r
+  if (need > MaxCaptureNum && MaxCaptureNum != 0)\r
+    return ONIGERR_TOO_MANY_CAPTURES;\r
 \r
-  if (inc_n != 0 && (OnigCodePoint )high < n) {\r
-    int from_pos = SIZE_CODE_POINT * (1 + high * 2);\r
-    int to_pos   = SIZE_CODE_POINT * (1 + (low + 1) * 2);\r
-    int size = (n - high) * 2 * SIZE_CODE_POINT;\r
+  if (need >= SCANENV_MEMENV_SIZE) {\r
+    if (env->mem_alloc <= need) {\r
+      if (IS_NULL(env->mem_env_dynamic)) {\r
+        alloc = INIT_SCANENV_MEMENV_ALLOC_SIZE;\r
+        p = (MemEnv* )xmalloc(sizeof(MemEnv) * alloc);\r
+        CHECK_NULL_RETURN_MEMERR(p);\r
+        xmemcpy(p, env->mem_env_static, sizeof(env->mem_env_static));\r
+      }\r
+      else {\r
+        alloc = env->mem_alloc * 2;\r
+        p = (MemEnv* )xrealloc(env->mem_env_dynamic, sizeof(MemEnv) * alloc, sizeof(MemEnv)*env->mem_alloc);\r
+        CHECK_NULL_RETURN_MEMERR(p);\r
+      }\r
 \r
-    if (inc_n > 0) {\r
-      BBUF_MOVE_RIGHT(bbuf, from_pos, to_pos, size);\r
-    }\r
-    else {\r
-      BBUF_MOVE_LEFT_REDUCE(bbuf, from_pos, to_pos);\r
+      for (i = env->num_mem + 1; i < alloc; i++) {\r
+        p[i].node = NULL_NODE;\r
+#if 0\r
+        p[i].in   = 0;\r
+        p[i].recursion = 0;\r
+#endif\r
+      }\r
+\r
+      env->mem_env_dynamic = p;\r
+      env->mem_alloc = alloc;\r
     }\r
   }\r
 \r
-  pos = SIZE_CODE_POINT * (1 + low * 2);\r
-  BBUF_ENSURE_SIZE(bbuf, pos + SIZE_CODE_POINT * 2);\r
-  BBUF_WRITE_CODE_POINT(bbuf, pos, from);\r
-  BBUF_WRITE_CODE_POINT(bbuf, pos + SIZE_CODE_POINT, to);\r
-  n += inc_n;\r
-  BBUF_WRITE_CODE_POINT(bbuf, 0, n);\r
-\r
-  return 0;\r
+  env->num_mem++;\r
+  return env->num_mem;\r
 }\r
 \r
 static int\r
-add_code_range(BBuf** pbuf, ScanEnv* env, OnigCodePoint from, OnigCodePoint to)\r
+scan_env_set_mem_node(ScanEnv* env, int num, Node* node)\r
 {\r
-  if (from > to) {\r
-    if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC))\r
-      return 0;\r
-    else\r
-      return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS;\r
-  }\r
-\r
-  return add_code_range_to_buf(pbuf, from, to);\r
+  if (env->num_mem >= num)\r
+    SCANENV_MEMENV(env)[num].node = node;\r
+  else\r
+    return ONIGERR_PARSER_BUG;\r
+  return 0;\r
 }\r
 \r
-static int\r
-not_code_range_buf(OnigEncoding enc, BBuf* bbuf, BBuf** pbuf)\r
+extern void\r
+onig_node_free(Node* node)\r
 {\r
-  int r, i, n;\r
-  OnigCodePoint pre, from, *data, to = 0;\r
+ start:\r
+  if (IS_NULL(node)) return ;\r
 \r
-  *pbuf = (BBuf* )NULL;\r
-  if (IS_NULL(bbuf)) {\r
-  set_all:\r
-    return SET_ALL_MULTI_BYTE_RANGE(enc, pbuf);\r
-  }\r
+#ifdef DEBUG_NODE_FREE\r
+  fprintf(stderr, "onig_node_free: %p\n", node);\r
+#endif\r
 \r
-  data = (OnigCodePoint* )(bbuf->p);\r
-  GET_CODE_POINT(n, data);\r
-  data++;\r
-  if (n <= 0) goto set_all;\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_STRING:\r
+    if (STR_(node)->capa != 0 &&\r
+        IS_NOT_NULL(STR_(node)->s) && STR_(node)->s != STR_(node)->buf) {\r
+      xfree(STR_(node)->s);\r
+    }\r
+    break;\r
 \r
-  r = 0;\r
-  pre = MBCODE_START_POS(enc);\r
-  for (i = 0; i < n; i++) {\r
-    from = data[i*2];\r
-    to   = data[i*2+1];\r
-    if (pre <= from - 1) {\r
-      r = add_code_range_to_buf(pbuf, pre, from - 1);\r
-      if (r != 0) return r;\r
+  case NODE_LIST:\r
+  case NODE_ALT:\r
+    onig_node_free(NODE_CAR(node));\r
+    {\r
+      Node* next_node = NODE_CDR(node);\r
+\r
+      xfree(node);\r
+      node = next_node;\r
+      goto start;\r
     }\r
-    if (to == ~((OnigCodePoint )0)) break;\r
-    pre = to + 1;\r
-  }\r
-  if (to < ~((OnigCodePoint )0)) {\r
-    r = add_code_range_to_buf(pbuf, to + 1, ~((OnigCodePoint )0));\r
-  }\r
-  return r;\r
-}\r
+    break;\r
 \r
-#define SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2) do {\\r
-  BBuf *tbuf; \\r
-  int  tnot; \\r
-  tnot = not1;  not1  = not2;  not2  = tnot; \\r
-  tbuf = bbuf1; bbuf1 = bbuf2; bbuf2 = tbuf; \\r
-} while (0)\r
+  case NODE_CCLASS:\r
+    {\r
+      CClassNode* cc = CCLASS_(node);\r
 \r
-static int\r
-or_code_range_buf(OnigEncoding enc, BBuf* bbuf1, int not1,\r
-                  BBuf* bbuf2, int not2, BBuf** pbuf)\r
-{\r
-  int r;\r
-  OnigCodePoint i, n1, *data1;\r
-  OnigCodePoint from, to;\r
+      if (cc->mbuf)\r
+        bbuf_free(cc->mbuf);\r
+    }\r
+    break;\r
 \r
-  *pbuf = (BBuf* )NULL;\r
-  if (IS_NULL(bbuf1) && IS_NULL(bbuf2)) {\r
-    if (not1 != 0 || not2 != 0)\r
-      return SET_ALL_MULTI_BYTE_RANGE(enc, pbuf);\r
-    return 0;\r
-  }\r
+  case NODE_BACKREF:\r
+    if (IS_NOT_NULL(BACKREF_(node)->back_dynamic))\r
+      xfree(BACKREF_(node)->back_dynamic);\r
+    break;\r
 \r
-  r = 0;\r
-  if (IS_NULL(bbuf2))\r
-    SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2);\r
+  case NODE_ENCLOSURE:\r
+    if (NODE_BODY(node))\r
+      onig_node_free(NODE_BODY(node));\r
 \r
-  if (IS_NULL(bbuf1)) {\r
-    if (not1 != 0) {\r
-      return SET_ALL_MULTI_BYTE_RANGE(enc, pbuf);\r
-    }\r
-    else {\r
-      if (not2 == 0) {\r
-       return bbuf_clone(pbuf, bbuf2);\r
-      }\r
-      else {\r
-       return not_code_range_buf(enc, bbuf2, pbuf);\r
+    {\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+      if (en->type == ENCLOSURE_IF_ELSE) {\r
+        onig_node_free(en->te.Then);\r
+        onig_node_free(en->te.Else);\r
       }\r
     }\r
-  }\r
-\r
-  if (not1 != 0)\r
-    SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2);\r
+    break;\r
 \r
-  data1 = (OnigCodePoint* )(bbuf1->p);\r
-  GET_CODE_POINT(n1, data1);\r
-  data1++;\r
+  case NODE_QUANT:\r
+  case NODE_ANCHOR:\r
+    if (NODE_BODY(node))\r
+      onig_node_free(NODE_BODY(node));\r
+    break;\r
 \r
-  if (not2 == 0 && not1 == 0) { /* 1 OR 2 */\r
-    r = bbuf_clone(pbuf, bbuf2);\r
-  }\r
-  else if (not1 == 0) { /* 1 OR (not 2) */\r
-    r = not_code_range_buf(enc, bbuf2, pbuf);\r
+  case NODE_CTYPE:\r
+  case NODE_CALL:\r
+  case NODE_GIMMICK:\r
+    break;\r
   }\r
-  if (r != 0) return r;\r
 \r
-  for (i = 0; i < n1; i++) {\r
-    from = data1[i*2];\r
-    to   = data1[i*2+1];\r
-    r = add_code_range_to_buf(pbuf, from, to);\r
-    if (r != 0) return r;\r
-  }\r
-  return 0;\r
+  xfree(node);\r
 }\r
 \r
-static int\r
-and_code_range1(BBuf** pbuf, OnigCodePoint from1, OnigCodePoint to1,\r
-               OnigCodePoint* data, int n)\r
+static void\r
+cons_node_free_alone(Node* node)\r
 {\r
-  int i, r;\r
-  OnigCodePoint from2, to2;\r
-\r
-  for (i = 0; i < n; i++) {\r
-    from2 = data[i*2];\r
-    to2   = data[i*2+1];\r
-    if (from2 < from1) {\r
-      if (to2 < from1) continue;\r
-      else {\r
-       from1 = to2 + 1;\r
-      }\r
-    }\r
-    else if (from2 <= to1) {\r
-      if (to2 < to1) {\r
-       if (from1 <= from2 - 1) {\r
-         r = add_code_range_to_buf(pbuf, from1, from2-1);\r
-         if (r != 0) return r;\r
-       }\r
-       from1 = to2 + 1;\r
-      }\r
-      else {\r
-       to1 = from2 - 1;\r
-      }\r
-    }\r
-    else {\r
-      from1 = from2;\r
-    }\r
-    if (from1 > to1) break;\r
-  }\r
-  if (from1 <= to1) {\r
-    r = add_code_range_to_buf(pbuf, from1, to1);\r
-    if (r != 0) return r;\r
-  }\r
-  return 0;\r
+  NODE_CAR(node) = 0;\r
+  NODE_CDR(node) = 0;\r
+  onig_node_free(node);\r
 }\r
 \r
-static int\r
-and_code_range_buf(BBuf* bbuf1, int not1, BBuf* bbuf2, int not2, BBuf** pbuf)\r
+static Node*\r
+node_new(void)\r
 {\r
-  int r;\r
-  OnigCodePoint i, j, n1, n2, *data1, *data2;\r
-  OnigCodePoint from, to, from1, to1, from2, to2;\r
+  Node* node;\r
 \r
-  *pbuf = (BBuf* )NULL;\r
-  if (IS_NULL(bbuf1)) {\r
-    if (not1 != 0 && IS_NOT_NULL(bbuf2)) /* not1 != 0 -> not2 == 0 */\r
-      return bbuf_clone(pbuf, bbuf2);\r
-    return 0;\r
-  }\r
-  else if (IS_NULL(bbuf2)) {\r
-    if (not2 != 0)\r
-      return bbuf_clone(pbuf, bbuf1);\r
-    return 0;\r
-  }\r
+  node = (Node* )xmalloc(sizeof(Node));\r
+  xmemset(node, 0, sizeof(*node));\r
 \r
-  if (not1 != 0)\r
-    SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2);\r
+#ifdef DEBUG_NODE_FREE\r
+  fprintf(stderr, "node_new: %p\n", node);\r
+#endif\r
+  return node;\r
+}\r
 \r
-  data1 = (OnigCodePoint* )(bbuf1->p);\r
-  data2 = (OnigCodePoint* )(bbuf2->p);\r
-  GET_CODE_POINT(n1, data1);\r
-  GET_CODE_POINT(n2, data2);\r
-  data1++;\r
-  data2++;\r
 \r
-  if (not2 == 0 && not1 == 0) { /* 1 AND 2 */\r
-    for (i = 0; i < n1; i++) {\r
-      from1 = data1[i*2];\r
-      to1   = data1[i*2+1];\r
-      for (j = 0; j < n2; j++) {\r
-       from2 = data2[j*2];\r
-       to2   = data2[j*2+1];\r
-       if (from2 > to1) break;\r
-       if (to2 < from1) continue;\r
-       from = MAX(from1, from2);\r
-       to   = MIN(to1, to2);\r
-       r = add_code_range_to_buf(pbuf, from, to);\r
-       if (r != 0) return r;\r
-      }\r
-    }\r
-  }\r
-  else if (not1 == 0) { /* 1 AND (not 2) */\r
-    for (i = 0; i < n1; i++) {\r
-      from1 = data1[i*2];\r
-      to1   = data1[i*2+1];\r
+static void\r
+initialize_cclass(CClassNode* cc)\r
+{\r
+  BITSET_CLEAR(cc->bs);\r
+  cc->flags = 0;\r
+  cc->mbuf  = NULL;\r
+}\r
+\r
+static Node*\r
+node_new_cclass(void)\r
+{\r
+  Node* node = node_new();\r
+  CHECK_NULL_RETURN(node);\r
+\r
+  NODE_SET_TYPE(node, NODE_CCLASS);\r
+  initialize_cclass(CCLASS_(node));\r
+  return node;\r
+}\r
+\r
+static Node*\r
+node_new_ctype(int type, int not, OnigOptionType options)\r
+{\r
+  Node* node = node_new();\r
+  CHECK_NULL_RETURN(node);\r
+\r
+  NODE_SET_TYPE(node, NODE_CTYPE);\r
+  CTYPE_(node)->ctype   = type;\r
+  CTYPE_(node)->not     = not;\r
+  CTYPE_(node)->options = options;\r
+  CTYPE_(node)->ascii_mode = IS_ASCII_MODE_CTYPE_OPTION(type, options);\r
+  return node;\r
+}\r
+\r
+static Node*\r
+node_new_anychar(void)\r
+{\r
+  Node* node = node_new_ctype(CTYPE_ANYCHAR, 0, ONIG_OPTION_NONE);\r
+  return node;\r
+}\r
+\r
+static Node*\r
+node_new_anychar_with_fixed_option(OnigOptionType option)\r
+{\r
+  CtypeNode* ct;\r
+  Node* node;\r
+\r
+  node = node_new_anychar();\r
+  ct = CTYPE_(node);\r
+  ct->options = option;\r
+  NODE_STATUS_ADD(node, FIXED_OPTION);\r
+  return node;\r
+}\r
+\r
+static int\r
+node_new_no_newline(Node** node, ScanEnv* env)\r
+{\r
+  Node* n;\r
+\r
+  n = node_new_anychar_with_fixed_option(ONIG_OPTION_NONE);\r
+  CHECK_NULL_RETURN_MEMERR(n);\r
+  *node = n;\r
+  return 0;\r
+}\r
+\r
+static int\r
+node_new_true_anychar(Node** node, ScanEnv* env)\r
+{\r
+  Node* n;\r
+\r
+  n = node_new_anychar_with_fixed_option(ONIG_OPTION_MULTILINE);\r
+  CHECK_NULL_RETURN_MEMERR(n);\r
+  *node = n;\r
+  return 0;\r
+}\r
+\r
+static Node*\r
+node_new_list(Node* left, Node* right)\r
+{\r
+  Node* node = node_new();\r
+  CHECK_NULL_RETURN(node);\r
+\r
+  NODE_SET_TYPE(node, NODE_LIST);\r
+  NODE_CAR(node)  = left;\r
+  NODE_CDR(node) = right;\r
+  return node;\r
+}\r
+\r
+extern Node*\r
+onig_node_new_list(Node* left, Node* right)\r
+{\r
+  return node_new_list(left, right);\r
+}\r
+\r
+extern Node*\r
+onig_node_list_add(Node* list, Node* x)\r
+{\r
+  Node *n;\r
+\r
+  n = onig_node_new_list(x, NULL);\r
+  if (IS_NULL(n)) return NULL_NODE;\r
+\r
+  if (IS_NOT_NULL(list)) {\r
+    while (IS_NOT_NULL(NODE_CDR(list)))\r
+      list = NODE_CDR(list);\r
+\r
+    NODE_CDR(list) = n;\r
+  }\r
+\r
+  return n;\r
+}\r
+\r
+extern Node*\r
+onig_node_new_alt(Node* left, Node* right)\r
+{\r
+  Node* node = node_new();\r
+  CHECK_NULL_RETURN(node);\r
+\r
+  NODE_SET_TYPE(node, NODE_ALT);\r
+  NODE_CAR(node)  = left;\r
+  NODE_CDR(node) = right;\r
+  return node;\r
+}\r
+\r
+static Node*\r
+make_list_or_alt(NodeType type, int n, Node* ns[])\r
+{\r
+  Node* r;\r
+\r
+  if (n <= 0) return NULL_NODE;\r
+\r
+  if (n == 1) {\r
+    r = node_new();\r
+    CHECK_NULL_RETURN(r);\r
+    NODE_SET_TYPE(r, type);\r
+    NODE_CAR(r) = ns[0];\r
+    NODE_CDR(r) = NULL_NODE;\r
+  }\r
+  else {\r
+    Node* right;\r
+\r
+    r = node_new();\r
+    CHECK_NULL_RETURN(r);\r
+\r
+    right = make_list_or_alt(type, n - 1, ns + 1);\r
+    if (IS_NULL(right)) {\r
+      onig_node_free(r);\r
+      return NULL_NODE;\r
+    }\r
+\r
+    NODE_SET_TYPE(r, type);\r
+    NODE_CAR(r) = ns[0];\r
+    NODE_CDR(r) = right;\r
+  }\r
+\r
+  return r;\r
+}\r
+\r
+static Node*\r
+make_list(int n, Node* ns[])\r
+{\r
+  return make_list_or_alt(NODE_LIST, n, ns);\r
+}\r
+\r
+static Node*\r
+make_alt(int n, Node* ns[])\r
+{\r
+  return make_list_or_alt(NODE_ALT, n, ns);\r
+}\r
+\r
+extern Node*\r
+onig_node_new_anchor(int type, int ascii_mode)\r
+{\r
+  Node* node = node_new();\r
+  CHECK_NULL_RETURN(node);\r
+\r
+  NODE_SET_TYPE(node, NODE_ANCHOR);\r
+  ANCHOR_(node)->type       = type;\r
+  ANCHOR_(node)->char_len   = -1;\r
+  ANCHOR_(node)->ascii_mode = ascii_mode;\r
+  return node;\r
+}\r
+\r
+static Node*\r
+node_new_backref(int back_num, int* backrefs, int by_name,\r
+#ifdef USE_BACKREF_WITH_LEVEL\r
+                 int exist_level, int nest_level,\r
+#endif\r
+                 ScanEnv* env)\r
+{\r
+  int i;\r
+  Node* node = node_new();\r
+\r
+  CHECK_NULL_RETURN(node);\r
+\r
+  NODE_SET_TYPE(node, NODE_BACKREF);\r
+  BACKREF_(node)->back_num = back_num;\r
+  BACKREF_(node)->back_dynamic = (int* )NULL;\r
+  if (by_name != 0)\r
+    NODE_STATUS_ADD(node, BY_NAME);\r
+\r
+#ifdef USE_BACKREF_WITH_LEVEL\r
+  if (exist_level != 0) {\r
+    NODE_STATUS_ADD(node, NEST_LEVEL);\r
+    BACKREF_(node)->nest_level  = nest_level;\r
+  }\r
+#endif\r
+\r
+  for (i = 0; i < back_num; i++) {\r
+    if (backrefs[i] <= env->num_mem &&\r
+        IS_NULL(SCANENV_MEMENV(env)[backrefs[i]].node)) {\r
+      NODE_STATUS_ADD(node, RECURSION);   /* /...(\1).../ */\r
+      break;\r
+    }\r
+  }\r
+\r
+  if (back_num <= NODE_BACKREFS_SIZE) {\r
+    for (i = 0; i < back_num; i++)\r
+      BACKREF_(node)->back_static[i] = backrefs[i];\r
+  }\r
+  else {\r
+    int* p = (int* )xmalloc(sizeof(int) * back_num);\r
+    if (IS_NULL(p)) {\r
+      onig_node_free(node);\r
+      return NULL;\r
+    }\r
+    BACKREF_(node)->back_dynamic = p;\r
+    for (i = 0; i < back_num; i++)\r
+      p[i] = backrefs[i];\r
+  }\r
+  return node;\r
+}\r
+\r
+static Node*\r
+node_new_backref_checker(int back_num, int* backrefs, int by_name,\r
+#ifdef USE_BACKREF_WITH_LEVEL\r
+                         int exist_level, int nest_level,\r
+#endif\r
+                         ScanEnv* env)\r
+{\r
+  Node* node;\r
+\r
+  node = node_new_backref(back_num, backrefs, by_name,\r
+#ifdef USE_BACKREF_WITH_LEVEL\r
+                          exist_level, nest_level,\r
+#endif\r
+                          env);\r
+  CHECK_NULL_RETURN(node);\r
+\r
+  NODE_STATUS_ADD(node, CHECKER);\r
+  return node;\r
+}\r
+\r
+#ifdef USE_CALL\r
+static Node*\r
+node_new_call(UChar* name, UChar* name_end, int gnum, int by_number)\r
+{\r
+  Node* node = node_new();\r
+  CHECK_NULL_RETURN(node);\r
+\r
+  NODE_SET_TYPE(node, NODE_CALL);\r
+  CALL_(node)->by_number   = by_number;\r
+  CALL_(node)->name        = name;\r
+  CALL_(node)->name_end    = name_end;\r
+  CALL_(node)->group_num   = gnum;\r
+  CALL_(node)->entry_count = 1;\r
+  return node;\r
+}\r
+#endif\r
+\r
+static Node*\r
+node_new_quantifier(int lower, int upper, int by_number)\r
+{\r
+  Node* node = node_new();\r
+  CHECK_NULL_RETURN(node);\r
+\r
+  NODE_SET_TYPE(node, NODE_QUANT);\r
+  QUANT_(node)->lower  = lower;\r
+  QUANT_(node)->upper  = upper;\r
+  QUANT_(node)->greedy = 1;\r
+  QUANT_(node)->body_empty_info = QUANT_BODY_IS_NOT_EMPTY;\r
+  QUANT_(node)->head_exact      = NULL_NODE;\r
+  QUANT_(node)->next_head_exact = NULL_NODE;\r
+  QUANT_(node)->is_refered      = 0;\r
+  if (by_number != 0)\r
+    NODE_STATUS_ADD(node, BY_NUMBER);\r
+\r
+  return node;\r
+}\r
+\r
+static Node*\r
+node_new_enclosure(enum EnclosureType type)\r
+{\r
+  Node* node = node_new();\r
+  CHECK_NULL_RETURN(node);\r
+\r
+  NODE_SET_TYPE(node, NODE_ENCLOSURE);\r
+  ENCLOSURE_(node)->type = type;\r
+\r
+  switch (type) {\r
+  case ENCLOSURE_MEMORY:\r
+    ENCLOSURE_(node)->m.regnum       =  0;\r
+    ENCLOSURE_(node)->m.called_addr  = -1;\r
+    ENCLOSURE_(node)->m.entry_count  =  1;\r
+    ENCLOSURE_(node)->m.called_state =  0;\r
+    break;\r
+\r
+  case ENCLOSURE_OPTION:\r
+    ENCLOSURE_(node)->o.options =  0;\r
+    break;\r
+\r
+  case ENCLOSURE_STOP_BACKTRACK:\r
+    break;\r
+\r
+  case ENCLOSURE_IF_ELSE:\r
+    ENCLOSURE_(node)->te.Then = 0;\r
+    ENCLOSURE_(node)->te.Else = 0;\r
+    break;\r
+  }\r
+\r
+  ENCLOSURE_(node)->opt_count = 0;\r
+  return node;\r
+}\r
+\r
+extern Node*\r
+onig_node_new_enclosure(int type)\r
+{\r
+  return node_new_enclosure(type);\r
+}\r
+\r
+static Node*\r
+node_new_enclosure_if_else(Node* cond, Node* Then, Node* Else)\r
+{\r
+  Node* n;\r
+  n = node_new_enclosure(ENCLOSURE_IF_ELSE);\r
+  CHECK_NULL_RETURN(n);\r
+\r
+  NODE_BODY(n) = cond;\r
+  ENCLOSURE_(n)->te.Then = Then;\r
+  ENCLOSURE_(n)->te.Else = Else;\r
+  return n;\r
+}\r
+\r
+static Node*\r
+node_new_memory(int is_named)\r
+{\r
+  Node* node = node_new_enclosure(ENCLOSURE_MEMORY);\r
+  CHECK_NULL_RETURN(node);\r
+  if (is_named != 0)\r
+    NODE_STATUS_ADD(node, NAMED_GROUP);\r
+\r
+  return node;\r
+}\r
+\r
+static Node*\r
+node_new_option(OnigOptionType option)\r
+{\r
+  Node* node = node_new_enclosure(ENCLOSURE_OPTION);\r
+  CHECK_NULL_RETURN(node);\r
+  ENCLOSURE_(node)->o.options = option;\r
+  return node;\r
+}\r
+\r
+static int\r
+node_new_fail(Node** node, ScanEnv* env)\r
+{\r
+  *node = node_new();\r
+  CHECK_NULL_RETURN_MEMERR(*node);\r
+\r
+  NODE_SET_TYPE(*node, NODE_GIMMICK);\r
+  GIMMICK_(*node)->type = GIMMICK_FAIL;\r
+  return ONIG_NORMAL;\r
+}\r
+\r
+static int\r
+node_new_save_gimmick(Node** node, enum SaveType save_type, ScanEnv* env)\r
+{\r
+  int id;\r
+  int r;\r
+\r
+  r = save_entry(env, save_type, &id);\r
+  if (r != ONIG_NORMAL) return r;\r
+\r
+  *node = node_new();\r
+  CHECK_NULL_RETURN_MEMERR(*node);\r
+\r
+  NODE_SET_TYPE(*node, NODE_GIMMICK);\r
+  GIMMICK_(*node)->id   = id;\r
+  GIMMICK_(*node)->type = GIMMICK_SAVE;\r
+  GIMMICK_(*node)->detail_type = (int )save_type;\r
+\r
+  return ONIG_NORMAL;\r
+}\r
+\r
+static int\r
+node_new_update_var_gimmick(Node** node, enum UpdateVarType update_var_type,\r
+                            int id, ScanEnv* env)\r
+{\r
+  *node = node_new();\r
+  CHECK_NULL_RETURN_MEMERR(*node);\r
+\r
+  NODE_SET_TYPE(*node, NODE_GIMMICK);\r
+  GIMMICK_(*node)->id   = id;\r
+  GIMMICK_(*node)->type = GIMMICK_UPDATE_VAR;\r
+  GIMMICK_(*node)->detail_type = (int )update_var_type;\r
+\r
+  return ONIG_NORMAL;\r
+}\r
+\r
+static int\r
+node_new_keep(Node** node, ScanEnv* env)\r
+{\r
+  int r;\r
+\r
+  r = node_new_save_gimmick(node, SAVE_KEEP, env);\r
+  if (r != 0) return r;\r
+\r
+  env->keep_num++;\r
+  return ONIG_NORMAL;\r
+}\r
+\r
+#ifdef USE_CALLOUT\r
+\r
+extern void\r
+onig_free_reg_callout_list(int n, CalloutListEntry* list)\r
+{\r
+  int i;\r
+  int j;\r
+\r
+  if (IS_NULL(list)) return ;\r
+\r
+  for (i = 0; i < n; i++) {\r
+    if (list[i].of == ONIG_CALLOUT_OF_NAME) {\r
+      for (j = 0; j < list[i].u.arg.passed_num; j++) {\r
+        if (list[i].u.arg.types[j] == ONIG_TYPE_STRING) {\r
+          if (IS_NOT_NULL(list[i].u.arg.vals[j].s.start))\r
+            xfree(list[i].u.arg.vals[j].s.start);\r
+        }\r
+      }\r
+    }\r
+    else { /* ONIG_CALLOUT_OF_CONTENTS */\r
+      if (IS_NOT_NULL(list[i].u.content.start)) {\r
+        xfree((void* )list[i].u.content.start);\r
+      }\r
+    }\r
+  }\r
+\r
+  xfree(list);\r
+}\r
+\r
+extern CalloutListEntry*\r
+onig_reg_callout_list_at(regex_t* reg, int num)\r
+{\r
+  RegexExt* ext = REG_EXTP(reg);\r
+  CHECK_NULL_RETURN(ext);\r
+\r
+  if (num <= 0 || num > ext->callout_num)\r
+    return 0;\r
+\r
+  num--;\r
+  return ext->callout_list + num;\r
+}\r
+\r
+static int\r
+reg_callout_list_entry(ScanEnv* env, int* rnum)\r
+{\r
+#define INIT_CALLOUT_LIST_NUM  3\r
+\r
+  int num;\r
+  CalloutListEntry* list;\r
+  CalloutListEntry* e;\r
+  RegexExt* ext;\r
+\r
+  ext = onig_get_regex_ext(env->reg);\r
+  CHECK_NULL_RETURN_MEMERR(ext);\r
+\r
+  if (IS_NULL(ext->callout_list)) {\r
+    list = (CalloutListEntry* )xmalloc(sizeof(*list) * INIT_CALLOUT_LIST_NUM);\r
+    CHECK_NULL_RETURN_MEMERR(list);\r
+\r
+    ext->callout_list = list;\r
+    ext->callout_list_alloc = INIT_CALLOUT_LIST_NUM;\r
+    ext->callout_num = 0;\r
+  }\r
+\r
+  num = ext->callout_num + 1;\r
+  if (num > ext->callout_list_alloc) {\r
+    int alloc = ext->callout_list_alloc * 2;\r
+    list = (CalloutListEntry* )xrealloc(ext->callout_list,\r
+                                        sizeof(CalloutListEntry) * alloc,\r
+                                                                               sizeof(CalloutListEntry) * ext->callout_list_alloc);\r
+    CHECK_NULL_RETURN_MEMERR(list);\r
+\r
+    ext->callout_list       = list;\r
+    ext->callout_list_alloc = alloc;\r
+  }\r
+\r
+  e = ext->callout_list + (num - 1);\r
+\r
+  e->flag             = 0;\r
+  e->of               = 0;\r
+  e->in               = ONIG_CALLOUT_OF_CONTENTS;\r
+  e->type             = 0;\r
+  e->tag_start        = 0;\r
+  e->tag_end          = 0;\r
+  e->start_func       = 0;\r
+  e->end_func         = 0;\r
+  e->u.arg.num        = 0;\r
+  e->u.arg.passed_num = 0;\r
+\r
+  ext->callout_num = num;\r
+  *rnum = num;\r
+  return ONIG_NORMAL;\r
+}\r
+\r
+static int\r
+node_new_callout(Node** node, OnigCalloutOf callout_of, int num, int id,\r
+                 ScanEnv* env)\r
+{\r
+  *node = node_new();\r
+  CHECK_NULL_RETURN_MEMERR(*node);\r
+\r
+  NODE_SET_TYPE(*node, NODE_GIMMICK);\r
+  GIMMICK_(*node)->id          = id;\r
+  GIMMICK_(*node)->num         = num;\r
+  GIMMICK_(*node)->type        = GIMMICK_CALLOUT;\r
+  GIMMICK_(*node)->detail_type = (int )callout_of;\r
+\r
+  return ONIG_NORMAL;\r
+}\r
+#endif\r
+\r
+static int\r
+make_extended_grapheme_cluster(Node** node, ScanEnv* env)\r
+{\r
+  int r;\r
+  int i;\r
+  Node* x;\r
+  Node* ns[2];\r
+\r
+  /* \X == (?>\O(?:\Y\O)*) */\r
+\r
+  ns[1] = NULL_NODE;\r
+\r
+  r = ONIGERR_MEMORY;\r
+  ns[0] = onig_node_new_anchor(ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY, 0);\r
+  if (IS_NULL(ns[0])) goto err;\r
+\r
+  r = node_new_true_anychar(&ns[1], env);\r
+  if (r != 0) goto err1;\r
+\r
+  x = make_list(2, ns);\r
+  if (IS_NULL(x)) goto err;\r
+  ns[0] = x;\r
+  ns[1] = NULL_NODE;\r
+\r
+  x = node_new_quantifier(0, REPEAT_INFINITE, 1);\r
+  if (IS_NULL(x)) goto err;\r
+\r
+  NODE_BODY(x) = ns[0];\r
+  ns[0] = NULL_NODE;\r
+  ns[1] = x;\r
+\r
+  r = node_new_true_anychar(&ns[0], env);\r
+  if (r != 0) goto err1;\r
+\r
+  x = make_list(2, ns);\r
+  if (IS_NULL(x)) goto err;\r
+\r
+  ns[0] = x;\r
+  ns[1] = NULL_NODE;\r
+\r
+  x = node_new_enclosure(ENCLOSURE_STOP_BACKTRACK);\r
+  if (IS_NULL(x)) goto err;\r
+\r
+  NODE_BODY(x) = ns[0];\r
+\r
+  *node = x;\r
+  return ONIG_NORMAL;\r
+\r
+ err:\r
+  r = ONIGERR_MEMORY;\r
+ err1:\r
+  for (i = 0; i < 2; i++) onig_node_free(ns[i]);\r
+  return r;\r
+}\r
+\r
+static int\r
+make_absent_engine(Node** node, int pre_save_right_id, Node* absent,\r
+                   Node* step_one, int lower, int upper, int possessive,\r
+                   int is_range_cutter, ScanEnv* env)\r
+{\r
+  int r;\r
+  int i;\r
+  int id;\r
+  Node* x;\r
+  Node* ns[4];\r
+\r
+  for (i = 0; i < 4; i++) ns[i] = NULL_NODE;\r
+\r
+  ns[1] = absent;\r
+  ns[3] = step_one; /* for err */\r
+  r = node_new_save_gimmick(&ns[0], SAVE_S, env);\r
+  if (r != 0) goto err;\r
+\r
+  id = GIMMICK_(ns[0])->id;\r
+  r = node_new_update_var_gimmick(&ns[2], UPDATE_VAR_RIGHT_RANGE_FROM_S_STACK,\r
+                                  id, env);\r
+  if (r != 0) goto err;\r
+\r
+  r = node_new_fail(&ns[3], env);\r
+  if (r != 0) goto err;\r
+\r
+  x = make_list(4, ns);\r
+  if (IS_NULL(x)) goto err0;\r
+\r
+  ns[0] = x;\r
+  ns[1] = step_one;\r
+  ns[2] = ns[3] = NULL_NODE;\r
+\r
+  x = make_alt(2, ns);\r
+  if (IS_NULL(x)) goto err0;\r
+\r
+  ns[0] = x;\r
+\r
+  x = node_new_quantifier(lower, upper, 0);\r
+  if (IS_NULL(x)) goto err0;\r
+\r
+  NODE_BODY(x) = ns[0];\r
+  ns[0] = x;\r
+\r
+  if (possessive != 0) {\r
+    x = node_new_enclosure(ENCLOSURE_STOP_BACKTRACK);\r
+    if (IS_NULL(x)) goto err0;\r
+\r
+    NODE_BODY(x) = ns[0];\r
+    ns[0] = x;\r
+  }\r
+\r
+  r = node_new_update_var_gimmick(&ns[1], UPDATE_VAR_RIGHT_RANGE_FROM_STACK,\r
+                                  pre_save_right_id, env);\r
+  if (r != 0) goto err;\r
+\r
+  r = node_new_fail(&ns[2], env);\r
+  if (r != 0) goto err;\r
+\r
+  x = make_list(2, ns + 1);\r
+  if (IS_NULL(x)) goto err0;\r
+\r
+  ns[1] = x; ns[2] = NULL_NODE;\r
+\r
+  x = make_alt(2, ns);\r
+  if (IS_NULL(x)) goto err0;\r
+\r
+  if (is_range_cutter != 0)\r
+    NODE_STATUS_ADD(x, SUPER);\r
+\r
+  *node = x;\r
+  return ONIG_NORMAL;\r
+\r
+ err0:\r
+  r = ONIGERR_MEMORY;\r
+ err:\r
+  for (i = 0; i < 4; i++) onig_node_free(ns[i]);\r
+  return r;\r
+}\r
+\r
+static int\r
+make_absent_tail(Node** node1, Node** node2, int pre_save_right_id,\r
+                 ScanEnv* env)\r
+{\r
+  int r;\r
+  int id;\r
+  Node* save;\r
+  Node* x;\r
+  Node* ns[2];\r
+\r
+  *node1 = *node2 = NULL_NODE;\r
+  save = ns[0] = ns[1] = NULL_NODE;\r
+\r
+  r = node_new_save_gimmick(&save, SAVE_RIGHT_RANGE, env);\r
+  if (r != 0) goto err;\r
+\r
+  id = GIMMICK_(save)->id;\r
+  r = node_new_update_var_gimmick(&ns[0], UPDATE_VAR_RIGHT_RANGE_FROM_STACK,\r
+                                  id, env);\r
+  if (r != 0) goto err;\r
+\r
+  r = node_new_fail(&ns[1], env);\r
+  if (r != 0) goto err;\r
+\r
+  x = make_list(2, ns);\r
+  if (IS_NULL(x)) goto err0;\r
+\r
+  ns[0] = NULL_NODE; ns[1] = x;\r
+\r
+  r = node_new_update_var_gimmick(&ns[0], UPDATE_VAR_RIGHT_RANGE_FROM_STACK,\r
+                                  pre_save_right_id, env);\r
+  if (r != 0) goto err;\r
+\r
+  x = make_alt(2, ns);\r
+  if (IS_NULL(x)) goto err0;\r
+\r
+  *node1 = save;\r
+  *node2 = x;\r
+  return ONIG_NORMAL;\r
+\r
+ err0:\r
+  r = ONIGERR_MEMORY;\r
+ err:\r
+  onig_node_free(save);\r
+  onig_node_free(ns[0]);\r
+  onig_node_free(ns[1]);\r
+  return r;\r
+}\r
+\r
+static int\r
+make_range_clear(Node** node, ScanEnv* env)\r
+{\r
+  int r;\r
+  int id;\r
+  Node* save;\r
+  Node* x;\r
+  Node* ns[2];\r
+\r
+  *node = NULL_NODE;\r
+  save = ns[0] = ns[1] = NULL_NODE;\r
+\r
+  r = node_new_save_gimmick(&save, SAVE_RIGHT_RANGE, env);\r
+  if (r != 0) goto err;\r
+\r
+  id = GIMMICK_(save)->id;\r
+  r = node_new_update_var_gimmick(&ns[0], UPDATE_VAR_RIGHT_RANGE_FROM_STACK,\r
+                                  id, env);\r
+  if (r != 0) goto err;\r
+\r
+  r = node_new_fail(&ns[1], env);\r
+  if (r != 0) goto err;\r
+\r
+  x = make_list(2, ns);\r
+  if (IS_NULL(x)) goto err0;\r
+\r
+  ns[0] = NULL_NODE; ns[1] = x;\r
+\r
+  r = node_new_update_var_gimmick(&ns[0], UPDATE_VAR_RIGHT_RANGE_INIT, 0, env);\r
+  if (r != 0) goto err;\r
+\r
+  x = make_alt(2, ns);\r
+  if (IS_NULL(x)) goto err0;\r
+\r
+  NODE_STATUS_ADD(x, SUPER);\r
+\r
+  ns[0] = save;\r
+  ns[1] = x;\r
+  save = NULL_NODE;\r
+  x = make_list(2, ns);\r
+  if (IS_NULL(x)) goto err0;\r
+\r
+  *node = x;\r
+  return ONIG_NORMAL;\r
+\r
+ err0:\r
+  r = ONIGERR_MEMORY;\r
+ err:\r
+  onig_node_free(save);\r
+  onig_node_free(ns[0]);\r
+  onig_node_free(ns[1]);\r
+  return r;\r
+}\r
+\r
+static int\r
+is_simple_one_char_repeat(Node* node, Node** rquant, Node** rbody,\r
+                          int* is_possessive, ScanEnv* env)\r
+{\r
+  Node* quant;\r
+  Node* body;\r
+\r
+  *rquant = *rbody = 0;\r
+  *is_possessive = 0;\r
+\r
+  if (NODE_TYPE(node) == NODE_QUANT) {\r
+    quant = node;\r
+  }\r
+  else {\r
+    if (NODE_TYPE(node) == NODE_ENCLOSURE) {\r
+      EnclosureNode* en = ENCLOSURE_(node);\r
+      if (en->type == ENCLOSURE_STOP_BACKTRACK) {\r
+        *is_possessive = 1;\r
+        quant = NODE_ENCLOSURE_BODY(en);\r
+        if (NODE_TYPE(quant) != NODE_QUANT)\r
+          return 0;\r
+      }\r
+      else\r
+        return 0;\r
+    }\r
+    else\r
+      return 0;\r
+  }\r
+\r
+  if (QUANT_(quant)->greedy == 0)\r
+    return 0;\r
+\r
+  body = NODE_BODY(quant);\r
+  switch (NODE_TYPE(body)) {\r
+  case NODE_STRING:\r
+    {\r
+      int len;\r
+      StrNode* sn = STR_(body);\r
+      UChar *s = sn->s;\r
+\r
+      len = 0;\r
+      while (s < sn->end) {\r
+        s += enclen(env->enc, s);\r
+        len++;\r
+      }\r
+      if (len != 1)\r
+        return 0;\r
+    }\r
+\r
+  case NODE_CCLASS:\r
+    break;\r
+\r
+  default:\r
+    return 0;\r
+    break;\r
+  }\r
+\r
+  if (node != quant) {\r
+    NODE_BODY(node) = 0;\r
+    onig_node_free(node);\r
+  }\r
+  NODE_BODY(quant) = NULL_NODE;\r
+  *rquant = quant;\r
+  *rbody  = body;\r
+  return 1;\r
+}\r
+\r
+static int\r
+make_absent_tree_for_simple_one_char_repeat(Node** node, Node* absent, Node* quant,\r
+                                            Node* body, int possessive, ScanEnv* env)\r
+{\r
+  int r;\r
+  int i;\r
+  int id1;\r
+  int lower, upper;\r
+  Node* x;\r
+  Node* ns[4];\r
+\r
+  *node = NULL_NODE;\r
+  r = ONIGERR_MEMORY;\r
+  ns[0] = ns[1] = NULL_NODE;\r
+  ns[2] = body, ns[3] = absent;\r
+\r
+  lower = QUANT_(quant)->lower;\r
+  upper = QUANT_(quant)->upper;\r
+  onig_node_free(quant);\r
+\r
+  r = node_new_save_gimmick(&ns[0], SAVE_RIGHT_RANGE, env);\r
+  if (r != 0) goto err;\r
+\r
+  id1 = GIMMICK_(ns[0])->id;\r
+\r
+  r = make_absent_engine(&ns[1], id1, absent, body, lower, upper, possessive,\r
+                         0, env);\r
+  if (r != 0) goto err;\r
+\r
+  ns[2] = ns[3] = NULL_NODE;\r
+\r
+  r = node_new_update_var_gimmick(&ns[2], UPDATE_VAR_RIGHT_RANGE_FROM_STACK,\r
+                                  id1, env);\r
+  if (r != 0) goto err;\r
+\r
+  x = make_list(3, ns);\r
+  if (IS_NULL(x)) goto err0;\r
+\r
+  *node = x;\r
+  return ONIG_NORMAL;\r
+\r
+ err0:\r
+  r = ONIGERR_MEMORY;\r
+ err:\r
+  for (i = 0; i < 4; i++) onig_node_free(ns[i]);\r
+  return r;\r
+}\r
+\r
+static int\r
+make_absent_tree(Node** node, Node* absent, Node* expr, int is_range_cutter,\r
+                 ScanEnv* env)\r
+{\r
+  int r;\r
+  int i;\r
+  int id1, id2;\r
+  int possessive;\r
+  Node* x;\r
+  Node* ns[7];\r
+\r
+  r = ONIGERR_MEMORY;\r
+  for (i = 0; i < 7; i++) ns[i] = NULL_NODE;\r
+  ns[4] = expr; ns[5] = absent;\r
+\r
+  if (is_range_cutter == 0) {\r
+    Node* quant;\r
+    Node* body;\r
+\r
+    if (expr == NULL_NODE) {\r
+      /* default expr \O* */\r
+      quant = node_new_quantifier(0, REPEAT_INFINITE, 0);\r
+      if (IS_NULL(quant)) goto err0;\r
+\r
+      r = node_new_true_anychar(&body, env);\r
+      if (r != 0) {\r
+        onig_node_free(quant);\r
+        goto err;\r
+      }\r
+      possessive = 0;\r
+      goto simple;\r
+    }\r
+    else {\r
+      if (is_simple_one_char_repeat(expr, &quant, &body, &possessive, env)) {\r
+      simple:\r
+        r = make_absent_tree_for_simple_one_char_repeat(node, absent, quant,\r
+                                                        body, possessive, env);\r
+        if (r != 0) {\r
+          ns[4] = NULL_NODE;\r
+          onig_node_free(quant);\r
+          onig_node_free(body);\r
+          goto err;\r
+        }\r
+\r
+        return ONIG_NORMAL;\r
+      }\r
+    }\r
+  }\r
+\r
+  r = node_new_save_gimmick(&ns[0], SAVE_RIGHT_RANGE, env);\r
+  if (r != 0) goto err;\r
+\r
+  id1 = GIMMICK_(ns[0])->id;\r
+\r
+  r = node_new_save_gimmick(&ns[1], SAVE_S, env);\r
+  if (r != 0) goto err;\r
+\r
+  id2 = GIMMICK_(ns[1])->id;\r
+\r
+  r = node_new_true_anychar(&ns[3], env);\r
+  if (r != 0) goto err;\r
+\r
+  possessive = 1;\r
+  r = make_absent_engine(&ns[2], id1, absent, ns[3], 0, REPEAT_INFINITE,\r
+                         possessive, is_range_cutter, env);\r
+  if (r != 0) goto err;\r
+\r
+  ns[3] = NULL_NODE;\r
+  ns[5] = NULL_NODE;\r
+\r
+  r = node_new_update_var_gimmick(&ns[3], UPDATE_VAR_S_FROM_STACK, id2, env);\r
+  if (r != 0) goto err;\r
+\r
+  if (is_range_cutter != 0) {\r
+    x = make_list(4, ns);\r
+    if (IS_NULL(x)) goto err0;\r
+  }\r
+  else {\r
+    r = make_absent_tail(&ns[5], &ns[6], id1, env);\r
+    if (r != 0) goto err;\r
+  \r
+    x = make_list(7, ns);\r
+    if (IS_NULL(x)) goto err0;\r
+  }\r
+\r
+  *node = x;\r
+  return ONIG_NORMAL;\r
+\r
+ err0:\r
+  r = ONIGERR_MEMORY;\r
+ err:\r
+  for (i = 0; i < 7; i++) onig_node_free(ns[i]);\r
+  return r;  \r
+}\r
+\r
+extern int\r
+onig_node_str_cat(Node* node, const UChar* s, const UChar* end)\r
+{\r
+  int addlen = (int )(end - s);\r
+\r
+  if (addlen > 0) {\r
+    int len  = (int )(STR_(node)->end - STR_(node)->s);\r
+\r
+    if (STR_(node)->capa > 0 || (len + addlen > NODE_STRING_BUF_SIZE - 1)) {\r
+      UChar* p;\r
+      int capa = len + addlen + NODE_STRING_MARGIN;\r
+\r
+      if (capa <= STR_(node)->capa) {\r
+        onig_strcpy(STR_(node)->s + len, s, end);\r
+      }\r
+      else {\r
+        if (STR_(node)->s == STR_(node)->buf)\r
+          p = strcat_capa_from_static(STR_(node)->s, STR_(node)->end,\r
+                                      s, end, capa);\r
+        else\r
+          p = strcat_capa(STR_(node)->s, STR_(node)->end, s, end, capa, STR_(node)->capa);\r
+\r
+        CHECK_NULL_RETURN_MEMERR(p);\r
+        STR_(node)->s    = p;\r
+        STR_(node)->capa = capa;\r
+      }\r
+    }\r
+    else {\r
+      onig_strcpy(STR_(node)->s + len, s, end);\r
+    }\r
+    STR_(node)->end = STR_(node)->s + len + addlen;\r
+  }\r
+\r
+  return 0;\r
+}\r
+\r
+extern int\r
+onig_node_str_set(Node* node, const UChar* s, const UChar* end)\r
+{\r
+  onig_node_str_clear(node);\r
+  return onig_node_str_cat(node, s, end);\r
+}\r
+\r
+static int\r
+node_str_cat_char(Node* node, UChar c)\r
+{\r
+  UChar s[1];\r
+\r
+  s[0] = c;\r
+  return onig_node_str_cat(node, s, s + 1);\r
+}\r
+\r
+extern void\r
+onig_node_conv_to_str_node(Node* node, int flag)\r
+{\r
+  NODE_SET_TYPE(node, NODE_STRING);\r
+  STR_(node)->flag = flag;\r
+  STR_(node)->capa = 0;\r
+  STR_(node)->s    = STR_(node)->buf;\r
+  STR_(node)->end  = STR_(node)->buf;\r
+}\r
+\r
+extern void\r
+onig_node_str_clear(Node* node)\r
+{\r
+  if (STR_(node)->capa != 0 &&\r
+      IS_NOT_NULL(STR_(node)->s) && STR_(node)->s != STR_(node)->buf) {\r
+    xfree(STR_(node)->s);\r
+  }\r
+\r
+  STR_(node)->capa = 0;\r
+  STR_(node)->flag = 0;\r
+  STR_(node)->s    = STR_(node)->buf;\r
+  STR_(node)->end  = STR_(node)->buf;\r
+}\r
+\r
+static Node*\r
+node_new_str(const UChar* s, const UChar* end)\r
+{\r
+  Node* node = node_new();\r
+  CHECK_NULL_RETURN(node);\r
+\r
+  NODE_SET_TYPE(node, NODE_STRING);\r
+  STR_(node)->capa = 0;\r
+  STR_(node)->flag = 0;\r
+  STR_(node)->s    = STR_(node)->buf;\r
+  STR_(node)->end  = STR_(node)->buf;\r
+  if (onig_node_str_cat(node, s, end)) {\r
+    onig_node_free(node);\r
+    return NULL;\r
+  }\r
+  return node;\r
+}\r
+\r
+extern Node*\r
+onig_node_new_str(const UChar* s, const UChar* end)\r
+{\r
+  return node_new_str(s, end);\r
+}\r
+\r
+static Node*\r
+node_new_str_raw(UChar* s, UChar* end)\r
+{\r
+  Node* node = node_new_str(s, end);\r
+  NODE_STRING_SET_RAW(node);\r
+  return node;\r
+}\r
+\r
+static Node*\r
+node_new_empty(void)\r
+{\r
+  return node_new_str(NULL, NULL);\r
+}\r
+\r
+static Node*\r
+node_new_str_raw_char(UChar c)\r
+{\r
+  UChar p[1];\r
+\r
+  p[0] = c;\r
+  return node_new_str_raw(p, p + 1);\r
+}\r
+\r
+static Node*\r
+str_node_split_last_char(Node* node, OnigEncoding enc)\r
+{\r
+  const UChar *p;\r
+  Node* rn;\r
+  StrNode* sn;\r
+\r
+  sn = STR_(node);\r
+  rn = NULL_NODE;\r
+  if (sn->end > sn->s) {\r
+    p = onigenc_get_prev_char_head(enc, sn->s, sn->end);\r
+    if (p && p > sn->s) { /* can be split. */\r
+      rn = node_new_str(p, sn->end);\r
+      if (NODE_STRING_IS_RAW(node))\r
+        NODE_STRING_SET_RAW(rn);\r
+\r
+      sn->end = (UChar* )p;\r
+    }\r
+  }\r
+  return rn;\r
+}\r
+\r
+static int\r
+str_node_can_be_split(Node* node, OnigEncoding enc)\r
+{\r
+  StrNode* sn = STR_(node);\r
+  if (sn->end > sn->s) {\r
+    return ((enclen(enc, sn->s) < sn->end - sn->s)  ?  1 : 0);\r
+  }\r
+  return 0;\r
+}\r
+\r
+#ifdef USE_PAD_TO_SHORT_BYTE_CHAR\r
+static int\r
+node_str_head_pad(StrNode* sn, int num, UChar val)\r
+{\r
+  UChar buf[NODE_STRING_BUF_SIZE];\r
+  int i, len;\r
+\r
+  len = sn->end - sn->s;\r
+  onig_strcpy(buf, sn->s, sn->end);\r
+  onig_strcpy(&(sn->s[num]), buf, buf + len);\r
+  sn->end += num;\r
+\r
+  for (i = 0; i < num; i++) {\r
+    sn->s[i] = val;\r
+  }\r
+}\r
+#endif\r
+\r
+extern int\r
+onig_scan_unsigned_number(UChar** src, const UChar* end, OnigEncoding enc)\r
+{\r
+  unsigned int num, val;\r
+  OnigCodePoint c;\r
+  UChar* p = *src;\r
+  PFETCH_READY;\r
+\r
+  num = 0;\r
+  while (! PEND) {\r
+    PFETCH(c);\r
+    if (IS_CODE_DIGIT_ASCII(enc, c)) {\r
+      val = (unsigned int )DIGITVAL(c);\r
+      if ((INT_MAX_LIMIT - val) / 10UL < num)\r
+        return -1;  /* overflow */\r
+\r
+      num = num * 10 + val;\r
+    }\r
+    else {\r
+      PUNFETCH;\r
+      break;\r
+    }\r
+  }\r
+  *src = p;\r
+  return num;\r
+}\r
+\r
+static int\r
+scan_unsigned_hexadecimal_number(UChar** src, UChar* end, int minlen,\r
+                                 int maxlen, OnigEncoding enc)\r
+{\r
+  OnigCodePoint c;\r
+  unsigned int num, val;\r
+  int n;\r
+  UChar* p = *src;\r
+  PFETCH_READY;\r
+\r
+  num = 0;\r
+  n = 0;\r
+  while (! PEND && n < maxlen) {\r
+    PFETCH(c);\r
+    if (IS_CODE_XDIGIT_ASCII(enc, c)) {\r
+      n++;\r
+      val = (unsigned int )XDIGITVAL(enc,c);\r
+      if ((INT_MAX_LIMIT - val) / 16UL < num)\r
+        return ONIGERR_TOO_BIG_NUMBER; /* overflow */\r
+\r
+      num = (num << 4) + XDIGITVAL(enc,c);\r
+    }\r
+    else {\r
+      PUNFETCH;\r
+      break;\r
+    }\r
+  }\r
+\r
+  if (n < minlen)\r
+    return ONIGERR_INVALID_CODE_POINT_VALUE;\r
+\r
+  *src = p;\r
+  return num;\r
+}\r
+\r
+static int\r
+scan_unsigned_octal_number(UChar** src, UChar* end, int maxlen,\r
+                           OnigEncoding enc)\r
+{\r
+  OnigCodePoint c;\r
+  unsigned int num, val;\r
+  UChar* p = *src;\r
+  PFETCH_READY;\r
+\r
+  num = 0;\r
+  while (! PEND && maxlen-- != 0) {\r
+    PFETCH(c);\r
+    if (IS_CODE_DIGIT_ASCII(enc, c) && c < '8') {\r
+      val = ODIGITVAL(c);\r
+      if ((INT_MAX_LIMIT - val) / 8UL < num)\r
+        return -1;  /* overflow */\r
+\r
+      num = (num << 3) + val;\r
+    }\r
+    else {\r
+      PUNFETCH;\r
+      break;\r
+    }\r
+  }\r
+  *src = p;\r
+  return num;\r
+}\r
+\r
+\r
+#define BB_WRITE_CODE_POINT(bbuf,pos,code) \\r
+    BB_WRITE(bbuf, pos, &(code), SIZE_CODE_POINT)\r
+\r
+/* data format:\r
+     [n][from-1][to-1][from-2][to-2] ... [from-n][to-n]\r
+     (all data size is OnigCodePoint)\r
+ */\r
+static int\r
+new_code_range(BBuf** pbuf)\r
+{\r
+#define INIT_MULTI_BYTE_RANGE_SIZE  (SIZE_CODE_POINT * 5)\r
+  int r;\r
+  OnigCodePoint n;\r
+  BBuf* bbuf;\r
+\r
+  bbuf = *pbuf = (BBuf* )xmalloc(sizeof(BBuf));\r
+  CHECK_NULL_RETURN_MEMERR(bbuf);\r
+  r = BB_INIT(bbuf, INIT_MULTI_BYTE_RANGE_SIZE);\r
+  if (r != 0) {\r
+    xfree(bbuf);\r
+    *pbuf = 0;\r
+    return r;\r
+  }\r
+\r
+  n = 0;\r
+  BB_WRITE_CODE_POINT(bbuf, 0, n);\r
+  return 0;\r
+}\r
+\r
+static int\r
+add_code_range_to_buf(BBuf** pbuf, OnigCodePoint from, OnigCodePoint to)\r
+{\r
+  int r, inc_n, pos;\r
+  int low, high, bound, x;\r
+  OnigCodePoint n, *data;\r
+  BBuf* bbuf;\r
+\r
+  if (from > to) {\r
+    n = from; from = to; to = n;\r
+  }\r
+\r
+  if (IS_NULL(*pbuf)) {\r
+    r = new_code_range(pbuf);\r
+    if (r != 0) return r;\r
+    bbuf = *pbuf;\r
+    n = 0;\r
+  }\r
+  else {\r
+    bbuf = *pbuf;\r
+    GET_CODE_POINT(n, bbuf->p);\r
+  }\r
+  data = (OnigCodePoint* )(bbuf->p);\r
+  data++;\r
+\r
+  for (low = 0, bound = n; low < bound; ) {\r
+    x = (low + bound) >> 1;\r
+    if (from > data[x*2 + 1])\r
+      low = x + 1;\r
+    else\r
+      bound = x;\r
+  }\r
+\r
+  high = (to == ~((OnigCodePoint )0)) ? n : low;\r
+  for (bound = n; high < bound; ) {\r
+    x = (high + bound) >> 1;\r
+    if (to + 1 >= data[x*2])\r
+      high = x + 1;\r
+    else\r
+      bound = x;\r
+  }\r
+\r
+  inc_n = low + 1 - high;\r
+  if (n + inc_n > ONIG_MAX_MULTI_BYTE_RANGES_NUM)\r
+    return ONIGERR_TOO_MANY_MULTI_BYTE_RANGES;\r
+\r
+  if (inc_n != 1) {\r
+    if (from > data[low*2])\r
+      from = data[low*2];\r
+    if (to < data[(high - 1)*2 + 1])\r
+      to = data[(high - 1)*2 + 1];\r
+  }\r
+\r
+  if (inc_n != 0 && (OnigCodePoint )high < n) {\r
+    int from_pos = SIZE_CODE_POINT * (1 + high * 2);\r
+    int to_pos   = SIZE_CODE_POINT * (1 + (low + 1) * 2);\r
+    int size = (n - high) * 2 * SIZE_CODE_POINT;\r
+\r
+    if (inc_n > 0) {\r
+      BB_MOVE_RIGHT(bbuf, from_pos, to_pos, size);\r
+    }\r
+    else {\r
+      BB_MOVE_LEFT_REDUCE(bbuf, from_pos, to_pos);\r
+    }\r
+  }\r
+\r
+  pos = SIZE_CODE_POINT * (1 + low * 2);\r
+  BB_ENSURE_SIZE(bbuf, pos + SIZE_CODE_POINT * 2);\r
+  BB_WRITE_CODE_POINT(bbuf, pos, from);\r
+  BB_WRITE_CODE_POINT(bbuf, pos + SIZE_CODE_POINT, to);\r
+  n += inc_n;\r
+  BB_WRITE_CODE_POINT(bbuf, 0, n);\r
+\r
+  return 0;\r
+}\r
+\r
+static int\r
+add_code_range(BBuf** pbuf, ScanEnv* env, OnigCodePoint from, OnigCodePoint to)\r
+{\r
+  if (from > to) {\r
+    if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC))\r
+      return 0;\r
+    else\r
+      return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS;\r
+  }\r
+\r
+  return add_code_range_to_buf(pbuf, from, to);\r
+}\r
+\r
+static int\r
+not_code_range_buf(OnigEncoding enc, BBuf* bbuf, BBuf** pbuf)\r
+{\r
+  int r, i, n;\r
+  OnigCodePoint pre, from, *data, to = 0;\r
+\r
+  *pbuf = (BBuf* )NULL;\r
+  if (IS_NULL(bbuf)) {\r
+  set_all:\r
+    return SET_ALL_MULTI_BYTE_RANGE(enc, pbuf);\r
+  }\r
+\r
+  data = (OnigCodePoint* )(bbuf->p);\r
+  GET_CODE_POINT(n, data);\r
+  data++;\r
+  if (n <= 0) goto set_all;\r
+\r
+  r = 0;\r
+  pre = MBCODE_START_POS(enc);\r
+  for (i = 0; i < n; i++) {\r
+    from = data[i*2];\r
+    to   = data[i*2+1];\r
+    if (pre <= from - 1) {\r
+      r = add_code_range_to_buf(pbuf, pre, from - 1);\r
+      if (r != 0) return r;\r
+    }\r
+    if (to == ~((OnigCodePoint )0)) break;\r
+    pre = to + 1;\r
+  }\r
+  if (to < ~((OnigCodePoint )0)) {\r
+    r = add_code_range_to_buf(pbuf, to + 1, ~((OnigCodePoint )0));\r
+  }\r
+  return r;\r
+}\r
+\r
+#define SWAP_BB_NOT(bbuf1, not1, bbuf2, not2) do {\\r
+  BBuf *tbuf; \\r
+  int  tnot; \\r
+  tnot = not1;  not1  = not2;  not2  = tnot; \\r
+  tbuf = bbuf1; bbuf1 = bbuf2; bbuf2 = tbuf; \\r
+} while (0)\r
+\r
+static int\r
+or_code_range_buf(OnigEncoding enc, BBuf* bbuf1, int not1,\r
+                  BBuf* bbuf2, int not2, BBuf** pbuf)\r
+{\r
+  int r;\r
+  OnigCodePoint i, n1, *data1;\r
+  OnigCodePoint from, to;\r
+\r
+  *pbuf = (BBuf* )NULL;\r
+  if (IS_NULL(bbuf1) && IS_NULL(bbuf2)) {\r
+    if (not1 != 0 || not2 != 0)\r
+      return SET_ALL_MULTI_BYTE_RANGE(enc, pbuf);\r
+    return 0;\r
+  }\r
+\r
+  r = 0;\r
+  if (IS_NULL(bbuf2))\r
+    SWAP_BB_NOT(bbuf1, not1, bbuf2, not2);\r
+\r
+  if (IS_NULL(bbuf1)) {\r
+    if (not1 != 0) {\r
+      return SET_ALL_MULTI_BYTE_RANGE(enc, pbuf);\r
+    }\r
+    else {\r
+      if (not2 == 0) {\r
+        return bbuf_clone(pbuf, bbuf2);\r
+      }\r
+      else {\r
+        return not_code_range_buf(enc, bbuf2, pbuf);\r
+      }\r
+    }\r
+  }\r
+\r
+  if (not1 != 0)\r
+    SWAP_BB_NOT(bbuf1, not1, bbuf2, not2);\r
+\r
+  data1 = (OnigCodePoint* )(bbuf1->p);\r
+  GET_CODE_POINT(n1, data1);\r
+  data1++;\r
+\r
+  if (not2 == 0 && not1 == 0) { /* 1 OR 2 */\r
+    r = bbuf_clone(pbuf, bbuf2);\r
+  }\r
+  else if (not1 == 0) { /* 1 OR (not 2) */\r
+    r = not_code_range_buf(enc, bbuf2, pbuf);\r
+  }\r
+  if (r != 0) return r;\r
+\r
+  for (i = 0; i < n1; i++) {\r
+    from = data1[i*2];\r
+    to   = data1[i*2+1];\r
+    r = add_code_range_to_buf(pbuf, from, to);\r
+    if (r != 0) return r;\r
+  }\r
+  return 0;\r
+}\r
+\r
+static int\r
+and_code_range1(BBuf** pbuf, OnigCodePoint from1, OnigCodePoint to1,\r
+                OnigCodePoint* data, int n)\r
+{\r
+  int i, r;\r
+  OnigCodePoint from2, to2;\r
+\r
+  for (i = 0; i < n; i++) {\r
+    from2 = data[i*2];\r
+    to2   = data[i*2+1];\r
+    if (from2 < from1) {\r
+      if (to2 < from1) continue;\r
+      else {\r
+        from1 = to2 + 1;\r
+      }\r
+    }\r
+    else if (from2 <= to1) {\r
+      if (to2 < to1) {\r
+        if (from1 <= from2 - 1) {\r
+          r = add_code_range_to_buf(pbuf, from1, from2-1);\r
+          if (r != 0) return r;\r
+        }\r
+        from1 = to2 + 1;\r
+      }\r
+      else {\r
+        to1 = from2 - 1;\r
+      }\r
+    }\r
+    else {\r
+      from1 = from2;\r
+    }\r
+    if (from1 > to1) break;\r
+  }\r
+  if (from1 <= to1) {\r
+    r = add_code_range_to_buf(pbuf, from1, to1);\r
+    if (r != 0) return r;\r
+  }\r
+  return 0;\r
+}\r
+\r
+static int\r
+and_code_range_buf(BBuf* bbuf1, int not1, BBuf* bbuf2, int not2, BBuf** pbuf)\r
+{\r
+  int r;\r
+  OnigCodePoint i, j, n1, n2, *data1, *data2;\r
+  OnigCodePoint from, to, from1, to1, from2, to2;\r
+\r
+  *pbuf = (BBuf* )NULL;\r
+  if (IS_NULL(bbuf1)) {\r
+    if (not1 != 0 && IS_NOT_NULL(bbuf2)) /* not1 != 0 -> not2 == 0 */\r
+      return bbuf_clone(pbuf, bbuf2);\r
+    return 0;\r
+  }\r
+  else if (IS_NULL(bbuf2)) {\r
+    if (not2 != 0)\r
+      return bbuf_clone(pbuf, bbuf1);\r
+    return 0;\r
+  }\r
+\r
+  if (not1 != 0)\r
+    SWAP_BB_NOT(bbuf1, not1, bbuf2, not2);\r
+\r
+  data1 = (OnigCodePoint* )(bbuf1->p);\r
+  data2 = (OnigCodePoint* )(bbuf2->p);\r
+  GET_CODE_POINT(n1, data1);\r
+  GET_CODE_POINT(n2, data2);\r
+  data1++;\r
+  data2++;\r
+\r
+  if (not2 == 0 && not1 == 0) { /* 1 AND 2 */\r
+    for (i = 0; i < n1; i++) {\r
+      from1 = data1[i*2];\r
+      to1   = data1[i*2+1];\r
+      for (j = 0; j < n2; j++) {\r
+        from2 = data2[j*2];\r
+        to2   = data2[j*2+1];\r
+        if (from2 > to1) break;\r
+        if (to2 < from1) continue;\r
+        from = MAX(from1, from2);\r
+        to   = MIN(to1, to2);\r
+        r = add_code_range_to_buf(pbuf, from, to);\r
+        if (r != 0) return r;\r
+      }\r
+    }\r
+  }\r
+  else if (not1 == 0) { /* 1 AND (not 2) */\r
+    for (i = 0; i < n1; i++) {\r
+      from1 = data1[i*2];\r
+      to1   = data1[i*2+1];\r
       r = and_code_range1(pbuf, from1, to1, data2, n2);\r
       if (r != 0) return r;\r
     }\r
@@ -2011,7 +3674,6 @@ and_cclass(CClassNode* dest, CClassNode* cc, OnigEncoding enc)
   bitset_and(bsr1, bsr2);\r
   if (bsr1 != dest->bs) {\r
     bitset_copy(dest->bs, bsr1);\r
-    bsr1 = dest->bs;\r
   }\r
   if (not1 != 0) {\r
     bitset_invert(dest->bs);\r
@@ -2024,14 +3686,14 @@ and_cclass(CClassNode* dest, CClassNode* cc, OnigEncoding enc)
     else {\r
       r = and_code_range_buf(buf1, not1, buf2, not2, &pbuf);\r
       if (r == 0 && not1 != 0) {\r
-       BBuf *tbuf;\r
-       r = not_code_range_buf(enc, pbuf, &tbuf);\r
-       if (r != 0) {\r
-         bbuf_free(pbuf);\r
-         return r;\r
-       }\r
-       bbuf_free(pbuf);\r
-       pbuf = tbuf;\r
+        BBuf *tbuf;\r
+        r = not_code_range_buf(enc, pbuf, &tbuf);\r
+        if (r != 0) {\r
+          bbuf_free(pbuf);\r
+          return r;\r
+        }\r
+        bbuf_free(pbuf);\r
+        pbuf = tbuf;\r
       }\r
     }\r
     if (r != 0) return r;\r
@@ -2069,7 +3731,6 @@ or_cclass(CClassNode* dest, CClassNode* cc, OnigEncoding enc)
   bitset_or(bsr1, bsr2);\r
   if (bsr1 != dest->bs) {\r
     bitset_copy(dest->bs, bsr1);\r
-    bsr1 = dest->bs;\r
   }\r
   if (not1 != 0) {\r
     bitset_invert(dest->bs);\r
@@ -2082,14 +3743,14 @@ or_cclass(CClassNode* dest, CClassNode* cc, OnigEncoding enc)
     else {\r
       r = or_code_range_buf(enc, buf1, not1, buf2, not2, &pbuf);\r
       if (r == 0 && not1 != 0) {\r
-       BBuf *tbuf;\r
-       r = not_code_range_buf(enc, pbuf, &tbuf);\r
-       if (r != 0) {\r
-         bbuf_free(pbuf);\r
-         return r;\r
-       }\r
-       bbuf_free(pbuf);\r
-       pbuf = tbuf;\r
+        BBuf *tbuf;\r
+        r = not_code_range_buf(enc, pbuf, &tbuf);\r
+        if (r != 0) {\r
+          bbuf_free(pbuf);\r
+          return r;\r
+        }\r
+        bbuf_free(pbuf);\r
+        pbuf = tbuf;\r
       }\r
     }\r
     if (r != 0) return r;\r
@@ -2102,8 +3763,8 @@ or_cclass(CClassNode* dest, CClassNode* cc, OnigEncoding enc)
     return 0;\r
 }\r
 \r
-static int\r
-conv_backslash_value(int c, ScanEnv* env)\r
+static OnigCodePoint\r
+conv_backslash_value(OnigCodePoint c, ScanEnv* env)\r
 {\r
   if (IS_SYNTAX_OP(env->syntax, ONIG_SYN_OP_ESC_CONTROL_CHARS)) {\r
     switch (c) {\r
@@ -2116,7 +3777,7 @@ conv_backslash_value(int c, ScanEnv* env)
     case 'e': return '\033';\r
     case 'v':\r
       if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ESC_V_VTAB))\r
-       return '\v';\r
+        return '\v';\r
       break;\r
 \r
     default:\r
@@ -2129,27 +3790,28 @@ conv_backslash_value(int c, ScanEnv* env)
 static int\r
 is_invalid_quantifier_target(Node* node)\r
 {\r
-  switch (NTYPE(node)) {\r
-  case NT_ANCHOR:\r
+  switch (NODE_TYPE(node)) {\r
+  case NODE_ANCHOR:\r
+  case NODE_GIMMICK:\r
     return 1;\r
     break;\r
 \r
-  case NT_ENCLOSE:\r
+  case NODE_ENCLOSURE:\r
     /* allow enclosed elements */\r
-    /* return is_invalid_quantifier_target(NENCLOSE(node)->target); */\r
+    /* return is_invalid_quantifier_target(NODE_BODY(node)); */\r
     break;\r
 \r
-  case NT_LIST:\r
+  case NODE_LIST:\r
     do {\r
-      if (! is_invalid_quantifier_target(NCAR(node))) return 0;\r
-    } while (IS_NOT_NULL(node = NCDR(node)));\r
+      if (! is_invalid_quantifier_target(NODE_CAR(node))) return 0;\r
+    } while (IS_NOT_NULL(node = NODE_CDR(node)));\r
     return 0;\r
     break;\r
 \r
-  case NT_ALT:\r
+  case NODE_ALT:\r
     do {\r
-      if (is_invalid_quantifier_target(NCAR(node))) return 1;\r
-    } while (IS_NOT_NULL(node = NCDR(node)));\r
+      if (is_invalid_quantifier_target(NODE_CAR(node))) return 1;\r
+    } while (IS_NOT_NULL(node = NODE_CDR(node)));\r
     break;\r
 \r
   default:\r
@@ -2160,7 +3822,7 @@ is_invalid_quantifier_target(Node* node)
 \r
 /* ?:0, *:1, +:2, ??:3, *?:4, +?:5 */\r
 static int\r
-popular_quantifier_num(QtfrNode* q)\r
+quantifier_type_num(QuantNode* q)\r
 {\r
   if (q->greedy) {\r
     if (q->lower == 0) {\r
@@ -2207,52 +3869,116 @@ extern void
 onig_reduce_nested_quantifier(Node* pnode, Node* cnode)\r
 {\r
   int pnum, cnum;\r
-  QtfrNode *p, *c;\r
+  QuantNode *p, *c;\r
+\r
+  p = QUANT_(pnode);\r
+  c = QUANT_(cnode);\r
+  pnum = quantifier_type_num(p);\r
+  cnum = quantifier_type_num(c);\r
+  if (pnum < 0 || cnum < 0) {\r
+    if ((p->lower == p->upper) && ! IS_REPEAT_INFINITE(p->upper)) {\r
+      if ((c->lower == c->upper) && ! IS_REPEAT_INFINITE(c->upper)) {\r
+        int n = positive_int_multiply(p->lower, c->lower);\r
+        if (n >= 0) {\r
+          p->lower = p->upper = n;\r
+          NODE_BODY(pnode) = NODE_BODY(cnode);\r
+          goto remove_cnode;\r
+        }\r
+      }\r
+    }\r
 \r
-  p = NQTFR(pnode);\r
-  c = NQTFR(cnode);\r
-  pnum = popular_quantifier_num(p);\r
-  cnum = popular_quantifier_num(c);\r
-  if (pnum < 0 || cnum < 0) return ;\r
+    return ;\r
+  }\r
 \r
   switch(ReduceTypeTable[cnum][pnum]) {\r
   case RQ_DEL:\r
-    CopyMem (pnode, cnode, sizeof (Node));\r
+    *pnode = *cnode;\r
     break;\r
   case RQ_A:\r
-    p->target = c->target;\r
+    NODE_BODY(pnode) = NODE_BODY(cnode);\r
     p->lower  = 0;  p->upper = REPEAT_INFINITE;  p->greedy = 1;\r
     break;\r
   case RQ_AQ:\r
-    p->target = c->target;\r
+    NODE_BODY(pnode) = NODE_BODY(cnode);\r
     p->lower  = 0;  p->upper = REPEAT_INFINITE;  p->greedy = 0;\r
     break;\r
   case RQ_QQ:\r
-    p->target = c->target;\r
+    NODE_BODY(pnode) = NODE_BODY(cnode);\r
     p->lower  = 0;  p->upper = 1;  p->greedy = 0;\r
     break;\r
   case RQ_P_QQ:\r
-    p->target = cnode;\r
+    NODE_BODY(pnode) = cnode;\r
     p->lower  = 0;  p->upper = 1;  p->greedy = 0;\r
     c->lower  = 1;  c->upper = REPEAT_INFINITE;  c->greedy = 1;\r
     return ;\r
     break;\r
   case RQ_PQ_Q:\r
-    p->target = cnode;\r
+    NODE_BODY(pnode) = cnode;\r
     p->lower  = 0;  p->upper = 1;  p->greedy = 1;\r
     c->lower  = 1;  c->upper = REPEAT_INFINITE;  c->greedy = 0;\r
     return ;\r
     break;\r
   case RQ_ASIS:\r
-    p->target = cnode;\r
+    NODE_BODY(pnode) = cnode;\r
     return ;\r
     break;\r
   }\r
 \r
-  c->target = NULL_NODE;\r
+ remove_cnode:\r
+  NODE_BODY(cnode) = NULL_NODE;\r
   onig_node_free(cnode);\r
 }\r
 \r
+static int\r
+node_new_general_newline(Node** node, ScanEnv* env)\r
+{\r
+  int r;\r
+  int dlen, alen;\r
+  UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN * 2];\r
+  Node* crnl;\r
+  Node* ncc;\r
+  Node* x;\r
+  CClassNode* cc;\r
+\r
+  dlen = ONIGENC_CODE_TO_MBC(env->enc, 0x0d, buf);\r
+  if (dlen < 0) return dlen;\r
+  alen = ONIGENC_CODE_TO_MBC(env->enc, 0x0a, buf + dlen);\r
+  if (alen < 0) return alen;\r
+\r
+  crnl = node_new_str_raw(buf, buf + dlen + alen);\r
+  CHECK_NULL_RETURN_MEMERR(crnl);\r
+\r
+  ncc = node_new_cclass();\r
+  if (IS_NULL(ncc)) goto err2;\r
+\r
+  cc = CCLASS_(ncc);\r
+  if (dlen == 1) {\r
+    bitset_set_range(cc->bs, 0x0a, 0x0d);\r
+  }\r
+  else {\r
+    r = add_code_range(&(cc->mbuf), env, 0x0a, 0x0d);\r
+    if (r != 0) {\r
+    err1:\r
+      onig_node_free(ncc);\r
+    err2:\r
+      onig_node_free(crnl);\r
+      return ONIGERR_MEMORY;\r
+    }\r
+  }\r
+\r
+  if (ONIGENC_IS_UNICODE_ENCODING(env->enc)) {\r
+    r = add_code_range(&(cc->mbuf), env, 0x85, 0x85);\r
+    if (r != 0) goto err1;\r
+    r = add_code_range(&(cc->mbuf), env, 0x2028, 0x2029);\r
+    if (r != 0) goto err1;\r
+  }\r
+\r
+  x = node_new_enclosure_if_else(crnl, 0, ncc);\r
+  if (IS_NULL(x)) goto err1;\r
+\r
+  *node = x;\r
+  return 0;\r
+}\r
 \r
 enum TokenSyms {\r
   TK_EOT      = 0,   /* end of token */\r
@@ -2274,6 +4000,12 @@ enum TokenSyms {
   TK_CC_OPEN,\r
   TK_QUOTE_OPEN,\r
   TK_CHAR_PROPERTY,    /* \p{...}, \P{...} */\r
+  TK_KEEP,             /* \K */\r
+  TK_GENERAL_NEWLINE,  /* \R */\r
+  TK_NO_NEWLINE,       /* \N */\r
+  TK_TRUE_ANYCHAR,     /* \O */\r
+  TK_EXTENDED_GRAPHEME_CLUSTER, /* \X */\r
+\r
   /* in cc */\r
   TK_CC_CLOSE,\r
   TK_CC_RANGE,\r
@@ -2313,6 +4045,7 @@ typedef struct {
       UChar* name;\r
       UChar* name_end;\r
       int    gnum;\r
+      int    by_number;\r
     } call;\r
     struct {\r
       int ctype;\r
@@ -2374,7 +4107,7 @@ fetch_range_quantifier(UChar** src, UChar* end, OnigToken* tok, ScanEnv* env)
 \r
     if (p == prev) {\r
       if (non_low != 0)\r
-       goto invalid;\r
+        goto invalid;\r
       up = REPEAT_INFINITE;  /* {n,} : {n,infinite} */\r
     }\r
   }\r
@@ -2406,15 +4139,17 @@ fetch_range_quantifier(UChar** src, UChar* end, OnigToken* tok, ScanEnv* env)
   return r; /* 0: normal {n,m}, 2: fixed {n} */\r
 \r
  invalid:\r
-  if (syn_allow)\r
+  if (syn_allow) {\r
+    /* *src = p; */ /* !!! Don't do this line !!! */\r
     return 1;  /* OK */\r
+  }\r
   else\r
     return ONIGERR_INVALID_REPEAT_RANGE_PATTERN;\r
 }\r
 \r
 /* \M-, \C-, \c, or \... */\r
 static int\r
-fetch_escaped_value(UChar** src, UChar* end, ScanEnv* env)\r
+fetch_escaped_value(UChar** src, UChar* end, ScanEnv* env, OnigCodePoint* val)\r
 {\r
   int v;\r
   OnigCodePoint c;\r
@@ -2433,9 +4168,8 @@ fetch_escaped_value(UChar** src, UChar* end, ScanEnv* env)
       if (PEND) return ONIGERR_END_PATTERN_AT_META;\r
       PFETCH_S(c);\r
       if (c == MC_ESC(env->syntax)) {\r
-        v = fetch_escaped_value(&p, end, env);\r
+        v = fetch_escaped_value(&p, end, env, &c);\r
         if (v < 0) return v;\r
-        c = (OnigCodePoint )v;\r
       }\r
       c = ((c & 0xff) | 0x80);\r
     }\r
@@ -2463,9 +4197,8 @@ fetch_escaped_value(UChar** src, UChar* end, ScanEnv* env)
       }\r
       else {\r
         if (c == MC_ESC(env->syntax)) {\r
-          v = fetch_escaped_value(&p, end, env);\r
+          v = fetch_escaped_value(&p, end, env, &c);\r
           if (v < 0) return v;\r
-          c = (OnigCodePoint )v;\r
         }\r
         c &= 0x9f;\r
       }\r
@@ -2482,7 +4215,8 @@ fetch_escaped_value(UChar** src, UChar* end, ScanEnv* env)
   }\r
 \r
   *src = p;\r
-  return c;\r
+  *val = c;\r
+  return 0;\r
 }\r
 \r
 static int fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env);\r
@@ -2491,8 +4225,9 @@ static OnigCodePoint
 get_name_end_code_point(OnigCodePoint start)\r
 {\r
   switch (start) {\r
-  case '<':  return (OnigCodePoint )'>'; break;\r
+  case '<':  return (OnigCodePoint )'>';  break;\r
   case '\'': return (OnigCodePoint )'\''; break;\r
+  case '(':  return (OnigCodePoint )')';  break;\r
   default:\r
     break;\r
   }\r
@@ -2500,19 +4235,26 @@ get_name_end_code_point(OnigCodePoint start)
   return (OnigCodePoint )0;\r
 }\r
 \r
-#ifdef USE_NAMED_GROUP\r
+enum REF_NUM {\r
+  IS_NOT_NUM = 0,\r
+  IS_ABS_NUM = 1,\r
+  IS_REL_NUM = 2\r
+};\r
+\r
 #ifdef USE_BACKREF_WITH_LEVEL\r
 /*\r
    \k<name+n>, \k<name-n>\r
    \k<num+n>,  \k<num-n>\r
    \k<-num+n>, \k<-num-n>\r
+   \k<+num+n>, \k<+num-n>\r
 */\r
 static int\r
 fetch_name_with_level(OnigCodePoint start_code, UChar** src, UChar* end,\r
-                     UChar** rname_end, ScanEnv* env,\r
-                     int* rback_num, int* rlevel)\r
+                      UChar** rname_end, ScanEnv* env,\r
+                      int* rback_num, int* rlevel, enum REF_NUM* num_type)\r
 {\r
-  int r, sign, is_num, exist_level;\r
+  int r, sign, exist_level;\r
+  int digit_count;\r
   OnigCodePoint end_code;\r
   OnigCodePoint c = 0;\r
   OnigEncoding enc = env->enc;\r
@@ -2522,12 +4264,14 @@ fetch_name_with_level(OnigCodePoint start_code, UChar** src, UChar* end,
   PFETCH_READY;\r
 \r
   *rback_num = 0;\r
-  is_num = exist_level = 0;\r
+  exist_level = 0;\r
+  *num_type = IS_NOT_NUM;\r
   sign = 1;\r
   pnum_head = *src;\r
 \r
   end_code = get_name_end_code_point(start_code);\r
 \r
+  digit_count = 0;\r
   name_end = end;\r
   r = 0;\r
   if (PEND) {\r
@@ -2538,14 +4282,20 @@ fetch_name_with_level(OnigCodePoint start_code, UChar** src, UChar* end,
     if (c == end_code)\r
       return ONIGERR_EMPTY_GROUP_NAME;\r
 \r
-    if (ONIGENC_IS_CODE_DIGIT(enc, c)) {\r
-      is_num = 1;\r
+    if (IS_CODE_DIGIT_ASCII(enc, c)) {\r
+      *num_type = IS_ABS_NUM;\r
+      digit_count++;\r
     }\r
     else if (c == '-') {\r
-      is_num = 2;\r
+      *num_type = IS_REL_NUM;\r
       sign = -1;\r
       pnum_head = p;\r
     }\r
+    else if (c == '+') {\r
+      *num_type = IS_REL_NUM;\r
+      sign = 1;\r
+      pnum_head = p;\r
+    }\r
     else if (!ONIGENC_IS_CODE_WORD(enc, c)) {\r
       r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;\r
     }\r
@@ -2555,17 +4305,18 @@ fetch_name_with_level(OnigCodePoint start_code, UChar** src, UChar* end,
     name_end = p;\r
     PFETCH(c);\r
     if (c == end_code || c == ')' || c == '+' || c == '-') {\r
-      if (is_num == 2)         r = ONIGERR_INVALID_GROUP_NAME;\r
+      if (*num_type != IS_NOT_NUM && digit_count == 0)\r
+        r = ONIGERR_INVALID_GROUP_NAME;\r
       break;\r
     }\r
 \r
-    if (is_num != 0) {\r
-      if (ONIGENC_IS_CODE_DIGIT(enc, c)) {\r
-        is_num = 1;\r
+    if (*num_type != IS_NOT_NUM) {\r
+      if (IS_CODE_DIGIT_ASCII(enc, c)) {\r
+        digit_count++;\r
       }\r
       else {\r
         r = ONIGERR_INVALID_GROUP_NAME;\r
-        is_num = 0;\r
+        *num_type = IS_NOT_NUM;\r
       }\r
     }\r
     else if (!ONIGENC_IS_CODE_WORD(enc, c)) {\r
@@ -2578,30 +4329,40 @@ fetch_name_with_level(OnigCodePoint start_code, UChar** src, UChar* end,
       int level;\r
       int flag = (c == '-' ? -1 : 1);\r
 \r
+      if (PEND) {\r
+        r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;\r
+        goto end;\r
+      }\r
       PFETCH(c);\r
-      if (! ONIGENC_IS_CODE_DIGIT(enc, c)) goto err;\r
+      if (! IS_CODE_DIGIT_ASCII(enc, c)) goto err;\r
       PUNFETCH;\r
       level = onig_scan_unsigned_number(&p, end, enc);\r
       if (level < 0) return ONIGERR_TOO_BIG_NUMBER;\r
       *rlevel = (level * flag);\r
       exist_level = 1;\r
 \r
-      PFETCH(c);\r
-      if (c == end_code)\r
-       goto end;\r
+      if (!PEND) {\r
+        PFETCH(c);\r
+        if (c == end_code)\r
+          goto end;\r
+      }\r
     }\r
 \r
   err:\r
-    r = ONIGERR_INVALID_GROUP_NAME;\r
     name_end = end;\r
+  err2:\r
+    r = ONIGERR_INVALID_GROUP_NAME;\r
   }\r
 \r
  end:\r
   if (r == 0) {\r
-    if (is_num != 0) {\r
+    if (*num_type != IS_NOT_NUM) {\r
       *rback_num = onig_scan_unsigned_number(&pnum_head, name_end, enc);\r
       if (*rback_num < 0) return ONIGERR_TOO_BIG_NUMBER;\r
-      else if (*rback_num == 0) goto err;\r
+      else if (*rback_num == 0) {\r
+        if (*num_type == IS_REL_NUM)\r
+          goto err2;\r
+      }\r
 \r
       *rback_num *= sign;\r
     }\r
@@ -2618,14 +4379,16 @@ fetch_name_with_level(OnigCodePoint start_code, UChar** src, UChar* end,
 #endif /* USE_BACKREF_WITH_LEVEL */\r
 \r
 /*\r
-  def: 0 -> define name    (don't allow number name)\r
+  ref: 0 -> define name    (don't allow number name)\r
        1 -> reference name (allow number name)\r
 */\r
 static int\r
 fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,\r
-          UChar** rname_end, ScanEnv* env, int* rback_num, int ref)\r
+           UChar** rname_end, ScanEnv* env, int* rback_num,\r
+           enum REF_NUM* num_type, int ref)\r
 {\r
-  int r, is_num, sign;\r
+  int r, sign;\r
+  int digit_count;\r
   OnigCodePoint end_code;\r
   OnigCodePoint c = 0;\r
   OnigEncoding enc = env->enc;\r
@@ -2637,10 +4400,11 @@ fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,
 \r
   end_code = get_name_end_code_point(start_code);\r
 \r
+  digit_count = 0;\r
   name_end = end;\r
   pnum_head = *src;\r
   r = 0;\r
-  is_num = 0;\r
+  *num_type = IS_NOT_NUM;\r
   sign = 1;\r
   if (PEND) {\r
     return ONIGERR_EMPTY_GROUP_NAME;\r
@@ -2650,171 +4414,106 @@ fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,
     if (c == end_code)\r
       return ONIGERR_EMPTY_GROUP_NAME;\r
 \r
-    if (ONIGENC_IS_CODE_DIGIT(enc, c)) {\r
+    if (IS_CODE_DIGIT_ASCII(enc, c)) {\r
       if (ref == 1)\r
-        is_num = 1;\r
+        *num_type = IS_ABS_NUM;\r
       else {\r
         r = ONIGERR_INVALID_GROUP_NAME;\r
-        is_num = 0;\r
       }\r
+      digit_count++;\r
     }\r
     else if (c == '-') {\r
       if (ref == 1) {\r
-        is_num = 2;\r
+        *num_type = IS_REL_NUM;\r
         sign = -1;\r
         pnum_head = p;\r
       }\r
       else {\r
         r = ONIGERR_INVALID_GROUP_NAME;\r
-        is_num = 0;\r
       }\r
     }\r
-    else if (!ONIGENC_IS_CODE_WORD(enc, c)) {\r
-      r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;\r
-    }\r
-  }\r
-\r
-  if (r == 0) {\r
-    while (!PEND) {\r
-      name_end = p;\r
-      PFETCH_S(c);\r
-      if (c == end_code || c == ')') {\r
-        if (is_num == 2)       r = ONIGERR_INVALID_GROUP_NAME;\r
-        break;\r
-      }\r
-\r
-      if (is_num != 0) {\r
-        if (ONIGENC_IS_CODE_DIGIT(enc, c)) {\r
-          is_num = 1;\r
-        }\r
-        else {\r
-          if (!ONIGENC_IS_CODE_WORD(enc, c))\r
-            r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;\r
-          else\r
-            r = ONIGERR_INVALID_GROUP_NAME;\r
-          is_num = 0;\r
-        }\r
+    else if (c == '+') {\r
+      if (ref == 1) {\r
+        *num_type = IS_REL_NUM;\r
+        sign = 1;\r
+        pnum_head = p;\r
       }\r
       else {\r
-        if (!ONIGENC_IS_CODE_WORD(enc, c)) {\r
-          r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;\r
-        }\r
-      }\r
-    }\r
-\r
-    if (c != end_code) {\r
-      r = ONIGERR_INVALID_GROUP_NAME;\r
-      name_end = end;\r
-    }\r
-\r
-    if (is_num != 0) {\r
-      *rback_num = onig_scan_unsigned_number(&pnum_head, name_end, enc);\r
-      if (*rback_num < 0) return ONIGERR_TOO_BIG_NUMBER;\r
-      else if (*rback_num == 0) {\r
         r = ONIGERR_INVALID_GROUP_NAME;\r
-        goto err;\r
       }\r
-\r
-      *rback_num *= sign;\r
-    }\r
-\r
-    *rname_end = name_end;\r
-    *src = p;\r
-    return 0;\r
-  }\r
-  else {\r
-    while (!PEND) {\r
-      name_end = p;\r
-      PFETCH_S(c);\r
-      if (c == end_code || c == ')')\r
-        break;\r
-    }\r
-    if (PEND)\r
-      name_end = end;\r
-\r
-  err:\r
-    onig_scan_env_set_error_string(env, r, *src, name_end);\r
-    return r;\r
-  }\r
-}\r
-#else\r
-static int\r
-fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,\r
-          UChar** rname_end, ScanEnv* env, int* rback_num, int ref)\r
-{\r
-  int r, is_num, sign;\r
-  OnigCodePoint end_code;\r
-  OnigCodePoint c = 0;\r
-  UChar *name_end;\r
-  OnigEncoding enc = env->enc;\r
-  UChar *pnum_head;\r
-  UChar *p = *src;\r
-  PFETCH_READY;\r
-\r
-  *rback_num = 0;\r
-\r
-  end_code = get_name_end_code_point(start_code);\r
-\r
-  *rname_end = name_end = end;\r
-  r = 0;\r
-  pnum_head = *src;\r
-  is_num = 0;\r
-  sign = 1;\r
-\r
-  if (PEND) {\r
-    return ONIGERR_EMPTY_GROUP_NAME;\r
-  }\r
-  else {\r
-    PFETCH(c);\r
-    if (c == end_code)\r
-      return ONIGERR_EMPTY_GROUP_NAME;\r
-\r
-    if (ONIGENC_IS_CODE_DIGIT(enc, c)) {\r
-      is_num = 1;\r
-    }\r
-    else if (c == '-') {\r
-      is_num = 2;\r
-      sign = -1;\r
-      pnum_head = p;\r
-    }\r
-    else {\r
-      r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;\r
     }\r
-  }\r
-\r
-  while (!PEND) {\r
-    name_end = p;\r
-\r
-    PFETCH(c);\r
-    if (c == end_code || c == ')') break;\r
-    if (! ONIGENC_IS_CODE_DIGIT(enc, c))\r
+    else if (!ONIGENC_IS_CODE_WORD(enc, c)) {\r
       r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;\r
-  }\r
-  if (r == 0 && c != end_code) {\r
-    r = ONIGERR_INVALID_GROUP_NAME;\r
-    name_end = end;\r
+    }\r
   }\r
 \r
   if (r == 0) {\r
-    *rback_num = onig_scan_unsigned_number(&pnum_head, name_end, enc);\r
-    if (*rback_num < 0) return ONIGERR_TOO_BIG_NUMBER;\r
-    else if (*rback_num == 0) {\r
+    while (!PEND) {\r
+      name_end = p;\r
+      PFETCH_S(c);\r
+      if (c == end_code || c == ')') {\r
+        if (*num_type != IS_NOT_NUM && digit_count == 0)\r
+          r = ONIGERR_INVALID_GROUP_NAME;\r
+        break;\r
+      }\r
+\r
+      if (*num_type != IS_NOT_NUM) {\r
+        if (IS_CODE_DIGIT_ASCII(enc, c)) {\r
+          digit_count++;\r
+        }\r
+        else {\r
+          if (!ONIGENC_IS_CODE_WORD(enc, c))\r
+            r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;\r
+          else\r
+            r = ONIGERR_INVALID_GROUP_NAME;\r
+\r
+          *num_type = IS_NOT_NUM;\r
+        }\r
+      }\r
+      else {\r
+        if (!ONIGENC_IS_CODE_WORD(enc, c)) {\r
+          r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;\r
+        }\r
+      }\r
+    }\r
+\r
+    if (c != end_code) {\r
       r = ONIGERR_INVALID_GROUP_NAME;\r
       goto err;\r
     }\r
-    *rback_num *= sign;\r
+\r
+    if (*num_type != IS_NOT_NUM) {\r
+      *rback_num = onig_scan_unsigned_number(&pnum_head, name_end, enc);\r
+      if (*rback_num < 0) return ONIGERR_TOO_BIG_NUMBER;\r
+      else if (*rback_num == 0) {\r
+        if (*num_type == IS_REL_NUM) {\r
+          r = ONIGERR_INVALID_GROUP_NAME;\r
+          goto err;\r
+        }\r
+      }\r
+\r
+      *rback_num *= sign;\r
+    }\r
 \r
     *rname_end = name_end;\r
     *src = p;\r
     return 0;\r
   }\r
   else {\r
+    while (!PEND) {\r
+      name_end = p;\r
+      PFETCH_S(c);\r
+      if (c == end_code || c == ')')\r
+        break;\r
+    }\r
+    if (PEND)\r
+      name_end = end;\r
+\r
   err:\r
     onig_scan_env_set_error_string(env, r, *src, name_end);\r
     return r;\r
   }\r
 }\r
-#endif /* USE_NAMED_GROUP */\r
 \r
 static void\r
 CC_ESC_WARN(ScanEnv* env, UChar *c)\r
@@ -2825,8 +4524,9 @@ CC_ESC_WARN(ScanEnv* env, UChar *c)
       IS_SYNTAX_BV(env->syntax, ONIG_SYN_BACKSLASH_ESCAPE_IN_CC)) {\r
     UChar buf[WARN_BUFSIZE];\r
     onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc,\r
-               env->pattern, env->pattern_end,\r
-                (UChar* )"character class has '%s' without escape", c);\r
+                               env->pattern, env->pattern_end,\r
+                               (UChar* )"character class has '%s' without escape",\r
+                               c);\r
     (*onig_warn)((char* )buf);\r
   }\r
 }\r
@@ -2839,15 +4539,15 @@ CLOSE_BRACKET_WITHOUT_ESC_WARN(ScanEnv* env, UChar* c)
   if (IS_SYNTAX_BV((env)->syntax, ONIG_SYN_WARN_CC_OP_NOT_ESCAPED)) {\r
     UChar buf[WARN_BUFSIZE];\r
     onig_snprintf_with_pattern(buf, WARN_BUFSIZE, (env)->enc,\r
-               (env)->pattern, (env)->pattern_end,\r
-               (UChar* )"regular expression has '%s' without escape", c);\r
+                         (env)->pattern, (env)->pattern_end,\r
+                         (UChar* )"regular expression has '%s' without escape", c);\r
     (*onig_warn)((char* )buf);\r
   }\r
 }\r
 \r
 static UChar*\r
 find_str_position(OnigCodePoint s[], int n, UChar* from, UChar* to,\r
-                 UChar **next, OnigEncoding enc)\r
+                  UChar **next, OnigEncoding enc)\r
 {\r
   int i;\r
   OnigCodePoint x;\r
@@ -2859,14 +4559,14 @@ find_str_position(OnigCodePoint s[], int n, UChar* from, UChar* to,
     q = p + enclen(enc, p);\r
     if (x == s[0]) {\r
       for (i = 1; i < n && q < to; i++) {\r
-       x = ONIGENC_MBC_TO_CODE(enc, q, to);\r
-       if (x != s[i]) break;\r
-       q += enclen(enc, q);\r
+        x = ONIGENC_MBC_TO_CODE(enc, q, to);\r
+        if (x != s[i]) break;\r
+        q += enclen(enc, q);\r
       }\r
       if (i >= n) {\r
-       if (IS_NOT_NULL(next))\r
-         *next = q;\r
-       return p;\r
+        if (IS_NOT_NULL(next))\r
+          *next = q;\r
+        return p;\r
       }\r
     }\r
     p = q;\r
@@ -2876,7 +4576,7 @@ find_str_position(OnigCodePoint s[], int n, UChar* from, UChar* to,
 \r
 static int\r
 str_exist_check_with_esc(OnigCodePoint s[], int n, UChar* from, UChar* to,\r
-                OnigCodePoint bad, OnigEncoding enc, OnigSyntaxType* syn)\r
+                         OnigCodePoint bad, OnigEncoding enc, OnigSyntaxType* syn)\r
 {\r
   int i, in_esc;\r
   OnigCodePoint x;\r
@@ -2893,19 +4593,19 @@ str_exist_check_with_esc(OnigCodePoint s[], int n, UChar* from, UChar* to,
       x = ONIGENC_MBC_TO_CODE(enc, p, to);\r
       q = p + enclen(enc, p);\r
       if (x == s[0]) {\r
-       for (i = 1; i < n && q < to; i++) {\r
-         x = ONIGENC_MBC_TO_CODE(enc, q, to);\r
-         if (x != s[i]) break;\r
-         q += enclen(enc, q);\r
-       }\r
-       if (i >= n) return 1;\r
-       p += enclen(enc, p);\r
+        for (i = 1; i < n && q < to; i++) {\r
+          x = ONIGENC_MBC_TO_CODE(enc, q, to);\r
+          if (x != s[i]) break;\r
+          q += enclen(enc, q);\r
+        }\r
+        if (i >= n) return 1;\r
+        p += enclen(enc, p);\r
       }\r
       else {\r
-       x = ONIGENC_MBC_TO_CODE(enc, p, to);\r
-       if (x == bad) return 0;\r
-       else if (x == MC_ESC(syn)) in_esc = 1;\r
-       p = q;\r
+        x = ONIGENC_MBC_TO_CODE(enc, p, to);\r
+        if (x == bad) return 0;\r
+        else if (x == MC_ESC(syn)) in_esc = 1;\r
+        p = q;\r
       }\r
     }\r
   }\r
@@ -2995,21 +4695,50 @@ fetch_token_in_cc(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
 \r
     case 'p':\r
     case 'P':\r
+      if (PEND) break;\r
+\r
       c2 = PPEEK;\r
       if (c2 == '{' &&\r
-         IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY)) {\r
-       PINC;\r
-       tok->type = TK_CHAR_PROPERTY;\r
-       tok->u.prop.not = (c == 'P' ? 1 : 0);\r
-\r
-       if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT)) {\r
-         PFETCH(c2);\r
-         if (c2 == '^') {\r
-           tok->u.prop.not = (tok->u.prop.not == 0 ? 1 : 0);\r
-         }\r
-         else\r
-           PUNFETCH;\r
-       }\r
+          IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY)) {\r
+        PINC;\r
+        tok->type = TK_CHAR_PROPERTY;\r
+        tok->u.prop.not = (c == 'P' ? 1 : 0);\r
+\r
+        if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT)) {\r
+          PFETCH(c2);\r
+          if (c2 == '^') {\r
+            tok->u.prop.not = (tok->u.prop.not == 0 ? 1 : 0);\r
+          }\r
+          else\r
+            PUNFETCH;\r
+        }\r
+      }\r
+      break;\r
+\r
+    case 'o':\r
+      if (PEND) break;\r
+\r
+      prev = p;\r
+      if (PPEEK_IS('{') && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_O_BRACE_OCTAL)) {\r
+        PINC;\r
+        num = scan_unsigned_octal_number(&p, end, 11, enc);\r
+        if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;\r
+        if (!PEND) {\r
+          c2 = PPEEK;\r
+          if (IS_CODE_DIGIT_ASCII(enc, c2))\r
+            return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;\r
+        }\r
+\r
+        if (p > prev + enclen(enc, prev) && !PEND && (PPEEK_IS('}'))) {\r
+          PINC;\r
+          tok->type   = TK_CODE_POINT;\r
+          tok->base   = 8;\r
+          tok->u.code = (OnigCodePoint )num;\r
+        }\r
+        else {\r
+          /* can't read nothing or invalid format */\r
+          p = prev;\r
+        }\r
       }\r
       break;\r
 \r
@@ -3018,35 +4747,40 @@ fetch_token_in_cc(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
 \r
       prev = p;\r
       if (PPEEK_IS('{') && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_BRACE_HEX8)) {\r
-       PINC;\r
-       num = scan_unsigned_hexadecimal_number(&p, end, 8, enc);\r
-       if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;\r
-       if (!PEND) {\r
+        PINC;\r
+        num = scan_unsigned_hexadecimal_number(&p, end, 0, 8, enc);\r
+        if (num < 0) {\r
+          if (num == ONIGERR_TOO_BIG_NUMBER)\r
+            return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;\r
+          else\r
+            return num;\r
+        }\r
+        if (!PEND) {\r
           c2 = PPEEK;\r
-          if (ONIGENC_IS_CODE_XDIGIT(enc, c2))\r
+          if (IS_CODE_XDIGIT_ASCII(enc, c2))\r
             return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;\r
         }\r
 \r
-       if (p > prev + enclen(enc, prev) && !PEND && (PPEEK_IS('}'))) {\r
-         PINC;\r
-         tok->type   = TK_CODE_POINT;\r
-         tok->base   = 16;\r
-         tok->u.code = (OnigCodePoint )num;\r
-       }\r
-       else {\r
-         /* can't read nothing or invalid format */\r
-         p = prev;\r
-       }\r
+        if (p > prev + enclen(enc, prev) && !PEND && (PPEEK_IS('}'))) {\r
+          PINC;\r
+          tok->type   = TK_CODE_POINT;\r
+          tok->base   = 16;\r
+          tok->u.code = (OnigCodePoint )num;\r
+        }\r
+        else {\r
+          /* can't read nothing or invalid format */\r
+          p = prev;\r
+        }\r
       }\r
       else if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_HEX2)) {\r
-       num = scan_unsigned_hexadecimal_number(&p, end, 2, enc);\r
-       if (num < 0) return ONIGERR_TOO_BIG_NUMBER;\r
-       if (p == prev) {  /* can't read nothing. */\r
-         num = 0; /* but, it's not error */\r
-       }\r
-       tok->type = TK_RAW_BYTE;\r
-       tok->base = 16;\r
-       tok->u.c  = num;\r
+        num = scan_unsigned_hexadecimal_number(&p, end, 0, 2, enc);\r
+        if (num < 0) return num;\r
+        if (p == prev) {  /* can't read nothing. */\r
+          num = 0; /* but, it's not error */\r
+        }\r
+        tok->type = TK_RAW_BYTE;\r
+        tok->base = 16;\r
+        tok->u.c  = num;\r
       }\r
       break;\r
 \r
@@ -3055,40 +4789,40 @@ fetch_token_in_cc(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
 \r
       prev = p;\r
       if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_U_HEX4)) {\r
-       num = scan_unsigned_hexadecimal_number(&p, end, 4, enc);\r
-       if (num < 0) return ONIGERR_TOO_BIG_NUMBER;\r
-       if (p == prev) {  /* can't read nothing. */\r
-         num = 0; /* but, it's not error */\r
-       }\r
-       tok->type   = TK_CODE_POINT;\r
-       tok->base   = 16;\r
-       tok->u.code = (OnigCodePoint )num;\r
+        num = scan_unsigned_hexadecimal_number(&p, end, 4, 4, enc);\r
+        if (num < 0) return num;\r
+        if (p == prev) {  /* can't read nothing. */\r
+          num = 0; /* but, it's not error */\r
+        }\r
+        tok->type   = TK_CODE_POINT;\r
+        tok->base   = 16;\r
+        tok->u.code = (OnigCodePoint )num;\r
       }\r
       break;\r
 \r
     case '0':\r
     case '1': case '2': case '3': case '4': case '5': case '6': case '7':\r
       if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_OCTAL3)) {\r
-       PUNFETCH;\r
-       prev = p;\r
-       num = scan_unsigned_octal_number(&p, end, 3, enc);\r
-       if (num < 0) return ONIGERR_TOO_BIG_NUMBER;\r
-       if (p == prev) {  /* can't read nothing. */\r
-         num = 0; /* but, it's not error */\r
-       }\r
-       tok->type = TK_RAW_BYTE;\r
-       tok->base = 8;\r
-       tok->u.c  = num;\r
+        PUNFETCH;\r
+        prev = p;\r
+        num = scan_unsigned_octal_number(&p, end, 3, enc);\r
+        if (num < 0 || num >= 256) return ONIGERR_TOO_BIG_NUMBER;\r
+        if (p == prev) {  /* can't read nothing. */\r
+          num = 0; /* but, it's not error */\r
+        }\r
+        tok->type = TK_RAW_BYTE;\r
+        tok->base = 8;\r
+        tok->u.c  = num;\r
       }\r
       break;\r
 \r
     default:\r
       PUNFETCH;\r
-      num = fetch_escaped_value(&p, end, env);\r
+      num = fetch_escaped_value(&p, end, env, &c2);\r
       if (num < 0) return num;\r
-      if (tok->u.c != num) {\r
-       tok->u.code = (OnigCodePoint )num;\r
-       tok->type   = TK_CODE_POINT;\r
+      if (tok->u.c != c2) {\r
+        tok->u.code = c2;\r
+        tok->type   = TK_CODE_POINT;\r
       }\r
       break;\r
     }\r
@@ -3096,30 +4830,30 @@ fetch_token_in_cc(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
   else if (c == '[') {\r
     if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_POSIX_BRACKET) && (PPEEK_IS(':'))) {\r
       OnigCodePoint send[] = { (OnigCodePoint )':', (OnigCodePoint )']' };\r
-      tok->backp = p; /* point at '[' is readed */\r
+      tok->backp = p; /* point at '[' is read */\r
       PINC;\r
       if (str_exist_check_with_esc(send, 2, p, end,\r
                                    (OnigCodePoint )']', enc, syn)) {\r
-       tok->type = TK_POSIX_BRACKET_OPEN;\r
+        tok->type = TK_POSIX_BRACKET_OPEN;\r
       }\r
       else {\r
-       PUNFETCH;\r
-       goto cc_in_cc;\r
+        PUNFETCH;\r
+        goto cc_in_cc;\r
       }\r
     }\r
     else {\r
     cc_in_cc:\r
       if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_CCLASS_SET_OP)) {\r
-       tok->type = TK_CC_CC_OPEN;\r
+        tok->type = TK_CC_CC_OPEN;\r
       }\r
       else {\r
-       CC_ESC_WARN(env, (UChar* )"[");\r
+        CC_ESC_WARN(env, (UChar* )"[");\r
       }\r
     }\r
   }\r
   else if (c == '&') {\r
     if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_CCLASS_SET_OP) &&\r
-       !PEND && (PPEEK_IS('&'))) {\r
+        !PEND && (PPEEK_IS('&'))) {\r
       PINC;\r
       tok->type = TK_CC_AND;\r
     }\r
@@ -3184,26 +4918,26 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
       tok->u.repeat.upper = 1;\r
     greedy_check:\r
       if (!PEND && PPEEK_IS('?') &&\r
-         IS_SYNTAX_OP(syn, ONIG_SYN_OP_QMARK_NON_GREEDY)) {\r
-       PFETCH(c);\r
-       tok->u.repeat.greedy     = 0;\r
-       tok->u.repeat.possessive = 0;\r
+          IS_SYNTAX_OP(syn, ONIG_SYN_OP_QMARK_NON_GREEDY)) {\r
+        PFETCH(c);\r
+        tok->u.repeat.greedy     = 0;\r
+        tok->u.repeat.possessive = 0;\r
       }\r
       else {\r
       possessive_check:\r
-       if (!PEND && PPEEK_IS('+') &&\r
-           ((IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT) &&\r
-             tok->type != TK_INTERVAL)  ||\r
-            (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL) &&\r
-             tok->type == TK_INTERVAL))) {\r
-         PFETCH(c);\r
-         tok->u.repeat.greedy     = 1;\r
-         tok->u.repeat.possessive = 1;\r
-       }\r
-       else {\r
-         tok->u.repeat.greedy     = 1;\r
-         tok->u.repeat.possessive = 0;\r
-       }\r
+        if (!PEND && PPEEK_IS('+') &&\r
+            ((IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT) &&\r
+              tok->type != TK_INTERVAL)  ||\r
+             (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL) &&\r
+              tok->type == TK_INTERVAL))) {\r
+          PFETCH(c);\r
+          tok->u.repeat.greedy     = 1;\r
+          tok->u.repeat.possessive = 1;\r
+        }\r
+        else {\r
+          tok->u.repeat.greedy     = 1;\r
+          tok->u.repeat.possessive = 0;\r
+        }\r
       }\r
       break;\r
 \r
@@ -3213,10 +4947,10 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
       if (r < 0) return r;  /* error */\r
       if (r == 0) goto greedy_check;\r
       else if (r == 2) { /* {n} */\r
-       if (IS_SYNTAX_BV(syn, ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY))\r
-         goto possessive_check;\r
+        if (IS_SYNTAX_BV(syn, ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY))\r
+          goto possessive_check;\r
 \r
-       goto greedy_check;\r
+        goto greedy_check;\r
       }\r
       /* r == 1 : normal char */\r
       break;\r
@@ -3253,13 +4987,25 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
     case 'b':\r
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_B_WORD_BOUND)) break;\r
       tok->type = TK_ANCHOR;\r
-      tok->u.anchor = ANCHOR_WORD_BOUND;\r
+      tok->u.anchor = ANCHOR_WORD_BOUNDARY;\r
       break;\r
 \r
     case 'B':\r
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_B_WORD_BOUND)) break;\r
       tok->type = TK_ANCHOR;\r
-      tok->u.anchor = ANCHOR_NOT_WORD_BOUND;\r
+      tok->u.anchor = ANCHOR_NO_WORD_BOUNDARY;\r
+      break;\r
+\r
+    case 'y':\r
+      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER)) break;\r
+      tok->type = TK_ANCHOR;\r
+      tok->u.anchor = ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY;\r
+      break;\r
+\r
+    case 'Y':\r
+      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER)) break;\r
+      tok->type = TK_ANCHOR;\r
+      tok->u.anchor = ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY;\r
       break;\r
 \r
 #ifdef USE_WORD_BEGIN_END\r
@@ -3318,6 +5064,31 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
       tok->u.prop.not   = 1;\r
       break;\r
 \r
+    case 'K':\r
+      if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP)) break;\r
+      tok->type = TK_KEEP;\r
+      break;\r
+\r
+    case 'R':\r
+      if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE)) break;\r
+      tok->type = TK_GENERAL_NEWLINE;\r
+      break;\r
+\r
+    case 'N':\r
+      if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT)) break;\r
+      tok->type = TK_NO_NEWLINE;\r
+      break;\r
+\r
+    case 'O':\r
+      if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT)) break;\r
+      tok->type = TK_TRUE_ANYCHAR;\r
+      break;\r
+\r
+    case 'X':\r
+      if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER)) break;\r
+      tok->type = TK_EXTENDED_GRAPHEME_CLUSTER;\r
+      break;\r
+\r
     case 'A':\r
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR)) break;\r
     begin_buf:\r
@@ -3354,38 +5125,68 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
       goto end_buf;\r
       break;\r
 \r
+    case 'o':\r
+      if (PEND) break;\r
+\r
+      prev = p;\r
+      if (PPEEK_IS('{') && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_O_BRACE_OCTAL)) {\r
+        PINC;\r
+        num = scan_unsigned_octal_number(&p, end, 11, enc);\r
+        if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;\r
+        if (!PEND) {\r
+          if (IS_CODE_DIGIT_ASCII(enc, PPEEK))\r
+            return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;\r
+        }\r
+\r
+        if ((p > prev + enclen(enc, prev)) && !PEND && PPEEK_IS('}')) {\r
+          PINC;\r
+          tok->type   = TK_CODE_POINT;\r
+          tok->u.code = (OnigCodePoint )num;\r
+        }\r
+        else {\r
+          /* can't read nothing or invalid format */\r
+          p = prev;\r
+        }\r
+      }\r
+      break;\r
+\r
     case 'x':\r
       if (PEND) break;\r
 \r
       prev = p;\r
       if (PPEEK_IS('{') && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_BRACE_HEX8)) {\r
-       PINC;\r
-       num = scan_unsigned_hexadecimal_number(&p, end, 8, enc);\r
-       if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;\r
-       if (!PEND) {\r
-          if (ONIGENC_IS_CODE_XDIGIT(enc, PPEEK))\r
+        PINC;\r
+        num = scan_unsigned_hexadecimal_number(&p, end, 0, 8, enc);\r
+        if (num < 0) {\r
+          if (num == ONIGERR_TOO_BIG_NUMBER)\r
+            return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;\r
+          else\r
+            return num;\r
+        }\r
+        if (!PEND) {\r
+          if (IS_CODE_XDIGIT_ASCII(enc, PPEEK))\r
             return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;\r
         }\r
 \r
-       if ((p > prev + enclen(enc, prev)) && !PEND && PPEEK_IS('}')) {\r
-         PINC;\r
-         tok->type   = TK_CODE_POINT;\r
-         tok->u.code = (OnigCodePoint )num;\r
-       }\r
-       else {\r
-         /* can't read nothing or invalid format */\r
-         p = prev;\r
-       }\r
+        if ((p > prev + enclen(enc, prev)) && !PEND && PPEEK_IS('}')) {\r
+          PINC;\r
+          tok->type   = TK_CODE_POINT;\r
+          tok->u.code = (OnigCodePoint )num;\r
+        }\r
+        else {\r
+          /* can't read nothing or invalid format */\r
+          p = prev;\r
+        }\r
       }\r
       else if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_HEX2)) {\r
-       num = scan_unsigned_hexadecimal_number(&p, end, 2, enc);\r
-       if (num < 0) return ONIGERR_TOO_BIG_NUMBER;\r
-       if (p == prev) {  /* can't read nothing. */\r
-         num = 0; /* but, it's not error */\r
-       }\r
-       tok->type = TK_RAW_BYTE;\r
-       tok->base = 16;\r
-       tok->u.c  = num;\r
+        num = scan_unsigned_hexadecimal_number(&p, end, 0, 2, enc);\r
+        if (num < 0) return num;\r
+        if (p == prev) {  /* can't read nothing. */\r
+          num = 0; /* but, it's not error */\r
+        }\r
+        tok->type = TK_RAW_BYTE;\r
+        tok->base = 16;\r
+        tok->u.c  = num;\r
       }\r
       break;\r
 \r
@@ -3394,14 +5195,14 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
 \r
       prev = p;\r
       if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_U_HEX4)) {\r
-       num = scan_unsigned_hexadecimal_number(&p, end, 4, enc);\r
-       if (num < 0) return ONIGERR_TOO_BIG_NUMBER;\r
-       if (p == prev) {  /* can't read nothing. */\r
-         num = 0; /* but, it's not error */\r
-       }\r
-       tok->type   = TK_CODE_POINT;\r
-       tok->base   = 16;\r
-       tok->u.code = (OnigCodePoint )num;\r
+        num = scan_unsigned_hexadecimal_number(&p, end, 4, 4, enc);\r
+        if (num < 0) return num;\r
+        if (p == prev) {  /* can't read nothing. */\r
+          num = 0; /* but, it's not error */\r
+        }\r
+        tok->type   = TK_CODE_POINT;\r
+        tok->base   = 16;\r
+        tok->u.code = (OnigCodePoint )num;\r
       }\r
       break;\r
 \r
@@ -3415,180 +5216,202 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
       }\r
 \r
       if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_DECIMAL_BACKREF) && \r
-         (num <= env->num_mem || num <= 9)) { /* This spec. from GNU regex */\r
-       if (IS_SYNTAX_BV(syn, ONIG_SYN_STRICT_CHECK_BACKREF)) {\r
-         if (num > env->num_mem || IS_NULL(SCANENV_MEM_NODES(env)[num]))\r
-           return ONIGERR_INVALID_BACKREF;\r
-       }\r
-\r
-       tok->type = TK_BACKREF;\r
-       tok->u.backref.num     = 1;\r
-       tok->u.backref.ref1    = num;\r
-       tok->u.backref.by_name = 0;\r
+          (num <= env->num_mem || num <= 9)) { /* This spec. from GNU regex */\r
+        if (IS_SYNTAX_BV(syn, ONIG_SYN_STRICT_CHECK_BACKREF)) {\r
+          if (num > env->num_mem || IS_NULL(SCANENV_MEMENV(env)[num].node))\r
+            return ONIGERR_INVALID_BACKREF;\r
+        }\r
+\r
+        tok->type = TK_BACKREF;\r
+        tok->u.backref.num     = 1;\r
+        tok->u.backref.ref1    = num;\r
+        tok->u.backref.by_name = 0;\r
 #ifdef USE_BACKREF_WITH_LEVEL\r
-       tok->u.backref.exist_level = 0;\r
+        tok->u.backref.exist_level = 0;\r
 #endif\r
-       break;\r
+        break;\r
       }\r
 \r
     skip_backref:\r
       if (c == '8' || c == '9') {\r
-       /* normal char */\r
-       p = prev; PINC;\r
-       break;\r
+        /* normal char */\r
+        p = prev; PINC;\r
+        break;\r
       }\r
 \r
       p = prev;\r
       /* fall through */\r
     case '0':\r
       if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_OCTAL3)) {\r
-       prev = p;\r
-       num = scan_unsigned_octal_number(&p, end, (c == '0' ? 2:3), enc);\r
-       if (num < 0) return ONIGERR_TOO_BIG_NUMBER;\r
-       if (p == prev) {  /* can't read nothing. */\r
-         num = 0; /* but, it's not error */\r
-       }\r
-       tok->type = TK_RAW_BYTE;\r
-       tok->base = 8;\r
-       tok->u.c  = num;\r
+        prev = p;\r
+        num = scan_unsigned_octal_number(&p, end, (c == '0' ? 2:3), enc);\r
+        if (num < 0 || num >= 256) return ONIGERR_TOO_BIG_NUMBER;\r
+        if (p == prev) {  /* can't read nothing. */\r
+          num = 0; /* but, it's not error */\r
+        }\r
+        tok->type = TK_RAW_BYTE;\r
+        tok->base = 8;\r
+        tok->u.c  = num;\r
       }\r
       else if (c != '0') {\r
-       PINC;\r
+        PINC;\r
       }\r
       break;\r
 \r
-#ifdef USE_NAMED_GROUP\r
     case 'k':\r
-      if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_K_NAMED_BACKREF)) {\r
-       PFETCH(c);\r
-       if (c == '<' || c == '\'') {\r
-         UChar* name_end;\r
-         int* backs;\r
-         int back_num;\r
+      if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_K_NAMED_BACKREF)) {\r
+        PFETCH(c);\r
+        if (c == '<' || c == '\'') {\r
+          UChar* name_end;\r
+          int* backs;\r
+          int back_num;\r
+          enum REF_NUM num_type;\r
 \r
-         prev = p;\r
+          prev = p;\r
 \r
 #ifdef USE_BACKREF_WITH_LEVEL\r
-         name_end = NULL_UCHARP; /* no need. escape gcc warning. */\r
-         r = fetch_name_with_level((OnigCodePoint )c, &p, end, &name_end,\r
-                                   env, &back_num, &tok->u.backref.level);\r
-         if (r == 1) tok->u.backref.exist_level = 1;\r
-         else        tok->u.backref.exist_level = 0;\r
+          name_end = NULL_UCHARP; /* no need. escape gcc warning. */\r
+          r = fetch_name_with_level((OnigCodePoint )c, &p, end, &name_end,\r
+                                 env, &back_num, &tok->u.backref.level, &num_type);\r
+          if (r == 1) tok->u.backref.exist_level = 1;\r
+          else        tok->u.backref.exist_level = 0;\r
 #else\r
-         r = fetch_name(&p, end, &name_end, env, &back_num, 1);\r
+          r = fetch_name(c, &p, end, &name_end, env, &back_num, &num_type, 1);\r
 #endif\r
-         if (r < 0) return r;\r
-\r
-         if (back_num != 0) {\r
-           if (back_num < 0) {\r
-             back_num = BACKREF_REL_TO_ABS(back_num, env);\r
-             if (back_num <= 0)\r
-               return ONIGERR_INVALID_BACKREF;\r
-           }\r
-\r
-           if (IS_SYNTAX_BV(syn, ONIG_SYN_STRICT_CHECK_BACKREF)) {\r
-             if (back_num > env->num_mem ||\r
-                 IS_NULL(SCANENV_MEM_NODES(env)[back_num]))\r
-               return ONIGERR_INVALID_BACKREF;\r
-           }\r
-           tok->type = TK_BACKREF;\r
-           tok->u.backref.by_name = 0;\r
-           tok->u.backref.num  = 1;\r
-           tok->u.backref.ref1 = back_num;\r
-         }\r
-         else {\r
-           num = onig_name_to_group_numbers(env->reg, prev, name_end, &backs);\r
-           if (num <= 0) {\r
-             onig_scan_env_set_error_string(env,\r
-                            ONIGERR_UNDEFINED_NAME_REFERENCE, prev, name_end);\r
-             return ONIGERR_UNDEFINED_NAME_REFERENCE;\r
-           }\r
-           if (IS_SYNTAX_BV(syn, ONIG_SYN_STRICT_CHECK_BACKREF)) {\r
-             int i;\r
-             for (i = 0; i < num; i++) {\r
-               if (backs[i] > env->num_mem ||\r
-                   IS_NULL(SCANENV_MEM_NODES(env)[backs[i]]))\r
-                 return ONIGERR_INVALID_BACKREF;\r
-             }\r
-           }\r
-\r
-           tok->type = TK_BACKREF;\r
-           tok->u.backref.by_name = 1;\r
-           if (num == 1) {\r
-             tok->u.backref.num  = 1;\r
-             tok->u.backref.ref1 = backs[0];\r
-           }\r
-           else {\r
-             tok->u.backref.num  = num;\r
-             tok->u.backref.refs = backs;\r
-           }\r
-         }\r
-       }\r
-       else\r
-         PUNFETCH;\r
+          if (r < 0) return r;\r
+\r
+          if (num_type != IS_NOT_NUM) {\r
+            if (num_type == IS_REL_NUM) {\r
+              back_num = backref_rel_to_abs(back_num, env);\r
+            }\r
+            if (back_num <= 0)\r
+              return ONIGERR_INVALID_BACKREF;\r
+\r
+            if (IS_SYNTAX_BV(syn, ONIG_SYN_STRICT_CHECK_BACKREF)) {\r
+              if (back_num > env->num_mem ||\r
+                  IS_NULL(SCANENV_MEMENV(env)[back_num].node))\r
+                return ONIGERR_INVALID_BACKREF;\r
+            }\r
+            tok->type = TK_BACKREF;\r
+            tok->u.backref.by_name = 0;\r
+            tok->u.backref.num  = 1;\r
+            tok->u.backref.ref1 = back_num;\r
+          }\r
+          else {\r
+            num = onig_name_to_group_numbers(env->reg, prev, name_end, &backs);\r
+            if (num <= 0) {\r
+              onig_scan_env_set_error_string(env,\r
+                        ONIGERR_UNDEFINED_NAME_REFERENCE, prev, name_end);\r
+              return ONIGERR_UNDEFINED_NAME_REFERENCE;\r
+            }\r
+            if (IS_SYNTAX_BV(syn, ONIG_SYN_STRICT_CHECK_BACKREF)) {\r
+              int i;\r
+              for (i = 0; i < num; i++) {\r
+                if (backs[i] > env->num_mem ||\r
+                    IS_NULL(SCANENV_MEMENV(env)[backs[i]].node))\r
+                  return ONIGERR_INVALID_BACKREF;\r
+              }\r
+            }\r
+\r
+            tok->type = TK_BACKREF;\r
+            tok->u.backref.by_name = 1;\r
+            if (num == 1) {\r
+              tok->u.backref.num  = 1;\r
+              tok->u.backref.ref1 = backs[0];\r
+            }\r
+            else {\r
+              tok->u.backref.num  = num;\r
+              tok->u.backref.refs = backs;\r
+            }\r
+          }\r
+        }\r
+        else\r
+          PUNFETCH;\r
       }\r
       break;\r
-#endif\r
 \r
-#ifdef USE_SUBEXP_CALL\r
+#ifdef USE_CALL\r
     case 'g':\r
-      if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_G_SUBEXP_CALL)) {\r
-       PFETCH(c);\r
-       if (c == '<' || c == '\'') {\r
-         int gnum;\r
-         UChar* name_end;\r
-\r
-         prev = p;\r
-         r = fetch_name((OnigCodePoint )c, &p, end, &name_end, env, &gnum, 1);\r
-         if (r < 0) return r;\r
-\r
-         tok->type = TK_CALL;\r
-         tok->u.call.name     = prev;\r
-         tok->u.call.name_end = name_end;\r
-         tok->u.call.gnum     = gnum;\r
-       }\r
-       else\r
-         PUNFETCH;\r
+      if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_G_SUBEXP_CALL)) {\r
+        PFETCH(c);\r
+        if (c == '<' || c == '\'') {\r
+          int gnum;\r
+          UChar* name_end;\r
+          enum REF_NUM num_type;\r
+\r
+          prev = p;\r
+          r = fetch_name((OnigCodePoint )c, &p, end, &name_end, env,\r
+                         &gnum, &num_type, 1);\r
+          if (r < 0) return r;\r
+\r
+          if (num_type != IS_NOT_NUM) {\r
+            if (num_type == IS_REL_NUM) {\r
+              gnum = backref_rel_to_abs(gnum, env);\r
+              if (gnum < 0) {\r
+                onig_scan_env_set_error_string(env, ONIGERR_UNDEFINED_NAME_REFERENCE,\r
+                                               prev, name_end);\r
+                return ONIGERR_UNDEFINED_GROUP_REFERENCE;\r
+              }\r
+            }\r
+            tok->u.call.by_number = 1;\r
+            tok->u.call.gnum      = gnum;\r
+          }\r
+          else {\r
+            tok->u.call.by_number = 0;\r
+            tok->u.call.gnum      = 0;\r
+          }\r
+\r
+          tok->type = TK_CALL;\r
+          tok->u.call.name     = prev;\r
+          tok->u.call.name_end = name_end;\r
+        }\r
+        else\r
+          PUNFETCH;\r
       }\r
       break;\r
 #endif\r
 \r
     case 'Q':\r
       if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE)) {\r
-       tok->type = TK_QUOTE_OPEN;\r
+        tok->type = TK_QUOTE_OPEN;\r
       }\r
       break;\r
 \r
     case 'p':\r
     case 'P':\r
-      if (PPEEK_IS('{') &&\r
-         IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY)) {\r
-       PINC;\r
-       tok->type = TK_CHAR_PROPERTY;\r
-       tok->u.prop.not = (c == 'P' ? 1 : 0);\r
-\r
-       if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT)) {\r
-         PFETCH(c);\r
-         if (c == '^') {\r
-           tok->u.prop.not = (tok->u.prop.not == 0 ? 1 : 0);\r
-         }\r
-         else\r
-           PUNFETCH;\r
-       }\r
+      if (!PEND && PPEEK_IS('{') &&\r
+          IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY)) {\r
+        PINC;\r
+        tok->type = TK_CHAR_PROPERTY;\r
+        tok->u.prop.not = (c == 'P' ? 1 : 0);\r
+\r
+        if (!PEND &&\r
+            IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT)) {\r
+          PFETCH(c);\r
+          if (c == '^') {\r
+            tok->u.prop.not = (tok->u.prop.not == 0 ? 1 : 0);\r
+          }\r
+          else\r
+            PUNFETCH;\r
+        }\r
       }\r
       break;\r
 \r
     default:\r
-      PUNFETCH;\r
-      num = fetch_escaped_value(&p, end, env);\r
-      if (num < 0) return num;\r
-      /* set_raw: */\r
-      if (tok->u.c != num) {\r
-       tok->type = TK_CODE_POINT;\r
-       tok->u.code = (OnigCodePoint )num;\r
-      }\r
-      else { /* string */\r
-       p = tok->backp + enclen(enc, tok->backp);\r
+      {\r
+        OnigCodePoint c2;\r
+\r
+        PUNFETCH;\r
+        num = fetch_escaped_value(&p, end, env, &c2);\r
+        if (num < 0) return num;\r
+        /* set_raw: */\r
+        if (tok->u.c != c2) {\r
+          tok->type = TK_CODE_POINT;\r
+          tok->u.code = c2;\r
+        }\r
+        else { /* string */\r
+          p = tok->backp + enclen(enc, tok->backp);\r
+        }\r
       }\r
       break;\r
     }\r
@@ -3599,18 +5422,18 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
 \r
 #ifdef USE_VARIABLE_META_CHARS\r
     if ((c != ONIG_INEFFECTIVE_META_CHAR) &&\r
-       IS_SYNTAX_OP(syn, ONIG_SYN_OP_VARIABLE_META_CHARACTERS)) {\r
+        IS_SYNTAX_OP(syn, ONIG_SYN_OP_VARIABLE_META_CHARACTERS)) {\r
       if (c == MC_ANYCHAR(syn))\r
-       goto any_char;\r
+        goto any_char;\r
       else if (c == MC_ANYTIME(syn))\r
-       goto anytime;\r
+        goto anytime;\r
       else if (c == MC_ZERO_OR_ONE_TIME(syn))\r
-       goto zero_or_one_time;\r
+        goto zero_or_one_time;\r
       else if (c == MC_ONE_OR_MORE_TIME(syn))\r
-       goto one_or_more_time;\r
+        goto one_or_more_time;\r
       else if (c == MC_ANYCHAR_ANYTIME(syn)) {\r
-       tok->type = TK_ANYCHAR_ANYTIME;\r
-       goto out;\r
+        tok->type = TK_ANYCHAR_ANYTIME;\r
+        goto out;\r
       }\r
     }\r
 #endif\r
@@ -3663,10 +5486,10 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
       if (r < 0) return r;  /* error */\r
       if (r == 0) goto greedy_check;\r
       else if (r == 2) { /* {n} */\r
-       if (IS_SYNTAX_BV(syn, ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY))\r
-         goto possessive_check;\r
+        if (IS_SYNTAX_BV(syn, ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY))\r
+          goto possessive_check;\r
 \r
-       goto greedy_check;\r
+        goto greedy_check;\r
       }\r
       /* r == 1 : normal char */\r
       break;\r
@@ -3677,23 +5500,97 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
       break;\r
 \r
     case '(':\r
-      if (PPEEK_IS('?') &&\r
+      if (!PEND && PPEEK_IS('?') &&\r
           IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_QMARK_GROUP_EFFECT)) {\r
         PINC;\r
-        if (PPEEK_IS('#')) {\r
-          PFETCH(c);\r
-          while (1) {\r
-            if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+        if (! PEND) {\r
+          c = PPEEK;\r
+          if (c == '#') {\r
             PFETCH(c);\r
-            if (c == MC_ESC(syn)) {\r
-              if (!PEND) PFETCH(c);\r
+            while (1) {\r
+              if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+              PFETCH(c);\r
+              if (c == MC_ESC(syn)) {\r
+                if (! PEND) PFETCH(c);\r
+              }\r
+              else {\r
+                if (c == ')') break;\r
+              }\r
             }\r
-            else {\r
-              if (c == ')') break;\r
+            goto start;\r
+          }\r
+          else if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_QMARK_PERL_SUBEXP_CALL)) {\r
+            int gnum;\r
+            UChar* name;\r
+            UChar* name_end;\r
+            enum REF_NUM num_type;\r
+\r
+            switch (c) {\r
+            case '&':\r
+              {\r
+                PINC;\r
+                name = p;\r
+                r = fetch_name((OnigCodePoint )'(', &p, end, &name_end, env, &gnum,\r
+                               &num_type, 0);\r
+                if (r < 0) return r;\r
+\r
+                tok->type = TK_CALL;\r
+                tok->u.call.by_number = 0;\r
+                tok->u.call.gnum      = 0;\r
+                tok->u.call.name      = name;\r
+                tok->u.call.name_end  = name_end;\r
+              }\r
+              break;\r
+\r
+            case 'R':\r
+              tok->type = TK_CALL;\r
+              tok->u.call.by_number = 1;\r
+              tok->u.call.gnum      = 0;\r
+              tok->u.call.name      = p;\r
+              PINC;\r
+              if (! PPEEK_IS(')')) return ONIGERR_INVALID_GROUP_NAME;\r
+              tok->u.call.name_end  = p;\r
+              break;\r
+\r
+            case '-':\r
+            case '+':\r
+              goto lparen_qmark_num;\r
+              break;\r
+            default:\r
+              if (! ONIGENC_IS_CODE_DIGIT(enc, c)) goto lparen_qmark_end;\r
+\r
+            lparen_qmark_num:\r
+              {\r
+                name = p;\r
+                r = fetch_name((OnigCodePoint )'(', &p, end, &name_end, env,\r
+                               &gnum, &num_type, 1);\r
+                if (r < 0) return r;\r
+\r
+                if (num_type == IS_NOT_NUM) {\r
+                  return ONIGERR_INVALID_GROUP_NAME;\r
+                }\r
+                else {\r
+                  if (num_type == IS_REL_NUM) {\r
+                    gnum = backref_rel_to_abs(gnum, env);\r
+                    if (gnum < 0) {\r
+                      onig_scan_env_set_error_string(env,\r
+                             ONIGERR_UNDEFINED_NAME_REFERENCE, name, name_end);\r
+                      return ONIGERR_UNDEFINED_GROUP_REFERENCE;\r
+                    }\r
+                  }\r
+                  tok->u.call.by_number = 1;\r
+                  tok->u.call.gnum      = gnum;\r
+                }\r
+\r
+                tok->type = TK_CALL;\r
+                tok->u.call.name     = name;\r
+                tok->u.call.name_end = name_end;\r
+              }\r
+              break;\r
             }\r
           }\r
-          goto start;\r
         }\r
+      lparen_qmark_end:\r
         PUNFETCH;\r
       }\r
 \r
@@ -3709,15 +5606,15 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
     case '^':\r
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LINE_ANCHOR)) break;\r
       tok->type = TK_ANCHOR;\r
-      tok->u.subtype = (IS_SINGLELINE(env->option)\r
-                       ? ANCHOR_BEGIN_BUF : ANCHOR_BEGIN_LINE);\r
+      tok->u.subtype = (IS_SINGLELINE(env->options)\r
+                        ? ANCHOR_BEGIN_BUF : ANCHOR_BEGIN_LINE);\r
       break;\r
 \r
     case '$':\r
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LINE_ANCHOR)) break;\r
       tok->type = TK_ANCHOR;\r
-      tok->u.subtype = (IS_SINGLELINE(env->option)\r
-                       ? ANCHOR_SEMI_END_BUF : ANCHOR_END_LINE);\r
+      tok->u.subtype = (IS_SINGLELINE(env->options)\r
+                        ? ANCHOR_SEMI_END_BUF : ANCHOR_END_LINE);\r
       break;\r
 \r
     case '[':\r
@@ -3727,24 +5624,24 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
 \r
     case ']':\r
       if (*src > env->pattern)   /* /].../ is allowed. */\r
-       CLOSE_BRACKET_WITHOUT_ESC_WARN(env, (UChar* )"]");\r
+        CLOSE_BRACKET_WITHOUT_ESC_WARN(env, (UChar* )"]");\r
       break;\r
 \r
     case '#':\r
-      if (IS_EXTEND(env->option)) {\r
-       while (!PEND) {\r
-         PFETCH(c);\r
-         if (ONIGENC_IS_CODE_NEWLINE(enc, c))\r
-           break;\r
-       }\r
-       goto start;\r
-       break;\r
+      if (IS_EXTEND(env->options)) {\r
+        while (!PEND) {\r
+          PFETCH(c);\r
+          if (ONIGENC_IS_CODE_NEWLINE(enc, c))\r
+            break;\r
+        }\r
+        goto start;\r
+        break;\r
       }\r
       break;\r
 \r
     case ' ': case '\t': case '\n': case '\r': case '\f':\r
-      if (IS_EXTEND(env->option))\r
-       goto start;\r
+      if (IS_EXTEND(env->options))\r
+        goto start;\r
       break;\r
 \r
     default:\r
@@ -3762,8 +5659,8 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
 \r
 static int\r
 add_ctype_to_cc_by_range(CClassNode* cc, int ctype ARG_UNUSED, int not,\r
-                        OnigEncoding enc ARG_UNUSED,\r
-                         OnigCodePoint sb_out, const OnigCodePoint mbr[])\r
+                         OnigEncoding enc ARG_UNUSED, OnigCodePoint sb_out,\r
+                         const OnigCodePoint mbr[])\r
 {\r
   int i, r;\r
   OnigCodePoint j;\r
@@ -3774,17 +5671,16 @@ add_ctype_to_cc_by_range(CClassNode* cc, int ctype ARG_UNUSED, int not,
     for (i = 0; i < n; i++) {\r
       for (j  = ONIGENC_CODE_RANGE_FROM(mbr, i);\r
            j <= ONIGENC_CODE_RANGE_TO(mbr, i); j++) {\r
-       if (j >= sb_out) {\r
-         if (j == ONIGENC_CODE_RANGE_TO(mbr, i)) i++;\r
-         else if (j > ONIGENC_CODE_RANGE_FROM(mbr, i)) {\r
-           r = add_code_range_to_buf(&(cc->mbuf), j,\r
-                                     ONIGENC_CODE_RANGE_TO(mbr, i));\r
-           if (r != 0) return r;\r
-           i++;\r
-         }\r
-\r
-         goto sb_end;\r
-       }\r
+        if (j >= sb_out) {\r
+          if (j > ONIGENC_CODE_RANGE_FROM(mbr, i)) {\r
+            r = add_code_range_to_buf(&(cc->mbuf), j,\r
+                                      ONIGENC_CODE_RANGE_TO(mbr, i));\r
+            if (r != 0) return r;\r
+            i++;\r
+          }\r
+\r
+          goto sb_end;\r
+        }\r
         BITSET_SET_BIT(cc->bs, j);\r
       }\r
     }\r
@@ -3801,12 +5697,11 @@ add_ctype_to_cc_by_range(CClassNode* cc, int ctype ARG_UNUSED, int not,
     OnigCodePoint prev = 0;\r
 \r
     for (i = 0; i < n; i++) {\r
-      for (j = prev;\r
-          j < ONIGENC_CODE_RANGE_FROM(mbr, i); j++) {\r
-       if (j >= sb_out) {\r
-         goto sb_end2;\r
-       }\r
-       BITSET_SET_BIT(cc->bs, j);\r
+      for (j = prev; j < ONIGENC_CODE_RANGE_FROM(mbr, i); j++) {\r
+        if (j >= sb_out) {\r
+          goto sb_end2;\r
+        }\r
+        BITSET_SET_BIT(cc->bs, j);\r
       }\r
       prev = ONIGENC_CODE_RANGE_TO(mbr, i) + 1;\r
     }\r
@@ -3819,38 +5714,145 @@ add_ctype_to_cc_by_range(CClassNode* cc, int ctype ARG_UNUSED, int not,
 \r
     for (i = 0; i < n; i++) {\r
       if (prev < ONIGENC_CODE_RANGE_FROM(mbr, i)) {\r
-       r = add_code_range_to_buf(&(cc->mbuf), prev,\r
+        r = add_code_range_to_buf(&(cc->mbuf), prev,\r
                                   ONIGENC_CODE_RANGE_FROM(mbr, i) - 1);\r
-       if (r != 0) return r;\r
+        if (r != 0) return r;\r
       }\r
       prev = ONIGENC_CODE_RANGE_TO(mbr, i) + 1;\r
+      if (prev == 0) goto end;\r
+    }\r
+\r
+    r = add_code_range_to_buf(&(cc->mbuf), prev, MAX_CODE_POINT);\r
+    if (r != 0) return r;\r
+  }\r
+\r
+ end:\r
+  return 0;\r
+}\r
+\r
+static int\r
+add_ctype_to_cc_by_range_limit(CClassNode* cc, int ctype ARG_UNUSED, int not,\r
+                               OnigEncoding enc ARG_UNUSED,\r
+                               OnigCodePoint sb_out,\r
+                               const OnigCodePoint mbr[], OnigCodePoint limit)\r
+{\r
+  int i, r;\r
+  OnigCodePoint j;\r
+  OnigCodePoint from;\r
+  OnigCodePoint to;\r
+\r
+  int n = ONIGENC_CODE_RANGE_NUM(mbr);\r
+\r
+  if (not == 0) {\r
+    for (i = 0; i < n; i++) {\r
+      for (j  = ONIGENC_CODE_RANGE_FROM(mbr, i);\r
+           j <= ONIGENC_CODE_RANGE_TO(mbr, i); j++) {\r
+        if (j > limit) goto end;\r
+        if (j >= sb_out) {\r
+          if (j > ONIGENC_CODE_RANGE_FROM(mbr, i)) {\r
+            to = ONIGENC_CODE_RANGE_TO(mbr, i);\r
+            if (to > limit) to = limit;\r
+            r = add_code_range_to_buf(&(cc->mbuf), j, to);\r
+            if (r != 0) return r;\r
+            i++;\r
+          }\r
+\r
+          goto sb_end;\r
+        }\r
+        BITSET_SET_BIT(cc->bs, j);\r
+      }\r
     }\r
-    if (prev < 0x7fffffff) {\r
-      r = add_code_range_to_buf(&(cc->mbuf), prev, 0x7fffffff);\r
+\r
+  sb_end:\r
+    for ( ; i < n; i++) {\r
+      from = ONIGENC_CODE_RANGE_FROM(mbr, i);\r
+      to   = ONIGENC_CODE_RANGE_TO(mbr, i);\r
+      if (from > limit) break;\r
+      if (to   > limit) to = limit;\r
+      r = add_code_range_to_buf(&(cc->mbuf), from, to);\r
       if (r != 0) return r;\r
     }\r
   }\r
+  else {\r
+    OnigCodePoint prev = 0;\r
+\r
+    for (i = 0; i < n; i++) {\r
+      from = ONIGENC_CODE_RANGE_FROM(mbr, i);\r
+      if (from > limit) {\r
+        for (j = prev; j < sb_out; j++) {\r
+          BITSET_SET_BIT(cc->bs, j);\r
+        }\r
+        goto sb_end2;\r
+      }\r
+      for (j = prev; j < from; j++) {\r
+        if (j >= sb_out) goto sb_end2;\r
+        BITSET_SET_BIT(cc->bs, j);\r
+      }\r
+      prev = ONIGENC_CODE_RANGE_TO(mbr, i);\r
+      if (prev > limit) prev = limit;\r
+      prev++;\r
+      if (prev == 0) goto end;\r
+    }\r
+    for (j = prev; j < sb_out; j++) {\r
+      BITSET_SET_BIT(cc->bs, j);\r
+    }\r
+\r
+  sb_end2:\r
+    prev = sb_out;\r
+\r
+    for (i = 0; i < n; i++) {\r
+      from = ONIGENC_CODE_RANGE_FROM(mbr, i);\r
+      if (from > limit) goto last;\r
+\r
+      if (prev < from) {\r
+        r = add_code_range_to_buf(&(cc->mbuf), prev, from - 1);\r
+        if (r != 0) return r;\r
+      }\r
+      prev = ONIGENC_CODE_RANGE_TO(mbr, i);\r
+      if (prev > limit) prev = limit;\r
+      prev++;\r
+      if (prev == 0) goto end;\r
+    }\r
+\r
+  last:\r
+    r = add_code_range_to_buf(&(cc->mbuf), prev, MAX_CODE_POINT);\r
+    if (r != 0) return r;\r
+  }\r
 \r
+ end:\r
   return 0;\r
 }\r
 \r
 static int\r
 add_ctype_to_cc(CClassNode* cc, int ctype, int not, ScanEnv* env)\r
 {\r
+#define ASCII_LIMIT    127\r
+\r
   int c, r;\r
+  int ascii_mode;\r
   const OnigCodePoint *ranges;\r
+  OnigCodePoint limit;\r
   OnigCodePoint sb_out;\r
   OnigEncoding enc = env->enc;\r
 \r
+  ascii_mode = IS_ASCII_MODE_CTYPE_OPTION(ctype, env->options);\r
+\r
   r = ONIGENC_GET_CTYPE_CODE_RANGE(enc, ctype, &sb_out, &ranges);\r
   if (r == 0) {\r
-    return add_ctype_to_cc_by_range(cc, ctype, not, env->enc, sb_out, ranges);\r
+    if (ascii_mode == 0)\r
+      r = add_ctype_to_cc_by_range(cc, ctype, not, env->enc, sb_out, ranges);\r
+    else\r
+      r = add_ctype_to_cc_by_range_limit(cc, ctype, not, env->enc, sb_out,\r
+                                         ranges, ASCII_LIMIT);\r
+    return r;\r
   }\r
   else if (r != ONIG_NO_SUPPORT_CONFIG) {\r
     return r;\r
   }\r
 \r
   r = 0;\r
+  limit = ascii_mode ? ASCII_LIMIT : SINGLE_BYTE_SIZE;\r
+\r
   switch (ctype) {\r
   case ONIGENC_CTYPE_ALPHA:\r
   case ONIGENC_CTYPE_BLANK:\r
@@ -3864,50 +5866,45 @@ add_ctype_to_cc(CClassNode* cc, int ctype, int not, ScanEnv* env)
   case ONIGENC_CTYPE_ASCII:\r
   case ONIGENC_CTYPE_ALNUM:\r
     if (not != 0) {\r
-      for (c = 0; c < SINGLE_BYTE_SIZE; c++) {\r
-       if (! ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))\r
-         BITSET_SET_BIT(cc->bs, c);\r
+      for (c = 0; c < (int )limit; c++) {\r
+        if (! ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))\r
+          BITSET_SET_BIT(cc->bs, c);\r
+      }\r
+      for (c = limit; c < SINGLE_BYTE_SIZE; c++) {\r
+        BITSET_SET_BIT(cc->bs, c);\r
       }\r
+\r
       ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);\r
     }\r
     else {\r
-      for (c = 0; c < SINGLE_BYTE_SIZE; c++) {\r
-       if (ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))\r
-         BITSET_SET_BIT(cc->bs, c);\r
+      for (c = 0; c < (int )limit; c++) {\r
+        if (ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))\r
+          BITSET_SET_BIT(cc->bs, c);\r
       }\r
     }\r
     break;\r
 \r
   case ONIGENC_CTYPE_GRAPH:\r
   case ONIGENC_CTYPE_PRINT:\r
+  case ONIGENC_CTYPE_WORD:\r
     if (not != 0) {\r
-      for (c = 0; c < SINGLE_BYTE_SIZE; c++) {\r
-       if (! ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))\r
-         BITSET_SET_BIT(cc->bs, c);\r
-      }\r
-    }\r
-    else {\r
-      for (c = 0; c < SINGLE_BYTE_SIZE; c++) {\r
-       if (ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))\r
-         BITSET_SET_BIT(cc->bs, c);\r
+      for (c = 0; c < (int )limit; c++) {\r
+        if (ONIGENC_CODE_TO_MBCLEN(enc, c) > 0 /* check invalid code point */\r
+            && ! ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))\r
+          BITSET_SET_BIT(cc->bs, c);\r
       }\r
-      ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);\r
-    }\r
-    break;\r
-\r
-  case ONIGENC_CTYPE_WORD:\r
-    if (not == 0) {\r
-      for (c = 0; c < SINGLE_BYTE_SIZE; c++) {\r
-       if (IS_CODE_SB_WORD(enc, c)) BITSET_SET_BIT(cc->bs, c);\r
+      for (c = limit; c < SINGLE_BYTE_SIZE; c++) {\r
+        if (ONIGENC_CODE_TO_MBCLEN(enc, c) > 0)\r
+          BITSET_SET_BIT(cc->bs, c);\r
       }\r
-      ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);\r
     }\r
     else {\r
-      for (c = 0; c < SINGLE_BYTE_SIZE; c++) {\r
-        if ((ONIGENC_CODE_TO_MBCLEN(enc, c) > 0) /* check invalid code point */\r
-           && ! ONIGENC_IS_CODE_WORD(enc, c))\r
-         BITSET_SET_BIT(cc->bs, c);\r
+      for (c = 0; c < (int )limit; c++) {\r
+        if (ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))\r
+          BITSET_SET_BIT(cc->bs, c);\r
       }\r
+      if (ascii_mode == 0)\r
+        ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);\r
     }\r
     break;\r
 \r
@@ -4025,8 +6022,7 @@ fetch_char_property_to_ctype(UChar** src, UChar* end, ScanEnv* env)
 }\r
 \r
 static int\r
-parse_char_property(Node** np, OnigToken* tok, UChar** src, UChar* end,\r
-                   ScanEnv* env)\r
+parse_char_property(Node** np, OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)\r
 {\r
   int r, ctype;\r
   CClassNode* cc;\r
@@ -4036,7 +6032,7 @@ parse_char_property(Node** np, OnigToken* tok, UChar** src, UChar* end,
 \r
   *np = node_new_cclass();\r
   CHECK_NULL_RETURN_MEMERR(*np);\r
-  cc = NCCLASS(*np);\r
+  cc = CCLASS_(*np);\r
   r = add_ctype_to_cc(cc, ctype, 0, env);\r
   if (r != 0) return r;\r
   if (tok->u.prop.not != 0) NCCLASS_SET_NOT(cc);\r
@@ -4060,7 +6056,7 @@ enum CCVALTYPE {
 \r
 static int\r
 next_state_class(CClassNode* cc, OnigCodePoint* vs, enum CCVALTYPE* type,\r
-                enum CCSTATE* state, ScanEnv* env)\r
+                 enum CCSTATE* state, ScanEnv* env)\r
 {\r
   int r;\r
 \r
@@ -4082,19 +6078,23 @@ next_state_class(CClassNode* cc, OnigCodePoint* vs, enum CCVALTYPE* type,
 }\r
 \r
 static int\r
-next_state_val(CClassNode* cc, OnigCodePoint *vs, OnigCodePoint v,\r
-              int* vs_israw, int v_israw,\r
-              enum CCVALTYPE intype, enum CCVALTYPE* type,\r
-              enum CCSTATE* state, ScanEnv* env)\r
+next_state_val(CClassNode* cc, OnigCodePoint *from, OnigCodePoint to,\r
+               int* from_israw, int to_israw,\r
+               enum CCVALTYPE intype, enum CCVALTYPE* type,\r
+               enum CCSTATE* state, ScanEnv* env)\r
 {\r
   int r;\r
 \r
   switch (*state) {\r
   case CCS_VALUE:\r
-    if (*type == CCV_SB)\r
-      BITSET_SET_BIT(cc->bs, (int )(*vs));\r
+    if (*type == CCV_SB) {\r
+      if (*from > 0xff)\r
+          return ONIGERR_INVALID_CODE_POINT_VALUE;\r
+\r
+      BITSET_SET_BIT(cc->bs, (int )(*from));\r
+    }\r
     else if (*type == CCV_CODE_POINT) {\r
-      r = add_code_range(&(cc->mbuf), env, *vs, *vs);\r
+      r = add_code_range(&(cc->mbuf), env, *from, *from);\r
       if (r < 0) return r;\r
     }\r
     break;\r
@@ -4102,40 +6102,32 @@ next_state_val(CClassNode* cc, OnigCodePoint *vs, OnigCodePoint v,
   case CCS_RANGE:\r
     if (intype == *type) {\r
       if (intype == CCV_SB) {\r
-        if (*vs > 0xff || v > 0xff)\r
+        if (*from > 0xff || to > 0xff)\r
           return ONIGERR_INVALID_CODE_POINT_VALUE;\r
 \r
-       if (*vs > v) {\r
-         if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC))\r
-           goto ccs_range_end;\r
-         else\r
-           return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS;\r
-       }\r
-       bitset_set_range(cc->bs, (int )*vs, (int )v);\r
+        if (*from > to) {\r
+          if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC))\r
+            goto ccs_range_end;\r
+          else\r
+            return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS;\r
+        }\r
+        bitset_set_range(cc->bs, (int )*from, (int )to);\r
       }\r
       else {\r
-       r = add_code_range(&(cc->mbuf), env, *vs, v);\r
-       if (r < 0) return r;\r
+        r = add_code_range(&(cc->mbuf), env, *from, to);\r
+        if (r < 0) return r;\r
       }\r
     }\r
     else {\r
-#if 0\r
-      if (intype == CCV_CODE_POINT && *type == CCV_SB) {\r
-#endif\r
-       if (*vs > v) {\r
-         if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC))\r
-           goto ccs_range_end;\r
-         else\r
-           return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS;\r
-       }\r
-       bitset_set_range(cc->bs, (int )*vs, (int )(v < 0xff ? v : 0xff));\r
-       r = add_code_range(&(cc->mbuf), env, (OnigCodePoint )*vs, v);\r
-       if (r < 0) return r;\r
-#if 0\r
+      if (*from > to) {\r
+        if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC))\r
+          goto ccs_range_end;\r
+        else\r
+          return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS;\r
       }\r
-      else\r
-       return ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE;\r
-#endif\r
+      bitset_set_range(cc->bs, (int )*from, (int )(to < 0xff ? to : 0xff));\r
+      r = add_code_range(&(cc->mbuf), env, (OnigCodePoint )*from, to);\r
+      if (r < 0) return r;\r
     }\r
   ccs_range_end:\r
     *state = CCS_COMPLETE;\r
@@ -4150,15 +6142,15 @@ next_state_val(CClassNode* cc, OnigCodePoint *vs, OnigCodePoint v,
     break;\r
   }\r
 \r
-  *vs_israw = v_israw;\r
-  *vs       = v;\r
-  *type     = intype;\r
+  *from_israw = to_israw;\r
+  *from       = to;\r
+  *type       = intype;\r
   return 0;\r
 }\r
 \r
 static int\r
 code_exist_check(OnigCodePoint c, UChar* from, UChar* end, int ignore_escaped,\r
-                ScanEnv* env)\r
+                 ScanEnv* env)\r
 {\r
   int in_esc;\r
   OnigCodePoint code;\r
@@ -4180,8 +6172,7 @@ code_exist_check(OnigCodePoint c, UChar* from, UChar* end, int ignore_escaped,
 }\r
 \r
 static int\r
-parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end,\r
-                ScanEnv* env)\r
+parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)\r
 {\r
   int r, neg, len, fetched, and_start;\r
   OnigCodePoint v, vs;\r
@@ -4194,8 +6185,11 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end,
   enum CCVALTYPE val_type, in_type;\r
   int val_israw, in_israw;\r
 \r
-  prev_cc = (CClassNode* )NULL;\r
   *np = NULL_NODE;\r
+  env->parse_depth++;\r
+  if (env->parse_depth > ParseDepthLimit)\r
+    return ONIGERR_PARSE_DEPTH_LIMIT_OVER;\r
+  prev_cc = (CClassNode* )NULL;\r
   r = fetch_token_in_cc(tok, src, end, env);\r
   if (r == TK_CHAR && tok->u.c == '^' && tok->escaped == 0) {\r
     neg = 1;\r
@@ -4217,7 +6211,7 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end,
 \r
   *np = node = node_new_cclass();\r
   CHECK_NULL_RETURN_MEMERR(node);\r
-  cc = NCCLASS(node);\r
+  cc = CCLASS_(node);\r
 \r
   and_start = 0;\r
   state = CCS_START;\r
@@ -4226,17 +6220,18 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end,
     fetched = 0;\r
     switch (r) {\r
     case TK_CHAR:\r
+    any_char_in:\r
       len = ONIGENC_CODE_TO_MBCLEN(env->enc, tok->u.c);\r
       if (len > 1) {\r
-       in_type = CCV_CODE_POINT;\r
+        in_type = CCV_CODE_POINT;\r
       }\r
       else if (len < 0) {\r
-       r = len;\r
-       goto err;\r
+        r = len;\r
+        goto err;\r
       }\r
       else {\r
-      sb_char:\r
-       in_type = CCV_SB;\r
+        /* sb_char: */\r
+        in_type = CCV_SB;\r
       }\r
       v = (OnigCodePoint )tok->u.c;\r
       in_israw = 0;\r
@@ -4246,403 +6241,1133 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end,
     case TK_RAW_BYTE:\r
       /* tok->base != 0 : octal or hexadec. */\r
       if (! ONIGENC_IS_SINGLEBYTE(env->enc) && tok->base != 0) {\r
-       UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN];\r
-       UChar* bufe = buf + ONIGENC_CODE_TO_MBC_MAXLEN;\r
-       UChar* psave = p;\r
-       int i, base = tok->base;\r
-\r
-       buf[0] = (UChar)tok->u.c;\r
-       for (i = 1; i < ONIGENC_MBC_MAXLEN(env->enc); i++) {\r
-         r = fetch_token_in_cc(tok, &p, end, env);\r
-         if (r < 0) goto err;\r
-         if (r != TK_RAW_BYTE || tok->base != base) {\r
-           fetched = 1;\r
-           break;\r
-         }\r
-         buf[i] = (UChar)tok->u.c;\r
-       }\r
-\r
-       if (i < ONIGENC_MBC_MINLEN(env->enc)) {\r
-         r = ONIGERR_TOO_SHORT_MULTI_BYTE_STRING;\r
-         goto err;\r
-       }\r
-\r
-       len = enclen(env->enc, buf);\r
-       if (i < len) {\r
-         r = ONIGERR_TOO_SHORT_MULTI_BYTE_STRING;\r
-         goto err;\r
-       }\r
-       else if (i > len) { /* fetch back */\r
-         p = psave;\r
-         for (i = 1; i < len; i++) {\r
-           r = fetch_token_in_cc(tok, &p, end, env);\r
-         }\r
-         fetched = 0;\r
-       }\r
-\r
-       if (i == 1) {\r
-         v = (OnigCodePoint )buf[0];\r
-         goto raw_single;\r
-       }\r
-       else {\r
-         v = ONIGENC_MBC_TO_CODE(env->enc, buf, bufe);\r
-         in_type = CCV_CODE_POINT;\r
-       }\r
+        UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN];\r
+        UChar* bufe = buf + ONIGENC_CODE_TO_MBC_MAXLEN;\r
+        UChar* psave = p;\r
+        int i, base = tok->base;\r
+\r
+        buf[0] = tok->u.c;\r
+        for (i = 1; i < ONIGENC_MBC_MAXLEN(env->enc); i++) {\r
+          r = fetch_token_in_cc(tok, &p, end, env);\r
+          if (r < 0) goto err;\r
+          if (r != TK_RAW_BYTE || tok->base != base) {\r
+            fetched = 1;\r
+            break;\r
+          }\r
+          buf[i] = tok->u.c;\r
+        }\r
+\r
+        if (i < ONIGENC_MBC_MINLEN(env->enc)) {\r
+          r = ONIGERR_TOO_SHORT_MULTI_BYTE_STRING;\r
+          goto err;\r
+        }\r
+\r
+        len = enclen(env->enc, buf);\r
+        if (i < len) {\r
+          r = ONIGERR_TOO_SHORT_MULTI_BYTE_STRING;\r
+          goto err;\r
+        }\r
+        else if (i > len) { /* fetch back */\r
+          p = psave;\r
+          for (i = 1; i < len; i++) {\r
+            r = fetch_token_in_cc(tok, &p, end, env);\r
+          }\r
+          fetched = 0;\r
+        }\r
+\r
+        if (i == 1) {\r
+          v = (OnigCodePoint )buf[0];\r
+          goto raw_single;\r
+        }\r
+        else {\r
+          v = ONIGENC_MBC_TO_CODE(env->enc, buf, bufe);\r
+          in_type = CCV_CODE_POINT;\r
+        }\r
+      }\r
+      else {\r
+        v = (OnigCodePoint )tok->u.c;\r
+      raw_single:\r
+        in_type = CCV_SB;\r
+      }\r
+      in_israw = 1;\r
+      goto val_entry2;\r
+      break;\r
+\r
+    case TK_CODE_POINT:\r
+      v = tok->u.code;\r
+      in_israw = 1;\r
+    val_entry:\r
+      len = ONIGENC_CODE_TO_MBCLEN(env->enc, v);\r
+      if (len < 0) {\r
+        r = len;\r
+        goto err;\r
+      }\r
+      in_type = (len == 1 ? CCV_SB : CCV_CODE_POINT);\r
+    val_entry2:\r
+      r = next_state_val(cc, &vs, v, &val_israw, in_israw, in_type, &val_type,\r
+                         &state, env);\r
+      if (r != 0) goto err;\r
+      break;\r
+\r
+    case TK_POSIX_BRACKET_OPEN:\r
+      r = parse_posix_bracket(cc, &p, end, env);\r
+      if (r < 0) goto err;\r
+      if (r == 1) {  /* is not POSIX bracket */\r
+        CC_ESC_WARN(env, (UChar* )"[");\r
+        p = tok->backp;\r
+        v = (OnigCodePoint )tok->u.c;\r
+        in_israw = 0;\r
+        goto val_entry;\r
+      }\r
+      goto next_class;\r
+      break;\r
+\r
+    case TK_CHAR_TYPE:\r
+      r = add_ctype_to_cc(cc, tok->u.prop.ctype, tok->u.prop.not, env);\r
+      if (r != 0) goto err;\r
+\r
+    next_class:\r
+      r = next_state_class(cc, &vs, &val_type, &state, env);\r
+      if (r != 0) goto err;\r
+      break;\r
+\r
+    case TK_CHAR_PROPERTY:\r
+      {\r
+        int ctype = fetch_char_property_to_ctype(&p, end, env);\r
+        if (ctype < 0) {\r
+          r = ctype;\r
+          goto err;\r
+        }\r
+        r = add_ctype_to_cc(cc, ctype, tok->u.prop.not, env);\r
+        if (r != 0) goto err;\r
+        goto next_class;\r
+      }\r
+      break;\r
+\r
+    case TK_CC_RANGE:\r
+      if (state == CCS_VALUE) {\r
+        r = fetch_token_in_cc(tok, &p, end, env);\r
+        if (r < 0) goto err;\r
+        fetched = 1;\r
+        if (r == TK_CC_CLOSE) { /* allow [x-] */\r
+        range_end_val:\r
+          v = (OnigCodePoint )'-';\r
+          in_israw = 0;\r
+          goto val_entry;\r
+        }\r
+        else if (r == TK_CC_AND) {\r
+          CC_ESC_WARN(env, (UChar* )"-");\r
+          goto range_end_val;\r
+        }\r
+\r
+        if (val_type == CCV_CLASS) {\r
+          r = ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS;\r
+          goto err;\r
+        }\r
+\r
+        state = CCS_RANGE;\r
+      }\r
+      else if (state == CCS_START) {\r
+        /* [-xa] is allowed */\r
+        v = (OnigCodePoint )tok->u.c;\r
+        in_israw = 0;\r
+\r
+        r = fetch_token_in_cc(tok, &p, end, env);\r
+        if (r < 0) goto err;\r
+        fetched = 1;\r
+        /* [--x] or [a&&-x] is warned. */\r
+        if (r == TK_CC_RANGE || and_start != 0)\r
+          CC_ESC_WARN(env, (UChar* )"-");\r
+\r
+        goto val_entry;\r
+      }\r
+      else if (state == CCS_RANGE) {\r
+        CC_ESC_WARN(env, (UChar* )"-");\r
+        goto any_char_in;  /* [!--x] is allowed */\r
+      }\r
+      else { /* CCS_COMPLETE */\r
+        r = fetch_token_in_cc(tok, &p, end, env);\r
+        if (r < 0) goto err;\r
+        fetched = 1;\r
+        if (r == TK_CC_CLOSE) goto range_end_val; /* allow [a-b-] */\r
+        else if (r == TK_CC_AND) {\r
+          CC_ESC_WARN(env, (UChar* )"-");\r
+          goto range_end_val;\r
+        }\r
+\r
+        if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC)) {\r
+          CC_ESC_WARN(env, (UChar* )"-");\r
+          goto range_end_val;   /* [0-9-a] is allowed as [0-9\-a] */\r
+        }\r
+        r = ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS;\r
+        goto err;\r
+      }\r
+      break;\r
+\r
+    case TK_CC_CC_OPEN: /* [ */\r
+      {\r
+        Node *anode;\r
+        CClassNode* acc;\r
+\r
+        r = parse_char_class(&anode, tok, &p, end, env);\r
+        if (r != 0) {\r
+          onig_node_free(anode);\r
+          goto cc_open_err;\r
+        }\r
+        acc = CCLASS_(anode);\r
+        r = or_cclass(cc, acc, env->enc);\r
+        onig_node_free(anode);\r
+\r
+      cc_open_err:\r
+        if (r != 0) goto err;\r
+      }\r
+      break;\r
+\r
+    case TK_CC_AND: /* && */\r
+      {\r
+        if (state == CCS_VALUE) {\r
+          r = next_state_val(cc, &vs, 0, &val_israw, 0, val_type,\r
+                             &val_type, &state, env);\r
+          if (r != 0) goto err;\r
+        }\r
+        /* initialize local variables */\r
+        and_start = 1;\r
+        state = CCS_START;\r
+\r
+        if (IS_NOT_NULL(prev_cc)) {\r
+          r = and_cclass(prev_cc, cc, env->enc);\r
+          if (r != 0) goto err;\r
+          bbuf_free(cc->mbuf);\r
+        }\r
+        else {\r
+          prev_cc = cc;\r
+          cc = &work_cc;\r
+        }\r
+        initialize_cclass(cc);\r
+      }\r
+      break;\r
+\r
+    case TK_EOT:\r
+      r = ONIGERR_PREMATURE_END_OF_CHAR_CLASS;\r
+      goto err;\r
+      break;\r
+    default:\r
+      r = ONIGERR_PARSER_BUG;\r
+      goto err;\r
+      break;\r
+    }\r
+\r
+    if (fetched)\r
+      r = tok->type;\r
+    else {\r
+      r = fetch_token_in_cc(tok, &p, end, env);\r
+      if (r < 0) goto err;\r
+    }\r
+  }\r
+\r
+  if (state == CCS_VALUE) {\r
+    r = next_state_val(cc, &vs, 0, &val_israw, 0, val_type,\r
+                       &val_type, &state, env);\r
+    if (r != 0) goto err;\r
+  }\r
+\r
+  if (IS_NOT_NULL(prev_cc)) {\r
+    r = and_cclass(prev_cc, cc, env->enc);\r
+    if (r != 0) goto err;\r
+    bbuf_free(cc->mbuf);\r
+    cc = prev_cc;\r
+  }\r
+\r
+  if (neg != 0)\r
+    NCCLASS_SET_NOT(cc);\r
+  else\r
+    NCCLASS_CLEAR_NOT(cc);\r
+  if (IS_NCCLASS_NOT(cc) &&\r
+      IS_SYNTAX_BV(env->syntax, ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC)) {\r
+    int is_empty = (IS_NULL(cc->mbuf) ? 1 : 0);\r
+    if (is_empty != 0)\r
+      BITSET_IS_EMPTY(cc->bs, is_empty);\r
+\r
+    if (is_empty == 0) {\r
+#define NEWLINE_CODE    0x0a\r
+\r
+      if (ONIGENC_IS_CODE_NEWLINE(env->enc, NEWLINE_CODE)) {\r
+        if (ONIGENC_CODE_TO_MBCLEN(env->enc, NEWLINE_CODE) == 1)\r
+          BITSET_SET_BIT(cc->bs, NEWLINE_CODE);\r
+        else\r
+          add_code_range(&(cc->mbuf), env, NEWLINE_CODE, NEWLINE_CODE);\r
+      }\r
+    }\r
+  }\r
+  *src = p;\r
+  env->parse_depth--;\r
+  return 0;\r
+\r
+ err:\r
+  if (cc != CCLASS_(*np))\r
+    bbuf_free(cc->mbuf);\r
+  return r;\r
+}\r
+\r
+static int parse_subexp(Node** top, OnigToken* tok, int term,\r
+                        UChar** src, UChar* end, ScanEnv* env);\r
+\r
+#ifdef USE_CALLOUT\r
+\r
+/* (?{...}[tag][+-]) (?{{...}}[tag][+-]) */\r
+static int\r
+parse_callout_of_contents(Node** np, int cterm, UChar** src, UChar* end, ScanEnv* env)\r
+{\r
+  int r;\r
+  int i;\r
+  int in;\r
+  int num;\r
+  OnigCodePoint c;\r
+  UChar* code_start;\r
+  UChar* code_end;\r
+  UChar* contents;\r
+  UChar* tag_start;\r
+  UChar* tag_end;\r
+  int brace_nest;\r
+  CalloutListEntry* e;\r
+  RegexExt* ext;\r
+  OnigEncoding enc = env->enc;\r
+  UChar* p = *src;\r
+\r
+  if (PEND) return ONIGERR_INVALID_CALLOUT_PATTERN;\r
+\r
+  brace_nest = 0;\r
+  while (PPEEK_IS('{')) {\r
+    brace_nest++;\r
+    PINC_S;\r
+    if (PEND) return ONIGERR_INVALID_CALLOUT_PATTERN;\r
+  }\r
+\r
+  in = ONIG_CALLOUT_IN_PROGRESS;\r
+  code_start = p;\r
+  while (1) {\r
+    if (PEND) return ONIGERR_INVALID_CALLOUT_PATTERN;\r
+\r
+    code_end = p;\r
+    PFETCH_S(c);\r
+    if (c == '}') {\r
+      i = brace_nest;\r
+      while (i > 0) {\r
+        if (PEND) return ONIGERR_INVALID_CALLOUT_PATTERN;\r
+        PFETCH_S(c);\r
+        if (c == '}') i--;\r
+        else break;\r
+      }\r
+      if (i == 0) break;\r
+    }\r
+  }\r
+\r
+  if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+\r
+  PFETCH_S(c);\r
+  if (c == '[') {\r
+    if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+    tag_start = p;\r
+    while (! PEND) {\r
+      if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+      tag_end = p;\r
+      PFETCH_S(c);\r
+      if (c == ']') break;\r
+    }\r
+    if (! is_allowed_callout_tag_name(enc, tag_start, tag_end))\r
+      return ONIGERR_INVALID_CALLOUT_TAG_NAME;\r
+\r
+    if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+    PFETCH_S(c);\r
+  }\r
+  else {\r
+    tag_start = tag_end = 0;\r
+  }\r
+\r
+  if (c == 'X') {\r
+    in |= ONIG_CALLOUT_IN_RETRACTION;\r
+    if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+    PFETCH_S(c);\r
+  }\r
+  else if (c == '<') {\r
+    in = ONIG_CALLOUT_IN_RETRACTION;\r
+    if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+    PFETCH_S(c);\r
+  }\r
+  else if (c == '>') { /* no needs (default) */\r
+    if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+    PFETCH_S(c);\r
+  }\r
+\r
+  if (c != cterm)\r
+    return ONIGERR_INVALID_CALLOUT_PATTERN;\r
+\r
+  r = reg_callout_list_entry(env, &num);\r
+  if (r != 0) return r;\r
+\r
+  ext = onig_get_regex_ext(env->reg);\r
+  if (IS_NULL(ext->pattern)) {\r
+    r = onig_ext_set_pattern(env->reg, env->pattern, env->pattern_end);\r
+    if (r != ONIG_NORMAL) return r;\r
+  }\r
+\r
+  if (tag_start != tag_end) {\r
+    r = callout_tag_entry(env->reg, tag_start, tag_end, num);\r
+    if (r != ONIG_NORMAL) return r;\r
+  }\r
+\r
+  contents = onigenc_strdup(enc, code_start, code_end);\r
+  CHECK_NULL_RETURN_MEMERR(contents);\r
+\r
+  r = node_new_callout(np, ONIG_CALLOUT_OF_CONTENTS, num, ONIG_NON_NAME_ID, env);\r
+  if (r != 0) {\r
+    xfree(contents);\r
+    return r;\r
+  }\r
+\r
+  e = onig_reg_callout_list_at(env->reg, num);\r
+  e->of      = ONIG_CALLOUT_OF_CONTENTS;\r
+  e->in      = in;\r
+  e->name_id = ONIG_NON_NAME_ID;\r
+  e->u.content.start = contents;\r
+  e->u.content.end   = contents + (code_end - code_start);\r
+\r
+  *src = p;\r
+  return 0;\r
+}\r
+\r
+static long\r
+parse_long(OnigEncoding enc, UChar* s, UChar* end, int sign_on, long max, long* rl)\r
+{\r
+  long v;\r
+  long d;\r
+  int flag;\r
+  UChar* p;\r
+  OnigCodePoint c;\r
+\r
+  if (s >= end) return ONIGERR_INVALID_CALLOUT_ARG;\r
+\r
+  flag = 1;\r
+  v = 0;\r
+  p = s;\r
+  while (p < end) {\r
+    c = ONIGENC_MBC_TO_CODE(enc, p, end);\r
+    p += ONIGENC_MBC_ENC_LEN(enc, p);\r
+    if (c >= '0' && c <= '9') {\r
+      d = (long )(c - '0');\r
+      if (v > (max - d) / 10)\r
+        return ONIGERR_INVALID_CALLOUT_ARG;\r
+\r
+      v = v * 10 + d;\r
+    }\r
+    else if (sign_on != 0 && (c == '-' || c == '+')) {\r
+      if (c == '-') flag = -1;\r
+    }\r
+    else\r
+      return ONIGERR_INVALID_CALLOUT_ARG;\r
+\r
+    sign_on = 0;\r
+  }\r
+\r
+  *rl = flag * v;\r
+  return ONIG_NORMAL;\r
+}\r
+\r
+static int\r
+parse_callout_args(int skip_mode, int cterm, UChar** src, UChar* end,\r
+                   unsigned int types[], OnigValue vals[], ScanEnv* env)\r
+{\r
+#define MAX_CALLOUT_ARG_BYTE_LENGTH   128\r
+\r
+  int r;\r
+  int n;\r
+  int esc;\r
+  int cn;\r
+  UChar* s;\r
+  UChar* e;\r
+  UChar* eesc;\r
+  OnigCodePoint c;\r
+  UChar* bufend;\r
+  UChar buf[MAX_CALLOUT_ARG_BYTE_LENGTH];\r
+  OnigEncoding enc = env->enc;\r
+  UChar* p = *src;\r
+\r
+  if (PEND) return ONIGERR_INVALID_CALLOUT_PATTERN;\r
+\r
+  n = 0;\r
+  while (n < ONIG_CALLOUT_MAX_ARGS_NUM) {\r
+    c   = 0;\r
+    cn  = 0;\r
+    esc = 0;\r
+    eesc = 0;\r
+    bufend = buf;\r
+    s = e = p;\r
+    while (1) {\r
+      if (PEND) return ONIGERR_INVALID_CALLOUT_PATTERN;\r
+\r
+      e = p;\r
+      PFETCH_S(c);\r
+      if (esc != 0) {\r
+        esc = 0;\r
+        if (c == '\\' || c == cterm || c == ',') {\r
+          /* */\r
+        }\r
+        else {\r
+          e = eesc;\r
+          cn++;\r
+        }\r
+        goto add_char;\r
       }\r
       else {\r
-       v = (OnigCodePoint )tok->u.c;\r
-      raw_single:\r
-       in_type = CCV_SB;\r
-      }\r
-      in_israw = 1;\r
-      goto val_entry2;\r
-      break;\r
+        if (c == '\\') {\r
+          esc = 1;\r
+          eesc = e;\r
+        }\r
+        else if (c == cterm || c == ',')\r
+          break;\r
+        else {\r
+          size_t clen;\r
 \r
-    case TK_CODE_POINT:\r
-      v = tok->u.code;\r
-      in_israw = 1;\r
-    val_entry:\r
-      len = ONIGENC_CODE_TO_MBCLEN(env->enc, v);\r
-      if (len < 0) {\r
-       r = len;\r
-       goto err;\r
-      }\r
-      in_type = (len == 1 ? CCV_SB : CCV_CODE_POINT);\r
-    val_entry2:\r
-      r = next_state_val(cc, &vs, v, &val_israw, in_israw, in_type, &val_type,\r
-                        &state, env);\r
-      if (r != 0) goto err;\r
-      break;\r
+        add_char:\r
+          if (skip_mode == 0) {\r
+            clen = p - e;\r
+            if (bufend + clen > buf + MAX_CALLOUT_ARG_BYTE_LENGTH)\r
+              return ONIGERR_INVALID_CALLOUT_ARG; /* too long argument */\r
 \r
-    case TK_POSIX_BRACKET_OPEN:\r
-      r = parse_posix_bracket(cc, &p, end, env);\r
-      if (r < 0) goto err;\r
-      if (r == 1) {  /* is not POSIX bracket */\r
-       CC_ESC_WARN(env, (UChar* )"[");\r
-       p = tok->backp;\r
-       v = (OnigCodePoint )tok->u.c;\r
-       in_israw = 0;\r
-       goto val_entry;\r
+            xmemcpy(bufend, e, clen);\r
+            bufend += clen;\r
+          }\r
+          cn++;\r
+        }\r
       }\r
-      goto next_class;\r
-      break;\r
+    }\r
 \r
-    case TK_CHAR_TYPE:\r
-      r = add_ctype_to_cc(cc, tok->u.prop.ctype, tok->u.prop.not, env);\r
-      if (r != 0) return r;\r
+    if (cn != 0) {\r
+      if (skip_mode == 0) {\r
+        if ((types[n] & ONIG_TYPE_LONG) != 0) {\r
+          int fixed = 0;\r
+          if (cn > 0) {\r
+            long rl;\r
+            r = parse_long(enc, buf, bufend, 1, LONG_MAX, &rl);\r
+            if (r == ONIG_NORMAL) {\r
+              vals[n].l = rl;\r
+              fixed = 1;\r
+              types[n] = ONIG_TYPE_LONG;\r
+            }\r
+          }\r
 \r
-    next_class:\r
-      r = next_state_class(cc, &vs, &val_type, &state, env);\r
-      if (r != 0) goto err;\r
-      break;\r
+          if (fixed == 0) {\r
+            types[n] = (types[n] & ~ONIG_TYPE_LONG);\r
+            if (types[n] == ONIG_TYPE_VOID)\r
+              return ONIGERR_INVALID_CALLOUT_ARG;\r
+          }\r
+        }\r
 \r
-    case TK_CHAR_PROPERTY:\r
-      {\r
-       int ctype;\r
+        switch (types[n]) {\r
+        case ONIG_TYPE_LONG:\r
+          break;\r
 \r
-       ctype = fetch_char_property_to_ctype(&p, end, env);\r
-       if (ctype < 0) return ctype;\r
-       r = add_ctype_to_cc(cc, ctype, tok->u.prop.not, env);\r
-       if (r != 0) return r;\r
-       goto next_class;\r
-      }\r
-      break;\r
+        case ONIG_TYPE_CHAR:\r
+          if (cn != 1) return ONIGERR_INVALID_CALLOUT_ARG;\r
+          vals[n].c = ONIGENC_MBC_TO_CODE(enc, buf, bufend);\r
+          break;\r
 \r
-    case TK_CC_RANGE:\r
-      if (state == CCS_VALUE) {\r
-       r = fetch_token_in_cc(tok, &p, end, env);\r
-       if (r < 0) goto err;\r
-       fetched = 1;\r
-       if (r == TK_CC_CLOSE) { /* allow [x-] */\r
-       range_end_val:\r
-         v = (OnigCodePoint )'-';\r
-         in_israw = 0;\r
-         goto val_entry;\r
-       }\r
-       else if (r == TK_CC_AND) {\r
-         CC_ESC_WARN(env, (UChar* )"-");\r
-         goto range_end_val;\r
-       }\r
-       state = CCS_RANGE;\r
-      }\r
-      else if (state == CCS_START) {\r
-       /* [-xa] is allowed */\r
-       v = (OnigCodePoint )tok->u.c;\r
-       in_israw = 0;\r
+        case ONIG_TYPE_STRING:\r
+          {\r
+            UChar* rs = onigenc_strdup(enc, buf, bufend);\r
+            CHECK_NULL_RETURN_MEMERR(rs);\r
+            vals[n].s.start = rs;\r
+            vals[n].s.end   = rs + (e - s);\r
+          }\r
+          break;\r
 \r
-       r = fetch_token_in_cc(tok, &p, end, env);\r
-       if (r < 0) goto err;\r
-       fetched = 1;\r
-       /* [--x] or [a&&-x] is warned. */\r
-       if (r == TK_CC_RANGE || and_start != 0)\r
-         CC_ESC_WARN(env, (UChar* )"-");\r
+        case ONIG_TYPE_TAG:\r
+          if (eesc != 0 || ! is_allowed_callout_tag_name(enc, s, e))\r
+            return ONIGERR_INVALID_CALLOUT_TAG_NAME;\r
 \r
-       goto val_entry;\r
-      }\r
-      else if (state == CCS_RANGE) {\r
-       CC_ESC_WARN(env, (UChar* )"-");\r
-       goto sb_char;  /* [!--x] is allowed */\r
-      }\r
-      else { /* CCS_COMPLETE */\r
-       r = fetch_token_in_cc(tok, &p, end, env);\r
-       if (r < 0) goto err;\r
-       fetched = 1;\r
-       if (r == TK_CC_CLOSE) goto range_end_val; /* allow [a-b-] */\r
-       else if (r == TK_CC_AND) {\r
-         CC_ESC_WARN(env, (UChar* )"-");\r
-         goto range_end_val;\r
-       }\r
-       \r
-       if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC)) {\r
-         CC_ESC_WARN(env, (UChar* )"-");\r
-         goto sb_char;   /* [0-9-a] is allowed as [0-9\-a] */\r
-       }\r
-       r = ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS;\r
-       goto err;\r
+          vals[n].s.start = s;\r
+          vals[n].s.end   = e;\r
+          break;\r
+\r
+        case ONIG_TYPE_VOID:\r
+        case ONIG_TYPE_POINTER:\r
+          return ONIGERR_PARSER_BUG;\r
+          break;\r
+        }\r
       }\r
-      break;\r
 \r
-    case TK_CC_CC_OPEN: /* [ */\r
-      {\r
-       Node *anode;\r
-       CClassNode* acc;\r
+      n++;\r
+    }\r
 \r
-       r = parse_char_class(&anode, tok, &p, end, env);\r
-       if (r != 0) goto cc_open_err;\r
-       acc = NCCLASS(anode);\r
-       r = or_cclass(cc, acc, env->enc);\r
+    if (c == cterm) break;\r
+  }\r
 \r
-       onig_node_free(anode);\r
-      cc_open_err:\r
-       if (r != 0) goto err;\r
-      }\r
-      break;\r
+  if (c != cterm) return ONIGERR_INVALID_CALLOUT_PATTERN;\r
 \r
-    case TK_CC_AND: /* && */\r
-      {\r
-       if (state == CCS_VALUE) {\r
-         r = next_state_val(cc, &vs, 0, &val_israw, 0, val_type,\r
-                            &val_type, &state, env);\r
-         if (r != 0) goto err;\r
-       }\r
-       /* initialize local variables */\r
-       and_start = 1;\r
-       state = CCS_START;\r
-\r
-       if (IS_NOT_NULL(prev_cc)) {\r
-         r = and_cclass(prev_cc, cc, env->enc);\r
-         if (r != 0) goto err;\r
-         bbuf_free(cc->mbuf);\r
-       }\r
-       else {\r
-         prev_cc = cc;\r
-         cc = &work_cc;\r
-       }\r
-       initialize_cclass(cc);\r
-      }\r
-      break;\r
+  *src = p;\r
+  return n;\r
+}\r
 \r
-    case TK_EOT:\r
-      r = ONIGERR_PREMATURE_END_OF_CHAR_CLASS;\r
-      goto err;\r
-      break;\r
-    default:\r
-      r = ONIGERR_PARSER_BUG;\r
-      goto err;\r
-      break;\r
-    }\r
+/* (*name[TAG]) (*name[TAG]{a,b,..}) */\r
+static int\r
+parse_callout_of_name(Node** np, int cterm, UChar** src, UChar* end, ScanEnv* env)\r
+{\r
+  int r;\r
+  int i;\r
+  int in;\r
+  int num;\r
+  int name_id;\r
+  int arg_num;\r
+  int max_arg_num;\r
+  int opt_arg_num;\r
+  int is_not_single;\r
+  OnigCodePoint c;\r
+  UChar* name_start;\r
+  UChar* name_end;\r
+  UChar* tag_start;\r
+  UChar* tag_end;\r
+  Node*  node;\r
+  CalloutListEntry* e;\r
+  RegexExt* ext;\r
+  unsigned int types[ONIG_CALLOUT_MAX_ARGS_NUM];\r
+  OnigValue    vals[ONIG_CALLOUT_MAX_ARGS_NUM];\r
+  OnigEncoding enc = env->enc;\r
+  UChar* p = *src;\r
 \r
-    if (fetched)\r
-      r = tok->type;\r
-    else {\r
-      r = fetch_token_in_cc(tok, &p, end, env);\r
-      if (r < 0) goto err;\r
+  /* PFETCH_READY; */\r
+  if (PEND) return ONIGERR_INVALID_CALLOUT_PATTERN;\r
+\r
+  node = 0;\r
+  name_start = p;\r
+  while (1) {\r
+    if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+    name_end = p;\r
+    PFETCH_S(c);\r
+    if (c == cterm || c == '[' || c == '{') break;\r
+  }\r
+\r
+  if (! is_allowed_callout_name(enc, name_start, name_end))\r
+    return ONIGERR_INVALID_CALLOUT_NAME;\r
+\r
+  if (c == '[') {\r
+    if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+    tag_start = p;\r
+    while (! PEND) {\r
+      if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+      tag_end = p;\r
+      PFETCH_S(c);\r
+      if (c == ']') break;\r
     }\r
+    if (! is_allowed_callout_tag_name(enc, tag_start, tag_end))\r
+      return ONIGERR_INVALID_CALLOUT_TAG_NAME;\r
+\r
+    if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+    PFETCH_S(c);\r
+  }\r
+  else {\r
+    tag_start = tag_end = 0;\r
   }\r
 \r
-  if (state == CCS_VALUE) {\r
-    r = next_state_val(cc, &vs, 0, &val_israw, 0, val_type,\r
-                      &val_type, &state, env);\r
-    if (r != 0) goto err;\r
+  if (c == '{') {\r
+    UChar* save;\r
+\r
+    if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+\r
+    /* read for single check only */\r
+    save = p;\r
+    arg_num = parse_callout_args(1, '}', &p, end, 0, 0, env);\r
+    if (arg_num < 0) return arg_num;\r
+\r
+    is_not_single = PPEEK_IS(cterm) ?  0 : 1;\r
+    p = save;\r
+    r = get_callout_name_id_by_name(enc, is_not_single, name_start, name_end,\r
+                                    &name_id);\r
+    if (r != ONIG_NORMAL) return r;\r
+\r
+    max_arg_num = get_callout_arg_num_by_name_id(name_id);\r
+    for (i = 0; i < max_arg_num; i++) {\r
+      types[i] = get_callout_arg_type_by_name_id(name_id, i);\r
+    }\r
+\r
+    arg_num = parse_callout_args(0, '}', &p, end, types, vals, env);\r
+    if (arg_num < 0) return arg_num;\r
+\r
+    if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+    PFETCH_S(c);\r
   }\r
+  else {\r
+    arg_num = 0;\r
 \r
-  if (IS_NOT_NULL(prev_cc)) {\r
-    r = and_cclass(prev_cc, cc, env->enc);\r
-    if (r != 0) goto err;\r
-    bbuf_free(cc->mbuf);\r
-    cc = prev_cc;\r
+    is_not_single = 0;\r
+    r = get_callout_name_id_by_name(enc, is_not_single, name_start, name_end,\r
+                                      &name_id);\r
+    if (r != ONIG_NORMAL) return r;\r
+\r
+    max_arg_num = get_callout_arg_num_by_name_id(name_id);\r
+    for (i = 0; i < max_arg_num; i++) {\r
+      types[i] = get_callout_arg_type_by_name_id(name_id, i);\r
+    }\r
   }\r
 \r
-  if (neg != 0)\r
-    NCCLASS_SET_NOT(cc);\r
-  else\r
-    NCCLASS_CLEAR_NOT(cc);\r
-  if (IS_NCCLASS_NOT(cc) &&\r
-      IS_SYNTAX_BV(env->syntax, ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC)) {\r
-    int is_empty;\r
+  in = onig_get_callout_in_by_name_id(name_id);\r
+  opt_arg_num = get_callout_opt_arg_num_by_name_id(name_id);\r
+  if (arg_num > max_arg_num || arg_num < (max_arg_num - opt_arg_num))\r
+    return ONIGERR_INVALID_CALLOUT_ARG;\r
 \r
-    is_empty = (IS_NULL(cc->mbuf) ? 1 : 0);\r
-    if (is_empty != 0)\r
-      BITSET_IS_EMPTY(cc->bs, is_empty);\r
+  if (c != cterm)\r
+    return ONIGERR_INVALID_CALLOUT_PATTERN;\r
 \r
-    if (is_empty == 0) {\r
-#define NEWLINE_CODE    0x0a\r
+  r = reg_callout_list_entry(env, &num);\r
+  if (r != 0) return r;\r
 \r
-      if (ONIGENC_IS_CODE_NEWLINE(env->enc, NEWLINE_CODE)) {\r
-        if (ONIGENC_CODE_TO_MBCLEN(env->enc, NEWLINE_CODE) == 1)\r
-          BITSET_SET_BIT(cc->bs, NEWLINE_CODE);\r
-        else\r
-          add_code_range(&(cc->mbuf), env, NEWLINE_CODE, NEWLINE_CODE);\r
-      }\r
-    }\r
+  ext = onig_get_regex_ext(env->reg);\r
+  if (IS_NULL(ext->pattern)) {\r
+    r = onig_ext_set_pattern(env->reg, env->pattern, env->pattern_end);\r
+    if (r != ONIG_NORMAL) return r;\r
+  }\r
+\r
+  if (tag_start != tag_end) {\r
+    r = callout_tag_entry(env->reg, tag_start, tag_end, num);\r
+    if (r != ONIG_NORMAL) return r;\r
+  }\r
+\r
+  r = node_new_callout(&node, ONIG_CALLOUT_OF_NAME, num, name_id, env);\r
+  if (r != ONIG_NORMAL) return r;\r
+\r
+  e = onig_reg_callout_list_at(env->reg, num);\r
+  e->of         = ONIG_CALLOUT_OF_NAME;\r
+  e->in         = in;\r
+  e->name_id    = name_id;\r
+  e->type       = onig_get_callout_type_by_name_id(name_id);\r
+  e->start_func = onig_get_callout_start_func_by_name_id(name_id);\r
+  e->end_func   = onig_get_callout_end_func_by_name_id(name_id);\r
+  e->u.arg.num        = max_arg_num;\r
+  e->u.arg.passed_num = arg_num;\r
+  for (i = 0; i < max_arg_num; i++) {\r
+    e->u.arg.types[i] = types[i];\r
+    if (i < arg_num)\r
+      e->u.arg.vals[i] = vals[i];\r
+    else\r
+      e->u.arg.vals[i] = get_callout_opt_default_by_name_id(name_id, i);\r
   }\r
+\r
+  *np = node;\r
   *src = p;\r
   return 0;\r
-\r
- err:\r
-  if (cc != NCCLASS(*np))\r
-    bbuf_free(cc->mbuf);\r
-  onig_node_free(*np);\r
-  return r;\r
 }\r
-\r
-static int parse_subexp(Node** top, OnigToken* tok, int term,\r
-                       UChar** src, UChar* end, ScanEnv* env);\r
+#endif\r
 \r
 static int\r
-parse_enclose(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,\r
-             ScanEnv* env)\r
+parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,\r
+                ScanEnv* env)\r
 {\r
   int r, num;\r
   Node *target;\r
   OnigOptionType option;\r
   OnigCodePoint c;\r
+  int list_capture;\r
   OnigEncoding enc = env->enc;\r
 \r
-#ifdef USE_NAMED_GROUP\r
-  int list_capture;\r
+  UChar* p = *src;\r
+  PFETCH_READY;\r
+\r
+  *np = NULL;\r
+  if (PEND) return ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS;\r
+\r
+  option = env->options;\r
+  c = PPEEK;\r
+  if (c == '?' && IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_GROUP_EFFECT)) {\r
+    PINC;\r
+    if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+\r
+    PFETCH(c);\r
+    switch (c) {\r
+    case ':':   /* (?:...) grouping only */\r
+    group:\r
+      r = fetch_token(tok, &p, end, env);\r
+      if (r < 0) return r;\r
+      r = parse_subexp(np, tok, term, &p, end, env);\r
+      if (r < 0) return r;\r
+      *src = p;\r
+      return 1; /* group */\r
+      break;\r
+\r
+    case '=':\r
+      *np = onig_node_new_anchor(ANCHOR_PREC_READ, 0);\r
+      break;\r
+    case '!':  /*         preceding read */\r
+      *np = onig_node_new_anchor(ANCHOR_PREC_READ_NOT, 0);\r
+      break;\r
+    case '>':            /* (?>...) stop backtrack */\r
+      *np = node_new_enclosure(ENCLOSURE_STOP_BACKTRACK);\r
+      break;\r
+\r
+    case '\'':\r
+      if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {\r
+        goto named_group1;\r
+      }\r
+      else\r
+        return ONIGERR_UNDEFINED_GROUP_OPTION;\r
+      break;\r
+\r
+    case '<':   /* look behind (?<=...), (?<!...) */\r
+      if (PEND) return ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS;\r
+      PFETCH(c);\r
+      if (c == '=')\r
+        *np = onig_node_new_anchor(ANCHOR_LOOK_BEHIND, 0);\r
+      else if (c == '!')\r
+        *np = onig_node_new_anchor(ANCHOR_LOOK_BEHIND_NOT, 0);\r
+      else {\r
+        if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {\r
+          UChar *name;\r
+          UChar *name_end;\r
+          enum REF_NUM num_type;\r
+\r
+          PUNFETCH;\r
+          c = '<';\r
+\r
+        named_group1:\r
+          list_capture = 0;\r
+\r
+        named_group2:\r
+          name = p;\r
+          r = fetch_name((OnigCodePoint )c, &p, end, &name_end, env, &num,\r
+                         &num_type, 0);\r
+          if (r < 0) return r;\r
+\r
+          num = scan_env_add_mem_entry(env);\r
+          if (num < 0) return num;\r
+          if (list_capture != 0 && num >= (int )MEM_STATUS_BITS_NUM)\r
+            return ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY;\r
+\r
+          r = name_add(env->reg, name, name_end, num, env);\r
+          if (r != 0) return r;\r
+          *np = node_new_memory(1);\r
+          CHECK_NULL_RETURN_MEMERR(*np);\r
+          ENCLOSURE_(*np)->m.regnum = num;\r
+          if (list_capture != 0)\r
+            MEM_STATUS_ON_SIMPLE(env->capture_history, num);\r
+          env->num_named++;\r
+        }\r
+        else {\r
+          return ONIGERR_UNDEFINED_GROUP_OPTION;\r
+        }\r
+      }\r
+      break;\r
+\r
+    case '~':\r
+      if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP)) {\r
+        Node* absent;\r
+        Node* expr;\r
+        int head_bar;\r
+        int is_range_cutter;\r
+\r
+        if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+\r
+        if (PPEEK_IS('|')) { /* (?~|generator|absent) */\r
+          PINC;\r
+          if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+\r
+          head_bar = 1;\r
+          if (PPEEK_IS(')')) { /* (?~|)  : range clear */\r
+            PINC;\r
+            r = make_range_clear(np, env);\r
+            if (r != 0) return r;\r
+            goto end;\r
+          }\r
+        }\r
+        else\r
+          head_bar = 0;\r
+\r
+        r = fetch_token(tok, &p, end, env);\r
+        if (r < 0) return r;\r
+        r = parse_subexp(&absent, tok, term, &p, end, env);\r
+        if (r < 0) {\r
+          onig_node_free(absent);\r
+          return r;\r
+        }\r
+\r
+        expr = NULL_NODE;\r
+        is_range_cutter = 0;\r
+        if (head_bar != 0) {\r
+          Node* top = absent;\r
+          if (NODE_TYPE(top) != NODE_ALT || IS_NULL(NODE_CDR(top))) {\r
+            expr = NULL_NODE;\r
+            is_range_cutter = 1;\r
+            /* return ONIGERR_INVALID_ABSENT_GROUP_GENERATOR_PATTERN; */\r
+          }\r
+          else {\r
+            absent = NODE_CAR(top);\r
+            expr   = NODE_CDR(top);\r
+            NODE_CAR(top) = NULL_NODE;\r
+            NODE_CDR(top) = NULL_NODE;\r
+            onig_node_free(top);\r
+            if (IS_NULL(NODE_CDR(expr))) {\r
+              top = expr;\r
+              expr = NODE_CAR(top);\r
+              NODE_CAR(top) = NULL_NODE;\r
+              onig_node_free(top);\r
+            }\r
+          }\r
+        }\r
+\r
+        r = make_absent_tree(np, absent, expr, is_range_cutter, env);\r
+        if (r != 0) {\r
+          return r;\r
+        }\r
+        goto end;\r
+      }\r
+      else {\r
+        return ONIGERR_UNDEFINED_GROUP_OPTION;\r
+      }\r
+      break;\r
+\r
+#ifdef USE_CALLOUT\r
+    case '{':\r
+      if (! IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS))\r
+        return ONIGERR_UNDEFINED_GROUP_OPTION;\r
+\r
+      r = parse_callout_of_contents(np, ')', &p, end, env);\r
+      if (r != 0) return r;\r
+\r
+      goto end;\r
+      break;\r
+#endif\r
+\r
+    case '(':\r
+      /* (?()...) */\r
+      if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE)) {\r
+        UChar *prev;\r
+        Node* condition;\r
+        int condition_is_checker;\r
+\r
+        if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+        PFETCH(c);\r
+        if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+\r
+        if (IS_CODE_DIGIT_ASCII(enc, c)\r
+            || c == '-' || c == '+' || c == '<' || c == '\'') {\r
+          UChar* name_end;\r
+          int back_num;\r
+          int exist_level;\r
+          int level;\r
+          enum REF_NUM num_type;\r
+          int is_enclosed;\r
+\r
+          is_enclosed = (c == '<' || c == '\'') ? 1 : 0;\r
+          if (! is_enclosed)\r
+            PUNFETCH;\r
+          prev = p;\r
+          exist_level = 0;\r
+#ifdef USE_BACKREF_WITH_LEVEL\r
+          name_end = NULL_UCHARP; /* no need. escape gcc warning. */\r
+          r = fetch_name_with_level(\r
+                    (OnigCodePoint )(is_enclosed != 0 ? c : '('),\r
+                    &p, end, &name_end,\r
+                    env, &back_num, &level, &num_type);\r
+          if (r == 1) exist_level = 1;\r
+#else\r
+          r = fetch_name((OnigCodePoint )(is_enclosed != 0 ? c : '('),\r
+                         &p, end, &name_end, env, &back_num, &num_type, 1);\r
+#endif\r
+          if (r < 0) {\r
+            if (is_enclosed == 0) {\r
+              goto any_condition;\r
+            }\r
+            else\r
+              return r;\r
+          }\r
+\r
+          condition_is_checker = 1;\r
+          if (num_type != IS_NOT_NUM) {\r
+            if (num_type == IS_REL_NUM) {\r
+              back_num = backref_rel_to_abs(back_num, env);\r
+            }\r
+            if (back_num <= 0)\r
+              return ONIGERR_INVALID_BACKREF;\r
+\r
+            if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_STRICT_CHECK_BACKREF)) {\r
+              if (back_num > env->num_mem ||\r
+                  IS_NULL(SCANENV_MEMENV(env)[back_num].node))\r
+                return ONIGERR_INVALID_BACKREF;\r
+            }\r
+\r
+            condition = node_new_backref_checker(1, &back_num, 0,\r
+#ifdef USE_BACKREF_WITH_LEVEL\r
+                                                 exist_level, level,\r
+#endif\r
+                                                 env);\r
+          }\r
+          else {\r
+            int num;\r
+            int* backs;\r
+\r
+            num = onig_name_to_group_numbers(env->reg, prev, name_end, &backs);\r
+            if (num <= 0) {\r
+              onig_scan_env_set_error_string(env,\r
+                        ONIGERR_UNDEFINED_NAME_REFERENCE, prev, name_end);\r
+              return ONIGERR_UNDEFINED_NAME_REFERENCE;\r
+            }\r
+            if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_STRICT_CHECK_BACKREF)) {\r
+              int i;\r
+              for (i = 0; i < num; i++) {\r
+                if (backs[i] > env->num_mem ||\r
+                    IS_NULL(SCANENV_MEMENV(env)[backs[i]].node))\r
+                  return ONIGERR_INVALID_BACKREF;\r
+              }\r
+            }\r
+\r
+            condition = node_new_backref_checker(num, backs, 1,\r
+#ifdef USE_BACKREF_WITH_LEVEL\r
+                                                 exist_level, level,\r
+#endif\r
+                                                 env);\r
+          }\r
+\r
+          if (is_enclosed != 0) {\r
+            if (PEND) goto err_if_else;\r
+            PFETCH(c);\r
+            if (c != ')') goto err_if_else;\r
+          }\r
+        }\r
+#ifdef USE_CALLOUT\r
+        else if (c == '?') {\r
+          if (IS_SYNTAX_OP2(env->syntax,\r
+                            ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS)) {\r
+            if (! PEND && PPEEK_IS('{')) {\r
+              /* condition part is callouts of contents: (?(?{...})THEN|ELSE) */\r
+              condition_is_checker = 0;\r
+              PFETCH(c);\r
+              r = parse_callout_of_contents(&condition, ')', &p, end, env);\r
+              if (r != 0) return r;\r
+              goto end_condition;\r
+            }\r
+          }\r
+          goto any_condition;\r
+        }\r
+        else if (c == '*' &&\r
+                 IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME)) {\r
+          condition_is_checker = 0;\r
+          r = parse_callout_of_name(&condition, ')', &p, end, env);\r
+          if (r != 0) return r;\r
+          goto end_condition;\r
+        }\r
 #endif\r
+        else {\r
+        any_condition:\r
+          PUNFETCH;\r
+          condition_is_checker = 0;\r
+          r = fetch_token(tok, &p, end, env);\r
+          if (r < 0) return r;\r
+          r = parse_subexp(&condition, tok, term, &p, end, env);\r
+          if (r < 0) {\r
+            onig_node_free(condition);\r
+            return r;\r
+          }\r
+        }\r
 \r
-  UChar* p = *src;\r
-  PFETCH_READY;\r
+      end_condition:\r
+        CHECK_NULL_RETURN_MEMERR(condition);\r
 \r
-  *np = NULL;\r
-  if (PEND) return ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS;\r
+        if (PEND) {\r
+        err_if_else:\r
+          onig_node_free(condition);\r
+          return ONIGERR_END_PATTERN_IN_GROUP;\r
+        }\r
 \r
-  option = env->option;\r
-  if (PPEEK_IS('?') &&\r
-      IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_GROUP_EFFECT)) {\r
-    PINC;\r
-    if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+        if (PPEEK_IS(')')) { /* case: empty body: make backref checker */\r
+          if (condition_is_checker == 0) {\r
+            onig_node_free(condition);\r
+            return ONIGERR_INVALID_IF_ELSE_SYNTAX;\r
+          }\r
+          PFETCH(c);\r
+          *np = condition;\r
+        }\r
+        else { /* if-else */\r
+          int then_is_empty;\r
+          Node *Then, *Else;\r
 \r
-    PFETCH(c);\r
-    switch (c) {\r
-    case ':':   /* (?:...) grouping only */\r
-    group:\r
-      r = fetch_token(tok, &p, end, env);\r
-      if (r < 0) return r;\r
-      r = parse_subexp(np, tok, term, &p, end, env);\r
-      if (r < 0) return r;\r
-      *src = p;\r
-      return 1; /* group */\r
-      break;\r
+          if (PPEEK_IS('|')) {\r
+            PFETCH(c);\r
+            Then = 0;\r
+            then_is_empty = 1;\r
+          }\r
+          else\r
+            then_is_empty = 0;\r
 \r
-    case '=':\r
-      *np = onig_node_new_anchor(ANCHOR_PREC_READ);\r
-      break;\r
-    case '!':  /*         preceding read */\r
-      *np = onig_node_new_anchor(ANCHOR_PREC_READ_NOT);\r
-      break;\r
-    case '>':            /* (?>...) stop backtrack */\r
-      *np = node_new_enclose(ENCLOSE_STOP_BACKTRACK);\r
-      break;\r
+          r = fetch_token(tok, &p, end, env);\r
+          if (r < 0) {\r
+            onig_node_free(condition);\r
+            return r;\r
+          }\r
+          r = parse_subexp(&target, tok, term, &p, end, env);\r
+          if (r < 0) {\r
+            onig_node_free(condition);\r
+            onig_node_free(target);\r
+            return r;\r
+          }\r
 \r
-#ifdef USE_NAMED_GROUP\r
-    case '\'':\r
-      if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {\r
-       goto named_group1;\r
-      }\r
-      else\r
-       return ONIGERR_UNDEFINED_GROUP_OPTION;\r
-      break;\r
-#endif\r
+          if (then_is_empty != 0) {\r
+            Else = target;\r
+          }\r
+          else {\r
+            if (NODE_TYPE(target) == NODE_ALT) {\r
+              Then = NODE_CAR(target);\r
+              if (NODE_CDR(NODE_CDR(target)) == NULL_NODE) {\r
+                Else = NODE_CAR(NODE_CDR(target));\r
+                cons_node_free_alone(NODE_CDR(target));\r
+              }\r
+              else {\r
+                Else = NODE_CDR(target);\r
+              }\r
+              cons_node_free_alone(target);\r
+            }\r
+            else {\r
+              Then = target;\r
+              Else = 0;\r
+            }\r
+          }\r
 \r
-    case '<':   /* look behind (?<=...), (?<!...) */\r
-      PFETCH(c);\r
-      if (c == '=')\r
-       *np = onig_node_new_anchor(ANCHOR_LOOK_BEHIND);\r
-      else if (c == '!')\r
-       *np = onig_node_new_anchor(ANCHOR_LOOK_BEHIND_NOT);\r
-#ifdef USE_NAMED_GROUP\r
-      else {\r
-       if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {\r
-         UChar *name;\r
-         UChar *name_end;\r
-\r
-         PUNFETCH;\r
-         c = '<';\r
-\r
-       named_group1:\r
-         list_capture = 0;\r
-\r
-       named_group2:\r
-         name = p;\r
-         r = fetch_name((OnigCodePoint )c, &p, end, &name_end, env, &num, 0);\r
-         if (r < 0) return r;\r
-\r
-         num = scan_env_add_mem_entry(env);\r
-         if (num < 0) return num;\r
-         if (list_capture != 0 && num >= (int )BIT_STATUS_BITS_NUM)\r
-           return ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY;\r
-\r
-         r = name_add(env->reg, name, name_end, num, env);\r
-         if (r != 0) return r;\r
-         *np = node_new_enclose_memory(env->option, 1);\r
-         CHECK_NULL_RETURN_MEMERR(*np);\r
-         NENCLOSE(*np)->regnum = num;\r
-         if (list_capture != 0)\r
-           BIT_STATUS_ON_AT_SIMPLE(env->capture_history, num);\r
-         env->num_named++;\r
-       }\r
-       else {\r
-         return ONIGERR_UNDEFINED_GROUP_OPTION;\r
-       }\r
+          *np = node_new_enclosure_if_else(condition, Then, Else);\r
+          if (IS_NULL(*np)) {\r
+            onig_node_free(condition);\r
+            onig_node_free(Then);\r
+            onig_node_free(Else);\r
+            return ONIGERR_MEMORY;\r
+          }\r
+        }\r
+        goto end;\r
       }\r
-#else\r
       else {\r
-       return ONIGERR_UNDEFINED_GROUP_OPTION;\r
+        return ONIGERR_UNDEFINED_GROUP_OPTION;\r
       }\r
-#endif\r
       break;\r
 \r
     case '@':\r
       if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY)) {\r
-#ifdef USE_NAMED_GROUP\r
-       if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {\r
-         PFETCH(c);\r
-         if (c == '<' || c == '\'') {\r
-           list_capture = 1;\r
-           goto named_group2; /* (?@<name>...) */\r
-         }\r
-         PUNFETCH;\r
-       }\r
-#endif\r
-       *np = node_new_enclose_memory(env->option, 0);\r
-       CHECK_NULL_RETURN_MEMERR(*np);\r
-       num = scan_env_add_mem_entry(env);\r
-       if (num < 0) {\r
-         onig_node_free(*np);\r
-         return num;\r
-       }\r
-       else if (num >= (int )BIT_STATUS_BITS_NUM) {\r
-         onig_node_free(*np);\r
-         return ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY;\r
-       }\r
-       NENCLOSE(*np)->regnum = num;\r
-       BIT_STATUS_ON_AT_SIMPLE(env->capture_history, num);\r
+        if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {\r
+          PFETCH(c);\r
+          if (c == '<' || c == '\'') {\r
+            list_capture = 1;\r
+            goto named_group2; /* (?@<name>...) */\r
+          }\r
+          PUNFETCH;\r
+        }\r
+\r
+        *np = node_new_memory(0);\r
+        CHECK_NULL_RETURN_MEMERR(*np);\r
+        num = scan_env_add_mem_entry(env);\r
+        if (num < 0) {\r
+          return num;\r
+        }\r
+        else if (num >= (int )MEM_STATUS_BITS_NUM) {\r
+          return ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY;\r
+        }\r
+        ENCLOSURE_(*np)->m.regnum = num;\r
+        MEM_STATUS_ON_SIMPLE(env->capture_history, num);\r
       }\r
       else {\r
-       return ONIGERR_UNDEFINED_GROUP_OPTION;\r
+        return ONIGERR_UNDEFINED_GROUP_OPTION;\r
       }\r
       break;\r
 \r
@@ -4650,70 +7375,79 @@ parse_enclose(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
     case 'p':\r
 #endif\r
     case '-': case 'i': case 'm': case 's': case 'x':\r
+    case 'W': case 'D': case 'S': case 'P':\r
       {\r
-       int neg = 0;\r
-\r
-       while (1) {\r
-         switch (c) {\r
-         case ':':\r
-         case ')':\r
-         break;\r
-\r
-         case '-':  neg = 1; break;\r
-         case 'x':  ONOFF(option, ONIG_OPTION_EXTEND,     neg); break;\r
-         case 'i':  ONOFF(option, ONIG_OPTION_IGNORECASE, neg); break;\r
-         case 's':\r
-           if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL)) {\r
-             ONOFF(option, ONIG_OPTION_MULTILINE,  neg);\r
-           }\r
-           else\r
-             return ONIGERR_UNDEFINED_GROUP_OPTION;\r
-           break;\r
-\r
-         case 'm':\r
-           if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL)) {\r
-             ONOFF(option, ONIG_OPTION_SINGLELINE, (neg == 0 ? 1 : 0));\r
-           }\r
-           else if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_RUBY)) {\r
-             ONOFF(option, ONIG_OPTION_MULTILINE,  neg);\r
-           }\r
-           else\r
-             return ONIGERR_UNDEFINED_GROUP_OPTION;\r
-           break;\r
+        int neg = 0;\r
+\r
+        while (1) {\r
+          switch (c) {\r
+          case ':':\r
+          case ')':\r
+            break;\r
+\r
+          case '-':  neg = 1; break;\r
+          case 'x':  OPTION_NEGATE(option, ONIG_OPTION_EXTEND,     neg); break;\r
+          case 'i':  OPTION_NEGATE(option, ONIG_OPTION_IGNORECASE, neg); break;\r
+          case 's':\r
+            if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL)) {\r
+              OPTION_NEGATE(option, ONIG_OPTION_MULTILINE,  neg);\r
+            }\r
+            else\r
+              return ONIGERR_UNDEFINED_GROUP_OPTION;\r
+            break;\r
+\r
+          case 'm':\r
+            if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL)) {\r
+              OPTION_NEGATE(option, ONIG_OPTION_SINGLELINE, (neg == 0 ? 1 : 0));\r
+            }\r
+            else if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_RUBY)) {\r
+              OPTION_NEGATE(option, ONIG_OPTION_MULTILINE,  neg);\r
+            }\r
+            else\r
+              return ONIGERR_UNDEFINED_GROUP_OPTION;\r
+            break;\r
 #ifdef USE_POSIXLINE_OPTION\r
-         case 'p':\r
-           ONOFF(option, ONIG_OPTION_MULTILINE|ONIG_OPTION_SINGLELINE, neg);\r
-           break;\r
+          case 'p':\r
+            OPTION_NEGATE(option, ONIG_OPTION_MULTILINE|ONIG_OPTION_SINGLELINE, neg);\r
+            break;\r
 #endif\r
-         default:\r
-           return ONIGERR_UNDEFINED_GROUP_OPTION;\r
-         }\r
-\r
-         if (c == ')') {\r
-           *np = node_new_option(option);\r
-           CHECK_NULL_RETURN_MEMERR(*np);\r
-           *src = p;\r
-           return 2; /* option only */\r
-         }\r
-         else if (c == ':') {\r
-           OnigOptionType prev = env->option;\r
-\r
-           env->option     = option;\r
-           r = fetch_token(tok, &p, end, env);\r
-           if (r < 0) return r;\r
-           r = parse_subexp(&target, tok, term, &p, end, env);\r
-           env->option = prev;\r
-           if (r < 0) return r;\r
-           *np = node_new_option(option);\r
-           CHECK_NULL_RETURN_MEMERR(*np);\r
-           NENCLOSE(*np)->target = target;\r
-           *src = p;\r
-           return 0;\r
-         }\r
-\r
-         if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
-         PFETCH(c);\r
-       }\r
+          case 'W': OPTION_NEGATE(option, ONIG_OPTION_WORD_IS_ASCII, neg); break;\r
+          case 'D': OPTION_NEGATE(option, ONIG_OPTION_DIGIT_IS_ASCII, neg); break;\r
+          case 'S': OPTION_NEGATE(option, ONIG_OPTION_SPACE_IS_ASCII, neg); break;\r
+          case 'P': OPTION_NEGATE(option, ONIG_OPTION_POSIX_IS_ASCII, neg); break;\r
+\r
+          default:\r
+            return ONIGERR_UNDEFINED_GROUP_OPTION;\r
+          }\r
+\r
+          if (c == ')') {\r
+            *np = node_new_option(option);\r
+            CHECK_NULL_RETURN_MEMERR(*np);\r
+            *src = p;\r
+            return 2; /* option only */\r
+          }\r
+          else if (c == ':') {\r
+            OnigOptionType prev = env->options;\r
+\r
+            env->options = option;\r
+            r = fetch_token(tok, &p, end, env);\r
+            if (r < 0) return r;\r
+            r = parse_subexp(&target, tok, term, &p, end, env);\r
+            env->options = prev;\r
+            if (r < 0) {\r
+              onig_node_free(target);\r
+              return r;\r
+            }\r
+            *np = node_new_option(option);\r
+            CHECK_NULL_RETURN_MEMERR(*np);\r
+            NODE_BODY(*np) = target;\r
+            *src = p;\r
+            return 0;\r
+          }\r
+\r
+          if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
+          PFETCH(c);\r
+        }\r
       }\r
       break;\r
 \r
@@ -4721,34 +7455,47 @@ parse_enclose(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
       return ONIGERR_UNDEFINED_GROUP_OPTION;\r
     }\r
   }\r
+#ifdef USE_CALLOUT\r
+  else if (c == '*' &&\r
+           IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME)) {\r
+    PINC;\r
+    r = parse_callout_of_name(np, ')', &p, end, env);\r
+    if (r != 0) return r;\r
+\r
+    goto end;\r
+  }\r
+#endif\r
   else {\r
-    if (ONIG_IS_OPTION_ON(env->option, ONIG_OPTION_DONT_CAPTURE_GROUP))\r
+    if (ONIG_IS_OPTION_ON(env->options, ONIG_OPTION_DONT_CAPTURE_GROUP))\r
       goto group;\r
 \r
-    *np = node_new_enclose_memory(env->option, 0);\r
+    *np = node_new_memory(0);\r
     CHECK_NULL_RETURN_MEMERR(*np);\r
     num = scan_env_add_mem_entry(env);\r
     if (num < 0) return num;\r
-    NENCLOSE(*np)->regnum = num;\r
+    ENCLOSURE_(*np)->m.regnum = num;\r
   }\r
 \r
   CHECK_NULL_RETURN_MEMERR(*np);\r
   r = fetch_token(tok, &p, end, env);\r
   if (r < 0) return r;\r
   r = parse_subexp(&target, tok, term, &p, end, env);\r
-  if (r < 0) return r;\r
+  if (r < 0) {\r
+    onig_node_free(target);\r
+    return r;\r
+  }\r
 \r
-  if (NTYPE(*np) == NT_ANCHOR)\r
-    NANCHOR(*np)->target = target;\r
-  else {\r
-    NENCLOSE(*np)->target = target;\r
-    if (NENCLOSE(*np)->type == ENCLOSE_MEMORY) {\r
+  NODE_BODY(*np) = target;\r
+\r
+  if (NODE_TYPE(*np) == NODE_ENCLOSURE) {\r
+    if (ENCLOSURE_(*np)->type == ENCLOSURE_MEMORY) {\r
       /* Don't move this to previous of parse_subexp() */\r
-      r = scan_env_set_mem_node(env, NENCLOSE(*np)->regnum, *np);\r
+      r = scan_env_set_mem_node(env, ENCLOSURE_(*np)->m.regnum, *np);\r
       if (r != 0) return r;\r
     }\r
   }\r
 \r
+ end:\r
   *src = p;\r
   return 0;\r
 }\r
@@ -4764,40 +7511,35 @@ static const char* ReduceQStr[] = {
 static int\r
 set_quantifier(Node* qnode, Node* target, int group, ScanEnv* env)\r
 {\r
-  QtfrNode* qn;\r
+  QuantNode* qn;\r
 \r
-  qn = NQTFR(qnode);\r
-  if (qn->lower == 1 && qn->upper == 1) {\r
+  qn = QUANT_(qnode);\r
+  if (qn->lower == 1 && qn->upper == 1)\r
     return 1;\r
-  }\r
 \r
-  switch (NTYPE(target)) {\r
-  case NT_STR:\r
+  switch (NODE_TYPE(target)) {\r
+  case NODE_STRING:\r
     if (! group) {\r
-      StrNode* sn = NSTR(target);\r
-      if (str_node_can_be_split(sn, env->enc)) {\r
-       Node* n = str_node_split_last_char(sn, env->enc);\r
-       if (IS_NOT_NULL(n)) {\r
-         qn->target = n;\r
-         return 2;\r
-       }\r
+      if (str_node_can_be_split(target, env->enc)) {\r
+        Node* n = str_node_split_last_char(target, env->enc);\r
+        if (IS_NOT_NULL(n)) {\r
+          NODE_BODY(qnode) = n;\r
+          return 2;\r
+        }\r
       }\r
     }\r
     break;\r
 \r
-  case NT_QTFR:\r
+  case NODE_QUANT:\r
     { /* check redundant double repeat. */\r
       /* verbose warn (?:.?)? etc... but not warn (.?)? etc... */\r
-      QtfrNode* qnt   = NQTFR(target);\r
-      int nestq_num   = popular_quantifier_num(qn);\r
-      int targetq_num = popular_quantifier_num(qnt);\r
-      if (nestq_num < 0 || targetq_num < 0) {\r
-        return ONIGERR_TYPE_BUG;\r
-      }\r
+      QuantNode* qnt   = QUANT_(target);\r
+      int nestq_num   = quantifier_type_num(qn);\r
+      int targetq_num = quantifier_type_num(qnt);\r
 \r
 #ifdef USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR\r
-      if (!IS_QUANTIFIER_BY_NUMBER(qn) && !IS_QUANTIFIER_BY_NUMBER(qnt) &&\r
-         IS_SYNTAX_BV(env->syntax, ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT)) {\r
+      if (targetq_num >= 0 && nestq_num >= 0 &&\r
+          IS_SYNTAX_BV(env->syntax, ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT)) {\r
         UChar buf[WARN_BUFSIZE];\r
 \r
         switch(ReduceTypeTable[targetq_num][nestq_num]) {\r
@@ -4807,8 +7549,8 @@ set_quantifier(Node* qnode, Node* target, int group, ScanEnv* env)
         case RQ_DEL:\r
           if (onig_verb_warn != onig_null_warn) {\r
             onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc,\r
-                                 env->pattern, env->pattern_end,\r
-                                 (UChar* )"redundant nested repeat operator");\r
+                                  env->pattern, env->pattern_end,\r
+                                  (UChar* )"redundant nested repeat operator");\r
             (*onig_verb_warn)((char* )buf);\r
           }\r
           goto warn_exit;\r
@@ -4830,17 +7572,18 @@ set_quantifier(Node* qnode, Node* target, int group, ScanEnv* env)
 \r
     warn_exit:\r
 #endif\r
-      if (targetq_num >= 0) {\r
-       if (nestq_num >= 0) {\r
-         onig_reduce_nested_quantifier(qnode, target);\r
-         goto q_exit;\r
-       }\r
-       else if (targetq_num == 1 || targetq_num == 2) { /* * or + */\r
-         /* (?:a*){n,m}, (?:a+){n,m} => (?:a*){n,n}, (?:a+){n,n} */\r
-         if (! IS_REPEAT_INFINITE(qn->upper) && qn->upper > 1 && qn->greedy) {\r
-           qn->upper = (qn->lower == 0 ? 1 : qn->lower);\r
-         }\r
-       }\r
+      if (targetq_num >= 0 && nestq_num < 0) {\r
+        if (targetq_num == 1 || targetq_num == 2) { /* * or + */\r
+          /* (?:a*){n,m}, (?:a+){n,m} => (?:a*){n,n}, (?:a+){n,n} */\r
+          if (! IS_REPEAT_INFINITE(qn->upper) && qn->upper > 1 && qn->greedy) {\r
+            qn->upper = (qn->lower == 0 ? 1 : qn->lower);\r
+          }\r
+        }\r
+      }\r
+      else {\r
+        NODE_BODY(qnode) = target;\r
+        onig_reduce_nested_quantifier(qnode, target);\r
+        goto q_exit;\r
       }\r
     }\r
     break;\r
@@ -4849,89 +7592,12 @@ set_quantifier(Node* qnode, Node* target, int group, ScanEnv* env)
     break;\r
   }\r
 \r
-  qn->target = target;\r
+  NODE_BODY(qnode) = target;\r
  q_exit:\r
   return 0;\r
 }\r
 \r
 \r
-#ifdef USE_SHARED_CCLASS_TABLE\r
-\r
-#define THRESHOLD_RANGE_NUM_FOR_SHARE_CCLASS     8\r
-\r
-/* for ctype node hash table */\r
-\r
-typedef struct {\r
-  OnigEncoding enc;\r
-  int not;\r
-  int type;\r
-} type_cclass_key;\r
-\r
-static int type_cclass_cmp(type_cclass_key* x, type_cclass_key* y)\r
-{\r
-  if (x->type != y->type) return 1;\r
-  if (x->enc  != y->enc)  return 1;\r
-  if (x->not  != y->not)  return 1;\r
-  return 0;\r
-}\r
-\r
-static int type_cclass_hash(type_cclass_key* key)\r
-{\r
-  int i, val;\r
-  UChar *p;\r
-\r
-  val = 0;\r
-\r
-  p = (UChar* )&(key->enc);\r
-  for (i = 0; i < (int )sizeof(key->enc); i++) {\r
-    val = val * 997 + (int )*p++;\r
-  }\r
-\r
-  p = (UChar* )(&key->type);\r
-  for (i = 0; i < (int )sizeof(key->type); i++) {\r
-    val = val * 997 + (int )*p++;\r
-  }\r
-\r
-  val += key->not;\r
-  return val + (val >> 5);\r
-}\r
-\r
-static struct st_hash_type type_type_cclass_hash = {\r
-    type_cclass_cmp,\r
-    type_cclass_hash,\r
-};\r
-\r
-static st_table* OnigTypeCClassTable;\r
-\r
-\r
-static int\r
-i_free_shared_class(type_cclass_key* key, Node* node, void* arg ARG_UNUSED)\r
-{\r
-  if (IS_NOT_NULL(node)) {\r
-    CClassNode* cc = NCCLASS(node);\r
-    if (IS_NOT_NULL(cc->mbuf)) xfree(cc->mbuf);\r
-    xfree(node);\r
-  }\r
-\r
-  if (IS_NOT_NULL(key)) xfree(key);\r
-  return ST_DELETE;\r
-}\r
-\r
-extern int\r
-onig_free_shared_cclass_table(void)\r
-{\r
-  if (IS_NOT_NULL(OnigTypeCClassTable)) {\r
-    onig_st_foreach(OnigTypeCClassTable, i_free_shared_class, 0);\r
-    onig_st_free_table(OnigTypeCClassTable);\r
-    OnigTypeCClassTable = NULL;\r
-  }\r
-\r
-  return 0;\r
-}\r
-\r
-#endif /* USE_SHARED_CCLASS_TABLE */\r
-\r
-\r
 #ifndef CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS\r
 static int\r
 clear_not_flag_cclass(CClassNode* cc, OnigEncoding enc)\r
@@ -4965,8 +7631,7 @@ typedef struct {
 } IApplyCaseFoldArg;\r
 \r
 static int\r
-i_apply_case_fold(OnigCodePoint from, OnigCodePoint to[],\r
-                 int to_len, void* arg)\r
+i_apply_case_fold(OnigCodePoint from, OnigCodePoint to[], int to_len, void* arg)\r
 {\r
   IApplyCaseFoldArg* iarg;\r
   ScanEnv* env;\r
@@ -4982,26 +7647,26 @@ i_apply_case_fold(OnigCodePoint from, OnigCodePoint to[],
     int is_in = onig_is_code_in_cc(env->enc, from, cc);\r
 #ifdef CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS\r
     if ((is_in != 0 && !IS_NCCLASS_NOT(cc)) ||\r
-       (is_in == 0 &&  IS_NCCLASS_NOT(cc))) {\r
+        (is_in == 0 &&  IS_NCCLASS_NOT(cc))) {\r
       if (ONIGENC_MBC_MINLEN(env->enc) > 1 || *to >= SINGLE_BYTE_SIZE) {\r
-       add_code_range(&(cc->mbuf), env, *to, *to);\r
+        add_code_range(&(cc->mbuf), env, *to, *to);\r
       }\r
       else {\r
-       BITSET_SET_BIT(bs, *to);\r
+        BITSET_SET_BIT(bs, *to);\r
       }\r
     }\r
 #else\r
     if (is_in != 0) {\r
       if (ONIGENC_MBC_MINLEN(env->enc) > 1 || *to >= SINGLE_BYTE_SIZE) {\r
-       if (IS_NCCLASS_NOT(cc)) clear_not_flag_cclass(cc, env->enc);\r
-       add_code_range(&(cc->mbuf), env, *to, *to);\r
+        if (IS_NCCLASS_NOT(cc)) clear_not_flag_cclass(cc, env->enc);\r
+        add_code_range(&(cc->mbuf), env, *to, *to);\r
       }\r
       else {\r
-       if (IS_NCCLASS_NOT(cc)) {\r
-         BITSET_CLEAR_BIT(bs, *to);\r
-       }\r
-       else\r
-         BITSET_SET_BIT(bs, *to);\r
+        if (IS_NCCLASS_NOT(cc)) {\r
+          BITSET_CLEAR_BIT(bs, *to);\r
+        }\r
+        else\r
+          BITSET_SET_BIT(bs, *to);\r
       }\r
     }\r
 #endif /* CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS */\r
@@ -5013,31 +7678,31 @@ i_apply_case_fold(OnigCodePoint from, OnigCodePoint to[],
 \r
     if (onig_is_code_in_cc(env->enc, from, cc)\r
 #ifdef CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS\r
-       && !IS_NCCLASS_NOT(cc)\r
+        && !IS_NCCLASS_NOT(cc)\r
 #endif\r
-       ) {\r
+        ) {\r
       for (i = 0; i < to_len; i++) {\r
-       len = ONIGENC_CODE_TO_MBC(env->enc, to[i], buf);\r
-       if (i == 0) {\r
-         snode = onig_node_new_str(buf, buf + len);\r
-         CHECK_NULL_RETURN_MEMERR(snode);\r
-\r
-         /* char-class expanded multi-char only\r
-            compare with string folded at match time. */\r
-         NSTRING_SET_AMBIG(snode);\r
-       }\r
-       else {\r
-         r = onig_node_str_cat(snode, buf, buf + len);\r
-         if (r < 0) {\r
-           onig_node_free(snode);\r
-           return r;\r
-         }\r
-       }\r
+        len = ONIGENC_CODE_TO_MBC(env->enc, to[i], buf);\r
+        if (i == 0) {\r
+          snode = onig_node_new_str(buf, buf + len);\r
+          CHECK_NULL_RETURN_MEMERR(snode);\r
+\r
+          /* char-class expanded multi-char only\r
+             compare with string folded at match time. */\r
+          NODE_STRING_SET_AMBIG(snode);\r
+        }\r
+        else {\r
+          r = onig_node_str_cat(snode, buf, buf + len);\r
+          if (r < 0) {\r
+            onig_node_free(snode);\r
+            return r;\r
+          }\r
+        }\r
       }\r
 \r
       *(iarg->ptail) = onig_node_new_alt(snode, NULL_NODE);\r
       CHECK_NULL_RETURN_MEMERR(*(iarg->ptail));\r
-      iarg->ptail = &(NCDR((*(iarg->ptail))));\r
+      iarg->ptail = &(NODE_CDR((*(iarg->ptail))));\r
     }\r
   }\r
 \r
@@ -5045,8 +7710,8 @@ i_apply_case_fold(OnigCodePoint from, OnigCodePoint to[],
 }\r
 \r
 static int\r
-parse_exp(Node** np, OnigToken* tok, int term,\r
-         UChar** src, UChar* end, ScanEnv* env)\r
+parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,\r
+          ScanEnv* env)\r
 {\r
   int r, len, group = 0;\r
   Node* qn;\r
@@ -5065,20 +7730,23 @@ parse_exp(Node** np, OnigToken* tok, int term,
   break;\r
 \r
   case TK_SUBEXP_OPEN:\r
-    r = parse_enclose(np, tok, TK_SUBEXP_CLOSE, src, end, env);\r
+    r = parse_enclosure(np, tok, TK_SUBEXP_CLOSE, src, end, env);\r
     if (r < 0) return r;\r
     if (r == 1) group = 1;\r
     else if (r == 2) { /* option only */\r
       Node* target;\r
-      OnigOptionType prev = env->option;\r
+      OnigOptionType prev = env->options;\r
 \r
-      env->option = NENCLOSE(*np)->option;\r
+      env->options = ENCLOSURE_(*np)->o.options;\r
       r = fetch_token(tok, src, end, env);\r
       if (r < 0) return r;\r
       r = parse_subexp(&target, tok, term, src, end, env);\r
-      env->option = prev;\r
-      if (r < 0) return r;\r
-      NENCLOSE(*np)->target = target;  \r
+      env->options = prev;\r
+      if (r < 0) {\r
+        onig_node_free(target);\r
+        return r;\r
+      }\r
+      NODE_BODY(*np) = target;\r
       return tok->type;\r
     }\r
     break;\r
@@ -5098,12 +7766,12 @@ parse_exp(Node** np, OnigToken* tok, int term,
       CHECK_NULL_RETURN_MEMERR(*np);\r
 \r
       while (1) {\r
-       r = fetch_token(tok, src, end, env);\r
-       if (r < 0) return r;\r
-       if (r != TK_STRING) break;\r
+        r = fetch_token(tok, src, end, env);\r
+        if (r < 0) return r;\r
+        if (r != TK_STRING) break;\r
 \r
-       r = onig_node_str_cat(*np, tok->backp, *src);\r
-       if (r < 0) return r;\r
+        r = onig_node_str_cat(*np, tok->backp, *src);\r
+        if (r < 0) return r;\r
       }\r
 \r
     string_end:\r
@@ -5119,36 +7787,36 @@ parse_exp(Node** np, OnigToken* tok, int term,
       CHECK_NULL_RETURN_MEMERR(*np);\r
       len = 1;\r
       while (1) {\r
-       if (len >= ONIGENC_MBC_MINLEN(env->enc)) {\r
-         if (len == enclen(env->enc, NSTR(*np)->s)) {\r
-           r = fetch_token(tok, src, end, env);\r
-           NSTRING_CLEAR_RAW(*np);\r
-           goto string_end;\r
-         }\r
-       }\r
-\r
-       r = fetch_token(tok, src, end, env);\r
-       if (r < 0) return r;\r
-       if (r != TK_RAW_BYTE) {\r
-         /* Don't use this, it is wrong for little endian encodings. */\r
+        if (len >= ONIGENC_MBC_MINLEN(env->enc)) {\r
+          if (len == enclen(env->enc, STR_(*np)->s)) {/* should not enclen_end() */\r
+            r = fetch_token(tok, src, end, env);\r
+            NODE_STRING_CLEAR_RAW(*np);\r
+            goto string_end;\r
+          }\r
+        }\r
+\r
+        r = fetch_token(tok, src, end, env);\r
+        if (r < 0) return r;\r
+        if (r != TK_RAW_BYTE) {\r
+          /* Don't use this, it is wrong for little endian encodings. */\r
 #ifdef USE_PAD_TO_SHORT_BYTE_CHAR\r
-         int rem;\r
-         if (len < ONIGENC_MBC_MINLEN(env->enc)) {\r
-           rem = ONIGENC_MBC_MINLEN(env->enc) - len;\r
-           (void )node_str_head_pad(NSTR(*np), rem, (UChar )0);\r
-           if (len + rem == enclen(env->enc, NSTR(*np)->s)) {\r
-             NSTRING_CLEAR_RAW(*np);\r
-             goto string_end;\r
-           }\r
-         }\r
+          int rem;\r
+          if (len < ONIGENC_MBC_MINLEN(env->enc)) {\r
+            rem = ONIGENC_MBC_MINLEN(env->enc) - len;\r
+            (void )node_str_head_pad(STR_(*np), rem, (UChar )0);\r
+            if (len + rem == enclen(env->enc, STR_(*np)->s)) {\r
+              NODE_STRING_CLEAR_RAW(*np);\r
+              goto string_end;\r
+            }\r
+          }\r
 #endif\r
-         return ONIGERR_TOO_SHORT_MULTI_BYTE_STRING;\r
-       }\r
+          return ONIGERR_TOO_SHORT_MULTI_BYTE_STRING;\r
+        }\r
 \r
-       r = node_str_cat_char(*np, (UChar )tok->u.c);\r
-       if (r < 0) return r;\r
+        r = node_str_cat_char(*np, (UChar )tok->u.c);\r
+        if (r < 0) return r;\r
 \r
-       len++;\r
+        len++;\r
       }\r
     }\r
     break;\r
@@ -5177,7 +7845,7 @@ parse_exp(Node** np, OnigToken* tok, int term,
       qstart = *src;\r
       qend = find_str_position(end_op, 2, qstart, end, &nextp, env->enc);\r
       if (IS_NULL(qend)) {\r
-       nextp = qend = end;\r
+        nextp = qend = end;\r
       }\r
       *np = node_new_str(qstart, qend);\r
       CHECK_NULL_RETURN_MEMERR(*np);\r
@@ -5189,83 +7857,27 @@ parse_exp(Node** np, OnigToken* tok, int term,
     {\r
       switch (tok->u.prop.ctype) {\r
       case ONIGENC_CTYPE_WORD:\r
-       *np = node_new_ctype(tok->u.prop.ctype, tok->u.prop.not);\r
-       CHECK_NULL_RETURN_MEMERR(*np);\r
-       break;\r
+        *np = node_new_ctype(tok->u.prop.ctype, tok->u.prop.not, env->options);\r
+        CHECK_NULL_RETURN_MEMERR(*np);\r
+        break;\r
 \r
       case ONIGENC_CTYPE_SPACE:\r
       case ONIGENC_CTYPE_DIGIT:\r
       case ONIGENC_CTYPE_XDIGIT:\r
-       {\r
-         CClassNode* cc;\r
-\r
-#ifdef USE_SHARED_CCLASS_TABLE\r
-          const OnigCodePoint *mbr;\r
-         OnigCodePoint sb_out;\r
-\r
-          r = ONIGENC_GET_CTYPE_CODE_RANGE(env->enc, tok->u.prop.ctype,\r
-                                          &sb_out, &mbr);\r
-          if (r == 0 &&\r
-              ONIGENC_CODE_RANGE_NUM(mbr)\r
-              >= THRESHOLD_RANGE_NUM_FOR_SHARE_CCLASS) {\r
-            type_cclass_key  key;\r
-            type_cclass_key* new_key;\r
-\r
-            key.enc  = env->enc;\r
-            key.not  = tok->u.prop.not;\r
-            key.type = tok->u.prop.ctype;\r
-\r
-            THREAD_ATOMIC_START;\r
-\r
-            if (IS_NULL(OnigTypeCClassTable)) {\r
-              OnigTypeCClassTable\r
-                = onig_st_init_table_with_size(&type_type_cclass_hash, 10);\r
-              if (IS_NULL(OnigTypeCClassTable)) {\r
-                THREAD_ATOMIC_END;\r
-                return ONIGERR_MEMORY;\r
-              }\r
-            }\r
-            else {\r
-              if (onig_st_lookup(OnigTypeCClassTable, (st_data_t )(UINTN)&key,\r
-                                 (st_data_t* )np)) {\r
-                THREAD_ATOMIC_END;\r
-                break;\r
-              }\r
-            }\r
-\r
-            *np = node_new_cclass_by_codepoint_range(tok->u.prop.not,\r
-                                                    sb_out, mbr);\r
-            if (IS_NULL(*np)) {\r
-              THREAD_ATOMIC_END;\r
-              return ONIGERR_MEMORY;\r
-            }\r
-\r
-            cc = NCCLASS(*np);\r
-            NCCLASS_SET_SHARE(cc);\r
-            new_key = (type_cclass_key* )xmalloc(sizeof(type_cclass_key));\r
-            CHECK_NULL_RETURN_MEMERR(new_key);\r
-           xmemcpy(new_key, &key, sizeof(type_cclass_key));\r
-            onig_st_add_direct(OnigTypeCClassTable, (st_data_t )(UINTN)new_key,\r
-                               (st_data_t )(UINTN)*np);\r
-            \r
-            THREAD_ATOMIC_END;\r
-          }\r
-          else {\r
-#endif\r
-            *np = node_new_cclass();\r
-            CHECK_NULL_RETURN_MEMERR(*np);\r
-            cc = NCCLASS(*np);\r
-            add_ctype_to_cc(cc, tok->u.prop.ctype, 0, env);\r
-            if (tok->u.prop.not != 0) NCCLASS_SET_NOT(cc);\r
-#ifdef USE_SHARED_CCLASS_TABLE\r
-          }\r
-#endif\r
-       }\r
-       break;\r
+        {\r
+          CClassNode* cc;\r
+\r
+          *np = node_new_cclass();\r
+          CHECK_NULL_RETURN_MEMERR(*np);\r
+          cc = CCLASS_(*np);\r
+          add_ctype_to_cc(cc, tok->u.prop.ctype, 0, env);\r
+          if (tok->u.prop.not != 0) NCCLASS_SET_NOT(cc);\r
+        }\r
+        break;\r
 \r
       default:\r
-       return ONIGERR_PARSER_BUG;\r
-       break;\r
+        return ONIGERR_PARSER_BUG;\r
+        break;\r
       }\r
     }\r
     break;\r
@@ -5282,29 +7894,29 @@ parse_exp(Node** np, OnigToken* tok, int term,
       r = parse_char_class(np, tok, src, end, env);\r
       if (r != 0) return r;\r
 \r
-      cc = NCCLASS(*np);\r
-      if (IS_IGNORECASE(env->option)) {\r
-       IApplyCaseFoldArg iarg;\r
-\r
-       iarg.env      = env;\r
-       iarg.cc       = cc;\r
-       iarg.alt_root = NULL_NODE;\r
-       iarg.ptail    = &(iarg.alt_root);\r
-\r
-       r = ONIGENC_APPLY_ALL_CASE_FOLD(env->enc, env->case_fold_flag,\r
-                                       i_apply_case_fold, &iarg);\r
-       if (r != 0) {\r
-         onig_node_free(iarg.alt_root);\r
-         return r;\r
-       }\r
-       if (IS_NOT_NULL(iarg.alt_root)) {\r
+      cc = CCLASS_(*np);\r
+      if (IS_IGNORECASE(env->options)) {\r
+        IApplyCaseFoldArg iarg;\r
+\r
+        iarg.env      = env;\r
+        iarg.cc       = cc;\r
+        iarg.alt_root = NULL_NODE;\r
+        iarg.ptail    = &(iarg.alt_root);\r
+\r
+        r = ONIGENC_APPLY_ALL_CASE_FOLD(env->enc, env->case_fold_flag,\r
+                                        i_apply_case_fold, &iarg);\r
+        if (r != 0) {\r
+          onig_node_free(iarg.alt_root);\r
+          return r;\r
+        }\r
+        if (IS_NOT_NULL(iarg.alt_root)) {\r
           Node* work = onig_node_new_alt(*np, iarg.alt_root);\r
           if (IS_NULL(work)) {\r
             onig_node_free(iarg.alt_root);\r
             return ONIGERR_MEMORY;\r
           }\r
           *np = work;\r
-       }\r
+        }\r
       }\r
     }\r
     break;\r
@@ -5319,59 +7931,85 @@ parse_exp(Node** np, OnigToken* tok, int term,
     CHECK_NULL_RETURN_MEMERR(*np);\r
     qn = node_new_quantifier(0, REPEAT_INFINITE, 0);\r
     CHECK_NULL_RETURN_MEMERR(qn);\r
-    NQTFR(qn)->target = *np;\r
+    NODE_BODY(qn) = *np;\r
     *np = qn;\r
     break;\r
 \r
   case TK_BACKREF:\r
     len = tok->u.backref.num;\r
     *np = node_new_backref(len,\r
-                  (len > 1 ? tok->u.backref.refs : &(tok->u.backref.ref1)),\r
-                          tok->u.backref.by_name,\r
+                  (len > 1 ? tok->u.backref.refs : &(tok->u.backref.ref1)),\r
+                  tok->u.backref.by_name,\r
 #ifdef USE_BACKREF_WITH_LEVEL\r
-                          tok->u.backref.exist_level,\r
-                          tok->u.backref.level,\r
+                           tok->u.backref.exist_level,\r
+                           tok->u.backref.level,\r
 #endif\r
-                          env);\r
+                           env);\r
     CHECK_NULL_RETURN_MEMERR(*np);\r
     break;\r
 \r
-#ifdef USE_SUBEXP_CALL\r
+#ifdef USE_CALL\r
   case TK_CALL:\r
     {\r
       int gnum = tok->u.call.gnum;\r
 \r
-      if (gnum < 0) {\r
-       gnum = BACKREF_REL_TO_ABS(gnum, env);\r
-       if (gnum <= 0)\r
-         return ONIGERR_INVALID_BACKREF;\r
-      }\r
-      *np = node_new_call(tok->u.call.name, tok->u.call.name_end, gnum);\r
+      *np = node_new_call(tok->u.call.name, tok->u.call.name_end,\r
+                          gnum, tok->u.call.by_number);\r
       CHECK_NULL_RETURN_MEMERR(*np);\r
       env->num_call++;\r
+      if (tok->u.call.by_number != 0 && gnum == 0) {\r
+        env->has_call_zero = 1;\r
+      }\r
     }\r
     break;\r
 #endif\r
 \r
   case TK_ANCHOR:\r
-    *np = onig_node_new_anchor(tok->u.anchor);\r
-    CHECK_NULL_RETURN_MEMERR(*np);\r
+    {\r
+      int ascii_mode =\r
+        IS_WORD_ASCII(env->options) && IS_WORD_ANCHOR_TYPE(tok->u.anchor) ? 1 : 0;\r
+      *np = onig_node_new_anchor(tok->u.anchor, ascii_mode);\r
+    }\r
     break;\r
 \r
   case TK_OP_REPEAT:\r
   case TK_INTERVAL:\r
     if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS)) {\r
       if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS))\r
-       return ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED;\r
+        return ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED;\r
       else\r
-       *np = node_new_empty();\r
-  CHECK_NULL_RETURN_MEMERR(*np);\r
+        *np = node_new_empty();\r
     }\r
     else {\r
       goto tk_byte;\r
     }\r
     break;\r
 \r
+  case TK_KEEP:\r
+    r = node_new_keep(np, env);\r
+    if (r < 0) return r;\r
+    break;\r
+\r
+  case TK_GENERAL_NEWLINE:\r
+    r = node_new_general_newline(np, env);\r
+    if (r < 0) return r;\r
+    break;\r
+\r
+  case TK_NO_NEWLINE:\r
+    r = node_new_no_newline(np, env);\r
+    if (r < 0) return r;\r
+    break;\r
+\r
+  case TK_TRUE_ANYCHAR:\r
+    r = node_new_true_anychar(np, env);\r
+    if (r < 0) return r;\r
+    break;\r
+\r
+  case TK_EXTENDED_GRAPHEME_CLUSTER:\r
+    r = make_extended_grapheme_cluster(np, env);\r
+    if (r < 0) return r;\r
+    break;\r
+\r
   default:\r
     return ONIGERR_PARSER_BUG;\r
     break;\r
@@ -5387,49 +8025,49 @@ parse_exp(Node** np, OnigToken* tok, int term,
   repeat:\r
     if (r == TK_OP_REPEAT || r == TK_INTERVAL) {\r
       if (is_invalid_quantifier_target(*targetp))\r
-       return ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID;\r
+        return ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID;\r
 \r
       qn = node_new_quantifier(tok->u.repeat.lower, tok->u.repeat.upper,\r
-                              (r == TK_INTERVAL ? 1 : 0));\r
+                               (r == TK_INTERVAL ? 1 : 0));\r
       CHECK_NULL_RETURN_MEMERR(qn);\r
-      NQTFR(qn)->greedy = tok->u.repeat.greedy;\r
+      QUANT_(qn)->greedy = tok->u.repeat.greedy;\r
       r = set_quantifier(qn, *targetp, group, env);\r
       if (r < 0) {\r
-       onig_node_free(qn);\r
-       return r;\r
+        onig_node_free(qn);\r
+        return r;\r
       }\r
 \r
       if (tok->u.repeat.possessive != 0) {\r
-       Node* en;\r
-       en = node_new_enclose(ENCLOSE_STOP_BACKTRACK);\r
-       if (IS_NULL(en)) {\r
-         onig_node_free(qn);\r
-         return ONIGERR_MEMORY;\r
-       }\r
-       NENCLOSE(en)->target = qn;\r
-       qn = en;\r
+        Node* en;\r
+        en = node_new_enclosure(ENCLOSURE_STOP_BACKTRACK);\r
+        if (IS_NULL(en)) {\r
+          onig_node_free(qn);\r
+          return ONIGERR_MEMORY;\r
+        }\r
+        NODE_BODY(en) = qn;\r
+        qn = en;\r
       }\r
 \r
       if (r == 0) {\r
-       *targetp = qn;\r
+        *targetp = qn;\r
       }\r
       else if (r == 1) {\r
-       onig_node_free(qn);\r
+        onig_node_free(qn);\r
       }\r
       else if (r == 2) { /* split case: /abc+/ */\r
-       Node *tmp;\r
-\r
-       *targetp = node_new_list(*targetp, NULL);\r
-       if (IS_NULL(*targetp)) {\r
-         onig_node_free(qn);\r
-         return ONIGERR_MEMORY;\r
-       }\r
-       tmp = NCDR(*targetp) = node_new_list(qn, NULL);\r
-       if (IS_NULL(tmp)) {\r
-         onig_node_free(qn);\r
-         return ONIGERR_MEMORY;\r
-       }\r
-       targetp = &(NCAR(tmp));\r
+        Node *tmp;\r
+\r
+        *targetp = node_new_list(*targetp, NULL);\r
+        if (IS_NULL(*targetp)) {\r
+          onig_node_free(qn);\r
+          return ONIGERR_MEMORY;\r
+        }\r
+        tmp = NODE_CDR(*targetp) = node_new_list(qn, NULL);\r
+        if (IS_NULL(tmp)) {\r
+          onig_node_free(qn);\r
+          return ONIGERR_MEMORY;\r
+        }\r
+        targetp = &(NODE_CAR(tmp));\r
       }\r
       goto re_entry;\r
     }\r
@@ -5439,36 +8077,40 @@ parse_exp(Node** np, OnigToken* tok, int term,
 }\r
 \r
 static int\r
-parse_branch(Node** top, OnigToken* tok, int term,\r
-            UChar** src, UChar* end, ScanEnv* env)\r
+parse_branch(Node** top, OnigToken* tok, int term, UChar** src, UChar* end,\r
+             ScanEnv* env)\r
 {\r
   int r;\r
   Node *node, **headp;\r
 \r
   *top = NULL;\r
   r = parse_exp(&node, tok, term, src, end, env);\r
-  if (r < 0) return r;\r
+  if (r < 0) {\r
+    onig_node_free(node);\r
+    return r;\r
+  }\r
 \r
   if (r == TK_EOT || r == term || r == TK_ALT) {\r
     *top = node;\r
   }\r
   else {\r
     *top  = node_new_list(node, NULL);\r
-    CHECK_NULL_RETURN_MEMERR(*top);\r
-    headp = &(NCDR(*top));\r
+    headp = &(NODE_CDR(*top));\r
     while (r != TK_EOT && r != term && r != TK_ALT) {\r
       r = parse_exp(&node, tok, term, src, end, env);\r
-      CHECK_NULL_RETURN_MEMERR(node);\r
-      if (r < 0) return r;\r
+      if (r < 0) {\r
+        onig_node_free(node);\r
+        return r;\r
+      }\r
 \r
-      if (NTYPE(node) == NT_LIST) {\r
-       *headp = node;\r
-       while (IS_NOT_NULL(NCDR(node))) node = NCDR(node);\r
-       headp = &(NCDR(node));\r
+      if (NODE_TYPE(node) == NODE_LIST) {\r
+        *headp = node;\r
+        while (IS_NOT_NULL(NODE_CDR(node))) node = NODE_CDR(node);\r
+        headp = &(NODE_CDR(node));\r
       }\r
       else {\r
-       *headp = node_new_list(node, NULL);\r
-       headp = &(NCDR(*headp));\r
+        *headp = node_new_list(node, NULL);\r
+        headp = &(NODE_CDR(*headp));\r
       }\r
     }\r
   }\r
@@ -5478,13 +8120,16 @@ parse_branch(Node** top, OnigToken* tok, int term,
 \r
 /* term_tok: TK_EOT or TK_SUBEXP_CLOSE */\r
 static int\r
-parse_subexp(Node** top, OnigToken* tok, int term,\r
-            UChar** src, UChar* end, ScanEnv* env)\r
+parse_subexp(Node** top, OnigToken* tok, int term, UChar** src, UChar* end,\r
+             ScanEnv* env)\r
 {\r
   int r;\r
   Node *node, **headp;\r
 \r
   *top = NULL;\r
+  env->parse_depth++;\r
+  if (env->parse_depth > ParseDepthLimit)\r
+    return ONIGERR_PARSE_DEPTH_LIMIT_OVER;\r
   r = parse_branch(&node, tok, term, src, end, env);\r
   if (r < 0) {\r
     onig_node_free(node);\r
@@ -5496,22 +8141,24 @@ parse_subexp(Node** top, OnigToken* tok, int term,
   }\r
   else if (r == TK_ALT) {\r
     *top  = onig_node_new_alt(node, NULL);\r
-    CHECK_NULL_RETURN_MEMERR(*top);\r
-    headp = &(NCDR(*top));\r
+    headp = &(NODE_CDR(*top));\r
     while (r == TK_ALT) {\r
       r = fetch_token(tok, src, end, env);\r
       if (r < 0) return r;\r
       r = parse_branch(&node, tok, term, src, end, env);\r
-      if (r < 0) return r;\r
-\r
+      if (r < 0) {\r
+        onig_node_free(node);\r
+        return r;\r
+      }\r
       *headp = onig_node_new_alt(node, NULL);\r
-      headp = &(NCDR(*headp));\r
+      headp = &(NODE_CDR(*headp));\r
     }\r
 \r
     if (tok->type != (enum TokenSyms )term)\r
       goto err;\r
   }\r
   else {\r
+    onig_node_free(node);\r
   err:\r
     if (term == TK_SUBEXP_CLOSE)\r
       return ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS;\r
@@ -5519,6 +8166,7 @@ parse_subexp(Node** top, OnigToken* tok, int term,
       return ONIGERR_PARSER_BUG;\r
   }\r
 \r
+  env->parse_depth--;\r
   return r;\r
 }\r
 \r
@@ -5532,22 +8180,46 @@ parse_regexp(Node** top, UChar** src, UChar* end, ScanEnv* env)
   if (r < 0) return r;\r
   r = parse_subexp(top, &tok, TK_EOT, src, end, env);\r
   if (r < 0) return r;\r
+\r
+  return 0;\r
+}\r
+\r
+#ifdef USE_CALL\r
+static int\r
+make_call_zero_body(Node* node, ScanEnv* env, Node** rnode)\r
+{\r
+  int r;\r
+\r
+  Node* x = node_new_memory(0 /* 0: is not named */);\r
+  CHECK_NULL_RETURN_MEMERR(x);\r
+\r
+  NODE_BODY(x) = node;\r
+  ENCLOSURE_(x)->m.regnum = 0;\r
+  r = scan_env_set_mem_node(env, 0, x);\r
+  if (r != 0) {\r
+    onig_node_free(x);\r
+    return r;\r
+  }\r
+\r
+  *rnode = x;\r
   return 0;\r
 }\r
+#endif\r
 \r
 extern int\r
-onig_parse_make_tree(Node** root, const UChar* pattern, const UChar* end,\r
-                    regex_t* reg, ScanEnv* env)\r
+onig_parse_tree(Node** root, const UChar* pattern, const UChar* end,\r
+                regex_t* reg, ScanEnv* env)\r
 {\r
   int r;\r
   UChar* p;\r
+#ifdef USE_CALLOUT\r
+  RegexExt* ext;\r
+#endif\r
 \r
-#ifdef USE_NAMED_GROUP\r
   names_clear(reg);\r
-#endif\r
 \r
   scan_env_clear(env);\r
-  env->option         = reg->options;\r
+  env->options        = reg->options;\r
   env->case_fold_flag = reg->case_fold_flag;\r
   env->enc            = reg->enc;\r
   env->syntax         = reg->syntax;\r
@@ -5556,15 +8228,40 @@ onig_parse_make_tree(Node** root, const UChar* pattern, const UChar* end,
   env->reg            = reg;\r
 \r
   *root = NULL;\r
+\r
+  if (! ONIGENC_IS_VALID_MBC_STRING(env->enc, pattern, end))\r
+    return ONIGERR_INVALID_WIDE_CHAR_VALUE;\r
+\r
   p = (UChar* )pattern;\r
   r = parse_regexp(root, &p, (UChar* )end, env);\r
+\r
+#ifdef USE_CALL\r
+  if (r != 0) return r;\r
+\r
+  if (env->has_call_zero != 0) {\r
+    Node* zero_node;\r
+    r = make_call_zero_body(*root, env, &zero_node);\r
+    if (r != 0) return r;\r
+\r
+    *root = zero_node;\r
+  }\r
+#endif\r
+\r
   reg->num_mem = env->num_mem;\r
+\r
+#ifdef USE_CALLOUT\r
+  ext = REG_EXTP(reg);\r
+  if (IS_NOT_NULL(ext) && ext->callout_num > 0) {\r
+    r = setup_ext_callout_list_values(reg);\r
+  }\r
+#endif\r
+\r
   return r;\r
 }\r
 \r
 extern void\r
 onig_scan_env_set_error_string(ScanEnv* env, int ecode ARG_UNUSED,\r
-                               UChar* arg, UChar* arg_end)\r
+                               UChar* arg, UChar* arg_end)\r
 {\r
   env->error     = arg;\r
   env->error_end = arg_end;\r
index f1eb8926401135b163b3e58a0ec45c30e29b27c7..e0086cd6c90b3f281d9b49fed7e049bc89194cb9 100644 (file)
@@ -4,10 +4,8 @@
   regparse.h -  Oniguruma (regular expression library)\r
 **********************************************************************/\r
 /*-\r
- * Copyright (c) 2002-2007  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
  * All rights reserved.\r
- * \r
- * (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>\r
  *\r
  * Redistribution and use in source and binary forms, with or without\r
  * modification, are permitted provided that the following conditions\r
 #include "regint.h"\r
 \r
 /* node type */\r
-#define NT_STR         0\r
-#define NT_CCLASS      1\r
-#define NT_CTYPE       2\r
-#define NT_CANY        3\r
-#define NT_BREF        4\r
-#define NT_QTFR        5\r
-#define NT_ENCLOSE     6\r
-#define NT_ANCHOR      7\r
-#define NT_LIST        8\r
-#define NT_ALT         9\r
-#define NT_CALL       10\r
+typedef enum {\r
+  NODE_STRING    =  0,\r
+  NODE_CCLASS    =  1,\r
+  NODE_CTYPE     =  2,\r
+  NODE_BACKREF   =  3,\r
+  NODE_QUANT     =  4,\r
+  NODE_ENCLOSURE =  5,\r
+  NODE_ANCHOR    =  6,\r
+  NODE_LIST      =  7,\r
+  NODE_ALT       =  8,\r
+  NODE_CALL      =  9,\r
+  NODE_GIMMICK   = 10\r
+} NodeType;\r
+\r
+enum GimmickType {\r
+  GIMMICK_FAIL = 0,\r
+  GIMMICK_KEEP = 1,\r
+  GIMMICK_SAVE = 2,\r
+  GIMMICK_UPDATE_VAR = 3,\r
+#ifdef USE_CALLOUT\r
+  GIMMICK_CALLOUT = 4,\r
+#endif\r
+};\r
+\r
 \r
 /* node type bit */\r
-#define NTYPE2BIT(type)      (1<<(type))\r
-\r
-#define BIT_NT_STR        NTYPE2BIT(NT_STR)\r
-#define BIT_NT_CCLASS     NTYPE2BIT(NT_CCLASS)\r
-#define BIT_NT_CTYPE      NTYPE2BIT(NT_CTYPE)\r
-#define BIT_NT_CANY       NTYPE2BIT(NT_CANY)\r
-#define BIT_NT_BREF       NTYPE2BIT(NT_BREF)\r
-#define BIT_NT_QTFR       NTYPE2BIT(NT_QTFR)\r
-#define BIT_NT_ENCLOSE    NTYPE2BIT(NT_ENCLOSE)\r
-#define BIT_NT_ANCHOR     NTYPE2BIT(NT_ANCHOR)\r
-#define BIT_NT_LIST       NTYPE2BIT(NT_LIST)\r
-#define BIT_NT_ALT        NTYPE2BIT(NT_ALT)\r
-#define BIT_NT_CALL       NTYPE2BIT(NT_CALL)\r
-\r
-#define IS_NODE_TYPE_SIMPLE(type) \\r
-  ((NTYPE2BIT(type) & (BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE |\\r
-                       BIT_NT_CANY | BIT_NT_BREF)) != 0)\r
-\r
-#define NTYPE(node)             ((node)->u.base.type)\r
-#define SET_NTYPE(node, ntype)   (node)->u.base.type = (ntype)\r
-\r
-#define NSTR(node)         (&((node)->u.str))\r
-#define NCCLASS(node)      (&((node)->u.cclass))\r
-#define NCTYPE(node)       (&((node)->u.ctype))\r
-#define NBREF(node)        (&((node)->u.bref))\r
-#define NQTFR(node)        (&((node)->u.qtfr))\r
-#define NENCLOSE(node)     (&((node)->u.enclose))\r
-#define NANCHOR(node)      (&((node)->u.anchor))\r
-#define NCONS(node)        (&((node)->u.cons))\r
-#define NCALL(node)        (&((node)->u.call))\r
-\r
-#define NCAR(node)         (NCONS(node)->car)\r
-#define NCDR(node)         (NCONS(node)->cdr)\r
-\r
-\r
-\r
-#define ANCHOR_ANYCHAR_STAR_MASK (ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_ML)\r
+#define NODE_TYPE2BIT(type)      (1<<(type))\r
+\r
+#define NODE_BIT_STRING     NODE_TYPE2BIT(NODE_STRING)\r
+#define NODE_BIT_CCLASS     NODE_TYPE2BIT(NODE_CCLASS)\r
+#define NODE_BIT_CTYPE      NODE_TYPE2BIT(NODE_CTYPE)\r
+#define NODE_BIT_BACKREF    NODE_TYPE2BIT(NODE_BACKREF)\r
+#define NODE_BIT_QUANT      NODE_TYPE2BIT(NODE_QUANT)\r
+#define NODE_BIT_ENCLOSURE  NODE_TYPE2BIT(NODE_ENCLOSURE)\r
+#define NODE_BIT_ANCHOR     NODE_TYPE2BIT(NODE_ANCHOR)\r
+#define NODE_BIT_LIST       NODE_TYPE2BIT(NODE_LIST)\r
+#define NODE_BIT_ALT        NODE_TYPE2BIT(NODE_ALT)\r
+#define NODE_BIT_CALL       NODE_TYPE2BIT(NODE_CALL)\r
+#define NODE_BIT_GIMMICK    NODE_TYPE2BIT(NODE_GIMMICK)\r
+\r
+#define NODE_IS_SIMPLE_TYPE(node) \\r
+  ((NODE_TYPE2BIT(NODE_TYPE(node)) & \\r
+    (NODE_BIT_STRING | NODE_BIT_CCLASS | NODE_BIT_CTYPE | NODE_BIT_BACKREF)) != 0)\r
+\r
+#define NODE_TYPE(node)             ((node)->u.base.node_type)\r
+#define NODE_SET_TYPE(node, ntype)   (node)->u.base.node_type = (ntype)\r
+\r
+#define STR_(node)         (&((node)->u.str))\r
+#define CCLASS_(node)      (&((node)->u.cclass))\r
+#define CTYPE_(node)       (&((node)->u.ctype))\r
+#define BACKREF_(node)     (&((node)->u.backref))\r
+#define QUANT_(node)       (&((node)->u.quant))\r
+#define ENCLOSURE_(node)   (&((node)->u.enclosure))\r
+#define ANCHOR_(node)      (&((node)->u.anchor))\r
+#define CONS_(node)        (&((node)->u.cons))\r
+#define CALL_(node)        (&((node)->u.call))\r
+#define GIMMICK_(node)     (&((node)->u.gimmick))\r
+\r
+#define NODE_CAR(node)         (CONS_(node)->car)\r
+#define NODE_CDR(node)         (CONS_(node)->cdr)\r
+\r
+#define CTYPE_ANYCHAR      -1\r
+#define NODE_IS_ANYCHAR(node) \\r
+  (NODE_TYPE(node) == NODE_CTYPE && CTYPE_(node)->ctype == CTYPE_ANYCHAR)\r
+\r
+#define CTYPE_OPTION(node, reg) \\r
+  (NODE_IS_FIXED_OPTION(node) ? CTYPE_(node)->options : reg->options)\r
+\r
+\r
+#define ANCHOR_ANYCHAR_INF_MASK  (ANCHOR_ANYCHAR_INF | ANCHOR_ANYCHAR_INF_ML)\r
 #define ANCHOR_END_BUF_MASK      (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF)\r
 \r
-#define ENCLOSE_MEMORY           (1<<0)\r
-#define ENCLOSE_OPTION           (1<<1)\r
-#define ENCLOSE_STOP_BACKTRACK   (1<<2)\r
+enum EnclosureType {\r
+  ENCLOSURE_MEMORY = 0,\r
+  ENCLOSURE_OPTION = 1,\r
+  ENCLOSURE_STOP_BACKTRACK = 2,\r
+  ENCLOSURE_IF_ELSE = 3,\r
+};\r
 \r
-#define NODE_STR_MARGIN         16\r
-#define NODE_STR_BUF_SIZE       24  /* sizeof(CClassNode) - sizeof(int)*4 */\r
+#define NODE_STRING_MARGIN         16\r
+#define NODE_STRING_BUF_SIZE       24  /* sizeof(CClassNode) - sizeof(int)*4 */\r
 #define NODE_BACKREFS_SIZE       6\r
 \r
-#define NSTR_RAW                (1<<0) /* by backslashed number */\r
-#define NSTR_AMBIG              (1<<1)\r
-#define NSTR_DONT_GET_OPT_INFO  (1<<2)\r
-\r
-#define NSTRING_LEN(node)             ((int)((node)->u.str.end - (node)->u.str.s))\r
-#define NSTRING_SET_RAW(node)          (node)->u.str.flag |= NSTR_RAW\r
-#define NSTRING_CLEAR_RAW(node)        (node)->u.str.flag &= ~NSTR_RAW\r
-#define NSTRING_SET_AMBIG(node)        (node)->u.str.flag |= NSTR_AMBIG\r
-#define NSTRING_SET_DONT_GET_OPT_INFO(node) \\r
-  (node)->u.str.flag |= NSTR_DONT_GET_OPT_INFO\r
-#define NSTRING_IS_RAW(node)          (((node)->u.str.flag & NSTR_RAW)   != 0)\r
-#define NSTRING_IS_AMBIG(node)        (((node)->u.str.flag & NSTR_AMBIG) != 0)\r
-#define NSTRING_IS_DONT_GET_OPT_INFO(node) \\r
-  (((node)->u.str.flag & NSTR_DONT_GET_OPT_INFO) != 0)\r
+#define NODE_STRING_RAW                (1<<0) /* by backslashed number */\r
+#define NODE_STRING_AMBIG              (1<<1)\r
+#define NODE_STRING_DONT_GET_OPT_INFO  (1<<2)\r
+\r
+#define NODE_STRING_LEN(node)            (int )((node)->u.str.end - (node)->u.str.s)\r
+#define NODE_STRING_SET_RAW(node)        (node)->u.str.flag |= NODE_STRING_RAW\r
+#define NODE_STRING_CLEAR_RAW(node)      (node)->u.str.flag &= ~NODE_STRING_RAW\r
+#define NODE_STRING_SET_AMBIG(node)      (node)->u.str.flag |= NODE_STRING_AMBIG\r
+#define NODE_STRING_SET_DONT_GET_OPT_INFO(node) \\r
+  (node)->u.str.flag |= NODE_STRING_DONT_GET_OPT_INFO\r
+#define NODE_STRING_IS_RAW(node) \\r
+  (((node)->u.str.flag & NODE_STRING_RAW) != 0)\r
+#define NODE_STRING_IS_AMBIG(node) \\r
+  (((node)->u.str.flag & NODE_STRING_AMBIG) != 0)\r
+#define NODE_STRING_IS_DONT_GET_OPT_INFO(node) \\r
+  (((node)->u.str.flag & NODE_STRING_DONT_GET_OPT_INFO) != 0)\r
 \r
 #define BACKREFS_P(br) \\r
-  (IS_NOT_NULL((br)->back_dynamic) ? (br)->back_dynamic : (br)->back_static);\r
-\r
-#define NQ_TARGET_ISNOT_EMPTY     0\r
-#define NQ_TARGET_IS_EMPTY        1\r
-#define NQ_TARGET_IS_EMPTY_MEM    2\r
-#define NQ_TARGET_IS_EMPTY_REC    3\r
-\r
-/* status bits */\r
-#define NST_MIN_FIXED             (1<<0)\r
-#define NST_MAX_FIXED             (1<<1)\r
-#define NST_CLEN_FIXED            (1<<2)\r
-#define NST_MARK1                 (1<<3)\r
-#define NST_MARK2                 (1<<4)\r
-#define NST_MEM_BACKREFED         (1<<5)\r
-#define NST_STOP_BT_SIMPLE_REPEAT (1<<6)\r
-#define NST_RECURSION             (1<<7)\r
-#define NST_CALLED                (1<<8)\r
-#define NST_ADDR_FIXED            (1<<9)\r
-#define NST_NAMED_GROUP           (1<<10)\r
-#define NST_NAME_REF              (1<<11)\r
-#define NST_IN_REPEAT             (1<<12) /* STK_REPEAT is nested in stack. */\r
-#define NST_NEST_LEVEL            (1<<13)\r
-#define NST_BY_NUMBER             (1<<14) /* {n,m} */\r
-\r
-#define SET_ENCLOSE_STATUS(node,f)      (node)->u.enclose.state |=  (f)\r
-#define CLEAR_ENCLOSE_STATUS(node,f)    (node)->u.enclose.state &= ~(f)\r
-\r
-#define IS_ENCLOSE_CALLED(en)          (((en)->state & NST_CALLED)        != 0)\r
-#define IS_ENCLOSE_ADDR_FIXED(en)      (((en)->state & NST_ADDR_FIXED)    != 0)\r
-#define IS_ENCLOSE_RECURSION(en)       (((en)->state & NST_RECURSION)     != 0)\r
-#define IS_ENCLOSE_MARK1(en)           (((en)->state & NST_MARK1)         != 0)\r
-#define IS_ENCLOSE_MARK2(en)           (((en)->state & NST_MARK2)         != 0)\r
-#define IS_ENCLOSE_MIN_FIXED(en)       (((en)->state & NST_MIN_FIXED)     != 0)\r
-#define IS_ENCLOSE_MAX_FIXED(en)       (((en)->state & NST_MAX_FIXED)     != 0)\r
-#define IS_ENCLOSE_CLEN_FIXED(en)      (((en)->state & NST_CLEN_FIXED)    != 0)\r
-#define IS_ENCLOSE_STOP_BT_SIMPLE_REPEAT(en) \\r
-    (((en)->state & NST_STOP_BT_SIMPLE_REPEAT) != 0)\r
-#define IS_ENCLOSE_NAMED_GROUP(en)     (((en)->state & NST_NAMED_GROUP)   != 0)\r
-\r
-#define SET_CALL_RECURSION(node)       (node)->u.call.state |= NST_RECURSION\r
-#define IS_CALL_RECURSION(cn)          (((cn)->state & NST_RECURSION)  != 0)\r
-#define IS_CALL_NAME_REF(cn)           (((cn)->state & NST_NAME_REF)   != 0)\r
-#define IS_BACKREF_NAME_REF(bn)        (((bn)->state & NST_NAME_REF)   != 0)\r
-#define IS_BACKREF_NEST_LEVEL(bn)      (((bn)->state & NST_NEST_LEVEL) != 0)\r
-#define IS_QUANTIFIER_IN_REPEAT(qn)    (((qn)->state & NST_IN_REPEAT)  != 0)\r
-#define IS_QUANTIFIER_BY_NUMBER(qn)    (((qn)->state & NST_BY_NUMBER)  != 0)\r
-\r
-#define CALLNODE_REFNUM_UNDEF  -1\r
+  (IS_NOT_NULL((br)->back_dynamic) ? (br)->back_dynamic : (br)->back_static)\r
+\r
+enum QuantBodyEmpty {\r
+  QUANT_BODY_IS_NOT_EMPTY = 0,\r
+  QUANT_BODY_IS_EMPTY     = 1,\r
+  QUANT_BODY_IS_EMPTY_MEM = 2,\r
+  QUANT_BODY_IS_EMPTY_REC = 3\r
+};\r
+\r
+/* node status bits */\r
+#define NODE_ST_MIN_FIXED             (1<<0)\r
+#define NODE_ST_MAX_FIXED             (1<<1)\r
+#define NODE_ST_CLEN_FIXED            (1<<2)\r
+#define NODE_ST_MARK1                 (1<<3)\r
+#define NODE_ST_MARK2                 (1<<4)\r
+#define NODE_ST_STOP_BT_SIMPLE_REPEAT (1<<5)\r
+#define NODE_ST_RECURSION             (1<<6)\r
+#define NODE_ST_CALLED                (1<<7)\r
+#define NODE_ST_ADDR_FIXED            (1<<8)\r
+#define NODE_ST_NAMED_GROUP           (1<<9)\r
+#define NODE_ST_IN_REAL_REPEAT        (1<<10) /* STK_REPEAT is nested in stack. */\r
+#define NODE_ST_IN_ZERO_REPEAT        (1<<11) /* (....){0} */\r
+#define NODE_ST_IN_MULTI_ENTRY        (1<<12)\r
+#define NODE_ST_NEST_LEVEL            (1<<13)\r
+#define NODE_ST_BY_NUMBER             (1<<14) /* {n,m} */\r
+#define NODE_ST_BY_NAME               (1<<15) /* backref by name */\r
+#define NODE_ST_BACKREF               (1<<16)\r
+#define NODE_ST_CHECKER               (1<<17)\r
+#define NODE_ST_FIXED_OPTION          (1<<18)\r
+#define NODE_ST_PROHIBIT_RECURSION    (1<<19)\r
+#define NODE_ST_SUPER                 (1<<20)\r
+\r
+\r
+#define NODE_STATUS(node)           (((Node* )node)->u.base.status)\r
+#define NODE_STATUS_ADD(node,f)     (NODE_STATUS(node) |= (NODE_ST_ ## f))\r
+#define NODE_STATUS_REMOVE(node,f)  (NODE_STATUS(node) &= ~(NODE_ST_ ## f))\r
+\r
+#define NODE_IS_BY_NUMBER(node)       ((NODE_STATUS(node) & NODE_ST_BY_NUMBER)      != 0)\r
+#define NODE_IS_IN_REAL_REPEAT(node)  ((NODE_STATUS(node) & NODE_ST_IN_REAL_REPEAT) != 0)\r
+#define NODE_IS_CALLED(node)          ((NODE_STATUS(node) & NODE_ST_CALLED)         != 0)\r
+#define NODE_IS_IN_MULTI_ENTRY(node)  ((NODE_STATUS(node) & NODE_ST_IN_MULTI_ENTRY) != 0)\r
+#define NODE_IS_RECURSION(node)       ((NODE_STATUS(node) & NODE_ST_RECURSION)      != 0)\r
+#define NODE_IS_IN_ZERO_REPEAT(node)  ((NODE_STATUS(node) & NODE_ST_IN_ZERO_REPEAT) != 0)\r
+#define NODE_IS_NAMED_GROUP(node)     ((NODE_STATUS(node) & NODE_ST_NAMED_GROUP)  != 0)\r
+#define NODE_IS_ADDR_FIXED(node)      ((NODE_STATUS(node) & NODE_ST_ADDR_FIXED)   != 0)\r
+#define NODE_IS_CLEN_FIXED(node)      ((NODE_STATUS(node) & NODE_ST_CLEN_FIXED)   != 0)\r
+#define NODE_IS_MIN_FIXED(node)       ((NODE_STATUS(node) & NODE_ST_MIN_FIXED)    != 0)\r
+#define NODE_IS_MAX_FIXED(node)       ((NODE_STATUS(node) & NODE_ST_MAX_FIXED)    != 0)\r
+#define NODE_IS_MARK1(node)           ((NODE_STATUS(node) & NODE_ST_MARK1)        != 0)\r
+#define NODE_IS_MARK2(node)           ((NODE_STATUS(node) & NODE_ST_MARK2)        != 0)\r
+#define NODE_IS_NEST_LEVEL(node)      ((NODE_STATUS(node) & NODE_ST_NEST_LEVEL)   != 0)\r
+#define NODE_IS_BY_NAME(node)         ((NODE_STATUS(node) & NODE_ST_BY_NAME)      != 0)\r
+#define NODE_IS_BACKREF(node)         ((NODE_STATUS(node) & NODE_ST_BACKREF)      != 0)\r
+#define NODE_IS_CHECKER(node)         ((NODE_STATUS(node) & NODE_ST_CHECKER)      != 0)\r
+#define NODE_IS_FIXED_OPTION(node)    ((NODE_STATUS(node) & NODE_ST_FIXED_OPTION) != 0)\r
+#define NODE_IS_SUPER(node)           ((NODE_STATUS(node) & NODE_ST_SUPER)        != 0)\r
+#define NODE_IS_PROHIBIT_RECURSION(node) \\r
+    ((NODE_STATUS(node) & NODE_ST_PROHIBIT_RECURSION) != 0)\r
+#define NODE_IS_STOP_BT_SIMPLE_REPEAT(node) \\r
+    ((NODE_STATUS(node) & NODE_ST_STOP_BT_SIMPLE_REPEAT) != 0)\r
+\r
+#define NODE_BODY(node)           ((node)->u.base.body)\r
+#define NODE_QUANT_BODY(node)      ((node)->body)\r
+#define NODE_ENCLOSURE_BODY(node)   ((node)->body)\r
+#define NODE_CALL_BODY(node)      ((node)->body)\r
+#define NODE_ANCHOR_BODY(node)    ((node)->body)\r
+\r
 \r
 typedef struct {\r
-  NodeBase base;\r
+  NodeType node_type;\r
+  int status;\r
+\r
   UChar* s;\r
   UChar* end;\r
   unsigned int flag;\r
   int    capa;    /* (allocated size - 1) or 0: use buf[] */\r
-  UChar  buf[NODE_STR_BUF_SIZE];\r
+  UChar  buf[NODE_STRING_BUF_SIZE];\r
 } StrNode;\r
 \r
 typedef struct {\r
-  NodeBase base;\r
-  int state;\r
-  struct _Node* target;\r
+  NodeType node_type;\r
+  int status;\r
+\r
+  unsigned int flags;\r
+  BitSet bs;\r
+  BBuf*  mbuf;   /* multi-byte info or NULL */\r
+} CClassNode;\r
+\r
+typedef struct {\r
+  NodeType node_type;\r
+  int status;\r
+  struct _Node* body;\r
+\r
   int lower;\r
   int upper;\r
   int greedy;\r
-  int target_empty_info;\r
+  enum QuantBodyEmpty body_empty_info;\r
   struct _Node* head_exact;\r
   struct _Node* next_head_exact;\r
   int is_refered;     /* include called node. don't eliminate even if {0} */\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-  int comb_exp_check_num;  /* 1,2,3...: check,  0: no check  */\r
-#endif\r
-} QtfrNode;\r
+} QuantNode;\r
 \r
 typedef struct {\r
-  NodeBase base;\r
-  int state;\r
-  int type;\r
-  int regnum;\r
-  OnigOptionType option;\r
-  struct _Node*  target;\r
-  AbsAddrType    call_addr;\r
+  NodeType node_type;\r
+  int status;\r
+  struct _Node* body;\r
+\r
+  enum EnclosureType type;\r
+  union {\r
+    struct {\r
+      int regnum;\r
+      AbsAddrType called_addr;\r
+      int entry_count;\r
+      int called_state;\r
+    } m;\r
+    struct {\r
+      OnigOptionType options;\r
+    } o;\r
+    struct {\r
+      /* body is condition */\r
+      struct _Node* Then;\r
+      struct _Node* Else;\r
+    } te;\r
+  };\r
   /* for multiple call reference */\r
-  OnigDistance min_len; /* min length (byte) */\r
-  OnigDistance max_len; /* max length (byte) */ \r
-  int char_len;         /* character length  */\r
-  int opt_count;        /* referenced count in optimize_node_left() */\r
-} EncloseNode;\r
+  OnigLen min_len;   /* min length (byte) */\r
+  OnigLen max_len;   /* max length (byte) */\r
+  int char_len;      /* character length  */\r
+  int opt_count;     /* referenced count in optimize_nodes() */\r
+} EnclosureNode;\r
 \r
-#ifdef USE_SUBEXP_CALL\r
+#ifdef USE_CALL\r
 \r
 typedef struct {\r
   int           offset;\r
@@ -213,101 +278,140 @@ typedef struct {
 } UnsetAddrList;\r
 \r
 typedef struct {\r
-  NodeBase base;\r
-  int     state;\r
+  NodeType node_type;\r
+  int status;\r
+  struct _Node* body; /* to EnclosureNode : ENCLOSURE_MEMORY */\r
+\r
+  int     by_number;\r
   int     group_num;\r
   UChar*  name;\r
   UChar*  name_end;\r
-  struct _Node*  target;  /* EncloseNode : ENCLOSE_MEMORY */\r
-  UnsetAddrList* unset_addr_list;\r
+  int     entry_count;\r
 } CallNode;\r
 \r
 #endif\r
 \r
 typedef struct {\r
-  NodeBase base;\r
-  int  state;\r
+  NodeType node_type;\r
+  int status;\r
+\r
   int  back_num;\r
   int  back_static[NODE_BACKREFS_SIZE];\r
   int* back_dynamic;\r
   int  nest_level;\r
-} BRefNode;\r
+} BackRefNode;\r
 \r
 typedef struct {\r
-  NodeBase base;\r
+  NodeType node_type;\r
+  int status;\r
+  struct _Node* body;\r
+\r
   int type;\r
-  struct _Node* target;\r
   int char_len;\r
+  int ascii_mode;\r
 } AnchorNode;\r
 \r
 typedef struct {\r
-  NodeBase base;\r
+  NodeType node_type;\r
+  int status;\r
+\r
   struct _Node* car;\r
   struct _Node* cdr;\r
 } ConsAltNode;\r
 \r
 typedef struct {\r
-  NodeBase base;\r
+  NodeType node_type;\r
+  int status;\r
+\r
   int ctype;\r
   int not;\r
+  OnigOptionType options;\r
+  int ascii_mode;\r
 } CtypeNode;\r
 \r
+typedef struct {\r
+  NodeType node_type;\r
+  int status;\r
+\r
+  enum GimmickType type;\r
+  int  detail_type;\r
+  int  num;\r
+  int  id;\r
+} GimmickNode;\r
+\r
 typedef struct _Node {\r
   union {\r
-    NodeBase     base;\r
-    StrNode      str;\r
-    CClassNode   cclass;\r
-    QtfrNode     qtfr;\r
-    EncloseNode  enclose;\r
-    BRefNode     bref;\r
-    AnchorNode   anchor;\r
-    ConsAltNode  cons;\r
-    CtypeNode    ctype;\r
-#ifdef USE_SUBEXP_CALL\r
-    CallNode     call;\r
+    struct {\r
+      NodeType node_type;\r
+      int status;\r
+      struct _Node* body;\r
+    } base;\r
+\r
+    StrNode       str;\r
+    CClassNode    cclass;\r
+    QuantNode     quant;\r
+    EnclosureNode enclosure;\r
+    BackRefNode   backref;\r
+    AnchorNode    anchor;\r
+    ConsAltNode   cons;\r
+    CtypeNode     ctype;\r
+#ifdef USE_CALL\r
+    CallNode      call;\r
 #endif\r
+    GimmickNode   gimmick;\r
   } u;\r
 } Node;\r
 \r
 \r
 #define NULL_NODE  ((Node* )0)\r
 \r
-#define SCANENV_MEMNODES_SIZE               8\r
-#define SCANENV_MEM_NODES(senv)   \\r
- (IS_NOT_NULL((senv)->mem_nodes_dynamic) ? \\r
-    (senv)->mem_nodes_dynamic : (senv)->mem_nodes_static)\r
+#define SCANENV_MEMENV_SIZE               8\r
+#define SCANENV_MEMENV(senv) \\r
+ (IS_NOT_NULL((senv)->mem_env_dynamic) ? \\r
+    (senv)->mem_env_dynamic : (senv)->mem_env_static)\r
+\r
+typedef struct {\r
+  Node* node;\r
+#if 0\r
+  int in;\r
+  int recursion;\r
+#endif\r
+} MemEnv;\r
+\r
+typedef struct {\r
+  enum SaveType type;\r
+} SaveItem;\r
 \r
 typedef struct {\r
-  OnigOptionType   option;\r
+  OnigOptionType   options;\r
   OnigCaseFoldType case_fold_flag;\r
   OnigEncoding     enc;\r
   OnigSyntaxType*  syntax;\r
-  BitStatusType    capture_history;\r
-  BitStatusType    bt_mem_start;\r
-  BitStatusType    bt_mem_end;\r
-  BitStatusType    backrefed_mem;\r
+  MemStatusType    capture_history;\r
+  MemStatusType    bt_mem_start;\r
+  MemStatusType    bt_mem_end;\r
+  MemStatusType    backrefed_mem;\r
   UChar*           pattern;\r
   UChar*           pattern_end;\r
   UChar*           error;\r
   UChar*           error_end;\r
   regex_t*         reg;       /* for reg->names only */\r
   int              num_call;\r
-#ifdef USE_SUBEXP_CALL\r
+#ifdef USE_CALL\r
   UnsetAddrList*   unset_addr_list;\r
+  int              has_call_zero;\r
 #endif\r
   int              num_mem;\r
-#ifdef USE_NAMED_GROUP\r
   int              num_named;\r
-#endif\r
   int              mem_alloc;\r
-  Node*            mem_nodes_static[SCANENV_MEMNODES_SIZE];\r
-  Node**           mem_nodes_dynamic;\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-  int num_comb_exp_check;\r
-  int comb_exp_max_regnum;\r
-  int curr_max_regnum;\r
-  int has_recursion;\r
-#endif\r
+  MemEnv           mem_env_static[SCANENV_MEMENV_SIZE];\r
+  MemEnv*          mem_env_dynamic;\r
+  unsigned int     parse_depth;\r
+\r
+  int keep_num;\r
+  int save_num;\r
+  int save_alloc_num;\r
+  SaveItem* saves;\r
 } ScanEnv;\r
 \r
 \r
@@ -315,13 +419,11 @@ typedef struct {
 #define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)\r
 #define IS_SYNTAX_BV(syn, bvm)    (((syn)->behavior & (bvm)) != 0)\r
 \r
-#ifdef USE_NAMED_GROUP\r
 typedef struct {\r
   int new_val;\r
 } GroupNumRemap;\r
 \r
 extern int    onig_renumber_name_table P_((regex_t* reg, GroupNumRemap* map));\r
-#endif\r
 \r
 extern int    onig_strncmp P_((const UChar* s1, const UChar* s2, int n));\r
 extern void   onig_strcpy P_((UChar* dest, const UChar* src, const UChar* end));\r
@@ -332,22 +434,25 @@ extern void   onig_node_conv_to_str_node P_((Node* node, int raw));
 extern int    onig_node_str_cat P_((Node* node, const UChar* s, const UChar* end));\r
 extern int    onig_node_str_set P_((Node* node, const UChar* s, const UChar* end));\r
 extern void   onig_node_free P_((Node* node));\r
-extern Node*  onig_node_new_enclose P_((int type));\r
-extern Node*  onig_node_new_anchor P_((int type));\r
+extern Node*  onig_node_new_enclosure P_((int type));\r
+extern Node*  onig_node_new_anchor P_((int type, int ascii_mode));\r
 extern Node*  onig_node_new_str P_((const UChar* s, const UChar* end));\r
 extern Node*  onig_node_new_list P_((Node* left, Node* right));\r
 extern Node*  onig_node_list_add P_((Node* list, Node* x));\r
 extern Node*  onig_node_new_alt P_((Node* left, Node* right));\r
 extern void   onig_node_str_clear P_((Node* node));\r
-extern int    onig_free_node_list P_((void));\r
 extern int    onig_names_free P_((regex_t* reg));\r
-extern int    onig_parse_make_tree P_((Node** root, const UChar* pattern, const UChar* end, regex_t* reg, ScanEnv* env));\r
+extern int    onig_parse_tree P_((Node** root, const UChar* pattern, const UChar* end, regex_t* reg, ScanEnv* env));\r
 extern int    onig_free_shared_cclass_table P_((void));\r
+extern int    onig_is_code_in_cc P_((OnigEncoding enc, OnigCodePoint code, CClassNode* cc));\r
+extern OnigLen onig_get_tiny_min_len(Node* node, unsigned int inhibit_node_types, int* invalid_node);\r
+\r
+#ifdef USE_CALLOUT\r
+extern int onig_global_callout_names_free(void);\r
+#endif\r
 \r
 #ifdef ONIG_DEBUG\r
-#ifdef USE_NAMED_GROUP\r
 extern int onig_print_names(FILE*, regex_t*);\r
 #endif\r
-#endif\r
 \r
 #endif /* REGPARSE_H */\r
index fb1b9286a2063528436ea10ec121b99060952f91..a396df2acf1262346f239faf0f1a45741974497e 100644 (file)
@@ -2,11 +2,9 @@
   regposerr.c - Oniguruma (regular expression library)\r
 **********************************************************************/\r
 /*-\r
- * Copyright (c) 2002-2007  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
  * All rights reserved.\r
  *\r
- * (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>\r
- *\r
  * Redistribution and use in source and binary forms, with or without\r
  * modification, are permitted provided that the following conditions\r
  * are met:\r
  * SUCH DAMAGE.\r
  */\r
 \r
-/*#include "config.h"*/\r
+/* Can't include regint.h etc.. for conflict of regex_t.\r
+   Define ONIGURUMA_EXPORT here for onigposix.h.\r
+ */\r
+#ifndef ONIGURUMA_EXPORT\r
+#define ONIGURUMA_EXPORT\r
+#endif\r
+\r
+//#include "config.h"\r
 #include "onigposix.h"\r
 \r
 #if 0\r
 #  define ARG_UNUSED\r
 #endif\r
 \r
+#if defined(_WIN32) && !defined(__GNUC__)\r
+#define xsnprintf   sprintf_s\r
+#define xstrncpy(dest,src,size)   strncpy_s(dest,size,src,_TRUNCATE)\r
+#else\r
+#define xsnprintf   snprintf\r
+#define xstrncpy    strncpy\r
+#endif\r
+\r
 static char* ESTRING[] = {\r
   NULL,\r
   "failed to match",                         /* REG_NOMATCH    */\r
@@ -65,8 +78,7 @@ static char* ESTRING[] = {
   /* Extended errors */\r
   "internal error",                          /* REG_EONIG_INTERNAL */\r
   "invalid wide char value",                 /* REG_EONIG_BADWC    */\r
-  "invalid argument",                        /* REG_EONIG_BADARG   */\r
-  "multi-thread error"                       /* REG_EONIG_THREAD   */\r
+  "invalid argument"                         /* REG_EONIG_BADARG   */\r
 };\r
 \r
 //#include <stdio.h>\r
index 299b88c6cc20f1d2c63ef2b25afe6b56ab86de3e..54d456424d7040c17c91852b107b7085eac13173 100644 (file)
@@ -2,11 +2,9 @@
   regposix.c - Oniguruma (regular expression library)\r
 **********************************************************************/\r
 /*-\r
- * Copyright (c) 2002-2008  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
  * All rights reserved.\r
  *\r
- * (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>\r
- *\r
  * Redistribution and use in source and binary forms, with or without\r
  * modification, are permitted provided that the following conditions\r
  * are met:\r
@@ -42,7 +40,7 @@
   if (ONIGENC_MBC_MINLEN(enc) == 1) { \\r
     UChar* tmps = (UChar* )(s); \\r
     while (*tmps != 0) tmps++; \\r
-    len = (int)(tmps - (UChar* )(s)); \\r
+    len = (int )(tmps - (UChar* )(s));\\r
   } \\r
   else { \\r
     len = onigenc_str_bytelen_null(enc, (UChar* )s); \\r
@@ -60,8 +58,10 @@ onig2posix_error_code(int code)
   static const O2PERR o2p[] = {\r
     { ONIG_MISMATCH,                                      REG_NOMATCH },\r
     { ONIG_NO_SUPPORT_CONFIG,                             REG_EONIG_INTERNAL },\r
+    { ONIG_ABORT,                                         REG_EONIG_INTERNAL },\r
     { ONIGERR_MEMORY,                                     REG_ESPACE  },\r
     { ONIGERR_MATCH_STACK_LIMIT_OVER,                     REG_EONIG_INTERNAL },\r
+    { ONIGERR_RETRY_LIMIT_IN_MATCH_OVER,                  REG_EONIG_INTERNAL },\r
     { ONIGERR_TYPE_BUG,                                   REG_EONIG_INTERNAL },\r
     { ONIGERR_PARSER_BUG,                                 REG_EONIG_INTERNAL },\r
     { ONIGERR_STACK_BUG,                                  REG_EONIG_INTERNAL },\r
@@ -69,6 +69,7 @@ onig2posix_error_code(int code)
     { ONIGERR_UNEXPECTED_BYTECODE,                        REG_EONIG_INTERNAL },\r
     { ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED,             REG_EONIG_BADARG },\r
     { ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR, REG_EONIG_BADARG },\r
+    { ONIGERR_FAIL_TO_INITIALIZE,                         REG_EONIG_INTERNAL },\r
     { ONIGERR_INVALID_ARGUMENT,                           REG_EONIG_BADARG },\r
     { ONIGERR_END_PATTERN_AT_LEFT_BRACE,                  REG_EBRACE  },\r
     { ONIGERR_END_PATTERN_AT_LEFT_BRACKET,                REG_EBRACK  },\r
@@ -115,9 +116,17 @@ onig2posix_error_code(int code)
     { ONIGERR_NEVER_ENDING_RECURSION,                     REG_BADPAT },\r
     { ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY,      REG_BADPAT },\r
     { ONIGERR_INVALID_CHAR_PROPERTY_NAME,                 REG_BADPAT },\r
+    { ONIGERR_INVALID_IF_ELSE_SYNTAX,                     REG_BADPAT },\r
+    { ONIGERR_INVALID_ABSENT_GROUP_PATTERN,               REG_BADPAT },\r
+    { ONIGERR_INVALID_ABSENT_GROUP_GENERATOR_PATTERN,     REG_BADPAT },\r
+    { ONIGERR_INVALID_CALLOUT_PATTERN,                    REG_BADPAT },\r
+    { ONIGERR_INVALID_CALLOUT_NAME,                       REG_BADPAT },\r
+    { ONIGERR_UNDEFINED_CALLOUT_NAME,                     REG_BADPAT },\r
+    { ONIGERR_INVALID_CALLOUT_BODY,                       REG_BADPAT },\r
+    { ONIGERR_INVALID_CALLOUT_TAG_NAME,                   REG_BADPAT },\r
+    { ONIGERR_INVALID_CALLOUT_ARG,                        REG_BADPAT },\r
     { ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION,         REG_EONIG_BADARG },\r
-    { ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT,               REG_EONIG_THREAD }\r
-\r
+    { ONIGERR_LIBRARY_IS_NOT_INITIALIZED,                 REG_EONIG_INTERNAL }\r
   };\r
 \r
   int i;\r
@@ -241,11 +250,10 @@ reg_set_encoding(int mb_code)
   case REG_POSIX_ENCODING_UTF16_LE:\r
     enc = ONIG_ENCODING_UTF16_LE;\r
     break;\r
-\r
-  default:\r
-    return;\r
   }\r
 \r
+  onig_initialize(&enc, 1);\r
+\r
   onigenc_set_default_encoding(enc);\r
 }\r
 \r
index dc4d68183b149d2e4d0dd9dbd295ab72f4109598..95a4434e6402ad87c78ff77b396b08385445864b 100644 (file)
@@ -2,7 +2,7 @@
   regsyntax.c -  Oniguruma (regular expression library)\r
 **********************************************************************/\r
 /*-\r
- * Copyright (c) 2002-2006  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
  * All rights reserved.\r
  *\r
  * Redistribution and use in source and binary forms, with or without\r
@@ -168,13 +168,22 @@ OnigSyntaxType OnigSyntaxJava = {
 OnigSyntaxType OnigSyntaxPerl = {\r
   (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |\r
      ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |\r
-     ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_CONTROL_CHARS |\r
+     ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_O_BRACE_OCTAL |\r
+     ONIG_SYN_OP_ESC_CONTROL_CHARS |\r
      ONIG_SYN_OP_ESC_C_CONTROL )\r
    & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )\r
   , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE |\r
       ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL |\r
+      ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE |\r
+      ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP |\r
+      ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS |\r
+      ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME    |\r
+      ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER |\r
       ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY |\r
-      ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT )\r
+      ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT |\r
+      ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP |\r
+      ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE |\r
+      ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT )\r
   , SYN_GNU_REGEX_BV\r
   , ONIG_OPTION_SINGLELINE\r
   ,\r
@@ -192,16 +201,26 @@ OnigSyntaxType OnigSyntaxPerl = {
 OnigSyntaxType OnigSyntaxPerl_NG = {\r
   (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |\r
      ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |\r
-     ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_CONTROL_CHARS |\r
+     ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_O_BRACE_OCTAL |\r
+     ONIG_SYN_OP_ESC_CONTROL_CHARS |\r
      ONIG_SYN_OP_ESC_C_CONTROL )\r
    & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )\r
   , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE |\r
       ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL |\r
+      ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE |\r
+      ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP |\r
+      ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS |\r
+      ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME    |\r
+      ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER |\r
       ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY  |\r
       ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT |\r
       ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP       |\r
       ONIG_SYN_OP2_ESC_K_NAMED_BACKREF        |\r
-      ONIG_SYN_OP2_ESC_G_SUBEXP_CALL )\r
+      ONIG_SYN_OP2_ESC_G_SUBEXP_CALL |\r
+      ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP |\r
+      ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE |\r
+      ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT |\r
+      ONIG_SYN_OP2_QMARK_PERL_SUBEXP_CALL )\r
   , ( SYN_GNU_REGEX_BV |\r
       ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP |\r
       ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME )\r
@@ -223,7 +242,7 @@ extern int
 onig_set_default_syntax(OnigSyntaxType* syntax)\r
 {\r
   if (IS_NULL(syntax))\r
-    syntax = ONIG_SYNTAX_RUBY;\r
+    syntax = ONIG_SYNTAX_ONIGURUMA;\r
 \r
   OnigDefaultSyntax = syntax;\r
   return 0;\r
index 2c81244303e032fcc3cdff42ef6dd5698f540be6..5e6274f0612101d76261c2ee983c40fdfb271e2a 100644 (file)
@@ -2,7 +2,7 @@
   regversion.c -  Oniguruma (regular expression library)\r
 **********************************************************************/\r
 /*-\r
- * Copyright (c) 2002-2008  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
  * All rights reserved.\r
  *\r
  * Redistribution and use in source and binary forms, with or without\r
@@ -27,8 +27,8 @@
  * SUCH DAMAGE.\r
  */\r
 \r
-//#include "config.h"\r
 #include "oniguruma.h"\r
+#include "regint.h"\r
 //#include <stdio.h>\r
 \r
 extern const char*\r
@@ -36,12 +36,10 @@ onig_version(void)
 {\r
   static char s[12];\r
 \r
-  sprintf_s(s, \r
-          sizeof(s),\r
-          "%d.%d.%d",\r
-          ONIGURUMA_VERSION_MAJOR,\r
-          ONIGURUMA_VERSION_MINOR,\r
-          ONIGURUMA_VERSION_TEENY);\r
+  sprintf_s(s, sizeof(s), "%d.%d.%d",\r
+            ONIGURUMA_VERSION_MAJOR,\r
+            ONIGURUMA_VERSION_MINOR,\r
+            ONIGURUMA_VERSION_TEENY);\r
   return s;\r
 }\r
 \r
@@ -50,11 +48,10 @@ onig_copyright(void)
 {\r
   static char s[58];\r
 \r
-  sprintf_s(s,\r
-          sizeof(s),\r
-          "Oniguruma %d.%d.%d : Copyright (C) 2002-2008 K.Kosako",\r
-          ONIGURUMA_VERSION_MAJOR,\r
-          ONIGURUMA_VERSION_MINOR,\r
-          ONIGURUMA_VERSION_TEENY);\r
+  sprintf_s(s, sizeof(s),\r
+            "Oniguruma %d.%d.%d : Copyright (C) 2002-2018 K.Kosako",\r
+            ONIGURUMA_VERSION_MAJOR,\r
+            ONIGURUMA_VERSION_MINOR,\r
+            ONIGURUMA_VERSION_TEENY);\r
   return s;\r
 }\r
index 8dcfdc3eb1c276d49ca1c3a097fe149e805ba9e1..95fe4b0e06e8262a1827295feb27d528cd740543 100644 (file)
@@ -109,17 +109,16 @@ new_size(size)
 \r
 #if 0\r
     for (i=3; i<31; i++) {\r
-       if ((1<<i) > size) return 1<<i;\r
+      if ((1<<i) > size) return 1<<i;\r
     }\r
     return -1;\r
 #else\r
     int newsize;\r
 \r
     for (i = 0, newsize = MINSIZE;\r
-        i < (int )(sizeof(primes)/sizeof(primes[0]));\r
-        i++, newsize <<= 1)\r
-    {\r
-       if (newsize > size) return primes[i];\r
+         i < (int )(sizeof(primes)/sizeof(primes[0]));\r
+         i++, newsize <<= 1) {\r
+      if (newsize > size) return primes[i];\r
     }\r
     /* Ran out of polynomials */\r
     return -1;                 /* should raise exception */\r
@@ -131,11 +130,13 @@ static int collision = 0;
 static int init_st = 0;\r
 \r
 static void\r
-stat_col()\r
+stat_col(void)\r
 {\r
-    FILE *f = fopen("/tmp/col", "w");\r
-    fprintf(f, "collision: %d\n", collision);\r
-    fclose(f);\r
+  FILE *f = fopen("/tmp/col", "w");\r
+  if (f == 0) return ;\r
+\r
+  (void) fprintf(f, "collision: %d\n", collision);\r
+  (void) fclose(f);\r
 }\r
 #endif\r
 \r
@@ -144,77 +145,82 @@ st_init_table_with_size(type, size)
     struct st_hash_type *type;\r
     int size;\r
 {\r
-    st_table *tbl;\r
+  st_table *tbl;\r
 \r
 #ifdef HASH_LOG\r
-    if (init_st == 0) {\r
-       init_st = 1;\r
-       atexit(stat_col);\r
-    }\r
+  if (init_st == 0) {\r
+    init_st = 1;\r
+    atexit(stat_col);\r
+  }\r
 #endif\r
 \r
-    size = new_size(size);     /* round up to prime number */\r
+  size = new_size(size);       /* round up to prime number */\r
 \r
-    tbl = alloc(st_table);\r
-    CHECK_NULL_RETURN(tbl);\r
-    tbl->type = type;\r
-    tbl->num_entries = 0;\r
-    tbl->num_bins = size;\r
-    tbl->bins = (st_table_entry **)Calloc(size, sizeof(st_table_entry*));\r
+  tbl = alloc(st_table);\r
+  if (tbl == 0) return 0;\r
 \r
-    return tbl;\r
+  tbl->type = type;\r
+  tbl->num_entries = 0;\r
+  tbl->num_bins = size;\r
+  tbl->bins = (st_table_entry **)Calloc(size, sizeof(st_table_entry*));\r
+  if (tbl->bins == 0) {\r
+    free(tbl);\r
+    return 0;\r
+  }\r
+\r
+  return tbl;\r
 }\r
 \r
 st_table*\r
 st_init_table(type)\r
     struct st_hash_type *type;\r
 {\r
-    return st_init_table_with_size(type, 0);\r
+  return st_init_table_with_size(type, 0);\r
 }\r
 \r
 st_table*\r
 st_init_numtable(void)\r
 {\r
-    return st_init_table(&type_numhash);\r
+  return st_init_table(&type_numhash);\r
 }\r
 \r
 st_table*\r
 st_init_numtable_with_size(size)\r
     int size;\r
 {\r
-    return st_init_table_with_size(&type_numhash, size);\r
+  return st_init_table_with_size(&type_numhash, size);\r
 }\r
 \r
 st_table*\r
 st_init_strtable(void)\r
 {\r
-    return st_init_table(&type_strhash);\r
+  return st_init_table(&type_strhash);\r
 }\r
 \r
 st_table*\r
 st_init_strtable_with_size(size)\r
     int size;\r
 {\r
-    return st_init_table_with_size(&type_strhash, size);\r
+  return st_init_table_with_size(&type_strhash, size);\r
 }\r
 \r
 void\r
 st_free_table(table)\r
     st_table *table;\r
 {\r
-    register st_table_entry *ptr, *next;\r
-    int i;\r
+  register st_table_entry *ptr, *next;\r
+  int i;\r
 \r
-    for(i = 0; i < table->num_bins; i++) {\r
-       ptr = table->bins[i];\r
-       while (ptr != 0) {\r
+  for(i = 0; i < table->num_bins; i++) {\r
+    ptr = table->bins[i];\r
+    while (ptr != 0) {\r
            next = ptr->next;\r
            free(ptr);\r
            ptr = next;\r
-       }\r
     }\r
-    free(table->bins);\r
-    free(table);\r
+  }\r
+  free(table->bins);\r
+  free(table);\r
 }\r
 \r
 #define PTR_NOT_EQUAL(table, ptr, hash_val, key) \\r
@@ -230,190 +236,186 @@ st_free_table(table)
     bin_pos = hash_val%(table)->num_bins;\\r
     ptr = (table)->bins[bin_pos];\\r
     if (PTR_NOT_EQUAL(table, ptr, hash_val, key)) {\\r
-       COLLISION;\\r
-       while (PTR_NOT_EQUAL(table, ptr->next, hash_val, key)) {\\r
-           ptr = ptr->next;\\r
-       }\\r
-       ptr = ptr->next;\\r
+      COLLISION;\\r
+      while (PTR_NOT_EQUAL(table, ptr->next, hash_val, key)) {\\r
+        ptr = ptr->next;\\r
+      }\\r
+      ptr = ptr->next;\\r
     }\\r
 } while (0)\r
 \r
 int\r
 st_lookup(table, key, value)\r
-    st_table *table;\r
-    register st_data_t key;\r
-    st_data_t *value;\r
+     st_table *table;\r
+     register st_data_t key;\r
+     st_data_t *value;\r
 {\r
-    unsigned int hash_val, bin_pos;\r
-    register st_table_entry *ptr;\r
+  unsigned int hash_val, bin_pos;\r
+  register st_table_entry *ptr;\r
 \r
-    hash_val = do_hash(key, table);\r
-    FIND_ENTRY(table, ptr, hash_val, bin_pos);\r
+  hash_val = do_hash(key, table);\r
+  FIND_ENTRY(table, ptr, hash_val, bin_pos);\r
 \r
-    if (ptr == 0) {\r
-       return 0;\r
-    }\r
-    else {\r
-       if (value != 0)  *value = ptr->record;\r
-       return 1;\r
-    }\r
+  if (ptr == 0) {\r
+    return 0;\r
+  }\r
+  else {\r
+    if (value != 0)  *value = ptr->record;\r
+    return 1;\r
+  }\r
 }\r
 \r
-#define ADD_DIRECT(table, key, value, hash_val, bin_pos)\\r
+#define ADD_DIRECT(table, key, value, hash_val, bin_pos, ret) \\r
 do {\\r
-    st_table_entry *entry;\\r
-    if (table->num_entries/(table->num_bins) > ST_DEFAULT_MAX_DENSITY) {\\r
-       rehash(table);\\r
-        bin_pos = hash_val % table->num_bins;\\r
-    }\\r
-    \\r
-    entry = alloc(st_table_entry);\\r
-    if (entry == NULL) {\\r
-      break;\\r
-    }\\r
-    \\r
-    entry->hash = hash_val;\\r
-    entry->key = key;\\r
-    entry->record = value;\\r
-    entry->next = table->bins[bin_pos];\\r
-    table->bins[bin_pos] = entry;\\r
-    table->num_entries++;\\r
+  st_table_entry *entry;\\r
+  if (table->num_entries/(table->num_bins) > ST_DEFAULT_MAX_DENSITY) {\\r
+    rehash(table);\\r
+    bin_pos = hash_val % table->num_bins;\\r
+  }\\r
+  entry = alloc(st_table_entry);\\r
+  if (IS_NULL(entry)) return ret;\\r
+  entry->hash = hash_val;\\r
+  entry->key = key;\\r
+  entry->record = value;\\r
+  entry->next = table->bins[bin_pos];\\r
+  table->bins[bin_pos] = entry;\\r
+  table->num_entries++;\\r
 } while (0)\r
 \r
 int\r
 st_insert(table, key, value)\r
-    register st_table *table;\r
-    register st_data_t key;\r
-    st_data_t value;\r
+     register st_table *table;\r
+     register st_data_t key;\r
+     st_data_t value;\r
 {\r
-    unsigned int hash_val, bin_pos;\r
-    register st_table_entry *ptr;\r
+  unsigned int hash_val, bin_pos;\r
+  register st_table_entry *ptr;\r
 \r
-    hash_val = do_hash(key, table);\r
-    FIND_ENTRY(table, ptr, hash_val, bin_pos);\r
+  hash_val = do_hash(key, table);\r
+  FIND_ENTRY(table, ptr, hash_val, bin_pos);\r
 \r
-    if (ptr == 0) {\r
-       ADD_DIRECT(table, key, value, hash_val, bin_pos);\r
-       return 0;\r
-    }\r
-    else {\r
-       ptr->record = value;\r
-       return 1;\r
-    }\r
+  if (ptr == 0) {\r
+    ADD_DIRECT(table, key, value, hash_val, bin_pos, ONIGERR_MEMORY);\r
+    return 0;\r
+  }\r
+  else {\r
+    ptr->record = value;\r
+    return 1;\r
+  }\r
 }\r
 \r
 void\r
 st_add_direct(table, key, value)\r
-    st_table *table;\r
-    st_data_t key;\r
-    st_data_t value;\r
+     st_table *table;\r
+     st_data_t key;\r
+     st_data_t value;\r
 {\r
-    unsigned int hash_val, bin_pos;\r
+  unsigned int hash_val, bin_pos;\r
 \r
-    hash_val = do_hash(key, table);\r
-    bin_pos = hash_val % table->num_bins;\r
-    ADD_DIRECT(table, key, value, hash_val, bin_pos);\r
+  hash_val = do_hash(key, table);\r
+  bin_pos = hash_val % table->num_bins;\r
+  ADD_DIRECT(table, key, value, hash_val, bin_pos,);\r
 }\r
 \r
 static void\r
 rehash(table)\r
-    register st_table *table;\r
+     register st_table *table;\r
 {\r
-    register st_table_entry *ptr, *next, **new_bins;\r
-    int i, old_num_bins = table->num_bins, new_num_bins;\r
-    unsigned int hash_val;\r
-\r
-    new_num_bins = new_size(old_num_bins+1);\r
-    new_bins = (st_table_entry**)Calloc(new_num_bins, sizeof(st_table_entry*));\r
-    if (new_bins == NULL) {\r
-      return;\r
-    }\r
-\r
-    for(i = 0; i < old_num_bins; i++) {\r
-       ptr = table->bins[i];\r
-       while (ptr != 0) {\r
+  register st_table_entry *ptr, *next, **new_bins;\r
+  int i, old_num_bins = table->num_bins, new_num_bins;\r
+  unsigned int hash_val;\r
+\r
+  new_num_bins = new_size(old_num_bins+1);\r
+  new_bins = (st_table_entry**)Calloc(new_num_bins, sizeof(st_table_entry*));\r
+  if (new_bins == 0) {\r
+    return ;\r
+  }\r
+\r
+  for(i = 0; i < old_num_bins; i++) {\r
+    ptr = table->bins[i];\r
+    while (ptr != 0) {\r
            next = ptr->next;\r
            hash_val = ptr->hash % new_num_bins;\r
            ptr->next = new_bins[hash_val];\r
            new_bins[hash_val] = ptr;\r
            ptr = next;\r
-       }\r
     }\r
-    free(table->bins);\r
-    table->num_bins = new_num_bins;\r
-    table->bins = new_bins;\r
+  }\r
+  free(table->bins);\r
+  table->num_bins = new_num_bins;\r
+  table->bins = new_bins;\r
 }\r
 \r
 st_table*\r
 st_copy(old_table)\r
-    st_table *old_table;\r
+     st_table *old_table;\r
 {\r
-    st_table *new_table;\r
-    st_table_entry *ptr, *entry;\r
-    int i, num_bins = old_table->num_bins;\r
+  st_table *new_table;\r
+  st_table_entry *ptr, *entry;\r
+  int i, num_bins = old_table->num_bins;\r
 \r
-    new_table = alloc(st_table);\r
-    if (new_table == 0) {\r
-       return 0;\r
-    }\r
+  new_table = alloc(st_table);\r
+  if (new_table == 0) {\r
+    return 0;\r
+  }\r
 \r
-    *new_table = *old_table;\r
-    new_table->bins = (st_table_entry**)\r
-       Calloc((unsigned)num_bins, sizeof(st_table_entry*));\r
+  *new_table = *old_table;\r
+  new_table->bins = (st_table_entry**)\r
+    Calloc((unsigned)num_bins, sizeof(st_table_entry*));\r
 \r
-    if (new_table->bins == 0) {\r
-       free(new_table);\r
-       return 0;\r
-    }\r
+  if (new_table->bins == 0) {\r
+    free(new_table);\r
+    return 0;\r
+  }\r
 \r
-    for(i = 0; i < num_bins; i++) {\r
-       new_table->bins[i] = 0;\r
-       ptr = old_table->bins[i];\r
-       while (ptr != 0) {\r
+  for(i = 0; i < num_bins; i++) {\r
+    new_table->bins[i] = 0;\r
+    ptr = old_table->bins[i];\r
+    while (ptr != 0) {\r
            entry = alloc(st_table_entry);\r
            if (entry == 0) {\r
-               free(new_table->bins);\r
-               free(new_table);\r
-               return 0;\r
+        free(new_table->bins);\r
+        free(new_table);\r
+        return 0;\r
            }\r
            *entry = *ptr;\r
            entry->next = new_table->bins[i];\r
            new_table->bins[i] = entry;\r
            ptr = ptr->next;\r
-       }\r
     }\r
-    return new_table;\r
+  }\r
+  return new_table;\r
 }\r
 \r
 int\r
 st_delete(table, key, value)\r
-    register st_table *table;\r
-    register st_data_t *key;\r
-    st_data_t *value;\r
+     register st_table *table;\r
+     register st_data_t *key;\r
+     st_data_t *value;\r
 {\r
-    unsigned int hash_val;\r
-    st_table_entry *tmp;\r
-    register st_table_entry *ptr;\r
-\r
-    hash_val = do_hash_bin(*key, table);\r
-    ptr = table->bins[hash_val];\r
-\r
-    if (ptr == 0) {\r
-       if (value != 0) *value = 0;\r
-       return 0;\r
-    }\r
+  unsigned int hash_val;\r
+  st_table_entry *tmp;\r
+  register st_table_entry *ptr;\r
 \r
-    if (EQUAL(table, *key, ptr->key)) {\r
-       table->bins[hash_val] = ptr->next;\r
-       table->num_entries--;\r
-       if (value != 0) *value = ptr->record;\r
-       *key = ptr->key;\r
-       free(ptr);\r
-       return 1;\r
-    }\r
+  hash_val = do_hash_bin(*key, table);\r
+  ptr = table->bins[hash_val];\r
 \r
-    for(; ptr->next != 0; ptr = ptr->next) {\r
-       if (EQUAL(table, ptr->next->key, *key)) {\r
+  if (ptr == 0) {\r
+    if (value != 0) *value = 0;\r
+    return 0;\r
+  }\r
+\r
+  if (EQUAL(table, *key, ptr->key)) {\r
+    table->bins[hash_val] = ptr->next;\r
+    table->num_entries--;\r
+    if (value != 0) *value = ptr->record;\r
+    *key = ptr->key;\r
+    free(ptr);\r
+    return 1;\r
+  }\r
+\r
+  for(; ptr->next != 0; ptr = ptr->next) {\r
+    if (EQUAL(table, ptr->next->key, *key)) {\r
            tmp = ptr->next;\r
            ptr->next = ptr->next->next;\r
            table->num_entries--;\r
@@ -421,41 +423,41 @@ st_delete(table, key, value)
            *key = tmp->key;\r
            free(tmp);\r
            return 1;\r
-       }\r
     }\r
+  }\r
 \r
-    return 0;\r
+  return 0;\r
 }\r
 \r
 int\r
 st_delete_safe(table, key, value, never)\r
-    register st_table *table;\r
-    register st_data_t *key;\r
-    st_data_t *value;\r
-    st_data_t never;\r
+     register st_table *table;\r
+     register st_data_t *key;\r
+     st_data_t *value;\r
+     st_data_t never;\r
 {\r
-    unsigned int hash_val;\r
-    register st_table_entry *ptr;\r
+  unsigned int hash_val;\r
+  register st_table_entry *ptr;\r
 \r
-    hash_val = do_hash_bin(*key, table);\r
-    ptr = table->bins[hash_val];\r
+  hash_val = do_hash_bin(*key, table);\r
+  ptr = table->bins[hash_val];\r
 \r
-    if (ptr == 0) {\r
-       if (value != 0) *value = 0;\r
-       return 0;\r
-    }\r
+  if (ptr == 0) {\r
+    if (value != 0) *value = 0;\r
+    return 0;\r
+  }\r
 \r
-    for(; ptr != 0; ptr = ptr->next) {\r
-       if ((ptr->key != never) && EQUAL(table, ptr->key, *key)) {\r
+  for(; ptr != 0; ptr = ptr->next) {\r
+    if ((ptr->key != never) && EQUAL(table, ptr->key, *key)) {\r
            table->num_entries--;\r
            *key = ptr->key;\r
            if (value != 0) *value = ptr->record;\r
            ptr->key = ptr->record = never;\r
            return 1;\r
-       }\r
     }\r
+  }\r
 \r
-    return 0;\r
+  return 0;\r
 }\r
 \r
 static int\r
@@ -473,114 +475,114 @@ delete_never(key, value, never)
 \r
 void\r
 st_cleanup_safe(table, never)\r
-    st_table *table;\r
-    st_data_t never;\r
+     st_table *table;\r
+     st_data_t never;\r
 {\r
-    int num_entries = table->num_entries;\r
+  int num_entries = table->num_entries;\r
 \r
-    st_foreach(table, delete_never, never);\r
-    table->num_entries = num_entries;\r
+  st_foreach(table, delete_never, never);\r
+  table->num_entries = num_entries;\r
 }\r
 \r
 int\r
 st_foreach(table, func, arg)\r
-    st_table *table;\r
-    int (*func)();\r
-    st_data_t arg;\r
+     st_table *table;\r
+     int (*func)();\r
+     st_data_t arg;\r
 {\r
-    st_table_entry *ptr, *last, *tmp;\r
-    enum st_retval retval;\r
-    int i;\r
+  st_table_entry *ptr, *last, *tmp;\r
+  enum st_retval retval;\r
+  int i;\r
 \r
-    for(i = 0; i < table->num_bins; i++) {\r
-       last = 0;\r
-       for(ptr = table->bins[i]; ptr != 0;) {\r
+  for(i = 0; i < table->num_bins; i++) {\r
+    last = 0;\r
+    for(ptr = table->bins[i]; ptr != 0;) {\r
            retval = (*func)(ptr->key, ptr->record, arg);\r
            switch (retval) {\r
            case ST_CHECK:      /* check if hash is modified during iteration */\r
-               tmp = 0;\r
-               if (i < table->num_bins) {\r
-                   for (tmp = table->bins[i]; tmp; tmp=tmp->next) {\r
-                       if (tmp == ptr) break;\r
-                   }\r
-               }\r
-               if (!tmp) {\r
-                   /* call func with error notice */\r
-                   return 1;\r
-               }\r
-               /* fall through */\r
+        tmp = 0;\r
+        if (i < table->num_bins) {\r
+          for (tmp = table->bins[i]; tmp; tmp=tmp->next) {\r
+            if (tmp == ptr) break;\r
+          }\r
+        }\r
+        if (!tmp) {\r
+          /* call func with error notice */\r
+          return 1;\r
+        }\r
+        /* fall through */\r
            case ST_CONTINUE:\r
-               last = ptr;\r
-               ptr = ptr->next;\r
-               break;\r
+        last = ptr;\r
+        ptr = ptr->next;\r
+        break;\r
            case ST_STOP:\r
-               return 0;\r
+        return 0;\r
            case ST_DELETE:\r
-               tmp = ptr;\r
-               if (last == 0) {\r
-                   table->bins[i] = ptr->next;\r
-               }\r
-               else {\r
-                   last->next = ptr->next;\r
-               }\r
-               ptr = ptr->next;\r
-               free(tmp);\r
-               table->num_entries--;\r
+        tmp = ptr;\r
+        if (last == 0) {\r
+          table->bins[i] = ptr->next;\r
+        }\r
+        else {\r
+          last->next = ptr->next;\r
+        }\r
+        ptr = ptr->next;\r
+        free(tmp);\r
+        table->num_entries--;\r
            }\r
-       }\r
     }\r
-    return 0;\r
+  }\r
+  return 0;\r
 }\r
 \r
 static int\r
 strhash(string)\r
-    register const char *string;\r
+     register const char *string;\r
 {\r
-    register int c;\r
+  register int c;\r
 \r
 #ifdef HASH_ELFHASH\r
-    register unsigned int h = 0, g;\r
+  register unsigned int h = 0, g;\r
 \r
-    while ((c = *string++) != '\0') {\r
-       h = ( h << 4 ) + c;\r
-       if ( g = h & 0xF0000000 )\r
+  while ((c = *string++) != '\0') {\r
+    h = ( h << 4 ) + c;\r
+    if ( g = h & 0xF0000000 )\r
            h ^= g >> 24;\r
-       h &= ~g;\r
-    }\r
-    return h;\r
+    h &= ~g;\r
+  }\r
+  return h;\r
 #elif HASH_PERL\r
-    register int val = 0;\r
+  register int val = 0;\r
 \r
-    while ((c = *string++) != '\0') {\r
-       val += c;\r
-       val += (val << 10);\r
-       val ^= (val >> 6);\r
-    }\r
-    val += (val << 3);\r
-    val ^= (val >> 11);\r
+  while ((c = *string++) != '\0') {\r
+    val += c;\r
+    val += (val << 10);\r
+    val ^= (val >> 6);\r
+  }\r
+  val += (val << 3);\r
+  val ^= (val >> 11);\r
 \r
-    return val + (val << 15);\r
+  return val + (val << 15);\r
 #else\r
-    register int val = 0;\r
+  register int val = 0;\r
 \r
-    while ((c = *string++) != '\0') {\r
-       val = val*997 + c;\r
-    }\r
+  while ((c = *string++) != '\0') {\r
+    val = val*997 + c;\r
+  }\r
 \r
-    return val + (val>>5);\r
+  return val + (val>>5);\r
 #endif\r
 }\r
 \r
 static int\r
 numcmp(x, y)\r
-    long x, y;\r
+     long x, y;\r
 {\r
-    return x != y;\r
+  return x != y;\r
 }\r
 \r
 static int\r
 numhash(n)\r
-    long n;\r
+     long n;\r
 {\r
-    return n;\r
+  return n;\r
 }\r
index a6200024491b088178c2169bff15d30eab7cc791..c42f379058dd9464ee090627c1fabd7573b3038e 100644 (file)
 # include <windows.h>\r
 typedef ULONG_PTR st_data_t;\r
 #else\r
-typedef unsigned long st_data_t;\r
+// typedef unsigned long st_data_t;\r
 #endif\r
 #define ST_DATA_T_DEFINED\r
+typedef UINTN st_data_t;\r
 \r
 typedef struct st_table st_table;\r
 \r
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode.c
new file mode 100644 (file)
index 0000000..1587500
--- /dev/null
@@ -0,0 +1,873 @@
+/**********************************************************************\r
+  unicode.c -  Oniguruma (regular expression library)\r
+**********************************************************************/\r
+/*-\r
+ * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
+ * SUCH DAMAGE.\r
+ */\r
+\r
+#include "regint.h"\r
+\r
+struct PoolPropertyNameCtype {\r
+  short int name;\r
+  short int ctype;\r
+};\r
+\r
+#define ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(code,ctype) \\r
+  ((EncUNICODE_ISO_8859_1_CtypeTable[code] & CTYPE_TO_BIT(ctype)) != 0)\r
+\r
+static const unsigned short EncUNICODE_ISO_8859_1_CtypeTable[256] = {\r
+  0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,\r
+  0x4008, 0x428c, 0x4289, 0x4288, 0x4288, 0x4288, 0x4008, 0x4008,\r
+  0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,\r
+  0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,\r
+  0x4284, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,\r
+  0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,\r
+  0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0,\r
+  0x78b0, 0x78b0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,\r
+  0x41a0, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x74a2,\r
+  0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2,\r
+  0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2,\r
+  0x74a2, 0x74a2, 0x74a2, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x51a0,\r
+  0x41a0, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x70e2,\r
+  0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2,\r
+  0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2,\r
+  0x70e2, 0x70e2, 0x70e2, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x4008,\r
+  0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0288, 0x0008, 0x0008,\r
+  0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,\r
+  0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,\r
+  0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,\r
+  0x0284, 0x01a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0,\r
+  0x00a0, 0x00a0, 0x30e2, 0x01a0, 0x00a0, 0x00a8, 0x00a0, 0x00a0,\r
+  0x00a0, 0x00a0, 0x10a0, 0x10a0, 0x00a0, 0x30e2, 0x00a0, 0x01a0,\r
+  0x00a0, 0x10a0, 0x30e2, 0x01a0, 0x10a0, 0x10a0, 0x10a0, 0x01a0,\r
+  0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2,\r
+  0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2,\r
+  0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x00a0,\r
+  0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x30e2,\r
+  0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2,\r
+  0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2,\r
+  0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x00a0,\r
+  0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2\r
+};\r
+\r
+#include "st.h"\r
+\r
+#include "unicode_fold_data.c"\r
+\r
+extern int\r
+onigenc_unicode_mbc_case_fold(OnigEncoding enc,\r
+    OnigCaseFoldType flag ARG_UNUSED, const UChar** pp, const UChar* end,\r
+    UChar* fold)\r
+{\r
+  const struct ByUnfoldKey* buk;\r
+\r
+  OnigCodePoint code;\r
+  int i, len, rlen;\r
+  const UChar *p = *pp;\r
+\r
+  code = ONIGENC_MBC_TO_CODE(enc, p, end);\r
+  len = enclen(enc, p);\r
+  *pp += len;\r
+\r
+#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
+  if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {\r
+    if (code == 0x0130) {\r
+      return ONIGENC_CODE_TO_MBC(enc, 0x0069, fold);\r
+    }\r
+#if 0\r
+    if (code == 0x0049) {\r
+      return ONIGENC_CODE_TO_MBC(enc, 0x0131, fold);\r
+    }\r
+#endif\r
+  }\r
+#endif\r
+\r
+  buk = onigenc_unicode_unfold_key(code);\r
+  if (buk != 0) {\r
+    if (buk->fold_len == 1) {\r
+      return ONIGENC_CODE_TO_MBC(enc, *FOLDS1_FOLD(buk->index), fold);\r
+    }\r
+    else {\r
+      OnigCodePoint* addr;\r
+\r
+      FOLDS_FOLD_ADDR_BUK(buk, addr);\r
+      rlen = 0;\r
+      for (i = 0; i < buk->fold_len; i++) {\r
+        OnigCodePoint c = addr[i];\r
+        len = ONIGENC_CODE_TO_MBC(enc, c, fold);\r
+        fold += len;\r
+        rlen += len;\r
+      }\r
+      return rlen;\r
+    }\r
+  }\r
+\r
+  for (i = 0; i < len; i++) {\r
+    *fold++ = *p++;\r
+  }\r
+  return len;\r
+}\r
+\r
+static int\r
+apply_case_fold1(int from, int to, OnigApplyAllCaseFoldFunc f, void* arg)\r
+{\r
+  int i, j, k, n, r;\r
+\r
+  for (i = from; i < to; ) {\r
+    OnigCodePoint fold = *FOLDS1_FOLD(i);\r
+    n = FOLDS1_UNFOLDS_NUM(i);\r
+    for (j = 0; j < n; j++) {\r
+      OnigCodePoint unfold = FOLDS1_UNFOLDS(i)[j];\r
+\r
+      r = (*f)(fold, &unfold, 1, arg);\r
+      if (r != 0) return r;\r
+      r = (*f)(unfold, &fold, 1, arg);\r
+      if (r != 0) return r;\r
+\r
+      for (k = 0; k < j; k++) {\r
+        OnigCodePoint unfold2 = FOLDS1_UNFOLDS(i)[k];\r
+        r = (*f)(unfold, &unfold2, 1, arg);\r
+        if (r != 0) return r;\r
+        r = (*f)(unfold2, &unfold, 1, arg);\r
+        if (r != 0) return r;\r
+      }\r
+    }\r
+\r
+    i = FOLDS1_NEXT_INDEX(i);\r
+  }\r
+\r
+  return 0;\r
+}\r
+\r
+static int\r
+apply_case_fold2(int from, int to, OnigApplyAllCaseFoldFunc f, void* arg)\r
+{\r
+  int i, j, k, n, r;\r
+\r
+  for (i = from; i < to; ) {\r
+    OnigCodePoint* fold = FOLDS2_FOLD(i);\r
+    n = FOLDS2_UNFOLDS_NUM(i);\r
+    for (j = 0; j < n; j++) {\r
+      OnigCodePoint unfold = FOLDS2_UNFOLDS(i)[j];\r
+\r
+      r = (*f)(unfold, fold, 2, arg);\r
+      if (r != 0) return r;\r
+\r
+      for (k = 0; k < j; k++) {\r
+        OnigCodePoint unfold2 = FOLDS2_UNFOLDS(i)[k];\r
+        r = (*f)(unfold, &unfold2, 1, arg);\r
+        if (r != 0) return r;\r
+        r = (*f)(unfold2, &unfold, 1, arg);\r
+        if (r != 0) return r;\r
+      }\r
+    }\r
+\r
+    i = FOLDS2_NEXT_INDEX(i);\r
+  }\r
+\r
+  return 0;\r
+}\r
+\r
+static int\r
+apply_case_fold3(int from, int to, OnigApplyAllCaseFoldFunc f, void* arg)\r
+{\r
+  int i, j, k, n, r;\r
+\r
+  for (i = from; i < to; ) {\r
+    OnigCodePoint* fold = FOLDS3_FOLD(i);\r
+    n = FOLDS3_UNFOLDS_NUM(i);\r
+    for (j = 0; j < n; j++) {\r
+      OnigCodePoint unfold = FOLDS3_UNFOLDS(i)[j];\r
+\r
+      r = (*f)(unfold, fold, 3, arg);\r
+      if (r != 0) return r;\r
+\r
+      for (k = 0; k < j; k++) {\r
+        OnigCodePoint unfold2 = FOLDS3_UNFOLDS(i)[k];\r
+        r = (*f)(unfold, &unfold2, 1, arg);\r
+        if (r != 0) return r;\r
+        r = (*f)(unfold2, &unfold, 1, arg);\r
+        if (r != 0) return r;\r
+      }\r
+    }\r
+\r
+    i = FOLDS3_NEXT_INDEX(i);\r
+  }\r
+\r
+  return 0;\r
+}\r
+\r
+extern int\r
+onigenc_unicode_apply_all_case_fold(OnigCaseFoldType flag,\r
+                                    OnigApplyAllCaseFoldFunc f, void* arg)\r
+{\r
+  int r;\r
+\r
+  r = apply_case_fold1(0, FOLDS1_NORMAL_END_INDEX, f, arg);\r
+  if (r != 0) return r;\r
+\r
+#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
+  if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {\r
+    code = 0x0131;\r
+    r = (*f)(0x0049, &code, 1, arg);\r
+    if (r != 0) return r;\r
+    code = 0x0049;\r
+    r = (*f)(0x0131, &code, 1, arg);\r
+    if (r != 0) return r;\r
+\r
+    code = 0x0130;\r
+    r = (*f)(0x0069, &code, 1, arg);\r
+    if (r != 0) return r;\r
+    code = 0x0069;\r
+    r = (*f)(0x0130, &code, 1, arg);\r
+    if (r != 0) return r;\r
+  }\r
+  else {\r
+#endif\r
+    r = apply_case_fold1(FOLDS1_NORMAL_END_INDEX, FOLDS1_END_INDEX, f, arg);\r
+    if (r != 0) return r;\r
+#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
+  }\r
+#endif\r
+\r
+  if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) == 0)\r
+    return 0;\r
+\r
+  r = apply_case_fold2(0, FOLDS2_NORMAL_END_INDEX, f, arg);\r
+  if (r != 0) return r;\r
+\r
+#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
+  if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) == 0) {\r
+#endif\r
+    r = apply_case_fold2(FOLDS2_NORMAL_END_INDEX, FOLDS2_END_INDEX, f, arg);\r
+    if (r != 0) return r;\r
+#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
+  }\r
+#endif\r
+\r
+  r = apply_case_fold3(0, FOLDS3_NORMAL_END_INDEX, f, arg);\r
+  if (r != 0) return r;\r
+\r
+  return 0;\r
+}\r
+\r
+extern int\r
+onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc,\r
+    OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end,\r
+    OnigCaseFoldCodeItem items[])\r
+{\r
+  int n, m, i, j, k, len;\r
+  OnigCodePoint code, codes[3];\r
+  const struct ByUnfoldKey* buk;\r
+\r
+  n = 0;\r
+\r
+  code = ONIGENC_MBC_TO_CODE(enc, p, end);\r
+  len = enclen(enc, p);\r
+\r
+#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
+  if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {\r
+    if (code == 0x0049) {\r
+      items[0].byte_len = len;\r
+      items[0].code_len = 1;\r
+      items[0].code[0]  = 0x0131;\r
+      return 1;\r
+    }\r
+    else if (code == 0x0130) {\r
+      items[0].byte_len = len;\r
+      items[0].code_len = 1;\r
+      items[0].code[0]  = 0x0069;\r
+      return 1;\r
+    }\r
+    else if (code == 0x0131) {\r
+      items[0].byte_len = len;\r
+      items[0].code_len = 1;\r
+      items[0].code[0]  = 0x0049;\r
+      return 1;\r
+    }\r
+    else if (code == 0x0069) {\r
+      items[0].byte_len = len;\r
+      items[0].code_len = 1;\r
+      items[0].code[0]  = 0x0130;\r
+      return 1;\r
+    }\r
+  }\r
+#endif\r
+\r
+  buk = onigenc_unicode_unfold_key(code);\r
+  if (buk != 0) {\r
+    if (buk->fold_len == 1) {\r
+      int un;\r
+      items[0].byte_len = len;\r
+      items[0].code_len = 1;\r
+      items[0].code[0]  = *FOLDS1_FOLD(buk->index);\r
+      n++;\r
+\r
+      un = FOLDS1_UNFOLDS_NUM(buk->index);\r
+      for (i = 0; i < un; i++) {\r
+        OnigCodePoint unfold = FOLDS1_UNFOLDS(buk->index)[i];\r
+        if (unfold != code) {\r
+          items[n].byte_len = len;\r
+          items[n].code_len = 1;\r
+          items[n].code[0]  = unfold;\r
+          n++;\r
+        }\r
+      }\r
+      code = items[0].code[0]; /* for multi-code to unfold search. */\r
+    }\r
+    else if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {\r
+      OnigCodePoint cs[3][4];\r
+      int fn, ncs[3];\r
+\r
+      if (buk->fold_len == 2) {\r
+        m = FOLDS2_UNFOLDS_NUM(buk->index);\r
+        for (i = 0; i < m; i++) {\r
+          OnigCodePoint unfold = FOLDS2_UNFOLDS(buk->index)[i];\r
+          if (unfold == code) continue;\r
+\r
+          items[n].byte_len = len;\r
+          items[n].code_len = 1;\r
+          items[n].code[0]  = unfold;\r
+          n++;\r
+        }\r
+\r
+        for (fn = 0; fn < 2; fn++) {\r
+          int index;\r
+          cs[fn][0] = FOLDS2_FOLD(buk->index)[fn];\r
+          index = onigenc_unicode_fold1_key(&cs[fn][0]);\r
+          if (index >= 0) {\r
+            int m = FOLDS1_UNFOLDS_NUM(index);\r
+            for (i = 0; i < m; i++) {\r
+              cs[fn][i+1] = FOLDS1_UNFOLDS(index)[i];\r
+            }\r
+            ncs[fn] = m + 1;\r
+          }\r
+          else\r
+            ncs[fn] = 1;\r
+        }\r
+\r
+        for (i = 0; i < ncs[0]; i++) {\r
+          for (j = 0; j < ncs[1]; j++) {\r
+            items[n].byte_len = len;\r
+            items[n].code_len = 2;\r
+            items[n].code[0]  = cs[0][i];\r
+            items[n].code[1]  = cs[1][j];\r
+            n++;\r
+          }\r
+        }\r
+      }\r
+      else { /* fold_len == 3 */\r
+        m = FOLDS3_UNFOLDS_NUM(buk->index);\r
+        for (i = 0; i < m; i++) {\r
+          OnigCodePoint unfold = FOLDS3_UNFOLDS(buk->index)[i];\r
+          if (unfold == code) continue;\r
+\r
+          items[n].byte_len = len;\r
+          items[n].code_len = 1;\r
+          items[n].code[0]  = unfold;\r
+          n++;\r
+        }\r
+\r
+        for (fn = 0; fn < 3; fn++) {\r
+          int index;\r
+          cs[fn][0] = FOLDS3_FOLD(buk->index)[fn];\r
+          index = onigenc_unicode_fold1_key(&cs[fn][0]);\r
+          if (index >= 0) {\r
+            int m = FOLDS1_UNFOLDS_NUM(index);\r
+            for (i = 0; i < m; i++) {\r
+              cs[fn][i+1] = FOLDS1_UNFOLDS(index)[i];\r
+            }\r
+            ncs[fn] = m + 1;\r
+          }\r
+          else\r
+            ncs[fn] = 1;\r
+        }\r
+\r
+        for (i = 0; i < ncs[0]; i++) {\r
+          for (j = 0; j < ncs[1]; j++) {\r
+            for (k = 0; k < ncs[2]; k++) {\r
+              items[n].byte_len = len;\r
+              items[n].code_len = 3;\r
+              items[n].code[0]  = cs[0][i];\r
+              items[n].code[1]  = cs[1][j];\r
+              items[n].code[2]  = cs[2][k];\r
+              n++;\r
+            }\r
+          }\r
+        }\r
+      }\r
+\r
+      /* multi char folded code is not head of another folded multi char */\r
+      return n;\r
+    }\r
+  }\r
+  else {\r
+    int index = onigenc_unicode_fold1_key(&code);\r
+    if (index >= 0) {\r
+      int m = FOLDS1_UNFOLDS_NUM(index);\r
+      for (i = 0; i < m; i++) {\r
+        items[n].byte_len = len;\r
+        items[n].code_len = 1;\r
+        items[n].code[0]  = FOLDS1_UNFOLDS(index)[i];\r
+        n++;\r
+      }\r
+    }\r
+  }\r
+\r
+  if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) == 0)\r
+    return n;\r
+\r
+  p += len;\r
+  if (p < end) {\r
+    int clen;\r
+    int index;\r
+\r
+    codes[0] = code;\r
+    code = ONIGENC_MBC_TO_CODE(enc, p, end);\r
+\r
+    buk = onigenc_unicode_unfold_key(code);\r
+    if (buk != 0 && buk->fold_len == 1) {\r
+      codes[1] = *FOLDS1_FOLD(buk->index);\r
+    }\r
+    else\r
+      codes[1] = code;\r
+\r
+    clen = enclen(enc, p);\r
+    len += clen;\r
+\r
+    index = onigenc_unicode_fold2_key(codes);\r
+    if (index >= 0) {\r
+      m = FOLDS2_UNFOLDS_NUM(index);\r
+      for (i = 0; i < m; i++) {\r
+        items[n].byte_len = len;\r
+        items[n].code_len = 1;\r
+        items[n].code[0]  = FOLDS2_UNFOLDS(index)[i];\r
+        n++;\r
+      }\r
+    }\r
+\r
+    p += clen;\r
+    if (p < end) {\r
+      code = ONIGENC_MBC_TO_CODE(enc, p, end);\r
+      buk = onigenc_unicode_unfold_key(code);\r
+      if (buk != 0 && buk->fold_len == 1) {\r
+        codes[2] = *FOLDS1_FOLD(buk->index);\r
+      }\r
+      else\r
+        codes[2] = code;\r
+\r
+      clen = enclen(enc, p);\r
+      len += clen;\r
+\r
+      index = onigenc_unicode_fold3_key(codes);\r
+      if (index >= 0) {\r
+        m = FOLDS3_UNFOLDS_NUM(index);\r
+        for (i = 0; i < m; i++) {\r
+          items[n].byte_len = len;\r
+          items[n].code_len = 1;\r
+          items[n].code[0]  = FOLDS3_UNFOLDS(index)[i];\r
+          n++;\r
+        }\r
+      }\r
+    }\r
+  }\r
+\r
+  return n;\r
+}\r
+\r
+#ifdef USE_UNICODE_PROPERTIES\r
+#include "unicode_property_data.c"\r
+#else\r
+#include "unicode_property_data_posix.c"\r
+#endif\r
+\r
+\r
+#ifdef USE_UNICODE_EXTENDED_GRAPHEME_CLUSTER\r
+\r
+enum EGCB_BREAK_TYPE {\r
+  EGCB_NOT_BREAK = 0,\r
+  EGCB_BREAK     = 1,\r
+  EGCB_BREAK_UNDEF_GB11  = 2,\r
+  EGCB_BREAK_UNDEF_RI_RI = 3\r
+};\r
+\r
+enum EGCB_TYPE {\r
+  EGCB_Other   = 0,\r
+  EGCB_CR      = 1,\r
+  EGCB_LF      = 2,\r
+  EGCB_Control = 3,\r
+  EGCB_Extend  = 4,\r
+  EGCB_Prepend = 5,\r
+  EGCB_Regional_Indicator = 6,\r
+  EGCB_SpacingMark = 7,\r
+  EGCB_ZWJ         = 8,\r
+#if 0\r
+  /* obsoleted */\r
+  EGCB_E_Base         = 9,\r
+  EGCB_E_Base_GAZ     = 10,\r
+  EGCB_E_Modifier     = 11,\r
+  EGCB_Glue_After_Zwj = 12,\r
+#endif\r
+  EGCB_L   = 13,\r
+  EGCB_LV  = 14,\r
+  EGCB_LVT = 15,\r
+  EGCB_T   = 16,\r
+  EGCB_V   = 17\r
+};\r
+\r
+typedef struct {\r
+  OnigCodePoint  start;\r
+  OnigCodePoint  end;\r
+  enum EGCB_TYPE type;\r
+} EGCB_RANGE_TYPE;\r
+\r
+#include "unicode_egcb_data.c"\r
+\r
+static enum EGCB_TYPE\r
+egcb_get_type(OnigCodePoint code)\r
+{\r
+  OnigCodePoint low, high, x;\r
+  enum EGCB_TYPE type;\r
+\r
+  for (low = 0, high = (OnigCodePoint )EGCB_RANGE_NUM; low < high; ) {\r
+    x = (low + high) >> 1;\r
+    if (code > EGCB_RANGES[x].end)\r
+      low = x + 1;\r
+    else\r
+      high = x;\r
+  }\r
+\r
+  type = (low < (OnigCodePoint )EGCB_RANGE_NUM &&\r
+          code >= EGCB_RANGES[low].start) ?\r
+    EGCB_RANGES[low].type : EGCB_Other;\r
+\r
+  return type;\r
+}\r
+\r
+#define IS_CONTROL_CR_LF(code)   ((code) <= EGCB_Control && (code) >= EGCB_CR)\r
+#define IS_HANGUL(code)          ((code) >= EGCB_L)\r
+\r
+/* GB1 and GB2 are outside of this function. */\r
+static enum EGCB_BREAK_TYPE\r
+unicode_egcb_is_break_2code(OnigCodePoint from_code, OnigCodePoint to_code)\r
+{\r
+  enum EGCB_TYPE from;\r
+  enum EGCB_TYPE to;\r
+\r
+  from = egcb_get_type(from_code);\r
+  to   = egcb_get_type(to_code);\r
+\r
+  /* short cut */\r
+  if (from == 0 && to == 0) goto GB999;\r
+\r
+  /* GB3 */\r
+  if (from == EGCB_CR && to == EGCB_LF) return EGCB_NOT_BREAK;\r
+  /* GB4 */\r
+  if (IS_CONTROL_CR_LF(from)) return EGCB_BREAK;\r
+  /* GB5 */\r
+  if (IS_CONTROL_CR_LF(to)) return EGCB_BREAK;\r
+\r
+  if (IS_HANGUL(from) && IS_HANGUL(to)) {\r
+    /* GB6 */\r
+    if (from == EGCB_L && to != EGCB_T) return EGCB_NOT_BREAK;\r
+    /* GB7 */\r
+    if ((from == EGCB_LV || from == EGCB_V)\r
+        && (to == EGCB_V || to == EGCB_T)) return EGCB_NOT_BREAK;\r
+\r
+    /* GB8 */\r
+    if ((to == EGCB_T) && (from == EGCB_LVT || from == EGCB_T))\r
+      return EGCB_NOT_BREAK;\r
+\r
+    goto GB999;\r
+  }\r
+\r
+  /* GB9 */\r
+  if (to == EGCB_Extend || to == EGCB_ZWJ) return EGCB_NOT_BREAK;\r
+\r
+  /* GB9a */\r
+  if (to == EGCB_SpacingMark) return EGCB_NOT_BREAK;\r
+  /* GB9b */\r
+  if (from == EGCB_Prepend) return EGCB_NOT_BREAK;\r
+\r
+  /* GB10 removed */\r
+\r
+  /* GB11 */\r
+  if (from == EGCB_ZWJ) {\r
+    if (onigenc_unicode_is_code_ctype(to_code, PROP_INDEX_EXTENDEDPICTOGRAPHIC))\r
+      return EGCB_BREAK_UNDEF_GB11;\r
+\r
+    goto GB999;\r
+  }\r
+\r
+  /* GB12, GB13 */\r
+  if (from == EGCB_Regional_Indicator && to == EGCB_Regional_Indicator) {\r
+    return EGCB_BREAK_UNDEF_RI_RI;\r
+  }\r
+\r
+ GB999:\r
+  return EGCB_BREAK;\r
+}\r
+\r
+#endif /* USE_UNICODE_EXTENDED_GRAPHEME_CLUSTER */\r
+\r
+extern int\r
+onigenc_egcb_is_break_position(OnigEncoding enc, UChar* p, UChar* prev,\r
+                               const UChar* start, const UChar* end)\r
+{\r
+  OnigCodePoint from;\r
+  OnigCodePoint to;\r
+#ifdef USE_UNICODE_EXTENDED_GRAPHEME_CLUSTER\r
+  enum EGCB_BREAK_TYPE btype;\r
+  enum EGCB_TYPE type;\r
+#endif\r
+\r
+  /* GB1 and GB2 */\r
+  if (p == start) return 1;\r
+  if (p == end)   return 1;\r
+\r
+  if (IS_NULL(prev)) {\r
+    prev = onigenc_get_prev_char_head(enc, start, p);\r
+    if (IS_NULL(prev)) return 1;\r
+  }\r
+\r
+  from = ONIGENC_MBC_TO_CODE(enc, prev, end);\r
+  to   = ONIGENC_MBC_TO_CODE(enc, p, end);\r
+\r
+#ifdef USE_UNICODE_EXTENDED_GRAPHEME_CLUSTER\r
+  if (! ONIGENC_IS_UNICODE_ENCODING(enc)) {\r
+    if (from == 0x000d && to == 0x000a) return 0;\r
+    else return 1;\r
+  }\r
+\r
+  btype = unicode_egcb_is_break_2code(from, to);\r
+  switch (btype) {\r
+  case EGCB_NOT_BREAK:\r
+    return 0;\r
+    break;\r
+  case EGCB_BREAK:\r
+    return 1;\r
+    break;\r
+\r
+  case EGCB_BREAK_UNDEF_GB11:\r
+    while ((prev = onigenc_get_prev_char_head(enc, start, prev)) != NULL) {\r
+      from = ONIGENC_MBC_TO_CODE(enc, prev, end);\r
+      if (onigenc_unicode_is_code_ctype(from, PROP_INDEX_EXTENDEDPICTOGRAPHIC))\r
+        return 0;\r
+\r
+      type = egcb_get_type(from);\r
+      if (type != EGCB_Extend)\r
+        break;\r
+    }\r
+    break;\r
+\r
+  case EGCB_BREAK_UNDEF_RI_RI:\r
+    {\r
+      int n = 0;\r
+      while ((prev = onigenc_get_prev_char_head(enc, start, prev)) != NULL) {\r
+        from = ONIGENC_MBC_TO_CODE(enc, prev, end);\r
+        type = egcb_get_type(from);\r
+        if (type != EGCB_Regional_Indicator)\r
+          break;\r
+\r
+        n++;\r
+      }\r
+      if ((n % 2) == 0) return 0;\r
+    }\r
+    break;\r
+  }\r
+\r
+  return 1;\r
+\r
+#else\r
+  if (from == 0x000d && to == 0x000a) return 0;\r
+  else return 1;\r
+#endif /* USE_UNICODE_EXTENDED_GRAPHEME_CLUSTER */\r
+}\r
+\r
+\r
+#define USER_DEFINED_PROPERTY_MAX_NUM  20\r
+\r
+typedef struct {\r
+  int ctype;\r
+  OnigCodePoint* ranges;\r
+} UserDefinedPropertyValue;\r
+\r
+static int UserDefinedPropertyNum;\r
+static UserDefinedPropertyValue\r
+UserDefinedPropertyRanges[USER_DEFINED_PROPERTY_MAX_NUM];\r
+static st_table* UserDefinedPropertyTable;\r
+\r
+extern int\r
+onig_unicode_define_user_property(const char* name, OnigCodePoint* ranges)\r
+{\r
+  UserDefinedPropertyValue* e;\r
+  int r;\r
+  int i;\r
+  int n;\r
+  int len;\r
+  int c;\r
+  char* s;\r
+\r
+  if (UserDefinedPropertyNum >= USER_DEFINED_PROPERTY_MAX_NUM)\r
+    return ONIGERR_TOO_MANY_USER_DEFINED_OBJECTS;\r
+\r
+  len = (int )strlen_s(name,MAX_STRING_SIZE);\r
+  if (len >= PROPERTY_NAME_MAX_SIZE)\r
+    return ONIGERR_TOO_LONG_PROPERTY_NAME;\r
+\r
+  s = (char* )xmalloc(len + 1);\r
+  if (s == 0)\r
+    return ONIGERR_MEMORY;\r
+\r
+  n = 0;\r
+  for (i = 0; i < len; i++) {\r
+    c = name[i];\r
+    if (c <= 0 || c >= 0x80) {\r
+      xfree(s);\r
+      return ONIGERR_INVALID_CHAR_PROPERTY_NAME;\r
+    }\r
+\r
+    if (c != ' ' && c != '-' && c != '_') {\r
+      s[n] = c;\r
+      n++;\r
+    }\r
+  }\r
+  s[n] = '\0';\r
+\r
+  if (UserDefinedPropertyTable == 0) {\r
+    UserDefinedPropertyTable = onig_st_init_strend_table_with_size(10);\r
+  }\r
+\r
+  e = UserDefinedPropertyRanges + UserDefinedPropertyNum;\r
+  e->ctype = CODE_RANGES_NUM + UserDefinedPropertyNum;\r
+  e->ranges = ranges;\r
+  r = onig_st_insert_strend(UserDefinedPropertyTable,\r
+                            (const UChar* )s, (const UChar* )s + n,\r
+                            (hash_data_type )((void* )e));\r
+  if (r < 0) return r;\r
+\r
+  UserDefinedPropertyNum++;\r
+  return 0;\r
+}\r
+\r
+extern int\r
+onigenc_unicode_is_code_ctype(OnigCodePoint code, unsigned int ctype)\r
+{\r
+  if (\r
+#ifdef USE_UNICODE_PROPERTIES\r
+      ctype <= ONIGENC_MAX_STD_CTYPE &&\r
+#endif\r
+      code < 256) {\r
+    return ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(code, ctype);\r
+  }\r
+\r
+  if (ctype >= CODE_RANGES_NUM) {\r
+    int index = ctype - CODE_RANGES_NUM;\r
+    if (index < UserDefinedPropertyNum)\r
+      return onig_is_in_code_range((UChar* )UserDefinedPropertyRanges[index].ranges, code);\r
+    else\r
+      return ONIGERR_TYPE_BUG;\r
+  }\r
+\r
+  return onig_is_in_code_range((UChar* )CodeRanges[ctype], code);\r
+}\r
+\r
+\r
+extern int\r
+onigenc_unicode_ctype_code_range(OnigCtype ctype, const OnigCodePoint* ranges[])\r
+{\r
+  if (ctype >= CODE_RANGES_NUM) {\r
+    int index = ctype - CODE_RANGES_NUM;\r
+    if (index < UserDefinedPropertyNum) {\r
+      *ranges = UserDefinedPropertyRanges[index].ranges;\r
+      return 0;\r
+    }\r
+    else\r
+      return ONIGERR_TYPE_BUG;\r
+  }\r
+\r
+  *ranges = CodeRanges[ctype];\r
+  return 0;\r
+}\r
+\r
+extern int\r
+onigenc_utf16_32_get_ctype_code_range(OnigCtype ctype, OnigCodePoint* sb_out,\r
+                                      const OnigCodePoint* ranges[])\r
+{\r
+  *sb_out = 0x00;\r
+  return onigenc_unicode_ctype_code_range(ctype, ranges);\r
+}\r
+\r
+extern int\r
+onigenc_unicode_property_name_to_ctype(OnigEncoding enc, UChar* name, UChar* end)\r
+{\r
+  int len;\r
+  UChar *p;\r
+  OnigCodePoint code;\r
+  const struct PoolPropertyNameCtype* pc;\r
+  char buf[PROPERTY_NAME_MAX_SIZE];\r
+\r
+  p = name;\r
+  len = 0;\r
+  while (p < end) {\r
+    code = ONIGENC_MBC_TO_CODE(enc, p, end);\r
+    if (code >= 0x80)\r
+      return ONIGERR_INVALID_CHAR_PROPERTY_NAME;\r
+\r
+    if (code != ' ' && code != '-' && code != '_') {\r
+      buf[len++] = (char )code;\r
+      if (len >= PROPERTY_NAME_MAX_SIZE)\r
+        return ONIGERR_INVALID_CHAR_PROPERTY_NAME;\r
+    }\r
+\r
+    p += enclen(enc, p);\r
+  }\r
+\r
+  buf[len] = 0;\r
+\r
+  if (UserDefinedPropertyTable != 0) {\r
+    UserDefinedPropertyValue* e;\r
+    e = (UserDefinedPropertyValue* )NULL;\r
+    onig_st_lookup_strend(UserDefinedPropertyTable,\r
+                          (const UChar* )buf, (const UChar* )buf + len,\r
+                          (hash_data_type* )((void* )(&e)));\r
+    if (e != 0) {\r
+      return e->ctype;\r
+    }\r
+  }\r
+\r
+  pc = unicode_lookup_property_name(buf, len);\r
+  if (pc != 0) {\r
+    /* fprintf(stderr, "LOOKUP: %s: %d\n", buf, pc->ctype); */\r
+#ifndef USE_UNICODE_PROPERTIES\r
+    if (pc->ctype > ONIGENC_MAX_STD_CTYPE)\r
+      return ONIGERR_INVALID_CHAR_PROPERTY_NAME;\r
+#endif\r
+\r
+    return (int )pc->ctype;\r
+  }\r
+\r
+  return ONIGERR_INVALID_CHAR_PROPERTY_NAME;\r
+}\r
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_egcb_data.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_egcb_data.c
new file mode 100644 (file)
index 0000000..d1edb1c
--- /dev/null
@@ -0,0 +1,1369 @@
+/* unicode_egcb_data.c: Generated by make_unicode_egcb_data.py. */\r
+/*-\r
+ * Copyright (c) 2017-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
+ * SUCH DAMAGE.\r
+ */\r
+\r
+#define GRAPHEME_BREAK_PROPERTY_VERSION  11_0_0\r
+\r
+/*\r
+CR\r
+Control\r
+Extend\r
+L\r
+LF\r
+LV\r
+LVT\r
+Prepend\r
+Regional_Indicator\r
+SpacingMark\r
+T\r
+V\r
+ZWJ\r
+*/\r
+\r
+static int EGCB_RANGE_NUM = 1321;\r
+static EGCB_RANGE_TYPE EGCB_RANGES[] = {\r
+ {0x000000, 0x000009, EGCB_Control },\r
+ {0x00000a, 0x00000a, EGCB_LF },\r
+ {0x00000b, 0x00000c, EGCB_Control },\r
+ {0x00000d, 0x00000d, EGCB_CR },\r
+ {0x00000e, 0x00001f, EGCB_Control },\r
+ {0x00007f, 0x00009f, EGCB_Control },\r
+ {0x0000ad, 0x0000ad, EGCB_Control },\r
+ {0x000300, 0x00036f, EGCB_Extend },\r
+ {0x000483, 0x000489, EGCB_Extend },\r
+ {0x000591, 0x0005bd, EGCB_Extend },\r
+ {0x0005bf, 0x0005bf, EGCB_Extend },\r
+ {0x0005c1, 0x0005c2, EGCB_Extend },\r
+ {0x0005c4, 0x0005c5, EGCB_Extend },\r
+ {0x0005c7, 0x0005c7, EGCB_Extend },\r
+ {0x000600, 0x000605, EGCB_Prepend },\r
+ {0x000610, 0x00061a, EGCB_Extend },\r
+ {0x00061c, 0x00061c, EGCB_Control },\r
+ {0x00064b, 0x00065f, EGCB_Extend },\r
+ {0x000670, 0x000670, EGCB_Extend },\r
+ {0x0006d6, 0x0006dc, EGCB_Extend },\r
+ {0x0006dd, 0x0006dd, EGCB_Prepend },\r
+ {0x0006df, 0x0006e4, EGCB_Extend },\r
+ {0x0006e7, 0x0006e8, EGCB_Extend },\r
+ {0x0006ea, 0x0006ed, EGCB_Extend },\r
+ {0x00070f, 0x00070f, EGCB_Prepend },\r
+ {0x000711, 0x000711, EGCB_Extend },\r
+ {0x000730, 0x00074a, EGCB_Extend },\r
+ {0x0007a6, 0x0007b0, EGCB_Extend },\r
+ {0x0007eb, 0x0007f3, EGCB_Extend },\r
+ {0x0007fd, 0x0007fd, EGCB_Extend },\r
+ {0x000816, 0x000819, EGCB_Extend },\r
+ {0x00081b, 0x000823, EGCB_Extend },\r
+ {0x000825, 0x000827, EGCB_Extend },\r
+ {0x000829, 0x00082d, EGCB_Extend },\r
+ {0x000859, 0x00085b, EGCB_Extend },\r
+ {0x0008d3, 0x0008e1, EGCB_Extend },\r
+ {0x0008e2, 0x0008e2, EGCB_Prepend },\r
+ {0x0008e3, 0x000902, EGCB_Extend },\r
+ {0x000903, 0x000903, EGCB_SpacingMark },\r
+ {0x00093a, 0x00093a, EGCB_Extend },\r
+ {0x00093b, 0x00093b, EGCB_SpacingMark },\r
+ {0x00093c, 0x00093c, EGCB_Extend },\r
+ {0x00093e, 0x000940, EGCB_SpacingMark },\r
+ {0x000941, 0x000948, EGCB_Extend },\r
+ {0x000949, 0x00094c, EGCB_SpacingMark },\r
+ {0x00094d, 0x00094d, EGCB_Extend },\r
+ {0x00094e, 0x00094f, EGCB_SpacingMark },\r
+ {0x000951, 0x000957, EGCB_Extend },\r
+ {0x000962, 0x000963, EGCB_Extend },\r
+ {0x000981, 0x000981, EGCB_Extend },\r
+ {0x000982, 0x000983, EGCB_SpacingMark },\r
+ {0x0009bc, 0x0009bc, EGCB_Extend },\r
+ {0x0009be, 0x0009be, EGCB_Extend },\r
+ {0x0009bf, 0x0009c0, EGCB_SpacingMark },\r
+ {0x0009c1, 0x0009c4, EGCB_Extend },\r
+ {0x0009c7, 0x0009c8, EGCB_SpacingMark },\r
+ {0x0009cb, 0x0009cc, EGCB_SpacingMark },\r
+ {0x0009cd, 0x0009cd, EGCB_Extend },\r
+ {0x0009d7, 0x0009d7, EGCB_Extend },\r
+ {0x0009e2, 0x0009e3, EGCB_Extend },\r
+ {0x0009fe, 0x0009fe, EGCB_Extend },\r
+ {0x000a01, 0x000a02, EGCB_Extend },\r
+ {0x000a03, 0x000a03, EGCB_SpacingMark },\r
+ {0x000a3c, 0x000a3c, EGCB_Extend },\r
+ {0x000a3e, 0x000a40, EGCB_SpacingMark },\r
+ {0x000a41, 0x000a42, EGCB_Extend },\r
+ {0x000a47, 0x000a48, EGCB_Extend },\r
+ {0x000a4b, 0x000a4d, EGCB_Extend },\r
+ {0x000a51, 0x000a51, EGCB_Extend },\r
+ {0x000a70, 0x000a71, EGCB_Extend },\r
+ {0x000a75, 0x000a75, EGCB_Extend },\r
+ {0x000a81, 0x000a82, EGCB_Extend },\r
+ {0x000a83, 0x000a83, EGCB_SpacingMark },\r
+ {0x000abc, 0x000abc, EGCB_Extend },\r
+ {0x000abe, 0x000ac0, EGCB_SpacingMark },\r
+ {0x000ac1, 0x000ac5, EGCB_Extend },\r
+ {0x000ac7, 0x000ac8, EGCB_Extend },\r
+ {0x000ac9, 0x000ac9, EGCB_SpacingMark },\r
+ {0x000acb, 0x000acc, EGCB_SpacingMark },\r
+ {0x000acd, 0x000acd, EGCB_Extend },\r
+ {0x000ae2, 0x000ae3, EGCB_Extend },\r
+ {0x000afa, 0x000aff, EGCB_Extend },\r
+ {0x000b01, 0x000b01, EGCB_Extend },\r
+ {0x000b02, 0x000b03, EGCB_SpacingMark },\r
+ {0x000b3c, 0x000b3c, EGCB_Extend },\r
+ {0x000b3e, 0x000b3f, EGCB_Extend },\r
+ {0x000b40, 0x000b40, EGCB_SpacingMark },\r
+ {0x000b41, 0x000b44, EGCB_Extend },\r
+ {0x000b47, 0x000b48, EGCB_SpacingMark },\r
+ {0x000b4b, 0x000b4c, EGCB_SpacingMark },\r
+ {0x000b4d, 0x000b4d, EGCB_Extend },\r
+ {0x000b56, 0x000b57, EGCB_Extend },\r
+ {0x000b62, 0x000b63, EGCB_Extend },\r
+ {0x000b82, 0x000b82, EGCB_Extend },\r
+ {0x000bbe, 0x000bbe, EGCB_Extend },\r
+ {0x000bbf, 0x000bbf, EGCB_SpacingMark },\r
+ {0x000bc0, 0x000bc0, EGCB_Extend },\r
+ {0x000bc1, 0x000bc2, EGCB_SpacingMark },\r
+ {0x000bc6, 0x000bc8, EGCB_SpacingMark },\r
+ {0x000bca, 0x000bcc, EGCB_SpacingMark },\r
+ {0x000bcd, 0x000bcd, EGCB_Extend },\r
+ {0x000bd7, 0x000bd7, EGCB_Extend },\r
+ {0x000c00, 0x000c00, EGCB_Extend },\r
+ {0x000c01, 0x000c03, EGCB_SpacingMark },\r
+ {0x000c04, 0x000c04, EGCB_Extend },\r
+ {0x000c3e, 0x000c40, EGCB_Extend },\r
+ {0x000c41, 0x000c44, EGCB_SpacingMark },\r
+ {0x000c46, 0x000c48, EGCB_Extend },\r
+ {0x000c4a, 0x000c4d, EGCB_Extend },\r
+ {0x000c55, 0x000c56, EGCB_Extend },\r
+ {0x000c62, 0x000c63, EGCB_Extend },\r
+ {0x000c81, 0x000c81, EGCB_Extend },\r
+ {0x000c82, 0x000c83, EGCB_SpacingMark },\r
+ {0x000cbc, 0x000cbc, EGCB_Extend },\r
+ {0x000cbe, 0x000cbe, EGCB_SpacingMark },\r
+ {0x000cbf, 0x000cbf, EGCB_Extend },\r
+ {0x000cc0, 0x000cc1, EGCB_SpacingMark },\r
+ {0x000cc2, 0x000cc2, EGCB_Extend },\r
+ {0x000cc3, 0x000cc4, EGCB_SpacingMark },\r
+ {0x000cc6, 0x000cc6, EGCB_Extend },\r
+ {0x000cc7, 0x000cc8, EGCB_SpacingMark },\r
+ {0x000cca, 0x000ccb, EGCB_SpacingMark },\r
+ {0x000ccc, 0x000ccd, EGCB_Extend },\r
+ {0x000cd5, 0x000cd6, EGCB_Extend },\r
+ {0x000ce2, 0x000ce3, EGCB_Extend },\r
+ {0x000d00, 0x000d01, EGCB_Extend },\r
+ {0x000d02, 0x000d03, EGCB_SpacingMark },\r
+ {0x000d3b, 0x000d3c, EGCB_Extend },\r
+ {0x000d3e, 0x000d3e, EGCB_Extend },\r
+ {0x000d3f, 0x000d40, EGCB_SpacingMark },\r
+ {0x000d41, 0x000d44, EGCB_Extend },\r
+ {0x000d46, 0x000d48, EGCB_SpacingMark },\r
+ {0x000d4a, 0x000d4c, EGCB_SpacingMark },\r
+ {0x000d4d, 0x000d4d, EGCB_Extend },\r
+ {0x000d4e, 0x000d4e, EGCB_Prepend },\r
+ {0x000d57, 0x000d57, EGCB_Extend },\r
+ {0x000d62, 0x000d63, EGCB_Extend },\r
+ {0x000d82, 0x000d83, EGCB_SpacingMark },\r
+ {0x000dca, 0x000dca, EGCB_Extend },\r
+ {0x000dcf, 0x000dcf, EGCB_Extend },\r
+ {0x000dd0, 0x000dd1, EGCB_SpacingMark },\r
+ {0x000dd2, 0x000dd4, EGCB_Extend },\r
+ {0x000dd6, 0x000dd6, EGCB_Extend },\r
+ {0x000dd8, 0x000dde, EGCB_SpacingMark },\r
+ {0x000ddf, 0x000ddf, EGCB_Extend },\r
+ {0x000df2, 0x000df3, EGCB_SpacingMark },\r
+ {0x000e31, 0x000e31, EGCB_Extend },\r
+ {0x000e33, 0x000e33, EGCB_SpacingMark },\r
+ {0x000e34, 0x000e3a, EGCB_Extend },\r
+ {0x000e47, 0x000e4e, EGCB_Extend },\r
+ {0x000eb1, 0x000eb1, EGCB_Extend },\r
+ {0x000eb3, 0x000eb3, EGCB_SpacingMark },\r
+ {0x000eb4, 0x000eb9, EGCB_Extend },\r
+ {0x000ebb, 0x000ebc, EGCB_Extend },\r
+ {0x000ec8, 0x000ecd, EGCB_Extend },\r
+ {0x000f18, 0x000f19, EGCB_Extend },\r
+ {0x000f35, 0x000f35, EGCB_Extend },\r
+ {0x000f37, 0x000f37, EGCB_Extend },\r
+ {0x000f39, 0x000f39, EGCB_Extend },\r
+ {0x000f3e, 0x000f3f, EGCB_SpacingMark },\r
+ {0x000f71, 0x000f7e, EGCB_Extend },\r
+ {0x000f7f, 0x000f7f, EGCB_SpacingMark },\r
+ {0x000f80, 0x000f84, EGCB_Extend },\r
+ {0x000f86, 0x000f87, EGCB_Extend },\r
+ {0x000f8d, 0x000f97, EGCB_Extend },\r
+ {0x000f99, 0x000fbc, EGCB_Extend },\r
+ {0x000fc6, 0x000fc6, EGCB_Extend },\r
+ {0x00102d, 0x001030, EGCB_Extend },\r
+ {0x001031, 0x001031, EGCB_SpacingMark },\r
+ {0x001032, 0x001037, EGCB_Extend },\r
+ {0x001039, 0x00103a, EGCB_Extend },\r
+ {0x00103b, 0x00103c, EGCB_SpacingMark },\r
+ {0x00103d, 0x00103e, EGCB_Extend },\r
+ {0x001056, 0x001057, EGCB_SpacingMark },\r
+ {0x001058, 0x001059, EGCB_Extend },\r
+ {0x00105e, 0x001060, EGCB_Extend },\r
+ {0x001071, 0x001074, EGCB_Extend },\r
+ {0x001082, 0x001082, EGCB_Extend },\r
+ {0x001084, 0x001084, EGCB_SpacingMark },\r
+ {0x001085, 0x001086, EGCB_Extend },\r
+ {0x00108d, 0x00108d, EGCB_Extend },\r
+ {0x00109d, 0x00109d, EGCB_Extend },\r
+ {0x001100, 0x00115f, EGCB_L },\r
+ {0x001160, 0x0011a7, EGCB_V },\r
+ {0x0011a8, 0x0011ff, EGCB_T },\r
+ {0x00135d, 0x00135f, EGCB_Extend },\r
+ {0x001712, 0x001714, EGCB_Extend },\r
+ {0x001732, 0x001734, EGCB_Extend },\r
+ {0x001752, 0x001753, EGCB_Extend },\r
+ {0x001772, 0x001773, EGCB_Extend },\r
+ {0x0017b4, 0x0017b5, EGCB_Extend },\r
+ {0x0017b6, 0x0017b6, EGCB_SpacingMark },\r
+ {0x0017b7, 0x0017bd, EGCB_Extend },\r
+ {0x0017be, 0x0017c5, EGCB_SpacingMark },\r
+ {0x0017c6, 0x0017c6, EGCB_Extend },\r
+ {0x0017c7, 0x0017c8, EGCB_SpacingMark },\r
+ {0x0017c9, 0x0017d3, EGCB_Extend },\r
+ {0x0017dd, 0x0017dd, EGCB_Extend },\r
+ {0x00180b, 0x00180d, EGCB_Extend },\r
+ {0x00180e, 0x00180e, EGCB_Control },\r
+ {0x001885, 0x001886, EGCB_Extend },\r
+ {0x0018a9, 0x0018a9, EGCB_Extend },\r
+ {0x001920, 0x001922, EGCB_Extend },\r
+ {0x001923, 0x001926, EGCB_SpacingMark },\r
+ {0x001927, 0x001928, EGCB_Extend },\r
+ {0x001929, 0x00192b, EGCB_SpacingMark },\r
+ {0x001930, 0x001931, EGCB_SpacingMark },\r
+ {0x001932, 0x001932, EGCB_Extend },\r
+ {0x001933, 0x001938, EGCB_SpacingMark },\r
+ {0x001939, 0x00193b, EGCB_Extend },\r
+ {0x001a17, 0x001a18, EGCB_Extend },\r
+ {0x001a19, 0x001a1a, EGCB_SpacingMark },\r
+ {0x001a1b, 0x001a1b, EGCB_Extend },\r
+ {0x001a55, 0x001a55, EGCB_SpacingMark },\r
+ {0x001a56, 0x001a56, EGCB_Extend },\r
+ {0x001a57, 0x001a57, EGCB_SpacingMark },\r
+ {0x001a58, 0x001a5e, EGCB_Extend },\r
+ {0x001a60, 0x001a60, EGCB_Extend },\r
+ {0x001a62, 0x001a62, EGCB_Extend },\r
+ {0x001a65, 0x001a6c, EGCB_Extend },\r
+ {0x001a6d, 0x001a72, EGCB_SpacingMark },\r
+ {0x001a73, 0x001a7c, EGCB_Extend },\r
+ {0x001a7f, 0x001a7f, EGCB_Extend },\r
+ {0x001ab0, 0x001abe, EGCB_Extend },\r
+ {0x001b00, 0x001b03, EGCB_Extend },\r
+ {0x001b04, 0x001b04, EGCB_SpacingMark },\r
+ {0x001b34, 0x001b34, EGCB_Extend },\r
+ {0x001b35, 0x001b35, EGCB_SpacingMark },\r
+ {0x001b36, 0x001b3a, EGCB_Extend },\r
+ {0x001b3b, 0x001b3b, EGCB_SpacingMark },\r
+ {0x001b3c, 0x001b3c, EGCB_Extend },\r
+ {0x001b3d, 0x001b41, EGCB_SpacingMark },\r
+ {0x001b42, 0x001b42, EGCB_Extend },\r
+ {0x001b43, 0x001b44, EGCB_SpacingMark },\r
+ {0x001b6b, 0x001b73, EGCB_Extend },\r
+ {0x001b80, 0x001b81, EGCB_Extend },\r
+ {0x001b82, 0x001b82, EGCB_SpacingMark },\r
+ {0x001ba1, 0x001ba1, EGCB_SpacingMark },\r
+ {0x001ba2, 0x001ba5, EGCB_Extend },\r
+ {0x001ba6, 0x001ba7, EGCB_SpacingMark },\r
+ {0x001ba8, 0x001ba9, EGCB_Extend },\r
+ {0x001baa, 0x001baa, EGCB_SpacingMark },\r
+ {0x001bab, 0x001bad, EGCB_Extend },\r
+ {0x001be6, 0x001be6, EGCB_Extend },\r
+ {0x001be7, 0x001be7, EGCB_SpacingMark },\r
+ {0x001be8, 0x001be9, EGCB_Extend },\r
+ {0x001bea, 0x001bec, EGCB_SpacingMark },\r
+ {0x001bed, 0x001bed, EGCB_Extend },\r
+ {0x001bee, 0x001bee, EGCB_SpacingMark },\r
+ {0x001bef, 0x001bf1, EGCB_Extend },\r
+ {0x001bf2, 0x001bf3, EGCB_SpacingMark },\r
+ {0x001c24, 0x001c2b, EGCB_SpacingMark },\r
+ {0x001c2c, 0x001c33, EGCB_Extend },\r
+ {0x001c34, 0x001c35, EGCB_SpacingMark },\r
+ {0x001c36, 0x001c37, EGCB_Extend },\r
+ {0x001cd0, 0x001cd2, EGCB_Extend },\r
+ {0x001cd4, 0x001ce0, EGCB_Extend },\r
+ {0x001ce1, 0x001ce1, EGCB_SpacingMark },\r
+ {0x001ce2, 0x001ce8, EGCB_Extend },\r
+ {0x001ced, 0x001ced, EGCB_Extend },\r
+ {0x001cf2, 0x001cf3, EGCB_SpacingMark },\r
+ {0x001cf4, 0x001cf4, EGCB_Extend },\r
+ {0x001cf7, 0x001cf7, EGCB_SpacingMark },\r
+ {0x001cf8, 0x001cf9, EGCB_Extend },\r
+ {0x001dc0, 0x001df9, EGCB_Extend },\r
+ {0x001dfb, 0x001dff, EGCB_Extend },\r
+ {0x00200b, 0x00200b, EGCB_Control },\r
+ {0x00200c, 0x00200c, EGCB_Extend },\r
+ {0x00200d, 0x00200d, EGCB_ZWJ },\r
+ {0x00200e, 0x00200f, EGCB_Control },\r
+ {0x002028, 0x00202e, EGCB_Control },\r
+ {0x002060, 0x00206f, EGCB_Control },\r
+ {0x0020d0, 0x0020f0, EGCB_Extend },\r
+ {0x002cef, 0x002cf1, EGCB_Extend },\r
+ {0x002d7f, 0x002d7f, EGCB_Extend },\r
+ {0x002de0, 0x002dff, EGCB_Extend },\r
+ {0x00302a, 0x00302f, EGCB_Extend },\r
+ {0x003099, 0x00309a, EGCB_Extend },\r
+ {0x00a66f, 0x00a672, EGCB_Extend },\r
+ {0x00a674, 0x00a67d, EGCB_Extend },\r
+ {0x00a69e, 0x00a69f, EGCB_Extend },\r
+ {0x00a6f0, 0x00a6f1, EGCB_Extend },\r
+ {0x00a802, 0x00a802, EGCB_Extend },\r
+ {0x00a806, 0x00a806, EGCB_Extend },\r
+ {0x00a80b, 0x00a80b, EGCB_Extend },\r
+ {0x00a823, 0x00a824, EGCB_SpacingMark },\r
+ {0x00a825, 0x00a826, EGCB_Extend },\r
+ {0x00a827, 0x00a827, EGCB_SpacingMark },\r
+ {0x00a880, 0x00a881, EGCB_SpacingMark },\r
+ {0x00a8b4, 0x00a8c3, EGCB_SpacingMark },\r
+ {0x00a8c4, 0x00a8c5, EGCB_Extend },\r
+ {0x00a8e0, 0x00a8f1, EGCB_Extend },\r
+ {0x00a8ff, 0x00a8ff, EGCB_Extend },\r
+ {0x00a926, 0x00a92d, EGCB_Extend },\r
+ {0x00a947, 0x00a951, EGCB_Extend },\r
+ {0x00a952, 0x00a953, EGCB_SpacingMark },\r
+ {0x00a960, 0x00a97c, EGCB_L },\r
+ {0x00a980, 0x00a982, EGCB_Extend },\r
+ {0x00a983, 0x00a983, EGCB_SpacingMark },\r
+ {0x00a9b3, 0x00a9b3, EGCB_Extend },\r
+ {0x00a9b4, 0x00a9b5, EGCB_SpacingMark },\r
+ {0x00a9b6, 0x00a9b9, EGCB_Extend },\r
+ {0x00a9ba, 0x00a9bb, EGCB_SpacingMark },\r
+ {0x00a9bc, 0x00a9bc, EGCB_Extend },\r
+ {0x00a9bd, 0x00a9c0, EGCB_SpacingMark },\r
+ {0x00a9e5, 0x00a9e5, EGCB_Extend },\r
+ {0x00aa29, 0x00aa2e, EGCB_Extend },\r
+ {0x00aa2f, 0x00aa30, EGCB_SpacingMark },\r
+ {0x00aa31, 0x00aa32, EGCB_Extend },\r
+ {0x00aa33, 0x00aa34, EGCB_SpacingMark },\r
+ {0x00aa35, 0x00aa36, EGCB_Extend },\r
+ {0x00aa43, 0x00aa43, EGCB_Extend },\r
+ {0x00aa4c, 0x00aa4c, EGCB_Extend },\r
+ {0x00aa4d, 0x00aa4d, EGCB_SpacingMark },\r
+ {0x00aa7c, 0x00aa7c, EGCB_Extend },\r
+ {0x00aab0, 0x00aab0, EGCB_Extend },\r
+ {0x00aab2, 0x00aab4, EGCB_Extend },\r
+ {0x00aab7, 0x00aab8, EGCB_Extend },\r
+ {0x00aabe, 0x00aabf, EGCB_Extend },\r
+ {0x00aac1, 0x00aac1, EGCB_Extend },\r
+ {0x00aaeb, 0x00aaeb, EGCB_SpacingMark },\r
+ {0x00aaec, 0x00aaed, EGCB_Extend },\r
+ {0x00aaee, 0x00aaef, EGCB_SpacingMark },\r
+ {0x00aaf5, 0x00aaf5, EGCB_SpacingMark },\r
+ {0x00aaf6, 0x00aaf6, EGCB_Extend },\r
+ {0x00abe3, 0x00abe4, EGCB_SpacingMark },\r
+ {0x00abe5, 0x00abe5, EGCB_Extend },\r
+ {0x00abe6, 0x00abe7, EGCB_SpacingMark },\r
+ {0x00abe8, 0x00abe8, EGCB_Extend },\r
+ {0x00abe9, 0x00abea, EGCB_SpacingMark },\r
+ {0x00abec, 0x00abec, EGCB_SpacingMark },\r
+ {0x00abed, 0x00abed, EGCB_Extend },\r
+ {0x00ac00, 0x00ac00, EGCB_LV },\r
+ {0x00ac01, 0x00ac1b, EGCB_LVT },\r
+ {0x00ac1c, 0x00ac1c, EGCB_LV },\r
+ {0x00ac1d, 0x00ac37, EGCB_LVT },\r
+ {0x00ac38, 0x00ac38, EGCB_LV },\r
+ {0x00ac39, 0x00ac53, EGCB_LVT },\r
+ {0x00ac54, 0x00ac54, EGCB_LV },\r
+ {0x00ac55, 0x00ac6f, EGCB_LVT },\r
+ {0x00ac70, 0x00ac70, EGCB_LV },\r
+ {0x00ac71, 0x00ac8b, EGCB_LVT },\r
+ {0x00ac8c, 0x00ac8c, EGCB_LV },\r
+ {0x00ac8d, 0x00aca7, EGCB_LVT },\r
+ {0x00aca8, 0x00aca8, EGCB_LV },\r
+ {0x00aca9, 0x00acc3, EGCB_LVT },\r
+ {0x00acc4, 0x00acc4, EGCB_LV },\r
+ {0x00acc5, 0x00acdf, EGCB_LVT },\r
+ {0x00ace0, 0x00ace0, EGCB_LV },\r
+ {0x00ace1, 0x00acfb, EGCB_LVT },\r
+ {0x00acfc, 0x00acfc, EGCB_LV },\r
+ {0x00acfd, 0x00ad17, EGCB_LVT },\r
+ {0x00ad18, 0x00ad18, EGCB_LV },\r
+ {0x00ad19, 0x00ad33, EGCB_LVT },\r
+ {0x00ad34, 0x00ad34, EGCB_LV },\r
+ {0x00ad35, 0x00ad4f, EGCB_LVT },\r
+ {0x00ad50, 0x00ad50, EGCB_LV },\r
+ {0x00ad51, 0x00ad6b, EGCB_LVT },\r
+ {0x00ad6c, 0x00ad6c, EGCB_LV },\r
+ {0x00ad6d, 0x00ad87, EGCB_LVT },\r
+ {0x00ad88, 0x00ad88, EGCB_LV },\r
+ {0x00ad89, 0x00ada3, EGCB_LVT },\r
+ {0x00ada4, 0x00ada4, EGCB_LV },\r
+ {0x00ada5, 0x00adbf, EGCB_LVT },\r
+ {0x00adc0, 0x00adc0, EGCB_LV },\r
+ {0x00adc1, 0x00addb, EGCB_LVT },\r
+ {0x00addc, 0x00addc, EGCB_LV },\r
+ {0x00addd, 0x00adf7, EGCB_LVT },\r
+ {0x00adf8, 0x00adf8, EGCB_LV },\r
+ {0x00adf9, 0x00ae13, EGCB_LVT },\r
+ {0x00ae14, 0x00ae14, EGCB_LV },\r
+ {0x00ae15, 0x00ae2f, EGCB_LVT },\r
+ {0x00ae30, 0x00ae30, EGCB_LV },\r
+ {0x00ae31, 0x00ae4b, EGCB_LVT },\r
+ {0x00ae4c, 0x00ae4c, EGCB_LV },\r
+ {0x00ae4d, 0x00ae67, EGCB_LVT },\r
+ {0x00ae68, 0x00ae68, EGCB_LV },\r
+ {0x00ae69, 0x00ae83, EGCB_LVT },\r
+ {0x00ae84, 0x00ae84, EGCB_LV },\r
+ {0x00ae85, 0x00ae9f, EGCB_LVT },\r
+ {0x00aea0, 0x00aea0, EGCB_LV },\r
+ {0x00aea1, 0x00aebb, EGCB_LVT },\r
+ {0x00aebc, 0x00aebc, EGCB_LV },\r
+ {0x00aebd, 0x00aed7, EGCB_LVT },\r
+ {0x00aed8, 0x00aed8, EGCB_LV },\r
+ {0x00aed9, 0x00aef3, EGCB_LVT },\r
+ {0x00aef4, 0x00aef4, EGCB_LV },\r
+ {0x00aef5, 0x00af0f, EGCB_LVT },\r
+ {0x00af10, 0x00af10, EGCB_LV },\r
+ {0x00af11, 0x00af2b, EGCB_LVT },\r
+ {0x00af2c, 0x00af2c, EGCB_LV },\r
+ {0x00af2d, 0x00af47, EGCB_LVT },\r
+ {0x00af48, 0x00af48, EGCB_LV },\r
+ {0x00af49, 0x00af63, EGCB_LVT },\r
+ {0x00af64, 0x00af64, EGCB_LV },\r
+ {0x00af65, 0x00af7f, EGCB_LVT },\r
+ {0x00af80, 0x00af80, EGCB_LV },\r
+ {0x00af81, 0x00af9b, EGCB_LVT },\r
+ {0x00af9c, 0x00af9c, EGCB_LV },\r
+ {0x00af9d, 0x00afb7, EGCB_LVT },\r
+ {0x00afb8, 0x00afb8, EGCB_LV },\r
+ {0x00afb9, 0x00afd3, EGCB_LVT },\r
+ {0x00afd4, 0x00afd4, EGCB_LV },\r
+ {0x00afd5, 0x00afef, EGCB_LVT },\r
+ {0x00aff0, 0x00aff0, EGCB_LV },\r
+ {0x00aff1, 0x00b00b, EGCB_LVT },\r
+ {0x00b00c, 0x00b00c, EGCB_LV },\r
+ {0x00b00d, 0x00b027, EGCB_LVT },\r
+ {0x00b028, 0x00b028, EGCB_LV },\r
+ {0x00b029, 0x00b043, EGCB_LVT },\r
+ {0x00b044, 0x00b044, EGCB_LV },\r
+ {0x00b045, 0x00b05f, EGCB_LVT },\r
+ {0x00b060, 0x00b060, EGCB_LV },\r
+ {0x00b061, 0x00b07b, EGCB_LVT },\r
+ {0x00b07c, 0x00b07c, EGCB_LV },\r
+ {0x00b07d, 0x00b097, EGCB_LVT },\r
+ {0x00b098, 0x00b098, EGCB_LV },\r
+ {0x00b099, 0x00b0b3, EGCB_LVT },\r
+ {0x00b0b4, 0x00b0b4, EGCB_LV },\r
+ {0x00b0b5, 0x00b0cf, EGCB_LVT },\r
+ {0x00b0d0, 0x00b0d0, EGCB_LV },\r
+ {0x00b0d1, 0x00b0eb, EGCB_LVT },\r
+ {0x00b0ec, 0x00b0ec, EGCB_LV },\r
+ {0x00b0ed, 0x00b107, EGCB_LVT },\r
+ {0x00b108, 0x00b108, EGCB_LV },\r
+ {0x00b109, 0x00b123, EGCB_LVT },\r
+ {0x00b124, 0x00b124, EGCB_LV },\r
+ {0x00b125, 0x00b13f, EGCB_LVT },\r
+ {0x00b140, 0x00b140, EGCB_LV },\r
+ {0x00b141, 0x00b15b, EGCB_LVT },\r
+ {0x00b15c, 0x00b15c, EGCB_LV },\r
+ {0x00b15d, 0x00b177, EGCB_LVT },\r
+ {0x00b178, 0x00b178, EGCB_LV },\r
+ {0x00b179, 0x00b193, EGCB_LVT },\r
+ {0x00b194, 0x00b194, EGCB_LV },\r
+ {0x00b195, 0x00b1af, EGCB_LVT },\r
+ {0x00b1b0, 0x00b1b0, EGCB_LV },\r
+ {0x00b1b1, 0x00b1cb, EGCB_LVT },\r
+ {0x00b1cc, 0x00b1cc, EGCB_LV },\r
+ {0x00b1cd, 0x00b1e7, EGCB_LVT },\r
+ {0x00b1e8, 0x00b1e8, EGCB_LV },\r
+ {0x00b1e9, 0x00b203, EGCB_LVT },\r
+ {0x00b204, 0x00b204, EGCB_LV },\r
+ {0x00b205, 0x00b21f, EGCB_LVT },\r
+ {0x00b220, 0x00b220, EGCB_LV },\r
+ {0x00b221, 0x00b23b, EGCB_LVT },\r
+ {0x00b23c, 0x00b23c, EGCB_LV },\r
+ {0x00b23d, 0x00b257, EGCB_LVT },\r
+ {0x00b258, 0x00b258, EGCB_LV },\r
+ {0x00b259, 0x00b273, EGCB_LVT },\r
+ {0x00b274, 0x00b274, EGCB_LV },\r
+ {0x00b275, 0x00b28f, EGCB_LVT },\r
+ {0x00b290, 0x00b290, EGCB_LV },\r
+ {0x00b291, 0x00b2ab, EGCB_LVT },\r
+ {0x00b2ac, 0x00b2ac, EGCB_LV },\r
+ {0x00b2ad, 0x00b2c7, EGCB_LVT },\r
+ {0x00b2c8, 0x00b2c8, EGCB_LV },\r
+ {0x00b2c9, 0x00b2e3, EGCB_LVT },\r
+ {0x00b2e4, 0x00b2e4, EGCB_LV },\r
+ {0x00b2e5, 0x00b2ff, EGCB_LVT },\r
+ {0x00b300, 0x00b300, EGCB_LV },\r
+ {0x00b301, 0x00b31b, EGCB_LVT },\r
+ {0x00b31c, 0x00b31c, EGCB_LV },\r
+ {0x00b31d, 0x00b337, EGCB_LVT },\r
+ {0x00b338, 0x00b338, EGCB_LV },\r
+ {0x00b339, 0x00b353, EGCB_LVT },\r
+ {0x00b354, 0x00b354, EGCB_LV },\r
+ {0x00b355, 0x00b36f, EGCB_LVT },\r
+ {0x00b370, 0x00b370, EGCB_LV },\r
+ {0x00b371, 0x00b38b, EGCB_LVT },\r
+ {0x00b38c, 0x00b38c, EGCB_LV },\r
+ {0x00b38d, 0x00b3a7, EGCB_LVT },\r
+ {0x00b3a8, 0x00b3a8, EGCB_LV },\r
+ {0x00b3a9, 0x00b3c3, EGCB_LVT },\r
+ {0x00b3c4, 0x00b3c4, EGCB_LV },\r
+ {0x00b3c5, 0x00b3df, EGCB_LVT },\r
+ {0x00b3e0, 0x00b3e0, EGCB_LV },\r
+ {0x00b3e1, 0x00b3fb, EGCB_LVT },\r
+ {0x00b3fc, 0x00b3fc, EGCB_LV },\r
+ {0x00b3fd, 0x00b417, EGCB_LVT },\r
+ {0x00b418, 0x00b418, EGCB_LV },\r
+ {0x00b419, 0x00b433, EGCB_LVT },\r
+ {0x00b434, 0x00b434, EGCB_LV },\r
+ {0x00b435, 0x00b44f, EGCB_LVT },\r
+ {0x00b450, 0x00b450, EGCB_LV },\r
+ {0x00b451, 0x00b46b, EGCB_LVT },\r
+ {0x00b46c, 0x00b46c, EGCB_LV },\r
+ {0x00b46d, 0x00b487, EGCB_LVT },\r
+ {0x00b488, 0x00b488, EGCB_LV },\r
+ {0x00b489, 0x00b4a3, EGCB_LVT },\r
+ {0x00b4a4, 0x00b4a4, EGCB_LV },\r
+ {0x00b4a5, 0x00b4bf, EGCB_LVT },\r
+ {0x00b4c0, 0x00b4c0, EGCB_LV },\r
+ {0x00b4c1, 0x00b4db, EGCB_LVT },\r
+ {0x00b4dc, 0x00b4dc, EGCB_LV },\r
+ {0x00b4dd, 0x00b4f7, EGCB_LVT },\r
+ {0x00b4f8, 0x00b4f8, EGCB_LV },\r
+ {0x00b4f9, 0x00b513, EGCB_LVT },\r
+ {0x00b514, 0x00b514, EGCB_LV },\r
+ {0x00b515, 0x00b52f, EGCB_LVT },\r
+ {0x00b530, 0x00b530, EGCB_LV },\r
+ {0x00b531, 0x00b54b, EGCB_LVT },\r
+ {0x00b54c, 0x00b54c, EGCB_LV },\r
+ {0x00b54d, 0x00b567, EGCB_LVT },\r
+ {0x00b568, 0x00b568, EGCB_LV },\r
+ {0x00b569, 0x00b583, EGCB_LVT },\r
+ {0x00b584, 0x00b584, EGCB_LV },\r
+ {0x00b585, 0x00b59f, EGCB_LVT },\r
+ {0x00b5a0, 0x00b5a0, EGCB_LV },\r
+ {0x00b5a1, 0x00b5bb, EGCB_LVT },\r
+ {0x00b5bc, 0x00b5bc, EGCB_LV },\r
+ {0x00b5bd, 0x00b5d7, EGCB_LVT },\r
+ {0x00b5d8, 0x00b5d8, EGCB_LV },\r
+ {0x00b5d9, 0x00b5f3, EGCB_LVT },\r
+ {0x00b5f4, 0x00b5f4, EGCB_LV },\r
+ {0x00b5f5, 0x00b60f, EGCB_LVT },\r
+ {0x00b610, 0x00b610, EGCB_LV },\r
+ {0x00b611, 0x00b62b, EGCB_LVT },\r
+ {0x00b62c, 0x00b62c, EGCB_LV },\r
+ {0x00b62d, 0x00b647, EGCB_LVT },\r
+ {0x00b648, 0x00b648, EGCB_LV },\r
+ {0x00b649, 0x00b663, EGCB_LVT },\r
+ {0x00b664, 0x00b664, EGCB_LV },\r
+ {0x00b665, 0x00b67f, EGCB_LVT },\r
+ {0x00b680, 0x00b680, EGCB_LV },\r
+ {0x00b681, 0x00b69b, EGCB_LVT },\r
+ {0x00b69c, 0x00b69c, EGCB_LV },\r
+ {0x00b69d, 0x00b6b7, EGCB_LVT },\r
+ {0x00b6b8, 0x00b6b8, EGCB_LV },\r
+ {0x00b6b9, 0x00b6d3, EGCB_LVT },\r
+ {0x00b6d4, 0x00b6d4, EGCB_LV },\r
+ {0x00b6d5, 0x00b6ef, EGCB_LVT },\r
+ {0x00b6f0, 0x00b6f0, EGCB_LV },\r
+ {0x00b6f1, 0x00b70b, EGCB_LVT },\r
+ {0x00b70c, 0x00b70c, EGCB_LV },\r
+ {0x00b70d, 0x00b727, EGCB_LVT },\r
+ {0x00b728, 0x00b728, EGCB_LV },\r
+ {0x00b729, 0x00b743, EGCB_LVT },\r
+ {0x00b744, 0x00b744, EGCB_LV },\r
+ {0x00b745, 0x00b75f, EGCB_LVT },\r
+ {0x00b760, 0x00b760, EGCB_LV },\r
+ {0x00b761, 0x00b77b, EGCB_LVT },\r
+ {0x00b77c, 0x00b77c, EGCB_LV },\r
+ {0x00b77d, 0x00b797, EGCB_LVT },\r
+ {0x00b798, 0x00b798, EGCB_LV },\r
+ {0x00b799, 0x00b7b3, EGCB_LVT },\r
+ {0x00b7b4, 0x00b7b4, EGCB_LV },\r
+ {0x00b7b5, 0x00b7cf, EGCB_LVT },\r
+ {0x00b7d0, 0x00b7d0, EGCB_LV },\r
+ {0x00b7d1, 0x00b7eb, EGCB_LVT },\r
+ {0x00b7ec, 0x00b7ec, EGCB_LV },\r
+ {0x00b7ed, 0x00b807, EGCB_LVT },\r
+ {0x00b808, 0x00b808, EGCB_LV },\r
+ {0x00b809, 0x00b823, EGCB_LVT },\r
+ {0x00b824, 0x00b824, EGCB_LV },\r
+ {0x00b825, 0x00b83f, EGCB_LVT },\r
+ {0x00b840, 0x00b840, EGCB_LV },\r
+ {0x00b841, 0x00b85b, EGCB_LVT },\r
+ {0x00b85c, 0x00b85c, EGCB_LV },\r
+ {0x00b85d, 0x00b877, EGCB_LVT },\r
+ {0x00b878, 0x00b878, EGCB_LV },\r
+ {0x00b879, 0x00b893, EGCB_LVT },\r
+ {0x00b894, 0x00b894, EGCB_LV },\r
+ {0x00b895, 0x00b8af, EGCB_LVT },\r
+ {0x00b8b0, 0x00b8b0, EGCB_LV },\r
+ {0x00b8b1, 0x00b8cb, EGCB_LVT },\r
+ {0x00b8cc, 0x00b8cc, EGCB_LV },\r
+ {0x00b8cd, 0x00b8e7, EGCB_LVT },\r
+ {0x00b8e8, 0x00b8e8, EGCB_LV },\r
+ {0x00b8e9, 0x00b903, EGCB_LVT },\r
+ {0x00b904, 0x00b904, EGCB_LV },\r
+ {0x00b905, 0x00b91f, EGCB_LVT },\r
+ {0x00b920, 0x00b920, EGCB_LV },\r
+ {0x00b921, 0x00b93b, EGCB_LVT },\r
+ {0x00b93c, 0x00b93c, EGCB_LV },\r
+ {0x00b93d, 0x00b957, EGCB_LVT },\r
+ {0x00b958, 0x00b958, EGCB_LV },\r
+ {0x00b959, 0x00b973, EGCB_LVT },\r
+ {0x00b974, 0x00b974, EGCB_LV },\r
+ {0x00b975, 0x00b98f, EGCB_LVT },\r
+ {0x00b990, 0x00b990, EGCB_LV },\r
+ {0x00b991, 0x00b9ab, EGCB_LVT },\r
+ {0x00b9ac, 0x00b9ac, EGCB_LV },\r
+ {0x00b9ad, 0x00b9c7, EGCB_LVT },\r
+ {0x00b9c8, 0x00b9c8, EGCB_LV },\r
+ {0x00b9c9, 0x00b9e3, EGCB_LVT },\r
+ {0x00b9e4, 0x00b9e4, EGCB_LV },\r
+ {0x00b9e5, 0x00b9ff, EGCB_LVT },\r
+ {0x00ba00, 0x00ba00, EGCB_LV },\r
+ {0x00ba01, 0x00ba1b, EGCB_LVT },\r
+ {0x00ba1c, 0x00ba1c, EGCB_LV },\r
+ {0x00ba1d, 0x00ba37, EGCB_LVT },\r
+ {0x00ba38, 0x00ba38, EGCB_LV },\r
+ {0x00ba39, 0x00ba53, EGCB_LVT },\r
+ {0x00ba54, 0x00ba54, EGCB_LV },\r
+ {0x00ba55, 0x00ba6f, EGCB_LVT },\r
+ {0x00ba70, 0x00ba70, EGCB_LV },\r
+ {0x00ba71, 0x00ba8b, EGCB_LVT },\r
+ {0x00ba8c, 0x00ba8c, EGCB_LV },\r
+ {0x00ba8d, 0x00baa7, EGCB_LVT },\r
+ {0x00baa8, 0x00baa8, EGCB_LV },\r
+ {0x00baa9, 0x00bac3, EGCB_LVT },\r
+ {0x00bac4, 0x00bac4, EGCB_LV },\r
+ {0x00bac5, 0x00badf, EGCB_LVT },\r
+ {0x00bae0, 0x00bae0, EGCB_LV },\r
+ {0x00bae1, 0x00bafb, EGCB_LVT },\r
+ {0x00bafc, 0x00bafc, EGCB_LV },\r
+ {0x00bafd, 0x00bb17, EGCB_LVT },\r
+ {0x00bb18, 0x00bb18, EGCB_LV },\r
+ {0x00bb19, 0x00bb33, EGCB_LVT },\r
+ {0x00bb34, 0x00bb34, EGCB_LV },\r
+ {0x00bb35, 0x00bb4f, EGCB_LVT },\r
+ {0x00bb50, 0x00bb50, EGCB_LV },\r
+ {0x00bb51, 0x00bb6b, EGCB_LVT },\r
+ {0x00bb6c, 0x00bb6c, EGCB_LV },\r
+ {0x00bb6d, 0x00bb87, EGCB_LVT },\r
+ {0x00bb88, 0x00bb88, EGCB_LV },\r
+ {0x00bb89, 0x00bba3, EGCB_LVT },\r
+ {0x00bba4, 0x00bba4, EGCB_LV },\r
+ {0x00bba5, 0x00bbbf, EGCB_LVT },\r
+ {0x00bbc0, 0x00bbc0, EGCB_LV },\r
+ {0x00bbc1, 0x00bbdb, EGCB_LVT },\r
+ {0x00bbdc, 0x00bbdc, EGCB_LV },\r
+ {0x00bbdd, 0x00bbf7, EGCB_LVT },\r
+ {0x00bbf8, 0x00bbf8, EGCB_LV },\r
+ {0x00bbf9, 0x00bc13, EGCB_LVT },\r
+ {0x00bc14, 0x00bc14, EGCB_LV },\r
+ {0x00bc15, 0x00bc2f, EGCB_LVT },\r
+ {0x00bc30, 0x00bc30, EGCB_LV },\r
+ {0x00bc31, 0x00bc4b, EGCB_LVT },\r
+ {0x00bc4c, 0x00bc4c, EGCB_LV },\r
+ {0x00bc4d, 0x00bc67, EGCB_LVT },\r
+ {0x00bc68, 0x00bc68, EGCB_LV },\r
+ {0x00bc69, 0x00bc83, EGCB_LVT },\r
+ {0x00bc84, 0x00bc84, EGCB_LV },\r
+ {0x00bc85, 0x00bc9f, EGCB_LVT },\r
+ {0x00bca0, 0x00bca0, EGCB_LV },\r
+ {0x00bca1, 0x00bcbb, EGCB_LVT },\r
+ {0x00bcbc, 0x00bcbc, EGCB_LV },\r
+ {0x00bcbd, 0x00bcd7, EGCB_LVT },\r
+ {0x00bcd8, 0x00bcd8, EGCB_LV },\r
+ {0x00bcd9, 0x00bcf3, EGCB_LVT },\r
+ {0x00bcf4, 0x00bcf4, EGCB_LV },\r
+ {0x00bcf5, 0x00bd0f, EGCB_LVT },\r
+ {0x00bd10, 0x00bd10, EGCB_LV },\r
+ {0x00bd11, 0x00bd2b, EGCB_LVT },\r
+ {0x00bd2c, 0x00bd2c, EGCB_LV },\r
+ {0x00bd2d, 0x00bd47, EGCB_LVT },\r
+ {0x00bd48, 0x00bd48, EGCB_LV },\r
+ {0x00bd49, 0x00bd63, EGCB_LVT },\r
+ {0x00bd64, 0x00bd64, EGCB_LV },\r
+ {0x00bd65, 0x00bd7f, EGCB_LVT },\r
+ {0x00bd80, 0x00bd80, EGCB_LV },\r
+ {0x00bd81, 0x00bd9b, EGCB_LVT },\r
+ {0x00bd9c, 0x00bd9c, EGCB_LV },\r
+ {0x00bd9d, 0x00bdb7, EGCB_LVT },\r
+ {0x00bdb8, 0x00bdb8, EGCB_LV },\r
+ {0x00bdb9, 0x00bdd3, EGCB_LVT },\r
+ {0x00bdd4, 0x00bdd4, EGCB_LV },\r
+ {0x00bdd5, 0x00bdef, EGCB_LVT },\r
+ {0x00bdf0, 0x00bdf0, EGCB_LV },\r
+ {0x00bdf1, 0x00be0b, EGCB_LVT },\r
+ {0x00be0c, 0x00be0c, EGCB_LV },\r
+ {0x00be0d, 0x00be27, EGCB_LVT },\r
+ {0x00be28, 0x00be28, EGCB_LV },\r
+ {0x00be29, 0x00be43, EGCB_LVT },\r
+ {0x00be44, 0x00be44, EGCB_LV },\r
+ {0x00be45, 0x00be5f, EGCB_LVT },\r
+ {0x00be60, 0x00be60, EGCB_LV },\r
+ {0x00be61, 0x00be7b, EGCB_LVT },\r
+ {0x00be7c, 0x00be7c, EGCB_LV },\r
+ {0x00be7d, 0x00be97, EGCB_LVT },\r
+ {0x00be98, 0x00be98, EGCB_LV },\r
+ {0x00be99, 0x00beb3, EGCB_LVT },\r
+ {0x00beb4, 0x00beb4, EGCB_LV },\r
+ {0x00beb5, 0x00becf, EGCB_LVT },\r
+ {0x00bed0, 0x00bed0, EGCB_LV },\r
+ {0x00bed1, 0x00beeb, EGCB_LVT },\r
+ {0x00beec, 0x00beec, EGCB_LV },\r
+ {0x00beed, 0x00bf07, EGCB_LVT },\r
+ {0x00bf08, 0x00bf08, EGCB_LV },\r
+ {0x00bf09, 0x00bf23, EGCB_LVT },\r
+ {0x00bf24, 0x00bf24, EGCB_LV },\r
+ {0x00bf25, 0x00bf3f, EGCB_LVT },\r
+ {0x00bf40, 0x00bf40, EGCB_LV },\r
+ {0x00bf41, 0x00bf5b, EGCB_LVT },\r
+ {0x00bf5c, 0x00bf5c, EGCB_LV },\r
+ {0x00bf5d, 0x00bf77, EGCB_LVT },\r
+ {0x00bf78, 0x00bf78, EGCB_LV },\r
+ {0x00bf79, 0x00bf93, EGCB_LVT },\r
+ {0x00bf94, 0x00bf94, EGCB_LV },\r
+ {0x00bf95, 0x00bfaf, EGCB_LVT },\r
+ {0x00bfb0, 0x00bfb0, EGCB_LV },\r
+ {0x00bfb1, 0x00bfcb, EGCB_LVT },\r
+ {0x00bfcc, 0x00bfcc, EGCB_LV },\r
+ {0x00bfcd, 0x00bfe7, EGCB_LVT },\r
+ {0x00bfe8, 0x00bfe8, EGCB_LV },\r
+ {0x00bfe9, 0x00c003, EGCB_LVT },\r
+ {0x00c004, 0x00c004, EGCB_LV },\r
+ {0x00c005, 0x00c01f, EGCB_LVT },\r
+ {0x00c020, 0x00c020, EGCB_LV },\r
+ {0x00c021, 0x00c03b, EGCB_LVT },\r
+ {0x00c03c, 0x00c03c, EGCB_LV },\r
+ {0x00c03d, 0x00c057, EGCB_LVT },\r
+ {0x00c058, 0x00c058, EGCB_LV },\r
+ {0x00c059, 0x00c073, EGCB_LVT },\r
+ {0x00c074, 0x00c074, EGCB_LV },\r
+ {0x00c075, 0x00c08f, EGCB_LVT },\r
+ {0x00c090, 0x00c090, EGCB_LV },\r
+ {0x00c091, 0x00c0ab, EGCB_LVT },\r
+ {0x00c0ac, 0x00c0ac, EGCB_LV },\r
+ {0x00c0ad, 0x00c0c7, EGCB_LVT },\r
+ {0x00c0c8, 0x00c0c8, EGCB_LV },\r
+ {0x00c0c9, 0x00c0e3, EGCB_LVT },\r
+ {0x00c0e4, 0x00c0e4, EGCB_LV },\r
+ {0x00c0e5, 0x00c0ff, EGCB_LVT },\r
+ {0x00c100, 0x00c100, EGCB_LV },\r
+ {0x00c101, 0x00c11b, EGCB_LVT },\r
+ {0x00c11c, 0x00c11c, EGCB_LV },\r
+ {0x00c11d, 0x00c137, EGCB_LVT },\r
+ {0x00c138, 0x00c138, EGCB_LV },\r
+ {0x00c139, 0x00c153, EGCB_LVT },\r
+ {0x00c154, 0x00c154, EGCB_LV },\r
+ {0x00c155, 0x00c16f, EGCB_LVT },\r
+ {0x00c170, 0x00c170, EGCB_LV },\r
+ {0x00c171, 0x00c18b, EGCB_LVT },\r
+ {0x00c18c, 0x00c18c, EGCB_LV },\r
+ {0x00c18d, 0x00c1a7, EGCB_LVT },\r
+ {0x00c1a8, 0x00c1a8, EGCB_LV },\r
+ {0x00c1a9, 0x00c1c3, EGCB_LVT },\r
+ {0x00c1c4, 0x00c1c4, EGCB_LV },\r
+ {0x00c1c5, 0x00c1df, EGCB_LVT },\r
+ {0x00c1e0, 0x00c1e0, EGCB_LV },\r
+ {0x00c1e1, 0x00c1fb, EGCB_LVT },\r
+ {0x00c1fc, 0x00c1fc, EGCB_LV },\r
+ {0x00c1fd, 0x00c217, EGCB_LVT },\r
+ {0x00c218, 0x00c218, EGCB_LV },\r
+ {0x00c219, 0x00c233, EGCB_LVT },\r
+ {0x00c234, 0x00c234, EGCB_LV },\r
+ {0x00c235, 0x00c24f, EGCB_LVT },\r
+ {0x00c250, 0x00c250, EGCB_LV },\r
+ {0x00c251, 0x00c26b, EGCB_LVT },\r
+ {0x00c26c, 0x00c26c, EGCB_LV },\r
+ {0x00c26d, 0x00c287, EGCB_LVT },\r
+ {0x00c288, 0x00c288, EGCB_LV },\r
+ {0x00c289, 0x00c2a3, EGCB_LVT },\r
+ {0x00c2a4, 0x00c2a4, EGCB_LV },\r
+ {0x00c2a5, 0x00c2bf, EGCB_LVT },\r
+ {0x00c2c0, 0x00c2c0, EGCB_LV },\r
+ {0x00c2c1, 0x00c2db, EGCB_LVT },\r
+ {0x00c2dc, 0x00c2dc, EGCB_LV },\r
+ {0x00c2dd, 0x00c2f7, EGCB_LVT },\r
+ {0x00c2f8, 0x00c2f8, EGCB_LV },\r
+ {0x00c2f9, 0x00c313, EGCB_LVT },\r
+ {0x00c314, 0x00c314, EGCB_LV },\r
+ {0x00c315, 0x00c32f, EGCB_LVT },\r
+ {0x00c330, 0x00c330, EGCB_LV },\r
+ {0x00c331, 0x00c34b, EGCB_LVT },\r
+ {0x00c34c, 0x00c34c, EGCB_LV },\r
+ {0x00c34d, 0x00c367, EGCB_LVT },\r
+ {0x00c368, 0x00c368, EGCB_LV },\r
+ {0x00c369, 0x00c383, EGCB_LVT },\r
+ {0x00c384, 0x00c384, EGCB_LV },\r
+ {0x00c385, 0x00c39f, EGCB_LVT },\r
+ {0x00c3a0, 0x00c3a0, EGCB_LV },\r
+ {0x00c3a1, 0x00c3bb, EGCB_LVT },\r
+ {0x00c3bc, 0x00c3bc, EGCB_LV },\r
+ {0x00c3bd, 0x00c3d7, EGCB_LVT },\r
+ {0x00c3d8, 0x00c3d8, EGCB_LV },\r
+ {0x00c3d9, 0x00c3f3, EGCB_LVT },\r
+ {0x00c3f4, 0x00c3f4, EGCB_LV },\r
+ {0x00c3f5, 0x00c40f, EGCB_LVT },\r
+ {0x00c410, 0x00c410, EGCB_LV },\r
+ {0x00c411, 0x00c42b, EGCB_LVT },\r
+ {0x00c42c, 0x00c42c, EGCB_LV },\r
+ {0x00c42d, 0x00c447, EGCB_LVT },\r
+ {0x00c448, 0x00c448, EGCB_LV },\r
+ {0x00c449, 0x00c463, EGCB_LVT },\r
+ {0x00c464, 0x00c464, EGCB_LV },\r
+ {0x00c465, 0x00c47f, EGCB_LVT },\r
+ {0x00c480, 0x00c480, EGCB_LV },\r
+ {0x00c481, 0x00c49b, EGCB_LVT },\r
+ {0x00c49c, 0x00c49c, EGCB_LV },\r
+ {0x00c49d, 0x00c4b7, EGCB_LVT },\r
+ {0x00c4b8, 0x00c4b8, EGCB_LV },\r
+ {0x00c4b9, 0x00c4d3, EGCB_LVT },\r
+ {0x00c4d4, 0x00c4d4, EGCB_LV },\r
+ {0x00c4d5, 0x00c4ef, EGCB_LVT },\r
+ {0x00c4f0, 0x00c4f0, EGCB_LV },\r
+ {0x00c4f1, 0x00c50b, EGCB_LVT },\r
+ {0x00c50c, 0x00c50c, EGCB_LV },\r
+ {0x00c50d, 0x00c527, EGCB_LVT },\r
+ {0x00c528, 0x00c528, EGCB_LV },\r
+ {0x00c529, 0x00c543, EGCB_LVT },\r
+ {0x00c544, 0x00c544, EGCB_LV },\r
+ {0x00c545, 0x00c55f, EGCB_LVT },\r
+ {0x00c560, 0x00c560, EGCB_LV },\r
+ {0x00c561, 0x00c57b, EGCB_LVT },\r
+ {0x00c57c, 0x00c57c, EGCB_LV },\r
+ {0x00c57d, 0x00c597, EGCB_LVT },\r
+ {0x00c598, 0x00c598, EGCB_LV },\r
+ {0x00c599, 0x00c5b3, EGCB_LVT },\r
+ {0x00c5b4, 0x00c5b4, EGCB_LV },\r
+ {0x00c5b5, 0x00c5cf, EGCB_LVT },\r
+ {0x00c5d0, 0x00c5d0, EGCB_LV },\r
+ {0x00c5d1, 0x00c5eb, EGCB_LVT },\r
+ {0x00c5ec, 0x00c5ec, EGCB_LV },\r
+ {0x00c5ed, 0x00c607, EGCB_LVT },\r
+ {0x00c608, 0x00c608, EGCB_LV },\r
+ {0x00c609, 0x00c623, EGCB_LVT },\r
+ {0x00c624, 0x00c624, EGCB_LV },\r
+ {0x00c625, 0x00c63f, EGCB_LVT },\r
+ {0x00c640, 0x00c640, EGCB_LV },\r
+ {0x00c641, 0x00c65b, EGCB_LVT },\r
+ {0x00c65c, 0x00c65c, EGCB_LV },\r
+ {0x00c65d, 0x00c677, EGCB_LVT },\r
+ {0x00c678, 0x00c678, EGCB_LV },\r
+ {0x00c679, 0x00c693, EGCB_LVT },\r
+ {0x00c694, 0x00c694, EGCB_LV },\r
+ {0x00c695, 0x00c6af, EGCB_LVT },\r
+ {0x00c6b0, 0x00c6b0, EGCB_LV },\r
+ {0x00c6b1, 0x00c6cb, EGCB_LVT },\r
+ {0x00c6cc, 0x00c6cc, EGCB_LV },\r
+ {0x00c6cd, 0x00c6e7, EGCB_LVT },\r
+ {0x00c6e8, 0x00c6e8, EGCB_LV },\r
+ {0x00c6e9, 0x00c703, EGCB_LVT },\r
+ {0x00c704, 0x00c704, EGCB_LV },\r
+ {0x00c705, 0x00c71f, EGCB_LVT },\r
+ {0x00c720, 0x00c720, EGCB_LV },\r
+ {0x00c721, 0x00c73b, EGCB_LVT },\r
+ {0x00c73c, 0x00c73c, EGCB_LV },\r
+ {0x00c73d, 0x00c757, EGCB_LVT },\r
+ {0x00c758, 0x00c758, EGCB_LV },\r
+ {0x00c759, 0x00c773, EGCB_LVT },\r
+ {0x00c774, 0x00c774, EGCB_LV },\r
+ {0x00c775, 0x00c78f, EGCB_LVT },\r
+ {0x00c790, 0x00c790, EGCB_LV },\r
+ {0x00c791, 0x00c7ab, EGCB_LVT },\r
+ {0x00c7ac, 0x00c7ac, EGCB_LV },\r
+ {0x00c7ad, 0x00c7c7, EGCB_LVT },\r
+ {0x00c7c8, 0x00c7c8, EGCB_LV },\r
+ {0x00c7c9, 0x00c7e3, EGCB_LVT },\r
+ {0x00c7e4, 0x00c7e4, EGCB_LV },\r
+ {0x00c7e5, 0x00c7ff, EGCB_LVT },\r
+ {0x00c800, 0x00c800, EGCB_LV },\r
+ {0x00c801, 0x00c81b, EGCB_LVT },\r
+ {0x00c81c, 0x00c81c, EGCB_LV },\r
+ {0x00c81d, 0x00c837, EGCB_LVT },\r
+ {0x00c838, 0x00c838, EGCB_LV },\r
+ {0x00c839, 0x00c853, EGCB_LVT },\r
+ {0x00c854, 0x00c854, EGCB_LV },\r
+ {0x00c855, 0x00c86f, EGCB_LVT },\r
+ {0x00c870, 0x00c870, EGCB_LV },\r
+ {0x00c871, 0x00c88b, EGCB_LVT },\r
+ {0x00c88c, 0x00c88c, EGCB_LV },\r
+ {0x00c88d, 0x00c8a7, EGCB_LVT },\r
+ {0x00c8a8, 0x00c8a8, EGCB_LV },\r
+ {0x00c8a9, 0x00c8c3, EGCB_LVT },\r
+ {0x00c8c4, 0x00c8c4, EGCB_LV },\r
+ {0x00c8c5, 0x00c8df, EGCB_LVT },\r
+ {0x00c8e0, 0x00c8e0, EGCB_LV },\r
+ {0x00c8e1, 0x00c8fb, EGCB_LVT },\r
+ {0x00c8fc, 0x00c8fc, EGCB_LV },\r
+ {0x00c8fd, 0x00c917, EGCB_LVT },\r
+ {0x00c918, 0x00c918, EGCB_LV },\r
+ {0x00c919, 0x00c933, EGCB_LVT },\r
+ {0x00c934, 0x00c934, EGCB_LV },\r
+ {0x00c935, 0x00c94f, EGCB_LVT },\r
+ {0x00c950, 0x00c950, EGCB_LV },\r
+ {0x00c951, 0x00c96b, EGCB_LVT },\r
+ {0x00c96c, 0x00c96c, EGCB_LV },\r
+ {0x00c96d, 0x00c987, EGCB_LVT },\r
+ {0x00c988, 0x00c988, EGCB_LV },\r
+ {0x00c989, 0x00c9a3, EGCB_LVT },\r
+ {0x00c9a4, 0x00c9a4, EGCB_LV },\r
+ {0x00c9a5, 0x00c9bf, EGCB_LVT },\r
+ {0x00c9c0, 0x00c9c0, EGCB_LV },\r
+ {0x00c9c1, 0x00c9db, EGCB_LVT },\r
+ {0x00c9dc, 0x00c9dc, EGCB_LV },\r
+ {0x00c9dd, 0x00c9f7, EGCB_LVT },\r
+ {0x00c9f8, 0x00c9f8, EGCB_LV },\r
+ {0x00c9f9, 0x00ca13, EGCB_LVT },\r
+ {0x00ca14, 0x00ca14, EGCB_LV },\r
+ {0x00ca15, 0x00ca2f, EGCB_LVT },\r
+ {0x00ca30, 0x00ca30, EGCB_LV },\r
+ {0x00ca31, 0x00ca4b, EGCB_LVT },\r
+ {0x00ca4c, 0x00ca4c, EGCB_LV },\r
+ {0x00ca4d, 0x00ca67, EGCB_LVT },\r
+ {0x00ca68, 0x00ca68, EGCB_LV },\r
+ {0x00ca69, 0x00ca83, EGCB_LVT },\r
+ {0x00ca84, 0x00ca84, EGCB_LV },\r
+ {0x00ca85, 0x00ca9f, EGCB_LVT },\r
+ {0x00caa0, 0x00caa0, EGCB_LV },\r
+ {0x00caa1, 0x00cabb, EGCB_LVT },\r
+ {0x00cabc, 0x00cabc, EGCB_LV },\r
+ {0x00cabd, 0x00cad7, EGCB_LVT },\r
+ {0x00cad8, 0x00cad8, EGCB_LV },\r
+ {0x00cad9, 0x00caf3, EGCB_LVT },\r
+ {0x00caf4, 0x00caf4, EGCB_LV },\r
+ {0x00caf5, 0x00cb0f, EGCB_LVT },\r
+ {0x00cb10, 0x00cb10, EGCB_LV },\r
+ {0x00cb11, 0x00cb2b, EGCB_LVT },\r
+ {0x00cb2c, 0x00cb2c, EGCB_LV },\r
+ {0x00cb2d, 0x00cb47, EGCB_LVT },\r
+ {0x00cb48, 0x00cb48, EGCB_LV },\r
+ {0x00cb49, 0x00cb63, EGCB_LVT },\r
+ {0x00cb64, 0x00cb64, EGCB_LV },\r
+ {0x00cb65, 0x00cb7f, EGCB_LVT },\r
+ {0x00cb80, 0x00cb80, EGCB_LV },\r
+ {0x00cb81, 0x00cb9b, EGCB_LVT },\r
+ {0x00cb9c, 0x00cb9c, EGCB_LV },\r
+ {0x00cb9d, 0x00cbb7, EGCB_LVT },\r
+ {0x00cbb8, 0x00cbb8, EGCB_LV },\r
+ {0x00cbb9, 0x00cbd3, EGCB_LVT },\r
+ {0x00cbd4, 0x00cbd4, EGCB_LV },\r
+ {0x00cbd5, 0x00cbef, EGCB_LVT },\r
+ {0x00cbf0, 0x00cbf0, EGCB_LV },\r
+ {0x00cbf1, 0x00cc0b, EGCB_LVT },\r
+ {0x00cc0c, 0x00cc0c, EGCB_LV },\r
+ {0x00cc0d, 0x00cc27, EGCB_LVT },\r
+ {0x00cc28, 0x00cc28, EGCB_LV },\r
+ {0x00cc29, 0x00cc43, EGCB_LVT },\r
+ {0x00cc44, 0x00cc44, EGCB_LV },\r
+ {0x00cc45, 0x00cc5f, EGCB_LVT },\r
+ {0x00cc60, 0x00cc60, EGCB_LV },\r
+ {0x00cc61, 0x00cc7b, EGCB_LVT },\r
+ {0x00cc7c, 0x00cc7c, EGCB_LV },\r
+ {0x00cc7d, 0x00cc97, EGCB_LVT },\r
+ {0x00cc98, 0x00cc98, EGCB_LV },\r
+ {0x00cc99, 0x00ccb3, EGCB_LVT },\r
+ {0x00ccb4, 0x00ccb4, EGCB_LV },\r
+ {0x00ccb5, 0x00cccf, EGCB_LVT },\r
+ {0x00ccd0, 0x00ccd0, EGCB_LV },\r
+ {0x00ccd1, 0x00cceb, EGCB_LVT },\r
+ {0x00ccec, 0x00ccec, EGCB_LV },\r
+ {0x00cced, 0x00cd07, EGCB_LVT },\r
+ {0x00cd08, 0x00cd08, EGCB_LV },\r
+ {0x00cd09, 0x00cd23, EGCB_LVT },\r
+ {0x00cd24, 0x00cd24, EGCB_LV },\r
+ {0x00cd25, 0x00cd3f, EGCB_LVT },\r
+ {0x00cd40, 0x00cd40, EGCB_LV },\r
+ {0x00cd41, 0x00cd5b, EGCB_LVT },\r
+ {0x00cd5c, 0x00cd5c, EGCB_LV },\r
+ {0x00cd5d, 0x00cd77, EGCB_LVT },\r
+ {0x00cd78, 0x00cd78, EGCB_LV },\r
+ {0x00cd79, 0x00cd93, EGCB_LVT },\r
+ {0x00cd94, 0x00cd94, EGCB_LV },\r
+ {0x00cd95, 0x00cdaf, EGCB_LVT },\r
+ {0x00cdb0, 0x00cdb0, EGCB_LV },\r
+ {0x00cdb1, 0x00cdcb, EGCB_LVT },\r
+ {0x00cdcc, 0x00cdcc, EGCB_LV },\r
+ {0x00cdcd, 0x00cde7, EGCB_LVT },\r
+ {0x00cde8, 0x00cde8, EGCB_LV },\r
+ {0x00cde9, 0x00ce03, EGCB_LVT },\r
+ {0x00ce04, 0x00ce04, EGCB_LV },\r
+ {0x00ce05, 0x00ce1f, EGCB_LVT },\r
+ {0x00ce20, 0x00ce20, EGCB_LV },\r
+ {0x00ce21, 0x00ce3b, EGCB_LVT },\r
+ {0x00ce3c, 0x00ce3c, EGCB_LV },\r
+ {0x00ce3d, 0x00ce57, EGCB_LVT },\r
+ {0x00ce58, 0x00ce58, EGCB_LV },\r
+ {0x00ce59, 0x00ce73, EGCB_LVT },\r
+ {0x00ce74, 0x00ce74, EGCB_LV },\r
+ {0x00ce75, 0x00ce8f, EGCB_LVT },\r
+ {0x00ce90, 0x00ce90, EGCB_LV },\r
+ {0x00ce91, 0x00ceab, EGCB_LVT },\r
+ {0x00ceac, 0x00ceac, EGCB_LV },\r
+ {0x00cead, 0x00cec7, EGCB_LVT },\r
+ {0x00cec8, 0x00cec8, EGCB_LV },\r
+ {0x00cec9, 0x00cee3, EGCB_LVT },\r
+ {0x00cee4, 0x00cee4, EGCB_LV },\r
+ {0x00cee5, 0x00ceff, EGCB_LVT },\r
+ {0x00cf00, 0x00cf00, EGCB_LV },\r
+ {0x00cf01, 0x00cf1b, EGCB_LVT },\r
+ {0x00cf1c, 0x00cf1c, EGCB_LV },\r
+ {0x00cf1d, 0x00cf37, EGCB_LVT },\r
+ {0x00cf38, 0x00cf38, EGCB_LV },\r
+ {0x00cf39, 0x00cf53, EGCB_LVT },\r
+ {0x00cf54, 0x00cf54, EGCB_LV },\r
+ {0x00cf55, 0x00cf6f, EGCB_LVT },\r
+ {0x00cf70, 0x00cf70, EGCB_LV },\r
+ {0x00cf71, 0x00cf8b, EGCB_LVT },\r
+ {0x00cf8c, 0x00cf8c, EGCB_LV },\r
+ {0x00cf8d, 0x00cfa7, EGCB_LVT },\r
+ {0x00cfa8, 0x00cfa8, EGCB_LV },\r
+ {0x00cfa9, 0x00cfc3, EGCB_LVT },\r
+ {0x00cfc4, 0x00cfc4, EGCB_LV },\r
+ {0x00cfc5, 0x00cfdf, EGCB_LVT },\r
+ {0x00cfe0, 0x00cfe0, EGCB_LV },\r
+ {0x00cfe1, 0x00cffb, EGCB_LVT },\r
+ {0x00cffc, 0x00cffc, EGCB_LV },\r
+ {0x00cffd, 0x00d017, EGCB_LVT },\r
+ {0x00d018, 0x00d018, EGCB_LV },\r
+ {0x00d019, 0x00d033, EGCB_LVT },\r
+ {0x00d034, 0x00d034, EGCB_LV },\r
+ {0x00d035, 0x00d04f, EGCB_LVT },\r
+ {0x00d050, 0x00d050, EGCB_LV },\r
+ {0x00d051, 0x00d06b, EGCB_LVT },\r
+ {0x00d06c, 0x00d06c, EGCB_LV },\r
+ {0x00d06d, 0x00d087, EGCB_LVT },\r
+ {0x00d088, 0x00d088, EGCB_LV },\r
+ {0x00d089, 0x00d0a3, EGCB_LVT },\r
+ {0x00d0a4, 0x00d0a4, EGCB_LV },\r
+ {0x00d0a5, 0x00d0bf, EGCB_LVT },\r
+ {0x00d0c0, 0x00d0c0, EGCB_LV },\r
+ {0x00d0c1, 0x00d0db, EGCB_LVT },\r
+ {0x00d0dc, 0x00d0dc, EGCB_LV },\r
+ {0x00d0dd, 0x00d0f7, EGCB_LVT },\r
+ {0x00d0f8, 0x00d0f8, EGCB_LV },\r
+ {0x00d0f9, 0x00d113, EGCB_LVT },\r
+ {0x00d114, 0x00d114, EGCB_LV },\r
+ {0x00d115, 0x00d12f, EGCB_LVT },\r
+ {0x00d130, 0x00d130, EGCB_LV },\r
+ {0x00d131, 0x00d14b, EGCB_LVT },\r
+ {0x00d14c, 0x00d14c, EGCB_LV },\r
+ {0x00d14d, 0x00d167, EGCB_LVT },\r
+ {0x00d168, 0x00d168, EGCB_LV },\r
+ {0x00d169, 0x00d183, EGCB_LVT },\r
+ {0x00d184, 0x00d184, EGCB_LV },\r
+ {0x00d185, 0x00d19f, EGCB_LVT },\r
+ {0x00d1a0, 0x00d1a0, EGCB_LV },\r
+ {0x00d1a1, 0x00d1bb, EGCB_LVT },\r
+ {0x00d1bc, 0x00d1bc, EGCB_LV },\r
+ {0x00d1bd, 0x00d1d7, EGCB_LVT },\r
+ {0x00d1d8, 0x00d1d8, EGCB_LV },\r
+ {0x00d1d9, 0x00d1f3, EGCB_LVT },\r
+ {0x00d1f4, 0x00d1f4, EGCB_LV },\r
+ {0x00d1f5, 0x00d20f, EGCB_LVT },\r
+ {0x00d210, 0x00d210, EGCB_LV },\r
+ {0x00d211, 0x00d22b, EGCB_LVT },\r
+ {0x00d22c, 0x00d22c, EGCB_LV },\r
+ {0x00d22d, 0x00d247, EGCB_LVT },\r
+ {0x00d248, 0x00d248, EGCB_LV },\r
+ {0x00d249, 0x00d263, EGCB_LVT },\r
+ {0x00d264, 0x00d264, EGCB_LV },\r
+ {0x00d265, 0x00d27f, EGCB_LVT },\r
+ {0x00d280, 0x00d280, EGCB_LV },\r
+ {0x00d281, 0x00d29b, EGCB_LVT },\r
+ {0x00d29c, 0x00d29c, EGCB_LV },\r
+ {0x00d29d, 0x00d2b7, EGCB_LVT },\r
+ {0x00d2b8, 0x00d2b8, EGCB_LV },\r
+ {0x00d2b9, 0x00d2d3, EGCB_LVT },\r
+ {0x00d2d4, 0x00d2d4, EGCB_LV },\r
+ {0x00d2d5, 0x00d2ef, EGCB_LVT },\r
+ {0x00d2f0, 0x00d2f0, EGCB_LV },\r
+ {0x00d2f1, 0x00d30b, EGCB_LVT },\r
+ {0x00d30c, 0x00d30c, EGCB_LV },\r
+ {0x00d30d, 0x00d327, EGCB_LVT },\r
+ {0x00d328, 0x00d328, EGCB_LV },\r
+ {0x00d329, 0x00d343, EGCB_LVT },\r
+ {0x00d344, 0x00d344, EGCB_LV },\r
+ {0x00d345, 0x00d35f, EGCB_LVT },\r
+ {0x00d360, 0x00d360, EGCB_LV },\r
+ {0x00d361, 0x00d37b, EGCB_LVT },\r
+ {0x00d37c, 0x00d37c, EGCB_LV },\r
+ {0x00d37d, 0x00d397, EGCB_LVT },\r
+ {0x00d398, 0x00d398, EGCB_LV },\r
+ {0x00d399, 0x00d3b3, EGCB_LVT },\r
+ {0x00d3b4, 0x00d3b4, EGCB_LV },\r
+ {0x00d3b5, 0x00d3cf, EGCB_LVT },\r
+ {0x00d3d0, 0x00d3d0, EGCB_LV },\r
+ {0x00d3d1, 0x00d3eb, EGCB_LVT },\r
+ {0x00d3ec, 0x00d3ec, EGCB_LV },\r
+ {0x00d3ed, 0x00d407, EGCB_LVT },\r
+ {0x00d408, 0x00d408, EGCB_LV },\r
+ {0x00d409, 0x00d423, EGCB_LVT },\r
+ {0x00d424, 0x00d424, EGCB_LV },\r
+ {0x00d425, 0x00d43f, EGCB_LVT },\r
+ {0x00d440, 0x00d440, EGCB_LV },\r
+ {0x00d441, 0x00d45b, EGCB_LVT },\r
+ {0x00d45c, 0x00d45c, EGCB_LV },\r
+ {0x00d45d, 0x00d477, EGCB_LVT },\r
+ {0x00d478, 0x00d478, EGCB_LV },\r
+ {0x00d479, 0x00d493, EGCB_LVT },\r
+ {0x00d494, 0x00d494, EGCB_LV },\r
+ {0x00d495, 0x00d4af, EGCB_LVT },\r
+ {0x00d4b0, 0x00d4b0, EGCB_LV },\r
+ {0x00d4b1, 0x00d4cb, EGCB_LVT },\r
+ {0x00d4cc, 0x00d4cc, EGCB_LV },\r
+ {0x00d4cd, 0x00d4e7, EGCB_LVT },\r
+ {0x00d4e8, 0x00d4e8, EGCB_LV },\r
+ {0x00d4e9, 0x00d503, EGCB_LVT },\r
+ {0x00d504, 0x00d504, EGCB_LV },\r
+ {0x00d505, 0x00d51f, EGCB_LVT },\r
+ {0x00d520, 0x00d520, EGCB_LV },\r
+ {0x00d521, 0x00d53b, EGCB_LVT },\r
+ {0x00d53c, 0x00d53c, EGCB_LV },\r
+ {0x00d53d, 0x00d557, EGCB_LVT },\r
+ {0x00d558, 0x00d558, EGCB_LV },\r
+ {0x00d559, 0x00d573, EGCB_LVT },\r
+ {0x00d574, 0x00d574, EGCB_LV },\r
+ {0x00d575, 0x00d58f, EGCB_LVT },\r
+ {0x00d590, 0x00d590, EGCB_LV },\r
+ {0x00d591, 0x00d5ab, EGCB_LVT },\r
+ {0x00d5ac, 0x00d5ac, EGCB_LV },\r
+ {0x00d5ad, 0x00d5c7, EGCB_LVT },\r
+ {0x00d5c8, 0x00d5c8, EGCB_LV },\r
+ {0x00d5c9, 0x00d5e3, EGCB_LVT },\r
+ {0x00d5e4, 0x00d5e4, EGCB_LV },\r
+ {0x00d5e5, 0x00d5ff, EGCB_LVT },\r
+ {0x00d600, 0x00d600, EGCB_LV },\r
+ {0x00d601, 0x00d61b, EGCB_LVT },\r
+ {0x00d61c, 0x00d61c, EGCB_LV },\r
+ {0x00d61d, 0x00d637, EGCB_LVT },\r
+ {0x00d638, 0x00d638, EGCB_LV },\r
+ {0x00d639, 0x00d653, EGCB_LVT },\r
+ {0x00d654, 0x00d654, EGCB_LV },\r
+ {0x00d655, 0x00d66f, EGCB_LVT },\r
+ {0x00d670, 0x00d670, EGCB_LV },\r
+ {0x00d671, 0x00d68b, EGCB_LVT },\r
+ {0x00d68c, 0x00d68c, EGCB_LV },\r
+ {0x00d68d, 0x00d6a7, EGCB_LVT },\r
+ {0x00d6a8, 0x00d6a8, EGCB_LV },\r
+ {0x00d6a9, 0x00d6c3, EGCB_LVT },\r
+ {0x00d6c4, 0x00d6c4, EGCB_LV },\r
+ {0x00d6c5, 0x00d6df, EGCB_LVT },\r
+ {0x00d6e0, 0x00d6e0, EGCB_LV },\r
+ {0x00d6e1, 0x00d6fb, EGCB_LVT },\r
+ {0x00d6fc, 0x00d6fc, EGCB_LV },\r
+ {0x00d6fd, 0x00d717, EGCB_LVT },\r
+ {0x00d718, 0x00d718, EGCB_LV },\r
+ {0x00d719, 0x00d733, EGCB_LVT },\r
+ {0x00d734, 0x00d734, EGCB_LV },\r
+ {0x00d735, 0x00d74f, EGCB_LVT },\r
+ {0x00d750, 0x00d750, EGCB_LV },\r
+ {0x00d751, 0x00d76b, EGCB_LVT },\r
+ {0x00d76c, 0x00d76c, EGCB_LV },\r
+ {0x00d76d, 0x00d787, EGCB_LVT },\r
+ {0x00d788, 0x00d788, EGCB_LV },\r
+ {0x00d789, 0x00d7a3, EGCB_LVT },\r
+ {0x00d7b0, 0x00d7c6, EGCB_V },\r
+ {0x00d7cb, 0x00d7fb, EGCB_T },\r
+ {0x00d800, 0x00dfff, EGCB_Control },\r
+ {0x00fb1e, 0x00fb1e, EGCB_Extend },\r
+ {0x00fe00, 0x00fe0f, EGCB_Extend },\r
+ {0x00fe20, 0x00fe2f, EGCB_Extend },\r
+ {0x00feff, 0x00feff, EGCB_Control },\r
+ {0x00ff9e, 0x00ff9f, EGCB_Extend },\r
+ {0x00fff0, 0x00fffb, EGCB_Control },\r
+ {0x0101fd, 0x0101fd, EGCB_Extend },\r
+ {0x0102e0, 0x0102e0, EGCB_Extend },\r
+ {0x010376, 0x01037a, EGCB_Extend },\r
+ {0x010a01, 0x010a03, EGCB_Extend },\r
+ {0x010a05, 0x010a06, EGCB_Extend },\r
+ {0x010a0c, 0x010a0f, EGCB_Extend },\r
+ {0x010a38, 0x010a3a, EGCB_Extend },\r
+ {0x010a3f, 0x010a3f, EGCB_Extend },\r
+ {0x010ae5, 0x010ae6, EGCB_Extend },\r
+ {0x010d24, 0x010d27, EGCB_Extend },\r
+ {0x010f46, 0x010f50, EGCB_Extend },\r
+ {0x011000, 0x011000, EGCB_SpacingMark },\r
+ {0x011001, 0x011001, EGCB_Extend },\r
+ {0x011002, 0x011002, EGCB_SpacingMark },\r
+ {0x011038, 0x011046, EGCB_Extend },\r
+ {0x01107f, 0x011081, EGCB_Extend },\r
+ {0x011082, 0x011082, EGCB_SpacingMark },\r
+ {0x0110b0, 0x0110b2, EGCB_SpacingMark },\r
+ {0x0110b3, 0x0110b6, EGCB_Extend },\r
+ {0x0110b7, 0x0110b8, EGCB_SpacingMark },\r
+ {0x0110b9, 0x0110ba, EGCB_Extend },\r
+ {0x0110bd, 0x0110bd, EGCB_Prepend },\r
+ {0x0110cd, 0x0110cd, EGCB_Prepend },\r
+ {0x011100, 0x011102, EGCB_Extend },\r
+ {0x011127, 0x01112b, EGCB_Extend },\r
+ {0x01112c, 0x01112c, EGCB_SpacingMark },\r
+ {0x01112d, 0x011134, EGCB_Extend },\r
+ {0x011145, 0x011146, EGCB_SpacingMark },\r
+ {0x011173, 0x011173, EGCB_Extend },\r
+ {0x011180, 0x011181, EGCB_Extend },\r
+ {0x011182, 0x011182, EGCB_SpacingMark },\r
+ {0x0111b3, 0x0111b5, EGCB_SpacingMark },\r
+ {0x0111b6, 0x0111be, EGCB_Extend },\r
+ {0x0111bf, 0x0111c0, EGCB_SpacingMark },\r
+ {0x0111c2, 0x0111c3, EGCB_Prepend },\r
+ {0x0111c9, 0x0111cc, EGCB_Extend },\r
+ {0x01122c, 0x01122e, EGCB_SpacingMark },\r
+ {0x01122f, 0x011231, EGCB_Extend },\r
+ {0x011232, 0x011233, EGCB_SpacingMark },\r
+ {0x011234, 0x011234, EGCB_Extend },\r
+ {0x011235, 0x011235, EGCB_SpacingMark },\r
+ {0x011236, 0x011237, EGCB_Extend },\r
+ {0x01123e, 0x01123e, EGCB_Extend },\r
+ {0x0112df, 0x0112df, EGCB_Extend },\r
+ {0x0112e0, 0x0112e2, EGCB_SpacingMark },\r
+ {0x0112e3, 0x0112ea, EGCB_Extend },\r
+ {0x011300, 0x011301, EGCB_Extend },\r
+ {0x011302, 0x011303, EGCB_SpacingMark },\r
+ {0x01133b, 0x01133c, EGCB_Extend },\r
+ {0x01133e, 0x01133e, EGCB_Extend },\r
+ {0x01133f, 0x01133f, EGCB_SpacingMark },\r
+ {0x011340, 0x011340, EGCB_Extend },\r
+ {0x011341, 0x011344, EGCB_SpacingMark },\r
+ {0x011347, 0x011348, EGCB_SpacingMark },\r
+ {0x01134b, 0x01134d, EGCB_SpacingMark },\r
+ {0x011357, 0x011357, EGCB_Extend },\r
+ {0x011362, 0x011363, EGCB_SpacingMark },\r
+ {0x011366, 0x01136c, EGCB_Extend },\r
+ {0x011370, 0x011374, EGCB_Extend },\r
+ {0x011435, 0x011437, EGCB_SpacingMark },\r
+ {0x011438, 0x01143f, EGCB_Extend },\r
+ {0x011440, 0x011441, EGCB_SpacingMark },\r
+ {0x011442, 0x011444, EGCB_Extend },\r
+ {0x011445, 0x011445, EGCB_SpacingMark },\r
+ {0x011446, 0x011446, EGCB_Extend },\r
+ {0x01145e, 0x01145e, EGCB_Extend },\r
+ {0x0114b0, 0x0114b0, EGCB_Extend },\r
+ {0x0114b1, 0x0114b2, EGCB_SpacingMark },\r
+ {0x0114b3, 0x0114b8, EGCB_Extend },\r
+ {0x0114b9, 0x0114b9, EGCB_SpacingMark },\r
+ {0x0114ba, 0x0114ba, EGCB_Extend },\r
+ {0x0114bb, 0x0114bc, EGCB_SpacingMark },\r
+ {0x0114bd, 0x0114bd, EGCB_Extend },\r
+ {0x0114be, 0x0114be, EGCB_SpacingMark },\r
+ {0x0114bf, 0x0114c0, EGCB_Extend },\r
+ {0x0114c1, 0x0114c1, EGCB_SpacingMark },\r
+ {0x0114c2, 0x0114c3, EGCB_Extend },\r
+ {0x0115af, 0x0115af, EGCB_Extend },\r
+ {0x0115b0, 0x0115b1, EGCB_SpacingMark },\r
+ {0x0115b2, 0x0115b5, EGCB_Extend },\r
+ {0x0115b8, 0x0115bb, EGCB_SpacingMark },\r
+ {0x0115bc, 0x0115bd, EGCB_Extend },\r
+ {0x0115be, 0x0115be, EGCB_SpacingMark },\r
+ {0x0115bf, 0x0115c0, EGCB_Extend },\r
+ {0x0115dc, 0x0115dd, EGCB_Extend },\r
+ {0x011630, 0x011632, EGCB_SpacingMark },\r
+ {0x011633, 0x01163a, EGCB_Extend },\r
+ {0x01163b, 0x01163c, EGCB_SpacingMark },\r
+ {0x01163d, 0x01163d, EGCB_Extend },\r
+ {0x01163e, 0x01163e, EGCB_SpacingMark },\r
+ {0x01163f, 0x011640, EGCB_Extend },\r
+ {0x0116ab, 0x0116ab, EGCB_Extend },\r
+ {0x0116ac, 0x0116ac, EGCB_SpacingMark },\r
+ {0x0116ad, 0x0116ad, EGCB_Extend },\r
+ {0x0116ae, 0x0116af, EGCB_SpacingMark },\r
+ {0x0116b0, 0x0116b5, EGCB_Extend },\r
+ {0x0116b6, 0x0116b6, EGCB_SpacingMark },\r
+ {0x0116b7, 0x0116b7, EGCB_Extend },\r
+ {0x01171d, 0x01171f, EGCB_Extend },\r
+ {0x011720, 0x011721, EGCB_SpacingMark },\r
+ {0x011722, 0x011725, EGCB_Extend },\r
+ {0x011726, 0x011726, EGCB_SpacingMark },\r
+ {0x011727, 0x01172b, EGCB_Extend },\r
+ {0x01182c, 0x01182e, EGCB_SpacingMark },\r
+ {0x01182f, 0x011837, EGCB_Extend },\r
+ {0x011838, 0x011838, EGCB_SpacingMark },\r
+ {0x011839, 0x01183a, EGCB_Extend },\r
+ {0x011a01, 0x011a0a, EGCB_Extend },\r
+ {0x011a33, 0x011a38, EGCB_Extend },\r
+ {0x011a39, 0x011a39, EGCB_SpacingMark },\r
+ {0x011a3a, 0x011a3a, EGCB_Prepend },\r
+ {0x011a3b, 0x011a3e, EGCB_Extend },\r
+ {0x011a47, 0x011a47, EGCB_Extend },\r
+ {0x011a51, 0x011a56, EGCB_Extend },\r
+ {0x011a57, 0x011a58, EGCB_SpacingMark },\r
+ {0x011a59, 0x011a5b, EGCB_Extend },\r
+ {0x011a86, 0x011a89, EGCB_Prepend },\r
+ {0x011a8a, 0x011a96, EGCB_Extend },\r
+ {0x011a97, 0x011a97, EGCB_SpacingMark },\r
+ {0x011a98, 0x011a99, EGCB_Extend },\r
+ {0x011c2f, 0x011c2f, EGCB_SpacingMark },\r
+ {0x011c30, 0x011c36, EGCB_Extend },\r
+ {0x011c38, 0x011c3d, EGCB_Extend },\r
+ {0x011c3e, 0x011c3e, EGCB_SpacingMark },\r
+ {0x011c3f, 0x011c3f, EGCB_Extend },\r
+ {0x011c92, 0x011ca7, EGCB_Extend },\r
+ {0x011ca9, 0x011ca9, EGCB_SpacingMark },\r
+ {0x011caa, 0x011cb0, EGCB_Extend },\r
+ {0x011cb1, 0x011cb1, EGCB_SpacingMark },\r
+ {0x011cb2, 0x011cb3, EGCB_Extend },\r
+ {0x011cb4, 0x011cb4, EGCB_SpacingMark },\r
+ {0x011cb5, 0x011cb6, EGCB_Extend },\r
+ {0x011d31, 0x011d36, EGCB_Extend },\r
+ {0x011d3a, 0x011d3a, EGCB_Extend },\r
+ {0x011d3c, 0x011d3d, EGCB_Extend },\r
+ {0x011d3f, 0x011d45, EGCB_Extend },\r
+ {0x011d46, 0x011d46, EGCB_Prepend },\r
+ {0x011d47, 0x011d47, EGCB_Extend },\r
+ {0x011d8a, 0x011d8e, EGCB_SpacingMark },\r
+ {0x011d90, 0x011d91, EGCB_Extend },\r
+ {0x011d93, 0x011d94, EGCB_SpacingMark },\r
+ {0x011d95, 0x011d95, EGCB_Extend },\r
+ {0x011d96, 0x011d96, EGCB_SpacingMark },\r
+ {0x011d97, 0x011d97, EGCB_Extend },\r
+ {0x011ef3, 0x011ef4, EGCB_Extend },\r
+ {0x011ef5, 0x011ef6, EGCB_SpacingMark },\r
+ {0x016af0, 0x016af4, EGCB_Extend },\r
+ {0x016b30, 0x016b36, EGCB_Extend },\r
+ {0x016f51, 0x016f7e, EGCB_SpacingMark },\r
+ {0x016f8f, 0x016f92, EGCB_Extend },\r
+ {0x01bc9d, 0x01bc9e, EGCB_Extend },\r
+ {0x01bca0, 0x01bca3, EGCB_Control },\r
+ {0x01d165, 0x01d165, EGCB_Extend },\r
+ {0x01d166, 0x01d166, EGCB_SpacingMark },\r
+ {0x01d167, 0x01d169, EGCB_Extend },\r
+ {0x01d16d, 0x01d16d, EGCB_SpacingMark },\r
+ {0x01d16e, 0x01d172, EGCB_Extend },\r
+ {0x01d173, 0x01d17a, EGCB_Control },\r
+ {0x01d17b, 0x01d182, EGCB_Extend },\r
+ {0x01d185, 0x01d18b, EGCB_Extend },\r
+ {0x01d1aa, 0x01d1ad, EGCB_Extend },\r
+ {0x01d242, 0x01d244, EGCB_Extend },\r
+ {0x01da00, 0x01da36, EGCB_Extend },\r
+ {0x01da3b, 0x01da6c, EGCB_Extend },\r
+ {0x01da75, 0x01da75, EGCB_Extend },\r
+ {0x01da84, 0x01da84, EGCB_Extend },\r
+ {0x01da9b, 0x01da9f, EGCB_Extend },\r
+ {0x01daa1, 0x01daaf, EGCB_Extend },\r
+ {0x01e000, 0x01e006, EGCB_Extend },\r
+ {0x01e008, 0x01e018, EGCB_Extend },\r
+ {0x01e01b, 0x01e021, EGCB_Extend },\r
+ {0x01e023, 0x01e024, EGCB_Extend },\r
+ {0x01e026, 0x01e02a, EGCB_Extend },\r
+ {0x01e8d0, 0x01e8d6, EGCB_Extend },\r
+ {0x01e944, 0x01e94a, EGCB_Extend },\r
+ {0x01f1e6, 0x01f1ff, EGCB_Regional_Indicator },\r
+ {0x01f3fb, 0x01f3ff, EGCB_Extend },\r
+ {0x0e0000, 0x0e001f, EGCB_Control },\r
+ {0x0e0020, 0x0e007f, EGCB_Extend },\r
+ {0x0e0080, 0x0e00ff, EGCB_Control },\r
+ {0x0e0100, 0x0e01ef, EGCB_Extend },\r
+ {0x0e01f0, 0x0e0fff, EGCB_Control }\r
+};\r
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold1_key.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold1_key.c
new file mode 100644 (file)
index 0000000..553f0e7
--- /dev/null
@@ -0,0 +1,2992 @@
+/* This file was converted by gperf_fold_key_conv.py\r
+      from gperf output file. */\r
+/* ANSI-C code produced by gperf version 3.1 */\r
+/* Command-line: /usr/bin/gperf -n -C -T -c -t -j1 -L ANSI-C -F,-1 -N onigenc_unicode_fold1_key unicode_fold1_key.gperf  */\r
+/* Computed positions: -k'1-3' */\r
+\r
+\r
+\r
+/* This gperf source file was generated by make_unicode_fold_data.py */\r
+\r
+/*-\r
+ * Copyright (c) 2017-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
+ * SUCH DAMAGE.\r
+ */\r
+//#include <string.h>\r
+#include "regenc.h"\r
+\r
+#define TOTAL_KEYWORDS 1346\r
+#define MIN_WORD_LENGTH 3\r
+#define MAX_WORD_LENGTH 3\r
+#define MIN_HASH_VALUE 3\r
+#define MAX_HASH_VALUE 1765\r
+/* maximum key range = 1763, duplicates = 0 */\r
+\r
+#ifdef __GNUC__\r
+__inline\r
+#else\r
+#ifdef __cplusplus\r
+inline\r
+#endif\r
+#endif\r
+/*ARGSUSED*/\r
+static unsigned int\r
+hash(OnigCodePoint codes[])\r
+{\r
+  static const unsigned short asso_values[] =\r
+    {\r
+         4,    2,  147,   16,    1,   13, 1233,  682, 1225,  643,\r
+      1208,   95,    9,   89, 1391,   82,    8,   80, 1383,    6,\r
+      1201,  638, 1191,  602,  151,   75, 1377,   68, 1374,  464,\r
+         0,   11, 1369,    3, 1352,  278,   23,  424,  660,  320,\r
+       640,   20,  635,   34,    5,   29,  860,   27,  630,    0,\r
+       854, 1352,  870, 1336,  470, 1322,  623, 1319,  610,  230,\r
+      1184, 1309, 1159,  779, 1042,  980,  836,  844,  456,  597,\r
+       285,  158,  590,  477,  583,   42,  576, 1442,  447, 1119,\r
+       440,  922,  426, 1434,  400, 1433,  327, 1428,  567, 1417,\r
+       386, 1443,  458,  856,  704, 1435, 1010,   66,  232,  413,\r
+       204, 1417,  226, 1412,  190, 1095,  379, 1253,  198, 1211,\r
+       175,  209,  561,  362,  528, 1296,  257, 1169,  240, 1291,\r
+       508, 1163,  484, 1228,  699,  735,  831,  488,  679,  513,\r
+       420,  639, 1148,   83,  683,  806, 1152,   77, 1170,  537,\r
+      1213,    3, 1285,  166, 1410, 1766, 1394, 1766, 1206,  460,\r
+       757, 1766,  367, 1766, 1339, 1766,  908,   57, 1321, 1766,\r
+       384,  345,  686,   52, 1145,   40,  218,  180, 1135,   33,\r
+      1292,  276, 1282,   14, 1408,  719, 1128,  701, 1275,  129,\r
+      1116,  610, 1255, 1343, 1109,  874, 1097,  448,  823,  346,\r
+       877,  181, 1089,    0, 1077,  786, 1080,  768, 1068, 1180,\r
+      1060, 1056, 1048,  798,  811,  177, 1045, 1022, 1030,  993,\r
+      1020,  789,  353,  990,  548,  982,  517,  970,  334,  765,\r
+       166,  753,  138,  743,  100,  963,   87,  720,   49,  957,\r
+        75,  951,   62,  411,  126,  945,  113, 1266,  317,  935,\r
+       304,  925,  293, 1244,  714,  912,  275,  490,  263,  469,\r
+       395, 1297,  896,  208,  887,   80,  542,   11,  246\r
+    };\r
+  return asso_values[(unsigned char)onig_codes_byte_at(codes, 2)+3] + asso_values[(unsigned char)onig_codes_byte_at(codes, 1)] + asso_values[(unsigned char)onig_codes_byte_at(codes, 0)];\r
+}\r
+\r
+int\r
+onigenc_unicode_fold1_key(OnigCodePoint codes[])\r
+{\r
+  static const short int wordlist[] =\r
+    {\r
+      -1, -1, -1,\r
+\r
+      3408,\r
+\r
+      1900,\r
+\r
+      1861,\r
+\r
+      210,\r
+\r
+      171,\r
+\r
+      3393,\r
+\r
+      1921,\r
+\r
+      1687,\r
+\r
+      231,\r
+\r
+      1879,\r
+\r
+      1873,\r
+\r
+      189,\r
+\r
+      183,\r
+\r
+      2234,\r
+\r
+      1312,\r
+\r
+      1273,\r
+\r
+      165,\r
+\r
+      789,\r
+\r
+      2255,\r
+\r
+      1333,\r
+\r
+      1591,\r
+\r
+      1627,\r
+\r
+      1291,\r
+\r
+      1285,\r
+\r
+      1909,\r
+\r
+      2237,\r
+\r
+      219,\r
+\r
+      3402,\r
+\r
+      2231,\r
+\r
+      3396,\r
+\r
+      2975,\r
+\r
+      2897,\r
+\r
+      2291,\r
+\r
+      2984,\r
+\r
+      3390,\r
+\r
+      2276,\r
+\r
+      2942,\r
+\r
+      1321,\r
+\r
+      2933,\r
+\r
+      2921,\r
+\r
+      1615,\r
+\r
+      2978,\r
+\r
+      3486,\r
+\r
+      2900,\r
+\r
+      971,\r
+\r
+      273,\r
+\r
+      2894,\r
+\r
+      1603,\r
+\r
+      2642,\r
+\r
+      3537,\r
+\r
+      2183,\r
+\r
+      1225,\r
+\r
+      459,\r
+\r
+      2993,\r
+\r
+      80,\r
+\r
+      2879,\r
+\r
+      1792,\r
+\r
+      3717,\r
+\r
+      1510,\r
+\r
+      1597,\r
+\r
+      378,\r
+\r
+      2432,\r
+\r
+      3549,\r
+\r
+      2189,\r
+\r
+      1231,\r
+\r
+      465,\r
+\r
+      857,\r
+\r
+      92,\r
+\r
+      1038,\r
+\r
+      1804,\r
+\r
+      3729,\r
+\r
+      1522,\r
+\r
+      2708,\r
+\r
+      2543,\r
+\r
+      2435,\r
+\r
+      3543,\r
+\r
+      2186,\r
+\r
+      1228,\r
+\r
+      462,\r
+\r
+      863,\r
+\r
+      86,\r
+\r
+      2882,\r
+\r
+      1798,\r
+\r
+      3723,\r
+\r
+      1516,\r
+\r
+      159,\r
+\r
+      2555,\r
+\r
+      3531,\r
+\r
+      2180,\r
+\r
+      1222,\r
+\r
+      456,\r
+\r
+      1456,\r
+\r
+      860,\r
+\r
+      2876,\r
+\r
+      1786,\r
+\r
+      3711,\r
+\r
+      1504,\r
+\r
+      1444,\r
+\r
+      2966,\r
+\r
+      2549,\r
+\r
+      3525,\r
+\r
+      2177,\r
+\r
+      1219,\r
+\r
+      453,\r
+\r
+      854,\r
+\r
+      2960,\r
+\r
+      2873,\r
+\r
+      1780,\r
+\r
+      3705,\r
+\r
+      1498,\r
+\r
+      2936,\r
+\r
+      2537,\r
+\r
+      2930,\r
+\r
+      3561,\r
+\r
+      2195,\r
+\r
+      1237,\r
+\r
+      471,\r
+\r
+      851,\r
+\r
+      105,\r
+\r
+      2924,\r
+\r
+      1816,\r
+\r
+      3741,\r
+\r
+      1534,\r
+\r
+      3333,\r
+\r
+      2531,\r
+\r
+      2918,\r
+\r
+      3555,\r
+\r
+      2192,\r
+\r
+      1234,\r
+\r
+      468,\r
+\r
+      869,\r
+\r
+      99,\r
+\r
+      399,\r
+\r
+      1810,\r
+\r
+      3735,\r
+\r
+      1528,\r
+\r
+      1645,\r
+\r
+      2567,\r
+\r
+      3519,\r
+\r
+      2174,\r
+\r
+      1216,\r
+\r
+      2417,\r
+      -1,\r
+\r
+      866,\r
+\r
+      2870,\r
+\r
+      1774,\r
+\r
+      3699,\r
+\r
+      1492,\r
+\r
+      541,\r
+\r
+      502,\r
+\r
+      2561,\r
+\r
+      694,\r
+\r
+      1891,\r
+\r
+      559,\r
+\r
+      201,\r
+\r
+      848,\r
+\r
+      520,\r
+\r
+      514,\r
+\r
+      3474,\r
+      -1,\r
+\r
+      959,\r
+\r
+      267,\r
+\r
+      2525,\r
+\r
+      2270,\r
+\r
+      2630,\r
+\r
+      1303,\r
+\r
+      3513,\r
+\r
+      2171,\r
+\r
+      1213,\r
+\r
+      366,\r
+\r
+      2333,\r
+      -1,\r
+\r
+      2867,\r
+\r
+      1768,\r
+\r
+      3693,\r
+\r
+      1486,\r
+\r
+      2021,\r
+\r
+      1060,\r
+\r
+      324,\r
+\r
+      1189,\r
+\r
+      27,\r
+\r
+      2957,\r
+      -1,\r
+\r
+      845,\r
+\r
+      1723,\r
+\r
+      3648,\r
+\r
+      3135,\r
+\r
+      1609,\r
+\r
+      1681,\r
+\r
+      1375,\r
+\r
+      2519,\r
+\r
+      2012,\r
+\r
+      1051,\r
+\r
+      315,\r
+\r
+      827,\r
+\r
+      12,\r
+\r
+      2714,\r
+      -1,\r
+\r
+      782,\r
+\r
+      2018,\r
+\r
+      1057,\r
+\r
+      321,\r
+\r
+      2366,\r
+\r
+      4065,\r
+\r
+      1357,\r
+\r
+      2005,\r
+\r
+      1044,\r
+\r
+      309,\r
+\r
+      3612,\r
+\r
+      0,\r
+\r
+      2711,\r
+      -1,\r
+\r
+      1369,\r
+\r
+      153,\r
+\r
+      31,\r
+\r
+      2726,\r
+\r
+      2354,\r
+\r
+      1585,\r
+\r
+      1345,\r
+\r
+      2090,\r
+\r
+      1132,\r
+\r
+      387,\r
+      -1,\r
+\r
+      1378,\r
+\r
+      2786,\r
+\r
+      1606,\r
+      -1,\r
+\r
+      2009,\r
+\r
+      1047,\r
+\r
+      312,\r
+\r
+      3438,\r
+\r
+      6,\r
+\r
+      919,\r
+\r
+      2002,\r
+\r
+      1041,\r
+\r
+      306,\r
+\r
+      2594,\r
+\r
+      3864,\r
+\r
+      2360,\r
+\r
+      3321,\r
+\r
+      1351,\r
+\r
+      2033,\r
+\r
+      1072,\r
+\r
+      336,\r
+\r
+      2450,\r
+\r
+      52,\r
+\r
+      2729,\r
+\r
+      2228,\r
+\r
+      1270,\r
+\r
+      499,\r
+\r
+      3858,\r
+\r
+      168,\r
+\r
+      2384,\r
+      -1,\r
+\r
+      1399,\r
+\r
+      1594,\r
+      -1,\r
+\r
+      715,\r
+\r
+      2030,\r
+\r
+      1069,\r
+\r
+      333,\r
+\r
+      2444,\r
+\r
+      46,\r
+\r
+      3597,\r
+\r
+      2213,\r
+\r
+      1255,\r
+\r
+      487,\r
+      -1,\r
+\r
+      141,\r
+\r
+      2378,\r
+\r
+      1852,\r
+\r
+      1393,\r
+\r
+      1570,\r
+      -1,\r
+\r
+      712,\r
+\r
+      3591,\r
+\r
+      2210,\r
+\r
+      1252,\r
+\r
+      483,\r
+\r
+      393,\r
+\r
+      135,\r
+\r
+      2891,\r
+\r
+      1846,\r
+\r
+      1621,\r
+\r
+      1564,\r
+\r
+      3471,\r
+\r
+      1960,\r
+\r
+      956,\r
+\r
+      3852,\r
+      -1,\r
+\r
+      2273,\r
+\r
+      2627,\r
+\r
+      884,\r
+\r
+      3579,\r
+\r
+      2204,\r
+\r
+      1246,\r
+\r
+      480,\r
+\r
+      2330,\r
+\r
+      123,\r
+\r
+      532,\r
+\r
+      1834,\r
+\r
+      3759,\r
+\r
+      1552,\r
+      -1,\r
+\r
+      3573,\r
+\r
+      2201,\r
+\r
+      1243,\r
+\r
+      477,\r
+\r
+      2990,\r
+\r
+      117,\r
+\r
+      878,\r
+\r
+      1828,\r
+\r
+      3753,\r
+\r
+      1546,\r
+\r
+      700,\r
+      -1,\r
+\r
+      3846,\r
+\r
+      3567,\r
+\r
+      2198,\r
+\r
+      1240,\r
+\r
+      474,\r
+\r
+      875,\r
+\r
+      111,\r
+\r
+      658,\r
+\r
+      1822,\r
+\r
+      3747,\r
+\r
+      1540,\r
+\r
+      3801,\r
+\r
+      1984,\r
+\r
+      1005,\r
+\r
+      288,\r
+      -1,\r
+\r
+      2285,\r
+\r
+      2675,\r
+\r
+      872,\r
+\r
+      2168,\r
+\r
+      1210,\r
+      -1,\r
+\r
+      643,\r
+\r
+      2342,\r
+\r
+      2864,\r
+\r
+      1762,\r
+\r
+      3687,\r
+\r
+      1480,\r
+      -1, -1,\r
+\r
+      652,\r
+\r
+      3261,\r
+\r
+      381,\r
+\r
+      3900,\r
+\r
+      3002,\r
+\r
+      842,\r
+\r
+      637,\r
+\r
+      1675,\r
+\r
+      2159,\r
+\r
+      1201,\r
+\r
+      3231,\r
+\r
+      661,\r
+\r
+      2513,\r
+\r
+      2855,\r
+\r
+      1744,\r
+\r
+      3669,\r
+\r
+      1462,\r
+\r
+      775,\r
+\r
+      3882,\r
+\r
+      2426,\r
+\r
+      3318,\r
+\r
+      37,\r
+\r
+      2084,\r
+\r
+      1111,\r
+\r
+      372,\r
+\r
+      3222,\r
+\r
+      3894,\r
+\r
+      2765,\r
+\r
+      640,\r
+      -1,\r
+\r
+      1384,\r
+\r
+      2495,\r
+\r
+      3870,\r
+\r
+      3228,\r
+\r
+      2015,\r
+\r
+      1054,\r
+\r
+      318,\r
+\r
+      3903,\r
+\r
+      18,\r
+\r
+      3216,\r
+\r
+      1123,\r
+\r
+      1990,\r
+\r
+      1017,\r
+\r
+      294,\r
+\r
+      2777,\r
+\r
+      2372,\r
+\r
+      2687,\r
+\r
+      1363,\r
+\r
+      3078,\r
+\r
+      3603,\r
+\r
+      2216,\r
+\r
+      1258,\r
+\r
+      2348,\r
+\r
+      3288,\r
+\r
+      3876,\r
+\r
+      1981,\r
+\r
+      999,\r
+\r
+      285,\r
+\r
+      1576,\r
+\r
+      667,\r
+\r
+      2669,\r
+\r
+      3219,\r
+\r
+      3366,\r
+\r
+      3069,\r
+\r
+      3999,\r
+\r
+      3552,\r
+\r
+      2339,\r
+\r
+      3213,\r
+\r
+      3924,\r
+\r
+      3984,\r
+\r
+      96,\r
+\r
+      3075,\r
+\r
+      1807,\r
+\r
+      3732,\r
+\r
+      1525,\r
+\r
+      2051,\r
+\r
+      1090,\r
+\r
+      3063,\r
+\r
+      2486,\r
+\r
+      2351,\r
+\r
+      3507,\r
+\r
+      1978,\r
+\r
+      993,\r
+\r
+      282,\r
+\r
+      3975,\r
+\r
+      3918,\r
+\r
+      2663,\r
+      -1,\r
+\r
+      1435,\r
+\r
+      2558,\r
+\r
+      2279,\r
+\r
+      3993,\r
+      -1,\r
+\r
+      3987,\r
+\r
+      3501,\r
+\r
+      1975,\r
+\r
+      987,\r
+\r
+      279,\r
+\r
+      3981,\r
+\r
+      3066,\r
+\r
+      2657,\r
+\r
+      3495,\r
+\r
+      1972,\r
+\r
+      981,\r
+\r
+      276,\r
+\r
+      3060,\r
+      -1,\r
+\r
+      2651,\r
+\r
+      2996,\r
+\r
+      1669,\r
+\r
+      3465,\r
+\r
+      1957,\r
+\r
+      947,\r
+\r
+      1993,\r
+\r
+      1023,\r
+\r
+      297,\r
+\r
+      2621,\r
+\r
+      369,\r
+\r
+      2693,\r
+\r
+      765,\r
+\r
+      3171,\r
+\r
+      3378,\r
+\r
+      2324,\r
+\r
+      3600,\r
+\r
+      3423,\r
+\r
+      1936,\r
+\r
+      903,\r
+\r
+      243,\r
+\r
+      144,\r
+\r
+      613,\r
+\r
+      2579,\r
+\r
+      3480,\r
+\r
+      1573,\r
+\r
+      965,\r
+\r
+      270,\r
+\r
+      3360,\r
+\r
+      2306,\r
+\r
+      2636,\r
+\r
+      3840,\r
+\r
+      2039,\r
+\r
+      1078,\r
+\r
+      342,\r
+\r
+      2462,\r
+\r
+      65,\r
+\r
+      3594,\r
+\r
+      348,\r
+\r
+      2477,\r
+\r
+      709,\r
+\r
+      2972,\r
+\r
+      138,\r
+\r
+      2396,\r
+\r
+      1849,\r
+\r
+      1411,\r
+\r
+      1567,\r
+\r
+      2411,\r
+\r
+      718,\r
+\r
+      1426,\r
+\r
+      3822,\r
+\r
+      3017,\r
+\r
+      724,\r
+      -1,\r
+\r
+      3354,\r
+\r
+      3195,\r
+\r
+      2036,\r
+\r
+      1075,\r
+\r
+      339,\r
+\r
+      2456,\r
+\r
+      59,\r
+      -1, -1,\r
+\r
+      351,\r
+\r
+      2483,\r
+\r
+      2165,\r
+\r
+      1207,\r
+\r
+      2390,\r
+\r
+      3348,\r
+\r
+      1405,\r
+\r
+      2861,\r
+\r
+      1756,\r
+\r
+      3681,\r
+\r
+      1474,\r
+\r
+      1432,\r
+\r
+      3342,\r
+\r
+      2027,\r
+\r
+      1066,\r
+\r
+      330,\r
+\r
+      706,\r
+\r
+      40,\r
+\r
+      622,\r
+      -1,\r
+\r
+      3909,\r
+\r
+      3312,\r
+      -1,\r
+\r
+      3384,\r
+\r
+      363,\r
+\r
+      2507,\r
+\r
+      1387,\r
+\r
+      2225,\r
+\r
+      1267,\r
+\r
+      496,\r
+\r
+      3042,\r
+\r
+      162,\r
+\r
+      607,\r
+\r
+      2162,\r
+\r
+      1204,\r
+\r
+      1588,\r
+      -1,\r
+\r
+      3888,\r
+\r
+      2858,\r
+\r
+      1750,\r
+\r
+      3675,\r
+\r
+      1468,\r
+\r
+      3327,\r
+      -1,\r
+\r
+      3225,\r
+\r
+      634,\r
+\r
+      2024,\r
+\r
+      1063,\r
+\r
+      327,\r
+\r
+      3279,\r
+\r
+      34,\r
+\r
+      3201,\r
+\r
+      1987,\r
+\r
+      1011,\r
+\r
+      291,\r
+      -1,\r
+\r
+      2501,\r
+\r
+      2681,\r
+\r
+      601,\r
+\r
+      1381,\r
+\r
+      3489,\r
+\r
+      1969,\r
+\r
+      974,\r
+\r
+      2345,\r
+      -1,\r
+\r
+      3192,\r
+\r
+      2645,\r
+\r
+      3483,\r
+\r
+      1966,\r
+\r
+      968,\r
+\r
+      3114,\r
+\r
+      3867,\r
+\r
+      598,\r
+\r
+      2639,\r
+\r
+      3477,\r
+\r
+      1963,\r
+\r
+      962,\r
+      -1,\r
+\r
+      3960,\r
+\r
+      595,\r
+\r
+      2633,\r
+\r
+      3468,\r
+\r
+      3072,\r
+\r
+      951,\r
+\r
+      264,\r
+\r
+      3246,\r
+\r
+      2336,\r
+\r
+      2624,\r
+\r
+      3309,\r
+\r
+      3048,\r
+\r
+      625,\r
+\r
+      3189,\r
+\r
+      703,\r
+\r
+      2327,\r
+\r
+      3435,\r
+\r
+      1942,\r
+\r
+      916,\r
+\r
+      249,\r
+\r
+      2267,\r
+      -1,\r
+\r
+      2591,\r
+\r
+      1651,\r
+\r
+      574,\r
+\r
+      3039,\r
+      -1,\r
+\r
+      3186,\r
+\r
+      2318,\r
+\r
+      3429,\r
+\r
+      1939,\r
+\r
+      910,\r
+\r
+      246,\r
+\r
+      745,\r
+\r
+      3183,\r
+\r
+      2585,\r
+\r
+      3405,\r
+\r
+      1927,\r
+\r
+      2954,\r
+\r
+      237,\r
+      -1,\r
+\r
+      2312,\r
+\r
+      1918,\r
+\r
+      3168,\r
+\r
+      228,\r
+\r
+      3204,\r
+\r
+      4029,\r
+\r
+      1915,\r
+\r
+      354,\r
+\r
+      225,\r
+\r
+      1339,\r
+\r
+      3036,\r
+      -1,\r
+\r
+      2294,\r
+\r
+      3372,\r
+\r
+      1330,\r
+\r
+      2261,\r
+\r
+      3147,\r
+\r
+      2288,\r
+\r
+      1438,\r
+\r
+      1327,\r
+\r
+      2249,\r
+\r
+      673,\r
+\r
+      3336,\r
+\r
+      3936,\r
+\r
+      3033,\r
+\r
+      3011,\r
+\r
+      1912,\r
+\r
+      3951,\r
+\r
+      222,\r
+\r
+      3330,\r
+\r
+      3008,\r
+\r
+      3029,\r
+\r
+      3834,\r
+\r
+      2948,\r
+\r
+      3243,\r
+\r
+      3005,\r
+\r
+      3324,\r
+\r
+      2282,\r
+\r
+      2912,\r
+\r
+      1324,\r
+\r
+      3014,\r
+\r
+      664,\r
+\r
+      3051,\r
+\r
+      3315,\r
+      -1,\r
+\r
+      2048,\r
+\r
+      1087,\r
+\r
+      3930,\r
+\r
+      2480,\r
+\r
+      2057,\r
+\r
+      688,\r
+\r
+      357,\r
+\r
+      3957,\r
+\r
+      1126,\r
+\r
+      2738,\r
+\r
+      2999,\r
+\r
+      2414,\r
+\r
+      2780,\r
+\r
+      1429,\r
+\r
+      2243,\r
+\r
+      4062,\r
+\r
+      727,\r
+\r
+      1447,\r
+\r
+      3828,\r
+      -1,\r
+\r
+      2042,\r
+\r
+      1081,\r
+\r
+      3912,\r
+\r
+      2468,\r
+\r
+      71,\r
+\r
+      1996,\r
+\r
+      1029,\r
+\r
+      300,\r
+\r
+      1639,\r
+\r
+      3237,\r
+\r
+      2699,\r
+\r
+      2402,\r
+\r
+      2906,\r
+\r
+      1417,\r
+\r
+      3585,\r
+\r
+      2207,\r
+\r
+      1249,\r
+      -1,\r
+\r
+      736,\r
+\r
+      129,\r
+\r
+      3534,\r
+\r
+      1840,\r
+\r
+      3765,\r
+\r
+      1558,\r
+\r
+      592,\r
+\r
+      77,\r
+\r
+      1633,\r
+\r
+      1789,\r
+\r
+      3714,\r
+\r
+      1507,\r
+\r
+      3969,\r
+\r
+      589,\r
+\r
+      2429,\r
+      -1, -1,\r
+\r
+      3906,\r
+\r
+      730,\r
+      -1,\r
+\r
+      345,\r
+\r
+      2471,\r
+\r
+      74,\r
+      -1,\r
+\r
+      3234,\r
+\r
+      3522,\r
+\r
+      2540,\r
+\r
+      586,\r
+\r
+      450,\r
+\r
+      2405,\r
+\r
+      3198,\r
+\r
+      1420,\r
+\r
+      1777,\r
+\r
+      3702,\r
+\r
+      1495,\r
+\r
+      3516,\r
+      -1, -1,\r
+\r
+      447,\r
+\r
+      3180,\r
+\r
+      2081,\r
+\r
+      1108,\r
+\r
+      1771,\r
+\r
+      3696,\r
+\r
+      1489,\r
+\r
+      2762,\r
+\r
+      3177,\r
+\r
+      3510,\r
+      -1,\r
+\r
+      2528,\r
+\r
+      444,\r
+      -1,\r
+\r
+      1177,\r
+\r
+      3174,\r
+\r
+      1765,\r
+\r
+      3690,\r
+\r
+      1483,\r
+\r
+      1699,\r
+\r
+      3624,\r
+\r
+      2522,\r
+\r
+      565,\r
+\r
+      3450,\r
+\r
+      3081,\r
+\r
+      931,\r
+\r
+      255,\r
+\r
+      556,\r
+      -1,\r
+\r
+      2606,\r
+\r
+      3045,\r
+\r
+      679,\r
+\r
+      553,\r
+\r
+      2516,\r
+      -1,\r
+\r
+      3153,\r
+\r
+      432,\r
+\r
+      1693,\r
+\r
+      3618,\r
+\r
+      3026,\r
+\r
+      1741,\r
+\r
+      3666,\r
+\r
+      1459,\r
+      -1,\r
+\r
+      1186,\r
+\r
+      2423,\r
+\r
+      3023,\r
+\r
+      795,\r
+\r
+      3150,\r
+\r
+      1717,\r
+\r
+      3642,\r
+      -1,\r
+\r
+      550,\r
+\r
+      3020,\r
+\r
+      2489,\r
+\r
+      3141,\r
+\r
+      2147,\r
+\r
+      2492,\r
+\r
+      421,\r
+\r
+      820,\r
+\r
+      3132,\r
+\r
+      2843,\r
+\r
+      1720,\r
+\r
+      3645,\r
+\r
+      1450,\r
+\r
+      3129,\r
+      -1, -1,\r
+\r
+      2123,\r
+\r
+      1165,\r
+\r
+      408,\r
+\r
+      676,\r
+\r
+      823,\r
+\r
+      2819,\r
+\r
+      1672,\r
+\r
+      682,\r
+\r
+      2045,\r
+\r
+      1084,\r
+\r
+      3963,\r
+\r
+      2474,\r
+\r
+      3459,\r
+\r
+      1954,\r
+\r
+      941,\r
+      -1,\r
+\r
+      770,\r
+\r
+      3126,\r
+\r
+      2615,\r
+\r
+      2408,\r
+\r
+      3462,\r
+\r
+      1423,\r
+\r
+      944,\r
+\r
+      261,\r
+\r
+      721,\r
+      -1,\r
+\r
+      2618,\r
+      -1,\r
+\r
+      628,\r
+\r
+      3954,\r
+\r
+      3411,\r
+\r
+      1930,\r
+\r
+      2321,\r
+\r
+      240,\r
+\r
+      1026,\r
+      -1,\r
+\r
+      3399,\r
+\r
+      1924,\r
+\r
+      2696,\r
+\r
+      234,\r
+\r
+      3252,\r
+      -1,\r
+\r
+      4056,\r
+\r
+      3282,\r
+\r
+      1342,\r
+      -1,\r
+\r
+      3417,\r
+\r
+      1933,\r
+\r
+      896,\r
+\r
+      3942,\r
+\r
+      1336,\r
+      -1,\r
+\r
+      2573,\r
+\r
+      405,\r
+\r
+      2126,\r
+\r
+      1168,\r
+\r
+      4014,\r
+\r
+      1663,\r
+\r
+      2300,\r
+\r
+      2822,\r
+\r
+      1678,\r
+\r
+      3207,\r
+      -1,\r
+\r
+      3615,\r
+\r
+      2222,\r
+\r
+      1264,\r
+\r
+      493,\r
+\r
+      759,\r
+\r
+      156,\r
+\r
+      3855,\r
+\r
+      779,\r
+      -1,\r
+\r
+      3609,\r
+\r
+      2219,\r
+\r
+      1261,\r
+\r
+      490,\r
+      -1,\r
+\r
+      150,\r
+\r
+      3087,\r
+\r
+      3849,\r
+\r
+      890,\r
+\r
+      1582,\r
+      -1, -1, -1,\r
+\r
+      3945,\r
+\r
+      1117,\r
+\r
+      375,\r
+\r
+      3588,\r
+      -1,\r
+\r
+      2771,\r
+\r
+      3843,\r
+\r
+      3240,\r
+\r
+      132,\r
+\r
+      3777,\r
+\r
+      1843,\r
+\r
+      3768,\r
+\r
+      1561,\r
+\r
+      3504,\r
+\r
+      3054,\r
+\r
+      990,\r
+\r
+      3576,\r
+\r
+      2438,\r
+\r
+      577,\r
+\r
+      2660,\r
+\r
+      881,\r
+\r
+      120,\r
+\r
+      2888,\r
+\r
+      1831,\r
+\r
+      3756,\r
+\r
+      1549,\r
+\r
+      3570,\r
+\r
+      3771,\r
+\r
+      3387,\r
+\r
+      3267,\r
+\r
+      3819,\r
+\r
+      114,\r
+\r
+      2885,\r
+\r
+      1825,\r
+\r
+      3750,\r
+\r
+      1543,\r
+\r
+      3558,\r
+      -1, -1,\r
+\r
+      3795,\r
+      -1,\r
+\r
+      102,\r
+\r
+      3546,\r
+\r
+      1813,\r
+\r
+      3738,\r
+\r
+      1531,\r
+      -1,\r
+\r
+      89,\r
+\r
+      3540,\r
+\r
+      1801,\r
+\r
+      3726,\r
+\r
+      1519,\r
+\r
+      3798,\r
+\r
+      83,\r
+\r
+      3528,\r
+\r
+      1795,\r
+\r
+      3720,\r
+\r
+      1513,\r
+      -1, -1,\r
+\r
+      2564,\r
+\r
+      1783,\r
+\r
+      3708,\r
+\r
+      1501,\r
+\r
+      441,\r
+      -1,\r
+\r
+      2552,\r
+\r
+      3111,\r
+\r
+      1759,\r
+\r
+      3684,\r
+\r
+      1477,\r
+\r
+      3456,\r
+\r
+      2546,\r
+\r
+      937,\r
+\r
+      258,\r
+\r
+      580,\r
+\r
+      438,\r
+\r
+      2612,\r
+\r
+      2534,\r
+      -1,\r
+\r
+      1753,\r
+\r
+      3678,\r
+\r
+      1471,\r
+\r
+      583,\r
+\r
+      435,\r
+\r
+      2510,\r
+\r
+      1195,\r
+\r
+      429,\r
+\r
+      1747,\r
+\r
+      3672,\r
+\r
+      1465,\r
+\r
+      1735,\r
+\r
+      3660,\r
+\r
+      568,\r
+\r
+      3351,\r
+\r
+      3306,\r
+\r
+      3948,\r
+\r
+      2504,\r
+\r
+      4059,\r
+\r
+      562,\r
+      -1,\r
+\r
+      839,\r
+\r
+      1999,\r
+\r
+      1035,\r
+\r
+      303,\r
+\r
+      2498,\r
+      -1,\r
+\r
+      2705,\r
+\r
+      3165,\r
+\r
+      571,\r
+      -1,\r
+\r
+      4026,\r
+\r
+      2156,\r
+\r
+      1198,\r
+      -1,\r
+\r
+      1192,\r
+\r
+      425,\r
+\r
+      2852,\r
+\r
+      1738,\r
+\r
+      3663,\r
+\r
+      1729,\r
+\r
+      3654,\r
+\r
+      2153,\r
+      -1,\r
+\r
+      4020,\r
+      -1,\r
+\r
+      3144,\r
+\r
+      2849,\r
+\r
+      1732,\r
+\r
+      3657,\r
+\r
+      833,\r
+\r
+      3996,\r
+\r
+      3138,\r
+\r
+      3453,\r
+\r
+      1951,\r
+\r
+      934,\r
+\r
+      3978,\r
+\r
+      2150,\r
+\r
+      836,\r
+\r
+      2609,\r
+\r
+      2144,\r
+\r
+      3972,\r
+\r
+      2846,\r
+\r
+      1726,\r
+\r
+      3651,\r
+\r
+      2840,\r
+\r
+      1714,\r
+\r
+      3639,\r
+      -1,\r
+\r
+      1183,\r
+\r
+      417,\r
+      -1,\r
+\r
+      2141,\r
+\r
+      830,\r
+\r
+      1711,\r
+\r
+      3636,\r
+\r
+      817,\r
+\r
+      2837,\r
+\r
+      1708,\r
+\r
+      3633,\r
+\r
+      2138,\r
+\r
+      3966,\r
+      -1, -1,\r
+\r
+      813,\r
+\r
+      2834,\r
+\r
+      1702,\r
+\r
+      3627,\r
+\r
+      810,\r
+\r
+      2132,\r
+\r
+      1174,\r
+\r
+      414,\r
+\r
+      2135,\r
+      -1,\r
+\r
+      2828,\r
+\r
+      1690,\r
+\r
+      803,\r
+\r
+      2831,\r
+\r
+      1696,\r
+\r
+      3621,\r
+\r
+      3273,\r
+\r
+      2129,\r
+\r
+      1171,\r
+\r
+      411,\r
+      -1,\r
+\r
+      792,\r
+\r
+      2825,\r
+\r
+      1684,\r
+\r
+      799,\r
+\r
+      2120,\r
+\r
+      1162,\r
+\r
+      15,\r
+\r
+      2717,\r
+      -1,\r
+\r
+      2816,\r
+\r
+      1666,\r
+      -1,\r
+\r
+      786,\r
+\r
+      2369,\r
+      -1,\r
+\r
+      1360,\r
+\r
+      2117,\r
+\r
+      1159,\r
+      -1,\r
+\r
+      3861,\r
+\r
+      762,\r
+\r
+      2813,\r
+\r
+      1660,\r
+\r
+      2111,\r
+\r
+      1153,\r
+\r
+      3498,\r
+\r
+      3837,\r
+\r
+      984,\r
+\r
+      2807,\r
+\r
+      1648,\r
+      -1,\r
+\r
+      2654,\r
+\r
+      755,\r
+\r
+      3120,\r
+\r
+      2420,\r
+\r
+      2105,\r
+\r
+      1147,\r
+\r
+      396,\r
+\r
+      3831,\r
+\r
+      742,\r
+\r
+      2801,\r
+\r
+      1636,\r
+\r
+      2093,\r
+\r
+      1135,\r
+\r
+      390,\r
+      -1,\r
+\r
+      3825,\r
+\r
+      2789,\r
+\r
+      1612,\r
+\r
+      3813,\r
+\r
+      1858,\r
+\r
+      733,\r
+\r
+      2087,\r
+\r
+      1129,\r
+\r
+      384,\r
+\r
+      2054,\r
+\r
+      1093,\r
+\r
+      2783,\r
+\r
+      1600,\r
+\r
+      2060,\r
+\r
+      2735,\r
+\r
+      360,\r
+      -1, -1,\r
+\r
+      2741,\r
+\r
+      3447,\r
+\r
+      1948,\r
+\r
+      928,\r
+\r
+      1441,\r
+      -1,\r
+\r
+      1855,\r
+\r
+      2603,\r
+\r
+      1453,\r
+\r
+      2459,\r
+\r
+      62,\r
+\r
+      2732,\r
+\r
+      3816,\r
+\r
+      2063,\r
+\r
+      3807,\r
+\r
+      2447,\r
+\r
+      49,\r
+\r
+      2393,\r
+\r
+      2744,\r
+\r
+      1408,\r
+      -1, -1,\r
+\r
+      3810,\r
+\r
+      2381,\r
+\r
+      1180,\r
+\r
+      1396,\r
+\r
+      3441,\r
+\r
+      1945,\r
+\r
+      922,\r
+\r
+      1705,\r
+\r
+      3630,\r
+\r
+      4041,\r
+\r
+      2597,\r
+\r
+      3210,\r
+\r
+      1888,\r
+      -1,\r
+\r
+      198,\r
+\r
+      3804,\r
+      -1,\r
+\r
+      807,\r
+\r
+      3792,\r
+      -1,\r
+\r
+      3345,\r
+      -1,\r
+\r
+      1885,\r
+\r
+      2264,\r
+\r
+      195,\r
+\r
+      1300,\r
+\r
+      3789,\r
+\r
+      2078,\r
+\r
+      1105,\r
+\r
+      1870,\r
+\r
+      3786,\r
+\r
+      180,\r
+\r
+      2759,\r
+\r
+      2258,\r
+\r
+      2066,\r
+\r
+      1297,\r
+\r
+      24,\r
+\r
+      2723,\r
+\r
+      3780,\r
+\r
+      2747,\r
+\r
+      2252,\r
+\r
+      2951,\r
+\r
+      1282,\r
+\r
+      3162,\r
+      -1,\r
+\r
+      1372,\r
+\r
+      1867,\r
+      -1,\r
+\r
+      177,\r
+\r
+      3057,\r
+\r
+      3774,\r
+\r
+      2945,\r
+\r
+      2465,\r
+\r
+      68,\r
+\r
+      1864,\r
+      -1,\r
+\r
+      174,\r
+\r
+      2246,\r
+\r
+      2915,\r
+\r
+      1279,\r
+\r
+      2399,\r
+      -1,\r
+\r
+      1414,\r
+\r
+      646,\r
+\r
+      3582,\r
+\r
+      2240,\r
+\r
+      4050,\r
+\r
+      1276,\r
+      -1,\r
+\r
+      126,\r
+      -1,\r
+\r
+      1837,\r
+\r
+      3762,\r
+\r
+      1555,\r
+\r
+      4053,\r
+\r
+      2909,\r
+\r
+      2114,\r
+\r
+      1156,\r
+\r
+      21,\r
+\r
+      2720,\r
+      -1,\r
+\r
+      2810,\r
+\r
+      1654,\r
+\r
+      2903,\r
+\r
+      4002,\r
+      -1,\r
+\r
+      3564,\r
+\r
+      1366,\r
+      -1,\r
+\r
+      3885,\r
+\r
+      3990,\r
+\r
+      108,\r
+\r
+      749,\r
+\r
+      1819,\r
+\r
+      3744,\r
+\r
+      1537,\r
+\r
+      2108,\r
+\r
+      1150,\r
+\r
+      3303,\r
+      -1,\r
+\r
+      4008,\r
+\r
+      2804,\r
+\r
+      1642,\r
+\r
+      2099,\r
+\r
+      1141,\r
+      -1,\r
+\r
+      2069,\r
+\r
+      1096,\r
+\r
+      2795,\r
+\r
+      1624,\r
+\r
+      3300,\r
+\r
+      2750,\r
+\r
+      739,\r
+\r
+      2096,\r
+\r
+      1138,\r
+\r
+      2453,\r
+\r
+      56,\r
+\r
+      3606,\r
+\r
+      2792,\r
+\r
+      1618,\r
+\r
+      2441,\r
+\r
+      43,\r
+\r
+      147,\r
+\r
+      2387,\r
+      -1,\r
+\r
+      1402,\r
+\r
+      1579,\r
+      -1,\r
+\r
+      2375,\r
+\r
+      3444,\r
+\r
+      1390,\r
+\r
+      925,\r
+\r
+      252,\r
+      -1,\r
+\r
+      887,\r
+\r
+      2600,\r
+\r
+      3291,\r
+\r
+      670,\r
+\r
+      685,\r
+\r
+      3432,\r
+      -1,\r
+\r
+      913,\r
+\r
+      3426,\r
+\r
+      1120,\r
+\r
+      906,\r
+\r
+      2588,\r
+\r
+      3285,\r
+\r
+      2774,\r
+\r
+      2582,\r
+\r
+      3249,\r
+\r
+      3783,\r
+\r
+      2315,\r
+      -1,\r
+\r
+      3255,\r
+\r
+      2309,\r
+      -1,\r
+\r
+      3420,\r
+\r
+      3933,\r
+\r
+      899,\r
+\r
+      529,\r
+\r
+      3159,\r
+\r
+      1114,\r
+\r
+      2576,\r
+\r
+      3921,\r
+      -1,\r
+\r
+      2768,\r
+\r
+      402,\r
+      -1,\r
+\r
+      2303,\r
+\r
+      526,\r
+\r
+      1657,\r
+\r
+      3258,\r
+\r
+      3414,\r
+\r
+      1906,\r
+\r
+      893,\r
+\r
+      216,\r
+\r
+      511,\r
+      -1,\r
+\r
+      2570,\r
+\r
+      655,\r
+\r
+      752,\r
+\r
+      691,\r
+      -1, -1,\r
+\r
+      2297,\r
+\r
+      3156,\r
+\r
+      1318,\r
+\r
+      3084,\r
+      -1, -1,\r
+\r
+      1903,\r
+\r
+      3090,\r
+\r
+      213,\r
+\r
+      508,\r
+      -1,\r
+\r
+      1897,\r
+      -1,\r
+\r
+      207,\r
+\r
+      1894,\r
+      -1,\r
+\r
+      204,\r
+\r
+      505,\r
+\r
+      2987,\r
+\r
+      1315,\r
+\r
+      1882,\r
+\r
+      3897,\r
+\r
+      192,\r
+\r
+      3264,\r
+\r
+      1309,\r
+\r
+      3093,\r
+\r
+      4047,\r
+\r
+      1306,\r
+\r
+      1876,\r
+      -1,\r
+\r
+      186,\r
+\r
+      2075,\r
+\r
+      1102,\r
+\r
+      1294,\r
+      -1,\r
+\r
+      2981,\r
+\r
+      2756,\r
+\r
+      649,\r
+\r
+      3939,\r
+      -1,\r
+\r
+      2969,\r
+\r
+      1288,\r
+      -1,\r
+\r
+      2963,\r
+      -1,\r
+\r
+      2102,\r
+\r
+      1144,\r
+\r
+      2072,\r
+\r
+      1099,\r
+\r
+      2939,\r
+\r
+      2798,\r
+\r
+      1630,\r
+\r
+      2753,\r
+\r
+      9,\r
+      -1,\r
+\r
+      1014,\r
+      -1,\r
+\r
+      2927,\r
+\r
+      3,\r
+\r
+      2684,\r
+\r
+      2363,\r
+\r
+      3108,\r
+\r
+      1354,\r
+\r
+      3891,\r
+      -1,\r
+\r
+      2357,\r
+\r
+      1008,\r
+\r
+      1348,\r
+\r
+      3096,\r
+\r
+      697,\r
+\r
+      2678,\r
+\r
+      1002,\r
+\r
+      996,\r
+\r
+      1032,\r
+      -1,\r
+\r
+      2672,\r
+\r
+      2666,\r
+\r
+      2702,\r
+\r
+      3492,\r
+      -1,\r
+\r
+      977,\r
+\r
+      1020,\r
+      -1, -1,\r
+\r
+      2648,\r
+\r
+      2690,\r
+      -1, -1,\r
+\r
+      4044,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1,\r
+\r
+      3297,\r
+      -1,\r
+\r
+      3927,\r
+      -1, -1, -1, -1,\r
+\r
+      3915,\r
+      -1, -1,\r
+\r
+      3294,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+\r
+      3375,\r
+      -1,\r
+\r
+      547,\r
+      -1,\r
+\r
+      3276,\r
+      -1,\r
+\r
+      3099,\r
+      -1, -1, -1, -1,\r
+\r
+      3369,\r
+      -1, -1, -1, -1,\r
+\r
+      3363,\r
+\r
+      3357,\r
+      -1,\r
+\r
+      544,\r
+      -1, -1,\r
+\r
+      3270,\r
+      -1,\r
+\r
+      538,\r
+\r
+      3339,\r
+\r
+      3381,\r
+\r
+      535,\r
+      -1, -1, -1, -1, -1,\r
+\r
+      523,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1,\r
+\r
+      517,\r
+\r
+      3123,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1,\r
+\r
+      3117,\r
+      -1, -1, -1, -1, -1, -1,\r
+\r
+      619,\r
+      -1, -1, -1,\r
+\r
+      4038,\r
+      -1, -1, -1, -1, -1, -1,\r
+\r
+      616,\r
+      -1, -1, -1, -1,\r
+\r
+      610,\r
+\r
+      604,\r
+\r
+      631,\r
+      -1, -1,\r
+\r
+      3879,\r
+      -1, -1, -1, -1,\r
+\r
+      3873,\r
+      -1, -1,\r
+\r
+      4032,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+\r
+      3105,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1,\r
+\r
+      3102,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1,\r
+\r
+      4035,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1,\r
+\r
+      4023,\r
+      -1, -1,\r
+\r
+      4017,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1,\r
+\r
+      4011,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1, -1, -1, -1,\r
+      -1, -1, -1,\r
+\r
+      4005\r
+    };\r
+\r
+  if (0 == 0)\r
+    {\r
+      int key = hash(codes);\r
+\r
+      if (key <= MAX_HASH_VALUE)\r
+        {\r
+          int index = wordlist[key];\r
+\r
+          if (index >= 0 && onig_codes_cmp(codes, OnigUnicodeFolds1 + index, 1) == 0)\r
+            return index;\r
+        }\r
+    }\r
+  return -1;\r
+}\r
+\r
+\r
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold2_key.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold2_key.c
new file mode 100644 (file)
index 0000000..1926b25
--- /dev/null
@@ -0,0 +1,229 @@
+/* This file was converted by gperf_fold_key_conv.py\r
+      from gperf output file. */\r
+/* ANSI-C code produced by gperf version 3.1 */\r
+/* Command-line: /usr/bin/gperf -n -C -T -c -t -j1 -L ANSI-C -F,-1 -N onigenc_unicode_fold2_key unicode_fold2_key.gperf  */\r
+/* Computed positions: -k'3,6' */\r
+\r
+\r
+\r
+/* This gperf source file was generated by make_unicode_fold_data.py */\r
+\r
+/*-\r
+ * Copyright (c) 2017-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
+ * SUCH DAMAGE.\r
+ */\r
+//#include <string.h>\r
+#include "regenc.h"\r
+\r
+#define TOTAL_KEYWORDS 59\r
+#define MIN_WORD_LENGTH 6\r
+#define MAX_WORD_LENGTH 6\r
+#define MIN_HASH_VALUE 0\r
+#define MAX_HASH_VALUE 58\r
+/* maximum key range = 59, duplicates = 0 */\r
+\r
+#ifdef __GNUC__\r
+__inline\r
+#else\r
+#ifdef __cplusplus\r
+inline\r
+#endif\r
+#endif\r
+/*ARGSUSED*/\r
+static unsigned int\r
+hash(OnigCodePoint codes[])\r
+{\r
+  static const unsigned char asso_values[] =\r
+    {\r
+      58, 57, 56, 55, 54, 53, 52, 16, 50, 59,\r
+      15, 59, 25, 59, 59, 59, 59, 59, 59,  3,\r
+      59, 59, 59, 59, 59, 59, 59, 59, 59, 59,\r
+      59, 59, 49, 48, 47, 46, 45, 44, 43, 42,\r
+      59, 59, 59, 59, 59, 59, 59, 59, 59, 21,\r
+      59, 59, 59, 59, 59, 59, 59, 59, 59, 59,\r
+      59, 59, 59, 59, 59, 59,  2, 59, 59, 59,\r
+      59, 59, 59, 59, 59, 59, 59, 59, 59, 59,\r
+      59, 59, 59, 59, 59, 59, 59, 59, 59, 59,\r
+      59, 59, 59, 59, 59, 59, 40, 20, 39, 38,\r
+      37, 14,  5, 36, 20,  7, 25, 34, 29, 32,\r
+      16, 59, 31, 59, 59,  2,  1, 59, 25, 15,\r
+      59, 14, 59, 59, 28, 59,  2, 59, 59, 59,\r
+      11, 59, 59, 59, 59, 59, 59, 59, 59, 59,\r
+      59, 59, 59, 59, 59, 59, 59, 59, 59, 59,\r
+      59, 59, 59, 59, 59, 59, 59, 59, 59, 59,\r
+      59, 59, 59, 59, 59, 59, 59, 59, 59, 59,\r
+      59, 59, 24, 59, 22, 59, 59, 11, 59, 59,\r
+      59, 59, 59,  7, 59,  0, 59, 59, 16, 59,\r
+       1, 59, 59, 16, 59, 59, 59, 15, 59, 59,\r
+      59,  6, 59, 59, 59, 59,  0, 59, 59, 59,\r
+      59, 59, 59, 59, 59, 59, 59, 59, 59, 59,\r
+      59, 59, 59, 59, 59, 59, 59, 59, 59, 59,\r
+      59, 59, 59, 59, 59, 59, 59, 59, 59, 59,\r
+      59, 59, 59, 59, 59, 59, 59, 59, 59, 59,\r
+      59, 59, 59, 59, 59, 59\r
+    };\r
+  return asso_values[(unsigned char)onig_codes_byte_at(codes, 5)] + asso_values[(unsigned char)onig_codes_byte_at(codes, 2)];\r
+}\r
+\r
+int\r
+onigenc_unicode_fold2_key(OnigCodePoint codes[])\r
+{\r
+  static const short int wordlist[] =\r
+    {\r
+\r
+      101,\r
+\r
+      253,\r
+\r
+      76,\r
+\r
+      29,\r
+\r
+      24,\r
+\r
+      239,\r
+\r
+      96,\r
+\r
+      71,\r
+\r
+      92,\r
+\r
+      67,\r
+\r
+      4,\r
+\r
+      62,\r
+\r
+      8,\r
+\r
+      58,\r
+\r
+      234,\r
+\r
+      109,\r
+\r
+      164,\r
+\r
+      88,\r
+\r
+      84,\r
+\r
+      80,\r
+\r
+      214,\r
+\r
+      0,\r
+\r
+      54,\r
+\r
+      261,\r
+\r
+      50,\r
+\r
+      105,\r
+\r
+      121,\r
+\r
+      125,\r
+\r
+      257,\r
+\r
+      42,\r
+\r
+      38,\r
+\r
+      249,\r
+\r
+      46,\r
+\r
+      117,\r
+\r
+      12,\r
+\r
+      113,\r
+\r
+      244,\r
+\r
+      229,\r
+\r
+      224,\r
+\r
+      219,\r
+\r
+      209,\r
+\r
+      16,\r
+\r
+      204,\r
+\r
+      199,\r
+\r
+      194,\r
+\r
+      189,\r
+\r
+      184,\r
+\r
+      179,\r
+\r
+      174,\r
+\r
+      169,\r
+\r
+      20,\r
+\r
+      34,\r
+\r
+      159,\r
+\r
+      154,\r
+\r
+      149,\r
+\r
+      144,\r
+\r
+      139,\r
+\r
+      134,\r
+\r
+      129\r
+    };\r
+\r
+  if (0 == 0)\r
+    {\r
+      int key = hash(codes);\r
+\r
+      if (key <= MAX_HASH_VALUE)\r
+        {\r
+          int index = wordlist[key];\r
+\r
+          if (index >= 0 && onig_codes_cmp(codes, OnigUnicodeFolds2 + index, 2) == 0)\r
+            return index;\r
+        }\r
+    }\r
+  return -1;\r
+}\r
+\r
+\r
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold3_key.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold3_key.c
new file mode 100644 (file)
index 0000000..9c4415a
--- /dev/null
@@ -0,0 +1,139 @@
+/* This file was converted by gperf_fold_key_conv.py\r
+      from gperf output file. */\r
+/* ANSI-C code produced by gperf version 3.1 */\r
+/* Command-line: /usr/bin/gperf -n -C -T -c -t -j1 -L ANSI-C -F,-1 -N onigenc_unicode_fold3_key unicode_fold3_key.gperf  */\r
+/* Computed positions: -k'3,6,9' */\r
+\r
+\r
+\r
+/* This gperf source file was generated by make_unicode_fold_data.py */\r
+\r
+/*-\r
+ * Copyright (c) 2017-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
+ * SUCH DAMAGE.\r
+ */\r
+//#include <string.h>\r
+#include "regenc.h"\r
+\r
+#define TOTAL_KEYWORDS 14\r
+#define MIN_WORD_LENGTH 9\r
+#define MAX_WORD_LENGTH 9\r
+#define MIN_HASH_VALUE 0\r
+#define MAX_HASH_VALUE 13\r
+/* maximum key range = 14, duplicates = 0 */\r
+\r
+#ifdef __GNUC__\r
+__inline\r
+#else\r
+#ifdef __cplusplus\r
+inline\r
+#endif\r
+#endif\r
+/*ARGSUSED*/\r
+static unsigned int\r
+hash(OnigCodePoint codes[])\r
+{\r
+  static const unsigned char asso_values[] =\r
+    {\r
+       6,  3, 14, 14, 14, 14, 14, 14,  1, 14,\r
+      14, 14, 14, 14, 14, 14, 14, 14, 14,  0,\r
+      14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\r
+      14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\r
+      14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\r
+      14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\r
+      14, 14, 14, 14, 14, 14,  0, 14, 14, 14,\r
+      14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\r
+      14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\r
+      14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\r
+      14, 14,  4, 14, 14,  5, 14, 14,  4, 14,\r
+      14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\r
+      14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\r
+      14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\r
+      14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\r
+      14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\r
+      14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\r
+      14, 14, 14, 14, 14, 14, 14, 10, 14, 14,\r
+      14, 14, 14,  9, 14,  1, 14, 14, 14, 14,\r
+      14, 14, 14, 14, 14, 14, 14,  0, 14, 14,\r
+      14,  8, 14, 14, 14, 14, 14, 14, 14, 14,\r
+      14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\r
+      14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\r
+      14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\r
+      14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\r
+      14, 14, 14, 14, 14, 14\r
+    };\r
+  return asso_values[(unsigned char)onig_codes_byte_at(codes, 8)] + asso_values[(unsigned char)onig_codes_byte_at(codes, 5)] + asso_values[(unsigned char)onig_codes_byte_at(codes, 2)];\r
+}\r
+\r
+int\r
+onigenc_unicode_fold3_key(OnigCodePoint codes[])\r
+{\r
+  static const short int wordlist[] =\r
+    {\r
+\r
+      62,\r
+\r
+      47,\r
+\r
+      31,\r
+\r
+      57,\r
+\r
+      41,\r
+\r
+      25,\r
+\r
+      52,\r
+\r
+      36,\r
+\r
+      20,\r
+\r
+      67,\r
+\r
+      15,\r
+\r
+      10,\r
+\r
+      5,\r
+\r
+      0\r
+    };\r
+\r
+  if (0 == 0)\r
+    {\r
+      int key = hash(codes);\r
+\r
+      if (key <= MAX_HASH_VALUE)\r
+        {\r
+          int index = wordlist[key];\r
+\r
+          if (index >= 0 && onig_codes_cmp(codes, OnigUnicodeFolds3 + index, 3) == 0)\r
+            return index;\r
+        }\r
+    }\r
+  return -1;\r
+}\r
+\r
+\r
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold_data.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_fold_data.c
new file mode 100644 (file)
index 0000000..87d0be7
--- /dev/null
@@ -0,0 +1,1516 @@
+/* This file was generated by make_unicode_fold_data.py. */\r
+#include "regenc.h"\r
+\r
+#define UNICODE_CASEFOLD_VERSION  11_0_0\r
+\r
+\r
+OnigCodePoint OnigUnicodeFolds1[] = {\r
+ /*   0*/    0x0061,  1,   0x0041, /* LATIN CAPITAL LETTER A */\r
+ /*   3*/    0x0062,  1,   0x0042, /* LATIN CAPITAL LETTER B */\r
+ /*   6*/    0x0063,  1,   0x0043, /* LATIN CAPITAL LETTER C */\r
+ /*   9*/    0x0064,  1,   0x0044, /* LATIN CAPITAL LETTER D */\r
+ /*  12*/    0x0065,  1,   0x0045, /* LATIN CAPITAL LETTER E */\r
+ /*  15*/    0x0066,  1,   0x0046, /* LATIN CAPITAL LETTER F */\r
+ /*  18*/    0x0067,  1,   0x0047, /* LATIN CAPITAL LETTER G */\r
+ /*  21*/    0x0068,  1,   0x0048, /* LATIN CAPITAL LETTER H */\r
+ /*  24*/    0x006a,  1,   0x004a, /* LATIN CAPITAL LETTER J */\r
+ /*  27*/    0x006b,  2,   0x004b,   0x212a, /* LATIN CAPITAL LETTER K */\r
+ /*  31*/    0x006c,  1,   0x004c, /* LATIN CAPITAL LETTER L */\r
+ /*  34*/    0x006d,  1,   0x004d, /* LATIN CAPITAL LETTER M */\r
+ /*  37*/    0x006e,  1,   0x004e, /* LATIN CAPITAL LETTER N */\r
+ /*  40*/    0x006f,  1,   0x004f, /* LATIN CAPITAL LETTER O */\r
+ /*  43*/    0x0070,  1,   0x0050, /* LATIN CAPITAL LETTER P */\r
+ /*  46*/    0x0071,  1,   0x0051, /* LATIN CAPITAL LETTER Q */\r
+ /*  49*/    0x0072,  1,   0x0052, /* LATIN CAPITAL LETTER R */\r
+ /*  52*/    0x0073,  2,   0x0053,   0x017f, /* LATIN CAPITAL LETTER S */\r
+ /*  56*/    0x0074,  1,   0x0054, /* LATIN CAPITAL LETTER T */\r
+ /*  59*/    0x0075,  1,   0x0055, /* LATIN CAPITAL LETTER U */\r
+ /*  62*/    0x0076,  1,   0x0056, /* LATIN CAPITAL LETTER V */\r
+ /*  65*/    0x0077,  1,   0x0057, /* LATIN CAPITAL LETTER W */\r
+ /*  68*/    0x0078,  1,   0x0058, /* LATIN CAPITAL LETTER X */\r
+ /*  71*/    0x0079,  1,   0x0059, /* LATIN CAPITAL LETTER Y */\r
+ /*  74*/    0x007a,  1,   0x005a, /* LATIN CAPITAL LETTER Z */\r
+ /*  77*/    0x00e0,  1,   0x00c0, /* LATIN CAPITAL LETTER A WITH GRAVE */\r
+ /*  80*/    0x00e1,  1,   0x00c1, /* LATIN CAPITAL LETTER A WITH ACUTE */\r
+ /*  83*/    0x00e2,  1,   0x00c2, /* LATIN CAPITAL LETTER A WITH CIRCU.. */\r
+ /*  86*/    0x00e3,  1,   0x00c3, /* LATIN CAPITAL LETTER A WITH TILDE */\r
+ /*  89*/    0x00e4,  1,   0x00c4, /* LATIN CAPITAL LETTER A WITH DIAER.. */\r
+ /*  92*/    0x00e5,  2,   0x00c5,   0x212b, /* LATIN CAPITAL LETTER A WITH RING .. */\r
+ /*  96*/    0x00e6,  1,   0x00c6, /* LATIN CAPITAL LETTER AE */\r
+ /*  99*/    0x00e7,  1,   0x00c7, /* LATIN CAPITAL LETTER C WITH CEDIL.. */\r
+ /* 102*/    0x00e8,  1,   0x00c8, /* LATIN CAPITAL LETTER E WITH GRAVE */\r
+ /* 105*/    0x00e9,  1,   0x00c9, /* LATIN CAPITAL LETTER E WITH ACUTE */\r
+ /* 108*/    0x00ea,  1,   0x00ca, /* LATIN CAPITAL LETTER E WITH CIRCU.. */\r
+ /* 111*/    0x00eb,  1,   0x00cb, /* LATIN CAPITAL LETTER E WITH DIAER.. */\r
+ /* 114*/    0x00ec,  1,   0x00cc, /* LATIN CAPITAL LETTER I WITH GRAVE */\r
+ /* 117*/    0x00ed,  1,   0x00cd, /* LATIN CAPITAL LETTER I WITH ACUTE */\r
+ /* 120*/    0x00ee,  1,   0x00ce, /* LATIN CAPITAL LETTER I WITH CIRCU.. */\r
+ /* 123*/    0x00ef,  1,   0x00cf, /* LATIN CAPITAL LETTER I WITH DIAER.. */\r
+ /* 126*/    0x00f0,  1,   0x00d0, /* LATIN CAPITAL LETTER ETH */\r
+ /* 129*/    0x00f1,  1,   0x00d1, /* LATIN CAPITAL LETTER N WITH TILDE */\r
+ /* 132*/    0x00f2,  1,   0x00d2, /* LATIN CAPITAL LETTER O WITH GRAVE */\r
+ /* 135*/    0x00f3,  1,   0x00d3, /* LATIN CAPITAL LETTER O WITH ACUTE */\r
+ /* 138*/    0x00f4,  1,   0x00d4, /* LATIN CAPITAL LETTER O WITH CIRCU.. */\r
+ /* 141*/    0x00f5,  1,   0x00d5, /* LATIN CAPITAL LETTER O WITH TILDE */\r
+ /* 144*/    0x00f6,  1,   0x00d6, /* LATIN CAPITAL LETTER O WITH DIAER.. */\r
+ /* 147*/    0x00f8,  1,   0x00d8, /* LATIN CAPITAL LETTER O WITH STROKE */\r
+ /* 150*/    0x00f9,  1,   0x00d9, /* LATIN CAPITAL LETTER U WITH GRAVE */\r
+ /* 153*/    0x00fa,  1,   0x00da, /* LATIN CAPITAL LETTER U WITH ACUTE */\r
+ /* 156*/    0x00fb,  1,   0x00db, /* LATIN CAPITAL LETTER U WITH CIRCU.. */\r
+ /* 159*/    0x00fc,  1,   0x00dc, /* LATIN CAPITAL LETTER U WITH DIAER.. */\r
+ /* 162*/    0x00fd,  1,   0x00dd, /* LATIN CAPITAL LETTER Y WITH ACUTE */\r
+ /* 165*/    0x00fe,  1,   0x00de, /* LATIN CAPITAL LETTER THORN */\r
+ /* 168*/    0x00ff,  1,   0x0178, /* LATIN CAPITAL LETTER Y WITH DIAER.. */\r
+ /* 171*/    0x0101,  1,   0x0100, /* LATIN CAPITAL LETTER A WITH MACRON */\r
+ /* 174*/    0x0103,  1,   0x0102, /* LATIN CAPITAL LETTER A WITH BREVE */\r
+ /* 177*/    0x0105,  1,   0x0104, /* LATIN CAPITAL LETTER A WITH OGONEK */\r
+ /* 180*/    0x0107,  1,   0x0106, /* LATIN CAPITAL LETTER C WITH ACUTE */\r
+ /* 183*/    0x0109,  1,   0x0108, /* LATIN CAPITAL LETTER C WITH CIRCU.. */\r
+ /* 186*/    0x010b,  1,   0x010a, /* LATIN CAPITAL LETTER C WITH DOT A.. */\r
+ /* 189*/    0x010d,  1,   0x010c, /* LATIN CAPITAL LETTER C WITH CARON */\r
+ /* 192*/    0x010f,  1,   0x010e, /* LATIN CAPITAL LETTER D WITH CARON */\r
+ /* 195*/    0x0111,  1,   0x0110, /* LATIN CAPITAL LETTER D WITH STROKE */\r
+ /* 198*/    0x0113,  1,   0x0112, /* LATIN CAPITAL LETTER E WITH MACRON */\r
+ /* 201*/    0x0115,  1,   0x0114, /* LATIN CAPITAL LETTER E WITH BREVE */\r
+ /* 204*/    0x0117,  1,   0x0116, /* LATIN CAPITAL LETTER E WITH DOT A.. */\r
+ /* 207*/    0x0119,  1,   0x0118, /* LATIN CAPITAL LETTER E WITH OGONEK */\r
+ /* 210*/    0x011b,  1,   0x011a, /* LATIN CAPITAL LETTER E WITH CARON */\r
+ /* 213*/    0x011d,  1,   0x011c, /* LATIN CAPITAL LETTER G WITH CIRCU.. */\r
+ /* 216*/    0x011f,  1,   0x011e, /* LATIN CAPITAL LETTER G WITH BREVE */\r
+ /* 219*/    0x0121,  1,   0x0120, /* LATIN CAPITAL LETTER G WITH DOT A.. */\r
+ /* 222*/    0x0123,  1,   0x0122, /* LATIN CAPITAL LETTER G WITH CEDIL.. */\r
+ /* 225*/    0x0125,  1,   0x0124, /* LATIN CAPITAL LETTER H WITH CIRCU.. */\r
+ /* 228*/    0x0127,  1,   0x0126, /* LATIN CAPITAL LETTER H WITH STROKE */\r
+ /* 231*/    0x0129,  1,   0x0128, /* LATIN CAPITAL LETTER I WITH TILDE */\r
+ /* 234*/    0x012b,  1,   0x012a, /* LATIN CAPITAL LETTER I WITH MACRON */\r
+ /* 237*/    0x012d,  1,   0x012c, /* LATIN CAPITAL LETTER I WITH BREVE */\r
+ /* 240*/    0x012f,  1,   0x012e, /* LATIN CAPITAL LETTER I WITH OGONEK */\r
+ /* 243*/    0x0133,  1,   0x0132, /* LATIN CAPITAL LIGATURE IJ */\r
+ /* 246*/    0x0135,  1,   0x0134, /* LATIN CAPITAL LETTER J WITH CIRCU.. */\r
+ /* 249*/    0x0137,  1,   0x0136, /* LATIN CAPITAL LETTER K WITH CEDIL.. */\r
+ /* 252*/    0x013a,  1,   0x0139, /* LATIN CAPITAL LETTER L WITH ACUTE */\r
+ /* 255*/    0x013c,  1,   0x013b, /* LATIN CAPITAL LETTER L WITH CEDIL.. */\r
+ /* 258*/    0x013e,  1,   0x013d, /* LATIN CAPITAL LETTER L WITH CARON */\r
+ /* 261*/    0x0140,  1,   0x013f, /* LATIN CAPITAL LETTER L WITH MIDDL.. */\r
+ /* 264*/    0x0142,  1,   0x0141, /* LATIN CAPITAL LETTER L WITH STROKE */\r
+ /* 267*/    0x0144,  1,   0x0143, /* LATIN CAPITAL LETTER N WITH ACUTE */\r
+ /* 270*/    0x0146,  1,   0x0145, /* LATIN CAPITAL LETTER N WITH CEDIL.. */\r
+ /* 273*/    0x0148,  1,   0x0147, /* LATIN CAPITAL LETTER N WITH CARON */\r
+ /* 276*/    0x014b,  1,   0x014a, /* LATIN CAPITAL LETTER ENG */\r
+ /* 279*/    0x014d,  1,   0x014c, /* LATIN CAPITAL LETTER O WITH MACRON */\r
+ /* 282*/    0x014f,  1,   0x014e, /* LATIN CAPITAL LETTER O WITH BREVE */\r
+ /* 285*/    0x0151,  1,   0x0150, /* LATIN CAPITAL LETTER O WITH DOUBL.. */\r
+ /* 288*/    0x0153,  1,   0x0152, /* LATIN CAPITAL LIGATURE OE */\r
+ /* 291*/    0x0155,  1,   0x0154, /* LATIN CAPITAL LETTER R WITH ACUTE */\r
+ /* 294*/    0x0157,  1,   0x0156, /* LATIN CAPITAL LETTER R WITH CEDIL.. */\r
+ /* 297*/    0x0159,  1,   0x0158, /* LATIN CAPITAL LETTER R WITH CARON */\r
+ /* 300*/    0x015b,  1,   0x015a, /* LATIN CAPITAL LETTER S WITH ACUTE */\r
+ /* 303*/    0x015d,  1,   0x015c, /* LATIN CAPITAL LETTER S WITH CIRCU.. */\r
+ /* 306*/    0x015f,  1,   0x015e, /* LATIN CAPITAL LETTER S WITH CEDIL.. */\r
+ /* 309*/    0x0161,  1,   0x0160, /* LATIN CAPITAL LETTER S WITH CARON */\r
+ /* 312*/    0x0163,  1,   0x0162, /* LATIN CAPITAL LETTER T WITH CEDIL.. */\r
+ /* 315*/    0x0165,  1,   0x0164, /* LATIN CAPITAL LETTER T WITH CARON */\r
+ /* 318*/    0x0167,  1,   0x0166, /* LATIN CAPITAL LETTER T WITH STROKE */\r
+ /* 321*/    0x0169,  1,   0x0168, /* LATIN CAPITAL LETTER U WITH TILDE */\r
+ /* 324*/    0x016b,  1,   0x016a, /* LATIN CAPITAL LETTER U WITH MACRON */\r
+ /* 327*/    0x016d,  1,   0x016c, /* LATIN CAPITAL LETTER U WITH BREVE */\r
+ /* 330*/    0x016f,  1,   0x016e, /* LATIN CAPITAL LETTER U WITH RING .. */\r
+ /* 333*/    0x0171,  1,   0x0170, /* LATIN CAPITAL LETTER U WITH DOUBL.. */\r
+ /* 336*/    0x0173,  1,   0x0172, /* LATIN CAPITAL LETTER U WITH OGONEK */\r
+ /* 339*/    0x0175,  1,   0x0174, /* LATIN CAPITAL LETTER W WITH CIRCU.. */\r
+ /* 342*/    0x0177,  1,   0x0176, /* LATIN CAPITAL LETTER Y WITH CIRCU.. */\r
+ /* 345*/    0x017a,  1,   0x0179, /* LATIN CAPITAL LETTER Z WITH ACUTE */\r
+ /* 348*/    0x017c,  1,   0x017b, /* LATIN CAPITAL LETTER Z WITH DOT A.. */\r
+ /* 351*/    0x017e,  1,   0x017d, /* LATIN CAPITAL LETTER Z WITH CARON */\r
+ /* 354*/    0x0180,  1,   0x0243, /* LATIN CAPITAL LETTER B WITH STROKE */\r
+ /* 357*/    0x0183,  1,   0x0182, /* LATIN CAPITAL LETTER B WITH TOPBAR */\r
+ /* 360*/    0x0185,  1,   0x0184, /* LATIN CAPITAL LETTER TONE SIX */\r
+ /* 363*/    0x0188,  1,   0x0187, /* LATIN CAPITAL LETTER C WITH HOOK */\r
+ /* 366*/    0x018c,  1,   0x018b, /* LATIN CAPITAL LETTER D WITH TOPBAR */\r
+ /* 369*/    0x0192,  1,   0x0191, /* LATIN CAPITAL LETTER F WITH HOOK */\r
+ /* 372*/    0x0195,  1,   0x01f6, /* LATIN CAPITAL LETTER HWAIR */\r
+ /* 375*/    0x0199,  1,   0x0198, /* LATIN CAPITAL LETTER K WITH HOOK */\r
+ /* 378*/    0x019a,  1,   0x023d, /* LATIN CAPITAL LETTER L WITH BAR */\r
+ /* 381*/    0x019e,  1,   0x0220, /* LATIN CAPITAL LETTER N WITH LONG .. */\r
+ /* 384*/    0x01a1,  1,   0x01a0, /* LATIN CAPITAL LETTER O WITH HORN */\r
+ /* 387*/    0x01a3,  1,   0x01a2, /* LATIN CAPITAL LETTER OI */\r
+ /* 390*/    0x01a5,  1,   0x01a4, /* LATIN CAPITAL LETTER P WITH HOOK */\r
+ /* 393*/    0x01a8,  1,   0x01a7, /* LATIN CAPITAL LETTER TONE TWO */\r
+ /* 396*/    0x01ad,  1,   0x01ac, /* LATIN CAPITAL LETTER T WITH HOOK */\r
+ /* 399*/    0x01b0,  1,   0x01af, /* LATIN CAPITAL LETTER U WITH HORN */\r
+ /* 402*/    0x01b4,  1,   0x01b3, /* LATIN CAPITAL LETTER Y WITH HOOK */\r
+ /* 405*/    0x01b6,  1,   0x01b5, /* LATIN CAPITAL LETTER Z WITH STROKE */\r
+ /* 408*/    0x01b9,  1,   0x01b8, /* LATIN CAPITAL LETTER EZH REVERSED */\r
+ /* 411*/    0x01bd,  1,   0x01bc, /* LATIN CAPITAL LETTER TONE FIVE */\r
+ /* 414*/    0x01bf,  1,   0x01f7, /* LATIN CAPITAL LETTER WYNN */\r
+ /* 417*/    0x01c6,  2,   0x01c4,   0x01c5, /* LATIN CAPITAL LETTER DZ WITH CARON */\r
+ /* 421*/    0x01c9,  2,   0x01c7,   0x01c8, /* LATIN CAPITAL LETTER LJ */\r
+ /* 425*/    0x01cc,  2,   0x01ca,   0x01cb, /* LATIN CAPITAL LETTER NJ */\r
+ /* 429*/    0x01ce,  1,   0x01cd, /* LATIN CAPITAL LETTER A WITH CARON */\r
+ /* 432*/    0x01d0,  1,   0x01cf, /* LATIN CAPITAL LETTER I WITH CARON */\r
+ /* 435*/    0x01d2,  1,   0x01d1, /* LATIN CAPITAL LETTER O WITH CARON */\r
+ /* 438*/    0x01d4,  1,   0x01d3, /* LATIN CAPITAL LETTER U WITH CARON */\r
+ /* 441*/    0x01d6,  1,   0x01d5, /* LATIN CAPITAL LETTER U WITH DIAER.. */\r
+ /* 444*/    0x01d8,  1,   0x01d7, /* LATIN CAPITAL LETTER U WITH DIAER.. */\r
+ /* 447*/    0x01da,  1,   0x01d9, /* LATIN CAPITAL LETTER U WITH DIAER.. */\r
+ /* 450*/    0x01dc,  1,   0x01db, /* LATIN CAPITAL LETTER U WITH DIAER.. */\r
+ /* 453*/    0x01dd,  1,   0x018e, /* LATIN CAPITAL LETTER REVERSED E */\r
+ /* 456*/    0x01df,  1,   0x01de, /* LATIN CAPITAL LETTER A WITH DIAER.. */\r
+ /* 459*/    0x01e1,  1,   0x01e0, /* LATIN CAPITAL LETTER A WITH DOT A.. */\r
+ /* 462*/    0x01e3,  1,   0x01e2, /* LATIN CAPITAL LETTER AE WITH MACR.. */\r
+ /* 465*/    0x01e5,  1,   0x01e4, /* LATIN CAPITAL LETTER G WITH STROKE */\r
+ /* 468*/    0x01e7,  1,   0x01e6, /* LATIN CAPITAL LETTER G WITH CARON */\r
+ /* 471*/    0x01e9,  1,   0x01e8, /* LATIN CAPITAL LETTER K WITH CARON */\r
+ /* 474*/    0x01eb,  1,   0x01ea, /* LATIN CAPITAL LETTER O WITH OGONEK */\r
+ /* 477*/    0x01ed,  1,   0x01ec, /* LATIN CAPITAL LETTER O WITH OGONE.. */\r
+ /* 480*/    0x01ef,  1,   0x01ee, /* LATIN CAPITAL LETTER EZH WITH CAR.. */\r
+ /* 483*/    0x01f3,  2,   0x01f1,   0x01f2, /* LATIN CAPITAL LETTER DZ */\r
+ /* 487*/    0x01f5,  1,   0x01f4, /* LATIN CAPITAL LETTER G WITH ACUTE */\r
+ /* 490*/    0x01f9,  1,   0x01f8, /* LATIN CAPITAL LETTER N WITH GRAVE */\r
+ /* 493*/    0x01fb,  1,   0x01fa, /* LATIN CAPITAL LETTER A WITH RING .. */\r
+ /* 496*/    0x01fd,  1,   0x01fc, /* LATIN CAPITAL LETTER AE WITH ACUTE */\r
+ /* 499*/    0x01ff,  1,   0x01fe, /* LATIN CAPITAL LETTER O WITH STROK.. */\r
+ /* 502*/    0x0201,  1,   0x0200, /* LATIN CAPITAL LETTER A WITH DOUBL.. */\r
+ /* 505*/    0x0203,  1,   0x0202, /* LATIN CAPITAL LETTER A WITH INVER.. */\r
+ /* 508*/    0x0205,  1,   0x0204, /* LATIN CAPITAL LETTER E WITH DOUBL.. */\r
+ /* 511*/    0x0207,  1,   0x0206, /* LATIN CAPITAL LETTER E WITH INVER.. */\r
+ /* 514*/    0x0209,  1,   0x0208, /* LATIN CAPITAL LETTER I WITH DOUBL.. */\r
+ /* 517*/    0x020b,  1,   0x020a, /* LATIN CAPITAL LETTER I WITH INVER.. */\r
+ /* 520*/    0x020d,  1,   0x020c, /* LATIN CAPITAL LETTER O WITH DOUBL.. */\r
+ /* 523*/    0x020f,  1,   0x020e, /* LATIN CAPITAL LETTER O WITH INVER.. */\r
+ /* 526*/    0x0211,  1,   0x0210, /* LATIN CAPITAL LETTER R WITH DOUBL.. */\r
+ /* 529*/    0x0213,  1,   0x0212, /* LATIN CAPITAL LETTER R WITH INVER.. */\r
+ /* 532*/    0x0215,  1,   0x0214, /* LATIN CAPITAL LETTER U WITH DOUBL.. */\r
+ /* 535*/    0x0217,  1,   0x0216, /* LATIN CAPITAL LETTER U WITH INVER.. */\r
+ /* 538*/    0x0219,  1,   0x0218, /* LATIN CAPITAL LETTER S WITH COMMA.. */\r
+ /* 541*/    0x021b,  1,   0x021a, /* LATIN CAPITAL LETTER T WITH COMMA.. */\r
+ /* 544*/    0x021d,  1,   0x021c, /* LATIN CAPITAL LETTER YOGH */\r
+ /* 547*/    0x021f,  1,   0x021e, /* LATIN CAPITAL LETTER H WITH CARON */\r
+ /* 550*/    0x0223,  1,   0x0222, /* LATIN CAPITAL LETTER OU */\r
+ /* 553*/    0x0225,  1,   0x0224, /* LATIN CAPITAL LETTER Z WITH HOOK */\r
+ /* 556*/    0x0227,  1,   0x0226, /* LATIN CAPITAL LETTER A WITH DOT A.. */\r
+ /* 559*/    0x0229,  1,   0x0228, /* LATIN CAPITAL LETTER E WITH CEDIL.. */\r
+ /* 562*/    0x022b,  1,   0x022a, /* LATIN CAPITAL LETTER O WITH DIAER.. */\r
+ /* 565*/    0x022d,  1,   0x022c, /* LATIN CAPITAL LETTER O WITH TILDE.. */\r
+ /* 568*/    0x022f,  1,   0x022e, /* LATIN CAPITAL LETTER O WITH DOT A.. */\r
+ /* 571*/    0x0231,  1,   0x0230, /* LATIN CAPITAL LETTER O WITH DOT A.. */\r
+ /* 574*/    0x0233,  1,   0x0232, /* LATIN CAPITAL LETTER Y WITH MACRON */\r
+ /* 577*/    0x023c,  1,   0x023b, /* LATIN CAPITAL LETTER C WITH STROKE */\r
+ /* 580*/    0x023f,  1,   0x2c7e, /* LATIN CAPITAL LETTER S WITH SWASH.. */\r
+ /* 583*/    0x0240,  1,   0x2c7f, /* LATIN CAPITAL LETTER Z WITH SWASH.. */\r
+ /* 586*/    0x0242,  1,   0x0241, /* LATIN CAPITAL LETTER GLOTTAL STOP */\r
+ /* 589*/    0x0247,  1,   0x0246, /* LATIN CAPITAL LETTER E WITH STROKE */\r
+ /* 592*/    0x0249,  1,   0x0248, /* LATIN CAPITAL LETTER J WITH STROKE */\r
+ /* 595*/    0x024b,  1,   0x024a, /* LATIN CAPITAL LETTER SMALL Q WITH.. */\r
+ /* 598*/    0x024d,  1,   0x024c, /* LATIN CAPITAL LETTER R WITH STROKE */\r
+ /* 601*/    0x024f,  1,   0x024e, /* LATIN CAPITAL LETTER Y WITH STROKE */\r
+ /* 604*/    0x0250,  1,   0x2c6f, /* LATIN CAPITAL LETTER TURNED A */\r
+ /* 607*/    0x0251,  1,   0x2c6d, /* LATIN CAPITAL LETTER ALPHA */\r
+ /* 610*/    0x0252,  1,   0x2c70, /* LATIN CAPITAL LETTER TURNED ALPHA */\r
+ /* 613*/    0x0253,  1,   0x0181, /* LATIN CAPITAL LETTER B WITH HOOK */\r
+ /* 616*/    0x0254,  1,   0x0186, /* LATIN CAPITAL LETTER OPEN O */\r
+ /* 619*/    0x0256,  1,   0x0189, /* LATIN CAPITAL LETTER AFRICAN D */\r
+ /* 622*/    0x0257,  1,   0x018a, /* LATIN CAPITAL LETTER D WITH HOOK */\r
+ /* 625*/    0x0259,  1,   0x018f, /* LATIN CAPITAL LETTER SCHWA */\r
+ /* 628*/    0x025b,  1,   0x0190, /* LATIN CAPITAL LETTER OPEN E */\r
+ /* 631*/    0x025c,  1,   0xa7ab, /* LATIN CAPITAL LETTER REVERSED OPE.. */\r
+ /* 634*/    0x0260,  1,   0x0193, /* LATIN CAPITAL LETTER G WITH HOOK */\r
+ /* 637*/    0x0261,  1,   0xa7ac, /* LATIN CAPITAL LETTER SCRIPT G */\r
+ /* 640*/    0x0263,  1,   0x0194, /* LATIN CAPITAL LETTER GAMMA */\r
+ /* 643*/    0x0265,  1,   0xa78d, /* LATIN CAPITAL LETTER TURNED H */\r
+ /* 646*/    0x0266,  1,   0xa7aa, /* LATIN CAPITAL LETTER H WITH HOOK */\r
+ /* 649*/    0x0268,  1,   0x0197, /* LATIN CAPITAL LETTER I WITH STROKE */\r
+ /* 652*/    0x0269,  1,   0x0196, /* LATIN CAPITAL LETTER IOTA */\r
+ /* 655*/    0x026a,  1,   0xa7ae, /* LATIN CAPITAL LETTER SMALL CAPITA.. */\r
+ /* 658*/    0x026b,  1,   0x2c62, /* LATIN CAPITAL LETTER L WITH MIDDL.. */\r
+ /* 661*/    0x026c,  1,   0xa7ad, /* LATIN CAPITAL LETTER L WITH BELT */\r
+ /* 664*/    0x026f,  1,   0x019c, /* LATIN CAPITAL LETTER TURNED M */\r
+ /* 667*/    0x0271,  1,   0x2c6e, /* LATIN CAPITAL LETTER M WITH HOOK */\r
+ /* 670*/    0x0272,  1,   0x019d, /* LATIN CAPITAL LETTER N WITH LEFT .. */\r
+ /* 673*/    0x0275,  1,   0x019f, /* LATIN CAPITAL LETTER O WITH MIDDL.. */\r
+ /* 676*/    0x027d,  1,   0x2c64, /* LATIN CAPITAL LETTER R WITH TAIL */\r
+ /* 679*/    0x0280,  1,   0x01a6, /* LATIN LETTER YR */\r
+ /* 682*/    0x0283,  1,   0x01a9, /* LATIN CAPITAL LETTER ESH */\r
+ /* 685*/    0x0287,  1,   0xa7b1, /* LATIN CAPITAL LETTER TURNED T */\r
+ /* 688*/    0x0288,  1,   0x01ae, /* LATIN CAPITAL LETTER T WITH RETRO.. */\r
+ /* 691*/    0x0289,  1,   0x0244, /* LATIN CAPITAL LETTER U BAR */\r
+ /* 694*/    0x028a,  1,   0x01b1, /* LATIN CAPITAL LETTER UPSILON */\r
+ /* 697*/    0x028b,  1,   0x01b2, /* LATIN CAPITAL LETTER V WITH HOOK */\r
+ /* 700*/    0x028c,  1,   0x0245, /* LATIN CAPITAL LETTER TURNED V */\r
+ /* 703*/    0x0292,  1,   0x01b7, /* LATIN CAPITAL LETTER EZH */\r
+ /* 706*/    0x029d,  1,   0xa7b2, /* LATIN CAPITAL LETTER J WITH CROSS.. */\r
+ /* 709*/    0x029e,  1,   0xa7b0, /* LATIN CAPITAL LETTER TURNED K */\r
+ /* 712*/    0x0371,  1,   0x0370, /* GREEK CAPITAL LETTER HETA */\r
+ /* 715*/    0x0373,  1,   0x0372, /* GREEK CAPITAL LETTER ARCHAIC SAMPI */\r
+ /* 718*/    0x0377,  1,   0x0376, /* GREEK CAPITAL LETTER PAMPHYLIAN D.. */\r
+ /* 721*/    0x037b,  1,   0x03fd, /* GREEK CAPITAL REVERSED LUNATE SIG.. */\r
+ /* 724*/    0x037c,  1,   0x03fe, /* GREEK CAPITAL DOTTED LUNATE SIGMA.. */\r
+ /* 727*/    0x037d,  1,   0x03ff, /* GREEK CAPITAL REVERSED DOTTED LUN.. */\r
+ /* 730*/    0x03ac,  1,   0x0386, /* GREEK CAPITAL LETTER ALPHA WITH T.. */\r
+ /* 733*/    0x03ad,  1,   0x0388, /* GREEK CAPITAL LETTER EPSILON WITH.. */\r
+ /* 736*/    0x03ae,  1,   0x0389, /* GREEK CAPITAL LETTER ETA WITH TON.. */\r
+ /* 739*/    0x03af,  1,   0x038a, /* GREEK CAPITAL LETTER IOTA WITH TO.. */\r
+ /* 742*/    0x03b1,  1,   0x0391, /* GREEK CAPITAL LETTER ALPHA */\r
+ /* 745*/    0x03b2,  2,   0x0392,   0x03d0, /* GREEK CAPITAL LETTER BETA */\r
+ /* 749*/    0x03b3,  1,   0x0393, /* GREEK CAPITAL LETTER GAMMA */\r
+ /* 752*/    0x03b4,  1,   0x0394, /* GREEK CAPITAL LETTER DELTA */\r
+ /* 755*/    0x03b5,  2,   0x0395,   0x03f5, /* GREEK CAPITAL LETTER EPSILON */\r
+ /* 759*/    0x03b6,  1,   0x0396, /* GREEK CAPITAL LETTER ZETA */\r
+ /* 762*/    0x03b7,  1,   0x0397, /* GREEK CAPITAL LETTER ETA */\r
+ /* 765*/    0x03b8,  3,   0x0398,   0x03d1,   0x03f4, /* GREEK CAPITAL LETTER THETA */\r
+ /* 770*/    0x03b9,  3,   0x0345,   0x0399,   0x1fbe, /* COMBINING GREEK YPOGEGRAMMENI */\r
+ /* 775*/    0x03ba,  2,   0x039a,   0x03f0, /* GREEK CAPITAL LETTER KAPPA */\r
+ /* 779*/    0x03bb,  1,   0x039b, /* GREEK CAPITAL LETTER LAMDA */\r
+ /* 782*/    0x03bc,  2,   0x00b5,   0x039c, /* MICRO SIGN */\r
+ /* 786*/    0x03bd,  1,   0x039d, /* GREEK CAPITAL LETTER NU */\r
+ /* 789*/    0x03be,  1,   0x039e, /* GREEK CAPITAL LETTER XI */\r
+ /* 792*/    0x03bf,  1,   0x039f, /* GREEK CAPITAL LETTER OMICRON */\r
+ /* 795*/    0x03c0,  2,   0x03a0,   0x03d6, /* GREEK CAPITAL LETTER PI */\r
+ /* 799*/    0x03c1,  2,   0x03a1,   0x03f1, /* GREEK CAPITAL LETTER RHO */\r
+ /* 803*/    0x03c3,  2,   0x03a3,   0x03c2, /* GREEK CAPITAL LETTER SIGMA */\r
+ /* 807*/    0x03c4,  1,   0x03a4, /* GREEK CAPITAL LETTER TAU */\r
+ /* 810*/    0x03c5,  1,   0x03a5, /* GREEK CAPITAL LETTER UPSILON */\r
+ /* 813*/    0x03c6,  2,   0x03a6,   0x03d5, /* GREEK CAPITAL LETTER PHI */\r
+ /* 817*/    0x03c7,  1,   0x03a7, /* GREEK CAPITAL LETTER CHI */\r
+ /* 820*/    0x03c8,  1,   0x03a8, /* GREEK CAPITAL LETTER PSI */\r
+ /* 823*/    0x03c9,  2,   0x03a9,   0x2126, /* GREEK CAPITAL LETTER OMEGA */\r
+ /* 827*/    0x03ca,  1,   0x03aa, /* GREEK CAPITAL LETTER IOTA WITH DI.. */\r
+ /* 830*/    0x03cb,  1,   0x03ab, /* GREEK CAPITAL LETTER UPSILON WITH.. */\r
+ /* 833*/    0x03cc,  1,   0x038c, /* GREEK CAPITAL LETTER OMICRON WITH.. */\r
+ /* 836*/    0x03cd,  1,   0x038e, /* GREEK CAPITAL LETTER UPSILON WITH.. */\r
+ /* 839*/    0x03ce,  1,   0x038f, /* GREEK CAPITAL LETTER OMEGA WITH T.. */\r
+ /* 842*/    0x03d7,  1,   0x03cf, /* GREEK CAPITAL KAI SYMBOL */\r
+ /* 845*/    0x03d9,  1,   0x03d8, /* GREEK LETTER ARCHAIC KOPPA */\r
+ /* 848*/    0x03db,  1,   0x03da, /* GREEK LETTER STIGMA */\r
+ /* 851*/    0x03dd,  1,   0x03dc, /* GREEK LETTER DIGAMMA */\r
+ /* 854*/    0x03df,  1,   0x03de, /* GREEK LETTER KOPPA */\r
+ /* 857*/    0x03e1,  1,   0x03e0, /* GREEK LETTER SAMPI */\r
+ /* 860*/    0x03e3,  1,   0x03e2, /* COPTIC CAPITAL LETTER SHEI */\r
+ /* 863*/    0x03e5,  1,   0x03e4, /* COPTIC CAPITAL LETTER FEI */\r
+ /* 866*/    0x03e7,  1,   0x03e6, /* COPTIC CAPITAL LETTER KHEI */\r
+ /* 869*/    0x03e9,  1,   0x03e8, /* COPTIC CAPITAL LETTER HORI */\r
+ /* 872*/    0x03eb,  1,   0x03ea, /* COPTIC CAPITAL LETTER GANGIA */\r
+ /* 875*/    0x03ed,  1,   0x03ec, /* COPTIC CAPITAL LETTER SHIMA */\r
+ /* 878*/    0x03ef,  1,   0x03ee, /* COPTIC CAPITAL LETTER DEI */\r
+ /* 881*/    0x03f2,  1,   0x03f9, /* GREEK CAPITAL LUNATE SIGMA SYMBOL */\r
+ /* 884*/    0x03f3,  1,   0x037f, /* GREEK CAPITAL LETTER YOT */\r
+ /* 887*/    0x03f8,  1,   0x03f7, /* GREEK CAPITAL LETTER SHO */\r
+ /* 890*/    0x03fb,  1,   0x03fa, /* GREEK CAPITAL LETTER SAN */\r
+ /* 893*/    0x0430,  1,   0x0410, /* CYRILLIC CAPITAL LETTER A */\r
+ /* 896*/    0x0431,  1,   0x0411, /* CYRILLIC CAPITAL LETTER BE */\r
+ /* 899*/    0x0432,  2,   0x0412,   0x1c80, /* CYRILLIC CAPITAL LETTER VE */\r
+ /* 903*/    0x0433,  1,   0x0413, /* CYRILLIC CAPITAL LETTER GHE */\r
+ /* 906*/    0x0434,  2,   0x0414,   0x1c81, /* CYRILLIC CAPITAL LETTER DE */\r
+ /* 910*/    0x0435,  1,   0x0415, /* CYRILLIC CAPITAL LETTER IE */\r
+ /* 913*/    0x0436,  1,   0x0416, /* CYRILLIC CAPITAL LETTER ZHE */\r
+ /* 916*/    0x0437,  1,   0x0417, /* CYRILLIC CAPITAL LETTER ZE */\r
+ /* 919*/    0x0438,  1,   0x0418, /* CYRILLIC CAPITAL LETTER I */\r
+ /* 922*/    0x0439,  1,   0x0419, /* CYRILLIC CAPITAL LETTER SHORT I */\r
+ /* 925*/    0x043a,  1,   0x041a, /* CYRILLIC CAPITAL LETTER KA */\r
+ /* 928*/    0x043b,  1,   0x041b, /* CYRILLIC CAPITAL LETTER EL */\r
+ /* 931*/    0x043c,  1,   0x041c, /* CYRILLIC CAPITAL LETTER EM */\r
+ /* 934*/    0x043d,  1,   0x041d, /* CYRILLIC CAPITAL LETTER EN */\r
+ /* 937*/    0x043e,  2,   0x041e,   0x1c82, /* CYRILLIC CAPITAL LETTER O */\r
+ /* 941*/    0x043f,  1,   0x041f, /* CYRILLIC CAPITAL LETTER PE */\r
+ /* 944*/    0x0440,  1,   0x0420, /* CYRILLIC CAPITAL LETTER ER */\r
+ /* 947*/    0x0441,  2,   0x0421,   0x1c83, /* CYRILLIC CAPITAL LETTER ES */\r
+ /* 951*/    0x0442,  3,   0x0422,   0x1c84,   0x1c85, /* CYRILLIC CAPITAL LETTER TE */\r
+ /* 956*/    0x0443,  1,   0x0423, /* CYRILLIC CAPITAL LETTER U */\r
+ /* 959*/    0x0444,  1,   0x0424, /* CYRILLIC CAPITAL LETTER EF */\r
+ /* 962*/    0x0445,  1,   0x0425, /* CYRILLIC CAPITAL LETTER HA */\r
+ /* 965*/    0x0446,  1,   0x0426, /* CYRILLIC CAPITAL LETTER TSE */\r
+ /* 968*/    0x0447,  1,   0x0427, /* CYRILLIC CAPITAL LETTER CHE */\r
+ /* 971*/    0x0448,  1,   0x0428, /* CYRILLIC CAPITAL LETTER SHA */\r
+ /* 974*/    0x0449,  1,   0x0429, /* CYRILLIC CAPITAL LETTER SHCHA */\r
+ /* 977*/    0x044a,  2,   0x042a,   0x1c86, /* CYRILLIC CAPITAL LETTER HARD SIGN */\r
+ /* 981*/    0x044b,  1,   0x042b, /* CYRILLIC CAPITAL LETTER YERU */\r
+ /* 984*/    0x044c,  1,   0x042c, /* CYRILLIC CAPITAL LETTER SOFT SIGN */\r
+ /* 987*/    0x044d,  1,   0x042d, /* CYRILLIC CAPITAL LETTER E */\r
+ /* 990*/    0x044e,  1,   0x042e, /* CYRILLIC CAPITAL LETTER YU */\r
+ /* 993*/    0x044f,  1,   0x042f, /* CYRILLIC CAPITAL LETTER YA */\r
+ /* 996*/    0x0450,  1,   0x0400, /* CYRILLIC CAPITAL LETTER IE WITH G.. */\r
+ /* 999*/    0x0451,  1,   0x0401, /* CYRILLIC CAPITAL LETTER IO */\r
+ /*1002*/    0x0452,  1,   0x0402, /* CYRILLIC CAPITAL LETTER DJE */\r
+ /*1005*/    0x0453,  1,   0x0403, /* CYRILLIC CAPITAL LETTER GJE */\r
+ /*1008*/    0x0454,  1,   0x0404, /* CYRILLIC CAPITAL LETTER UKRAINIAN.. */\r
+ /*1011*/    0x0455,  1,   0x0405, /* CYRILLIC CAPITAL LETTER DZE */\r
+ /*1014*/    0x0456,  1,   0x0406, /* CYRILLIC CAPITAL LETTER BYELORUSS.. */\r
+ /*1017*/    0x0457,  1,   0x0407, /* CYRILLIC CAPITAL LETTER YI */\r
+ /*1020*/    0x0458,  1,   0x0408, /* CYRILLIC CAPITAL LETTER JE */\r
+ /*1023*/    0x0459,  1,   0x0409, /* CYRILLIC CAPITAL LETTER LJE */\r
+ /*1026*/    0x045a,  1,   0x040a, /* CYRILLIC CAPITAL LETTER NJE */\r
+ /*1029*/    0x045b,  1,   0x040b, /* CYRILLIC CAPITAL LETTER TSHE */\r
+ /*1032*/    0x045c,  1,   0x040c, /* CYRILLIC CAPITAL LETTER KJE */\r
+ /*1035*/    0x045d,  1,   0x040d, /* CYRILLIC CAPITAL LETTER I WITH GR.. */\r
+ /*1038*/    0x045e,  1,   0x040e, /* CYRILLIC CAPITAL LETTER SHORT U */\r
+ /*1041*/    0x045f,  1,   0x040f, /* CYRILLIC CAPITAL LETTER DZHE */\r
+ /*1044*/    0x0461,  1,   0x0460, /* CYRILLIC CAPITAL LETTER OMEGA */\r
+ /*1047*/    0x0463,  2,   0x0462,   0x1c87, /* CYRILLIC CAPITAL LETTER YAT */\r
+ /*1051*/    0x0465,  1,   0x0464, /* CYRILLIC CAPITAL LETTER IOTIFIED E */\r
+ /*1054*/    0x0467,  1,   0x0466, /* CYRILLIC CAPITAL LETTER LITTLE YUS */\r
+ /*1057*/    0x0469,  1,   0x0468, /* CYRILLIC CAPITAL LETTER IOTIFIED .. */\r
+ /*1060*/    0x046b,  1,   0x046a, /* CYRILLIC CAPITAL LETTER BIG YUS */\r
+ /*1063*/    0x046d,  1,   0x046c, /* CYRILLIC CAPITAL LETTER IOTIFIED .. */\r
+ /*1066*/    0x046f,  1,   0x046e, /* CYRILLIC CAPITAL LETTER KSI */\r
+ /*1069*/    0x0471,  1,   0x0470, /* CYRILLIC CAPITAL LETTER PSI */\r
+ /*1072*/    0x0473,  1,   0x0472, /* CYRILLIC CAPITAL LETTER FITA */\r
+ /*1075*/    0x0475,  1,   0x0474, /* CYRILLIC CAPITAL LETTER IZHITSA */\r
+ /*1078*/    0x0477,  1,   0x0476, /* CYRILLIC CAPITAL LETTER IZHITSA W.. */\r
+ /*1081*/    0x0479,  1,   0x0478, /* CYRILLIC CAPITAL LETTER UK */\r
+ /*1084*/    0x047b,  1,   0x047a, /* CYRILLIC CAPITAL LETTER ROUND OME.. */\r
+ /*1087*/    0x047d,  1,   0x047c, /* CYRILLIC CAPITAL LETTER OMEGA WIT.. */\r
+ /*1090*/    0x047f,  1,   0x047e, /* CYRILLIC CAPITAL LETTER OT */\r
+ /*1093*/    0x0481,  1,   0x0480, /* CYRILLIC CAPITAL LETTER KOPPA */\r
+ /*1096*/    0x048b,  1,   0x048a, /* CYRILLIC CAPITAL LETTER SHORT I W.. */\r
+ /*1099*/    0x048d,  1,   0x048c, /* CYRILLIC CAPITAL LETTER SEMISOFT .. */\r
+ /*1102*/    0x048f,  1,   0x048e, /* CYRILLIC CAPITAL LETTER ER WITH T.. */\r
+ /*1105*/    0x0491,  1,   0x0490, /* CYRILLIC CAPITAL LETTER GHE WITH .. */\r
+ /*1108*/    0x0493,  1,   0x0492, /* CYRILLIC CAPITAL LETTER GHE WITH .. */\r
+ /*1111*/    0x0495,  1,   0x0494, /* CYRILLIC CAPITAL LETTER GHE WITH .. */\r
+ /*1114*/    0x0497,  1,   0x0496, /* CYRILLIC CAPITAL LETTER ZHE WITH .. */\r
+ /*1117*/    0x0499,  1,   0x0498, /* CYRILLIC CAPITAL LETTER ZE WITH D.. */\r
+ /*1120*/    0x049b,  1,   0x049a, /* CYRILLIC CAPITAL LETTER KA WITH D.. */\r
+ /*1123*/    0x049d,  1,   0x049c, /* CYRILLIC CAPITAL LETTER KA WITH V.. */\r
+ /*1126*/    0x049f,  1,   0x049e, /* CYRILLIC CAPITAL LETTER KA WITH S.. */\r
+ /*1129*/    0x04a1,  1,   0x04a0, /* CYRILLIC CAPITAL LETTER BASHKIR KA */\r
+ /*1132*/    0x04a3,  1,   0x04a2, /* CYRILLIC CAPITAL LETTER EN WITH D.. */\r
+ /*1135*/    0x04a5,  1,   0x04a4, /* CYRILLIC CAPITAL LIGATURE EN GHE */\r
+ /*1138*/    0x04a7,  1,   0x04a6, /* CYRILLIC CAPITAL LETTER PE WITH M.. */\r
+ /*1141*/    0x04a9,  1,   0x04a8, /* CYRILLIC CAPITAL LETTER ABKHASIAN.. */\r
+ /*1144*/    0x04ab,  1,   0x04aa, /* CYRILLIC CAPITAL LETTER ES WITH D.. */\r
+ /*1147*/    0x04ad,  1,   0x04ac, /* CYRILLIC CAPITAL LETTER TE WITH D.. */\r
+ /*1150*/    0x04af,  1,   0x04ae, /* CYRILLIC CAPITAL LETTER STRAIGHT U */\r
+ /*1153*/    0x04b1,  1,   0x04b0, /* CYRILLIC CAPITAL LETTER STRAIGHT .. */\r
+ /*1156*/    0x04b3,  1,   0x04b2, /* CYRILLIC CAPITAL LETTER HA WITH D.. */\r
+ /*1159*/    0x04b5,  1,   0x04b4, /* CYRILLIC CAPITAL LIGATURE TE TSE */\r
+ /*1162*/    0x04b7,  1,   0x04b6, /* CYRILLIC CAPITAL LETTER CHE WITH .. */\r
+ /*1165*/    0x04b9,  1,   0x04b8, /* CYRILLIC CAPITAL LETTER CHE WITH .. */\r
+ /*1168*/    0x04bb,  1,   0x04ba, /* CYRILLIC CAPITAL LETTER SHHA */\r
+ /*1171*/    0x04bd,  1,   0x04bc, /* CYRILLIC CAPITAL LETTER ABKHASIAN.. */\r
+ /*1174*/    0x04bf,  1,   0x04be, /* CYRILLIC CAPITAL LETTER ABKHASIAN.. */\r
+ /*1177*/    0x04c2,  1,   0x04c1, /* CYRILLIC CAPITAL LETTER ZHE WITH .. */\r
+ /*1180*/    0x04c4,  1,   0x04c3, /* CYRILLIC CAPITAL LETTER KA WITH H.. */\r
+ /*1183*/    0x04c6,  1,   0x04c5, /* CYRILLIC CAPITAL LETTER EL WITH T.. */\r
+ /*1186*/    0x04c8,  1,   0x04c7, /* CYRILLIC CAPITAL LETTER EN WITH H.. */\r
+ /*1189*/    0x04ca,  1,   0x04c9, /* CYRILLIC CAPITAL LETTER EN WITH T.. */\r
+ /*1192*/    0x04cc,  1,   0x04cb, /* CYRILLIC CAPITAL LETTER KHAKASSIA.. */\r
+ /*1195*/    0x04ce,  1,   0x04cd, /* CYRILLIC CAPITAL LETTER EM WITH T.. */\r
+ /*1198*/    0x04cf,  1,   0x04c0, /* CYRILLIC LETTER PALOCHKA */\r
+ /*1201*/    0x04d1,  1,   0x04d0, /* CYRILLIC CAPITAL LETTER A WITH BR.. */\r
+ /*1204*/    0x04d3,  1,   0x04d2, /* CYRILLIC CAPITAL LETTER A WITH DI.. */\r
+ /*1207*/    0x04d5,  1,   0x04d4, /* CYRILLIC CAPITAL LIGATURE A IE */\r
+ /*1210*/    0x04d7,  1,   0x04d6, /* CYRILLIC CAPITAL LETTER IE WITH B.. */\r
+ /*1213*/    0x04d9,  1,   0x04d8, /* CYRILLIC CAPITAL LETTER SCHWA */\r
+ /*1216*/    0x04db,  1,   0x04da, /* CYRILLIC CAPITAL LETTER SCHWA WIT.. */\r
+ /*1219*/    0x04dd,  1,   0x04dc, /* CYRILLIC CAPITAL LETTER ZHE WITH .. */\r
+ /*1222*/    0x04df,  1,   0x04de, /* CYRILLIC CAPITAL LETTER ZE WITH D.. */\r
+ /*1225*/    0x04e1,  1,   0x04e0, /* CYRILLIC CAPITAL LETTER ABKHASIAN.. */\r
+ /*1228*/    0x04e3,  1,   0x04e2, /* CYRILLIC CAPITAL LETTER I WITH MA.. */\r
+ /*1231*/    0x04e5,  1,   0x04e4, /* CYRILLIC CAPITAL LETTER I WITH DI.. */\r
+ /*1234*/    0x04e7,  1,   0x04e6, /* CYRILLIC CAPITAL LETTER O WITH DI.. */\r
+ /*1237*/    0x04e9,  1,   0x04e8, /* CYRILLIC CAPITAL LETTER BARRED O */\r
+ /*1240*/    0x04eb,  1,   0x04ea, /* CYRILLIC CAPITAL LETTER BARRED O .. */\r
+ /*1243*/    0x04ed,  1,   0x04ec, /* CYRILLIC CAPITAL LETTER E WITH DI.. */\r
+ /*1246*/    0x04ef,  1,   0x04ee, /* CYRILLIC CAPITAL LETTER U WITH MA.. */\r
+ /*1249*/    0x04f1,  1,   0x04f0, /* CYRILLIC CAPITAL LETTER U WITH DI.. */\r
+ /*1252*/    0x04f3,  1,   0x04f2, /* CYRILLIC CAPITAL LETTER U WITH DO.. */\r
+ /*1255*/    0x04f5,  1,   0x04f4, /* CYRILLIC CAPITAL LETTER CHE WITH .. */\r
+ /*1258*/    0x04f7,  1,   0x04f6, /* CYRILLIC CAPITAL LETTER GHE WITH .. */\r
+ /*1261*/    0x04f9,  1,   0x04f8, /* CYRILLIC CAPITAL LETTER YERU WITH.. */\r
+ /*1264*/    0x04fb,  1,   0x04fa, /* CYRILLIC CAPITAL LETTER GHE WITH .. */\r
+ /*1267*/    0x04fd,  1,   0x04fc, /* CYRILLIC CAPITAL LETTER HA WITH H.. */\r
+ /*1270*/    0x04ff,  1,   0x04fe, /* CYRILLIC CAPITAL LETTER HA WITH S.. */\r
+ /*1273*/    0x0501,  1,   0x0500, /* CYRILLIC CAPITAL LETTER KOMI DE */\r
+ /*1276*/    0x0503,  1,   0x0502, /* CYRILLIC CAPITAL LETTER KOMI DJE */\r
+ /*1279*/    0x0505,  1,   0x0504, /* CYRILLIC CAPITAL LETTER KOMI ZJE */\r
+ /*1282*/    0x0507,  1,   0x0506, /* CYRILLIC CAPITAL LETTER KOMI DZJE */\r
+ /*1285*/    0x0509,  1,   0x0508, /* CYRILLIC CAPITAL LETTER KOMI LJE */\r
+ /*1288*/    0x050b,  1,   0x050a, /* CYRILLIC CAPITAL LETTER KOMI NJE */\r
+ /*1291*/    0x050d,  1,   0x050c, /* CYRILLIC CAPITAL LETTER KOMI SJE */\r
+ /*1294*/    0x050f,  1,   0x050e, /* CYRILLIC CAPITAL LETTER KOMI TJE */\r
+ /*1297*/    0x0511,  1,   0x0510, /* CYRILLIC CAPITAL LETTER REVERSED .. */\r
+ /*1300*/    0x0513,  1,   0x0512, /* CYRILLIC CAPITAL LETTER EL WITH H.. */\r
+ /*1303*/    0x0515,  1,   0x0514, /* CYRILLIC CAPITAL LETTER LHA */\r
+ /*1306*/    0x0517,  1,   0x0516, /* CYRILLIC CAPITAL LETTER RHA */\r
+ /*1309*/    0x0519,  1,   0x0518, /* CYRILLIC CAPITAL LETTER YAE */\r
+ /*1312*/    0x051b,  1,   0x051a, /* CYRILLIC CAPITAL LETTER QA */\r
+ /*1315*/    0x051d,  1,   0x051c, /* CYRILLIC CAPITAL LETTER WE */\r
+ /*1318*/    0x051f,  1,   0x051e, /* CYRILLIC CAPITAL LETTER ALEUT KA */\r
+ /*1321*/    0x0521,  1,   0x0520, /* CYRILLIC CAPITAL LETTER EL WITH M.. */\r
+ /*1324*/    0x0523,  1,   0x0522, /* CYRILLIC CAPITAL LETTER EN WITH M.. */\r
+ /*1327*/    0x0525,  1,   0x0524, /* CYRILLIC CAPITAL LETTER PE WITH D.. */\r
+ /*1330*/    0x0527,  1,   0x0526, /* CYRILLIC CAPITAL LETTER SHHA WITH.. */\r
+ /*1333*/    0x0529,  1,   0x0528, /* CYRILLIC CAPITAL LETTER EN WITH L.. */\r
+ /*1336*/    0x052b,  1,   0x052a, /* CYRILLIC CAPITAL LETTER DZZHE */\r
+ /*1339*/    0x052d,  1,   0x052c, /* CYRILLIC CAPITAL LETTER DCHE */\r
+ /*1342*/    0x052f,  1,   0x052e, /* CYRILLIC CAPITAL LETTER EL WITH D.. */\r
+ /*1345*/    0x0561,  1,   0x0531, /* ARMENIAN CAPITAL LETTER AYB */\r
+ /*1348*/    0x0562,  1,   0x0532, /* ARMENIAN CAPITAL LETTER BEN */\r
+ /*1351*/    0x0563,  1,   0x0533, /* ARMENIAN CAPITAL LETTER GIM */\r
+ /*1354*/    0x0564,  1,   0x0534, /* ARMENIAN CAPITAL LETTER DA */\r
+ /*1357*/    0x0565,  1,   0x0535, /* ARMENIAN CAPITAL LETTER ECH */\r
+ /*1360*/    0x0566,  1,   0x0536, /* ARMENIAN CAPITAL LETTER ZA */\r
+ /*1363*/    0x0567,  1,   0x0537, /* ARMENIAN CAPITAL LETTER EH */\r
+ /*1366*/    0x0568,  1,   0x0538, /* ARMENIAN CAPITAL LETTER ET */\r
+ /*1369*/    0x0569,  1,   0x0539, /* ARMENIAN CAPITAL LETTER TO */\r
+ /*1372*/    0x056a,  1,   0x053a, /* ARMENIAN CAPITAL LETTER ZHE */\r
+ /*1375*/    0x056b,  1,   0x053b, /* ARMENIAN CAPITAL LETTER INI */\r
+ /*1378*/    0x056c,  1,   0x053c, /* ARMENIAN CAPITAL LETTER LIWN */\r
+ /*1381*/    0x056d,  1,   0x053d, /* ARMENIAN CAPITAL LETTER XEH */\r
+ /*1384*/    0x056e,  1,   0x053e, /* ARMENIAN CAPITAL LETTER CA */\r
+ /*1387*/    0x056f,  1,   0x053f, /* ARMENIAN CAPITAL LETTER KEN */\r
+ /*1390*/    0x0570,  1,   0x0540, /* ARMENIAN CAPITAL LETTER HO */\r
+ /*1393*/    0x0571,  1,   0x0541, /* ARMENIAN CAPITAL LETTER JA */\r
+ /*1396*/    0x0572,  1,   0x0542, /* ARMENIAN CAPITAL LETTER GHAD */\r
+ /*1399*/    0x0573,  1,   0x0543, /* ARMENIAN CAPITAL LETTER CHEH */\r
+ /*1402*/    0x0574,  1,   0x0544, /* ARMENIAN CAPITAL LETTER MEN */\r
+ /*1405*/    0x0575,  1,   0x0545, /* ARMENIAN CAPITAL LETTER YI */\r
+ /*1408*/    0x0576,  1,   0x0546, /* ARMENIAN CAPITAL LETTER NOW */\r
+ /*1411*/    0x0577,  1,   0x0547, /* ARMENIAN CAPITAL LETTER SHA */\r
+ /*1414*/    0x0578,  1,   0x0548, /* ARMENIAN CAPITAL LETTER VO */\r
+ /*1417*/    0x0579,  1,   0x0549, /* ARMENIAN CAPITAL LETTER CHA */\r
+ /*1420*/    0x057a,  1,   0x054a, /* ARMENIAN CAPITAL LETTER PEH */\r
+ /*1423*/    0x057b,  1,   0x054b, /* ARMENIAN CAPITAL LETTER JHEH */\r
+ /*1426*/    0x057c,  1,   0x054c, /* ARMENIAN CAPITAL LETTER RA */\r
+ /*1429*/    0x057d,  1,   0x054d, /* ARMENIAN CAPITAL LETTER SEH */\r
+ /*1432*/    0x057e,  1,   0x054e, /* ARMENIAN CAPITAL LETTER VEW */\r
+ /*1435*/    0x057f,  1,   0x054f, /* ARMENIAN CAPITAL LETTER TIWN */\r
+ /*1438*/    0x0580,  1,   0x0550, /* ARMENIAN CAPITAL LETTER REH */\r
+ /*1441*/    0x0581,  1,   0x0551, /* ARMENIAN CAPITAL LETTER CO */\r
+ /*1444*/    0x0582,  1,   0x0552, /* ARMENIAN CAPITAL LETTER YIWN */\r
+ /*1447*/    0x0583,  1,   0x0553, /* ARMENIAN CAPITAL LETTER PIWR */\r
+ /*1450*/    0x0584,  1,   0x0554, /* ARMENIAN CAPITAL LETTER KEH */\r
+ /*1453*/    0x0585,  1,   0x0555, /* ARMENIAN CAPITAL LETTER OH */\r
+ /*1456*/    0x0586,  1,   0x0556, /* ARMENIAN CAPITAL LETTER FEH */\r
+ /*1459*/    0x10d0,  1,   0x1c90, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1462*/    0x10d1,  1,   0x1c91, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1465*/    0x10d2,  1,   0x1c92, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1468*/    0x10d3,  1,   0x1c93, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1471*/    0x10d4,  1,   0x1c94, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1474*/    0x10d5,  1,   0x1c95, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1477*/    0x10d6,  1,   0x1c96, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1480*/    0x10d7,  1,   0x1c97, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1483*/    0x10d8,  1,   0x1c98, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1486*/    0x10d9,  1,   0x1c99, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1489*/    0x10da,  1,   0x1c9a, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1492*/    0x10db,  1,   0x1c9b, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1495*/    0x10dc,  1,   0x1c9c, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1498*/    0x10dd,  1,   0x1c9d, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1501*/    0x10de,  1,   0x1c9e, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1504*/    0x10df,  1,   0x1c9f, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1507*/    0x10e0,  1,   0x1ca0, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1510*/    0x10e1,  1,   0x1ca1, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1513*/    0x10e2,  1,   0x1ca2, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1516*/    0x10e3,  1,   0x1ca3, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1519*/    0x10e4,  1,   0x1ca4, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1522*/    0x10e5,  1,   0x1ca5, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1525*/    0x10e6,  1,   0x1ca6, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1528*/    0x10e7,  1,   0x1ca7, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1531*/    0x10e8,  1,   0x1ca8, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1534*/    0x10e9,  1,   0x1ca9, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1537*/    0x10ea,  1,   0x1caa, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1540*/    0x10eb,  1,   0x1cab, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1543*/    0x10ec,  1,   0x1cac, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1546*/    0x10ed,  1,   0x1cad, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1549*/    0x10ee,  1,   0x1cae, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1552*/    0x10ef,  1,   0x1caf, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1555*/    0x10f0,  1,   0x1cb0, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1558*/    0x10f1,  1,   0x1cb1, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1561*/    0x10f2,  1,   0x1cb2, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1564*/    0x10f3,  1,   0x1cb3, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1567*/    0x10f4,  1,   0x1cb4, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1570*/    0x10f5,  1,   0x1cb5, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1573*/    0x10f6,  1,   0x1cb6, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1576*/    0x10f7,  1,   0x1cb7, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1579*/    0x10f8,  1,   0x1cb8, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1582*/    0x10f9,  1,   0x1cb9, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1585*/    0x10fa,  1,   0x1cba, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1588*/    0x10fd,  1,   0x1cbd, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1591*/    0x10fe,  1,   0x1cbe, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1594*/    0x10ff,  1,   0x1cbf, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */\r
+ /*1597*/    0x13a0,  1,   0xab70, /* CHEROKEE SMALL LETTER A */\r
+ /*1600*/    0x13a1,  1,   0xab71, /* CHEROKEE SMALL LETTER E */\r
+ /*1603*/    0x13a2,  1,   0xab72, /* CHEROKEE SMALL LETTER I */\r
+ /*1606*/    0x13a3,  1,   0xab73, /* CHEROKEE SMALL LETTER O */\r
+ /*1609*/    0x13a4,  1,   0xab74, /* CHEROKEE SMALL LETTER U */\r
+ /*1612*/    0x13a5,  1,   0xab75, /* CHEROKEE SMALL LETTER V */\r
+ /*1615*/    0x13a6,  1,   0xab76, /* CHEROKEE SMALL LETTER GA */\r
+ /*1618*/    0x13a7,  1,   0xab77, /* CHEROKEE SMALL LETTER KA */\r
+ /*1621*/    0x13a8,  1,   0xab78, /* CHEROKEE SMALL LETTER GE */\r
+ /*1624*/    0x13a9,  1,   0xab79, /* CHEROKEE SMALL LETTER GI */\r
+ /*1627*/    0x13aa,  1,   0xab7a, /* CHEROKEE SMALL LETTER GO */\r
+ /*1630*/    0x13ab,  1,   0xab7b, /* CHEROKEE SMALL LETTER GU */\r
+ /*1633*/    0x13ac,  1,   0xab7c, /* CHEROKEE SMALL LETTER GV */\r
+ /*1636*/    0x13ad,  1,   0xab7d, /* CHEROKEE SMALL LETTER HA */\r
+ /*1639*/    0x13ae,  1,   0xab7e, /* CHEROKEE SMALL LETTER HE */\r
+ /*1642*/    0x13af,  1,   0xab7f, /* CHEROKEE SMALL LETTER HI */\r
+ /*1645*/    0x13b0,  1,   0xab80, /* CHEROKEE SMALL LETTER HO */\r
+ /*1648*/    0x13b1,  1,   0xab81, /* CHEROKEE SMALL LETTER HU */\r
+ /*1651*/    0x13b2,  1,   0xab82, /* CHEROKEE SMALL LETTER HV */\r
+ /*1654*/    0x13b3,  1,   0xab83, /* CHEROKEE SMALL LETTER LA */\r
+ /*1657*/    0x13b4,  1,   0xab84, /* CHEROKEE SMALL LETTER LE */\r
+ /*1660*/    0x13b5,  1,   0xab85, /* CHEROKEE SMALL LETTER LI */\r
+ /*1663*/    0x13b6,  1,   0xab86, /* CHEROKEE SMALL LETTER LO */\r
+ /*1666*/    0x13b7,  1,   0xab87, /* CHEROKEE SMALL LETTER LU */\r
+ /*1669*/    0x13b8,  1,   0xab88, /* CHEROKEE SMALL LETTER LV */\r
+ /*1672*/    0x13b9,  1,   0xab89, /* CHEROKEE SMALL LETTER MA */\r
+ /*1675*/    0x13ba,  1,   0xab8a, /* CHEROKEE SMALL LETTER ME */\r
+ /*1678*/    0x13bb,  1,   0xab8b, /* CHEROKEE SMALL LETTER MI */\r
+ /*1681*/    0x13bc,  1,   0xab8c, /* CHEROKEE SMALL LETTER MO */\r
+ /*1684*/    0x13bd,  1,   0xab8d, /* CHEROKEE SMALL LETTER MU */\r
+ /*1687*/    0x13be,  1,   0xab8e, /* CHEROKEE SMALL LETTER NA */\r
+ /*1690*/    0x13bf,  1,   0xab8f, /* CHEROKEE SMALL LETTER HNA */\r
+ /*1693*/    0x13c0,  1,   0xab90, /* CHEROKEE SMALL LETTER NAH */\r
+ /*1696*/    0x13c1,  1,   0xab91, /* CHEROKEE SMALL LETTER NE */\r
+ /*1699*/    0x13c2,  1,   0xab92, /* CHEROKEE SMALL LETTER NI */\r
+ /*1702*/    0x13c3,  1,   0xab93, /* CHEROKEE SMALL LETTER NO */\r
+ /*1705*/    0x13c4,  1,   0xab94, /* CHEROKEE SMALL LETTER NU */\r
+ /*1708*/    0x13c5,  1,   0xab95, /* CHEROKEE SMALL LETTER NV */\r
+ /*1711*/    0x13c6,  1,   0xab96, /* CHEROKEE SMALL LETTER QUA */\r
+ /*1714*/    0x13c7,  1,   0xab97, /* CHEROKEE SMALL LETTER QUE */\r
+ /*1717*/    0x13c8,  1,   0xab98, /* CHEROKEE SMALL LETTER QUI */\r
+ /*1720*/    0x13c9,  1,   0xab99, /* CHEROKEE SMALL LETTER QUO */\r
+ /*1723*/    0x13ca,  1,   0xab9a, /* CHEROKEE SMALL LETTER QUU */\r
+ /*1726*/    0x13cb,  1,   0xab9b, /* CHEROKEE SMALL LETTER QUV */\r
+ /*1729*/    0x13cc,  1,   0xab9c, /* CHEROKEE SMALL LETTER SA */\r
+ /*1732*/    0x13cd,  1,   0xab9d, /* CHEROKEE SMALL LETTER S */\r
+ /*1735*/    0x13ce,  1,   0xab9e, /* CHEROKEE SMALL LETTER SE */\r
+ /*1738*/    0x13cf,  1,   0xab9f, /* CHEROKEE SMALL LETTER SI */\r
+ /*1741*/    0x13d0,  1,   0xaba0, /* CHEROKEE SMALL LETTER SO */\r
+ /*1744*/    0x13d1,  1,   0xaba1, /* CHEROKEE SMALL LETTER SU */\r
+ /*1747*/    0x13d2,  1,   0xaba2, /* CHEROKEE SMALL LETTER SV */\r
+ /*1750*/    0x13d3,  1,   0xaba3, /* CHEROKEE SMALL LETTER DA */\r
+ /*1753*/    0x13d4,  1,   0xaba4, /* CHEROKEE SMALL LETTER TA */\r
+ /*1756*/    0x13d5,  1,   0xaba5, /* CHEROKEE SMALL LETTER DE */\r
+ /*1759*/    0x13d6,  1,   0xaba6, /* CHEROKEE SMALL LETTER TE */\r
+ /*1762*/    0x13d7,  1,   0xaba7, /* CHEROKEE SMALL LETTER DI */\r
+ /*1765*/    0x13d8,  1,   0xaba8, /* CHEROKEE SMALL LETTER TI */\r
+ /*1768*/    0x13d9,  1,   0xaba9, /* CHEROKEE SMALL LETTER DO */\r
+ /*1771*/    0x13da,  1,   0xabaa, /* CHEROKEE SMALL LETTER DU */\r
+ /*1774*/    0x13db,  1,   0xabab, /* CHEROKEE SMALL LETTER DV */\r
+ /*1777*/    0x13dc,  1,   0xabac, /* CHEROKEE SMALL LETTER DLA */\r
+ /*1780*/    0x13dd,  1,   0xabad, /* CHEROKEE SMALL LETTER TLA */\r
+ /*1783*/    0x13de,  1,   0xabae, /* CHEROKEE SMALL LETTER TLE */\r
+ /*1786*/    0x13df,  1,   0xabaf, /* CHEROKEE SMALL LETTER TLI */\r
+ /*1789*/    0x13e0,  1,   0xabb0, /* CHEROKEE SMALL LETTER TLO */\r
+ /*1792*/    0x13e1,  1,   0xabb1, /* CHEROKEE SMALL LETTER TLU */\r
+ /*1795*/    0x13e2,  1,   0xabb2, /* CHEROKEE SMALL LETTER TLV */\r
+ /*1798*/    0x13e3,  1,   0xabb3, /* CHEROKEE SMALL LETTER TSA */\r
+ /*1801*/    0x13e4,  1,   0xabb4, /* CHEROKEE SMALL LETTER TSE */\r
+ /*1804*/    0x13e5,  1,   0xabb5, /* CHEROKEE SMALL LETTER TSI */\r
+ /*1807*/    0x13e6,  1,   0xabb6, /* CHEROKEE SMALL LETTER TSO */\r
+ /*1810*/    0x13e7,  1,   0xabb7, /* CHEROKEE SMALL LETTER TSU */\r
+ /*1813*/    0x13e8,  1,   0xabb8, /* CHEROKEE SMALL LETTER TSV */\r
+ /*1816*/    0x13e9,  1,   0xabb9, /* CHEROKEE SMALL LETTER WA */\r
+ /*1819*/    0x13ea,  1,   0xabba, /* CHEROKEE SMALL LETTER WE */\r
+ /*1822*/    0x13eb,  1,   0xabbb, /* CHEROKEE SMALL LETTER WI */\r
+ /*1825*/    0x13ec,  1,   0xabbc, /* CHEROKEE SMALL LETTER WO */\r
+ /*1828*/    0x13ed,  1,   0xabbd, /* CHEROKEE SMALL LETTER WU */\r
+ /*1831*/    0x13ee,  1,   0xabbe, /* CHEROKEE SMALL LETTER WV */\r
+ /*1834*/    0x13ef,  1,   0xabbf, /* CHEROKEE SMALL LETTER YA */\r
+ /*1837*/    0x13f0,  1,   0x13f8, /* CHEROKEE SMALL LETTER YE */\r
+ /*1840*/    0x13f1,  1,   0x13f9, /* CHEROKEE SMALL LETTER YI */\r
+ /*1843*/    0x13f2,  1,   0x13fa, /* CHEROKEE SMALL LETTER YO */\r
+ /*1846*/    0x13f3,  1,   0x13fb, /* CHEROKEE SMALL LETTER YU */\r
+ /*1849*/    0x13f4,  1,   0x13fc, /* CHEROKEE SMALL LETTER YV */\r
+ /*1852*/    0x13f5,  1,   0x13fd, /* CHEROKEE SMALL LETTER MV */\r
+ /*1855*/    0x1d79,  1,   0xa77d, /* LATIN CAPITAL LETTER INSULAR G */\r
+ /*1858*/    0x1d7d,  1,   0x2c63, /* LATIN CAPITAL LETTER P WITH STROKE */\r
+ /*1861*/    0x1e01,  1,   0x1e00, /* LATIN CAPITAL LETTER A WITH RING .. */\r
+ /*1864*/    0x1e03,  1,   0x1e02, /* LATIN CAPITAL LETTER B WITH DOT A.. */\r
+ /*1867*/    0x1e05,  1,   0x1e04, /* LATIN CAPITAL LETTER B WITH DOT B.. */\r
+ /*1870*/    0x1e07,  1,   0x1e06, /* LATIN CAPITAL LETTER B WITH LINE .. */\r
+ /*1873*/    0x1e09,  1,   0x1e08, /* LATIN CAPITAL LETTER C WITH CEDIL.. */\r
+ /*1876*/    0x1e0b,  1,   0x1e0a, /* LATIN CAPITAL LETTER D WITH DOT A.. */\r
+ /*1879*/    0x1e0d,  1,   0x1e0c, /* LATIN CAPITAL LETTER D WITH DOT B.. */\r
+ /*1882*/    0x1e0f,  1,   0x1e0e, /* LATIN CAPITAL LETTER D WITH LINE .. */\r
+ /*1885*/    0x1e11,  1,   0x1e10, /* LATIN CAPITAL LETTER D WITH CEDIL.. */\r
+ /*1888*/    0x1e13,  1,   0x1e12, /* LATIN CAPITAL LETTER D WITH CIRCU.. */\r
+ /*1891*/    0x1e15,  1,   0x1e14, /* LATIN CAPITAL LETTER E WITH MACRO.. */\r
+ /*1894*/    0x1e17,  1,   0x1e16, /* LATIN CAPITAL LETTER E WITH MACRO.. */\r
+ /*1897*/    0x1e19,  1,   0x1e18, /* LATIN CAPITAL LETTER E WITH CIRCU.. */\r
+ /*1900*/    0x1e1b,  1,   0x1e1a, /* LATIN CAPITAL LETTER E WITH TILDE.. */\r
+ /*1903*/    0x1e1d,  1,   0x1e1c, /* LATIN CAPITAL LETTER E WITH CEDIL.. */\r
+ /*1906*/    0x1e1f,  1,   0x1e1e, /* LATIN CAPITAL LETTER F WITH DOT A.. */\r
+ /*1909*/    0x1e21,  1,   0x1e20, /* LATIN CAPITAL LETTER G WITH MACRON */\r
+ /*1912*/    0x1e23,  1,   0x1e22, /* LATIN CAPITAL LETTER H WITH DOT A.. */\r
+ /*1915*/    0x1e25,  1,   0x1e24, /* LATIN CAPITAL LETTER H WITH DOT B.. */\r
+ /*1918*/    0x1e27,  1,   0x1e26, /* LATIN CAPITAL LETTER H WITH DIAER.. */\r
+ /*1921*/    0x1e29,  1,   0x1e28, /* LATIN CAPITAL LETTER H WITH CEDIL.. */\r
+ /*1924*/    0x1e2b,  1,   0x1e2a, /* LATIN CAPITAL LETTER H WITH BREVE.. */\r
+ /*1927*/    0x1e2d,  1,   0x1e2c, /* LATIN CAPITAL LETTER I WITH TILDE.. */\r
+ /*1930*/    0x1e2f,  1,   0x1e2e, /* LATIN CAPITAL LETTER I WITH DIAER.. */\r
+ /*1933*/    0x1e31,  1,   0x1e30, /* LATIN CAPITAL LETTER K WITH ACUTE */\r
+ /*1936*/    0x1e33,  1,   0x1e32, /* LATIN CAPITAL LETTER K WITH DOT B.. */\r
+ /*1939*/    0x1e35,  1,   0x1e34, /* LATIN CAPITAL LETTER K WITH LINE .. */\r
+ /*1942*/    0x1e37,  1,   0x1e36, /* LATIN CAPITAL LETTER L WITH DOT B.. */\r
+ /*1945*/    0x1e39,  1,   0x1e38, /* LATIN CAPITAL LETTER L WITH DOT B.. */\r
+ /*1948*/    0x1e3b,  1,   0x1e3a, /* LATIN CAPITAL LETTER L WITH LINE .. */\r
+ /*1951*/    0x1e3d,  1,   0x1e3c, /* LATIN CAPITAL LETTER L WITH CIRCU.. */\r
+ /*1954*/    0x1e3f,  1,   0x1e3e, /* LATIN CAPITAL LETTER M WITH ACUTE */\r
+ /*1957*/    0x1e41,  1,   0x1e40, /* LATIN CAPITAL LETTER M WITH DOT A.. */\r
+ /*1960*/    0x1e43,  1,   0x1e42, /* LATIN CAPITAL LETTER M WITH DOT B.. */\r
+ /*1963*/    0x1e45,  1,   0x1e44, /* LATIN CAPITAL LETTER N WITH DOT A.. */\r
+ /*1966*/    0x1e47,  1,   0x1e46, /* LATIN CAPITAL LETTER N WITH DOT B.. */\r
+ /*1969*/    0x1e49,  1,   0x1e48, /* LATIN CAPITAL LETTER N WITH LINE .. */\r
+ /*1972*/    0x1e4b,  1,   0x1e4a, /* LATIN CAPITAL LETTER N WITH CIRCU.. */\r
+ /*1975*/    0x1e4d,  1,   0x1e4c, /* LATIN CAPITAL LETTER O WITH TILDE.. */\r
+ /*1978*/    0x1e4f,  1,   0x1e4e, /* LATIN CAPITAL LETTER O WITH TILDE.. */\r
+ /*1981*/    0x1e51,  1,   0x1e50, /* LATIN CAPITAL LETTER O WITH MACRO.. */\r
+ /*1984*/    0x1e53,  1,   0x1e52, /* LATIN CAPITAL LETTER O WITH MACRO.. */\r
+ /*1987*/    0x1e55,  1,   0x1e54, /* LATIN CAPITAL LETTER P WITH ACUTE */\r
+ /*1990*/    0x1e57,  1,   0x1e56, /* LATIN CAPITAL LETTER P WITH DOT A.. */\r
+ /*1993*/    0x1e59,  1,   0x1e58, /* LATIN CAPITAL LETTER R WITH DOT A.. */\r
+ /*1996*/    0x1e5b,  1,   0x1e5a, /* LATIN CAPITAL LETTER R WITH DOT B.. */\r
+ /*1999*/    0x1e5d,  1,   0x1e5c, /* LATIN CAPITAL LETTER R WITH DOT B.. */\r
+ /*2002*/    0x1e5f,  1,   0x1e5e, /* LATIN CAPITAL LETTER R WITH LINE .. */\r
+ /*2005*/    0x1e61,  2,   0x1e60,   0x1e9b, /* LATIN CAPITAL LETTER S WITH DOT A.. */\r
+ /*2009*/    0x1e63,  1,   0x1e62, /* LATIN CAPITAL LETTER S WITH DOT B.. */\r
+ /*2012*/    0x1e65,  1,   0x1e64, /* LATIN CAPITAL LETTER S WITH ACUTE.. */\r
+ /*2015*/    0x1e67,  1,   0x1e66, /* LATIN CAPITAL LETTER S WITH CARON.. */\r
+ /*2018*/    0x1e69,  1,   0x1e68, /* LATIN CAPITAL LETTER S WITH DOT B.. */\r
+ /*2021*/    0x1e6b,  1,   0x1e6a, /* LATIN CAPITAL LETTER T WITH DOT A.. */\r
+ /*2024*/    0x1e6d,  1,   0x1e6c, /* LATIN CAPITAL LETTER T WITH DOT B.. */\r
+ /*2027*/    0x1e6f,  1,   0x1e6e, /* LATIN CAPITAL LETTER T WITH LINE .. */\r
+ /*2030*/    0x1e71,  1,   0x1e70, /* LATIN CAPITAL LETTER T WITH CIRCU.. */\r
+ /*2033*/    0x1e73,  1,   0x1e72, /* LATIN CAPITAL LETTER U WITH DIAER.. */\r
+ /*2036*/    0x1e75,  1,   0x1e74, /* LATIN CAPITAL LETTER U WITH TILDE.. */\r
+ /*2039*/    0x1e77,  1,   0x1e76, /* LATIN CAPITAL LETTER U WITH CIRCU.. */\r
+ /*2042*/    0x1e79,  1,   0x1e78, /* LATIN CAPITAL LETTER U WITH TILDE.. */\r
+ /*2045*/    0x1e7b,  1,   0x1e7a, /* LATIN CAPITAL LETTER U WITH MACRO.. */\r
+ /*2048*/    0x1e7d,  1,   0x1e7c, /* LATIN CAPITAL LETTER V WITH TILDE */\r
+ /*2051*/    0x1e7f,  1,   0x1e7e, /* LATIN CAPITAL LETTER V WITH DOT B.. */\r
+ /*2054*/    0x1e81,  1,   0x1e80, /* LATIN CAPITAL LETTER W WITH GRAVE */\r
+ /*2057*/    0x1e83,  1,   0x1e82, /* LATIN CAPITAL LETTER W WITH ACUTE */\r
+ /*2060*/    0x1e85,  1,   0x1e84, /* LATIN CAPITAL LETTER W WITH DIAER.. */\r
+ /*2063*/    0x1e87,  1,   0x1e86, /* LATIN CAPITAL LETTER W WITH DOT A.. */\r
+ /*2066*/    0x1e89,  1,   0x1e88, /* LATIN CAPITAL LETTER W WITH DOT B.. */\r
+ /*2069*/    0x1e8b,  1,   0x1e8a, /* LATIN CAPITAL LETTER X WITH DOT A.. */\r
+ /*2072*/    0x1e8d,  1,   0x1e8c, /* LATIN CAPITAL LETTER X WITH DIAER.. */\r
+ /*2075*/    0x1e8f,  1,   0x1e8e, /* LATIN CAPITAL LETTER Y WITH DOT A.. */\r
+ /*2078*/    0x1e91,  1,   0x1e90, /* LATIN CAPITAL LETTER Z WITH CIRCU.. */\r
+ /*2081*/    0x1e93,  1,   0x1e92, /* LATIN CAPITAL LETTER Z WITH DOT B.. */\r
+ /*2084*/    0x1e95,  1,   0x1e94, /* LATIN CAPITAL LETTER Z WITH LINE .. */\r
+ /*2087*/    0x1ea1,  1,   0x1ea0, /* LATIN CAPITAL LETTER A WITH DOT B.. */\r
+ /*2090*/    0x1ea3,  1,   0x1ea2, /* LATIN CAPITAL LETTER A WITH HOOK .. */\r
+ /*2093*/    0x1ea5,  1,   0x1ea4, /* LATIN CAPITAL LETTER A WITH CIRCU.. */\r
+ /*2096*/    0x1ea7,  1,   0x1ea6, /* LATIN CAPITAL LETTER A WITH CIRCU.. */\r
+ /*2099*/    0x1ea9,  1,   0x1ea8, /* LATIN CAPITAL LETTER A WITH CIRCU.. */\r
+ /*2102*/    0x1eab,  1,   0x1eaa, /* LATIN CAPITAL LETTER A WITH CIRCU.. */\r
+ /*2105*/    0x1ead,  1,   0x1eac, /* LATIN CAPITAL LETTER A WITH CIRCU.. */\r
+ /*2108*/    0x1eaf,  1,   0x1eae, /* LATIN CAPITAL LETTER A WITH BREVE.. */\r
+ /*2111*/    0x1eb1,  1,   0x1eb0, /* LATIN CAPITAL LETTER A WITH BREVE.. */\r
+ /*2114*/    0x1eb3,  1,   0x1eb2, /* LATIN CAPITAL LETTER A WITH BREVE.. */\r
+ /*2117*/    0x1eb5,  1,   0x1eb4, /* LATIN CAPITAL LETTER A WITH BREVE.. */\r
+ /*2120*/    0x1eb7,  1,   0x1eb6, /* LATIN CAPITAL LETTER A WITH BREVE.. */\r
+ /*2123*/    0x1eb9,  1,   0x1eb8, /* LATIN CAPITAL LETTER E WITH DOT B.. */\r
+ /*2126*/    0x1ebb,  1,   0x1eba, /* LATIN CAPITAL LETTER E WITH HOOK .. */\r
+ /*2129*/    0x1ebd,  1,   0x1ebc, /* LATIN CAPITAL LETTER E WITH TILDE */\r
+ /*2132*/    0x1ebf,  1,   0x1ebe, /* LATIN CAPITAL LETTER E WITH CIRCU.. */\r
+ /*2135*/    0x1ec1,  1,   0x1ec0, /* LATIN CAPITAL LETTER E WITH CIRCU.. */\r
+ /*2138*/    0x1ec3,  1,   0x1ec2, /* LATIN CAPITAL LETTER E WITH CIRCU.. */\r
+ /*2141*/    0x1ec5,  1,   0x1ec4, /* LATIN CAPITAL LETTER E WITH CIRCU.. */\r
+ /*2144*/    0x1ec7,  1,   0x1ec6, /* LATIN CAPITAL LETTER E WITH CIRCU.. */\r
+ /*2147*/    0x1ec9,  1,   0x1ec8, /* LATIN CAPITAL LETTER I WITH HOOK .. */\r
+ /*2150*/    0x1ecb,  1,   0x1eca, /* LATIN CAPITAL LETTER I WITH DOT B.. */\r
+ /*2153*/    0x1ecd,  1,   0x1ecc, /* LATIN CAPITAL LETTER O WITH DOT B.. */\r
+ /*2156*/    0x1ecf,  1,   0x1ece, /* LATIN CAPITAL LETTER O WITH HOOK .. */\r
+ /*2159*/    0x1ed1,  1,   0x1ed0, /* LATIN CAPITAL LETTER O WITH CIRCU.. */\r
+ /*2162*/    0x1ed3,  1,   0x1ed2, /* LATIN CAPITAL LETTER O WITH CIRCU.. */\r
+ /*2165*/    0x1ed5,  1,   0x1ed4, /* LATIN CAPITAL LETTER O WITH CIRCU.. */\r
+ /*2168*/    0x1ed7,  1,   0x1ed6, /* LATIN CAPITAL LETTER O WITH CIRCU.. */\r
+ /*2171*/    0x1ed9,  1,   0x1ed8, /* LATIN CAPITAL LETTER O WITH CIRCU.. */\r
+ /*2174*/    0x1edb,  1,   0x1eda, /* LATIN CAPITAL LETTER O WITH HORN .. */\r
+ /*2177*/    0x1edd,  1,   0x1edc, /* LATIN CAPITAL LETTER O WITH HORN .. */\r
+ /*2180*/    0x1edf,  1,   0x1ede, /* LATIN CAPITAL LETTER O WITH HORN .. */\r
+ /*2183*/    0x1ee1,  1,   0x1ee0, /* LATIN CAPITAL LETTER O WITH HORN .. */\r
+ /*2186*/    0x1ee3,  1,   0x1ee2, /* LATIN CAPITAL LETTER O WITH HORN .. */\r
+ /*2189*/    0x1ee5,  1,   0x1ee4, /* LATIN CAPITAL LETTER U WITH DOT B.. */\r
+ /*2192*/    0x1ee7,  1,   0x1ee6, /* LATIN CAPITAL LETTER U WITH HOOK .. */\r
+ /*2195*/    0x1ee9,  1,   0x1ee8, /* LATIN CAPITAL LETTER U WITH HORN .. */\r
+ /*2198*/    0x1eeb,  1,   0x1eea, /* LATIN CAPITAL LETTER U WITH HORN .. */\r
+ /*2201*/    0x1eed,  1,   0x1eec, /* LATIN CAPITAL LETTER U WITH HORN .. */\r
+ /*2204*/    0x1eef,  1,   0x1eee, /* LATIN CAPITAL LETTER U WITH HORN .. */\r
+ /*2207*/    0x1ef1,  1,   0x1ef0, /* LATIN CAPITAL LETTER U WITH HORN .. */\r
+ /*2210*/    0x1ef3,  1,   0x1ef2, /* LATIN CAPITAL LETTER Y WITH GRAVE */\r
+ /*2213*/    0x1ef5,  1,   0x1ef4, /* LATIN CAPITAL LETTER Y WITH DOT B.. */\r
+ /*2216*/    0x1ef7,  1,   0x1ef6, /* LATIN CAPITAL LETTER Y WITH HOOK .. */\r
+ /*2219*/    0x1ef9,  1,   0x1ef8, /* LATIN CAPITAL LETTER Y WITH TILDE */\r
+ /*2222*/    0x1efb,  1,   0x1efa, /* LATIN CAPITAL LETTER MIDDLE-WELSH.. */\r
+ /*2225*/    0x1efd,  1,   0x1efc, /* LATIN CAPITAL LETTER MIDDLE-WELSH.. */\r
+ /*2228*/    0x1eff,  1,   0x1efe, /* LATIN CAPITAL LETTER Y WITH LOOP */\r
+ /*2231*/    0x1f00,  1,   0x1f08, /* GREEK CAPITAL LETTER ALPHA WITH P.. */\r
+ /*2234*/    0x1f01,  1,   0x1f09, /* GREEK CAPITAL LETTER ALPHA WITH D.. */\r
+ /*2237*/    0x1f02,  1,   0x1f0a, /* GREEK CAPITAL LETTER ALPHA WITH P.. */\r
+ /*2240*/    0x1f03,  1,   0x1f0b, /* GREEK CAPITAL LETTER ALPHA WITH D.. */\r
+ /*2243*/    0x1f04,  1,   0x1f0c, /* GREEK CAPITAL LETTER ALPHA WITH P.. */\r
+ /*2246*/    0x1f05,  1,   0x1f0d, /* GREEK CAPITAL LETTER ALPHA WITH D.. */\r
+ /*2249*/    0x1f06,  1,   0x1f0e, /* GREEK CAPITAL LETTER ALPHA WITH P.. */\r
+ /*2252*/    0x1f07,  1,   0x1f0f, /* GREEK CAPITAL LETTER ALPHA WITH D.. */\r
+ /*2255*/    0x1f10,  1,   0x1f18, /* GREEK CAPITAL LETTER EPSILON WITH.. */\r
+ /*2258*/    0x1f11,  1,   0x1f19, /* GREEK CAPITAL LETTER EPSILON WITH.. */\r
+ /*2261*/    0x1f12,  1,   0x1f1a, /* GREEK CAPITAL LETTER EPSILON WITH.. */\r
+ /*2264*/    0x1f13,  1,   0x1f1b, /* GREEK CAPITAL LETTER EPSILON WITH.. */\r
+ /*2267*/    0x1f14,  1,   0x1f1c, /* GREEK CAPITAL LETTER EPSILON WITH.. */\r
+ /*2270*/    0x1f15,  1,   0x1f1d, /* GREEK CAPITAL LETTER EPSILON WITH.. */\r
+ /*2273*/    0x1f20,  1,   0x1f28, /* GREEK CAPITAL LETTER ETA WITH PSI.. */\r
+ /*2276*/    0x1f21,  1,   0x1f29, /* GREEK CAPITAL LETTER ETA WITH DAS.. */\r
+ /*2279*/    0x1f22,  1,   0x1f2a, /* GREEK CAPITAL LETTER ETA WITH PSI.. */\r
+ /*2282*/    0x1f23,  1,   0x1f2b, /* GREEK CAPITAL LETTER ETA WITH DAS.. */\r
+ /*2285*/    0x1f24,  1,   0x1f2c, /* GREEK CAPITAL LETTER ETA WITH PSI.. */\r
+ /*2288*/    0x1f25,  1,   0x1f2d, /* GREEK CAPITAL LETTER ETA WITH DAS.. */\r
+ /*2291*/    0x1f26,  1,   0x1f2e, /* GREEK CAPITAL LETTER ETA WITH PSI.. */\r
+ /*2294*/    0x1f27,  1,   0x1f2f, /* GREEK CAPITAL LETTER ETA WITH DAS.. */\r
+ /*2297*/    0x1f30,  1,   0x1f38, /* GREEK CAPITAL LETTER IOTA WITH PS.. */\r
+ /*2300*/    0x1f31,  1,   0x1f39, /* GREEK CAPITAL LETTER IOTA WITH DA.. */\r
+ /*2303*/    0x1f32,  1,   0x1f3a, /* GREEK CAPITAL LETTER IOTA WITH PS.. */\r
+ /*2306*/    0x1f33,  1,   0x1f3b, /* GREEK CAPITAL LETTER IOTA WITH DA.. */\r
+ /*2309*/    0x1f34,  1,   0x1f3c, /* GREEK CAPITAL LETTER IOTA WITH PS.. */\r
+ /*2312*/    0x1f35,  1,   0x1f3d, /* GREEK CAPITAL LETTER IOTA WITH DA.. */\r
+ /*2315*/    0x1f36,  1,   0x1f3e, /* GREEK CAPITAL LETTER IOTA WITH PS.. */\r
+ /*2318*/    0x1f37,  1,   0x1f3f, /* GREEK CAPITAL LETTER IOTA WITH DA.. */\r
+ /*2321*/    0x1f40,  1,   0x1f48, /* GREEK CAPITAL LETTER OMICRON WITH.. */\r
+ /*2324*/    0x1f41,  1,   0x1f49, /* GREEK CAPITAL LETTER OMICRON WITH.. */\r
+ /*2327*/    0x1f42,  1,   0x1f4a, /* GREEK CAPITAL LETTER OMICRON WITH.. */\r
+ /*2330*/    0x1f43,  1,   0x1f4b, /* GREEK CAPITAL LETTER OMICRON WITH.. */\r
+ /*2333*/    0x1f44,  1,   0x1f4c, /* GREEK CAPITAL LETTER OMICRON WITH.. */\r
+ /*2336*/    0x1f45,  1,   0x1f4d, /* GREEK CAPITAL LETTER OMICRON WITH.. */\r
+ /*2339*/    0x1f51,  1,   0x1f59, /* GREEK CAPITAL LETTER UPSILON WITH.. */\r
+ /*2342*/    0x1f53,  1,   0x1f5b, /* GREEK CAPITAL LETTER UPSILON WITH.. */\r
+ /*2345*/    0x1f55,  1,   0x1f5d, /* GREEK CAPITAL LETTER UPSILON WITH.. */\r
+ /*2348*/    0x1f57,  1,   0x1f5f, /* GREEK CAPITAL LETTER UPSILON WITH.. */\r
+ /*2351*/    0x1f60,  1,   0x1f68, /* GREEK CAPITAL LETTER OMEGA WITH P.. */\r
+ /*2354*/    0x1f61,  1,   0x1f69, /* GREEK CAPITAL LETTER OMEGA WITH D.. */\r
+ /*2357*/    0x1f62,  1,   0x1f6a, /* GREEK CAPITAL LETTER OMEGA WITH P.. */\r
+ /*2360*/    0x1f63,  1,   0x1f6b, /* GREEK CAPITAL LETTER OMEGA WITH D.. */\r
+ /*2363*/    0x1f64,  1,   0x1f6c, /* GREEK CAPITAL LETTER OMEGA WITH P.. */\r
+ /*2366*/    0x1f65,  1,   0x1f6d, /* GREEK CAPITAL LETTER OMEGA WITH D.. */\r
+ /*2369*/    0x1f66,  1,   0x1f6e, /* GREEK CAPITAL LETTER OMEGA WITH P.. */\r
+ /*2372*/    0x1f67,  1,   0x1f6f, /* GREEK CAPITAL LETTER OMEGA WITH D.. */\r
+ /*2375*/    0x1f70,  1,   0x1fba, /* GREEK CAPITAL LETTER ALPHA WITH V.. */\r
+ /*2378*/    0x1f71,  1,   0x1fbb, /* GREEK CAPITAL LETTER ALPHA WITH O.. */\r
+ /*2381*/    0x1f72,  1,   0x1fc8, /* GREEK CAPITAL LETTER EPSILON WITH.. */\r
+ /*2384*/    0x1f73,  1,   0x1fc9, /* GREEK CAPITAL LETTER EPSILON WITH.. */\r
+ /*2387*/    0x1f74,  1,   0x1fca, /* GREEK CAPITAL LETTER ETA WITH VAR.. */\r
+ /*2390*/    0x1f75,  1,   0x1fcb, /* GREEK CAPITAL LETTER ETA WITH OXIA */\r
+ /*2393*/    0x1f76,  1,   0x1fda, /* GREEK CAPITAL LETTER IOTA WITH VA.. */\r
+ /*2396*/    0x1f77,  1,   0x1fdb, /* GREEK CAPITAL LETTER IOTA WITH OX.. */\r
+ /*2399*/    0x1f78,  1,   0x1ff8, /* GREEK CAPITAL LETTER OMICRON WITH.. */\r
+ /*2402*/    0x1f79,  1,   0x1ff9, /* GREEK CAPITAL LETTER OMICRON WITH.. */\r
+ /*2405*/    0x1f7a,  1,   0x1fea, /* GREEK CAPITAL LETTER UPSILON WITH.. */\r
+ /*2408*/    0x1f7b,  1,   0x1feb, /* GREEK CAPITAL LETTER UPSILON WITH.. */\r
+ /*2411*/    0x1f7c,  1,   0x1ffa, /* GREEK CAPITAL LETTER OMEGA WITH V.. */\r
+ /*2414*/    0x1f7d,  1,   0x1ffb, /* GREEK CAPITAL LETTER OMEGA WITH O.. */\r
+ /*2417*/    0x1fb0,  1,   0x1fb8, /* GREEK CAPITAL LETTER ALPHA WITH V.. */\r
+ /*2420*/    0x1fb1,  1,   0x1fb9, /* GREEK CAPITAL LETTER ALPHA WITH M.. */\r
+ /*2423*/    0x1fd0,  1,   0x1fd8, /* GREEK CAPITAL LETTER IOTA WITH VR.. */\r
+ /*2426*/    0x1fd1,  1,   0x1fd9, /* GREEK CAPITAL LETTER IOTA WITH MA.. */\r
+ /*2429*/    0x1fe0,  1,   0x1fe8, /* GREEK CAPITAL LETTER UPSILON WITH.. */\r
+ /*2432*/    0x1fe1,  1,   0x1fe9, /* GREEK CAPITAL LETTER UPSILON WITH.. */\r
+ /*2435*/    0x1fe5,  1,   0x1fec, /* GREEK CAPITAL LETTER RHO WITH DAS.. */\r
+ /*2438*/    0x214e,  1,   0x2132, /* TURNED CAPITAL F */\r
+ /*2441*/    0x2170,  1,   0x2160, /* ROMAN NUMERAL ONE */\r
+ /*2444*/    0x2171,  1,   0x2161, /* ROMAN NUMERAL TWO */\r
+ /*2447*/    0x2172,  1,   0x2162, /* ROMAN NUMERAL THREE */\r
+ /*2450*/    0x2173,  1,   0x2163, /* ROMAN NUMERAL FOUR */\r
+ /*2453*/    0x2174,  1,   0x2164, /* ROMAN NUMERAL FIVE */\r
+ /*2456*/    0x2175,  1,   0x2165, /* ROMAN NUMERAL SIX */\r
+ /*2459*/    0x2176,  1,   0x2166, /* ROMAN NUMERAL SEVEN */\r
+ /*2462*/    0x2177,  1,   0x2167, /* ROMAN NUMERAL EIGHT */\r
+ /*2465*/    0x2178,  1,   0x2168, /* ROMAN NUMERAL NINE */\r
+ /*2468*/    0x2179,  1,   0x2169, /* ROMAN NUMERAL TEN */\r
+ /*2471*/    0x217a,  1,   0x216a, /* ROMAN NUMERAL ELEVEN */\r
+ /*2474*/    0x217b,  1,   0x216b, /* ROMAN NUMERAL TWELVE */\r
+ /*2477*/    0x217c,  1,   0x216c, /* ROMAN NUMERAL FIFTY */\r
+ /*2480*/    0x217d,  1,   0x216d, /* ROMAN NUMERAL ONE HUNDRED */\r
+ /*2483*/    0x217e,  1,   0x216e, /* ROMAN NUMERAL FIVE HUNDRED */\r
+ /*2486*/    0x217f,  1,   0x216f, /* ROMAN NUMERAL ONE THOUSAND */\r
+ /*2489*/    0x2184,  1,   0x2183, /* ROMAN NUMERAL REVERSED ONE HUNDRED */\r
+ /*2492*/    0x24d0,  1,   0x24b6, /* CIRCLED LATIN CAPITAL LETTER A */\r
+ /*2495*/    0x24d1,  1,   0x24b7, /* CIRCLED LATIN CAPITAL LETTER B */\r
+ /*2498*/    0x24d2,  1,   0x24b8, /* CIRCLED LATIN CAPITAL LETTER C */\r
+ /*2501*/    0x24d3,  1,   0x24b9, /* CIRCLED LATIN CAPITAL LETTER D */\r
+ /*2504*/    0x24d4,  1,   0x24ba, /* CIRCLED LATIN CAPITAL LETTER E */\r
+ /*2507*/    0x24d5,  1,   0x24bb, /* CIRCLED LATIN CAPITAL LETTER F */\r
+ /*2510*/    0x24d6,  1,   0x24bc, /* CIRCLED LATIN CAPITAL LETTER G */\r
+ /*2513*/    0x24d7,  1,   0x24bd, /* CIRCLED LATIN CAPITAL LETTER H */\r
+ /*2516*/    0x24d8,  1,   0x24be, /* CIRCLED LATIN CAPITAL LETTER I */\r
+ /*2519*/    0x24d9,  1,   0x24bf, /* CIRCLED LATIN CAPITAL LETTER J */\r
+ /*2522*/    0x24da,  1,   0x24c0, /* CIRCLED LATIN CAPITAL LETTER K */\r
+ /*2525*/    0x24db,  1,   0x24c1, /* CIRCLED LATIN CAPITAL LETTER L */\r
+ /*2528*/    0x24dc,  1,   0x24c2, /* CIRCLED LATIN CAPITAL LETTER M */\r
+ /*2531*/    0x24dd,  1,   0x24c3, /* CIRCLED LATIN CAPITAL LETTER N */\r
+ /*2534*/    0x24de,  1,   0x24c4, /* CIRCLED LATIN CAPITAL LETTER O */\r
+ /*2537*/    0x24df,  1,   0x24c5, /* CIRCLED LATIN CAPITAL LETTER P */\r
+ /*2540*/    0x24e0,  1,   0x24c6, /* CIRCLED LATIN CAPITAL LETTER Q */\r
+ /*2543*/    0x24e1,  1,   0x24c7, /* CIRCLED LATIN CAPITAL LETTER R */\r
+ /*2546*/    0x24e2,  1,   0x24c8, /* CIRCLED LATIN CAPITAL LETTER S */\r
+ /*2549*/    0x24e3,  1,   0x24c9, /* CIRCLED LATIN CAPITAL LETTER T */\r
+ /*2552*/    0x24e4,  1,   0x24ca, /* CIRCLED LATIN CAPITAL LETTER U */\r
+ /*2555*/    0x24e5,  1,   0x24cb, /* CIRCLED LATIN CAPITAL LETTER V */\r
+ /*2558*/    0x24e6,  1,   0x24cc, /* CIRCLED LATIN CAPITAL LETTER W */\r
+ /*2561*/    0x24e7,  1,   0x24cd, /* CIRCLED LATIN CAPITAL LETTER X */\r
+ /*2564*/    0x24e8,  1,   0x24ce, /* CIRCLED LATIN CAPITAL LETTER Y */\r
+ /*2567*/    0x24e9,  1,   0x24cf, /* CIRCLED LATIN CAPITAL LETTER Z */\r
+ /*2570*/    0x2c30,  1,   0x2c00, /* GLAGOLITIC CAPITAL LETTER AZU */\r
+ /*2573*/    0x2c31,  1,   0x2c01, /* GLAGOLITIC CAPITAL LETTER BUKY */\r
+ /*2576*/    0x2c32,  1,   0x2c02, /* GLAGOLITIC CAPITAL LETTER VEDE */\r
+ /*2579*/    0x2c33,  1,   0x2c03, /* GLAGOLITIC CAPITAL LETTER GLAGOLI */\r
+ /*2582*/    0x2c34,  1,   0x2c04, /* GLAGOLITIC CAPITAL LETTER DOBRO */\r
+ /*2585*/    0x2c35,  1,   0x2c05, /* GLAGOLITIC CAPITAL LETTER YESTU */\r
+ /*2588*/    0x2c36,  1,   0x2c06, /* GLAGOLITIC CAPITAL LETTER ZHIVETE */\r
+ /*2591*/    0x2c37,  1,   0x2c07, /* GLAGOLITIC CAPITAL LETTER DZELO */\r
+ /*2594*/    0x2c38,  1,   0x2c08, /* GLAGOLITIC CAPITAL LETTER ZEMLJA */\r
+ /*2597*/    0x2c39,  1,   0x2c09, /* GLAGOLITIC CAPITAL LETTER IZHE */\r
+ /*2600*/    0x2c3a,  1,   0x2c0a, /* GLAGOLITIC CAPITAL LETTER INITIAL.. */\r
+ /*2603*/    0x2c3b,  1,   0x2c0b, /* GLAGOLITIC CAPITAL LETTER I */\r
+ /*2606*/    0x2c3c,  1,   0x2c0c, /* GLAGOLITIC CAPITAL LETTER DJERVI */\r
+ /*2609*/    0x2c3d,  1,   0x2c0d, /* GLAGOLITIC CAPITAL LETTER KAKO */\r
+ /*2612*/    0x2c3e,  1,   0x2c0e, /* GLAGOLITIC CAPITAL LETTER LJUDIJE */\r
+ /*2615*/    0x2c3f,  1,   0x2c0f, /* GLAGOLITIC CAPITAL LETTER MYSLITE */\r
+ /*2618*/    0x2c40,  1,   0x2c10, /* GLAGOLITIC CAPITAL LETTER NASHI */\r
+ /*2621*/    0x2c41,  1,   0x2c11, /* GLAGOLITIC CAPITAL LETTER ONU */\r
+ /*2624*/    0x2c42,  1,   0x2c12, /* GLAGOLITIC CAPITAL LETTER POKOJI */\r
+ /*2627*/    0x2c43,  1,   0x2c13, /* GLAGOLITIC CAPITAL LETTER RITSI */\r
+ /*2630*/    0x2c44,  1,   0x2c14, /* GLAGOLITIC CAPITAL LETTER SLOVO */\r
+ /*2633*/    0x2c45,  1,   0x2c15, /* GLAGOLITIC CAPITAL LETTER TVRIDO */\r
+ /*2636*/    0x2c46,  1,   0x2c16, /* GLAGOLITIC CAPITAL LETTER UKU */\r
+ /*2639*/    0x2c47,  1,   0x2c17, /* GLAGOLITIC CAPITAL LETTER FRITU */\r
+ /*2642*/    0x2c48,  1,   0x2c18, /* GLAGOLITIC CAPITAL LETTER HERU */\r
+ /*2645*/    0x2c49,  1,   0x2c19, /* GLAGOLITIC CAPITAL LETTER OTU */\r
+ /*2648*/    0x2c4a,  1,   0x2c1a, /* GLAGOLITIC CAPITAL LETTER PE */\r
+ /*2651*/    0x2c4b,  1,   0x2c1b, /* GLAGOLITIC CAPITAL LETTER SHTA */\r
+ /*2654*/    0x2c4c,  1,   0x2c1c, /* GLAGOLITIC CAPITAL LETTER TSI */\r
+ /*2657*/    0x2c4d,  1,   0x2c1d, /* GLAGOLITIC CAPITAL LETTER CHRIVI */\r
+ /*2660*/    0x2c4e,  1,   0x2c1e, /* GLAGOLITIC CAPITAL LETTER SHA */\r
+ /*2663*/    0x2c4f,  1,   0x2c1f, /* GLAGOLITIC CAPITAL LETTER YERU */\r
+ /*2666*/    0x2c50,  1,   0x2c20, /* GLAGOLITIC CAPITAL LETTER YERI */\r
+ /*2669*/    0x2c51,  1,   0x2c21, /* GLAGOLITIC CAPITAL LETTER YATI */\r
+ /*2672*/    0x2c52,  1,   0x2c22, /* GLAGOLITIC CAPITAL LETTER SPIDERY.. */\r
+ /*2675*/    0x2c53,  1,   0x2c23, /* GLAGOLITIC CAPITAL LETTER YU */\r
+ /*2678*/    0x2c54,  1,   0x2c24, /* GLAGOLITIC CAPITAL LETTER SMALL Y.. */\r
+ /*2681*/    0x2c55,  1,   0x2c25, /* GLAGOLITIC CAPITAL LETTER SMALL Y.. */\r
+ /*2684*/    0x2c56,  1,   0x2c26, /* GLAGOLITIC CAPITAL LETTER YO */\r
+ /*2687*/    0x2c57,  1,   0x2c27, /* GLAGOLITIC CAPITAL LETTER IOTATED.. */\r
+ /*2690*/    0x2c58,  1,   0x2c28, /* GLAGOLITIC CAPITAL LETTER BIG YUS */\r
+ /*2693*/    0x2c59,  1,   0x2c29, /* GLAGOLITIC CAPITAL LETTER IOTATED.. */\r
+ /*2696*/    0x2c5a,  1,   0x2c2a, /* GLAGOLITIC CAPITAL LETTER FITA */\r
+ /*2699*/    0x2c5b,  1,   0x2c2b, /* GLAGOLITIC CAPITAL LETTER IZHITSA */\r
+ /*2702*/    0x2c5c,  1,   0x2c2c, /* GLAGOLITIC CAPITAL LETTER SHTAPIC */\r
+ /*2705*/    0x2c5d,  1,   0x2c2d, /* GLAGOLITIC CAPITAL LETTER TROKUTA.. */\r
+ /*2708*/    0x2c5e,  1,   0x2c2e, /* GLAGOLITIC CAPITAL LETTER LATINAT.. */\r
+ /*2711*/    0x2c61,  1,   0x2c60, /* LATIN CAPITAL LETTER L WITH DOUBL.. */\r
+ /*2714*/    0x2c65,  1,   0x023a, /* LATIN CAPITAL LETTER A WITH STROKE */\r
+ /*2717*/    0x2c66,  1,   0x023e, /* LATIN CAPITAL LETTER T WITH DIAGO.. */\r
+ /*2720*/    0x2c68,  1,   0x2c67, /* LATIN CAPITAL LETTER H WITH DESCE.. */\r
+ /*2723*/    0x2c6a,  1,   0x2c69, /* LATIN CAPITAL LETTER K WITH DESCE.. */\r
+ /*2726*/    0x2c6c,  1,   0x2c6b, /* LATIN CAPITAL LETTER Z WITH DESCE.. */\r
+ /*2729*/    0x2c73,  1,   0x2c72, /* LATIN CAPITAL LETTER W WITH HOOK */\r
+ /*2732*/    0x2c76,  1,   0x2c75, /* LATIN CAPITAL LETTER HALF H */\r
+ /*2735*/    0x2c81,  1,   0x2c80, /* COPTIC CAPITAL LETTER ALFA */\r
+ /*2738*/    0x2c83,  1,   0x2c82, /* COPTIC CAPITAL LETTER VIDA */\r
+ /*2741*/    0x2c85,  1,   0x2c84, /* COPTIC CAPITAL LETTER GAMMA */\r
+ /*2744*/    0x2c87,  1,   0x2c86, /* COPTIC CAPITAL LETTER DALDA */\r
+ /*2747*/    0x2c89,  1,   0x2c88, /* COPTIC CAPITAL LETTER EIE */\r
+ /*2750*/    0x2c8b,  1,   0x2c8a, /* COPTIC CAPITAL LETTER SOU */\r
+ /*2753*/    0x2c8d,  1,   0x2c8c, /* COPTIC CAPITAL LETTER ZATA */\r
+ /*2756*/    0x2c8f,  1,   0x2c8e, /* COPTIC CAPITAL LETTER HATE */\r
+ /*2759*/    0x2c91,  1,   0x2c90, /* COPTIC CAPITAL LETTER THETHE */\r
+ /*2762*/    0x2c93,  1,   0x2c92, /* COPTIC CAPITAL LETTER IAUDA */\r
+ /*2765*/    0x2c95,  1,   0x2c94, /* COPTIC CAPITAL LETTER KAPA */\r
+ /*2768*/    0x2c97,  1,   0x2c96, /* COPTIC CAPITAL LETTER LAULA */\r
+ /*2771*/    0x2c99,  1,   0x2c98, /* COPTIC CAPITAL LETTER MI */\r
+ /*2774*/    0x2c9b,  1,   0x2c9a, /* COPTIC CAPITAL LETTER NI */\r
+ /*2777*/    0x2c9d,  1,   0x2c9c, /* COPTIC CAPITAL LETTER KSI */\r
+ /*2780*/    0x2c9f,  1,   0x2c9e, /* COPTIC CAPITAL LETTER O */\r
+ /*2783*/    0x2ca1,  1,   0x2ca0, /* COPTIC CAPITAL LETTER PI */\r
+ /*2786*/    0x2ca3,  1,   0x2ca2, /* COPTIC CAPITAL LETTER RO */\r
+ /*2789*/    0x2ca5,  1,   0x2ca4, /* COPTIC CAPITAL LETTER SIMA */\r
+ /*2792*/    0x2ca7,  1,   0x2ca6, /* COPTIC CAPITAL LETTER TAU */\r
+ /*2795*/    0x2ca9,  1,   0x2ca8, /* COPTIC CAPITAL LETTER UA */\r
+ /*2798*/    0x2cab,  1,   0x2caa, /* COPTIC CAPITAL LETTER FI */\r
+ /*2801*/    0x2cad,  1,   0x2cac, /* COPTIC CAPITAL LETTER KHI */\r
+ /*2804*/    0x2caf,  1,   0x2cae, /* COPTIC CAPITAL LETTER PSI */\r
+ /*2807*/    0x2cb1,  1,   0x2cb0, /* COPTIC CAPITAL LETTER OOU */\r
+ /*2810*/    0x2cb3,  1,   0x2cb2, /* COPTIC CAPITAL LETTER DIALECT-P A.. */\r
+ /*2813*/    0x2cb5,  1,   0x2cb4, /* COPTIC CAPITAL LETTER OLD COPTIC .. */\r
+ /*2816*/    0x2cb7,  1,   0x2cb6, /* COPTIC CAPITAL LETTER CRYPTOGRAMM.. */\r
+ /*2819*/    0x2cb9,  1,   0x2cb8, /* COPTIC CAPITAL LETTER DIALECT-P K.. */\r
+ /*2822*/    0x2cbb,  1,   0x2cba, /* COPTIC CAPITAL LETTER DIALECT-P NI */\r
+ /*2825*/    0x2cbd,  1,   0x2cbc, /* COPTIC CAPITAL LETTER CRYPTOGRAMM.. */\r
+ /*2828*/    0x2cbf,  1,   0x2cbe, /* COPTIC CAPITAL LETTER OLD COPTIC .. */\r
+ /*2831*/    0x2cc1,  1,   0x2cc0, /* COPTIC CAPITAL LETTER SAMPI */\r
+ /*2834*/    0x2cc3,  1,   0x2cc2, /* COPTIC CAPITAL LETTER CROSSED SHEI */\r
+ /*2837*/    0x2cc5,  1,   0x2cc4, /* COPTIC CAPITAL LETTER OLD COPTIC .. */\r
+ /*2840*/    0x2cc7,  1,   0x2cc6, /* COPTIC CAPITAL LETTER OLD COPTIC .. */\r
+ /*2843*/    0x2cc9,  1,   0x2cc8, /* COPTIC CAPITAL LETTER AKHMIMIC KH.. */\r
+ /*2846*/    0x2ccb,  1,   0x2cca, /* COPTIC CAPITAL LETTER DIALECT-P H.. */\r
+ /*2849*/    0x2ccd,  1,   0x2ccc, /* COPTIC CAPITAL LETTER OLD COPTIC .. */\r
+ /*2852*/    0x2ccf,  1,   0x2cce, /* COPTIC CAPITAL LETTER OLD COPTIC .. */\r
+ /*2855*/    0x2cd1,  1,   0x2cd0, /* COPTIC CAPITAL LETTER L-SHAPED HA */\r
+ /*2858*/    0x2cd3,  1,   0x2cd2, /* COPTIC CAPITAL LETTER OLD COPTIC .. */\r
+ /*2861*/    0x2cd5,  1,   0x2cd4, /* COPTIC CAPITAL LETTER OLD COPTIC .. */\r
+ /*2864*/    0x2cd7,  1,   0x2cd6, /* COPTIC CAPITAL LETTER OLD COPTIC .. */\r
+ /*2867*/    0x2cd9,  1,   0x2cd8, /* COPTIC CAPITAL LETTER OLD COPTIC .. */\r
+ /*2870*/    0x2cdb,  1,   0x2cda, /* COPTIC CAPITAL LETTER OLD COPTIC .. */\r
+ /*2873*/    0x2cdd,  1,   0x2cdc, /* COPTIC CAPITAL LETTER OLD NUBIAN .. */\r
+ /*2876*/    0x2cdf,  1,   0x2cde, /* COPTIC CAPITAL LETTER OLD NUBIAN .. */\r
+ /*2879*/    0x2ce1,  1,   0x2ce0, /* COPTIC CAPITAL LETTER OLD NUBIAN .. */\r
+ /*2882*/    0x2ce3,  1,   0x2ce2, /* COPTIC CAPITAL LETTER OLD NUBIAN .. */\r
+ /*2885*/    0x2cec,  1,   0x2ceb, /* COPTIC CAPITAL LETTER CRYPTOGRAMM.. */\r
+ /*2888*/    0x2cee,  1,   0x2ced, /* COPTIC CAPITAL LETTER CRYPTOGRAMM.. */\r
+ /*2891*/    0x2cf3,  1,   0x2cf2, /* COPTIC CAPITAL LETTER BOHAIRIC KH.. */\r
+ /*2894*/    0x2d00,  1,   0x10a0, /* GEORGIAN CAPITAL LETTER AN */\r
+ /*2897*/    0x2d01,  1,   0x10a1, /* GEORGIAN CAPITAL LETTER BAN */\r
+ /*2900*/    0x2d02,  1,   0x10a2, /* GEORGIAN CAPITAL LETTER GAN */\r
+ /*2903*/    0x2d03,  1,   0x10a3, /* GEORGIAN CAPITAL LETTER DON */\r
+ /*2906*/    0x2d04,  1,   0x10a4, /* GEORGIAN CAPITAL LETTER EN */\r
+ /*2909*/    0x2d05,  1,   0x10a5, /* GEORGIAN CAPITAL LETTER VIN */\r
+ /*2912*/    0x2d06,  1,   0x10a6, /* GEORGIAN CAPITAL LETTER ZEN */\r
+ /*2915*/    0x2d07,  1,   0x10a7, /* GEORGIAN CAPITAL LETTER TAN */\r
+ /*2918*/    0x2d08,  1,   0x10a8, /* GEORGIAN CAPITAL LETTER IN */\r
+ /*2921*/    0x2d09,  1,   0x10a9, /* GEORGIAN CAPITAL LETTER KAN */\r
+ /*2924*/    0x2d0a,  1,   0x10aa, /* GEORGIAN CAPITAL LETTER LAS */\r
+ /*2927*/    0x2d0b,  1,   0x10ab, /* GEORGIAN CAPITAL LETTER MAN */\r
+ /*2930*/    0x2d0c,  1,   0x10ac, /* GEORGIAN CAPITAL LETTER NAR */\r
+ /*2933*/    0x2d0d,  1,   0x10ad, /* GEORGIAN CAPITAL LETTER ON */\r
+ /*2936*/    0x2d0e,  1,   0x10ae, /* GEORGIAN CAPITAL LETTER PAR */\r
+ /*2939*/    0x2d0f,  1,   0x10af, /* GEORGIAN CAPITAL LETTER ZHAR */\r
+ /*2942*/    0x2d10,  1,   0x10b0, /* GEORGIAN CAPITAL LETTER RAE */\r
+ /*2945*/    0x2d11,  1,   0x10b1, /* GEORGIAN CAPITAL LETTER SAN */\r
+ /*2948*/    0x2d12,  1,   0x10b2, /* GEORGIAN CAPITAL LETTER TAR */\r
+ /*2951*/    0x2d13,  1,   0x10b3, /* GEORGIAN CAPITAL LETTER UN */\r
+ /*2954*/    0x2d14,  1,   0x10b4, /* GEORGIAN CAPITAL LETTER PHAR */\r
+ /*2957*/    0x2d15,  1,   0x10b5, /* GEORGIAN CAPITAL LETTER KHAR */\r
+ /*2960*/    0x2d16,  1,   0x10b6, /* GEORGIAN CAPITAL LETTER GHAN */\r
+ /*2963*/    0x2d17,  1,   0x10b7, /* GEORGIAN CAPITAL LETTER QAR */\r
+ /*2966*/    0x2d18,  1,   0x10b8, /* GEORGIAN CAPITAL LETTER SHIN */\r
+ /*2969*/    0x2d19,  1,   0x10b9, /* GEORGIAN CAPITAL LETTER CHIN */\r
+ /*2972*/    0x2d1a,  1,   0x10ba, /* GEORGIAN CAPITAL LETTER CAN */\r
+ /*2975*/    0x2d1b,  1,   0x10bb, /* GEORGIAN CAPITAL LETTER JIL */\r
+ /*2978*/    0x2d1c,  1,   0x10bc, /* GEORGIAN CAPITAL LETTER CIL */\r
+ /*2981*/    0x2d1d,  1,   0x10bd, /* GEORGIAN CAPITAL LETTER CHAR */\r
+ /*2984*/    0x2d1e,  1,   0x10be, /* GEORGIAN CAPITAL LETTER XAN */\r
+ /*2987*/    0x2d1f,  1,   0x10bf, /* GEORGIAN CAPITAL LETTER JHAN */\r
+ /*2990*/    0x2d20,  1,   0x10c0, /* GEORGIAN CAPITAL LETTER HAE */\r
+ /*2993*/    0x2d21,  1,   0x10c1, /* GEORGIAN CAPITAL LETTER HE */\r
+ /*2996*/    0x2d22,  1,   0x10c2, /* GEORGIAN CAPITAL LETTER HIE */\r
+ /*2999*/    0x2d23,  1,   0x10c3, /* GEORGIAN CAPITAL LETTER WE */\r
+ /*3002*/    0x2d24,  1,   0x10c4, /* GEORGIAN CAPITAL LETTER HAR */\r
+ /*3005*/    0x2d25,  1,   0x10c5, /* GEORGIAN CAPITAL LETTER HOE */\r
+ /*3008*/    0x2d27,  1,   0x10c7, /* GEORGIAN CAPITAL LETTER YN */\r
+ /*3011*/    0x2d2d,  1,   0x10cd, /* GEORGIAN CAPITAL LETTER AEN */\r
+ /*3014*/    0xa641,  1,   0xa640, /* CYRILLIC CAPITAL LETTER ZEMLYA */\r
+ /*3017*/    0xa643,  1,   0xa642, /* CYRILLIC CAPITAL LETTER DZELO */\r
+ /*3020*/    0xa645,  1,   0xa644, /* CYRILLIC CAPITAL LETTER REVERSED .. */\r
+ /*3023*/    0xa647,  1,   0xa646, /* CYRILLIC CAPITAL LETTER IOTA */\r
+ /*3026*/    0xa649,  1,   0xa648, /* CYRILLIC CAPITAL LETTER DJERV */\r
+ /*3029*/    0xa64b,  2,   0x1c88,   0xa64a, /* CYRILLIC SMALL LETTER UNBLENDED UK */\r
+ /*3033*/    0xa64d,  1,   0xa64c, /* CYRILLIC CAPITAL LETTER BROAD OME.. */\r
+ /*3036*/    0xa64f,  1,   0xa64e, /* CYRILLIC CAPITAL LETTER NEUTRAL Y.. */\r
+ /*3039*/    0xa651,  1,   0xa650, /* CYRILLIC CAPITAL LETTER YERU WITH.. */\r
+ /*3042*/    0xa653,  1,   0xa652, /* CYRILLIC CAPITAL LETTER IOTIFIED .. */\r
+ /*3045*/    0xa655,  1,   0xa654, /* CYRILLIC CAPITAL LETTER REVERSED .. */\r
+ /*3048*/    0xa657,  1,   0xa656, /* CYRILLIC CAPITAL LETTER IOTIFIED A */\r
+ /*3051*/    0xa659,  1,   0xa658, /* CYRILLIC CAPITAL LETTER CLOSED LI.. */\r
+ /*3054*/    0xa65b,  1,   0xa65a, /* CYRILLIC CAPITAL LETTER BLENDED Y.. */\r
+ /*3057*/    0xa65d,  1,   0xa65c, /* CYRILLIC CAPITAL LETTER IOTIFIED .. */\r
+ /*3060*/    0xa65f,  1,   0xa65e, /* CYRILLIC CAPITAL LETTER YN */\r
+ /*3063*/    0xa661,  1,   0xa660, /* CYRILLIC CAPITAL LETTER REVERSED .. */\r
+ /*3066*/    0xa663,  1,   0xa662, /* CYRILLIC CAPITAL LETTER SOFT DE */\r
+ /*3069*/    0xa665,  1,   0xa664, /* CYRILLIC CAPITAL LETTER SOFT EL */\r
+ /*3072*/    0xa667,  1,   0xa666, /* CYRILLIC CAPITAL LETTER SOFT EM */\r
+ /*3075*/    0xa669,  1,   0xa668, /* CYRILLIC CAPITAL LETTER MONOCULAR.. */\r
+ /*3078*/    0xa66b,  1,   0xa66a, /* CYRILLIC CAPITAL LETTER BINOCULAR.. */\r
+ /*3081*/    0xa66d,  1,   0xa66c, /* CYRILLIC CAPITAL LETTER DOUBLE MO.. */\r
+ /*3084*/    0xa681,  1,   0xa680, /* CYRILLIC CAPITAL LETTER DWE */\r
+ /*3087*/    0xa683,  1,   0xa682, /* CYRILLIC CAPITAL LETTER DZWE */\r
+ /*3090*/    0xa685,  1,   0xa684, /* CYRILLIC CAPITAL LETTER ZHWE */\r
+ /*3093*/    0xa687,  1,   0xa686, /* CYRILLIC CAPITAL LETTER CCHE */\r
+ /*3096*/    0xa689,  1,   0xa688, /* CYRILLIC CAPITAL LETTER DZZE */\r
+ /*3099*/    0xa68b,  1,   0xa68a, /* CYRILLIC CAPITAL LETTER TE WITH M.. */\r
+ /*3102*/    0xa68d,  1,   0xa68c, /* CYRILLIC CAPITAL LETTER TWE */\r
+ /*3105*/    0xa68f,  1,   0xa68e, /* CYRILLIC CAPITAL LETTER TSWE */\r
+ /*3108*/    0xa691,  1,   0xa690, /* CYRILLIC CAPITAL LETTER TSSE */\r
+ /*3111*/    0xa693,  1,   0xa692, /* CYRILLIC CAPITAL LETTER TCHE */\r
+ /*3114*/    0xa695,  1,   0xa694, /* CYRILLIC CAPITAL LETTER HWE */\r
+ /*3117*/    0xa697,  1,   0xa696, /* CYRILLIC CAPITAL LETTER SHWE */\r
+ /*3120*/    0xa699,  1,   0xa698, /* CYRILLIC CAPITAL LETTER DOUBLE O */\r
+ /*3123*/    0xa69b,  1,   0xa69a, /* CYRILLIC CAPITAL LETTER CROSSED O */\r
+ /*3126*/    0xa723,  1,   0xa722, /* LATIN CAPITAL LETTER EGYPTOLOGICA.. */\r
+ /*3129*/    0xa725,  1,   0xa724, /* LATIN CAPITAL LETTER EGYPTOLOGICA.. */\r
+ /*3132*/    0xa727,  1,   0xa726, /* LATIN CAPITAL LETTER HENG */\r
+ /*3135*/    0xa729,  1,   0xa728, /* LATIN CAPITAL LETTER TZ */\r
+ /*3138*/    0xa72b,  1,   0xa72a, /* LATIN CAPITAL LETTER TRESILLO */\r
+ /*3141*/    0xa72d,  1,   0xa72c, /* LATIN CAPITAL LETTER CUATRILLO */\r
+ /*3144*/    0xa72f,  1,   0xa72e, /* LATIN CAPITAL LETTER CUATRILLO WI.. */\r
+ /*3147*/    0xa733,  1,   0xa732, /* LATIN CAPITAL LETTER AA */\r
+ /*3150*/    0xa735,  1,   0xa734, /* LATIN CAPITAL LETTER AO */\r
+ /*3153*/    0xa737,  1,   0xa736, /* LATIN CAPITAL LETTER AU */\r
+ /*3156*/    0xa739,  1,   0xa738, /* LATIN CAPITAL LETTER AV */\r
+ /*3159*/    0xa73b,  1,   0xa73a, /* LATIN CAPITAL LETTER AV WITH HORI.. */\r
+ /*3162*/    0xa73d,  1,   0xa73c, /* LATIN CAPITAL LETTER AY */\r
+ /*3165*/    0xa73f,  1,   0xa73e, /* LATIN CAPITAL LETTER REVERSED C W.. */\r
+ /*3168*/    0xa741,  1,   0xa740, /* LATIN CAPITAL LETTER K WITH STROKE */\r
+ /*3171*/    0xa743,  1,   0xa742, /* LATIN CAPITAL LETTER K WITH DIAGO.. */\r
+ /*3174*/    0xa745,  1,   0xa744, /* LATIN CAPITAL LETTER K WITH STROK.. */\r
+ /*3177*/    0xa747,  1,   0xa746, /* LATIN CAPITAL LETTER BROKEN L */\r
+ /*3180*/    0xa749,  1,   0xa748, /* LATIN CAPITAL LETTER L WITH HIGH .. */\r
+ /*3183*/    0xa74b,  1,   0xa74a, /* LATIN CAPITAL LETTER O WITH LONG .. */\r
+ /*3186*/    0xa74d,  1,   0xa74c, /* LATIN CAPITAL LETTER O WITH LOOP */\r
+ /*3189*/    0xa74f,  1,   0xa74e, /* LATIN CAPITAL LETTER OO */\r
+ /*3192*/    0xa751,  1,   0xa750, /* LATIN CAPITAL LETTER P WITH STROK.. */\r
+ /*3195*/    0xa753,  1,   0xa752, /* LATIN CAPITAL LETTER P WITH FLOUR.. */\r
+ /*3198*/    0xa755,  1,   0xa754, /* LATIN CAPITAL LETTER P WITH SQUIR.. */\r
+ /*3201*/    0xa757,  1,   0xa756, /* LATIN CAPITAL LETTER Q WITH STROK.. */\r
+ /*3204*/    0xa759,  1,   0xa758, /* LATIN CAPITAL LETTER Q WITH DIAGO.. */\r
+ /*3207*/    0xa75b,  1,   0xa75a, /* LATIN CAPITAL LETTER R ROTUNDA */\r
+ /*3210*/    0xa75d,  1,   0xa75c, /* LATIN CAPITAL LETTER RUM ROTUNDA */\r
+ /*3213*/    0xa75f,  1,   0xa75e, /* LATIN CAPITAL LETTER V WITH DIAGO.. */\r
+ /*3216*/    0xa761,  1,   0xa760, /* LATIN CAPITAL LETTER VY */\r
+ /*3219*/    0xa763,  1,   0xa762, /* LATIN CAPITAL LETTER VISIGOTHIC Z */\r
+ /*3222*/    0xa765,  1,   0xa764, /* LATIN CAPITAL LETTER THORN WITH S.. */\r
+ /*3225*/    0xa767,  1,   0xa766, /* LATIN CAPITAL LETTER THORN WITH S.. */\r
+ /*3228*/    0xa769,  1,   0xa768, /* LATIN CAPITAL LETTER VEND */\r
+ /*3231*/    0xa76b,  1,   0xa76a, /* LATIN CAPITAL LETTER ET */\r
+ /*3234*/    0xa76d,  1,   0xa76c, /* LATIN CAPITAL LETTER IS */\r
+ /*3237*/    0xa76f,  1,   0xa76e, /* LATIN CAPITAL LETTER CON */\r
+ /*3240*/    0xa77a,  1,   0xa779, /* LATIN CAPITAL LETTER INSULAR D */\r
+ /*3243*/    0xa77c,  1,   0xa77b, /* LATIN CAPITAL LETTER INSULAR F */\r
+ /*3246*/    0xa77f,  1,   0xa77e, /* LATIN CAPITAL LETTER TURNED INSUL.. */\r
+ /*3249*/    0xa781,  1,   0xa780, /* LATIN CAPITAL LETTER TURNED L */\r
+ /*3252*/    0xa783,  1,   0xa782, /* LATIN CAPITAL LETTER INSULAR R */\r
+ /*3255*/    0xa785,  1,   0xa784, /* LATIN CAPITAL LETTER INSULAR S */\r
+ /*3258*/    0xa787,  1,   0xa786, /* LATIN CAPITAL LETTER INSULAR T */\r
+ /*3261*/    0xa78c,  1,   0xa78b, /* LATIN CAPITAL LETTER SALTILLO */\r
+ /*3264*/    0xa791,  1,   0xa790, /* LATIN CAPITAL LETTER N WITH DESCE.. */\r
+ /*3267*/    0xa793,  1,   0xa792, /* LATIN CAPITAL LETTER C WITH BAR */\r
+ /*3270*/    0xa797,  1,   0xa796, /* LATIN CAPITAL LETTER B WITH FLOUR.. */\r
+ /*3273*/    0xa799,  1,   0xa798, /* LATIN CAPITAL LETTER F WITH STROKE */\r
+ /*3276*/    0xa79b,  1,   0xa79a, /* LATIN CAPITAL LETTER VOLAPUK AE */\r
+ /*3279*/    0xa79d,  1,   0xa79c, /* LATIN CAPITAL LETTER VOLAPUK OE */\r
+ /*3282*/    0xa79f,  1,   0xa79e, /* LATIN CAPITAL LETTER VOLAPUK UE */\r
+ /*3285*/    0xa7a1,  1,   0xa7a0, /* LATIN CAPITAL LETTER G WITH OBLIQ.. */\r
+ /*3288*/    0xa7a3,  1,   0xa7a2, /* LATIN CAPITAL LETTER K WITH OBLIQ.. */\r
+ /*3291*/    0xa7a5,  1,   0xa7a4, /* LATIN CAPITAL LETTER N WITH OBLIQ.. */\r
+ /*3294*/    0xa7a7,  1,   0xa7a6, /* LATIN CAPITAL LETTER R WITH OBLIQ.. */\r
+ /*3297*/    0xa7a9,  1,   0xa7a8, /* LATIN CAPITAL LETTER S WITH OBLIQ.. */\r
+ /*3300*/    0xa7b5,  1,   0xa7b4, /* LATIN CAPITAL LETTER BETA */\r
+ /*3303*/    0xa7b7,  1,   0xa7b6, /* LATIN CAPITAL LETTER OMEGA */\r
+ /*3306*/    0xa7b9,  1,   0xa7b8, /* LATIN CAPITAL LETTER U WITH STROKE */\r
+ /*3309*/    0xab53,  1,   0xa7b3, /* LATIN CAPITAL LETTER CHI */\r
+ /*3312*/    0xff41,  1,   0xff21, /* FULLWIDTH LATIN CAPITAL LETTER A */\r
+ /*3315*/    0xff42,  1,   0xff22, /* FULLWIDTH LATIN CAPITAL LETTER B */\r
+ /*3318*/    0xff43,  1,   0xff23, /* FULLWIDTH LATIN CAPITAL LETTER C */\r
+ /*3321*/    0xff44,  1,   0xff24, /* FULLWIDTH LATIN CAPITAL LETTER D */\r
+ /*3324*/    0xff45,  1,   0xff25, /* FULLWIDTH LATIN CAPITAL LETTER E */\r
+ /*3327*/    0xff46,  1,   0xff26, /* FULLWIDTH LATIN CAPITAL LETTER F */\r
+ /*3330*/    0xff47,  1,   0xff27, /* FULLWIDTH LATIN CAPITAL LETTER G */\r
+ /*3333*/    0xff48,  1,   0xff28, /* FULLWIDTH LATIN CAPITAL LETTER H */\r
+ /*3336*/    0xff49,  1,   0xff29, /* FULLWIDTH LATIN CAPITAL LETTER I */\r
+ /*3339*/    0xff4a,  1,   0xff2a, /* FULLWIDTH LATIN CAPITAL LETTER J */\r
+ /*3342*/    0xff4b,  1,   0xff2b, /* FULLWIDTH LATIN CAPITAL LETTER K */\r
+ /*3345*/    0xff4c,  1,   0xff2c, /* FULLWIDTH LATIN CAPITAL LETTER L */\r
+ /*3348*/    0xff4d,  1,   0xff2d, /* FULLWIDTH LATIN CAPITAL LETTER M */\r
+ /*3351*/    0xff4e,  1,   0xff2e, /* FULLWIDTH LATIN CAPITAL LETTER N */\r
+ /*3354*/    0xff4f,  1,   0xff2f, /* FULLWIDTH LATIN CAPITAL LETTER O */\r
+ /*3357*/    0xff50,  1,   0xff30, /* FULLWIDTH LATIN CAPITAL LETTER P */\r
+ /*3360*/    0xff51,  1,   0xff31, /* FULLWIDTH LATIN CAPITAL LETTER Q */\r
+ /*3363*/    0xff52,  1,   0xff32, /* FULLWIDTH LATIN CAPITAL LETTER R */\r
+ /*3366*/    0xff53,  1,   0xff33, /* FULLWIDTH LATIN CAPITAL LETTER S */\r
+ /*3369*/    0xff54,  1,   0xff34, /* FULLWIDTH LATIN CAPITAL LETTER T */\r
+ /*3372*/    0xff55,  1,   0xff35, /* FULLWIDTH LATIN CAPITAL LETTER U */\r
+ /*3375*/    0xff56,  1,   0xff36, /* FULLWIDTH LATIN CAPITAL LETTER V */\r
+ /*3378*/    0xff57,  1,   0xff37, /* FULLWIDTH LATIN CAPITAL LETTER W */\r
+ /*3381*/    0xff58,  1,   0xff38, /* FULLWIDTH LATIN CAPITAL LETTER X */\r
+ /*3384*/    0xff59,  1,   0xff39, /* FULLWIDTH LATIN CAPITAL LETTER Y */\r
+ /*3387*/    0xff5a,  1,   0xff3a, /* FULLWIDTH LATIN CAPITAL LETTER Z */\r
+ /*3390*/  0x010428,  1, 0x010400, /* DESERET CAPITAL LETTER LONG I */\r
+ /*3393*/  0x010429,  1, 0x010401, /* DESERET CAPITAL LETTER LONG E */\r
+ /*3396*/  0x01042a,  1, 0x010402, /* DESERET CAPITAL LETTER LONG A */\r
+ /*3399*/  0x01042b,  1, 0x010403, /* DESERET CAPITAL LETTER LONG AH */\r
+ /*3402*/  0x01042c,  1, 0x010404, /* DESERET CAPITAL LETTER LONG O */\r
+ /*3405*/  0x01042d,  1, 0x010405, /* DESERET CAPITAL LETTER LONG OO */\r
+ /*3408*/  0x01042e,  1, 0x010406, /* DESERET CAPITAL LETTER SHORT I */\r
+ /*3411*/  0x01042f,  1, 0x010407, /* DESERET CAPITAL LETTER SHORT E */\r
+ /*3414*/  0x010430,  1, 0x010408, /* DESERET CAPITAL LETTER SHORT A */\r
+ /*3417*/  0x010431,  1, 0x010409, /* DESERET CAPITAL LETTER SHORT AH */\r
+ /*3420*/  0x010432,  1, 0x01040a, /* DESERET CAPITAL LETTER SHORT O */\r
+ /*3423*/  0x010433,  1, 0x01040b, /* DESERET CAPITAL LETTER SHORT OO */\r
+ /*3426*/  0x010434,  1, 0x01040c, /* DESERET CAPITAL LETTER AY */\r
+ /*3429*/  0x010435,  1, 0x01040d, /* DESERET CAPITAL LETTER OW */\r
+ /*3432*/  0x010436,  1, 0x01040e, /* DESERET CAPITAL LETTER WU */\r
+ /*3435*/  0x010437,  1, 0x01040f, /* DESERET CAPITAL LETTER YEE */\r
+ /*3438*/  0x010438,  1, 0x010410, /* DESERET CAPITAL LETTER H */\r
+ /*3441*/  0x010439,  1, 0x010411, /* DESERET CAPITAL LETTER PEE */\r
+ /*3444*/  0x01043a,  1, 0x010412, /* DESERET CAPITAL LETTER BEE */\r
+ /*3447*/  0x01043b,  1, 0x010413, /* DESERET CAPITAL LETTER TEE */\r
+ /*3450*/  0x01043c,  1, 0x010414, /* DESERET CAPITAL LETTER DEE */\r
+ /*3453*/  0x01043d,  1, 0x010415, /* DESERET CAPITAL LETTER CHEE */\r
+ /*3456*/  0x01043e,  1, 0x010416, /* DESERET CAPITAL LETTER JEE */\r
+ /*3459*/  0x01043f,  1, 0x010417, /* DESERET CAPITAL LETTER KAY */\r
+ /*3462*/  0x010440,  1, 0x010418, /* DESERET CAPITAL LETTER GAY */\r
+ /*3465*/  0x010441,  1, 0x010419, /* DESERET CAPITAL LETTER EF */\r
+ /*3468*/  0x010442,  1, 0x01041a, /* DESERET CAPITAL LETTER VEE */\r
+ /*3471*/  0x010443,  1, 0x01041b, /* DESERET CAPITAL LETTER ETH */\r
+ /*3474*/  0x010444,  1, 0x01041c, /* DESERET CAPITAL LETTER THEE */\r
+ /*3477*/  0x010445,  1, 0x01041d, /* DESERET CAPITAL LETTER ES */\r
+ /*3480*/  0x010446,  1, 0x01041e, /* DESERET CAPITAL LETTER ZEE */\r
+ /*3483*/  0x010447,  1, 0x01041f, /* DESERET CAPITAL LETTER ESH */\r
+ /*3486*/  0x010448,  1, 0x010420, /* DESERET CAPITAL LETTER ZHEE */\r
+ /*3489*/  0x010449,  1, 0x010421, /* DESERET CAPITAL LETTER ER */\r
+ /*3492*/  0x01044a,  1, 0x010422, /* DESERET CAPITAL LETTER EL */\r
+ /*3495*/  0x01044b,  1, 0x010423, /* DESERET CAPITAL LETTER EM */\r
+ /*3498*/  0x01044c,  1, 0x010424, /* DESERET CAPITAL LETTER EN */\r
+ /*3501*/  0x01044d,  1, 0x010425, /* DESERET CAPITAL LETTER ENG */\r
+ /*3504*/  0x01044e,  1, 0x010426, /* DESERET CAPITAL LETTER OI */\r
+ /*3507*/  0x01044f,  1, 0x010427, /* DESERET CAPITAL LETTER EW */\r
+ /*3510*/  0x0104d8,  1, 0x0104b0, /* OSAGE CAPITAL LETTER A */\r
+ /*3513*/  0x0104d9,  1, 0x0104b1, /* OSAGE CAPITAL LETTER AI */\r
+ /*3516*/  0x0104da,  1, 0x0104b2, /* OSAGE CAPITAL LETTER AIN */\r
+ /*3519*/  0x0104db,  1, 0x0104b3, /* OSAGE CAPITAL LETTER AH */\r
+ /*3522*/  0x0104dc,  1, 0x0104b4, /* OSAGE CAPITAL LETTER BRA */\r
+ /*3525*/  0x0104dd,  1, 0x0104b5, /* OSAGE CAPITAL LETTER CHA */\r
+ /*3528*/  0x0104de,  1, 0x0104b6, /* OSAGE CAPITAL LETTER EHCHA */\r
+ /*3531*/  0x0104df,  1, 0x0104b7, /* OSAGE CAPITAL LETTER E */\r
+ /*3534*/  0x0104e0,  1, 0x0104b8, /* OSAGE CAPITAL LETTER EIN */\r
+ /*3537*/  0x0104e1,  1, 0x0104b9, /* OSAGE CAPITAL LETTER HA */\r
+ /*3540*/  0x0104e2,  1, 0x0104ba, /* OSAGE CAPITAL LETTER HYA */\r
+ /*3543*/  0x0104e3,  1, 0x0104bb, /* OSAGE CAPITAL LETTER I */\r
+ /*3546*/  0x0104e4,  1, 0x0104bc, /* OSAGE CAPITAL LETTER KA */\r
+ /*3549*/  0x0104e5,  1, 0x0104bd, /* OSAGE CAPITAL LETTER EHKA */\r
+ /*3552*/  0x0104e6,  1, 0x0104be, /* OSAGE CAPITAL LETTER KYA */\r
+ /*3555*/  0x0104e7,  1, 0x0104bf, /* OSAGE CAPITAL LETTER LA */\r
+ /*3558*/  0x0104e8,  1, 0x0104c0, /* OSAGE CAPITAL LETTER MA */\r
+ /*3561*/  0x0104e9,  1, 0x0104c1, /* OSAGE CAPITAL LETTER NA */\r
+ /*3564*/  0x0104ea,  1, 0x0104c2, /* OSAGE CAPITAL LETTER O */\r
+ /*3567*/  0x0104eb,  1, 0x0104c3, /* OSAGE CAPITAL LETTER OIN */\r
+ /*3570*/  0x0104ec,  1, 0x0104c4, /* OSAGE CAPITAL LETTER PA */\r
+ /*3573*/  0x0104ed,  1, 0x0104c5, /* OSAGE CAPITAL LETTER EHPA */\r
+ /*3576*/  0x0104ee,  1, 0x0104c6, /* OSAGE CAPITAL LETTER SA */\r
+ /*3579*/  0x0104ef,  1, 0x0104c7, /* OSAGE CAPITAL LETTER SHA */\r
+ /*3582*/  0x0104f0,  1, 0x0104c8, /* OSAGE CAPITAL LETTER TA */\r
+ /*3585*/  0x0104f1,  1, 0x0104c9, /* OSAGE CAPITAL LETTER EHTA */\r
+ /*3588*/  0x0104f2,  1, 0x0104ca, /* OSAGE CAPITAL LETTER TSA */\r
+ /*3591*/  0x0104f3,  1, 0x0104cb, /* OSAGE CAPITAL LETTER EHTSA */\r
+ /*3594*/  0x0104f4,  1, 0x0104cc, /* OSAGE CAPITAL LETTER TSHA */\r
+ /*3597*/  0x0104f5,  1, 0x0104cd, /* OSAGE CAPITAL LETTER DHA */\r
+ /*3600*/  0x0104f6,  1, 0x0104ce, /* OSAGE CAPITAL LETTER U */\r
+ /*3603*/  0x0104f7,  1, 0x0104cf, /* OSAGE CAPITAL LETTER WA */\r
+ /*3606*/  0x0104f8,  1, 0x0104d0, /* OSAGE CAPITAL LETTER KHA */\r
+ /*3609*/  0x0104f9,  1, 0x0104d1, /* OSAGE CAPITAL LETTER GHA */\r
+ /*3612*/  0x0104fa,  1, 0x0104d2, /* OSAGE CAPITAL LETTER ZA */\r
+ /*3615*/  0x0104fb,  1, 0x0104d3, /* OSAGE CAPITAL LETTER ZHA */\r
+ /*3618*/  0x010cc0,  1, 0x010c80, /* OLD HUNGARIAN CAPITAL LETTER A */\r
+ /*3621*/  0x010cc1,  1, 0x010c81, /* OLD HUNGARIAN CAPITAL LETTER AA */\r
+ /*3624*/  0x010cc2,  1, 0x010c82, /* OLD HUNGARIAN CAPITAL LETTER EB */\r
+ /*3627*/  0x010cc3,  1, 0x010c83, /* OLD HUNGARIAN CAPITAL LETTER AMB */\r
+ /*3630*/  0x010cc4,  1, 0x010c84, /* OLD HUNGARIAN CAPITAL LETTER EC */\r
+ /*3633*/  0x010cc5,  1, 0x010c85, /* OLD HUNGARIAN CAPITAL LETTER ENC */\r
+ /*3636*/  0x010cc6,  1, 0x010c86, /* OLD HUNGARIAN CAPITAL LETTER ECS */\r
+ /*3639*/  0x010cc7,  1, 0x010c87, /* OLD HUNGARIAN CAPITAL LETTER ED */\r
+ /*3642*/  0x010cc8,  1, 0x010c88, /* OLD HUNGARIAN CAPITAL LETTER AND */\r
+ /*3645*/  0x010cc9,  1, 0x010c89, /* OLD HUNGARIAN CAPITAL LETTER E */\r
+ /*3648*/  0x010cca,  1, 0x010c8a, /* OLD HUNGARIAN CAPITAL LETTER CLOS.. */\r
+ /*3651*/  0x010ccb,  1, 0x010c8b, /* OLD HUNGARIAN CAPITAL LETTER EE */\r
+ /*3654*/  0x010ccc,  1, 0x010c8c, /* OLD HUNGARIAN CAPITAL LETTER EF */\r
+ /*3657*/  0x010ccd,  1, 0x010c8d, /* OLD HUNGARIAN CAPITAL LETTER EG */\r
+ /*3660*/  0x010cce,  1, 0x010c8e, /* OLD HUNGARIAN CAPITAL LETTER EGY */\r
+ /*3663*/  0x010ccf,  1, 0x010c8f, /* OLD HUNGARIAN CAPITAL LETTER EH */\r
+ /*3666*/  0x010cd0,  1, 0x010c90, /* OLD HUNGARIAN CAPITAL LETTER I */\r
+ /*3669*/  0x010cd1,  1, 0x010c91, /* OLD HUNGARIAN CAPITAL LETTER II */\r
+ /*3672*/  0x010cd2,  1, 0x010c92, /* OLD HUNGARIAN CAPITAL LETTER EJ */\r
+ /*3675*/  0x010cd3,  1, 0x010c93, /* OLD HUNGARIAN CAPITAL LETTER EK */\r
+ /*3678*/  0x010cd4,  1, 0x010c94, /* OLD HUNGARIAN CAPITAL LETTER AK */\r
+ /*3681*/  0x010cd5,  1, 0x010c95, /* OLD HUNGARIAN CAPITAL LETTER UNK */\r
+ /*3684*/  0x010cd6,  1, 0x010c96, /* OLD HUNGARIAN CAPITAL LETTER EL */\r
+ /*3687*/  0x010cd7,  1, 0x010c97, /* OLD HUNGARIAN CAPITAL LETTER ELY */\r
+ /*3690*/  0x010cd8,  1, 0x010c98, /* OLD HUNGARIAN CAPITAL LETTER EM */\r
+ /*3693*/  0x010cd9,  1, 0x010c99, /* OLD HUNGARIAN CAPITAL LETTER EN */\r
+ /*3696*/  0x010cda,  1, 0x010c9a, /* OLD HUNGARIAN CAPITAL LETTER ENY */\r
+ /*3699*/  0x010cdb,  1, 0x010c9b, /* OLD HUNGARIAN CAPITAL LETTER O */\r
+ /*3702*/  0x010cdc,  1, 0x010c9c, /* OLD HUNGARIAN CAPITAL LETTER OO */\r
+ /*3705*/  0x010cdd,  1, 0x010c9d, /* OLD HUNGARIAN CAPITAL LETTER NIKO.. */\r
+ /*3708*/  0x010cde,  1, 0x010c9e, /* OLD HUNGARIAN CAPITAL LETTER RUDI.. */\r
+ /*3711*/  0x010cdf,  1, 0x010c9f, /* OLD HUNGARIAN CAPITAL LETTER OEE */\r
+ /*3714*/  0x010ce0,  1, 0x010ca0, /* OLD HUNGARIAN CAPITAL LETTER EP */\r
+ /*3717*/  0x010ce1,  1, 0x010ca1, /* OLD HUNGARIAN CAPITAL LETTER EMP */\r
+ /*3720*/  0x010ce2,  1, 0x010ca2, /* OLD HUNGARIAN CAPITAL LETTER ER */\r
+ /*3723*/  0x010ce3,  1, 0x010ca3, /* OLD HUNGARIAN CAPITAL LETTER SHOR.. */\r
+ /*3726*/  0x010ce4,  1, 0x010ca4, /* OLD HUNGARIAN CAPITAL LETTER ES */\r
+ /*3729*/  0x010ce5,  1, 0x010ca5, /* OLD HUNGARIAN CAPITAL LETTER ESZ */\r
+ /*3732*/  0x010ce6,  1, 0x010ca6, /* OLD HUNGARIAN CAPITAL LETTER ET */\r
+ /*3735*/  0x010ce7,  1, 0x010ca7, /* OLD HUNGARIAN CAPITAL LETTER ENT */\r
+ /*3738*/  0x010ce8,  1, 0x010ca8, /* OLD HUNGARIAN CAPITAL LETTER ETY */\r
+ /*3741*/  0x010ce9,  1, 0x010ca9, /* OLD HUNGARIAN CAPITAL LETTER ECH */\r
+ /*3744*/  0x010cea,  1, 0x010caa, /* OLD HUNGARIAN CAPITAL LETTER U */\r
+ /*3747*/  0x010ceb,  1, 0x010cab, /* OLD HUNGARIAN CAPITAL LETTER UU */\r
+ /*3750*/  0x010cec,  1, 0x010cac, /* OLD HUNGARIAN CAPITAL LETTER NIKO.. */\r
+ /*3753*/  0x010ced,  1, 0x010cad, /* OLD HUNGARIAN CAPITAL LETTER RUDI.. */\r
+ /*3756*/  0x010cee,  1, 0x010cae, /* OLD HUNGARIAN CAPITAL LETTER EV */\r
+ /*3759*/  0x010cef,  1, 0x010caf, /* OLD HUNGARIAN CAPITAL LETTER EZ */\r
+ /*3762*/  0x010cf0,  1, 0x010cb0, /* OLD HUNGARIAN CAPITAL LETTER EZS */\r
+ /*3765*/  0x010cf1,  1, 0x010cb1, /* OLD HUNGARIAN CAPITAL LETTER ENT-.. */\r
+ /*3768*/  0x010cf2,  1, 0x010cb2, /* OLD HUNGARIAN CAPITAL LETTER US */\r
+ /*3771*/  0x0118c0,  1, 0x0118a0, /* WARANG CITI CAPITAL LETTER NGAA */\r
+ /*3774*/  0x0118c1,  1, 0x0118a1, /* WARANG CITI CAPITAL LETTER A */\r
+ /*3777*/  0x0118c2,  1, 0x0118a2, /* WARANG CITI CAPITAL LETTER WI */\r
+ /*3780*/  0x0118c3,  1, 0x0118a3, /* WARANG CITI CAPITAL LETTER YU */\r
+ /*3783*/  0x0118c4,  1, 0x0118a4, /* WARANG CITI CAPITAL LETTER YA */\r
+ /*3786*/  0x0118c5,  1, 0x0118a5, /* WARANG CITI CAPITAL LETTER YO */\r
+ /*3789*/  0x0118c6,  1, 0x0118a6, /* WARANG CITI CAPITAL LETTER II */\r
+ /*3792*/  0x0118c7,  1, 0x0118a7, /* WARANG CITI CAPITAL LETTER UU */\r
+ /*3795*/  0x0118c8,  1, 0x0118a8, /* WARANG CITI CAPITAL LETTER E */\r
+ /*3798*/  0x0118c9,  1, 0x0118a9, /* WARANG CITI CAPITAL LETTER O */\r
+ /*3801*/  0x0118ca,  1, 0x0118aa, /* WARANG CITI CAPITAL LETTER ANG */\r
+ /*3804*/  0x0118cb,  1, 0x0118ab, /* WARANG CITI CAPITAL LETTER GA */\r
+ /*3807*/  0x0118cc,  1, 0x0118ac, /* WARANG CITI CAPITAL LETTER KO */\r
+ /*3810*/  0x0118cd,  1, 0x0118ad, /* WARANG CITI CAPITAL LETTER ENY */\r
+ /*3813*/  0x0118ce,  1, 0x0118ae, /* WARANG CITI CAPITAL LETTER YUJ */\r
+ /*3816*/  0x0118cf,  1, 0x0118af, /* WARANG CITI CAPITAL LETTER UC */\r
+ /*3819*/  0x0118d0,  1, 0x0118b0, /* WARANG CITI CAPITAL LETTER ENN */\r
+ /*3822*/  0x0118d1,  1, 0x0118b1, /* WARANG CITI CAPITAL LETTER ODD */\r
+ /*3825*/  0x0118d2,  1, 0x0118b2, /* WARANG CITI CAPITAL LETTER TTE */\r
+ /*3828*/  0x0118d3,  1, 0x0118b3, /* WARANG CITI CAPITAL LETTER NUNG */\r
+ /*3831*/  0x0118d4,  1, 0x0118b4, /* WARANG CITI CAPITAL LETTER DA */\r
+ /*3834*/  0x0118d5,  1, 0x0118b5, /* WARANG CITI CAPITAL LETTER AT */\r
+ /*3837*/  0x0118d6,  1, 0x0118b6, /* WARANG CITI CAPITAL LETTER AM */\r
+ /*3840*/  0x0118d7,  1, 0x0118b7, /* WARANG CITI CAPITAL LETTER BU */\r
+ /*3843*/  0x0118d8,  1, 0x0118b8, /* WARANG CITI CAPITAL LETTER PU */\r
+ /*3846*/  0x0118d9,  1, 0x0118b9, /* WARANG CITI CAPITAL LETTER HIYO */\r
+ /*3849*/  0x0118da,  1, 0x0118ba, /* WARANG CITI CAPITAL LETTER HOLO */\r
+ /*3852*/  0x0118db,  1, 0x0118bb, /* WARANG CITI CAPITAL LETTER HORR */\r
+ /*3855*/  0x0118dc,  1, 0x0118bc, /* WARANG CITI CAPITAL LETTER HAR */\r
+ /*3858*/  0x0118dd,  1, 0x0118bd, /* WARANG CITI CAPITAL LETTER SSUU */\r
+ /*3861*/  0x0118de,  1, 0x0118be, /* WARANG CITI CAPITAL LETTER SII */\r
+ /*3864*/  0x0118df,  1, 0x0118bf, /* WARANG CITI CAPITAL LETTER VIYO */\r
+ /*3867*/  0x016e60,  1, 0x016e40, /* MEDEFAIDRIN CAPITAL LETTER M */\r
+ /*3870*/  0x016e61,  1, 0x016e41, /* MEDEFAIDRIN CAPITAL LETTER S */\r
+ /*3873*/  0x016e62,  1, 0x016e42, /* MEDEFAIDRIN CAPITAL LETTER V */\r
+ /*3876*/  0x016e63,  1, 0x016e43, /* MEDEFAIDRIN CAPITAL LETTER W */\r
+ /*3879*/  0x016e64,  1, 0x016e44, /* MEDEFAIDRIN CAPITAL LETTER ATIU */\r
+ /*3882*/  0x016e65,  1, 0x016e45, /* MEDEFAIDRIN CAPITAL LETTER Z */\r
+ /*3885*/  0x016e66,  1, 0x016e46, /* MEDEFAIDRIN CAPITAL LETTER KP */\r
+ /*3888*/  0x016e67,  1, 0x016e47, /* MEDEFAIDRIN CAPITAL LETTER P */\r
+ /*3891*/  0x016e68,  1, 0x016e48, /* MEDEFAIDRIN CAPITAL LETTER T */\r
+ /*3894*/  0x016e69,  1, 0x016e49, /* MEDEFAIDRIN CAPITAL LETTER G */\r
+ /*3897*/  0x016e6a,  1, 0x016e4a, /* MEDEFAIDRIN CAPITAL LETTER F */\r
+ /*3900*/  0x016e6b,  1, 0x016e4b, /* MEDEFAIDRIN CAPITAL LETTER I */\r
+ /*3903*/  0x016e6c,  1, 0x016e4c, /* MEDEFAIDRIN CAPITAL LETTER K */\r
+ /*3906*/  0x016e6d,  1, 0x016e4d, /* MEDEFAIDRIN CAPITAL LETTER A */\r
+ /*3909*/  0x016e6e,  1, 0x016e4e, /* MEDEFAIDRIN CAPITAL LETTER J */\r
+ /*3912*/  0x016e6f,  1, 0x016e4f, /* MEDEFAIDRIN CAPITAL LETTER E */\r
+ /*3915*/  0x016e70,  1, 0x016e50, /* MEDEFAIDRIN CAPITAL LETTER B */\r
+ /*3918*/  0x016e71,  1, 0x016e51, /* MEDEFAIDRIN CAPITAL LETTER C */\r
+ /*3921*/  0x016e72,  1, 0x016e52, /* MEDEFAIDRIN CAPITAL LETTER U */\r
+ /*3924*/  0x016e73,  1, 0x016e53, /* MEDEFAIDRIN CAPITAL LETTER YU */\r
+ /*3927*/  0x016e74,  1, 0x016e54, /* MEDEFAIDRIN CAPITAL LETTER L */\r
+ /*3930*/  0x016e75,  1, 0x016e55, /* MEDEFAIDRIN CAPITAL LETTER Q */\r
+ /*3933*/  0x016e76,  1, 0x016e56, /* MEDEFAIDRIN CAPITAL LETTER HP */\r
+ /*3936*/  0x016e77,  1, 0x016e57, /* MEDEFAIDRIN CAPITAL LETTER NY */\r
+ /*3939*/  0x016e78,  1, 0x016e58, /* MEDEFAIDRIN CAPITAL LETTER X */\r
+ /*3942*/  0x016e79,  1, 0x016e59, /* MEDEFAIDRIN CAPITAL LETTER D */\r
+ /*3945*/  0x016e7a,  1, 0x016e5a, /* MEDEFAIDRIN CAPITAL LETTER OE */\r
+ /*3948*/  0x016e7b,  1, 0x016e5b, /* MEDEFAIDRIN CAPITAL LETTER N */\r
+ /*3951*/  0x016e7c,  1, 0x016e5c, /* MEDEFAIDRIN CAPITAL LETTER R */\r
+ /*3954*/  0x016e7d,  1, 0x016e5d, /* MEDEFAIDRIN CAPITAL LETTER O */\r
+ /*3957*/  0x016e7e,  1, 0x016e5e, /* MEDEFAIDRIN CAPITAL LETTER AI */\r
+ /*3960*/  0x016e7f,  1, 0x016e5f, /* MEDEFAIDRIN CAPITAL LETTER Y */\r
+ /*3963*/  0x01e922,  1, 0x01e900, /* ADLAM CAPITAL LETTER ALIF */\r
+ /*3966*/  0x01e923,  1, 0x01e901, /* ADLAM CAPITAL LETTER DAALI */\r
+ /*3969*/  0x01e924,  1, 0x01e902, /* ADLAM CAPITAL LETTER LAAM */\r
+ /*3972*/  0x01e925,  1, 0x01e903, /* ADLAM CAPITAL LETTER MIIM */\r
+ /*3975*/  0x01e926,  1, 0x01e904, /* ADLAM CAPITAL LETTER BA */\r
+ /*3978*/  0x01e927,  1, 0x01e905, /* ADLAM CAPITAL LETTER SINNYIIYHE */\r
+ /*3981*/  0x01e928,  1, 0x01e906, /* ADLAM CAPITAL LETTER PE */\r
+ /*3984*/  0x01e929,  1, 0x01e907, /* ADLAM CAPITAL LETTER BHE */\r
+ /*3987*/  0x01e92a,  1, 0x01e908, /* ADLAM CAPITAL LETTER RA */\r
+ /*3990*/  0x01e92b,  1, 0x01e909, /* ADLAM CAPITAL LETTER E */\r
+ /*3993*/  0x01e92c,  1, 0x01e90a, /* ADLAM CAPITAL LETTER FA */\r
+ /*3996*/  0x01e92d,  1, 0x01e90b, /* ADLAM CAPITAL LETTER I */\r
+ /*3999*/  0x01e92e,  1, 0x01e90c, /* ADLAM CAPITAL LETTER O */\r
+ /*4002*/  0x01e92f,  1, 0x01e90d, /* ADLAM CAPITAL LETTER DHA */\r
+ /*4005*/  0x01e930,  1, 0x01e90e, /* ADLAM CAPITAL LETTER YHE */\r
+ /*4008*/  0x01e931,  1, 0x01e90f, /* ADLAM CAPITAL LETTER WAW */\r
+ /*4011*/  0x01e932,  1, 0x01e910, /* ADLAM CAPITAL LETTER NUN */\r
+ /*4014*/  0x01e933,  1, 0x01e911, /* ADLAM CAPITAL LETTER KAF */\r
+ /*4017*/  0x01e934,  1, 0x01e912, /* ADLAM CAPITAL LETTER YA */\r
+ /*4020*/  0x01e935,  1, 0x01e913, /* ADLAM CAPITAL LETTER U */\r
+ /*4023*/  0x01e936,  1, 0x01e914, /* ADLAM CAPITAL LETTER JIIM */\r
+ /*4026*/  0x01e937,  1, 0x01e915, /* ADLAM CAPITAL LETTER CHI */\r
+ /*4029*/  0x01e938,  1, 0x01e916, /* ADLAM CAPITAL LETTER HA */\r
+ /*4032*/  0x01e939,  1, 0x01e917, /* ADLAM CAPITAL LETTER QAAF */\r
+ /*4035*/  0x01e93a,  1, 0x01e918, /* ADLAM CAPITAL LETTER GA */\r
+ /*4038*/  0x01e93b,  1, 0x01e919, /* ADLAM CAPITAL LETTER NYA */\r
+ /*4041*/  0x01e93c,  1, 0x01e91a, /* ADLAM CAPITAL LETTER TU */\r
+ /*4044*/  0x01e93d,  1, 0x01e91b, /* ADLAM CAPITAL LETTER NHA */\r
+ /*4047*/  0x01e93e,  1, 0x01e91c, /* ADLAM CAPITAL LETTER VA */\r
+ /*4050*/  0x01e93f,  1, 0x01e91d, /* ADLAM CAPITAL LETTER KHA */\r
+ /*4053*/  0x01e940,  1, 0x01e91e, /* ADLAM CAPITAL LETTER GBE */\r
+ /*4056*/  0x01e941,  1, 0x01e91f, /* ADLAM CAPITAL LETTER ZAL */\r
+ /*4059*/  0x01e942,  1, 0x01e920, /* ADLAM CAPITAL LETTER KPO */\r
+ /*4062*/  0x01e943,  1, 0x01e921, /* ADLAM CAPITAL LETTER SHA */\r
+#define FOLDS1_NORMAL_END_INDEX   4065\r
+ /* ----- LOCALE ----- */\r
+ /*4065*/    0x0069,  1,   0x0049, /* LATIN CAPITAL LETTER I */\r
+#define FOLDS1_END_INDEX   4068\r
+};\r
+\r
+OnigCodePoint OnigUnicodeFolds2[] = {\r
+ /* LATIN SMALL LETTER A WITH RIGHT HALF RING */\r
+ /*   0*/    0x0061,   0x02be,  1,   0x1e9a,\r
+ /* LATIN SMALL LIGATURE FF */\r
+ /*   4*/    0x0066,   0x0066,  1,   0xfb00,\r
+ /* LATIN SMALL LIGATURE FI */\r
+ /*   8*/    0x0066,   0x0069,  1,   0xfb01,\r
+ /* LATIN SMALL LIGATURE FL */\r
+ /*  12*/    0x0066,   0x006c,  1,   0xfb02,\r
+ /* LATIN SMALL LETTER H WITH LINE BELOW */\r
+ /*  16*/    0x0068,   0x0331,  1,   0x1e96,\r
+ /* LATIN SMALL LETTER J WITH CARON */\r
+ /*  20*/    0x006a,   0x030c,  1,   0x01f0,\r
+ /* LATIN SMALL LETTER SHARP S */\r
+ /*  24*/    0x0073,   0x0073,  2,   0x00df,   0x1e9e,\r
+ /* LATIN SMALL LIGATURE LONG S T */\r
+ /*  29*/    0x0073,   0x0074,  2,   0xfb05,   0xfb06,\r
+ /* LATIN SMALL LETTER T WITH DIAERESIS */\r
+ /*  34*/    0x0074,   0x0308,  1,   0x1e97,\r
+ /* LATIN SMALL LETTER W WITH RING ABOVE */\r
+ /*  38*/    0x0077,   0x030a,  1,   0x1e98,\r
+ /* LATIN SMALL LETTER Y WITH RING ABOVE */\r
+ /*  42*/    0x0079,   0x030a,  1,   0x1e99,\r
+ /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */\r
+ /*  46*/    0x02bc,   0x006e,  1,   0x0149,\r
+ /* GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI */\r
+ /*  50*/    0x03ac,   0x03b9,  1,   0x1fb4,\r
+ /* GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI */\r
+ /*  54*/    0x03ae,   0x03b9,  1,   0x1fc4,\r
+ /* GREEK SMALL LETTER ALPHA WITH PERISPOMENI */\r
+ /*  58*/    0x03b1,   0x0342,  1,   0x1fb6,\r
+ /* GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI */\r
+ /*  62*/    0x03b1,   0x03b9,  2,   0x1fb3,   0x1fbc,\r
+ /* GREEK SMALL LETTER ETA WITH PERISPOMENI */\r
+ /*  67*/    0x03b7,   0x0342,  1,   0x1fc6,\r
+ /* GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI */\r
+ /*  71*/    0x03b7,   0x03b9,  2,   0x1fc3,   0x1fcc,\r
+ /* GREEK SMALL LETTER IOTA WITH PERISPOMENI */\r
+ /*  76*/    0x03b9,   0x0342,  1,   0x1fd6,\r
+ /* GREEK SMALL LETTER RHO WITH PSILI */\r
+ /*  80*/    0x03c1,   0x0313,  1,   0x1fe4,\r
+ /* GREEK SMALL LETTER UPSILON WITH PSILI */\r
+ /*  84*/    0x03c5,   0x0313,  1,   0x1f50,\r
+ /* GREEK SMALL LETTER UPSILON WITH PERISPOMENI */\r
+ /*  88*/    0x03c5,   0x0342,  1,   0x1fe6,\r
+ /* GREEK SMALL LETTER OMEGA WITH PERISPOMENI */\r
+ /*  92*/    0x03c9,   0x0342,  1,   0x1ff6,\r
+ /* GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI */\r
+ /*  96*/    0x03c9,   0x03b9,  2,   0x1ff3,   0x1ffc,\r
+ /* GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI */\r
+ /* 101*/    0x03ce,   0x03b9,  1,   0x1ff4,\r
+ /* ARMENIAN SMALL LIGATURE ECH YIWN */\r
+ /* 105*/    0x0565,   0x0582,  1,   0x0587,\r
+ /* ARMENIAN SMALL LIGATURE MEN ECH */\r
+ /* 109*/    0x0574,   0x0565,  1,   0xfb14,\r
+ /* ARMENIAN SMALL LIGATURE MEN INI */\r
+ /* 113*/    0x0574,   0x056b,  1,   0xfb15,\r
+ /* ARMENIAN SMALL LIGATURE MEN XEH */\r
+ /* 117*/    0x0574,   0x056d,  1,   0xfb17,\r
+ /* ARMENIAN SMALL LIGATURE MEN NOW */\r
+ /* 121*/    0x0574,   0x0576,  1,   0xfb13,\r
+ /* ARMENIAN SMALL LIGATURE VEW NOW */\r
+ /* 125*/    0x057e,   0x0576,  1,   0xfb16,\r
+ /* GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI */\r
+ /* 129*/    0x1f00,   0x03b9,  2,   0x1f80,   0x1f88,\r
+ /* GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI */\r
+ /* 134*/    0x1f01,   0x03b9,  2,   0x1f81,   0x1f89,\r
+ /* GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI */\r
+ /* 139*/    0x1f02,   0x03b9,  2,   0x1f82,   0x1f8a,\r
+ /* GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI */\r
+ /* 144*/    0x1f03,   0x03b9,  2,   0x1f83,   0x1f8b,\r
+ /* GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI */\r
+ /* 149*/    0x1f04,   0x03b9,  2,   0x1f84,   0x1f8c,\r
+ /* GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI */\r
+ /* 154*/    0x1f05,   0x03b9,  2,   0x1f85,   0x1f8d,\r
+ /* GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */\r
+ /* 159*/    0x1f06,   0x03b9,  2,   0x1f86,   0x1f8e,\r
+ /* GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */\r
+ /* 164*/    0x1f07,   0x03b9,  2,   0x1f87,   0x1f8f,\r
+ /* GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI */\r
+ /* 169*/    0x1f20,   0x03b9,  2,   0x1f90,   0x1f98,\r
+ /* GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI */\r
+ /* 174*/    0x1f21,   0x03b9,  2,   0x1f91,   0x1f99,\r
+ /* GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI */\r
+ /* 179*/    0x1f22,   0x03b9,  2,   0x1f92,   0x1f9a,\r
+ /* GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI */\r
+ /* 184*/    0x1f23,   0x03b9,  2,   0x1f93,   0x1f9b,\r
+ /* GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI */\r
+ /* 189*/    0x1f24,   0x03b9,  2,   0x1f94,   0x1f9c,\r
+ /* GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI */\r
+ /* 194*/    0x1f25,   0x03b9,  2,   0x1f95,   0x1f9d,\r
+ /* GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */\r
+ /* 199*/    0x1f26,   0x03b9,  2,   0x1f96,   0x1f9e,\r
+ /* GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */\r
+ /* 204*/    0x1f27,   0x03b9,  2,   0x1f97,   0x1f9f,\r
+ /* GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI */\r
+ /* 209*/    0x1f60,   0x03b9,  2,   0x1fa0,   0x1fa8,\r
+ /* GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI */\r
+ /* 214*/    0x1f61,   0x03b9,  2,   0x1fa1,   0x1fa9,\r
+ /* GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI */\r
+ /* 219*/    0x1f62,   0x03b9,  2,   0x1fa2,   0x1faa,\r
+ /* GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI */\r
+ /* 224*/    0x1f63,   0x03b9,  2,   0x1fa3,   0x1fab,\r
+ /* GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI */\r
+ /* 229*/    0x1f64,   0x03b9,  2,   0x1fa4,   0x1fac,\r
+ /* GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI */\r
+ /* 234*/    0x1f65,   0x03b9,  2,   0x1fa5,   0x1fad,\r
+ /* GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */\r
+ /* 239*/    0x1f66,   0x03b9,  2,   0x1fa6,   0x1fae,\r
+ /* GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */\r
+ /* 244*/    0x1f67,   0x03b9,  2,   0x1fa7,   0x1faf,\r
+ /* GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI */\r
+ /* 249*/    0x1f70,   0x03b9,  1,   0x1fb2,\r
+ /* GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI */\r
+ /* 253*/    0x1f74,   0x03b9,  1,   0x1fc2,\r
+ /* GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI */\r
+ /* 257*/    0x1f7c,   0x03b9,  1,   0x1ff2,\r
+#define FOLDS2_NORMAL_END_INDEX   261\r
+ /* ----- LOCALE ----- */\r
+ /* LATIN CAPITAL LETTER I WITH DOT ABOVE */\r
+ /* 261*/    0x0069,   0x0307,  1,   0x0130,\r
+#define FOLDS2_END_INDEX   265\r
+};\r
+\r
+OnigCodePoint OnigUnicodeFolds3[] = {\r
+ /* LATIN SMALL LIGATURE FFI */\r
+ /*   0*/    0x0066,   0x0066,   0x0069,  1,   0xfb03,\r
+ /* LATIN SMALL LIGATURE FFL */\r
+ /*   5*/    0x0066,   0x0066,   0x006c,  1,   0xfb04,\r
+ /* GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI */\r
+ /*  10*/    0x03b1,   0x0342,   0x03b9,  1,   0x1fb7,\r
+ /* GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI */\r
+ /*  15*/    0x03b7,   0x0342,   0x03b9,  1,   0x1fc7,\r
+ /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA */\r
+ /*  20*/    0x03b9,   0x0308,   0x0300,  1,   0x1fd2,\r
+ /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */\r
+ /*  25*/    0x03b9,   0x0308,   0x0301,  2,   0x0390,   0x1fd3,\r
+ /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI */\r
+ /*  31*/    0x03b9,   0x0308,   0x0342,  1,   0x1fd7,\r
+ /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA */\r
+ /*  36*/    0x03c5,   0x0308,   0x0300,  1,   0x1fe2,\r
+ /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */\r
+ /*  41*/    0x03c5,   0x0308,   0x0301,  2,   0x03b0,   0x1fe3,\r
+ /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI */\r
+ /*  47*/    0x03c5,   0x0308,   0x0342,  1,   0x1fe7,\r
+ /* GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA */\r
+ /*  52*/    0x03c5,   0x0313,   0x0300,  1,   0x1f52,\r
+ /* GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA */\r
+ /*  57*/    0x03c5,   0x0313,   0x0301,  1,   0x1f54,\r
+ /* GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI */\r
+ /*  62*/    0x03c5,   0x0313,   0x0342,  1,   0x1f56,\r
+ /* GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI */\r
+ /*  67*/    0x03c9,   0x0342,   0x03b9,  1,   0x1ff7,\r
+#define FOLDS3_NORMAL_END_INDEX   72\r
+ /* ----- LOCALE ----- */\r
+#define FOLDS3_END_INDEX   72\r
+};\r
+\r
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_property_data.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_property_data.c
new file mode 100644 (file)
index 0000000..06f6f13
--- /dev/null
@@ -0,0 +1,29893 @@
+/* ANSI-C code produced by gperf version 3.1 */\r
+/* Command-line: /usr/bin/gperf -T -C -c -t -j1 -L ANSI-C --ignore-case --pic -Q unicode_prop_name_pool -N unicode_lookup_property_name --output-file gperf1.tmp unicode_property_data.gperf  */\r
+/* Computed positions: -k'1-3,5-6,12,16,$' */\r
+\r
+#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \\r
+      && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \\r
+      && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \\r
+      && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \\r
+      && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \\r
+      && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \\r
+      && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \\r
+      && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \\r
+      && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \\r
+      && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \\r
+      && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \\r
+      && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \\r
+      && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \\r
+      && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \\r
+      && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \\r
+      && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \\r
+      && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \\r
+      && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \\r
+      && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \\r
+      && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \\r
+      && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \\r
+      && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \\r
+      && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))\r
+/* The character set is not based on ISO-646.  */\r
+#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gperf@gnu.org>."\r
+#endif\r
+\r
+\r
+\r
+/* Generated by make_unicode_property_data.py. */\r
+\r
+\r
+/* PROPERTY: 'NEWLINE': POSIX [[:NEWLINE:]] */\r
+static const OnigCodePoint\r
+CR_NEWLINE[] = { 1,\r
+0x000a, 0x000a,\r
+}; /* END of CR_NEWLINE */\r
+\r
+/* PROPERTY: 'Alpha': POSIX [[:Alpha:]] */\r
+static const OnigCodePoint\r
+CR_Alpha[] = { 676,\r
+0x0041, 0x005a,\r
+0x0061, 0x007a,\r
+0x00aa, 0x00aa,\r
+0x00b5, 0x00b5,\r
+0x00ba, 0x00ba,\r
+0x00c0, 0x00d6,\r
+0x00d8, 0x00f6,\r
+0x00f8, 0x02c1,\r
+0x02c6, 0x02d1,\r
+0x02e0, 0x02e4,\r
+0x02ec, 0x02ec,\r
+0x02ee, 0x02ee,\r
+0x0345, 0x0345,\r
+0x0370, 0x0374,\r
+0x0376, 0x0377,\r
+0x037a, 0x037d,\r
+0x037f, 0x037f,\r
+0x0386, 0x0386,\r
+0x0388, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x03f5,\r
+0x03f7, 0x0481,\r
+0x048a, 0x052f,\r
+0x0531, 0x0556,\r
+0x0559, 0x0559,\r
+0x0560, 0x0588,\r
+0x05b0, 0x05bd,\r
+0x05bf, 0x05bf,\r
+0x05c1, 0x05c2,\r
+0x05c4, 0x05c5,\r
+0x05c7, 0x05c7,\r
+0x05d0, 0x05ea,\r
+0x05ef, 0x05f2,\r
+0x0610, 0x061a,\r
+0x0620, 0x0657,\r
+0x0659, 0x065f,\r
+0x066e, 0x06d3,\r
+0x06d5, 0x06dc,\r
+0x06e1, 0x06e8,\r
+0x06ed, 0x06ef,\r
+0x06fa, 0x06fc,\r
+0x06ff, 0x06ff,\r
+0x0710, 0x073f,\r
+0x074d, 0x07b1,\r
+0x07ca, 0x07ea,\r
+0x07f4, 0x07f5,\r
+0x07fa, 0x07fa,\r
+0x0800, 0x0817,\r
+0x081a, 0x082c,\r
+0x0840, 0x0858,\r
+0x0860, 0x086a,\r
+0x08a0, 0x08b4,\r
+0x08b6, 0x08bd,\r
+0x08d4, 0x08df,\r
+0x08e3, 0x08e9,\r
+0x08f0, 0x093b,\r
+0x093d, 0x094c,\r
+0x094e, 0x0950,\r
+0x0955, 0x0963,\r
+0x0971, 0x0983,\r
+0x0985, 0x098c,\r
+0x098f, 0x0990,\r
+0x0993, 0x09a8,\r
+0x09aa, 0x09b0,\r
+0x09b2, 0x09b2,\r
+0x09b6, 0x09b9,\r
+0x09bd, 0x09c4,\r
+0x09c7, 0x09c8,\r
+0x09cb, 0x09cc,\r
+0x09ce, 0x09ce,\r
+0x09d7, 0x09d7,\r
+0x09dc, 0x09dd,\r
+0x09df, 0x09e3,\r
+0x09f0, 0x09f1,\r
+0x09fc, 0x09fc,\r
+0x0a01, 0x0a03,\r
+0x0a05, 0x0a0a,\r
+0x0a0f, 0x0a10,\r
+0x0a13, 0x0a28,\r
+0x0a2a, 0x0a30,\r
+0x0a32, 0x0a33,\r
+0x0a35, 0x0a36,\r
+0x0a38, 0x0a39,\r
+0x0a3e, 0x0a42,\r
+0x0a47, 0x0a48,\r
+0x0a4b, 0x0a4c,\r
+0x0a51, 0x0a51,\r
+0x0a59, 0x0a5c,\r
+0x0a5e, 0x0a5e,\r
+0x0a70, 0x0a75,\r
+0x0a81, 0x0a83,\r
+0x0a85, 0x0a8d,\r
+0x0a8f, 0x0a91,\r
+0x0a93, 0x0aa8,\r
+0x0aaa, 0x0ab0,\r
+0x0ab2, 0x0ab3,\r
+0x0ab5, 0x0ab9,\r
+0x0abd, 0x0ac5,\r
+0x0ac7, 0x0ac9,\r
+0x0acb, 0x0acc,\r
+0x0ad0, 0x0ad0,\r
+0x0ae0, 0x0ae3,\r
+0x0af9, 0x0afc,\r
+0x0b01, 0x0b03,\r
+0x0b05, 0x0b0c,\r
+0x0b0f, 0x0b10,\r
+0x0b13, 0x0b28,\r
+0x0b2a, 0x0b30,\r
+0x0b32, 0x0b33,\r
+0x0b35, 0x0b39,\r
+0x0b3d, 0x0b44,\r
+0x0b47, 0x0b48,\r
+0x0b4b, 0x0b4c,\r
+0x0b56, 0x0b57,\r
+0x0b5c, 0x0b5d,\r
+0x0b5f, 0x0b63,\r
+0x0b71, 0x0b71,\r
+0x0b82, 0x0b83,\r
+0x0b85, 0x0b8a,\r
+0x0b8e, 0x0b90,\r
+0x0b92, 0x0b95,\r
+0x0b99, 0x0b9a,\r
+0x0b9c, 0x0b9c,\r
+0x0b9e, 0x0b9f,\r
+0x0ba3, 0x0ba4,\r
+0x0ba8, 0x0baa,\r
+0x0bae, 0x0bb9,\r
+0x0bbe, 0x0bc2,\r
+0x0bc6, 0x0bc8,\r
+0x0bca, 0x0bcc,\r
+0x0bd0, 0x0bd0,\r
+0x0bd7, 0x0bd7,\r
+0x0c00, 0x0c03,\r
+0x0c05, 0x0c0c,\r
+0x0c0e, 0x0c10,\r
+0x0c12, 0x0c28,\r
+0x0c2a, 0x0c39,\r
+0x0c3d, 0x0c44,\r
+0x0c46, 0x0c48,\r
+0x0c4a, 0x0c4c,\r
+0x0c55, 0x0c56,\r
+0x0c58, 0x0c5a,\r
+0x0c60, 0x0c63,\r
+0x0c80, 0x0c83,\r
+0x0c85, 0x0c8c,\r
+0x0c8e, 0x0c90,\r
+0x0c92, 0x0ca8,\r
+0x0caa, 0x0cb3,\r
+0x0cb5, 0x0cb9,\r
+0x0cbd, 0x0cc4,\r
+0x0cc6, 0x0cc8,\r
+0x0cca, 0x0ccc,\r
+0x0cd5, 0x0cd6,\r
+0x0cde, 0x0cde,\r
+0x0ce0, 0x0ce3,\r
+0x0cf1, 0x0cf2,\r
+0x0d00, 0x0d03,\r
+0x0d05, 0x0d0c,\r
+0x0d0e, 0x0d10,\r
+0x0d12, 0x0d3a,\r
+0x0d3d, 0x0d44,\r
+0x0d46, 0x0d48,\r
+0x0d4a, 0x0d4c,\r
+0x0d4e, 0x0d4e,\r
+0x0d54, 0x0d57,\r
+0x0d5f, 0x0d63,\r
+0x0d7a, 0x0d7f,\r
+0x0d82, 0x0d83,\r
+0x0d85, 0x0d96,\r
+0x0d9a, 0x0db1,\r
+0x0db3, 0x0dbb,\r
+0x0dbd, 0x0dbd,\r
+0x0dc0, 0x0dc6,\r
+0x0dcf, 0x0dd4,\r
+0x0dd6, 0x0dd6,\r
+0x0dd8, 0x0ddf,\r
+0x0df2, 0x0df3,\r
+0x0e01, 0x0e3a,\r
+0x0e40, 0x0e46,\r
+0x0e4d, 0x0e4d,\r
+0x0e81, 0x0e82,\r
+0x0e84, 0x0e84,\r
+0x0e87, 0x0e88,\r
+0x0e8a, 0x0e8a,\r
+0x0e8d, 0x0e8d,\r
+0x0e94, 0x0e97,\r
+0x0e99, 0x0e9f,\r
+0x0ea1, 0x0ea3,\r
+0x0ea5, 0x0ea5,\r
+0x0ea7, 0x0ea7,\r
+0x0eaa, 0x0eab,\r
+0x0ead, 0x0eb9,\r
+0x0ebb, 0x0ebd,\r
+0x0ec0, 0x0ec4,\r
+0x0ec6, 0x0ec6,\r
+0x0ecd, 0x0ecd,\r
+0x0edc, 0x0edf,\r
+0x0f00, 0x0f00,\r
+0x0f40, 0x0f47,\r
+0x0f49, 0x0f6c,\r
+0x0f71, 0x0f81,\r
+0x0f88, 0x0f97,\r
+0x0f99, 0x0fbc,\r
+0x1000, 0x1036,\r
+0x1038, 0x1038,\r
+0x103b, 0x103f,\r
+0x1050, 0x1062,\r
+0x1065, 0x1068,\r
+0x106e, 0x1086,\r
+0x108e, 0x108e,\r
+0x109c, 0x109d,\r
+0x10a0, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x10fa,\r
+0x10fc, 0x1248,\r
+0x124a, 0x124d,\r
+0x1250, 0x1256,\r
+0x1258, 0x1258,\r
+0x125a, 0x125d,\r
+0x1260, 0x1288,\r
+0x128a, 0x128d,\r
+0x1290, 0x12b0,\r
+0x12b2, 0x12b5,\r
+0x12b8, 0x12be,\r
+0x12c0, 0x12c0,\r
+0x12c2, 0x12c5,\r
+0x12c8, 0x12d6,\r
+0x12d8, 0x1310,\r
+0x1312, 0x1315,\r
+0x1318, 0x135a,\r
+0x135f, 0x135f,\r
+0x1380, 0x138f,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0x1401, 0x166c,\r
+0x166f, 0x167f,\r
+0x1681, 0x169a,\r
+0x16a0, 0x16ea,\r
+0x16ee, 0x16f8,\r
+0x1700, 0x170c,\r
+0x170e, 0x1713,\r
+0x1720, 0x1733,\r
+0x1740, 0x1753,\r
+0x1760, 0x176c,\r
+0x176e, 0x1770,\r
+0x1772, 0x1773,\r
+0x1780, 0x17b3,\r
+0x17b6, 0x17c8,\r
+0x17d7, 0x17d7,\r
+0x17dc, 0x17dc,\r
+0x1820, 0x1878,\r
+0x1880, 0x18aa,\r
+0x18b0, 0x18f5,\r
+0x1900, 0x191e,\r
+0x1920, 0x192b,\r
+0x1930, 0x1938,\r
+0x1950, 0x196d,\r
+0x1970, 0x1974,\r
+0x1980, 0x19ab,\r
+0x19b0, 0x19c9,\r
+0x1a00, 0x1a1b,\r
+0x1a20, 0x1a5e,\r
+0x1a61, 0x1a74,\r
+0x1aa7, 0x1aa7,\r
+0x1b00, 0x1b33,\r
+0x1b35, 0x1b43,\r
+0x1b45, 0x1b4b,\r
+0x1b80, 0x1ba9,\r
+0x1bac, 0x1baf,\r
+0x1bba, 0x1be5,\r
+0x1be7, 0x1bf1,\r
+0x1c00, 0x1c35,\r
+0x1c4d, 0x1c4f,\r
+0x1c5a, 0x1c7d,\r
+0x1c80, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cbf,\r
+0x1ce9, 0x1cec,\r
+0x1cee, 0x1cf3,\r
+0x1cf5, 0x1cf6,\r
+0x1d00, 0x1dbf,\r
+0x1de7, 0x1df4,\r
+0x1e00, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fbc,\r
+0x1fbe, 0x1fbe,\r
+0x1fc2, 0x1fc4,\r
+0x1fc6, 0x1fcc,\r
+0x1fd0, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fe0, 0x1fec,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffc,\r
+0x2071, 0x2071,\r
+0x207f, 0x207f,\r
+0x2090, 0x209c,\r
+0x2102, 0x2102,\r
+0x2107, 0x2107,\r
+0x210a, 0x2113,\r
+0x2115, 0x2115,\r
+0x2119, 0x211d,\r
+0x2124, 0x2124,\r
+0x2126, 0x2126,\r
+0x2128, 0x2128,\r
+0x212a, 0x212d,\r
+0x212f, 0x2139,\r
+0x213c, 0x213f,\r
+0x2145, 0x2149,\r
+0x214e, 0x214e,\r
+0x2160, 0x2188,\r
+0x24b6, 0x24e9,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x2c60, 0x2ce4,\r
+0x2ceb, 0x2cee,\r
+0x2cf2, 0x2cf3,\r
+0x2d00, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0x2d30, 0x2d67,\r
+0x2d6f, 0x2d6f,\r
+0x2d80, 0x2d96,\r
+0x2da0, 0x2da6,\r
+0x2da8, 0x2dae,\r
+0x2db0, 0x2db6,\r
+0x2db8, 0x2dbe,\r
+0x2dc0, 0x2dc6,\r
+0x2dc8, 0x2dce,\r
+0x2dd0, 0x2dd6,\r
+0x2dd8, 0x2dde,\r
+0x2de0, 0x2dff,\r
+0x2e2f, 0x2e2f,\r
+0x3005, 0x3007,\r
+0x3021, 0x3029,\r
+0x3031, 0x3035,\r
+0x3038, 0x303c,\r
+0x3041, 0x3096,\r
+0x309d, 0x309f,\r
+0x30a1, 0x30fa,\r
+0x30fc, 0x30ff,\r
+0x3105, 0x312f,\r
+0x3131, 0x318e,\r
+0x31a0, 0x31ba,\r
+0x31f0, 0x31ff,\r
+0x3400, 0x4db5,\r
+0x4e00, 0x9fef,\r
+0xa000, 0xa48c,\r
+0xa4d0, 0xa4fd,\r
+0xa500, 0xa60c,\r
+0xa610, 0xa61f,\r
+0xa62a, 0xa62b,\r
+0xa640, 0xa66e,\r
+0xa674, 0xa67b,\r
+0xa67f, 0xa6ef,\r
+0xa717, 0xa71f,\r
+0xa722, 0xa788,\r
+0xa78b, 0xa7b9,\r
+0xa7f7, 0xa801,\r
+0xa803, 0xa805,\r
+0xa807, 0xa80a,\r
+0xa80c, 0xa827,\r
+0xa840, 0xa873,\r
+0xa880, 0xa8c3,\r
+0xa8c5, 0xa8c5,\r
+0xa8f2, 0xa8f7,\r
+0xa8fb, 0xa8fb,\r
+0xa8fd, 0xa8fe,\r
+0xa90a, 0xa92a,\r
+0xa930, 0xa952,\r
+0xa960, 0xa97c,\r
+0xa980, 0xa9b2,\r
+0xa9b4, 0xa9bf,\r
+0xa9cf, 0xa9cf,\r
+0xa9e0, 0xa9e4,\r
+0xa9e6, 0xa9ef,\r
+0xa9fa, 0xa9fe,\r
+0xaa00, 0xaa36,\r
+0xaa40, 0xaa4d,\r
+0xaa60, 0xaa76,\r
+0xaa7a, 0xaa7a,\r
+0xaa7e, 0xaabe,\r
+0xaac0, 0xaac0,\r
+0xaac2, 0xaac2,\r
+0xaadb, 0xaadd,\r
+0xaae0, 0xaaef,\r
+0xaaf2, 0xaaf5,\r
+0xab01, 0xab06,\r
+0xab09, 0xab0e,\r
+0xab11, 0xab16,\r
+0xab20, 0xab26,\r
+0xab28, 0xab2e,\r
+0xab30, 0xab5a,\r
+0xab5c, 0xab65,\r
+0xab70, 0xabea,\r
+0xac00, 0xd7a3,\r
+0xd7b0, 0xd7c6,\r
+0xd7cb, 0xd7fb,\r
+0xf900, 0xfa6d,\r
+0xfa70, 0xfad9,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xfb1d, 0xfb28,\r
+0xfb2a, 0xfb36,\r
+0xfb38, 0xfb3c,\r
+0xfb3e, 0xfb3e,\r
+0xfb40, 0xfb41,\r
+0xfb43, 0xfb44,\r
+0xfb46, 0xfbb1,\r
+0xfbd3, 0xfd3d,\r
+0xfd50, 0xfd8f,\r
+0xfd92, 0xfdc7,\r
+0xfdf0, 0xfdfb,\r
+0xfe70, 0xfe74,\r
+0xfe76, 0xfefc,\r
+0xff21, 0xff3a,\r
+0xff41, 0xff5a,\r
+0xff66, 0xffbe,\r
+0xffc2, 0xffc7,\r
+0xffca, 0xffcf,\r
+0xffd2, 0xffd7,\r
+0xffda, 0xffdc,\r
+0x10000, 0x1000b,\r
+0x1000d, 0x10026,\r
+0x10028, 0x1003a,\r
+0x1003c, 0x1003d,\r
+0x1003f, 0x1004d,\r
+0x10050, 0x1005d,\r
+0x10080, 0x100fa,\r
+0x10140, 0x10174,\r
+0x10280, 0x1029c,\r
+0x102a0, 0x102d0,\r
+0x10300, 0x1031f,\r
+0x1032d, 0x1034a,\r
+0x10350, 0x1037a,\r
+0x10380, 0x1039d,\r
+0x103a0, 0x103c3,\r
+0x103c8, 0x103cf,\r
+0x103d1, 0x103d5,\r
+0x10400, 0x1049d,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+0x10500, 0x10527,\r
+0x10530, 0x10563,\r
+0x10600, 0x10736,\r
+0x10740, 0x10755,\r
+0x10760, 0x10767,\r
+0x10800, 0x10805,\r
+0x10808, 0x10808,\r
+0x1080a, 0x10835,\r
+0x10837, 0x10838,\r
+0x1083c, 0x1083c,\r
+0x1083f, 0x10855,\r
+0x10860, 0x10876,\r
+0x10880, 0x1089e,\r
+0x108e0, 0x108f2,\r
+0x108f4, 0x108f5,\r
+0x10900, 0x10915,\r
+0x10920, 0x10939,\r
+0x10980, 0x109b7,\r
+0x109be, 0x109bf,\r
+0x10a00, 0x10a03,\r
+0x10a05, 0x10a06,\r
+0x10a0c, 0x10a13,\r
+0x10a15, 0x10a17,\r
+0x10a19, 0x10a35,\r
+0x10a60, 0x10a7c,\r
+0x10a80, 0x10a9c,\r
+0x10ac0, 0x10ac7,\r
+0x10ac9, 0x10ae4,\r
+0x10b00, 0x10b35,\r
+0x10b40, 0x10b55,\r
+0x10b60, 0x10b72,\r
+0x10b80, 0x10b91,\r
+0x10c00, 0x10c48,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x10d00, 0x10d27,\r
+0x10f00, 0x10f1c,\r
+0x10f27, 0x10f27,\r
+0x10f30, 0x10f45,\r
+0x11000, 0x11045,\r
+0x11082, 0x110b8,\r
+0x110d0, 0x110e8,\r
+0x11100, 0x11132,\r
+0x11144, 0x11146,\r
+0x11150, 0x11172,\r
+0x11176, 0x11176,\r
+0x11180, 0x111bf,\r
+0x111c1, 0x111c4,\r
+0x111da, 0x111da,\r
+0x111dc, 0x111dc,\r
+0x11200, 0x11211,\r
+0x11213, 0x11234,\r
+0x11237, 0x11237,\r
+0x1123e, 0x1123e,\r
+0x11280, 0x11286,\r
+0x11288, 0x11288,\r
+0x1128a, 0x1128d,\r
+0x1128f, 0x1129d,\r
+0x1129f, 0x112a8,\r
+0x112b0, 0x112e8,\r
+0x11300, 0x11303,\r
+0x11305, 0x1130c,\r
+0x1130f, 0x11310,\r
+0x11313, 0x11328,\r
+0x1132a, 0x11330,\r
+0x11332, 0x11333,\r
+0x11335, 0x11339,\r
+0x1133d, 0x11344,\r
+0x11347, 0x11348,\r
+0x1134b, 0x1134c,\r
+0x11350, 0x11350,\r
+0x11357, 0x11357,\r
+0x1135d, 0x11363,\r
+0x11400, 0x11441,\r
+0x11443, 0x11445,\r
+0x11447, 0x1144a,\r
+0x11480, 0x114c1,\r
+0x114c4, 0x114c5,\r
+0x114c7, 0x114c7,\r
+0x11580, 0x115b5,\r
+0x115b8, 0x115be,\r
+0x115d8, 0x115dd,\r
+0x11600, 0x1163e,\r
+0x11640, 0x11640,\r
+0x11644, 0x11644,\r
+0x11680, 0x116b5,\r
+0x11700, 0x1171a,\r
+0x1171d, 0x1172a,\r
+0x11800, 0x11838,\r
+0x118a0, 0x118df,\r
+0x118ff, 0x118ff,\r
+0x11a00, 0x11a32,\r
+0x11a35, 0x11a3e,\r
+0x11a50, 0x11a83,\r
+0x11a86, 0x11a97,\r
+0x11a9d, 0x11a9d,\r
+0x11ac0, 0x11af8,\r
+0x11c00, 0x11c08,\r
+0x11c0a, 0x11c36,\r
+0x11c38, 0x11c3e,\r
+0x11c40, 0x11c40,\r
+0x11c72, 0x11c8f,\r
+0x11c92, 0x11ca7,\r
+0x11ca9, 0x11cb6,\r
+0x11d00, 0x11d06,\r
+0x11d08, 0x11d09,\r
+0x11d0b, 0x11d36,\r
+0x11d3a, 0x11d3a,\r
+0x11d3c, 0x11d3d,\r
+0x11d3f, 0x11d41,\r
+0x11d43, 0x11d43,\r
+0x11d46, 0x11d47,\r
+0x11d60, 0x11d65,\r
+0x11d67, 0x11d68,\r
+0x11d6a, 0x11d8e,\r
+0x11d90, 0x11d91,\r
+0x11d93, 0x11d96,\r
+0x11d98, 0x11d98,\r
+0x11ee0, 0x11ef6,\r
+0x12000, 0x12399,\r
+0x12400, 0x1246e,\r
+0x12480, 0x12543,\r
+0x13000, 0x1342e,\r
+0x14400, 0x14646,\r
+0x16800, 0x16a38,\r
+0x16a40, 0x16a5e,\r
+0x16ad0, 0x16aed,\r
+0x16b00, 0x16b36,\r
+0x16b40, 0x16b43,\r
+0x16b63, 0x16b77,\r
+0x16b7d, 0x16b8f,\r
+0x16e40, 0x16e7f,\r
+0x16f00, 0x16f44,\r
+0x16f50, 0x16f7e,\r
+0x16f93, 0x16f9f,\r
+0x16fe0, 0x16fe1,\r
+0x17000, 0x187f1,\r
+0x18800, 0x18af2,\r
+0x1b000, 0x1b11e,\r
+0x1b170, 0x1b2fb,\r
+0x1bc00, 0x1bc6a,\r
+0x1bc70, 0x1bc7c,\r
+0x1bc80, 0x1bc88,\r
+0x1bc90, 0x1bc99,\r
+0x1bc9e, 0x1bc9e,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d6c0,\r
+0x1d6c2, 0x1d6da,\r
+0x1d6dc, 0x1d6fa,\r
+0x1d6fc, 0x1d714,\r
+0x1d716, 0x1d734,\r
+0x1d736, 0x1d74e,\r
+0x1d750, 0x1d76e,\r
+0x1d770, 0x1d788,\r
+0x1d78a, 0x1d7a8,\r
+0x1d7aa, 0x1d7c2,\r
+0x1d7c4, 0x1d7cb,\r
+0x1e000, 0x1e006,\r
+0x1e008, 0x1e018,\r
+0x1e01b, 0x1e021,\r
+0x1e023, 0x1e024,\r
+0x1e026, 0x1e02a,\r
+0x1e800, 0x1e8c4,\r
+0x1e900, 0x1e943,\r
+0x1e947, 0x1e947,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+0x1f130, 0x1f149,\r
+0x1f150, 0x1f169,\r
+0x1f170, 0x1f189,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+0x2f800, 0x2fa1d,\r
+}; /* END of CR_Alpha */\r
+\r
+/* PROPERTY: 'Blank': POSIX [[:Blank:]] */\r
+static const OnigCodePoint\r
+CR_Blank[] = { 8,\r
+0x0009, 0x0009,\r
+0x0020, 0x0020,\r
+0x00a0, 0x00a0,\r
+0x1680, 0x1680,\r
+0x2000, 0x200a,\r
+0x202f, 0x202f,\r
+0x205f, 0x205f,\r
+0x3000, 0x3000,\r
+}; /* END of CR_Blank */\r
+\r
+/* PROPERTY: 'Cntrl': POSIX [[:Cntrl:]] */\r
+static const OnigCodePoint\r
+CR_Cntrl[] = { 2,\r
+0x0000, 0x001f,\r
+0x007f, 0x009f,\r
+}; /* END of CR_Cntrl */\r
+\r
+/* PROPERTY: 'Digit': POSIX [[:Digit:]] */\r
+static const OnigCodePoint\r
+CR_Digit[] = { 57,\r
+0x0030, 0x0039,\r
+0x0660, 0x0669,\r
+0x06f0, 0x06f9,\r
+0x07c0, 0x07c9,\r
+0x0966, 0x096f,\r
+0x09e6, 0x09ef,\r
+0x0a66, 0x0a6f,\r
+0x0ae6, 0x0aef,\r
+0x0b66, 0x0b6f,\r
+0x0be6, 0x0bef,\r
+0x0c66, 0x0c6f,\r
+0x0ce6, 0x0cef,\r
+0x0d66, 0x0d6f,\r
+0x0de6, 0x0def,\r
+0x0e50, 0x0e59,\r
+0x0ed0, 0x0ed9,\r
+0x0f20, 0x0f29,\r
+0x1040, 0x1049,\r
+0x1090, 0x1099,\r
+0x17e0, 0x17e9,\r
+0x1810, 0x1819,\r
+0x1946, 0x194f,\r
+0x19d0, 0x19d9,\r
+0x1a80, 0x1a89,\r
+0x1a90, 0x1a99,\r
+0x1b50, 0x1b59,\r
+0x1bb0, 0x1bb9,\r
+0x1c40, 0x1c49,\r
+0x1c50, 0x1c59,\r
+0xa620, 0xa629,\r
+0xa8d0, 0xa8d9,\r
+0xa900, 0xa909,\r
+0xa9d0, 0xa9d9,\r
+0xa9f0, 0xa9f9,\r
+0xaa50, 0xaa59,\r
+0xabf0, 0xabf9,\r
+0xff10, 0xff19,\r
+0x104a0, 0x104a9,\r
+0x10d30, 0x10d39,\r
+0x11066, 0x1106f,\r
+0x110f0, 0x110f9,\r
+0x11136, 0x1113f,\r
+0x111d0, 0x111d9,\r
+0x112f0, 0x112f9,\r
+0x11450, 0x11459,\r
+0x114d0, 0x114d9,\r
+0x11650, 0x11659,\r
+0x116c0, 0x116c9,\r
+0x11730, 0x11739,\r
+0x118e0, 0x118e9,\r
+0x11c50, 0x11c59,\r
+0x11d50, 0x11d59,\r
+0x11da0, 0x11da9,\r
+0x16a60, 0x16a69,\r
+0x16b50, 0x16b59,\r
+0x1d7ce, 0x1d7ff,\r
+0x1e950, 0x1e959,\r
+}; /* END of CR_Digit */\r
+\r
+/* PROPERTY: 'Graph': POSIX [[:Graph:]] */\r
+static const OnigCodePoint\r
+CR_Graph[] = { 663,\r
+0x0021, 0x007e,\r
+0x00a1, 0x0377,\r
+0x037a, 0x037f,\r
+0x0384, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x052f,\r
+0x0531, 0x0556,\r
+0x0559, 0x058a,\r
+0x058d, 0x058f,\r
+0x0591, 0x05c7,\r
+0x05d0, 0x05ea,\r
+0x05ef, 0x05f4,\r
+0x0600, 0x061c,\r
+0x061e, 0x070d,\r
+0x070f, 0x074a,\r
+0x074d, 0x07b1,\r
+0x07c0, 0x07fa,\r
+0x07fd, 0x082d,\r
+0x0830, 0x083e,\r
+0x0840, 0x085b,\r
+0x085e, 0x085e,\r
+0x0860, 0x086a,\r
+0x08a0, 0x08b4,\r
+0x08b6, 0x08bd,\r
+0x08d3, 0x0983,\r
+0x0985, 0x098c,\r
+0x098f, 0x0990,\r
+0x0993, 0x09a8,\r
+0x09aa, 0x09b0,\r
+0x09b2, 0x09b2,\r
+0x09b6, 0x09b9,\r
+0x09bc, 0x09c4,\r
+0x09c7, 0x09c8,\r
+0x09cb, 0x09ce,\r
+0x09d7, 0x09d7,\r
+0x09dc, 0x09dd,\r
+0x09df, 0x09e3,\r
+0x09e6, 0x09fe,\r
+0x0a01, 0x0a03,\r
+0x0a05, 0x0a0a,\r
+0x0a0f, 0x0a10,\r
+0x0a13, 0x0a28,\r
+0x0a2a, 0x0a30,\r
+0x0a32, 0x0a33,\r
+0x0a35, 0x0a36,\r
+0x0a38, 0x0a39,\r
+0x0a3c, 0x0a3c,\r
+0x0a3e, 0x0a42,\r
+0x0a47, 0x0a48,\r
+0x0a4b, 0x0a4d,\r
+0x0a51, 0x0a51,\r
+0x0a59, 0x0a5c,\r
+0x0a5e, 0x0a5e,\r
+0x0a66, 0x0a76,\r
+0x0a81, 0x0a83,\r
+0x0a85, 0x0a8d,\r
+0x0a8f, 0x0a91,\r
+0x0a93, 0x0aa8,\r
+0x0aaa, 0x0ab0,\r
+0x0ab2, 0x0ab3,\r
+0x0ab5, 0x0ab9,\r
+0x0abc, 0x0ac5,\r
+0x0ac7, 0x0ac9,\r
+0x0acb, 0x0acd,\r
+0x0ad0, 0x0ad0,\r
+0x0ae0, 0x0ae3,\r
+0x0ae6, 0x0af1,\r
+0x0af9, 0x0aff,\r
+0x0b01, 0x0b03,\r
+0x0b05, 0x0b0c,\r
+0x0b0f, 0x0b10,\r
+0x0b13, 0x0b28,\r
+0x0b2a, 0x0b30,\r
+0x0b32, 0x0b33,\r
+0x0b35, 0x0b39,\r
+0x0b3c, 0x0b44,\r
+0x0b47, 0x0b48,\r
+0x0b4b, 0x0b4d,\r
+0x0b56, 0x0b57,\r
+0x0b5c, 0x0b5d,\r
+0x0b5f, 0x0b63,\r
+0x0b66, 0x0b77,\r
+0x0b82, 0x0b83,\r
+0x0b85, 0x0b8a,\r
+0x0b8e, 0x0b90,\r
+0x0b92, 0x0b95,\r
+0x0b99, 0x0b9a,\r
+0x0b9c, 0x0b9c,\r
+0x0b9e, 0x0b9f,\r
+0x0ba3, 0x0ba4,\r
+0x0ba8, 0x0baa,\r
+0x0bae, 0x0bb9,\r
+0x0bbe, 0x0bc2,\r
+0x0bc6, 0x0bc8,\r
+0x0bca, 0x0bcd,\r
+0x0bd0, 0x0bd0,\r
+0x0bd7, 0x0bd7,\r
+0x0be6, 0x0bfa,\r
+0x0c00, 0x0c0c,\r
+0x0c0e, 0x0c10,\r
+0x0c12, 0x0c28,\r
+0x0c2a, 0x0c39,\r
+0x0c3d, 0x0c44,\r
+0x0c46, 0x0c48,\r
+0x0c4a, 0x0c4d,\r
+0x0c55, 0x0c56,\r
+0x0c58, 0x0c5a,\r
+0x0c60, 0x0c63,\r
+0x0c66, 0x0c6f,\r
+0x0c78, 0x0c8c,\r
+0x0c8e, 0x0c90,\r
+0x0c92, 0x0ca8,\r
+0x0caa, 0x0cb3,\r
+0x0cb5, 0x0cb9,\r
+0x0cbc, 0x0cc4,\r
+0x0cc6, 0x0cc8,\r
+0x0cca, 0x0ccd,\r
+0x0cd5, 0x0cd6,\r
+0x0cde, 0x0cde,\r
+0x0ce0, 0x0ce3,\r
+0x0ce6, 0x0cef,\r
+0x0cf1, 0x0cf2,\r
+0x0d00, 0x0d03,\r
+0x0d05, 0x0d0c,\r
+0x0d0e, 0x0d10,\r
+0x0d12, 0x0d44,\r
+0x0d46, 0x0d48,\r
+0x0d4a, 0x0d4f,\r
+0x0d54, 0x0d63,\r
+0x0d66, 0x0d7f,\r
+0x0d82, 0x0d83,\r
+0x0d85, 0x0d96,\r
+0x0d9a, 0x0db1,\r
+0x0db3, 0x0dbb,\r
+0x0dbd, 0x0dbd,\r
+0x0dc0, 0x0dc6,\r
+0x0dca, 0x0dca,\r
+0x0dcf, 0x0dd4,\r
+0x0dd6, 0x0dd6,\r
+0x0dd8, 0x0ddf,\r
+0x0de6, 0x0def,\r
+0x0df2, 0x0df4,\r
+0x0e01, 0x0e3a,\r
+0x0e3f, 0x0e5b,\r
+0x0e81, 0x0e82,\r
+0x0e84, 0x0e84,\r
+0x0e87, 0x0e88,\r
+0x0e8a, 0x0e8a,\r
+0x0e8d, 0x0e8d,\r
+0x0e94, 0x0e97,\r
+0x0e99, 0x0e9f,\r
+0x0ea1, 0x0ea3,\r
+0x0ea5, 0x0ea5,\r
+0x0ea7, 0x0ea7,\r
+0x0eaa, 0x0eab,\r
+0x0ead, 0x0eb9,\r
+0x0ebb, 0x0ebd,\r
+0x0ec0, 0x0ec4,\r
+0x0ec6, 0x0ec6,\r
+0x0ec8, 0x0ecd,\r
+0x0ed0, 0x0ed9,\r
+0x0edc, 0x0edf,\r
+0x0f00, 0x0f47,\r
+0x0f49, 0x0f6c,\r
+0x0f71, 0x0f97,\r
+0x0f99, 0x0fbc,\r
+0x0fbe, 0x0fcc,\r
+0x0fce, 0x0fda,\r
+0x1000, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x1248,\r
+0x124a, 0x124d,\r
+0x1250, 0x1256,\r
+0x1258, 0x1258,\r
+0x125a, 0x125d,\r
+0x1260, 0x1288,\r
+0x128a, 0x128d,\r
+0x1290, 0x12b0,\r
+0x12b2, 0x12b5,\r
+0x12b8, 0x12be,\r
+0x12c0, 0x12c0,\r
+0x12c2, 0x12c5,\r
+0x12c8, 0x12d6,\r
+0x12d8, 0x1310,\r
+0x1312, 0x1315,\r
+0x1318, 0x135a,\r
+0x135d, 0x137c,\r
+0x1380, 0x1399,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0x1400, 0x167f,\r
+0x1681, 0x169c,\r
+0x16a0, 0x16f8,\r
+0x1700, 0x170c,\r
+0x170e, 0x1714,\r
+0x1720, 0x1736,\r
+0x1740, 0x1753,\r
+0x1760, 0x176c,\r
+0x176e, 0x1770,\r
+0x1772, 0x1773,\r
+0x1780, 0x17dd,\r
+0x17e0, 0x17e9,\r
+0x17f0, 0x17f9,\r
+0x1800, 0x180e,\r
+0x1810, 0x1819,\r
+0x1820, 0x1878,\r
+0x1880, 0x18aa,\r
+0x18b0, 0x18f5,\r
+0x1900, 0x191e,\r
+0x1920, 0x192b,\r
+0x1930, 0x193b,\r
+0x1940, 0x1940,\r
+0x1944, 0x196d,\r
+0x1970, 0x1974,\r
+0x1980, 0x19ab,\r
+0x19b0, 0x19c9,\r
+0x19d0, 0x19da,\r
+0x19de, 0x1a1b,\r
+0x1a1e, 0x1a5e,\r
+0x1a60, 0x1a7c,\r
+0x1a7f, 0x1a89,\r
+0x1a90, 0x1a99,\r
+0x1aa0, 0x1aad,\r
+0x1ab0, 0x1abe,\r
+0x1b00, 0x1b4b,\r
+0x1b50, 0x1b7c,\r
+0x1b80, 0x1bf3,\r
+0x1bfc, 0x1c37,\r
+0x1c3b, 0x1c49,\r
+0x1c4d, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cc7,\r
+0x1cd0, 0x1cf9,\r
+0x1d00, 0x1df9,\r
+0x1dfb, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fc4,\r
+0x1fc6, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fdd, 0x1fef,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffe,\r
+0x200b, 0x2027,\r
+0x202a, 0x202e,\r
+0x2030, 0x205e,\r
+0x2060, 0x2064,\r
+0x2066, 0x2071,\r
+0x2074, 0x208e,\r
+0x2090, 0x209c,\r
+0x20a0, 0x20bf,\r
+0x20d0, 0x20f0,\r
+0x2100, 0x218b,\r
+0x2190, 0x2426,\r
+0x2440, 0x244a,\r
+0x2460, 0x2b73,\r
+0x2b76, 0x2b95,\r
+0x2b98, 0x2bc8,\r
+0x2bca, 0x2bfe,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x2c60, 0x2cf3,\r
+0x2cf9, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0x2d30, 0x2d67,\r
+0x2d6f, 0x2d70,\r
+0x2d7f, 0x2d96,\r
+0x2da0, 0x2da6,\r
+0x2da8, 0x2dae,\r
+0x2db0, 0x2db6,\r
+0x2db8, 0x2dbe,\r
+0x2dc0, 0x2dc6,\r
+0x2dc8, 0x2dce,\r
+0x2dd0, 0x2dd6,\r
+0x2dd8, 0x2dde,\r
+0x2de0, 0x2e4e,\r
+0x2e80, 0x2e99,\r
+0x2e9b, 0x2ef3,\r
+0x2f00, 0x2fd5,\r
+0x2ff0, 0x2ffb,\r
+0x3001, 0x303f,\r
+0x3041, 0x3096,\r
+0x3099, 0x30ff,\r
+0x3105, 0x312f,\r
+0x3131, 0x318e,\r
+0x3190, 0x31ba,\r
+0x31c0, 0x31e3,\r
+0x31f0, 0x321e,\r
+0x3220, 0x32fe,\r
+0x3300, 0x4db5,\r
+0x4dc0, 0x9fef,\r
+0xa000, 0xa48c,\r
+0xa490, 0xa4c6,\r
+0xa4d0, 0xa62b,\r
+0xa640, 0xa6f7,\r
+0xa700, 0xa7b9,\r
+0xa7f7, 0xa82b,\r
+0xa830, 0xa839,\r
+0xa840, 0xa877,\r
+0xa880, 0xa8c5,\r
+0xa8ce, 0xa8d9,\r
+0xa8e0, 0xa953,\r
+0xa95f, 0xa97c,\r
+0xa980, 0xa9cd,\r
+0xa9cf, 0xa9d9,\r
+0xa9de, 0xa9fe,\r
+0xaa00, 0xaa36,\r
+0xaa40, 0xaa4d,\r
+0xaa50, 0xaa59,\r
+0xaa5c, 0xaac2,\r
+0xaadb, 0xaaf6,\r
+0xab01, 0xab06,\r
+0xab09, 0xab0e,\r
+0xab11, 0xab16,\r
+0xab20, 0xab26,\r
+0xab28, 0xab2e,\r
+0xab30, 0xab65,\r
+0xab70, 0xabed,\r
+0xabf0, 0xabf9,\r
+0xac00, 0xd7a3,\r
+0xd7b0, 0xd7c6,\r
+0xd7cb, 0xd7fb,\r
+0xe000, 0xfa6d,\r
+0xfa70, 0xfad9,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xfb1d, 0xfb36,\r
+0xfb38, 0xfb3c,\r
+0xfb3e, 0xfb3e,\r
+0xfb40, 0xfb41,\r
+0xfb43, 0xfb44,\r
+0xfb46, 0xfbc1,\r
+0xfbd3, 0xfd3f,\r
+0xfd50, 0xfd8f,\r
+0xfd92, 0xfdc7,\r
+0xfdf0, 0xfdfd,\r
+0xfe00, 0xfe19,\r
+0xfe20, 0xfe52,\r
+0xfe54, 0xfe66,\r
+0xfe68, 0xfe6b,\r
+0xfe70, 0xfe74,\r
+0xfe76, 0xfefc,\r
+0xfeff, 0xfeff,\r
+0xff01, 0xffbe,\r
+0xffc2, 0xffc7,\r
+0xffca, 0xffcf,\r
+0xffd2, 0xffd7,\r
+0xffda, 0xffdc,\r
+0xffe0, 0xffe6,\r
+0xffe8, 0xffee,\r
+0xfff9, 0xfffd,\r
+0x10000, 0x1000b,\r
+0x1000d, 0x10026,\r
+0x10028, 0x1003a,\r
+0x1003c, 0x1003d,\r
+0x1003f, 0x1004d,\r
+0x10050, 0x1005d,\r
+0x10080, 0x100fa,\r
+0x10100, 0x10102,\r
+0x10107, 0x10133,\r
+0x10137, 0x1018e,\r
+0x10190, 0x1019b,\r
+0x101a0, 0x101a0,\r
+0x101d0, 0x101fd,\r
+0x10280, 0x1029c,\r
+0x102a0, 0x102d0,\r
+0x102e0, 0x102fb,\r
+0x10300, 0x10323,\r
+0x1032d, 0x1034a,\r
+0x10350, 0x1037a,\r
+0x10380, 0x1039d,\r
+0x1039f, 0x103c3,\r
+0x103c8, 0x103d5,\r
+0x10400, 0x1049d,\r
+0x104a0, 0x104a9,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+0x10500, 0x10527,\r
+0x10530, 0x10563,\r
+0x1056f, 0x1056f,\r
+0x10600, 0x10736,\r
+0x10740, 0x10755,\r
+0x10760, 0x10767,\r
+0x10800, 0x10805,\r
+0x10808, 0x10808,\r
+0x1080a, 0x10835,\r
+0x10837, 0x10838,\r
+0x1083c, 0x1083c,\r
+0x1083f, 0x10855,\r
+0x10857, 0x1089e,\r
+0x108a7, 0x108af,\r
+0x108e0, 0x108f2,\r
+0x108f4, 0x108f5,\r
+0x108fb, 0x1091b,\r
+0x1091f, 0x10939,\r
+0x1093f, 0x1093f,\r
+0x10980, 0x109b7,\r
+0x109bc, 0x109cf,\r
+0x109d2, 0x10a03,\r
+0x10a05, 0x10a06,\r
+0x10a0c, 0x10a13,\r
+0x10a15, 0x10a17,\r
+0x10a19, 0x10a35,\r
+0x10a38, 0x10a3a,\r
+0x10a3f, 0x10a48,\r
+0x10a50, 0x10a58,\r
+0x10a60, 0x10a9f,\r
+0x10ac0, 0x10ae6,\r
+0x10aeb, 0x10af6,\r
+0x10b00, 0x10b35,\r
+0x10b39, 0x10b55,\r
+0x10b58, 0x10b72,\r
+0x10b78, 0x10b91,\r
+0x10b99, 0x10b9c,\r
+0x10ba9, 0x10baf,\r
+0x10c00, 0x10c48,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x10cfa, 0x10d27,\r
+0x10d30, 0x10d39,\r
+0x10e60, 0x10e7e,\r
+0x10f00, 0x10f27,\r
+0x10f30, 0x10f59,\r
+0x11000, 0x1104d,\r
+0x11052, 0x1106f,\r
+0x1107f, 0x110c1,\r
+0x110cd, 0x110cd,\r
+0x110d0, 0x110e8,\r
+0x110f0, 0x110f9,\r
+0x11100, 0x11134,\r
+0x11136, 0x11146,\r
+0x11150, 0x11176,\r
+0x11180, 0x111cd,\r
+0x111d0, 0x111df,\r
+0x111e1, 0x111f4,\r
+0x11200, 0x11211,\r
+0x11213, 0x1123e,\r
+0x11280, 0x11286,\r
+0x11288, 0x11288,\r
+0x1128a, 0x1128d,\r
+0x1128f, 0x1129d,\r
+0x1129f, 0x112a9,\r
+0x112b0, 0x112ea,\r
+0x112f0, 0x112f9,\r
+0x11300, 0x11303,\r
+0x11305, 0x1130c,\r
+0x1130f, 0x11310,\r
+0x11313, 0x11328,\r
+0x1132a, 0x11330,\r
+0x11332, 0x11333,\r
+0x11335, 0x11339,\r
+0x1133b, 0x11344,\r
+0x11347, 0x11348,\r
+0x1134b, 0x1134d,\r
+0x11350, 0x11350,\r
+0x11357, 0x11357,\r
+0x1135d, 0x11363,\r
+0x11366, 0x1136c,\r
+0x11370, 0x11374,\r
+0x11400, 0x11459,\r
+0x1145b, 0x1145b,\r
+0x1145d, 0x1145e,\r
+0x11480, 0x114c7,\r
+0x114d0, 0x114d9,\r
+0x11580, 0x115b5,\r
+0x115b8, 0x115dd,\r
+0x11600, 0x11644,\r
+0x11650, 0x11659,\r
+0x11660, 0x1166c,\r
+0x11680, 0x116b7,\r
+0x116c0, 0x116c9,\r
+0x11700, 0x1171a,\r
+0x1171d, 0x1172b,\r
+0x11730, 0x1173f,\r
+0x11800, 0x1183b,\r
+0x118a0, 0x118f2,\r
+0x118ff, 0x118ff,\r
+0x11a00, 0x11a47,\r
+0x11a50, 0x11a83,\r
+0x11a86, 0x11aa2,\r
+0x11ac0, 0x11af8,\r
+0x11c00, 0x11c08,\r
+0x11c0a, 0x11c36,\r
+0x11c38, 0x11c45,\r
+0x11c50, 0x11c6c,\r
+0x11c70, 0x11c8f,\r
+0x11c92, 0x11ca7,\r
+0x11ca9, 0x11cb6,\r
+0x11d00, 0x11d06,\r
+0x11d08, 0x11d09,\r
+0x11d0b, 0x11d36,\r
+0x11d3a, 0x11d3a,\r
+0x11d3c, 0x11d3d,\r
+0x11d3f, 0x11d47,\r
+0x11d50, 0x11d59,\r
+0x11d60, 0x11d65,\r
+0x11d67, 0x11d68,\r
+0x11d6a, 0x11d8e,\r
+0x11d90, 0x11d91,\r
+0x11d93, 0x11d98,\r
+0x11da0, 0x11da9,\r
+0x11ee0, 0x11ef8,\r
+0x12000, 0x12399,\r
+0x12400, 0x1246e,\r
+0x12470, 0x12474,\r
+0x12480, 0x12543,\r
+0x13000, 0x1342e,\r
+0x14400, 0x14646,\r
+0x16800, 0x16a38,\r
+0x16a40, 0x16a5e,\r
+0x16a60, 0x16a69,\r
+0x16a6e, 0x16a6f,\r
+0x16ad0, 0x16aed,\r
+0x16af0, 0x16af5,\r
+0x16b00, 0x16b45,\r
+0x16b50, 0x16b59,\r
+0x16b5b, 0x16b61,\r
+0x16b63, 0x16b77,\r
+0x16b7d, 0x16b8f,\r
+0x16e40, 0x16e9a,\r
+0x16f00, 0x16f44,\r
+0x16f50, 0x16f7e,\r
+0x16f8f, 0x16f9f,\r
+0x16fe0, 0x16fe1,\r
+0x17000, 0x187f1,\r
+0x18800, 0x18af2,\r
+0x1b000, 0x1b11e,\r
+0x1b170, 0x1b2fb,\r
+0x1bc00, 0x1bc6a,\r
+0x1bc70, 0x1bc7c,\r
+0x1bc80, 0x1bc88,\r
+0x1bc90, 0x1bc99,\r
+0x1bc9c, 0x1bca3,\r
+0x1d000, 0x1d0f5,\r
+0x1d100, 0x1d126,\r
+0x1d129, 0x1d1e8,\r
+0x1d200, 0x1d245,\r
+0x1d2e0, 0x1d2f3,\r
+0x1d300, 0x1d356,\r
+0x1d360, 0x1d378,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d7cb,\r
+0x1d7ce, 0x1da8b,\r
+0x1da9b, 0x1da9f,\r
+0x1daa1, 0x1daaf,\r
+0x1e000, 0x1e006,\r
+0x1e008, 0x1e018,\r
+0x1e01b, 0x1e021,\r
+0x1e023, 0x1e024,\r
+0x1e026, 0x1e02a,\r
+0x1e800, 0x1e8c4,\r
+0x1e8c7, 0x1e8d6,\r
+0x1e900, 0x1e94a,\r
+0x1e950, 0x1e959,\r
+0x1e95e, 0x1e95f,\r
+0x1ec71, 0x1ecb4,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+0x1eef0, 0x1eef1,\r
+0x1f000, 0x1f02b,\r
+0x1f030, 0x1f093,\r
+0x1f0a0, 0x1f0ae,\r
+0x1f0b1, 0x1f0bf,\r
+0x1f0c1, 0x1f0cf,\r
+0x1f0d1, 0x1f0f5,\r
+0x1f100, 0x1f10c,\r
+0x1f110, 0x1f16b,\r
+0x1f170, 0x1f1ac,\r
+0x1f1e6, 0x1f202,\r
+0x1f210, 0x1f23b,\r
+0x1f240, 0x1f248,\r
+0x1f250, 0x1f251,\r
+0x1f260, 0x1f265,\r
+0x1f300, 0x1f6d4,\r
+0x1f6e0, 0x1f6ec,\r
+0x1f6f0, 0x1f6f9,\r
+0x1f700, 0x1f773,\r
+0x1f780, 0x1f7d8,\r
+0x1f800, 0x1f80b,\r
+0x1f810, 0x1f847,\r
+0x1f850, 0x1f859,\r
+0x1f860, 0x1f887,\r
+0x1f890, 0x1f8ad,\r
+0x1f900, 0x1f90b,\r
+0x1f910, 0x1f93e,\r
+0x1f940, 0x1f970,\r
+0x1f973, 0x1f976,\r
+0x1f97a, 0x1f97a,\r
+0x1f97c, 0x1f9a2,\r
+0x1f9b0, 0x1f9b9,\r
+0x1f9c0, 0x1f9c2,\r
+0x1f9d0, 0x1f9ff,\r
+0x1fa60, 0x1fa6d,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+0x2f800, 0x2fa1d,\r
+0xe0001, 0xe0001,\r
+0xe0020, 0xe007f,\r
+0xe0100, 0xe01ef,\r
+0xf0000, 0xffffd,\r
+0x100000, 0x10fffd,\r
+}; /* END of CR_Graph */\r
+\r
+/* PROPERTY: 'Lower': POSIX [[:Lower:]] */\r
+static const OnigCodePoint\r
+CR_Lower[] = { 645,\r
+0x0061, 0x007a,\r
+0x00aa, 0x00aa,\r
+0x00b5, 0x00b5,\r
+0x00ba, 0x00ba,\r
+0x00df, 0x00f6,\r
+0x00f8, 0x00ff,\r
+0x0101, 0x0101,\r
+0x0103, 0x0103,\r
+0x0105, 0x0105,\r
+0x0107, 0x0107,\r
+0x0109, 0x0109,\r
+0x010b, 0x010b,\r
+0x010d, 0x010d,\r
+0x010f, 0x010f,\r
+0x0111, 0x0111,\r
+0x0113, 0x0113,\r
+0x0115, 0x0115,\r
+0x0117, 0x0117,\r
+0x0119, 0x0119,\r
+0x011b, 0x011b,\r
+0x011d, 0x011d,\r
+0x011f, 0x011f,\r
+0x0121, 0x0121,\r
+0x0123, 0x0123,\r
+0x0125, 0x0125,\r
+0x0127, 0x0127,\r
+0x0129, 0x0129,\r
+0x012b, 0x012b,\r
+0x012d, 0x012d,\r
+0x012f, 0x012f,\r
+0x0131, 0x0131,\r
+0x0133, 0x0133,\r
+0x0135, 0x0135,\r
+0x0137, 0x0138,\r
+0x013a, 0x013a,\r
+0x013c, 0x013c,\r
+0x013e, 0x013e,\r
+0x0140, 0x0140,\r
+0x0142, 0x0142,\r
+0x0144, 0x0144,\r
+0x0146, 0x0146,\r
+0x0148, 0x0149,\r
+0x014b, 0x014b,\r
+0x014d, 0x014d,\r
+0x014f, 0x014f,\r
+0x0151, 0x0151,\r
+0x0153, 0x0153,\r
+0x0155, 0x0155,\r
+0x0157, 0x0157,\r
+0x0159, 0x0159,\r
+0x015b, 0x015b,\r
+0x015d, 0x015d,\r
+0x015f, 0x015f,\r
+0x0161, 0x0161,\r
+0x0163, 0x0163,\r
+0x0165, 0x0165,\r
+0x0167, 0x0167,\r
+0x0169, 0x0169,\r
+0x016b, 0x016b,\r
+0x016d, 0x016d,\r
+0x016f, 0x016f,\r
+0x0171, 0x0171,\r
+0x0173, 0x0173,\r
+0x0175, 0x0175,\r
+0x0177, 0x0177,\r
+0x017a, 0x017a,\r
+0x017c, 0x017c,\r
+0x017e, 0x0180,\r
+0x0183, 0x0183,\r
+0x0185, 0x0185,\r
+0x0188, 0x0188,\r
+0x018c, 0x018d,\r
+0x0192, 0x0192,\r
+0x0195, 0x0195,\r
+0x0199, 0x019b,\r
+0x019e, 0x019e,\r
+0x01a1, 0x01a1,\r
+0x01a3, 0x01a3,\r
+0x01a5, 0x01a5,\r
+0x01a8, 0x01a8,\r
+0x01aa, 0x01ab,\r
+0x01ad, 0x01ad,\r
+0x01b0, 0x01b0,\r
+0x01b4, 0x01b4,\r
+0x01b6, 0x01b6,\r
+0x01b9, 0x01ba,\r
+0x01bd, 0x01bf,\r
+0x01c6, 0x01c6,\r
+0x01c9, 0x01c9,\r
+0x01cc, 0x01cc,\r
+0x01ce, 0x01ce,\r
+0x01d0, 0x01d0,\r
+0x01d2, 0x01d2,\r
+0x01d4, 0x01d4,\r
+0x01d6, 0x01d6,\r
+0x01d8, 0x01d8,\r
+0x01da, 0x01da,\r
+0x01dc, 0x01dd,\r
+0x01df, 0x01df,\r
+0x01e1, 0x01e1,\r
+0x01e3, 0x01e3,\r
+0x01e5, 0x01e5,\r
+0x01e7, 0x01e7,\r
+0x01e9, 0x01e9,\r
+0x01eb, 0x01eb,\r
+0x01ed, 0x01ed,\r
+0x01ef, 0x01f0,\r
+0x01f3, 0x01f3,\r
+0x01f5, 0x01f5,\r
+0x01f9, 0x01f9,\r
+0x01fb, 0x01fb,\r
+0x01fd, 0x01fd,\r
+0x01ff, 0x01ff,\r
+0x0201, 0x0201,\r
+0x0203, 0x0203,\r
+0x0205, 0x0205,\r
+0x0207, 0x0207,\r
+0x0209, 0x0209,\r
+0x020b, 0x020b,\r
+0x020d, 0x020d,\r
+0x020f, 0x020f,\r
+0x0211, 0x0211,\r
+0x0213, 0x0213,\r
+0x0215, 0x0215,\r
+0x0217, 0x0217,\r
+0x0219, 0x0219,\r
+0x021b, 0x021b,\r
+0x021d, 0x021d,\r
+0x021f, 0x021f,\r
+0x0221, 0x0221,\r
+0x0223, 0x0223,\r
+0x0225, 0x0225,\r
+0x0227, 0x0227,\r
+0x0229, 0x0229,\r
+0x022b, 0x022b,\r
+0x022d, 0x022d,\r
+0x022f, 0x022f,\r
+0x0231, 0x0231,\r
+0x0233, 0x0239,\r
+0x023c, 0x023c,\r
+0x023f, 0x0240,\r
+0x0242, 0x0242,\r
+0x0247, 0x0247,\r
+0x0249, 0x0249,\r
+0x024b, 0x024b,\r
+0x024d, 0x024d,\r
+0x024f, 0x0293,\r
+0x0295, 0x02b8,\r
+0x02c0, 0x02c1,\r
+0x02e0, 0x02e4,\r
+0x0345, 0x0345,\r
+0x0371, 0x0371,\r
+0x0373, 0x0373,\r
+0x0377, 0x0377,\r
+0x037a, 0x037d,\r
+0x0390, 0x0390,\r
+0x03ac, 0x03ce,\r
+0x03d0, 0x03d1,\r
+0x03d5, 0x03d7,\r
+0x03d9, 0x03d9,\r
+0x03db, 0x03db,\r
+0x03dd, 0x03dd,\r
+0x03df, 0x03df,\r
+0x03e1, 0x03e1,\r
+0x03e3, 0x03e3,\r
+0x03e5, 0x03e5,\r
+0x03e7, 0x03e7,\r
+0x03e9, 0x03e9,\r
+0x03eb, 0x03eb,\r
+0x03ed, 0x03ed,\r
+0x03ef, 0x03f3,\r
+0x03f5, 0x03f5,\r
+0x03f8, 0x03f8,\r
+0x03fb, 0x03fc,\r
+0x0430, 0x045f,\r
+0x0461, 0x0461,\r
+0x0463, 0x0463,\r
+0x0465, 0x0465,\r
+0x0467, 0x0467,\r
+0x0469, 0x0469,\r
+0x046b, 0x046b,\r
+0x046d, 0x046d,\r
+0x046f, 0x046f,\r
+0x0471, 0x0471,\r
+0x0473, 0x0473,\r
+0x0475, 0x0475,\r
+0x0477, 0x0477,\r
+0x0479, 0x0479,\r
+0x047b, 0x047b,\r
+0x047d, 0x047d,\r
+0x047f, 0x047f,\r
+0x0481, 0x0481,\r
+0x048b, 0x048b,\r
+0x048d, 0x048d,\r
+0x048f, 0x048f,\r
+0x0491, 0x0491,\r
+0x0493, 0x0493,\r
+0x0495, 0x0495,\r
+0x0497, 0x0497,\r
+0x0499, 0x0499,\r
+0x049b, 0x049b,\r
+0x049d, 0x049d,\r
+0x049f, 0x049f,\r
+0x04a1, 0x04a1,\r
+0x04a3, 0x04a3,\r
+0x04a5, 0x04a5,\r
+0x04a7, 0x04a7,\r
+0x04a9, 0x04a9,\r
+0x04ab, 0x04ab,\r
+0x04ad, 0x04ad,\r
+0x04af, 0x04af,\r
+0x04b1, 0x04b1,\r
+0x04b3, 0x04b3,\r
+0x04b5, 0x04b5,\r
+0x04b7, 0x04b7,\r
+0x04b9, 0x04b9,\r
+0x04bb, 0x04bb,\r
+0x04bd, 0x04bd,\r
+0x04bf, 0x04bf,\r
+0x04c2, 0x04c2,\r
+0x04c4, 0x04c4,\r
+0x04c6, 0x04c6,\r
+0x04c8, 0x04c8,\r
+0x04ca, 0x04ca,\r
+0x04cc, 0x04cc,\r
+0x04ce, 0x04cf,\r
+0x04d1, 0x04d1,\r
+0x04d3, 0x04d3,\r
+0x04d5, 0x04d5,\r
+0x04d7, 0x04d7,\r
+0x04d9, 0x04d9,\r
+0x04db, 0x04db,\r
+0x04dd, 0x04dd,\r
+0x04df, 0x04df,\r
+0x04e1, 0x04e1,\r
+0x04e3, 0x04e3,\r
+0x04e5, 0x04e5,\r
+0x04e7, 0x04e7,\r
+0x04e9, 0x04e9,\r
+0x04eb, 0x04eb,\r
+0x04ed, 0x04ed,\r
+0x04ef, 0x04ef,\r
+0x04f1, 0x04f1,\r
+0x04f3, 0x04f3,\r
+0x04f5, 0x04f5,\r
+0x04f7, 0x04f7,\r
+0x04f9, 0x04f9,\r
+0x04fb, 0x04fb,\r
+0x04fd, 0x04fd,\r
+0x04ff, 0x04ff,\r
+0x0501, 0x0501,\r
+0x0503, 0x0503,\r
+0x0505, 0x0505,\r
+0x0507, 0x0507,\r
+0x0509, 0x0509,\r
+0x050b, 0x050b,\r
+0x050d, 0x050d,\r
+0x050f, 0x050f,\r
+0x0511, 0x0511,\r
+0x0513, 0x0513,\r
+0x0515, 0x0515,\r
+0x0517, 0x0517,\r
+0x0519, 0x0519,\r
+0x051b, 0x051b,\r
+0x051d, 0x051d,\r
+0x051f, 0x051f,\r
+0x0521, 0x0521,\r
+0x0523, 0x0523,\r
+0x0525, 0x0525,\r
+0x0527, 0x0527,\r
+0x0529, 0x0529,\r
+0x052b, 0x052b,\r
+0x052d, 0x052d,\r
+0x052f, 0x052f,\r
+0x0560, 0x0588,\r
+0x10d0, 0x10fa,\r
+0x10fd, 0x10ff,\r
+0x13f8, 0x13fd,\r
+0x1c80, 0x1c88,\r
+0x1d00, 0x1dbf,\r
+0x1e01, 0x1e01,\r
+0x1e03, 0x1e03,\r
+0x1e05, 0x1e05,\r
+0x1e07, 0x1e07,\r
+0x1e09, 0x1e09,\r
+0x1e0b, 0x1e0b,\r
+0x1e0d, 0x1e0d,\r
+0x1e0f, 0x1e0f,\r
+0x1e11, 0x1e11,\r
+0x1e13, 0x1e13,\r
+0x1e15, 0x1e15,\r
+0x1e17, 0x1e17,\r
+0x1e19, 0x1e19,\r
+0x1e1b, 0x1e1b,\r
+0x1e1d, 0x1e1d,\r
+0x1e1f, 0x1e1f,\r
+0x1e21, 0x1e21,\r
+0x1e23, 0x1e23,\r
+0x1e25, 0x1e25,\r
+0x1e27, 0x1e27,\r
+0x1e29, 0x1e29,\r
+0x1e2b, 0x1e2b,\r
+0x1e2d, 0x1e2d,\r
+0x1e2f, 0x1e2f,\r
+0x1e31, 0x1e31,\r
+0x1e33, 0x1e33,\r
+0x1e35, 0x1e35,\r
+0x1e37, 0x1e37,\r
+0x1e39, 0x1e39,\r
+0x1e3b, 0x1e3b,\r
+0x1e3d, 0x1e3d,\r
+0x1e3f, 0x1e3f,\r
+0x1e41, 0x1e41,\r
+0x1e43, 0x1e43,\r
+0x1e45, 0x1e45,\r
+0x1e47, 0x1e47,\r
+0x1e49, 0x1e49,\r
+0x1e4b, 0x1e4b,\r
+0x1e4d, 0x1e4d,\r
+0x1e4f, 0x1e4f,\r
+0x1e51, 0x1e51,\r
+0x1e53, 0x1e53,\r
+0x1e55, 0x1e55,\r
+0x1e57, 0x1e57,\r
+0x1e59, 0x1e59,\r
+0x1e5b, 0x1e5b,\r
+0x1e5d, 0x1e5d,\r
+0x1e5f, 0x1e5f,\r
+0x1e61, 0x1e61,\r
+0x1e63, 0x1e63,\r
+0x1e65, 0x1e65,\r
+0x1e67, 0x1e67,\r
+0x1e69, 0x1e69,\r
+0x1e6b, 0x1e6b,\r
+0x1e6d, 0x1e6d,\r
+0x1e6f, 0x1e6f,\r
+0x1e71, 0x1e71,\r
+0x1e73, 0x1e73,\r
+0x1e75, 0x1e75,\r
+0x1e77, 0x1e77,\r
+0x1e79, 0x1e79,\r
+0x1e7b, 0x1e7b,\r
+0x1e7d, 0x1e7d,\r
+0x1e7f, 0x1e7f,\r
+0x1e81, 0x1e81,\r
+0x1e83, 0x1e83,\r
+0x1e85, 0x1e85,\r
+0x1e87, 0x1e87,\r
+0x1e89, 0x1e89,\r
+0x1e8b, 0x1e8b,\r
+0x1e8d, 0x1e8d,\r
+0x1e8f, 0x1e8f,\r
+0x1e91, 0x1e91,\r
+0x1e93, 0x1e93,\r
+0x1e95, 0x1e9d,\r
+0x1e9f, 0x1e9f,\r
+0x1ea1, 0x1ea1,\r
+0x1ea3, 0x1ea3,\r
+0x1ea5, 0x1ea5,\r
+0x1ea7, 0x1ea7,\r
+0x1ea9, 0x1ea9,\r
+0x1eab, 0x1eab,\r
+0x1ead, 0x1ead,\r
+0x1eaf, 0x1eaf,\r
+0x1eb1, 0x1eb1,\r
+0x1eb3, 0x1eb3,\r
+0x1eb5, 0x1eb5,\r
+0x1eb7, 0x1eb7,\r
+0x1eb9, 0x1eb9,\r
+0x1ebb, 0x1ebb,\r
+0x1ebd, 0x1ebd,\r
+0x1ebf, 0x1ebf,\r
+0x1ec1, 0x1ec1,\r
+0x1ec3, 0x1ec3,\r
+0x1ec5, 0x1ec5,\r
+0x1ec7, 0x1ec7,\r
+0x1ec9, 0x1ec9,\r
+0x1ecb, 0x1ecb,\r
+0x1ecd, 0x1ecd,\r
+0x1ecf, 0x1ecf,\r
+0x1ed1, 0x1ed1,\r
+0x1ed3, 0x1ed3,\r
+0x1ed5, 0x1ed5,\r
+0x1ed7, 0x1ed7,\r
+0x1ed9, 0x1ed9,\r
+0x1edb, 0x1edb,\r
+0x1edd, 0x1edd,\r
+0x1edf, 0x1edf,\r
+0x1ee1, 0x1ee1,\r
+0x1ee3, 0x1ee3,\r
+0x1ee5, 0x1ee5,\r
+0x1ee7, 0x1ee7,\r
+0x1ee9, 0x1ee9,\r
+0x1eeb, 0x1eeb,\r
+0x1eed, 0x1eed,\r
+0x1eef, 0x1eef,\r
+0x1ef1, 0x1ef1,\r
+0x1ef3, 0x1ef3,\r
+0x1ef5, 0x1ef5,\r
+0x1ef7, 0x1ef7,\r
+0x1ef9, 0x1ef9,\r
+0x1efb, 0x1efb,\r
+0x1efd, 0x1efd,\r
+0x1eff, 0x1f07,\r
+0x1f10, 0x1f15,\r
+0x1f20, 0x1f27,\r
+0x1f30, 0x1f37,\r
+0x1f40, 0x1f45,\r
+0x1f50, 0x1f57,\r
+0x1f60, 0x1f67,\r
+0x1f70, 0x1f7d,\r
+0x1f80, 0x1f87,\r
+0x1f90, 0x1f97,\r
+0x1fa0, 0x1fa7,\r
+0x1fb0, 0x1fb4,\r
+0x1fb6, 0x1fb7,\r
+0x1fbe, 0x1fbe,\r
+0x1fc2, 0x1fc4,\r
+0x1fc6, 0x1fc7,\r
+0x1fd0, 0x1fd3,\r
+0x1fd6, 0x1fd7,\r
+0x1fe0, 0x1fe7,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ff7,\r
+0x2071, 0x2071,\r
+0x207f, 0x207f,\r
+0x2090, 0x209c,\r
+0x210a, 0x210a,\r
+0x210e, 0x210f,\r
+0x2113, 0x2113,\r
+0x212f, 0x212f,\r
+0x2134, 0x2134,\r
+0x2139, 0x2139,\r
+0x213c, 0x213d,\r
+0x2146, 0x2149,\r
+0x214e, 0x214e,\r
+0x2170, 0x217f,\r
+0x2184, 0x2184,\r
+0x24d0, 0x24e9,\r
+0x2c30, 0x2c5e,\r
+0x2c61, 0x2c61,\r
+0x2c65, 0x2c66,\r
+0x2c68, 0x2c68,\r
+0x2c6a, 0x2c6a,\r
+0x2c6c, 0x2c6c,\r
+0x2c71, 0x2c71,\r
+0x2c73, 0x2c74,\r
+0x2c76, 0x2c7d,\r
+0x2c81, 0x2c81,\r
+0x2c83, 0x2c83,\r
+0x2c85, 0x2c85,\r
+0x2c87, 0x2c87,\r
+0x2c89, 0x2c89,\r
+0x2c8b, 0x2c8b,\r
+0x2c8d, 0x2c8d,\r
+0x2c8f, 0x2c8f,\r
+0x2c91, 0x2c91,\r
+0x2c93, 0x2c93,\r
+0x2c95, 0x2c95,\r
+0x2c97, 0x2c97,\r
+0x2c99, 0x2c99,\r
+0x2c9b, 0x2c9b,\r
+0x2c9d, 0x2c9d,\r
+0x2c9f, 0x2c9f,\r
+0x2ca1, 0x2ca1,\r
+0x2ca3, 0x2ca3,\r
+0x2ca5, 0x2ca5,\r
+0x2ca7, 0x2ca7,\r
+0x2ca9, 0x2ca9,\r
+0x2cab, 0x2cab,\r
+0x2cad, 0x2cad,\r
+0x2caf, 0x2caf,\r
+0x2cb1, 0x2cb1,\r
+0x2cb3, 0x2cb3,\r
+0x2cb5, 0x2cb5,\r
+0x2cb7, 0x2cb7,\r
+0x2cb9, 0x2cb9,\r
+0x2cbb, 0x2cbb,\r
+0x2cbd, 0x2cbd,\r
+0x2cbf, 0x2cbf,\r
+0x2cc1, 0x2cc1,\r
+0x2cc3, 0x2cc3,\r
+0x2cc5, 0x2cc5,\r
+0x2cc7, 0x2cc7,\r
+0x2cc9, 0x2cc9,\r
+0x2ccb, 0x2ccb,\r
+0x2ccd, 0x2ccd,\r
+0x2ccf, 0x2ccf,\r
+0x2cd1, 0x2cd1,\r
+0x2cd3, 0x2cd3,\r
+0x2cd5, 0x2cd5,\r
+0x2cd7, 0x2cd7,\r
+0x2cd9, 0x2cd9,\r
+0x2cdb, 0x2cdb,\r
+0x2cdd, 0x2cdd,\r
+0x2cdf, 0x2cdf,\r
+0x2ce1, 0x2ce1,\r
+0x2ce3, 0x2ce4,\r
+0x2cec, 0x2cec,\r
+0x2cee, 0x2cee,\r
+0x2cf3, 0x2cf3,\r
+0x2d00, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0xa641, 0xa641,\r
+0xa643, 0xa643,\r
+0xa645, 0xa645,\r
+0xa647, 0xa647,\r
+0xa649, 0xa649,\r
+0xa64b, 0xa64b,\r
+0xa64d, 0xa64d,\r
+0xa64f, 0xa64f,\r
+0xa651, 0xa651,\r
+0xa653, 0xa653,\r
+0xa655, 0xa655,\r
+0xa657, 0xa657,\r
+0xa659, 0xa659,\r
+0xa65b, 0xa65b,\r
+0xa65d, 0xa65d,\r
+0xa65f, 0xa65f,\r
+0xa661, 0xa661,\r
+0xa663, 0xa663,\r
+0xa665, 0xa665,\r
+0xa667, 0xa667,\r
+0xa669, 0xa669,\r
+0xa66b, 0xa66b,\r
+0xa66d, 0xa66d,\r
+0xa681, 0xa681,\r
+0xa683, 0xa683,\r
+0xa685, 0xa685,\r
+0xa687, 0xa687,\r
+0xa689, 0xa689,\r
+0xa68b, 0xa68b,\r
+0xa68d, 0xa68d,\r
+0xa68f, 0xa68f,\r
+0xa691, 0xa691,\r
+0xa693, 0xa693,\r
+0xa695, 0xa695,\r
+0xa697, 0xa697,\r
+0xa699, 0xa699,\r
+0xa69b, 0xa69d,\r
+0xa723, 0xa723,\r
+0xa725, 0xa725,\r
+0xa727, 0xa727,\r
+0xa729, 0xa729,\r
+0xa72b, 0xa72b,\r
+0xa72d, 0xa72d,\r
+0xa72f, 0xa731,\r
+0xa733, 0xa733,\r
+0xa735, 0xa735,\r
+0xa737, 0xa737,\r
+0xa739, 0xa739,\r
+0xa73b, 0xa73b,\r
+0xa73d, 0xa73d,\r
+0xa73f, 0xa73f,\r
+0xa741, 0xa741,\r
+0xa743, 0xa743,\r
+0xa745, 0xa745,\r
+0xa747, 0xa747,\r
+0xa749, 0xa749,\r
+0xa74b, 0xa74b,\r
+0xa74d, 0xa74d,\r
+0xa74f, 0xa74f,\r
+0xa751, 0xa751,\r
+0xa753, 0xa753,\r
+0xa755, 0xa755,\r
+0xa757, 0xa757,\r
+0xa759, 0xa759,\r
+0xa75b, 0xa75b,\r
+0xa75d, 0xa75d,\r
+0xa75f, 0xa75f,\r
+0xa761, 0xa761,\r
+0xa763, 0xa763,\r
+0xa765, 0xa765,\r
+0xa767, 0xa767,\r
+0xa769, 0xa769,\r
+0xa76b, 0xa76b,\r
+0xa76d, 0xa76d,\r
+0xa76f, 0xa778,\r
+0xa77a, 0xa77a,\r
+0xa77c, 0xa77c,\r
+0xa77f, 0xa77f,\r
+0xa781, 0xa781,\r
+0xa783, 0xa783,\r
+0xa785, 0xa785,\r
+0xa787, 0xa787,\r
+0xa78c, 0xa78c,\r
+0xa78e, 0xa78e,\r
+0xa791, 0xa791,\r
+0xa793, 0xa795,\r
+0xa797, 0xa797,\r
+0xa799, 0xa799,\r
+0xa79b, 0xa79b,\r
+0xa79d, 0xa79d,\r
+0xa79f, 0xa79f,\r
+0xa7a1, 0xa7a1,\r
+0xa7a3, 0xa7a3,\r
+0xa7a5, 0xa7a5,\r
+0xa7a7, 0xa7a7,\r
+0xa7a9, 0xa7a9,\r
+0xa7af, 0xa7af,\r
+0xa7b5, 0xa7b5,\r
+0xa7b7, 0xa7b7,\r
+0xa7b9, 0xa7b9,\r
+0xa7f8, 0xa7fa,\r
+0xab30, 0xab5a,\r
+0xab5c, 0xab65,\r
+0xab70, 0xabbf,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xff41, 0xff5a,\r
+0x10428, 0x1044f,\r
+0x104d8, 0x104fb,\r
+0x10cc0, 0x10cf2,\r
+0x118c0, 0x118df,\r
+0x16e60, 0x16e7f,\r
+0x1d41a, 0x1d433,\r
+0x1d44e, 0x1d454,\r
+0x1d456, 0x1d467,\r
+0x1d482, 0x1d49b,\r
+0x1d4b6, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d4cf,\r
+0x1d4ea, 0x1d503,\r
+0x1d51e, 0x1d537,\r
+0x1d552, 0x1d56b,\r
+0x1d586, 0x1d59f,\r
+0x1d5ba, 0x1d5d3,\r
+0x1d5ee, 0x1d607,\r
+0x1d622, 0x1d63b,\r
+0x1d656, 0x1d66f,\r
+0x1d68a, 0x1d6a5,\r
+0x1d6c2, 0x1d6da,\r
+0x1d6dc, 0x1d6e1,\r
+0x1d6fc, 0x1d714,\r
+0x1d716, 0x1d71b,\r
+0x1d736, 0x1d74e,\r
+0x1d750, 0x1d755,\r
+0x1d770, 0x1d788,\r
+0x1d78a, 0x1d78f,\r
+0x1d7aa, 0x1d7c2,\r
+0x1d7c4, 0x1d7c9,\r
+0x1d7cb, 0x1d7cb,\r
+0x1e922, 0x1e943,\r
+}; /* END of CR_Lower */\r
+\r
+/* PROPERTY: 'Print': POSIX [[:Print:]] */\r
+static const OnigCodePoint\r
+CR_Print[] = { 660,\r
+0x0020, 0x007e,\r
+0x00a0, 0x0377,\r
+0x037a, 0x037f,\r
+0x0384, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x052f,\r
+0x0531, 0x0556,\r
+0x0559, 0x058a,\r
+0x058d, 0x058f,\r
+0x0591, 0x05c7,\r
+0x05d0, 0x05ea,\r
+0x05ef, 0x05f4,\r
+0x0600, 0x061c,\r
+0x061e, 0x070d,\r
+0x070f, 0x074a,\r
+0x074d, 0x07b1,\r
+0x07c0, 0x07fa,\r
+0x07fd, 0x082d,\r
+0x0830, 0x083e,\r
+0x0840, 0x085b,\r
+0x085e, 0x085e,\r
+0x0860, 0x086a,\r
+0x08a0, 0x08b4,\r
+0x08b6, 0x08bd,\r
+0x08d3, 0x0983,\r
+0x0985, 0x098c,\r
+0x098f, 0x0990,\r
+0x0993, 0x09a8,\r
+0x09aa, 0x09b0,\r
+0x09b2, 0x09b2,\r
+0x09b6, 0x09b9,\r
+0x09bc, 0x09c4,\r
+0x09c7, 0x09c8,\r
+0x09cb, 0x09ce,\r
+0x09d7, 0x09d7,\r
+0x09dc, 0x09dd,\r
+0x09df, 0x09e3,\r
+0x09e6, 0x09fe,\r
+0x0a01, 0x0a03,\r
+0x0a05, 0x0a0a,\r
+0x0a0f, 0x0a10,\r
+0x0a13, 0x0a28,\r
+0x0a2a, 0x0a30,\r
+0x0a32, 0x0a33,\r
+0x0a35, 0x0a36,\r
+0x0a38, 0x0a39,\r
+0x0a3c, 0x0a3c,\r
+0x0a3e, 0x0a42,\r
+0x0a47, 0x0a48,\r
+0x0a4b, 0x0a4d,\r
+0x0a51, 0x0a51,\r
+0x0a59, 0x0a5c,\r
+0x0a5e, 0x0a5e,\r
+0x0a66, 0x0a76,\r
+0x0a81, 0x0a83,\r
+0x0a85, 0x0a8d,\r
+0x0a8f, 0x0a91,\r
+0x0a93, 0x0aa8,\r
+0x0aaa, 0x0ab0,\r
+0x0ab2, 0x0ab3,\r
+0x0ab5, 0x0ab9,\r
+0x0abc, 0x0ac5,\r
+0x0ac7, 0x0ac9,\r
+0x0acb, 0x0acd,\r
+0x0ad0, 0x0ad0,\r
+0x0ae0, 0x0ae3,\r
+0x0ae6, 0x0af1,\r
+0x0af9, 0x0aff,\r
+0x0b01, 0x0b03,\r
+0x0b05, 0x0b0c,\r
+0x0b0f, 0x0b10,\r
+0x0b13, 0x0b28,\r
+0x0b2a, 0x0b30,\r
+0x0b32, 0x0b33,\r
+0x0b35, 0x0b39,\r
+0x0b3c, 0x0b44,\r
+0x0b47, 0x0b48,\r
+0x0b4b, 0x0b4d,\r
+0x0b56, 0x0b57,\r
+0x0b5c, 0x0b5d,\r
+0x0b5f, 0x0b63,\r
+0x0b66, 0x0b77,\r
+0x0b82, 0x0b83,\r
+0x0b85, 0x0b8a,\r
+0x0b8e, 0x0b90,\r
+0x0b92, 0x0b95,\r
+0x0b99, 0x0b9a,\r
+0x0b9c, 0x0b9c,\r
+0x0b9e, 0x0b9f,\r
+0x0ba3, 0x0ba4,\r
+0x0ba8, 0x0baa,\r
+0x0bae, 0x0bb9,\r
+0x0bbe, 0x0bc2,\r
+0x0bc6, 0x0bc8,\r
+0x0bca, 0x0bcd,\r
+0x0bd0, 0x0bd0,\r
+0x0bd7, 0x0bd7,\r
+0x0be6, 0x0bfa,\r
+0x0c00, 0x0c0c,\r
+0x0c0e, 0x0c10,\r
+0x0c12, 0x0c28,\r
+0x0c2a, 0x0c39,\r
+0x0c3d, 0x0c44,\r
+0x0c46, 0x0c48,\r
+0x0c4a, 0x0c4d,\r
+0x0c55, 0x0c56,\r
+0x0c58, 0x0c5a,\r
+0x0c60, 0x0c63,\r
+0x0c66, 0x0c6f,\r
+0x0c78, 0x0c8c,\r
+0x0c8e, 0x0c90,\r
+0x0c92, 0x0ca8,\r
+0x0caa, 0x0cb3,\r
+0x0cb5, 0x0cb9,\r
+0x0cbc, 0x0cc4,\r
+0x0cc6, 0x0cc8,\r
+0x0cca, 0x0ccd,\r
+0x0cd5, 0x0cd6,\r
+0x0cde, 0x0cde,\r
+0x0ce0, 0x0ce3,\r
+0x0ce6, 0x0cef,\r
+0x0cf1, 0x0cf2,\r
+0x0d00, 0x0d03,\r
+0x0d05, 0x0d0c,\r
+0x0d0e, 0x0d10,\r
+0x0d12, 0x0d44,\r
+0x0d46, 0x0d48,\r
+0x0d4a, 0x0d4f,\r
+0x0d54, 0x0d63,\r
+0x0d66, 0x0d7f,\r
+0x0d82, 0x0d83,\r
+0x0d85, 0x0d96,\r
+0x0d9a, 0x0db1,\r
+0x0db3, 0x0dbb,\r
+0x0dbd, 0x0dbd,\r
+0x0dc0, 0x0dc6,\r
+0x0dca, 0x0dca,\r
+0x0dcf, 0x0dd4,\r
+0x0dd6, 0x0dd6,\r
+0x0dd8, 0x0ddf,\r
+0x0de6, 0x0def,\r
+0x0df2, 0x0df4,\r
+0x0e01, 0x0e3a,\r
+0x0e3f, 0x0e5b,\r
+0x0e81, 0x0e82,\r
+0x0e84, 0x0e84,\r
+0x0e87, 0x0e88,\r
+0x0e8a, 0x0e8a,\r
+0x0e8d, 0x0e8d,\r
+0x0e94, 0x0e97,\r
+0x0e99, 0x0e9f,\r
+0x0ea1, 0x0ea3,\r
+0x0ea5, 0x0ea5,\r
+0x0ea7, 0x0ea7,\r
+0x0eaa, 0x0eab,\r
+0x0ead, 0x0eb9,\r
+0x0ebb, 0x0ebd,\r
+0x0ec0, 0x0ec4,\r
+0x0ec6, 0x0ec6,\r
+0x0ec8, 0x0ecd,\r
+0x0ed0, 0x0ed9,\r
+0x0edc, 0x0edf,\r
+0x0f00, 0x0f47,\r
+0x0f49, 0x0f6c,\r
+0x0f71, 0x0f97,\r
+0x0f99, 0x0fbc,\r
+0x0fbe, 0x0fcc,\r
+0x0fce, 0x0fda,\r
+0x1000, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x1248,\r
+0x124a, 0x124d,\r
+0x1250, 0x1256,\r
+0x1258, 0x1258,\r
+0x125a, 0x125d,\r
+0x1260, 0x1288,\r
+0x128a, 0x128d,\r
+0x1290, 0x12b0,\r
+0x12b2, 0x12b5,\r
+0x12b8, 0x12be,\r
+0x12c0, 0x12c0,\r
+0x12c2, 0x12c5,\r
+0x12c8, 0x12d6,\r
+0x12d8, 0x1310,\r
+0x1312, 0x1315,\r
+0x1318, 0x135a,\r
+0x135d, 0x137c,\r
+0x1380, 0x1399,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0x1400, 0x169c,\r
+0x16a0, 0x16f8,\r
+0x1700, 0x170c,\r
+0x170e, 0x1714,\r
+0x1720, 0x1736,\r
+0x1740, 0x1753,\r
+0x1760, 0x176c,\r
+0x176e, 0x1770,\r
+0x1772, 0x1773,\r
+0x1780, 0x17dd,\r
+0x17e0, 0x17e9,\r
+0x17f0, 0x17f9,\r
+0x1800, 0x180e,\r
+0x1810, 0x1819,\r
+0x1820, 0x1878,\r
+0x1880, 0x18aa,\r
+0x18b0, 0x18f5,\r
+0x1900, 0x191e,\r
+0x1920, 0x192b,\r
+0x1930, 0x193b,\r
+0x1940, 0x1940,\r
+0x1944, 0x196d,\r
+0x1970, 0x1974,\r
+0x1980, 0x19ab,\r
+0x19b0, 0x19c9,\r
+0x19d0, 0x19da,\r
+0x19de, 0x1a1b,\r
+0x1a1e, 0x1a5e,\r
+0x1a60, 0x1a7c,\r
+0x1a7f, 0x1a89,\r
+0x1a90, 0x1a99,\r
+0x1aa0, 0x1aad,\r
+0x1ab0, 0x1abe,\r
+0x1b00, 0x1b4b,\r
+0x1b50, 0x1b7c,\r
+0x1b80, 0x1bf3,\r
+0x1bfc, 0x1c37,\r
+0x1c3b, 0x1c49,\r
+0x1c4d, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cc7,\r
+0x1cd0, 0x1cf9,\r
+0x1d00, 0x1df9,\r
+0x1dfb, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fc4,\r
+0x1fc6, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fdd, 0x1fef,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffe,\r
+0x2000, 0x2027,\r
+0x202a, 0x2064,\r
+0x2066, 0x2071,\r
+0x2074, 0x208e,\r
+0x2090, 0x209c,\r
+0x20a0, 0x20bf,\r
+0x20d0, 0x20f0,\r
+0x2100, 0x218b,\r
+0x2190, 0x2426,\r
+0x2440, 0x244a,\r
+0x2460, 0x2b73,\r
+0x2b76, 0x2b95,\r
+0x2b98, 0x2bc8,\r
+0x2bca, 0x2bfe,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x2c60, 0x2cf3,\r
+0x2cf9, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0x2d30, 0x2d67,\r
+0x2d6f, 0x2d70,\r
+0x2d7f, 0x2d96,\r
+0x2da0, 0x2da6,\r
+0x2da8, 0x2dae,\r
+0x2db0, 0x2db6,\r
+0x2db8, 0x2dbe,\r
+0x2dc0, 0x2dc6,\r
+0x2dc8, 0x2dce,\r
+0x2dd0, 0x2dd6,\r
+0x2dd8, 0x2dde,\r
+0x2de0, 0x2e4e,\r
+0x2e80, 0x2e99,\r
+0x2e9b, 0x2ef3,\r
+0x2f00, 0x2fd5,\r
+0x2ff0, 0x2ffb,\r
+0x3000, 0x303f,\r
+0x3041, 0x3096,\r
+0x3099, 0x30ff,\r
+0x3105, 0x312f,\r
+0x3131, 0x318e,\r
+0x3190, 0x31ba,\r
+0x31c0, 0x31e3,\r
+0x31f0, 0x321e,\r
+0x3220, 0x32fe,\r
+0x3300, 0x4db5,\r
+0x4dc0, 0x9fef,\r
+0xa000, 0xa48c,\r
+0xa490, 0xa4c6,\r
+0xa4d0, 0xa62b,\r
+0xa640, 0xa6f7,\r
+0xa700, 0xa7b9,\r
+0xa7f7, 0xa82b,\r
+0xa830, 0xa839,\r
+0xa840, 0xa877,\r
+0xa880, 0xa8c5,\r
+0xa8ce, 0xa8d9,\r
+0xa8e0, 0xa953,\r
+0xa95f, 0xa97c,\r
+0xa980, 0xa9cd,\r
+0xa9cf, 0xa9d9,\r
+0xa9de, 0xa9fe,\r
+0xaa00, 0xaa36,\r
+0xaa40, 0xaa4d,\r
+0xaa50, 0xaa59,\r
+0xaa5c, 0xaac2,\r
+0xaadb, 0xaaf6,\r
+0xab01, 0xab06,\r
+0xab09, 0xab0e,\r
+0xab11, 0xab16,\r
+0xab20, 0xab26,\r
+0xab28, 0xab2e,\r
+0xab30, 0xab65,\r
+0xab70, 0xabed,\r
+0xabf0, 0xabf9,\r
+0xac00, 0xd7a3,\r
+0xd7b0, 0xd7c6,\r
+0xd7cb, 0xd7fb,\r
+0xe000, 0xfa6d,\r
+0xfa70, 0xfad9,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xfb1d, 0xfb36,\r
+0xfb38, 0xfb3c,\r
+0xfb3e, 0xfb3e,\r
+0xfb40, 0xfb41,\r
+0xfb43, 0xfb44,\r
+0xfb46, 0xfbc1,\r
+0xfbd3, 0xfd3f,\r
+0xfd50, 0xfd8f,\r
+0xfd92, 0xfdc7,\r
+0xfdf0, 0xfdfd,\r
+0xfe00, 0xfe19,\r
+0xfe20, 0xfe52,\r
+0xfe54, 0xfe66,\r
+0xfe68, 0xfe6b,\r
+0xfe70, 0xfe74,\r
+0xfe76, 0xfefc,\r
+0xfeff, 0xfeff,\r
+0xff01, 0xffbe,\r
+0xffc2, 0xffc7,\r
+0xffca, 0xffcf,\r
+0xffd2, 0xffd7,\r
+0xffda, 0xffdc,\r
+0xffe0, 0xffe6,\r
+0xffe8, 0xffee,\r
+0xfff9, 0xfffd,\r
+0x10000, 0x1000b,\r
+0x1000d, 0x10026,\r
+0x10028, 0x1003a,\r
+0x1003c, 0x1003d,\r
+0x1003f, 0x1004d,\r
+0x10050, 0x1005d,\r
+0x10080, 0x100fa,\r
+0x10100, 0x10102,\r
+0x10107, 0x10133,\r
+0x10137, 0x1018e,\r
+0x10190, 0x1019b,\r
+0x101a0, 0x101a0,\r
+0x101d0, 0x101fd,\r
+0x10280, 0x1029c,\r
+0x102a0, 0x102d0,\r
+0x102e0, 0x102fb,\r
+0x10300, 0x10323,\r
+0x1032d, 0x1034a,\r
+0x10350, 0x1037a,\r
+0x10380, 0x1039d,\r
+0x1039f, 0x103c3,\r
+0x103c8, 0x103d5,\r
+0x10400, 0x1049d,\r
+0x104a0, 0x104a9,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+0x10500, 0x10527,\r
+0x10530, 0x10563,\r
+0x1056f, 0x1056f,\r
+0x10600, 0x10736,\r
+0x10740, 0x10755,\r
+0x10760, 0x10767,\r
+0x10800, 0x10805,\r
+0x10808, 0x10808,\r
+0x1080a, 0x10835,\r
+0x10837, 0x10838,\r
+0x1083c, 0x1083c,\r
+0x1083f, 0x10855,\r
+0x10857, 0x1089e,\r
+0x108a7, 0x108af,\r
+0x108e0, 0x108f2,\r
+0x108f4, 0x108f5,\r
+0x108fb, 0x1091b,\r
+0x1091f, 0x10939,\r
+0x1093f, 0x1093f,\r
+0x10980, 0x109b7,\r
+0x109bc, 0x109cf,\r
+0x109d2, 0x10a03,\r
+0x10a05, 0x10a06,\r
+0x10a0c, 0x10a13,\r
+0x10a15, 0x10a17,\r
+0x10a19, 0x10a35,\r
+0x10a38, 0x10a3a,\r
+0x10a3f, 0x10a48,\r
+0x10a50, 0x10a58,\r
+0x10a60, 0x10a9f,\r
+0x10ac0, 0x10ae6,\r
+0x10aeb, 0x10af6,\r
+0x10b00, 0x10b35,\r
+0x10b39, 0x10b55,\r
+0x10b58, 0x10b72,\r
+0x10b78, 0x10b91,\r
+0x10b99, 0x10b9c,\r
+0x10ba9, 0x10baf,\r
+0x10c00, 0x10c48,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x10cfa, 0x10d27,\r
+0x10d30, 0x10d39,\r
+0x10e60, 0x10e7e,\r
+0x10f00, 0x10f27,\r
+0x10f30, 0x10f59,\r
+0x11000, 0x1104d,\r
+0x11052, 0x1106f,\r
+0x1107f, 0x110c1,\r
+0x110cd, 0x110cd,\r
+0x110d0, 0x110e8,\r
+0x110f0, 0x110f9,\r
+0x11100, 0x11134,\r
+0x11136, 0x11146,\r
+0x11150, 0x11176,\r
+0x11180, 0x111cd,\r
+0x111d0, 0x111df,\r
+0x111e1, 0x111f4,\r
+0x11200, 0x11211,\r
+0x11213, 0x1123e,\r
+0x11280, 0x11286,\r
+0x11288, 0x11288,\r
+0x1128a, 0x1128d,\r
+0x1128f, 0x1129d,\r
+0x1129f, 0x112a9,\r
+0x112b0, 0x112ea,\r
+0x112f0, 0x112f9,\r
+0x11300, 0x11303,\r
+0x11305, 0x1130c,\r
+0x1130f, 0x11310,\r
+0x11313, 0x11328,\r
+0x1132a, 0x11330,\r
+0x11332, 0x11333,\r
+0x11335, 0x11339,\r
+0x1133b, 0x11344,\r
+0x11347, 0x11348,\r
+0x1134b, 0x1134d,\r
+0x11350, 0x11350,\r
+0x11357, 0x11357,\r
+0x1135d, 0x11363,\r
+0x11366, 0x1136c,\r
+0x11370, 0x11374,\r
+0x11400, 0x11459,\r
+0x1145b, 0x1145b,\r
+0x1145d, 0x1145e,\r
+0x11480, 0x114c7,\r
+0x114d0, 0x114d9,\r
+0x11580, 0x115b5,\r
+0x115b8, 0x115dd,\r
+0x11600, 0x11644,\r
+0x11650, 0x11659,\r
+0x11660, 0x1166c,\r
+0x11680, 0x116b7,\r
+0x116c0, 0x116c9,\r
+0x11700, 0x1171a,\r
+0x1171d, 0x1172b,\r
+0x11730, 0x1173f,\r
+0x11800, 0x1183b,\r
+0x118a0, 0x118f2,\r
+0x118ff, 0x118ff,\r
+0x11a00, 0x11a47,\r
+0x11a50, 0x11a83,\r
+0x11a86, 0x11aa2,\r
+0x11ac0, 0x11af8,\r
+0x11c00, 0x11c08,\r
+0x11c0a, 0x11c36,\r
+0x11c38, 0x11c45,\r
+0x11c50, 0x11c6c,\r
+0x11c70, 0x11c8f,\r
+0x11c92, 0x11ca7,\r
+0x11ca9, 0x11cb6,\r
+0x11d00, 0x11d06,\r
+0x11d08, 0x11d09,\r
+0x11d0b, 0x11d36,\r
+0x11d3a, 0x11d3a,\r
+0x11d3c, 0x11d3d,\r
+0x11d3f, 0x11d47,\r
+0x11d50, 0x11d59,\r
+0x11d60, 0x11d65,\r
+0x11d67, 0x11d68,\r
+0x11d6a, 0x11d8e,\r
+0x11d90, 0x11d91,\r
+0x11d93, 0x11d98,\r
+0x11da0, 0x11da9,\r
+0x11ee0, 0x11ef8,\r
+0x12000, 0x12399,\r
+0x12400, 0x1246e,\r
+0x12470, 0x12474,\r
+0x12480, 0x12543,\r
+0x13000, 0x1342e,\r
+0x14400, 0x14646,\r
+0x16800, 0x16a38,\r
+0x16a40, 0x16a5e,\r
+0x16a60, 0x16a69,\r
+0x16a6e, 0x16a6f,\r
+0x16ad0, 0x16aed,\r
+0x16af0, 0x16af5,\r
+0x16b00, 0x16b45,\r
+0x16b50, 0x16b59,\r
+0x16b5b, 0x16b61,\r
+0x16b63, 0x16b77,\r
+0x16b7d, 0x16b8f,\r
+0x16e40, 0x16e9a,\r
+0x16f00, 0x16f44,\r
+0x16f50, 0x16f7e,\r
+0x16f8f, 0x16f9f,\r
+0x16fe0, 0x16fe1,\r
+0x17000, 0x187f1,\r
+0x18800, 0x18af2,\r
+0x1b000, 0x1b11e,\r
+0x1b170, 0x1b2fb,\r
+0x1bc00, 0x1bc6a,\r
+0x1bc70, 0x1bc7c,\r
+0x1bc80, 0x1bc88,\r
+0x1bc90, 0x1bc99,\r
+0x1bc9c, 0x1bca3,\r
+0x1d000, 0x1d0f5,\r
+0x1d100, 0x1d126,\r
+0x1d129, 0x1d1e8,\r
+0x1d200, 0x1d245,\r
+0x1d2e0, 0x1d2f3,\r
+0x1d300, 0x1d356,\r
+0x1d360, 0x1d378,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d7cb,\r
+0x1d7ce, 0x1da8b,\r
+0x1da9b, 0x1da9f,\r
+0x1daa1, 0x1daaf,\r
+0x1e000, 0x1e006,\r
+0x1e008, 0x1e018,\r
+0x1e01b, 0x1e021,\r
+0x1e023, 0x1e024,\r
+0x1e026, 0x1e02a,\r
+0x1e800, 0x1e8c4,\r
+0x1e8c7, 0x1e8d6,\r
+0x1e900, 0x1e94a,\r
+0x1e950, 0x1e959,\r
+0x1e95e, 0x1e95f,\r
+0x1ec71, 0x1ecb4,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+0x1eef0, 0x1eef1,\r
+0x1f000, 0x1f02b,\r
+0x1f030, 0x1f093,\r
+0x1f0a0, 0x1f0ae,\r
+0x1f0b1, 0x1f0bf,\r
+0x1f0c1, 0x1f0cf,\r
+0x1f0d1, 0x1f0f5,\r
+0x1f100, 0x1f10c,\r
+0x1f110, 0x1f16b,\r
+0x1f170, 0x1f1ac,\r
+0x1f1e6, 0x1f202,\r
+0x1f210, 0x1f23b,\r
+0x1f240, 0x1f248,\r
+0x1f250, 0x1f251,\r
+0x1f260, 0x1f265,\r
+0x1f300, 0x1f6d4,\r
+0x1f6e0, 0x1f6ec,\r
+0x1f6f0, 0x1f6f9,\r
+0x1f700, 0x1f773,\r
+0x1f780, 0x1f7d8,\r
+0x1f800, 0x1f80b,\r
+0x1f810, 0x1f847,\r
+0x1f850, 0x1f859,\r
+0x1f860, 0x1f887,\r
+0x1f890, 0x1f8ad,\r
+0x1f900, 0x1f90b,\r
+0x1f910, 0x1f93e,\r
+0x1f940, 0x1f970,\r
+0x1f973, 0x1f976,\r
+0x1f97a, 0x1f97a,\r
+0x1f97c, 0x1f9a2,\r
+0x1f9b0, 0x1f9b9,\r
+0x1f9c0, 0x1f9c2,\r
+0x1f9d0, 0x1f9ff,\r
+0x1fa60, 0x1fa6d,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+0x2f800, 0x2fa1d,\r
+0xe0001, 0xe0001,\r
+0xe0020, 0xe007f,\r
+0xe0100, 0xe01ef,\r
+0xf0000, 0xffffd,\r
+0x100000, 0x10fffd,\r
+}; /* END of CR_Print */\r
+\r
+/* PROPERTY: 'Punct': POSIX [[:Punct:]] */\r
+static const OnigCodePoint\r
+CR_Punct[] = { 178,\r
+0x0021, 0x0023,\r
+0x0025, 0x002a,\r
+0x002c, 0x002f,\r
+0x003a, 0x003b,\r
+0x003f, 0x0040,\r
+0x005b, 0x005d,\r
+0x005f, 0x005f,\r
+0x007b, 0x007b,\r
+0x007d, 0x007d,\r
+0x00a1, 0x00a1,\r
+0x00a7, 0x00a7,\r
+0x00ab, 0x00ab,\r
+0x00b6, 0x00b7,\r
+0x00bb, 0x00bb,\r
+0x00bf, 0x00bf,\r
+0x037e, 0x037e,\r
+0x0387, 0x0387,\r
+0x055a, 0x055f,\r
+0x0589, 0x058a,\r
+0x05be, 0x05be,\r
+0x05c0, 0x05c0,\r
+0x05c3, 0x05c3,\r
+0x05c6, 0x05c6,\r
+0x05f3, 0x05f4,\r
+0x0609, 0x060a,\r
+0x060c, 0x060d,\r
+0x061b, 0x061b,\r
+0x061e, 0x061f,\r
+0x066a, 0x066d,\r
+0x06d4, 0x06d4,\r
+0x0700, 0x070d,\r
+0x07f7, 0x07f9,\r
+0x0830, 0x083e,\r
+0x085e, 0x085e,\r
+0x0964, 0x0965,\r
+0x0970, 0x0970,\r
+0x09fd, 0x09fd,\r
+0x0a76, 0x0a76,\r
+0x0af0, 0x0af0,\r
+0x0c84, 0x0c84,\r
+0x0df4, 0x0df4,\r
+0x0e4f, 0x0e4f,\r
+0x0e5a, 0x0e5b,\r
+0x0f04, 0x0f12,\r
+0x0f14, 0x0f14,\r
+0x0f3a, 0x0f3d,\r
+0x0f85, 0x0f85,\r
+0x0fd0, 0x0fd4,\r
+0x0fd9, 0x0fda,\r
+0x104a, 0x104f,\r
+0x10fb, 0x10fb,\r
+0x1360, 0x1368,\r
+0x1400, 0x1400,\r
+0x166d, 0x166e,\r
+0x169b, 0x169c,\r
+0x16eb, 0x16ed,\r
+0x1735, 0x1736,\r
+0x17d4, 0x17d6,\r
+0x17d8, 0x17da,\r
+0x1800, 0x180a,\r
+0x1944, 0x1945,\r
+0x1a1e, 0x1a1f,\r
+0x1aa0, 0x1aa6,\r
+0x1aa8, 0x1aad,\r
+0x1b5a, 0x1b60,\r
+0x1bfc, 0x1bff,\r
+0x1c3b, 0x1c3f,\r
+0x1c7e, 0x1c7f,\r
+0x1cc0, 0x1cc7,\r
+0x1cd3, 0x1cd3,\r
+0x2010, 0x2027,\r
+0x2030, 0x2043,\r
+0x2045, 0x2051,\r
+0x2053, 0x205e,\r
+0x207d, 0x207e,\r
+0x208d, 0x208e,\r
+0x2308, 0x230b,\r
+0x2329, 0x232a,\r
+0x2768, 0x2775,\r
+0x27c5, 0x27c6,\r
+0x27e6, 0x27ef,\r
+0x2983, 0x2998,\r
+0x29d8, 0x29db,\r
+0x29fc, 0x29fd,\r
+0x2cf9, 0x2cfc,\r
+0x2cfe, 0x2cff,\r
+0x2d70, 0x2d70,\r
+0x2e00, 0x2e2e,\r
+0x2e30, 0x2e4e,\r
+0x3001, 0x3003,\r
+0x3008, 0x3011,\r
+0x3014, 0x301f,\r
+0x3030, 0x3030,\r
+0x303d, 0x303d,\r
+0x30a0, 0x30a0,\r
+0x30fb, 0x30fb,\r
+0xa4fe, 0xa4ff,\r
+0xa60d, 0xa60f,\r
+0xa673, 0xa673,\r
+0xa67e, 0xa67e,\r
+0xa6f2, 0xa6f7,\r
+0xa874, 0xa877,\r
+0xa8ce, 0xa8cf,\r
+0xa8f8, 0xa8fa,\r
+0xa8fc, 0xa8fc,\r
+0xa92e, 0xa92f,\r
+0xa95f, 0xa95f,\r
+0xa9c1, 0xa9cd,\r
+0xa9de, 0xa9df,\r
+0xaa5c, 0xaa5f,\r
+0xaade, 0xaadf,\r
+0xaaf0, 0xaaf1,\r
+0xabeb, 0xabeb,\r
+0xfd3e, 0xfd3f,\r
+0xfe10, 0xfe19,\r
+0xfe30, 0xfe52,\r
+0xfe54, 0xfe61,\r
+0xfe63, 0xfe63,\r
+0xfe68, 0xfe68,\r
+0xfe6a, 0xfe6b,\r
+0xff01, 0xff03,\r
+0xff05, 0xff0a,\r
+0xff0c, 0xff0f,\r
+0xff1a, 0xff1b,\r
+0xff1f, 0xff20,\r
+0xff3b, 0xff3d,\r
+0xff3f, 0xff3f,\r
+0xff5b, 0xff5b,\r
+0xff5d, 0xff5d,\r
+0xff5f, 0xff65,\r
+0x10100, 0x10102,\r
+0x1039f, 0x1039f,\r
+0x103d0, 0x103d0,\r
+0x1056f, 0x1056f,\r
+0x10857, 0x10857,\r
+0x1091f, 0x1091f,\r
+0x1093f, 0x1093f,\r
+0x10a50, 0x10a58,\r
+0x10a7f, 0x10a7f,\r
+0x10af0, 0x10af6,\r
+0x10b39, 0x10b3f,\r
+0x10b99, 0x10b9c,\r
+0x10f55, 0x10f59,\r
+0x11047, 0x1104d,\r
+0x110bb, 0x110bc,\r
+0x110be, 0x110c1,\r
+0x11140, 0x11143,\r
+0x11174, 0x11175,\r
+0x111c5, 0x111c8,\r
+0x111cd, 0x111cd,\r
+0x111db, 0x111db,\r
+0x111dd, 0x111df,\r
+0x11238, 0x1123d,\r
+0x112a9, 0x112a9,\r
+0x1144b, 0x1144f,\r
+0x1145b, 0x1145b,\r
+0x1145d, 0x1145d,\r
+0x114c6, 0x114c6,\r
+0x115c1, 0x115d7,\r
+0x11641, 0x11643,\r
+0x11660, 0x1166c,\r
+0x1173c, 0x1173e,\r
+0x1183b, 0x1183b,\r
+0x11a3f, 0x11a46,\r
+0x11a9a, 0x11a9c,\r
+0x11a9e, 0x11aa2,\r
+0x11c41, 0x11c45,\r
+0x11c70, 0x11c71,\r
+0x11ef7, 0x11ef8,\r
+0x12470, 0x12474,\r
+0x16a6e, 0x16a6f,\r
+0x16af5, 0x16af5,\r
+0x16b37, 0x16b3b,\r
+0x16b44, 0x16b44,\r
+0x16e97, 0x16e9a,\r
+0x1bc9f, 0x1bc9f,\r
+0x1da87, 0x1da8b,\r
+0x1e95e, 0x1e95f,\r
+}; /* END of CR_Punct */\r
+\r
+/* PROPERTY: 'Space': POSIX [[:Space:]] */\r
+static const OnigCodePoint\r
+CR_Space[] = { 10,\r
+0x0009, 0x000d,\r
+0x0020, 0x0020,\r
+0x0085, 0x0085,\r
+0x00a0, 0x00a0,\r
+0x1680, 0x1680,\r
+0x2000, 0x200a,\r
+0x2028, 0x2029,\r
+0x202f, 0x202f,\r
+0x205f, 0x205f,\r
+0x3000, 0x3000,\r
+}; /* END of CR_Space */\r
+\r
+/* PROPERTY: 'Upper': POSIX [[:Upper:]] */\r
+static const OnigCodePoint\r
+CR_Upper[] = { 636,\r
+0x0041, 0x005a,\r
+0x00c0, 0x00d6,\r
+0x00d8, 0x00de,\r
+0x0100, 0x0100,\r
+0x0102, 0x0102,\r
+0x0104, 0x0104,\r
+0x0106, 0x0106,\r
+0x0108, 0x0108,\r
+0x010a, 0x010a,\r
+0x010c, 0x010c,\r
+0x010e, 0x010e,\r
+0x0110, 0x0110,\r
+0x0112, 0x0112,\r
+0x0114, 0x0114,\r
+0x0116, 0x0116,\r
+0x0118, 0x0118,\r
+0x011a, 0x011a,\r
+0x011c, 0x011c,\r
+0x011e, 0x011e,\r
+0x0120, 0x0120,\r
+0x0122, 0x0122,\r
+0x0124, 0x0124,\r
+0x0126, 0x0126,\r
+0x0128, 0x0128,\r
+0x012a, 0x012a,\r
+0x012c, 0x012c,\r
+0x012e, 0x012e,\r
+0x0130, 0x0130,\r
+0x0132, 0x0132,\r
+0x0134, 0x0134,\r
+0x0136, 0x0136,\r
+0x0139, 0x0139,\r
+0x013b, 0x013b,\r
+0x013d, 0x013d,\r
+0x013f, 0x013f,\r
+0x0141, 0x0141,\r
+0x0143, 0x0143,\r
+0x0145, 0x0145,\r
+0x0147, 0x0147,\r
+0x014a, 0x014a,\r
+0x014c, 0x014c,\r
+0x014e, 0x014e,\r
+0x0150, 0x0150,\r
+0x0152, 0x0152,\r
+0x0154, 0x0154,\r
+0x0156, 0x0156,\r
+0x0158, 0x0158,\r
+0x015a, 0x015a,\r
+0x015c, 0x015c,\r
+0x015e, 0x015e,\r
+0x0160, 0x0160,\r
+0x0162, 0x0162,\r
+0x0164, 0x0164,\r
+0x0166, 0x0166,\r
+0x0168, 0x0168,\r
+0x016a, 0x016a,\r
+0x016c, 0x016c,\r
+0x016e, 0x016e,\r
+0x0170, 0x0170,\r
+0x0172, 0x0172,\r
+0x0174, 0x0174,\r
+0x0176, 0x0176,\r
+0x0178, 0x0179,\r
+0x017b, 0x017b,\r
+0x017d, 0x017d,\r
+0x0181, 0x0182,\r
+0x0184, 0x0184,\r
+0x0186, 0x0187,\r
+0x0189, 0x018b,\r
+0x018e, 0x0191,\r
+0x0193, 0x0194,\r
+0x0196, 0x0198,\r
+0x019c, 0x019d,\r
+0x019f, 0x01a0,\r
+0x01a2, 0x01a2,\r
+0x01a4, 0x01a4,\r
+0x01a6, 0x01a7,\r
+0x01a9, 0x01a9,\r
+0x01ac, 0x01ac,\r
+0x01ae, 0x01af,\r
+0x01b1, 0x01b3,\r
+0x01b5, 0x01b5,\r
+0x01b7, 0x01b8,\r
+0x01bc, 0x01bc,\r
+0x01c4, 0x01c4,\r
+0x01c7, 0x01c7,\r
+0x01ca, 0x01ca,\r
+0x01cd, 0x01cd,\r
+0x01cf, 0x01cf,\r
+0x01d1, 0x01d1,\r
+0x01d3, 0x01d3,\r
+0x01d5, 0x01d5,\r
+0x01d7, 0x01d7,\r
+0x01d9, 0x01d9,\r
+0x01db, 0x01db,\r
+0x01de, 0x01de,\r
+0x01e0, 0x01e0,\r
+0x01e2, 0x01e2,\r
+0x01e4, 0x01e4,\r
+0x01e6, 0x01e6,\r
+0x01e8, 0x01e8,\r
+0x01ea, 0x01ea,\r
+0x01ec, 0x01ec,\r
+0x01ee, 0x01ee,\r
+0x01f1, 0x01f1,\r
+0x01f4, 0x01f4,\r
+0x01f6, 0x01f8,\r
+0x01fa, 0x01fa,\r
+0x01fc, 0x01fc,\r
+0x01fe, 0x01fe,\r
+0x0200, 0x0200,\r
+0x0202, 0x0202,\r
+0x0204, 0x0204,\r
+0x0206, 0x0206,\r
+0x0208, 0x0208,\r
+0x020a, 0x020a,\r
+0x020c, 0x020c,\r
+0x020e, 0x020e,\r
+0x0210, 0x0210,\r
+0x0212, 0x0212,\r
+0x0214, 0x0214,\r
+0x0216, 0x0216,\r
+0x0218, 0x0218,\r
+0x021a, 0x021a,\r
+0x021c, 0x021c,\r
+0x021e, 0x021e,\r
+0x0220, 0x0220,\r
+0x0222, 0x0222,\r
+0x0224, 0x0224,\r
+0x0226, 0x0226,\r
+0x0228, 0x0228,\r
+0x022a, 0x022a,\r
+0x022c, 0x022c,\r
+0x022e, 0x022e,\r
+0x0230, 0x0230,\r
+0x0232, 0x0232,\r
+0x023a, 0x023b,\r
+0x023d, 0x023e,\r
+0x0241, 0x0241,\r
+0x0243, 0x0246,\r
+0x0248, 0x0248,\r
+0x024a, 0x024a,\r
+0x024c, 0x024c,\r
+0x024e, 0x024e,\r
+0x0370, 0x0370,\r
+0x0372, 0x0372,\r
+0x0376, 0x0376,\r
+0x037f, 0x037f,\r
+0x0386, 0x0386,\r
+0x0388, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x038f,\r
+0x0391, 0x03a1,\r
+0x03a3, 0x03ab,\r
+0x03cf, 0x03cf,\r
+0x03d2, 0x03d4,\r
+0x03d8, 0x03d8,\r
+0x03da, 0x03da,\r
+0x03dc, 0x03dc,\r
+0x03de, 0x03de,\r
+0x03e0, 0x03e0,\r
+0x03e2, 0x03e2,\r
+0x03e4, 0x03e4,\r
+0x03e6, 0x03e6,\r
+0x03e8, 0x03e8,\r
+0x03ea, 0x03ea,\r
+0x03ec, 0x03ec,\r
+0x03ee, 0x03ee,\r
+0x03f4, 0x03f4,\r
+0x03f7, 0x03f7,\r
+0x03f9, 0x03fa,\r
+0x03fd, 0x042f,\r
+0x0460, 0x0460,\r
+0x0462, 0x0462,\r
+0x0464, 0x0464,\r
+0x0466, 0x0466,\r
+0x0468, 0x0468,\r
+0x046a, 0x046a,\r
+0x046c, 0x046c,\r
+0x046e, 0x046e,\r
+0x0470, 0x0470,\r
+0x0472, 0x0472,\r
+0x0474, 0x0474,\r
+0x0476, 0x0476,\r
+0x0478, 0x0478,\r
+0x047a, 0x047a,\r
+0x047c, 0x047c,\r
+0x047e, 0x047e,\r
+0x0480, 0x0480,\r
+0x048a, 0x048a,\r
+0x048c, 0x048c,\r
+0x048e, 0x048e,\r
+0x0490, 0x0490,\r
+0x0492, 0x0492,\r
+0x0494, 0x0494,\r
+0x0496, 0x0496,\r
+0x0498, 0x0498,\r
+0x049a, 0x049a,\r
+0x049c, 0x049c,\r
+0x049e, 0x049e,\r
+0x04a0, 0x04a0,\r
+0x04a2, 0x04a2,\r
+0x04a4, 0x04a4,\r
+0x04a6, 0x04a6,\r
+0x04a8, 0x04a8,\r
+0x04aa, 0x04aa,\r
+0x04ac, 0x04ac,\r
+0x04ae, 0x04ae,\r
+0x04b0, 0x04b0,\r
+0x04b2, 0x04b2,\r
+0x04b4, 0x04b4,\r
+0x04b6, 0x04b6,\r
+0x04b8, 0x04b8,\r
+0x04ba, 0x04ba,\r
+0x04bc, 0x04bc,\r
+0x04be, 0x04be,\r
+0x04c0, 0x04c1,\r
+0x04c3, 0x04c3,\r
+0x04c5, 0x04c5,\r
+0x04c7, 0x04c7,\r
+0x04c9, 0x04c9,\r
+0x04cb, 0x04cb,\r
+0x04cd, 0x04cd,\r
+0x04d0, 0x04d0,\r
+0x04d2, 0x04d2,\r
+0x04d4, 0x04d4,\r
+0x04d6, 0x04d6,\r
+0x04d8, 0x04d8,\r
+0x04da, 0x04da,\r
+0x04dc, 0x04dc,\r
+0x04de, 0x04de,\r
+0x04e0, 0x04e0,\r
+0x04e2, 0x04e2,\r
+0x04e4, 0x04e4,\r
+0x04e6, 0x04e6,\r
+0x04e8, 0x04e8,\r
+0x04ea, 0x04ea,\r
+0x04ec, 0x04ec,\r
+0x04ee, 0x04ee,\r
+0x04f0, 0x04f0,\r
+0x04f2, 0x04f2,\r
+0x04f4, 0x04f4,\r
+0x04f6, 0x04f6,\r
+0x04f8, 0x04f8,\r
+0x04fa, 0x04fa,\r
+0x04fc, 0x04fc,\r
+0x04fe, 0x04fe,\r
+0x0500, 0x0500,\r
+0x0502, 0x0502,\r
+0x0504, 0x0504,\r
+0x0506, 0x0506,\r
+0x0508, 0x0508,\r
+0x050a, 0x050a,\r
+0x050c, 0x050c,\r
+0x050e, 0x050e,\r
+0x0510, 0x0510,\r
+0x0512, 0x0512,\r
+0x0514, 0x0514,\r
+0x0516, 0x0516,\r
+0x0518, 0x0518,\r
+0x051a, 0x051a,\r
+0x051c, 0x051c,\r
+0x051e, 0x051e,\r
+0x0520, 0x0520,\r
+0x0522, 0x0522,\r
+0x0524, 0x0524,\r
+0x0526, 0x0526,\r
+0x0528, 0x0528,\r
+0x052a, 0x052a,\r
+0x052c, 0x052c,\r
+0x052e, 0x052e,\r
+0x0531, 0x0556,\r
+0x10a0, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x13a0, 0x13f5,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cbf,\r
+0x1e00, 0x1e00,\r
+0x1e02, 0x1e02,\r
+0x1e04, 0x1e04,\r
+0x1e06, 0x1e06,\r
+0x1e08, 0x1e08,\r
+0x1e0a, 0x1e0a,\r
+0x1e0c, 0x1e0c,\r
+0x1e0e, 0x1e0e,\r
+0x1e10, 0x1e10,\r
+0x1e12, 0x1e12,\r
+0x1e14, 0x1e14,\r
+0x1e16, 0x1e16,\r
+0x1e18, 0x1e18,\r
+0x1e1a, 0x1e1a,\r
+0x1e1c, 0x1e1c,\r
+0x1e1e, 0x1e1e,\r
+0x1e20, 0x1e20,\r
+0x1e22, 0x1e22,\r
+0x1e24, 0x1e24,\r
+0x1e26, 0x1e26,\r
+0x1e28, 0x1e28,\r
+0x1e2a, 0x1e2a,\r
+0x1e2c, 0x1e2c,\r
+0x1e2e, 0x1e2e,\r
+0x1e30, 0x1e30,\r
+0x1e32, 0x1e32,\r
+0x1e34, 0x1e34,\r
+0x1e36, 0x1e36,\r
+0x1e38, 0x1e38,\r
+0x1e3a, 0x1e3a,\r
+0x1e3c, 0x1e3c,\r
+0x1e3e, 0x1e3e,\r
+0x1e40, 0x1e40,\r
+0x1e42, 0x1e42,\r
+0x1e44, 0x1e44,\r
+0x1e46, 0x1e46,\r
+0x1e48, 0x1e48,\r
+0x1e4a, 0x1e4a,\r
+0x1e4c, 0x1e4c,\r
+0x1e4e, 0x1e4e,\r
+0x1e50, 0x1e50,\r
+0x1e52, 0x1e52,\r
+0x1e54, 0x1e54,\r
+0x1e56, 0x1e56,\r
+0x1e58, 0x1e58,\r
+0x1e5a, 0x1e5a,\r
+0x1e5c, 0x1e5c,\r
+0x1e5e, 0x1e5e,\r
+0x1e60, 0x1e60,\r
+0x1e62, 0x1e62,\r
+0x1e64, 0x1e64,\r
+0x1e66, 0x1e66,\r
+0x1e68, 0x1e68,\r
+0x1e6a, 0x1e6a,\r
+0x1e6c, 0x1e6c,\r
+0x1e6e, 0x1e6e,\r
+0x1e70, 0x1e70,\r
+0x1e72, 0x1e72,\r
+0x1e74, 0x1e74,\r
+0x1e76, 0x1e76,\r
+0x1e78, 0x1e78,\r
+0x1e7a, 0x1e7a,\r
+0x1e7c, 0x1e7c,\r
+0x1e7e, 0x1e7e,\r
+0x1e80, 0x1e80,\r
+0x1e82, 0x1e82,\r
+0x1e84, 0x1e84,\r
+0x1e86, 0x1e86,\r
+0x1e88, 0x1e88,\r
+0x1e8a, 0x1e8a,\r
+0x1e8c, 0x1e8c,\r
+0x1e8e, 0x1e8e,\r
+0x1e90, 0x1e90,\r
+0x1e92, 0x1e92,\r
+0x1e94, 0x1e94,\r
+0x1e9e, 0x1e9e,\r
+0x1ea0, 0x1ea0,\r
+0x1ea2, 0x1ea2,\r
+0x1ea4, 0x1ea4,\r
+0x1ea6, 0x1ea6,\r
+0x1ea8, 0x1ea8,\r
+0x1eaa, 0x1eaa,\r
+0x1eac, 0x1eac,\r
+0x1eae, 0x1eae,\r
+0x1eb0, 0x1eb0,\r
+0x1eb2, 0x1eb2,\r
+0x1eb4, 0x1eb4,\r
+0x1eb6, 0x1eb6,\r
+0x1eb8, 0x1eb8,\r
+0x1eba, 0x1eba,\r
+0x1ebc, 0x1ebc,\r
+0x1ebe, 0x1ebe,\r
+0x1ec0, 0x1ec0,\r
+0x1ec2, 0x1ec2,\r
+0x1ec4, 0x1ec4,\r
+0x1ec6, 0x1ec6,\r
+0x1ec8, 0x1ec8,\r
+0x1eca, 0x1eca,\r
+0x1ecc, 0x1ecc,\r
+0x1ece, 0x1ece,\r
+0x1ed0, 0x1ed0,\r
+0x1ed2, 0x1ed2,\r
+0x1ed4, 0x1ed4,\r
+0x1ed6, 0x1ed6,\r
+0x1ed8, 0x1ed8,\r
+0x1eda, 0x1eda,\r
+0x1edc, 0x1edc,\r
+0x1ede, 0x1ede,\r
+0x1ee0, 0x1ee0,\r
+0x1ee2, 0x1ee2,\r
+0x1ee4, 0x1ee4,\r
+0x1ee6, 0x1ee6,\r
+0x1ee8, 0x1ee8,\r
+0x1eea, 0x1eea,\r
+0x1eec, 0x1eec,\r
+0x1eee, 0x1eee,\r
+0x1ef0, 0x1ef0,\r
+0x1ef2, 0x1ef2,\r
+0x1ef4, 0x1ef4,\r
+0x1ef6, 0x1ef6,\r
+0x1ef8, 0x1ef8,\r
+0x1efa, 0x1efa,\r
+0x1efc, 0x1efc,\r
+0x1efe, 0x1efe,\r
+0x1f08, 0x1f0f,\r
+0x1f18, 0x1f1d,\r
+0x1f28, 0x1f2f,\r
+0x1f38, 0x1f3f,\r
+0x1f48, 0x1f4d,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f5f,\r
+0x1f68, 0x1f6f,\r
+0x1fb8, 0x1fbb,\r
+0x1fc8, 0x1fcb,\r
+0x1fd8, 0x1fdb,\r
+0x1fe8, 0x1fec,\r
+0x1ff8, 0x1ffb,\r
+0x2102, 0x2102,\r
+0x2107, 0x2107,\r
+0x210b, 0x210d,\r
+0x2110, 0x2112,\r
+0x2115, 0x2115,\r
+0x2119, 0x211d,\r
+0x2124, 0x2124,\r
+0x2126, 0x2126,\r
+0x2128, 0x2128,\r
+0x212a, 0x212d,\r
+0x2130, 0x2133,\r
+0x213e, 0x213f,\r
+0x2145, 0x2145,\r
+0x2160, 0x216f,\r
+0x2183, 0x2183,\r
+0x24b6, 0x24cf,\r
+0x2c00, 0x2c2e,\r
+0x2c60, 0x2c60,\r
+0x2c62, 0x2c64,\r
+0x2c67, 0x2c67,\r
+0x2c69, 0x2c69,\r
+0x2c6b, 0x2c6b,\r
+0x2c6d, 0x2c70,\r
+0x2c72, 0x2c72,\r
+0x2c75, 0x2c75,\r
+0x2c7e, 0x2c80,\r
+0x2c82, 0x2c82,\r
+0x2c84, 0x2c84,\r
+0x2c86, 0x2c86,\r
+0x2c88, 0x2c88,\r
+0x2c8a, 0x2c8a,\r
+0x2c8c, 0x2c8c,\r
+0x2c8e, 0x2c8e,\r
+0x2c90, 0x2c90,\r
+0x2c92, 0x2c92,\r
+0x2c94, 0x2c94,\r
+0x2c96, 0x2c96,\r
+0x2c98, 0x2c98,\r
+0x2c9a, 0x2c9a,\r
+0x2c9c, 0x2c9c,\r
+0x2c9e, 0x2c9e,\r
+0x2ca0, 0x2ca0,\r
+0x2ca2, 0x2ca2,\r
+0x2ca4, 0x2ca4,\r
+0x2ca6, 0x2ca6,\r
+0x2ca8, 0x2ca8,\r
+0x2caa, 0x2caa,\r
+0x2cac, 0x2cac,\r
+0x2cae, 0x2cae,\r
+0x2cb0, 0x2cb0,\r
+0x2cb2, 0x2cb2,\r
+0x2cb4, 0x2cb4,\r
+0x2cb6, 0x2cb6,\r
+0x2cb8, 0x2cb8,\r
+0x2cba, 0x2cba,\r
+0x2cbc, 0x2cbc,\r
+0x2cbe, 0x2cbe,\r
+0x2cc0, 0x2cc0,\r
+0x2cc2, 0x2cc2,\r
+0x2cc4, 0x2cc4,\r
+0x2cc6, 0x2cc6,\r
+0x2cc8, 0x2cc8,\r
+0x2cca, 0x2cca,\r
+0x2ccc, 0x2ccc,\r
+0x2cce, 0x2cce,\r
+0x2cd0, 0x2cd0,\r
+0x2cd2, 0x2cd2,\r
+0x2cd4, 0x2cd4,\r
+0x2cd6, 0x2cd6,\r
+0x2cd8, 0x2cd8,\r
+0x2cda, 0x2cda,\r
+0x2cdc, 0x2cdc,\r
+0x2cde, 0x2cde,\r
+0x2ce0, 0x2ce0,\r
+0x2ce2, 0x2ce2,\r
+0x2ceb, 0x2ceb,\r
+0x2ced, 0x2ced,\r
+0x2cf2, 0x2cf2,\r
+0xa640, 0xa640,\r
+0xa642, 0xa642,\r
+0xa644, 0xa644,\r
+0xa646, 0xa646,\r
+0xa648, 0xa648,\r
+0xa64a, 0xa64a,\r
+0xa64c, 0xa64c,\r
+0xa64e, 0xa64e,\r
+0xa650, 0xa650,\r
+0xa652, 0xa652,\r
+0xa654, 0xa654,\r
+0xa656, 0xa656,\r
+0xa658, 0xa658,\r
+0xa65a, 0xa65a,\r
+0xa65c, 0xa65c,\r
+0xa65e, 0xa65e,\r
+0xa660, 0xa660,\r
+0xa662, 0xa662,\r
+0xa664, 0xa664,\r
+0xa666, 0xa666,\r
+0xa668, 0xa668,\r
+0xa66a, 0xa66a,\r
+0xa66c, 0xa66c,\r
+0xa680, 0xa680,\r
+0xa682, 0xa682,\r
+0xa684, 0xa684,\r
+0xa686, 0xa686,\r
+0xa688, 0xa688,\r
+0xa68a, 0xa68a,\r
+0xa68c, 0xa68c,\r
+0xa68e, 0xa68e,\r
+0xa690, 0xa690,\r
+0xa692, 0xa692,\r
+0xa694, 0xa694,\r
+0xa696, 0xa696,\r
+0xa698, 0xa698,\r
+0xa69a, 0xa69a,\r
+0xa722, 0xa722,\r
+0xa724, 0xa724,\r
+0xa726, 0xa726,\r
+0xa728, 0xa728,\r
+0xa72a, 0xa72a,\r
+0xa72c, 0xa72c,\r
+0xa72e, 0xa72e,\r
+0xa732, 0xa732,\r
+0xa734, 0xa734,\r
+0xa736, 0xa736,\r
+0xa738, 0xa738,\r
+0xa73a, 0xa73a,\r
+0xa73c, 0xa73c,\r
+0xa73e, 0xa73e,\r
+0xa740, 0xa740,\r
+0xa742, 0xa742,\r
+0xa744, 0xa744,\r
+0xa746, 0xa746,\r
+0xa748, 0xa748,\r
+0xa74a, 0xa74a,\r
+0xa74c, 0xa74c,\r
+0xa74e, 0xa74e,\r
+0xa750, 0xa750,\r
+0xa752, 0xa752,\r
+0xa754, 0xa754,\r
+0xa756, 0xa756,\r
+0xa758, 0xa758,\r
+0xa75a, 0xa75a,\r
+0xa75c, 0xa75c,\r
+0xa75e, 0xa75e,\r
+0xa760, 0xa760,\r
+0xa762, 0xa762,\r
+0xa764, 0xa764,\r
+0xa766, 0xa766,\r
+0xa768, 0xa768,\r
+0xa76a, 0xa76a,\r
+0xa76c, 0xa76c,\r
+0xa76e, 0xa76e,\r
+0xa779, 0xa779,\r
+0xa77b, 0xa77b,\r
+0xa77d, 0xa77e,\r
+0xa780, 0xa780,\r
+0xa782, 0xa782,\r
+0xa784, 0xa784,\r
+0xa786, 0xa786,\r
+0xa78b, 0xa78b,\r
+0xa78d, 0xa78d,\r
+0xa790, 0xa790,\r
+0xa792, 0xa792,\r
+0xa796, 0xa796,\r
+0xa798, 0xa798,\r
+0xa79a, 0xa79a,\r
+0xa79c, 0xa79c,\r
+0xa79e, 0xa79e,\r
+0xa7a0, 0xa7a0,\r
+0xa7a2, 0xa7a2,\r
+0xa7a4, 0xa7a4,\r
+0xa7a6, 0xa7a6,\r
+0xa7a8, 0xa7a8,\r
+0xa7aa, 0xa7ae,\r
+0xa7b0, 0xa7b4,\r
+0xa7b6, 0xa7b6,\r
+0xa7b8, 0xa7b8,\r
+0xff21, 0xff3a,\r
+0x10400, 0x10427,\r
+0x104b0, 0x104d3,\r
+0x10c80, 0x10cb2,\r
+0x118a0, 0x118bf,\r
+0x16e40, 0x16e5f,\r
+0x1d400, 0x1d419,\r
+0x1d434, 0x1d44d,\r
+0x1d468, 0x1d481,\r
+0x1d49c, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b5,\r
+0x1d4d0, 0x1d4e9,\r
+0x1d504, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d538, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d56c, 0x1d585,\r
+0x1d5a0, 0x1d5b9,\r
+0x1d5d4, 0x1d5ed,\r
+0x1d608, 0x1d621,\r
+0x1d63c, 0x1d655,\r
+0x1d670, 0x1d689,\r
+0x1d6a8, 0x1d6c0,\r
+0x1d6e2, 0x1d6fa,\r
+0x1d71c, 0x1d734,\r
+0x1d756, 0x1d76e,\r
+0x1d790, 0x1d7a8,\r
+0x1d7ca, 0x1d7ca,\r
+0x1e900, 0x1e921,\r
+0x1f130, 0x1f149,\r
+0x1f150, 0x1f169,\r
+0x1f170, 0x1f189,\r
+}; /* END of CR_Upper */\r
+\r
+/* PROPERTY: 'XDigit': POSIX [[:XDigit:]] */\r
+static const OnigCodePoint\r
+CR_XDigit[] = { 3,\r
+0x0030, 0x0039,\r
+0x0041, 0x0046,\r
+0x0061, 0x0066,\r
+}; /* END of CR_XDigit */\r
+\r
+/* PROPERTY: 'Word': POSIX [[:Word:]] */\r
+static const OnigCodePoint\r
+CR_Word[] = { 710,\r
+0x0030, 0x0039,\r
+0x0041, 0x005a,\r
+0x005f, 0x005f,\r
+0x0061, 0x007a,\r
+0x00aa, 0x00aa,\r
+0x00b5, 0x00b5,\r
+0x00ba, 0x00ba,\r
+0x00c0, 0x00d6,\r
+0x00d8, 0x00f6,\r
+0x00f8, 0x02c1,\r
+0x02c6, 0x02d1,\r
+0x02e0, 0x02e4,\r
+0x02ec, 0x02ec,\r
+0x02ee, 0x02ee,\r
+0x0300, 0x0374,\r
+0x0376, 0x0377,\r
+0x037a, 0x037d,\r
+0x037f, 0x037f,\r
+0x0386, 0x0386,\r
+0x0388, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x03f5,\r
+0x03f7, 0x0481,\r
+0x0483, 0x052f,\r
+0x0531, 0x0556,\r
+0x0559, 0x0559,\r
+0x0560, 0x0588,\r
+0x0591, 0x05bd,\r
+0x05bf, 0x05bf,\r
+0x05c1, 0x05c2,\r
+0x05c4, 0x05c5,\r
+0x05c7, 0x05c7,\r
+0x05d0, 0x05ea,\r
+0x05ef, 0x05f2,\r
+0x0610, 0x061a,\r
+0x0620, 0x0669,\r
+0x066e, 0x06d3,\r
+0x06d5, 0x06dc,\r
+0x06df, 0x06e8,\r
+0x06ea, 0x06fc,\r
+0x06ff, 0x06ff,\r
+0x0710, 0x074a,\r
+0x074d, 0x07b1,\r
+0x07c0, 0x07f5,\r
+0x07fa, 0x07fa,\r
+0x07fd, 0x07fd,\r
+0x0800, 0x082d,\r
+0x0840, 0x085b,\r
+0x0860, 0x086a,\r
+0x08a0, 0x08b4,\r
+0x08b6, 0x08bd,\r
+0x08d3, 0x08e1,\r
+0x08e3, 0x0963,\r
+0x0966, 0x096f,\r
+0x0971, 0x0983,\r
+0x0985, 0x098c,\r
+0x098f, 0x0990,\r
+0x0993, 0x09a8,\r
+0x09aa, 0x09b0,\r
+0x09b2, 0x09b2,\r
+0x09b6, 0x09b9,\r
+0x09bc, 0x09c4,\r
+0x09c7, 0x09c8,\r
+0x09cb, 0x09ce,\r
+0x09d7, 0x09d7,\r
+0x09dc, 0x09dd,\r
+0x09df, 0x09e3,\r
+0x09e6, 0x09f1,\r
+0x09fc, 0x09fc,\r
+0x09fe, 0x09fe,\r
+0x0a01, 0x0a03,\r
+0x0a05, 0x0a0a,\r
+0x0a0f, 0x0a10,\r
+0x0a13, 0x0a28,\r
+0x0a2a, 0x0a30,\r
+0x0a32, 0x0a33,\r
+0x0a35, 0x0a36,\r
+0x0a38, 0x0a39,\r
+0x0a3c, 0x0a3c,\r
+0x0a3e, 0x0a42,\r
+0x0a47, 0x0a48,\r
+0x0a4b, 0x0a4d,\r
+0x0a51, 0x0a51,\r
+0x0a59, 0x0a5c,\r
+0x0a5e, 0x0a5e,\r
+0x0a66, 0x0a75,\r
+0x0a81, 0x0a83,\r
+0x0a85, 0x0a8d,\r
+0x0a8f, 0x0a91,\r
+0x0a93, 0x0aa8,\r
+0x0aaa, 0x0ab0,\r
+0x0ab2, 0x0ab3,\r
+0x0ab5, 0x0ab9,\r
+0x0abc, 0x0ac5,\r
+0x0ac7, 0x0ac9,\r
+0x0acb, 0x0acd,\r
+0x0ad0, 0x0ad0,\r
+0x0ae0, 0x0ae3,\r
+0x0ae6, 0x0aef,\r
+0x0af9, 0x0aff,\r
+0x0b01, 0x0b03,\r
+0x0b05, 0x0b0c,\r
+0x0b0f, 0x0b10,\r
+0x0b13, 0x0b28,\r
+0x0b2a, 0x0b30,\r
+0x0b32, 0x0b33,\r
+0x0b35, 0x0b39,\r
+0x0b3c, 0x0b44,\r
+0x0b47, 0x0b48,\r
+0x0b4b, 0x0b4d,\r
+0x0b56, 0x0b57,\r
+0x0b5c, 0x0b5d,\r
+0x0b5f, 0x0b63,\r
+0x0b66, 0x0b6f,\r
+0x0b71, 0x0b71,\r
+0x0b82, 0x0b83,\r
+0x0b85, 0x0b8a,\r
+0x0b8e, 0x0b90,\r
+0x0b92, 0x0b95,\r
+0x0b99, 0x0b9a,\r
+0x0b9c, 0x0b9c,\r
+0x0b9e, 0x0b9f,\r
+0x0ba3, 0x0ba4,\r
+0x0ba8, 0x0baa,\r
+0x0bae, 0x0bb9,\r
+0x0bbe, 0x0bc2,\r
+0x0bc6, 0x0bc8,\r
+0x0bca, 0x0bcd,\r
+0x0bd0, 0x0bd0,\r
+0x0bd7, 0x0bd7,\r
+0x0be6, 0x0bef,\r
+0x0c00, 0x0c0c,\r
+0x0c0e, 0x0c10,\r
+0x0c12, 0x0c28,\r
+0x0c2a, 0x0c39,\r
+0x0c3d, 0x0c44,\r
+0x0c46, 0x0c48,\r
+0x0c4a, 0x0c4d,\r
+0x0c55, 0x0c56,\r
+0x0c58, 0x0c5a,\r
+0x0c60, 0x0c63,\r
+0x0c66, 0x0c6f,\r
+0x0c80, 0x0c83,\r
+0x0c85, 0x0c8c,\r
+0x0c8e, 0x0c90,\r
+0x0c92, 0x0ca8,\r
+0x0caa, 0x0cb3,\r
+0x0cb5, 0x0cb9,\r
+0x0cbc, 0x0cc4,\r
+0x0cc6, 0x0cc8,\r
+0x0cca, 0x0ccd,\r
+0x0cd5, 0x0cd6,\r
+0x0cde, 0x0cde,\r
+0x0ce0, 0x0ce3,\r
+0x0ce6, 0x0cef,\r
+0x0cf1, 0x0cf2,\r
+0x0d00, 0x0d03,\r
+0x0d05, 0x0d0c,\r
+0x0d0e, 0x0d10,\r
+0x0d12, 0x0d44,\r
+0x0d46, 0x0d48,\r
+0x0d4a, 0x0d4e,\r
+0x0d54, 0x0d57,\r
+0x0d5f, 0x0d63,\r
+0x0d66, 0x0d6f,\r
+0x0d7a, 0x0d7f,\r
+0x0d82, 0x0d83,\r
+0x0d85, 0x0d96,\r
+0x0d9a, 0x0db1,\r
+0x0db3, 0x0dbb,\r
+0x0dbd, 0x0dbd,\r
+0x0dc0, 0x0dc6,\r
+0x0dca, 0x0dca,\r
+0x0dcf, 0x0dd4,\r
+0x0dd6, 0x0dd6,\r
+0x0dd8, 0x0ddf,\r
+0x0de6, 0x0def,\r
+0x0df2, 0x0df3,\r
+0x0e01, 0x0e3a,\r
+0x0e40, 0x0e4e,\r
+0x0e50, 0x0e59,\r
+0x0e81, 0x0e82,\r
+0x0e84, 0x0e84,\r
+0x0e87, 0x0e88,\r
+0x0e8a, 0x0e8a,\r
+0x0e8d, 0x0e8d,\r
+0x0e94, 0x0e97,\r
+0x0e99, 0x0e9f,\r
+0x0ea1, 0x0ea3,\r
+0x0ea5, 0x0ea5,\r
+0x0ea7, 0x0ea7,\r
+0x0eaa, 0x0eab,\r
+0x0ead, 0x0eb9,\r
+0x0ebb, 0x0ebd,\r
+0x0ec0, 0x0ec4,\r
+0x0ec6, 0x0ec6,\r
+0x0ec8, 0x0ecd,\r
+0x0ed0, 0x0ed9,\r
+0x0edc, 0x0edf,\r
+0x0f00, 0x0f00,\r
+0x0f18, 0x0f19,\r
+0x0f20, 0x0f29,\r
+0x0f35, 0x0f35,\r
+0x0f37, 0x0f37,\r
+0x0f39, 0x0f39,\r
+0x0f3e, 0x0f47,\r
+0x0f49, 0x0f6c,\r
+0x0f71, 0x0f84,\r
+0x0f86, 0x0f97,\r
+0x0f99, 0x0fbc,\r
+0x0fc6, 0x0fc6,\r
+0x1000, 0x1049,\r
+0x1050, 0x109d,\r
+0x10a0, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x10fa,\r
+0x10fc, 0x1248,\r
+0x124a, 0x124d,\r
+0x1250, 0x1256,\r
+0x1258, 0x1258,\r
+0x125a, 0x125d,\r
+0x1260, 0x1288,\r
+0x128a, 0x128d,\r
+0x1290, 0x12b0,\r
+0x12b2, 0x12b5,\r
+0x12b8, 0x12be,\r
+0x12c0, 0x12c0,\r
+0x12c2, 0x12c5,\r
+0x12c8, 0x12d6,\r
+0x12d8, 0x1310,\r
+0x1312, 0x1315,\r
+0x1318, 0x135a,\r
+0x135d, 0x135f,\r
+0x1380, 0x138f,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0x1401, 0x166c,\r
+0x166f, 0x167f,\r
+0x1681, 0x169a,\r
+0x16a0, 0x16ea,\r
+0x16ee, 0x16f8,\r
+0x1700, 0x170c,\r
+0x170e, 0x1714,\r
+0x1720, 0x1734,\r
+0x1740, 0x1753,\r
+0x1760, 0x176c,\r
+0x176e, 0x1770,\r
+0x1772, 0x1773,\r
+0x1780, 0x17d3,\r
+0x17d7, 0x17d7,\r
+0x17dc, 0x17dd,\r
+0x17e0, 0x17e9,\r
+0x180b, 0x180d,\r
+0x1810, 0x1819,\r
+0x1820, 0x1878,\r
+0x1880, 0x18aa,\r
+0x18b0, 0x18f5,\r
+0x1900, 0x191e,\r
+0x1920, 0x192b,\r
+0x1930, 0x193b,\r
+0x1946, 0x196d,\r
+0x1970, 0x1974,\r
+0x1980, 0x19ab,\r
+0x19b0, 0x19c9,\r
+0x19d0, 0x19d9,\r
+0x1a00, 0x1a1b,\r
+0x1a20, 0x1a5e,\r
+0x1a60, 0x1a7c,\r
+0x1a7f, 0x1a89,\r
+0x1a90, 0x1a99,\r
+0x1aa7, 0x1aa7,\r
+0x1ab0, 0x1abe,\r
+0x1b00, 0x1b4b,\r
+0x1b50, 0x1b59,\r
+0x1b6b, 0x1b73,\r
+0x1b80, 0x1bf3,\r
+0x1c00, 0x1c37,\r
+0x1c40, 0x1c49,\r
+0x1c4d, 0x1c7d,\r
+0x1c80, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cbf,\r
+0x1cd0, 0x1cd2,\r
+0x1cd4, 0x1cf9,\r
+0x1d00, 0x1df9,\r
+0x1dfb, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fbc,\r
+0x1fbe, 0x1fbe,\r
+0x1fc2, 0x1fc4,\r
+0x1fc6, 0x1fcc,\r
+0x1fd0, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fe0, 0x1fec,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffc,\r
+0x203f, 0x2040,\r
+0x2054, 0x2054,\r
+0x2071, 0x2071,\r
+0x207f, 0x207f,\r
+0x2090, 0x209c,\r
+0x20d0, 0x20f0,\r
+0x2102, 0x2102,\r
+0x2107, 0x2107,\r
+0x210a, 0x2113,\r
+0x2115, 0x2115,\r
+0x2119, 0x211d,\r
+0x2124, 0x2124,\r
+0x2126, 0x2126,\r
+0x2128, 0x2128,\r
+0x212a, 0x212d,\r
+0x212f, 0x2139,\r
+0x213c, 0x213f,\r
+0x2145, 0x2149,\r
+0x214e, 0x214e,\r
+0x2160, 0x2188,\r
+0x24b6, 0x24e9,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x2c60, 0x2ce4,\r
+0x2ceb, 0x2cf3,\r
+0x2d00, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0x2d30, 0x2d67,\r
+0x2d6f, 0x2d6f,\r
+0x2d7f, 0x2d96,\r
+0x2da0, 0x2da6,\r
+0x2da8, 0x2dae,\r
+0x2db0, 0x2db6,\r
+0x2db8, 0x2dbe,\r
+0x2dc0, 0x2dc6,\r
+0x2dc8, 0x2dce,\r
+0x2dd0, 0x2dd6,\r
+0x2dd8, 0x2dde,\r
+0x2de0, 0x2dff,\r
+0x2e2f, 0x2e2f,\r
+0x3005, 0x3007,\r
+0x3021, 0x302f,\r
+0x3031, 0x3035,\r
+0x3038, 0x303c,\r
+0x3041, 0x3096,\r
+0x3099, 0x309a,\r
+0x309d, 0x309f,\r
+0x30a1, 0x30fa,\r
+0x30fc, 0x30ff,\r
+0x3105, 0x312f,\r
+0x3131, 0x318e,\r
+0x31a0, 0x31ba,\r
+0x31f0, 0x31ff,\r
+0x3400, 0x4db5,\r
+0x4e00, 0x9fef,\r
+0xa000, 0xa48c,\r
+0xa4d0, 0xa4fd,\r
+0xa500, 0xa60c,\r
+0xa610, 0xa62b,\r
+0xa640, 0xa672,\r
+0xa674, 0xa67d,\r
+0xa67f, 0xa6f1,\r
+0xa717, 0xa71f,\r
+0xa722, 0xa788,\r
+0xa78b, 0xa7b9,\r
+0xa7f7, 0xa827,\r
+0xa840, 0xa873,\r
+0xa880, 0xa8c5,\r
+0xa8d0, 0xa8d9,\r
+0xa8e0, 0xa8f7,\r
+0xa8fb, 0xa8fb,\r
+0xa8fd, 0xa92d,\r
+0xa930, 0xa953,\r
+0xa960, 0xa97c,\r
+0xa980, 0xa9c0,\r
+0xa9cf, 0xa9d9,\r
+0xa9e0, 0xa9fe,\r
+0xaa00, 0xaa36,\r
+0xaa40, 0xaa4d,\r
+0xaa50, 0xaa59,\r
+0xaa60, 0xaa76,\r
+0xaa7a, 0xaac2,\r
+0xaadb, 0xaadd,\r
+0xaae0, 0xaaef,\r
+0xaaf2, 0xaaf6,\r
+0xab01, 0xab06,\r
+0xab09, 0xab0e,\r
+0xab11, 0xab16,\r
+0xab20, 0xab26,\r
+0xab28, 0xab2e,\r
+0xab30, 0xab5a,\r
+0xab5c, 0xab65,\r
+0xab70, 0xabea,\r
+0xabec, 0xabed,\r
+0xabf0, 0xabf9,\r
+0xac00, 0xd7a3,\r
+0xd7b0, 0xd7c6,\r
+0xd7cb, 0xd7fb,\r
+0xf900, 0xfa6d,\r
+0xfa70, 0xfad9,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xfb1d, 0xfb28,\r
+0xfb2a, 0xfb36,\r
+0xfb38, 0xfb3c,\r
+0xfb3e, 0xfb3e,\r
+0xfb40, 0xfb41,\r
+0xfb43, 0xfb44,\r
+0xfb46, 0xfbb1,\r
+0xfbd3, 0xfd3d,\r
+0xfd50, 0xfd8f,\r
+0xfd92, 0xfdc7,\r
+0xfdf0, 0xfdfb,\r
+0xfe00, 0xfe0f,\r
+0xfe20, 0xfe2f,\r
+0xfe33, 0xfe34,\r
+0xfe4d, 0xfe4f,\r
+0xfe70, 0xfe74,\r
+0xfe76, 0xfefc,\r
+0xff10, 0xff19,\r
+0xff21, 0xff3a,\r
+0xff3f, 0xff3f,\r
+0xff41, 0xff5a,\r
+0xff66, 0xffbe,\r
+0xffc2, 0xffc7,\r
+0xffca, 0xffcf,\r
+0xffd2, 0xffd7,\r
+0xffda, 0xffdc,\r
+0x10000, 0x1000b,\r
+0x1000d, 0x10026,\r
+0x10028, 0x1003a,\r
+0x1003c, 0x1003d,\r
+0x1003f, 0x1004d,\r
+0x10050, 0x1005d,\r
+0x10080, 0x100fa,\r
+0x10140, 0x10174,\r
+0x101fd, 0x101fd,\r
+0x10280, 0x1029c,\r
+0x102a0, 0x102d0,\r
+0x102e0, 0x102e0,\r
+0x10300, 0x1031f,\r
+0x1032d, 0x1034a,\r
+0x10350, 0x1037a,\r
+0x10380, 0x1039d,\r
+0x103a0, 0x103c3,\r
+0x103c8, 0x103cf,\r
+0x103d1, 0x103d5,\r
+0x10400, 0x1049d,\r
+0x104a0, 0x104a9,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+0x10500, 0x10527,\r
+0x10530, 0x10563,\r
+0x10600, 0x10736,\r
+0x10740, 0x10755,\r
+0x10760, 0x10767,\r
+0x10800, 0x10805,\r
+0x10808, 0x10808,\r
+0x1080a, 0x10835,\r
+0x10837, 0x10838,\r
+0x1083c, 0x1083c,\r
+0x1083f, 0x10855,\r
+0x10860, 0x10876,\r
+0x10880, 0x1089e,\r
+0x108e0, 0x108f2,\r
+0x108f4, 0x108f5,\r
+0x10900, 0x10915,\r
+0x10920, 0x10939,\r
+0x10980, 0x109b7,\r
+0x109be, 0x109bf,\r
+0x10a00, 0x10a03,\r
+0x10a05, 0x10a06,\r
+0x10a0c, 0x10a13,\r
+0x10a15, 0x10a17,\r
+0x10a19, 0x10a35,\r
+0x10a38, 0x10a3a,\r
+0x10a3f, 0x10a3f,\r
+0x10a60, 0x10a7c,\r
+0x10a80, 0x10a9c,\r
+0x10ac0, 0x10ac7,\r
+0x10ac9, 0x10ae6,\r
+0x10b00, 0x10b35,\r
+0x10b40, 0x10b55,\r
+0x10b60, 0x10b72,\r
+0x10b80, 0x10b91,\r
+0x10c00, 0x10c48,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x10d00, 0x10d27,\r
+0x10d30, 0x10d39,\r
+0x10f00, 0x10f1c,\r
+0x10f27, 0x10f27,\r
+0x10f30, 0x10f50,\r
+0x11000, 0x11046,\r
+0x11066, 0x1106f,\r
+0x1107f, 0x110ba,\r
+0x110d0, 0x110e8,\r
+0x110f0, 0x110f9,\r
+0x11100, 0x11134,\r
+0x11136, 0x1113f,\r
+0x11144, 0x11146,\r
+0x11150, 0x11173,\r
+0x11176, 0x11176,\r
+0x11180, 0x111c4,\r
+0x111c9, 0x111cc,\r
+0x111d0, 0x111da,\r
+0x111dc, 0x111dc,\r
+0x11200, 0x11211,\r
+0x11213, 0x11237,\r
+0x1123e, 0x1123e,\r
+0x11280, 0x11286,\r
+0x11288, 0x11288,\r
+0x1128a, 0x1128d,\r
+0x1128f, 0x1129d,\r
+0x1129f, 0x112a8,\r
+0x112b0, 0x112ea,\r
+0x112f0, 0x112f9,\r
+0x11300, 0x11303,\r
+0x11305, 0x1130c,\r
+0x1130f, 0x11310,\r
+0x11313, 0x11328,\r
+0x1132a, 0x11330,\r
+0x11332, 0x11333,\r
+0x11335, 0x11339,\r
+0x1133b, 0x11344,\r
+0x11347, 0x11348,\r
+0x1134b, 0x1134d,\r
+0x11350, 0x11350,\r
+0x11357, 0x11357,\r
+0x1135d, 0x11363,\r
+0x11366, 0x1136c,\r
+0x11370, 0x11374,\r
+0x11400, 0x1144a,\r
+0x11450, 0x11459,\r
+0x1145e, 0x1145e,\r
+0x11480, 0x114c5,\r
+0x114c7, 0x114c7,\r
+0x114d0, 0x114d9,\r
+0x11580, 0x115b5,\r
+0x115b8, 0x115c0,\r
+0x115d8, 0x115dd,\r
+0x11600, 0x11640,\r
+0x11644, 0x11644,\r
+0x11650, 0x11659,\r
+0x11680, 0x116b7,\r
+0x116c0, 0x116c9,\r
+0x11700, 0x1171a,\r
+0x1171d, 0x1172b,\r
+0x11730, 0x11739,\r
+0x11800, 0x1183a,\r
+0x118a0, 0x118e9,\r
+0x118ff, 0x118ff,\r
+0x11a00, 0x11a3e,\r
+0x11a47, 0x11a47,\r
+0x11a50, 0x11a83,\r
+0x11a86, 0x11a99,\r
+0x11a9d, 0x11a9d,\r
+0x11ac0, 0x11af8,\r
+0x11c00, 0x11c08,\r
+0x11c0a, 0x11c36,\r
+0x11c38, 0x11c40,\r
+0x11c50, 0x11c59,\r
+0x11c72, 0x11c8f,\r
+0x11c92, 0x11ca7,\r
+0x11ca9, 0x11cb6,\r
+0x11d00, 0x11d06,\r
+0x11d08, 0x11d09,\r
+0x11d0b, 0x11d36,\r
+0x11d3a, 0x11d3a,\r
+0x11d3c, 0x11d3d,\r
+0x11d3f, 0x11d47,\r
+0x11d50, 0x11d59,\r
+0x11d60, 0x11d65,\r
+0x11d67, 0x11d68,\r
+0x11d6a, 0x11d8e,\r
+0x11d90, 0x11d91,\r
+0x11d93, 0x11d98,\r
+0x11da0, 0x11da9,\r
+0x11ee0, 0x11ef6,\r
+0x12000, 0x12399,\r
+0x12400, 0x1246e,\r
+0x12480, 0x12543,\r
+0x13000, 0x1342e,\r
+0x14400, 0x14646,\r
+0x16800, 0x16a38,\r
+0x16a40, 0x16a5e,\r
+0x16a60, 0x16a69,\r
+0x16ad0, 0x16aed,\r
+0x16af0, 0x16af4,\r
+0x16b00, 0x16b36,\r
+0x16b40, 0x16b43,\r
+0x16b50, 0x16b59,\r
+0x16b63, 0x16b77,\r
+0x16b7d, 0x16b8f,\r
+0x16e40, 0x16e7f,\r
+0x16f00, 0x16f44,\r
+0x16f50, 0x16f7e,\r
+0x16f8f, 0x16f9f,\r
+0x16fe0, 0x16fe1,\r
+0x17000, 0x187f1,\r
+0x18800, 0x18af2,\r
+0x1b000, 0x1b11e,\r
+0x1b170, 0x1b2fb,\r
+0x1bc00, 0x1bc6a,\r
+0x1bc70, 0x1bc7c,\r
+0x1bc80, 0x1bc88,\r
+0x1bc90, 0x1bc99,\r
+0x1bc9d, 0x1bc9e,\r
+0x1d165, 0x1d169,\r
+0x1d16d, 0x1d172,\r
+0x1d17b, 0x1d182,\r
+0x1d185, 0x1d18b,\r
+0x1d1aa, 0x1d1ad,\r
+0x1d242, 0x1d244,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d6c0,\r
+0x1d6c2, 0x1d6da,\r
+0x1d6dc, 0x1d6fa,\r
+0x1d6fc, 0x1d714,\r
+0x1d716, 0x1d734,\r
+0x1d736, 0x1d74e,\r
+0x1d750, 0x1d76e,\r
+0x1d770, 0x1d788,\r
+0x1d78a, 0x1d7a8,\r
+0x1d7aa, 0x1d7c2,\r
+0x1d7c4, 0x1d7cb,\r
+0x1d7ce, 0x1d7ff,\r
+0x1da00, 0x1da36,\r
+0x1da3b, 0x1da6c,\r
+0x1da75, 0x1da75,\r
+0x1da84, 0x1da84,\r
+0x1da9b, 0x1da9f,\r
+0x1daa1, 0x1daaf,\r
+0x1e000, 0x1e006,\r
+0x1e008, 0x1e018,\r
+0x1e01b, 0x1e021,\r
+0x1e023, 0x1e024,\r
+0x1e026, 0x1e02a,\r
+0x1e800, 0x1e8c4,\r
+0x1e8d0, 0x1e8d6,\r
+0x1e900, 0x1e94a,\r
+0x1e950, 0x1e959,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+0x1f130, 0x1f149,\r
+0x1f150, 0x1f169,\r
+0x1f170, 0x1f189,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+0x2f800, 0x2fa1d,\r
+0xe0100, 0xe01ef,\r
+}; /* END of CR_Word */\r
+\r
+/* PROPERTY: 'Alnum': POSIX [[:Alnum:]] */\r
+static const OnigCodePoint\r
+CR_Alnum[] = { 713,\r
+0x0030, 0x0039,\r
+0x0041, 0x005a,\r
+0x0061, 0x007a,\r
+0x00aa, 0x00aa,\r
+0x00b5, 0x00b5,\r
+0x00ba, 0x00ba,\r
+0x00c0, 0x00d6,\r
+0x00d8, 0x00f6,\r
+0x00f8, 0x02c1,\r
+0x02c6, 0x02d1,\r
+0x02e0, 0x02e4,\r
+0x02ec, 0x02ec,\r
+0x02ee, 0x02ee,\r
+0x0345, 0x0345,\r
+0x0370, 0x0374,\r
+0x0376, 0x0377,\r
+0x037a, 0x037d,\r
+0x037f, 0x037f,\r
+0x0386, 0x0386,\r
+0x0388, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x03f5,\r
+0x03f7, 0x0481,\r
+0x048a, 0x052f,\r
+0x0531, 0x0556,\r
+0x0559, 0x0559,\r
+0x0560, 0x0588,\r
+0x05b0, 0x05bd,\r
+0x05bf, 0x05bf,\r
+0x05c1, 0x05c2,\r
+0x05c4, 0x05c5,\r
+0x05c7, 0x05c7,\r
+0x05d0, 0x05ea,\r
+0x05ef, 0x05f2,\r
+0x0610, 0x061a,\r
+0x0620, 0x0657,\r
+0x0659, 0x0669,\r
+0x066e, 0x06d3,\r
+0x06d5, 0x06dc,\r
+0x06e1, 0x06e8,\r
+0x06ed, 0x06fc,\r
+0x06ff, 0x06ff,\r
+0x0710, 0x073f,\r
+0x074d, 0x07b1,\r
+0x07c0, 0x07ea,\r
+0x07f4, 0x07f5,\r
+0x07fa, 0x07fa,\r
+0x0800, 0x0817,\r
+0x081a, 0x082c,\r
+0x0840, 0x0858,\r
+0x0860, 0x086a,\r
+0x08a0, 0x08b4,\r
+0x08b6, 0x08bd,\r
+0x08d4, 0x08df,\r
+0x08e3, 0x08e9,\r
+0x08f0, 0x093b,\r
+0x093d, 0x094c,\r
+0x094e, 0x0950,\r
+0x0955, 0x0963,\r
+0x0966, 0x096f,\r
+0x0971, 0x0983,\r
+0x0985, 0x098c,\r
+0x098f, 0x0990,\r
+0x0993, 0x09a8,\r
+0x09aa, 0x09b0,\r
+0x09b2, 0x09b2,\r
+0x09b6, 0x09b9,\r
+0x09bd, 0x09c4,\r
+0x09c7, 0x09c8,\r
+0x09cb, 0x09cc,\r
+0x09ce, 0x09ce,\r
+0x09d7, 0x09d7,\r
+0x09dc, 0x09dd,\r
+0x09df, 0x09e3,\r
+0x09e6, 0x09f1,\r
+0x09fc, 0x09fc,\r
+0x0a01, 0x0a03,\r
+0x0a05, 0x0a0a,\r
+0x0a0f, 0x0a10,\r
+0x0a13, 0x0a28,\r
+0x0a2a, 0x0a30,\r
+0x0a32, 0x0a33,\r
+0x0a35, 0x0a36,\r
+0x0a38, 0x0a39,\r
+0x0a3e, 0x0a42,\r
+0x0a47, 0x0a48,\r
+0x0a4b, 0x0a4c,\r
+0x0a51, 0x0a51,\r
+0x0a59, 0x0a5c,\r
+0x0a5e, 0x0a5e,\r
+0x0a66, 0x0a75,\r
+0x0a81, 0x0a83,\r
+0x0a85, 0x0a8d,\r
+0x0a8f, 0x0a91,\r
+0x0a93, 0x0aa8,\r
+0x0aaa, 0x0ab0,\r
+0x0ab2, 0x0ab3,\r
+0x0ab5, 0x0ab9,\r
+0x0abd, 0x0ac5,\r
+0x0ac7, 0x0ac9,\r
+0x0acb, 0x0acc,\r
+0x0ad0, 0x0ad0,\r
+0x0ae0, 0x0ae3,\r
+0x0ae6, 0x0aef,\r
+0x0af9, 0x0afc,\r
+0x0b01, 0x0b03,\r
+0x0b05, 0x0b0c,\r
+0x0b0f, 0x0b10,\r
+0x0b13, 0x0b28,\r
+0x0b2a, 0x0b30,\r
+0x0b32, 0x0b33,\r
+0x0b35, 0x0b39,\r
+0x0b3d, 0x0b44,\r
+0x0b47, 0x0b48,\r
+0x0b4b, 0x0b4c,\r
+0x0b56, 0x0b57,\r
+0x0b5c, 0x0b5d,\r
+0x0b5f, 0x0b63,\r
+0x0b66, 0x0b6f,\r
+0x0b71, 0x0b71,\r
+0x0b82, 0x0b83,\r
+0x0b85, 0x0b8a,\r
+0x0b8e, 0x0b90,\r
+0x0b92, 0x0b95,\r
+0x0b99, 0x0b9a,\r
+0x0b9c, 0x0b9c,\r
+0x0b9e, 0x0b9f,\r
+0x0ba3, 0x0ba4,\r
+0x0ba8, 0x0baa,\r
+0x0bae, 0x0bb9,\r
+0x0bbe, 0x0bc2,\r
+0x0bc6, 0x0bc8,\r
+0x0bca, 0x0bcc,\r
+0x0bd0, 0x0bd0,\r
+0x0bd7, 0x0bd7,\r
+0x0be6, 0x0bef,\r
+0x0c00, 0x0c03,\r
+0x0c05, 0x0c0c,\r
+0x0c0e, 0x0c10,\r
+0x0c12, 0x0c28,\r
+0x0c2a, 0x0c39,\r
+0x0c3d, 0x0c44,\r
+0x0c46, 0x0c48,\r
+0x0c4a, 0x0c4c,\r
+0x0c55, 0x0c56,\r
+0x0c58, 0x0c5a,\r
+0x0c60, 0x0c63,\r
+0x0c66, 0x0c6f,\r
+0x0c80, 0x0c83,\r
+0x0c85, 0x0c8c,\r
+0x0c8e, 0x0c90,\r
+0x0c92, 0x0ca8,\r
+0x0caa, 0x0cb3,\r
+0x0cb5, 0x0cb9,\r
+0x0cbd, 0x0cc4,\r
+0x0cc6, 0x0cc8,\r
+0x0cca, 0x0ccc,\r
+0x0cd5, 0x0cd6,\r
+0x0cde, 0x0cde,\r
+0x0ce0, 0x0ce3,\r
+0x0ce6, 0x0cef,\r
+0x0cf1, 0x0cf2,\r
+0x0d00, 0x0d03,\r
+0x0d05, 0x0d0c,\r
+0x0d0e, 0x0d10,\r
+0x0d12, 0x0d3a,\r
+0x0d3d, 0x0d44,\r
+0x0d46, 0x0d48,\r
+0x0d4a, 0x0d4c,\r
+0x0d4e, 0x0d4e,\r
+0x0d54, 0x0d57,\r
+0x0d5f, 0x0d63,\r
+0x0d66, 0x0d6f,\r
+0x0d7a, 0x0d7f,\r
+0x0d82, 0x0d83,\r
+0x0d85, 0x0d96,\r
+0x0d9a, 0x0db1,\r
+0x0db3, 0x0dbb,\r
+0x0dbd, 0x0dbd,\r
+0x0dc0, 0x0dc6,\r
+0x0dcf, 0x0dd4,\r
+0x0dd6, 0x0dd6,\r
+0x0dd8, 0x0ddf,\r
+0x0de6, 0x0def,\r
+0x0df2, 0x0df3,\r
+0x0e01, 0x0e3a,\r
+0x0e40, 0x0e46,\r
+0x0e4d, 0x0e4d,\r
+0x0e50, 0x0e59,\r
+0x0e81, 0x0e82,\r
+0x0e84, 0x0e84,\r
+0x0e87, 0x0e88,\r
+0x0e8a, 0x0e8a,\r
+0x0e8d, 0x0e8d,\r
+0x0e94, 0x0e97,\r
+0x0e99, 0x0e9f,\r
+0x0ea1, 0x0ea3,\r
+0x0ea5, 0x0ea5,\r
+0x0ea7, 0x0ea7,\r
+0x0eaa, 0x0eab,\r
+0x0ead, 0x0eb9,\r
+0x0ebb, 0x0ebd,\r
+0x0ec0, 0x0ec4,\r
+0x0ec6, 0x0ec6,\r
+0x0ecd, 0x0ecd,\r
+0x0ed0, 0x0ed9,\r
+0x0edc, 0x0edf,\r
+0x0f00, 0x0f00,\r
+0x0f20, 0x0f29,\r
+0x0f40, 0x0f47,\r
+0x0f49, 0x0f6c,\r
+0x0f71, 0x0f81,\r
+0x0f88, 0x0f97,\r
+0x0f99, 0x0fbc,\r
+0x1000, 0x1036,\r
+0x1038, 0x1038,\r
+0x103b, 0x1049,\r
+0x1050, 0x1062,\r
+0x1065, 0x1068,\r
+0x106e, 0x1086,\r
+0x108e, 0x108e,\r
+0x1090, 0x1099,\r
+0x109c, 0x109d,\r
+0x10a0, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x10fa,\r
+0x10fc, 0x1248,\r
+0x124a, 0x124d,\r
+0x1250, 0x1256,\r
+0x1258, 0x1258,\r
+0x125a, 0x125d,\r
+0x1260, 0x1288,\r
+0x128a, 0x128d,\r
+0x1290, 0x12b0,\r
+0x12b2, 0x12b5,\r
+0x12b8, 0x12be,\r
+0x12c0, 0x12c0,\r
+0x12c2, 0x12c5,\r
+0x12c8, 0x12d6,\r
+0x12d8, 0x1310,\r
+0x1312, 0x1315,\r
+0x1318, 0x135a,\r
+0x135f, 0x135f,\r
+0x1380, 0x138f,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0x1401, 0x166c,\r
+0x166f, 0x167f,\r
+0x1681, 0x169a,\r
+0x16a0, 0x16ea,\r
+0x16ee, 0x16f8,\r
+0x1700, 0x170c,\r
+0x170e, 0x1713,\r
+0x1720, 0x1733,\r
+0x1740, 0x1753,\r
+0x1760, 0x176c,\r
+0x176e, 0x1770,\r
+0x1772, 0x1773,\r
+0x1780, 0x17b3,\r
+0x17b6, 0x17c8,\r
+0x17d7, 0x17d7,\r
+0x17dc, 0x17dc,\r
+0x17e0, 0x17e9,\r
+0x1810, 0x1819,\r
+0x1820, 0x1878,\r
+0x1880, 0x18aa,\r
+0x18b0, 0x18f5,\r
+0x1900, 0x191e,\r
+0x1920, 0x192b,\r
+0x1930, 0x1938,\r
+0x1946, 0x196d,\r
+0x1970, 0x1974,\r
+0x1980, 0x19ab,\r
+0x19b0, 0x19c9,\r
+0x19d0, 0x19d9,\r
+0x1a00, 0x1a1b,\r
+0x1a20, 0x1a5e,\r
+0x1a61, 0x1a74,\r
+0x1a80, 0x1a89,\r
+0x1a90, 0x1a99,\r
+0x1aa7, 0x1aa7,\r
+0x1b00, 0x1b33,\r
+0x1b35, 0x1b43,\r
+0x1b45, 0x1b4b,\r
+0x1b50, 0x1b59,\r
+0x1b80, 0x1ba9,\r
+0x1bac, 0x1be5,\r
+0x1be7, 0x1bf1,\r
+0x1c00, 0x1c35,\r
+0x1c40, 0x1c49,\r
+0x1c4d, 0x1c7d,\r
+0x1c80, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cbf,\r
+0x1ce9, 0x1cec,\r
+0x1cee, 0x1cf3,\r
+0x1cf5, 0x1cf6,\r
+0x1d00, 0x1dbf,\r
+0x1de7, 0x1df4,\r
+0x1e00, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fbc,\r
+0x1fbe, 0x1fbe,\r
+0x1fc2, 0x1fc4,\r
+0x1fc6, 0x1fcc,\r
+0x1fd0, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fe0, 0x1fec,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffc,\r
+0x2071, 0x2071,\r
+0x207f, 0x207f,\r
+0x2090, 0x209c,\r
+0x2102, 0x2102,\r
+0x2107, 0x2107,\r
+0x210a, 0x2113,\r
+0x2115, 0x2115,\r
+0x2119, 0x211d,\r
+0x2124, 0x2124,\r
+0x2126, 0x2126,\r
+0x2128, 0x2128,\r
+0x212a, 0x212d,\r
+0x212f, 0x2139,\r
+0x213c, 0x213f,\r
+0x2145, 0x2149,\r
+0x214e, 0x214e,\r
+0x2160, 0x2188,\r
+0x24b6, 0x24e9,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x2c60, 0x2ce4,\r
+0x2ceb, 0x2cee,\r
+0x2cf2, 0x2cf3,\r
+0x2d00, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0x2d30, 0x2d67,\r
+0x2d6f, 0x2d6f,\r
+0x2d80, 0x2d96,\r
+0x2da0, 0x2da6,\r
+0x2da8, 0x2dae,\r
+0x2db0, 0x2db6,\r
+0x2db8, 0x2dbe,\r
+0x2dc0, 0x2dc6,\r
+0x2dc8, 0x2dce,\r
+0x2dd0, 0x2dd6,\r
+0x2dd8, 0x2dde,\r
+0x2de0, 0x2dff,\r
+0x2e2f, 0x2e2f,\r
+0x3005, 0x3007,\r
+0x3021, 0x3029,\r
+0x3031, 0x3035,\r
+0x3038, 0x303c,\r
+0x3041, 0x3096,\r
+0x309d, 0x309f,\r
+0x30a1, 0x30fa,\r
+0x30fc, 0x30ff,\r
+0x3105, 0x312f,\r
+0x3131, 0x318e,\r
+0x31a0, 0x31ba,\r
+0x31f0, 0x31ff,\r
+0x3400, 0x4db5,\r
+0x4e00, 0x9fef,\r
+0xa000, 0xa48c,\r
+0xa4d0, 0xa4fd,\r
+0xa500, 0xa60c,\r
+0xa610, 0xa62b,\r
+0xa640, 0xa66e,\r
+0xa674, 0xa67b,\r
+0xa67f, 0xa6ef,\r
+0xa717, 0xa71f,\r
+0xa722, 0xa788,\r
+0xa78b, 0xa7b9,\r
+0xa7f7, 0xa801,\r
+0xa803, 0xa805,\r
+0xa807, 0xa80a,\r
+0xa80c, 0xa827,\r
+0xa840, 0xa873,\r
+0xa880, 0xa8c3,\r
+0xa8c5, 0xa8c5,\r
+0xa8d0, 0xa8d9,\r
+0xa8f2, 0xa8f7,\r
+0xa8fb, 0xa8fb,\r
+0xa8fd, 0xa8fe,\r
+0xa900, 0xa92a,\r
+0xa930, 0xa952,\r
+0xa960, 0xa97c,\r
+0xa980, 0xa9b2,\r
+0xa9b4, 0xa9bf,\r
+0xa9cf, 0xa9d9,\r
+0xa9e0, 0xa9e4,\r
+0xa9e6, 0xa9fe,\r
+0xaa00, 0xaa36,\r
+0xaa40, 0xaa4d,\r
+0xaa50, 0xaa59,\r
+0xaa60, 0xaa76,\r
+0xaa7a, 0xaa7a,\r
+0xaa7e, 0xaabe,\r
+0xaac0, 0xaac0,\r
+0xaac2, 0xaac2,\r
+0xaadb, 0xaadd,\r
+0xaae0, 0xaaef,\r
+0xaaf2, 0xaaf5,\r
+0xab01, 0xab06,\r
+0xab09, 0xab0e,\r
+0xab11, 0xab16,\r
+0xab20, 0xab26,\r
+0xab28, 0xab2e,\r
+0xab30, 0xab5a,\r
+0xab5c, 0xab65,\r
+0xab70, 0xabea,\r
+0xabf0, 0xabf9,\r
+0xac00, 0xd7a3,\r
+0xd7b0, 0xd7c6,\r
+0xd7cb, 0xd7fb,\r
+0xf900, 0xfa6d,\r
+0xfa70, 0xfad9,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xfb1d, 0xfb28,\r
+0xfb2a, 0xfb36,\r
+0xfb38, 0xfb3c,\r
+0xfb3e, 0xfb3e,\r
+0xfb40, 0xfb41,\r
+0xfb43, 0xfb44,\r
+0xfb46, 0xfbb1,\r
+0xfbd3, 0xfd3d,\r
+0xfd50, 0xfd8f,\r
+0xfd92, 0xfdc7,\r
+0xfdf0, 0xfdfb,\r
+0xfe70, 0xfe74,\r
+0xfe76, 0xfefc,\r
+0xff10, 0xff19,\r
+0xff21, 0xff3a,\r
+0xff41, 0xff5a,\r
+0xff66, 0xffbe,\r
+0xffc2, 0xffc7,\r
+0xffca, 0xffcf,\r
+0xffd2, 0xffd7,\r
+0xffda, 0xffdc,\r
+0x10000, 0x1000b,\r
+0x1000d, 0x10026,\r
+0x10028, 0x1003a,\r
+0x1003c, 0x1003d,\r
+0x1003f, 0x1004d,\r
+0x10050, 0x1005d,\r
+0x10080, 0x100fa,\r
+0x10140, 0x10174,\r
+0x10280, 0x1029c,\r
+0x102a0, 0x102d0,\r
+0x10300, 0x1031f,\r
+0x1032d, 0x1034a,\r
+0x10350, 0x1037a,\r
+0x10380, 0x1039d,\r
+0x103a0, 0x103c3,\r
+0x103c8, 0x103cf,\r
+0x103d1, 0x103d5,\r
+0x10400, 0x1049d,\r
+0x104a0, 0x104a9,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+0x10500, 0x10527,\r
+0x10530, 0x10563,\r
+0x10600, 0x10736,\r
+0x10740, 0x10755,\r
+0x10760, 0x10767,\r
+0x10800, 0x10805,\r
+0x10808, 0x10808,\r
+0x1080a, 0x10835,\r
+0x10837, 0x10838,\r
+0x1083c, 0x1083c,\r
+0x1083f, 0x10855,\r
+0x10860, 0x10876,\r
+0x10880, 0x1089e,\r
+0x108e0, 0x108f2,\r
+0x108f4, 0x108f5,\r
+0x10900, 0x10915,\r
+0x10920, 0x10939,\r
+0x10980, 0x109b7,\r
+0x109be, 0x109bf,\r
+0x10a00, 0x10a03,\r
+0x10a05, 0x10a06,\r
+0x10a0c, 0x10a13,\r
+0x10a15, 0x10a17,\r
+0x10a19, 0x10a35,\r
+0x10a60, 0x10a7c,\r
+0x10a80, 0x10a9c,\r
+0x10ac0, 0x10ac7,\r
+0x10ac9, 0x10ae4,\r
+0x10b00, 0x10b35,\r
+0x10b40, 0x10b55,\r
+0x10b60, 0x10b72,\r
+0x10b80, 0x10b91,\r
+0x10c00, 0x10c48,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x10d00, 0x10d27,\r
+0x10d30, 0x10d39,\r
+0x10f00, 0x10f1c,\r
+0x10f27, 0x10f27,\r
+0x10f30, 0x10f45,\r
+0x11000, 0x11045,\r
+0x11066, 0x1106f,\r
+0x11082, 0x110b8,\r
+0x110d0, 0x110e8,\r
+0x110f0, 0x110f9,\r
+0x11100, 0x11132,\r
+0x11136, 0x1113f,\r
+0x11144, 0x11146,\r
+0x11150, 0x11172,\r
+0x11176, 0x11176,\r
+0x11180, 0x111bf,\r
+0x111c1, 0x111c4,\r
+0x111d0, 0x111da,\r
+0x111dc, 0x111dc,\r
+0x11200, 0x11211,\r
+0x11213, 0x11234,\r
+0x11237, 0x11237,\r
+0x1123e, 0x1123e,\r
+0x11280, 0x11286,\r
+0x11288, 0x11288,\r
+0x1128a, 0x1128d,\r
+0x1128f, 0x1129d,\r
+0x1129f, 0x112a8,\r
+0x112b0, 0x112e8,\r
+0x112f0, 0x112f9,\r
+0x11300, 0x11303,\r
+0x11305, 0x1130c,\r
+0x1130f, 0x11310,\r
+0x11313, 0x11328,\r
+0x1132a, 0x11330,\r
+0x11332, 0x11333,\r
+0x11335, 0x11339,\r
+0x1133d, 0x11344,\r
+0x11347, 0x11348,\r
+0x1134b, 0x1134c,\r
+0x11350, 0x11350,\r
+0x11357, 0x11357,\r
+0x1135d, 0x11363,\r
+0x11400, 0x11441,\r
+0x11443, 0x11445,\r
+0x11447, 0x1144a,\r
+0x11450, 0x11459,\r
+0x11480, 0x114c1,\r
+0x114c4, 0x114c5,\r
+0x114c7, 0x114c7,\r
+0x114d0, 0x114d9,\r
+0x11580, 0x115b5,\r
+0x115b8, 0x115be,\r
+0x115d8, 0x115dd,\r
+0x11600, 0x1163e,\r
+0x11640, 0x11640,\r
+0x11644, 0x11644,\r
+0x11650, 0x11659,\r
+0x11680, 0x116b5,\r
+0x116c0, 0x116c9,\r
+0x11700, 0x1171a,\r
+0x1171d, 0x1172a,\r
+0x11730, 0x11739,\r
+0x11800, 0x11838,\r
+0x118a0, 0x118e9,\r
+0x118ff, 0x118ff,\r
+0x11a00, 0x11a32,\r
+0x11a35, 0x11a3e,\r
+0x11a50, 0x11a83,\r
+0x11a86, 0x11a97,\r
+0x11a9d, 0x11a9d,\r
+0x11ac0, 0x11af8,\r
+0x11c00, 0x11c08,\r
+0x11c0a, 0x11c36,\r
+0x11c38, 0x11c3e,\r
+0x11c40, 0x11c40,\r
+0x11c50, 0x11c59,\r
+0x11c72, 0x11c8f,\r
+0x11c92, 0x11ca7,\r
+0x11ca9, 0x11cb6,\r
+0x11d00, 0x11d06,\r
+0x11d08, 0x11d09,\r
+0x11d0b, 0x11d36,\r
+0x11d3a, 0x11d3a,\r
+0x11d3c, 0x11d3d,\r
+0x11d3f, 0x11d41,\r
+0x11d43, 0x11d43,\r
+0x11d46, 0x11d47,\r
+0x11d50, 0x11d59,\r
+0x11d60, 0x11d65,\r
+0x11d67, 0x11d68,\r
+0x11d6a, 0x11d8e,\r
+0x11d90, 0x11d91,\r
+0x11d93, 0x11d96,\r
+0x11d98, 0x11d98,\r
+0x11da0, 0x11da9,\r
+0x11ee0, 0x11ef6,\r
+0x12000, 0x12399,\r
+0x12400, 0x1246e,\r
+0x12480, 0x12543,\r
+0x13000, 0x1342e,\r
+0x14400, 0x14646,\r
+0x16800, 0x16a38,\r
+0x16a40, 0x16a5e,\r
+0x16a60, 0x16a69,\r
+0x16ad0, 0x16aed,\r
+0x16b00, 0x16b36,\r
+0x16b40, 0x16b43,\r
+0x16b50, 0x16b59,\r
+0x16b63, 0x16b77,\r
+0x16b7d, 0x16b8f,\r
+0x16e40, 0x16e7f,\r
+0x16f00, 0x16f44,\r
+0x16f50, 0x16f7e,\r
+0x16f93, 0x16f9f,\r
+0x16fe0, 0x16fe1,\r
+0x17000, 0x187f1,\r
+0x18800, 0x18af2,\r
+0x1b000, 0x1b11e,\r
+0x1b170, 0x1b2fb,\r
+0x1bc00, 0x1bc6a,\r
+0x1bc70, 0x1bc7c,\r
+0x1bc80, 0x1bc88,\r
+0x1bc90, 0x1bc99,\r
+0x1bc9e, 0x1bc9e,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d6c0,\r
+0x1d6c2, 0x1d6da,\r
+0x1d6dc, 0x1d6fa,\r
+0x1d6fc, 0x1d714,\r
+0x1d716, 0x1d734,\r
+0x1d736, 0x1d74e,\r
+0x1d750, 0x1d76e,\r
+0x1d770, 0x1d788,\r
+0x1d78a, 0x1d7a8,\r
+0x1d7aa, 0x1d7c2,\r
+0x1d7c4, 0x1d7cb,\r
+0x1d7ce, 0x1d7ff,\r
+0x1e000, 0x1e006,\r
+0x1e008, 0x1e018,\r
+0x1e01b, 0x1e021,\r
+0x1e023, 0x1e024,\r
+0x1e026, 0x1e02a,\r
+0x1e800, 0x1e8c4,\r
+0x1e900, 0x1e943,\r
+0x1e947, 0x1e947,\r
+0x1e950, 0x1e959,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+0x1f130, 0x1f149,\r
+0x1f150, 0x1f169,\r
+0x1f170, 0x1f189,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+0x2f800, 0x2fa1d,\r
+}; /* END of CR_Alnum */\r
+\r
+/* PROPERTY: 'ASCII': POSIX [[:ASCII:]] */\r
+static const OnigCodePoint\r
+CR_ASCII[] = { 1,\r
+0x0000, 0x007f,\r
+}; /* END of CR_ASCII */\r
+\r
+\r
+/* PROPERTY: 'ASCII_Hex_Digit': Binary Property */\r
+#define CR_ASCII_Hex_Digit CR_XDigit\r
+\r
+/* PROPERTY: 'Adlam': Script */\r
+static const OnigCodePoint\r
+CR_Adlam[] = { 3,\r
+0x1e900, 0x1e94a,\r
+0x1e950, 0x1e959,\r
+0x1e95e, 0x1e95f,\r
+}; /* END of CR_Adlam */\r
+\r
+/* PROPERTY: 'Ahom': Script */\r
+static const OnigCodePoint\r
+CR_Ahom[] = { 3,\r
+0x11700, 0x1171a,\r
+0x1171d, 0x1172b,\r
+0x11730, 0x1173f,\r
+}; /* END of CR_Ahom */\r
+\r
+/* PROPERTY: 'Alphabetic': Derived Property */\r
+#define CR_Alphabetic CR_Alpha\r
+\r
+/* PROPERTY: 'Anatolian_Hieroglyphs': Script */\r
+static const OnigCodePoint\r
+CR_Anatolian_Hieroglyphs[] = { 1,\r
+0x14400, 0x14646,\r
+}; /* END of CR_Anatolian_Hieroglyphs */\r
+\r
+/* PROPERTY: 'Any': - */\r
+static const OnigCodePoint\r
+CR_Any[] = { 1,\r
+0x0000, 0x10ffff,\r
+}; /* END of CR_Any */\r
+\r
+/* PROPERTY: 'Arabic': Script */\r
+static const OnigCodePoint\r
+CR_Arabic[] = { 57,\r
+0x0600, 0x0604,\r
+0x0606, 0x060b,\r
+0x060d, 0x061a,\r
+0x061c, 0x061c,\r
+0x061e, 0x061e,\r
+0x0620, 0x063f,\r
+0x0641, 0x064a,\r
+0x0656, 0x066f,\r
+0x0671, 0x06dc,\r
+0x06de, 0x06ff,\r
+0x0750, 0x077f,\r
+0x08a0, 0x08b4,\r
+0x08b6, 0x08bd,\r
+0x08d3, 0x08e1,\r
+0x08e3, 0x08ff,\r
+0xfb50, 0xfbc1,\r
+0xfbd3, 0xfd3d,\r
+0xfd50, 0xfd8f,\r
+0xfd92, 0xfdc7,\r
+0xfdf0, 0xfdfd,\r
+0xfe70, 0xfe74,\r
+0xfe76, 0xfefc,\r
+0x10e60, 0x10e7e,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+0x1eef0, 0x1eef1,\r
+}; /* END of CR_Arabic */\r
+\r
+/* PROPERTY: 'Armenian': Script */\r
+static const OnigCodePoint\r
+CR_Armenian[] = { 5,\r
+0x0531, 0x0556,\r
+0x0559, 0x0588,\r
+0x058a, 0x058a,\r
+0x058d, 0x058f,\r
+0xfb13, 0xfb17,\r
+}; /* END of CR_Armenian */\r
+\r
+/* PROPERTY: 'Assigned': - */\r
+static const OnigCodePoint\r
+CR_Assigned[] = { 658,\r
+0x0000, 0x0377,\r
+0x037a, 0x037f,\r
+0x0384, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x052f,\r
+0x0531, 0x0556,\r
+0x0559, 0x058a,\r
+0x058d, 0x058f,\r
+0x0591, 0x05c7,\r
+0x05d0, 0x05ea,\r
+0x05ef, 0x05f4,\r
+0x0600, 0x061c,\r
+0x061e, 0x070d,\r
+0x070f, 0x074a,\r
+0x074d, 0x07b1,\r
+0x07c0, 0x07fa,\r
+0x07fd, 0x082d,\r
+0x0830, 0x083e,\r
+0x0840, 0x085b,\r
+0x085e, 0x085e,\r
+0x0860, 0x086a,\r
+0x08a0, 0x08b4,\r
+0x08b6, 0x08bd,\r
+0x08d3, 0x0983,\r
+0x0985, 0x098c,\r
+0x098f, 0x0990,\r
+0x0993, 0x09a8,\r
+0x09aa, 0x09b0,\r
+0x09b2, 0x09b2,\r
+0x09b6, 0x09b9,\r
+0x09bc, 0x09c4,\r
+0x09c7, 0x09c8,\r
+0x09cb, 0x09ce,\r
+0x09d7, 0x09d7,\r
+0x09dc, 0x09dd,\r
+0x09df, 0x09e3,\r
+0x09e6, 0x09fe,\r
+0x0a01, 0x0a03,\r
+0x0a05, 0x0a0a,\r
+0x0a0f, 0x0a10,\r
+0x0a13, 0x0a28,\r
+0x0a2a, 0x0a30,\r
+0x0a32, 0x0a33,\r
+0x0a35, 0x0a36,\r
+0x0a38, 0x0a39,\r
+0x0a3c, 0x0a3c,\r
+0x0a3e, 0x0a42,\r
+0x0a47, 0x0a48,\r
+0x0a4b, 0x0a4d,\r
+0x0a51, 0x0a51,\r
+0x0a59, 0x0a5c,\r
+0x0a5e, 0x0a5e,\r
+0x0a66, 0x0a76,\r
+0x0a81, 0x0a83,\r
+0x0a85, 0x0a8d,\r
+0x0a8f, 0x0a91,\r
+0x0a93, 0x0aa8,\r
+0x0aaa, 0x0ab0,\r
+0x0ab2, 0x0ab3,\r
+0x0ab5, 0x0ab9,\r
+0x0abc, 0x0ac5,\r
+0x0ac7, 0x0ac9,\r
+0x0acb, 0x0acd,\r
+0x0ad0, 0x0ad0,\r
+0x0ae0, 0x0ae3,\r
+0x0ae6, 0x0af1,\r
+0x0af9, 0x0aff,\r
+0x0b01, 0x0b03,\r
+0x0b05, 0x0b0c,\r
+0x0b0f, 0x0b10,\r
+0x0b13, 0x0b28,\r
+0x0b2a, 0x0b30,\r
+0x0b32, 0x0b33,\r
+0x0b35, 0x0b39,\r
+0x0b3c, 0x0b44,\r
+0x0b47, 0x0b48,\r
+0x0b4b, 0x0b4d,\r
+0x0b56, 0x0b57,\r
+0x0b5c, 0x0b5d,\r
+0x0b5f, 0x0b63,\r
+0x0b66, 0x0b77,\r
+0x0b82, 0x0b83,\r
+0x0b85, 0x0b8a,\r
+0x0b8e, 0x0b90,\r
+0x0b92, 0x0b95,\r
+0x0b99, 0x0b9a,\r
+0x0b9c, 0x0b9c,\r
+0x0b9e, 0x0b9f,\r
+0x0ba3, 0x0ba4,\r
+0x0ba8, 0x0baa,\r
+0x0bae, 0x0bb9,\r
+0x0bbe, 0x0bc2,\r
+0x0bc6, 0x0bc8,\r
+0x0bca, 0x0bcd,\r
+0x0bd0, 0x0bd0,\r
+0x0bd7, 0x0bd7,\r
+0x0be6, 0x0bfa,\r
+0x0c00, 0x0c0c,\r
+0x0c0e, 0x0c10,\r
+0x0c12, 0x0c28,\r
+0x0c2a, 0x0c39,\r
+0x0c3d, 0x0c44,\r
+0x0c46, 0x0c48,\r
+0x0c4a, 0x0c4d,\r
+0x0c55, 0x0c56,\r
+0x0c58, 0x0c5a,\r
+0x0c60, 0x0c63,\r
+0x0c66, 0x0c6f,\r
+0x0c78, 0x0c8c,\r
+0x0c8e, 0x0c90,\r
+0x0c92, 0x0ca8,\r
+0x0caa, 0x0cb3,\r
+0x0cb5, 0x0cb9,\r
+0x0cbc, 0x0cc4,\r
+0x0cc6, 0x0cc8,\r
+0x0cca, 0x0ccd,\r
+0x0cd5, 0x0cd6,\r
+0x0cde, 0x0cde,\r
+0x0ce0, 0x0ce3,\r
+0x0ce6, 0x0cef,\r
+0x0cf1, 0x0cf2,\r
+0x0d00, 0x0d03,\r
+0x0d05, 0x0d0c,\r
+0x0d0e, 0x0d10,\r
+0x0d12, 0x0d44,\r
+0x0d46, 0x0d48,\r
+0x0d4a, 0x0d4f,\r
+0x0d54, 0x0d63,\r
+0x0d66, 0x0d7f,\r
+0x0d82, 0x0d83,\r
+0x0d85, 0x0d96,\r
+0x0d9a, 0x0db1,\r
+0x0db3, 0x0dbb,\r
+0x0dbd, 0x0dbd,\r
+0x0dc0, 0x0dc6,\r
+0x0dca, 0x0dca,\r
+0x0dcf, 0x0dd4,\r
+0x0dd6, 0x0dd6,\r
+0x0dd8, 0x0ddf,\r
+0x0de6, 0x0def,\r
+0x0df2, 0x0df4,\r
+0x0e01, 0x0e3a,\r
+0x0e3f, 0x0e5b,\r
+0x0e81, 0x0e82,\r
+0x0e84, 0x0e84,\r
+0x0e87, 0x0e88,\r
+0x0e8a, 0x0e8a,\r
+0x0e8d, 0x0e8d,\r
+0x0e94, 0x0e97,\r
+0x0e99, 0x0e9f,\r
+0x0ea1, 0x0ea3,\r
+0x0ea5, 0x0ea5,\r
+0x0ea7, 0x0ea7,\r
+0x0eaa, 0x0eab,\r
+0x0ead, 0x0eb9,\r
+0x0ebb, 0x0ebd,\r
+0x0ec0, 0x0ec4,\r
+0x0ec6, 0x0ec6,\r
+0x0ec8, 0x0ecd,\r
+0x0ed0, 0x0ed9,\r
+0x0edc, 0x0edf,\r
+0x0f00, 0x0f47,\r
+0x0f49, 0x0f6c,\r
+0x0f71, 0x0f97,\r
+0x0f99, 0x0fbc,\r
+0x0fbe, 0x0fcc,\r
+0x0fce, 0x0fda,\r
+0x1000, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x1248,\r
+0x124a, 0x124d,\r
+0x1250, 0x1256,\r
+0x1258, 0x1258,\r
+0x125a, 0x125d,\r
+0x1260, 0x1288,\r
+0x128a, 0x128d,\r
+0x1290, 0x12b0,\r
+0x12b2, 0x12b5,\r
+0x12b8, 0x12be,\r
+0x12c0, 0x12c0,\r
+0x12c2, 0x12c5,\r
+0x12c8, 0x12d6,\r
+0x12d8, 0x1310,\r
+0x1312, 0x1315,\r
+0x1318, 0x135a,\r
+0x135d, 0x137c,\r
+0x1380, 0x1399,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0x1400, 0x169c,\r
+0x16a0, 0x16f8,\r
+0x1700, 0x170c,\r
+0x170e, 0x1714,\r
+0x1720, 0x1736,\r
+0x1740, 0x1753,\r
+0x1760, 0x176c,\r
+0x176e, 0x1770,\r
+0x1772, 0x1773,\r
+0x1780, 0x17dd,\r
+0x17e0, 0x17e9,\r
+0x17f0, 0x17f9,\r
+0x1800, 0x180e,\r
+0x1810, 0x1819,\r
+0x1820, 0x1878,\r
+0x1880, 0x18aa,\r
+0x18b0, 0x18f5,\r
+0x1900, 0x191e,\r
+0x1920, 0x192b,\r
+0x1930, 0x193b,\r
+0x1940, 0x1940,\r
+0x1944, 0x196d,\r
+0x1970, 0x1974,\r
+0x1980, 0x19ab,\r
+0x19b0, 0x19c9,\r
+0x19d0, 0x19da,\r
+0x19de, 0x1a1b,\r
+0x1a1e, 0x1a5e,\r
+0x1a60, 0x1a7c,\r
+0x1a7f, 0x1a89,\r
+0x1a90, 0x1a99,\r
+0x1aa0, 0x1aad,\r
+0x1ab0, 0x1abe,\r
+0x1b00, 0x1b4b,\r
+0x1b50, 0x1b7c,\r
+0x1b80, 0x1bf3,\r
+0x1bfc, 0x1c37,\r
+0x1c3b, 0x1c49,\r
+0x1c4d, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cc7,\r
+0x1cd0, 0x1cf9,\r
+0x1d00, 0x1df9,\r
+0x1dfb, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fc4,\r
+0x1fc6, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fdd, 0x1fef,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffe,\r
+0x2000, 0x2064,\r
+0x2066, 0x2071,\r
+0x2074, 0x208e,\r
+0x2090, 0x209c,\r
+0x20a0, 0x20bf,\r
+0x20d0, 0x20f0,\r
+0x2100, 0x218b,\r
+0x2190, 0x2426,\r
+0x2440, 0x244a,\r
+0x2460, 0x2b73,\r
+0x2b76, 0x2b95,\r
+0x2b98, 0x2bc8,\r
+0x2bca, 0x2bfe,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x2c60, 0x2cf3,\r
+0x2cf9, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0x2d30, 0x2d67,\r
+0x2d6f, 0x2d70,\r
+0x2d7f, 0x2d96,\r
+0x2da0, 0x2da6,\r
+0x2da8, 0x2dae,\r
+0x2db0, 0x2db6,\r
+0x2db8, 0x2dbe,\r
+0x2dc0, 0x2dc6,\r
+0x2dc8, 0x2dce,\r
+0x2dd0, 0x2dd6,\r
+0x2dd8, 0x2dde,\r
+0x2de0, 0x2e4e,\r
+0x2e80, 0x2e99,\r
+0x2e9b, 0x2ef3,\r
+0x2f00, 0x2fd5,\r
+0x2ff0, 0x2ffb,\r
+0x3000, 0x303f,\r
+0x3041, 0x3096,\r
+0x3099, 0x30ff,\r
+0x3105, 0x312f,\r
+0x3131, 0x318e,\r
+0x3190, 0x31ba,\r
+0x31c0, 0x31e3,\r
+0x31f0, 0x321e,\r
+0x3220, 0x32fe,\r
+0x3300, 0x4db5,\r
+0x4dc0, 0x9fef,\r
+0xa000, 0xa48c,\r
+0xa490, 0xa4c6,\r
+0xa4d0, 0xa62b,\r
+0xa640, 0xa6f7,\r
+0xa700, 0xa7b9,\r
+0xa7f7, 0xa82b,\r
+0xa830, 0xa839,\r
+0xa840, 0xa877,\r
+0xa880, 0xa8c5,\r
+0xa8ce, 0xa8d9,\r
+0xa8e0, 0xa953,\r
+0xa95f, 0xa97c,\r
+0xa980, 0xa9cd,\r
+0xa9cf, 0xa9d9,\r
+0xa9de, 0xa9fe,\r
+0xaa00, 0xaa36,\r
+0xaa40, 0xaa4d,\r
+0xaa50, 0xaa59,\r
+0xaa5c, 0xaac2,\r
+0xaadb, 0xaaf6,\r
+0xab01, 0xab06,\r
+0xab09, 0xab0e,\r
+0xab11, 0xab16,\r
+0xab20, 0xab26,\r
+0xab28, 0xab2e,\r
+0xab30, 0xab65,\r
+0xab70, 0xabed,\r
+0xabf0, 0xabf9,\r
+0xac00, 0xd7a3,\r
+0xd7b0, 0xd7c6,\r
+0xd7cb, 0xd7fb,\r
+0xd800, 0xfa6d,\r
+0xfa70, 0xfad9,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xfb1d, 0xfb36,\r
+0xfb38, 0xfb3c,\r
+0xfb3e, 0xfb3e,\r
+0xfb40, 0xfb41,\r
+0xfb43, 0xfb44,\r
+0xfb46, 0xfbc1,\r
+0xfbd3, 0xfd3f,\r
+0xfd50, 0xfd8f,\r
+0xfd92, 0xfdc7,\r
+0xfdf0, 0xfdfd,\r
+0xfe00, 0xfe19,\r
+0xfe20, 0xfe52,\r
+0xfe54, 0xfe66,\r
+0xfe68, 0xfe6b,\r
+0xfe70, 0xfe74,\r
+0xfe76, 0xfefc,\r
+0xfeff, 0xfeff,\r
+0xff01, 0xffbe,\r
+0xffc2, 0xffc7,\r
+0xffca, 0xffcf,\r
+0xffd2, 0xffd7,\r
+0xffda, 0xffdc,\r
+0xffe0, 0xffe6,\r
+0xffe8, 0xffee,\r
+0xfff9, 0xfffd,\r
+0x10000, 0x1000b,\r
+0x1000d, 0x10026,\r
+0x10028, 0x1003a,\r
+0x1003c, 0x1003d,\r
+0x1003f, 0x1004d,\r
+0x10050, 0x1005d,\r
+0x10080, 0x100fa,\r
+0x10100, 0x10102,\r
+0x10107, 0x10133,\r
+0x10137, 0x1018e,\r
+0x10190, 0x1019b,\r
+0x101a0, 0x101a0,\r
+0x101d0, 0x101fd,\r
+0x10280, 0x1029c,\r
+0x102a0, 0x102d0,\r
+0x102e0, 0x102fb,\r
+0x10300, 0x10323,\r
+0x1032d, 0x1034a,\r
+0x10350, 0x1037a,\r
+0x10380, 0x1039d,\r
+0x1039f, 0x103c3,\r
+0x103c8, 0x103d5,\r
+0x10400, 0x1049d,\r
+0x104a0, 0x104a9,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+0x10500, 0x10527,\r
+0x10530, 0x10563,\r
+0x1056f, 0x1056f,\r
+0x10600, 0x10736,\r
+0x10740, 0x10755,\r
+0x10760, 0x10767,\r
+0x10800, 0x10805,\r
+0x10808, 0x10808,\r
+0x1080a, 0x10835,\r
+0x10837, 0x10838,\r
+0x1083c, 0x1083c,\r
+0x1083f, 0x10855,\r
+0x10857, 0x1089e,\r
+0x108a7, 0x108af,\r
+0x108e0, 0x108f2,\r
+0x108f4, 0x108f5,\r
+0x108fb, 0x1091b,\r
+0x1091f, 0x10939,\r
+0x1093f, 0x1093f,\r
+0x10980, 0x109b7,\r
+0x109bc, 0x109cf,\r
+0x109d2, 0x10a03,\r
+0x10a05, 0x10a06,\r
+0x10a0c, 0x10a13,\r
+0x10a15, 0x10a17,\r
+0x10a19, 0x10a35,\r
+0x10a38, 0x10a3a,\r
+0x10a3f, 0x10a48,\r
+0x10a50, 0x10a58,\r
+0x10a60, 0x10a9f,\r
+0x10ac0, 0x10ae6,\r
+0x10aeb, 0x10af6,\r
+0x10b00, 0x10b35,\r
+0x10b39, 0x10b55,\r
+0x10b58, 0x10b72,\r
+0x10b78, 0x10b91,\r
+0x10b99, 0x10b9c,\r
+0x10ba9, 0x10baf,\r
+0x10c00, 0x10c48,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x10cfa, 0x10d27,\r
+0x10d30, 0x10d39,\r
+0x10e60, 0x10e7e,\r
+0x10f00, 0x10f27,\r
+0x10f30, 0x10f59,\r
+0x11000, 0x1104d,\r
+0x11052, 0x1106f,\r
+0x1107f, 0x110c1,\r
+0x110cd, 0x110cd,\r
+0x110d0, 0x110e8,\r
+0x110f0, 0x110f9,\r
+0x11100, 0x11134,\r
+0x11136, 0x11146,\r
+0x11150, 0x11176,\r
+0x11180, 0x111cd,\r
+0x111d0, 0x111df,\r
+0x111e1, 0x111f4,\r
+0x11200, 0x11211,\r
+0x11213, 0x1123e,\r
+0x11280, 0x11286,\r
+0x11288, 0x11288,\r
+0x1128a, 0x1128d,\r
+0x1128f, 0x1129d,\r
+0x1129f, 0x112a9,\r
+0x112b0, 0x112ea,\r
+0x112f0, 0x112f9,\r
+0x11300, 0x11303,\r
+0x11305, 0x1130c,\r
+0x1130f, 0x11310,\r
+0x11313, 0x11328,\r
+0x1132a, 0x11330,\r
+0x11332, 0x11333,\r
+0x11335, 0x11339,\r
+0x1133b, 0x11344,\r
+0x11347, 0x11348,\r
+0x1134b, 0x1134d,\r
+0x11350, 0x11350,\r
+0x11357, 0x11357,\r
+0x1135d, 0x11363,\r
+0x11366, 0x1136c,\r
+0x11370, 0x11374,\r
+0x11400, 0x11459,\r
+0x1145b, 0x1145b,\r
+0x1145d, 0x1145e,\r
+0x11480, 0x114c7,\r
+0x114d0, 0x114d9,\r
+0x11580, 0x115b5,\r
+0x115b8, 0x115dd,\r
+0x11600, 0x11644,\r
+0x11650, 0x11659,\r
+0x11660, 0x1166c,\r
+0x11680, 0x116b7,\r
+0x116c0, 0x116c9,\r
+0x11700, 0x1171a,\r
+0x1171d, 0x1172b,\r
+0x11730, 0x1173f,\r
+0x11800, 0x1183b,\r
+0x118a0, 0x118f2,\r
+0x118ff, 0x118ff,\r
+0x11a00, 0x11a47,\r
+0x11a50, 0x11a83,\r
+0x11a86, 0x11aa2,\r
+0x11ac0, 0x11af8,\r
+0x11c00, 0x11c08,\r
+0x11c0a, 0x11c36,\r
+0x11c38, 0x11c45,\r
+0x11c50, 0x11c6c,\r
+0x11c70, 0x11c8f,\r
+0x11c92, 0x11ca7,\r
+0x11ca9, 0x11cb6,\r
+0x11d00, 0x11d06,\r
+0x11d08, 0x11d09,\r
+0x11d0b, 0x11d36,\r
+0x11d3a, 0x11d3a,\r
+0x11d3c, 0x11d3d,\r
+0x11d3f, 0x11d47,\r
+0x11d50, 0x11d59,\r
+0x11d60, 0x11d65,\r
+0x11d67, 0x11d68,\r
+0x11d6a, 0x11d8e,\r
+0x11d90, 0x11d91,\r
+0x11d93, 0x11d98,\r
+0x11da0, 0x11da9,\r
+0x11ee0, 0x11ef8,\r
+0x12000, 0x12399,\r
+0x12400, 0x1246e,\r
+0x12470, 0x12474,\r
+0x12480, 0x12543,\r
+0x13000, 0x1342e,\r
+0x14400, 0x14646,\r
+0x16800, 0x16a38,\r
+0x16a40, 0x16a5e,\r
+0x16a60, 0x16a69,\r
+0x16a6e, 0x16a6f,\r
+0x16ad0, 0x16aed,\r
+0x16af0, 0x16af5,\r
+0x16b00, 0x16b45,\r
+0x16b50, 0x16b59,\r
+0x16b5b, 0x16b61,\r
+0x16b63, 0x16b77,\r
+0x16b7d, 0x16b8f,\r
+0x16e40, 0x16e9a,\r
+0x16f00, 0x16f44,\r
+0x16f50, 0x16f7e,\r
+0x16f8f, 0x16f9f,\r
+0x16fe0, 0x16fe1,\r
+0x17000, 0x187f1,\r
+0x18800, 0x18af2,\r
+0x1b000, 0x1b11e,\r
+0x1b170, 0x1b2fb,\r
+0x1bc00, 0x1bc6a,\r
+0x1bc70, 0x1bc7c,\r
+0x1bc80, 0x1bc88,\r
+0x1bc90, 0x1bc99,\r
+0x1bc9c, 0x1bca3,\r
+0x1d000, 0x1d0f5,\r
+0x1d100, 0x1d126,\r
+0x1d129, 0x1d1e8,\r
+0x1d200, 0x1d245,\r
+0x1d2e0, 0x1d2f3,\r
+0x1d300, 0x1d356,\r
+0x1d360, 0x1d378,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d7cb,\r
+0x1d7ce, 0x1da8b,\r
+0x1da9b, 0x1da9f,\r
+0x1daa1, 0x1daaf,\r
+0x1e000, 0x1e006,\r
+0x1e008, 0x1e018,\r
+0x1e01b, 0x1e021,\r
+0x1e023, 0x1e024,\r
+0x1e026, 0x1e02a,\r
+0x1e800, 0x1e8c4,\r
+0x1e8c7, 0x1e8d6,\r
+0x1e900, 0x1e94a,\r
+0x1e950, 0x1e959,\r
+0x1e95e, 0x1e95f,\r
+0x1ec71, 0x1ecb4,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+0x1eef0, 0x1eef1,\r
+0x1f000, 0x1f02b,\r
+0x1f030, 0x1f093,\r
+0x1f0a0, 0x1f0ae,\r
+0x1f0b1, 0x1f0bf,\r
+0x1f0c1, 0x1f0cf,\r
+0x1f0d1, 0x1f0f5,\r
+0x1f100, 0x1f10c,\r
+0x1f110, 0x1f16b,\r
+0x1f170, 0x1f1ac,\r
+0x1f1e6, 0x1f202,\r
+0x1f210, 0x1f23b,\r
+0x1f240, 0x1f248,\r
+0x1f250, 0x1f251,\r
+0x1f260, 0x1f265,\r
+0x1f300, 0x1f6d4,\r
+0x1f6e0, 0x1f6ec,\r
+0x1f6f0, 0x1f6f9,\r
+0x1f700, 0x1f773,\r
+0x1f780, 0x1f7d8,\r
+0x1f800, 0x1f80b,\r
+0x1f810, 0x1f847,\r
+0x1f850, 0x1f859,\r
+0x1f860, 0x1f887,\r
+0x1f890, 0x1f8ad,\r
+0x1f900, 0x1f90b,\r
+0x1f910, 0x1f93e,\r
+0x1f940, 0x1f970,\r
+0x1f973, 0x1f976,\r
+0x1f97a, 0x1f97a,\r
+0x1f97c, 0x1f9a2,\r
+0x1f9b0, 0x1f9b9,\r
+0x1f9c0, 0x1f9c2,\r
+0x1f9d0, 0x1f9ff,\r
+0x1fa60, 0x1fa6d,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+0x2f800, 0x2fa1d,\r
+0xe0001, 0xe0001,\r
+0xe0020, 0xe007f,\r
+0xe0100, 0xe01ef,\r
+0xf0000, 0xffffd,\r
+0x100000, 0x10fffd,\r
+}; /* END of CR_Assigned */\r
+\r
+/* PROPERTY: 'Avestan': Script */\r
+static const OnigCodePoint\r
+CR_Avestan[] = { 2,\r
+0x10b00, 0x10b35,\r
+0x10b39, 0x10b3f,\r
+}; /* END of CR_Avestan */\r
+\r
+/* PROPERTY: 'Balinese': Script */\r
+static const OnigCodePoint\r
+CR_Balinese[] = { 2,\r
+0x1b00, 0x1b4b,\r
+0x1b50, 0x1b7c,\r
+}; /* END of CR_Balinese */\r
+\r
+/* PROPERTY: 'Bamum': Script */\r
+static const OnigCodePoint\r
+CR_Bamum[] = { 2,\r
+0xa6a0, 0xa6f7,\r
+0x16800, 0x16a38,\r
+}; /* END of CR_Bamum */\r
+\r
+/* PROPERTY: 'Bassa_Vah': Script */\r
+static const OnigCodePoint\r
+CR_Bassa_Vah[] = { 2,\r
+0x16ad0, 0x16aed,\r
+0x16af0, 0x16af5,\r
+}; /* END of CR_Bassa_Vah */\r
+\r
+/* PROPERTY: 'Batak': Script */\r
+static const OnigCodePoint\r
+CR_Batak[] = { 2,\r
+0x1bc0, 0x1bf3,\r
+0x1bfc, 0x1bff,\r
+}; /* END of CR_Batak */\r
+\r
+/* PROPERTY: 'Bengali': Script */\r
+static const OnigCodePoint\r
+CR_Bengali[] = { 14,\r
+0x0980, 0x0983,\r
+0x0985, 0x098c,\r
+0x098f, 0x0990,\r
+0x0993, 0x09a8,\r
+0x09aa, 0x09b0,\r
+0x09b2, 0x09b2,\r
+0x09b6, 0x09b9,\r
+0x09bc, 0x09c4,\r
+0x09c7, 0x09c8,\r
+0x09cb, 0x09ce,\r
+0x09d7, 0x09d7,\r
+0x09dc, 0x09dd,\r
+0x09df, 0x09e3,\r
+0x09e6, 0x09fe,\r
+}; /* END of CR_Bengali */\r
+\r
+/* PROPERTY: 'Bhaiksuki': Script */\r
+static const OnigCodePoint\r
+CR_Bhaiksuki[] = { 4,\r
+0x11c00, 0x11c08,\r
+0x11c0a, 0x11c36,\r
+0x11c38, 0x11c45,\r
+0x11c50, 0x11c6c,\r
+}; /* END of CR_Bhaiksuki */\r
+\r
+/* PROPERTY: 'Bidi_Control': Binary Property */\r
+static const OnigCodePoint\r
+CR_Bidi_Control[] = { 4,\r
+0x061c, 0x061c,\r
+0x200e, 0x200f,\r
+0x202a, 0x202e,\r
+0x2066, 0x2069,\r
+}; /* END of CR_Bidi_Control */\r
+\r
+/* PROPERTY: 'Bopomofo': Script */\r
+static const OnigCodePoint\r
+CR_Bopomofo[] = { 3,\r
+0x02ea, 0x02eb,\r
+0x3105, 0x312f,\r
+0x31a0, 0x31ba,\r
+}; /* END of CR_Bopomofo */\r
+\r
+/* PROPERTY: 'Brahmi': Script */\r
+static const OnigCodePoint\r
+CR_Brahmi[] = { 3,\r
+0x11000, 0x1104d,\r
+0x11052, 0x1106f,\r
+0x1107f, 0x1107f,\r
+}; /* END of CR_Brahmi */\r
+\r
+/* PROPERTY: 'Braille': Script */\r
+static const OnigCodePoint\r
+CR_Braille[] = { 1,\r
+0x2800, 0x28ff,\r
+}; /* END of CR_Braille */\r
+\r
+/* PROPERTY: 'Buginese': Script */\r
+static const OnigCodePoint\r
+CR_Buginese[] = { 2,\r
+0x1a00, 0x1a1b,\r
+0x1a1e, 0x1a1f,\r
+}; /* END of CR_Buginese */\r
+\r
+/* PROPERTY: 'Buhid': Script */\r
+static const OnigCodePoint\r
+CR_Buhid[] = { 1,\r
+0x1740, 0x1753,\r
+}; /* END of CR_Buhid */\r
+\r
+/* PROPERTY: 'C': Major Category */\r
+static const OnigCodePoint\r
+CR_C[] = { 661,\r
+0x0000, 0x001f,\r
+0x007f, 0x009f,\r
+0x00ad, 0x00ad,\r
+0x0378, 0x0379,\r
+0x0380, 0x0383,\r
+0x038b, 0x038b,\r
+0x038d, 0x038d,\r
+0x03a2, 0x03a2,\r
+0x0530, 0x0530,\r
+0x0557, 0x0558,\r
+0x058b, 0x058c,\r
+0x0590, 0x0590,\r
+0x05c8, 0x05cf,\r
+0x05eb, 0x05ee,\r
+0x05f5, 0x0605,\r
+0x061c, 0x061d,\r
+0x06dd, 0x06dd,\r
+0x070e, 0x070f,\r
+0x074b, 0x074c,\r
+0x07b2, 0x07bf,\r
+0x07fb, 0x07fc,\r
+0x082e, 0x082f,\r
+0x083f, 0x083f,\r
+0x085c, 0x085d,\r
+0x085f, 0x085f,\r
+0x086b, 0x089f,\r
+0x08b5, 0x08b5,\r
+0x08be, 0x08d2,\r
+0x08e2, 0x08e2,\r
+0x0984, 0x0984,\r
+0x098d, 0x098e,\r
+0x0991, 0x0992,\r
+0x09a9, 0x09a9,\r
+0x09b1, 0x09b1,\r
+0x09b3, 0x09b5,\r
+0x09ba, 0x09bb,\r
+0x09c5, 0x09c6,\r
+0x09c9, 0x09ca,\r
+0x09cf, 0x09d6,\r
+0x09d8, 0x09db,\r
+0x09de, 0x09de,\r
+0x09e4, 0x09e5,\r
+0x09ff, 0x0a00,\r
+0x0a04, 0x0a04,\r
+0x0a0b, 0x0a0e,\r
+0x0a11, 0x0a12,\r
+0x0a29, 0x0a29,\r
+0x0a31, 0x0a31,\r
+0x0a34, 0x0a34,\r
+0x0a37, 0x0a37,\r
+0x0a3a, 0x0a3b,\r
+0x0a3d, 0x0a3d,\r
+0x0a43, 0x0a46,\r
+0x0a49, 0x0a4a,\r
+0x0a4e, 0x0a50,\r
+0x0a52, 0x0a58,\r
+0x0a5d, 0x0a5d,\r
+0x0a5f, 0x0a65,\r
+0x0a77, 0x0a80,\r
+0x0a84, 0x0a84,\r
+0x0a8e, 0x0a8e,\r
+0x0a92, 0x0a92,\r
+0x0aa9, 0x0aa9,\r
+0x0ab1, 0x0ab1,\r
+0x0ab4, 0x0ab4,\r
+0x0aba, 0x0abb,\r
+0x0ac6, 0x0ac6,\r
+0x0aca, 0x0aca,\r
+0x0ace, 0x0acf,\r
+0x0ad1, 0x0adf,\r
+0x0ae4, 0x0ae5,\r
+0x0af2, 0x0af8,\r
+0x0b00, 0x0b00,\r
+0x0b04, 0x0b04,\r
+0x0b0d, 0x0b0e,\r
+0x0b11, 0x0b12,\r
+0x0b29, 0x0b29,\r
+0x0b31, 0x0b31,\r
+0x0b34, 0x0b34,\r
+0x0b3a, 0x0b3b,\r
+0x0b45, 0x0b46,\r
+0x0b49, 0x0b4a,\r
+0x0b4e, 0x0b55,\r
+0x0b58, 0x0b5b,\r
+0x0b5e, 0x0b5e,\r
+0x0b64, 0x0b65,\r
+0x0b78, 0x0b81,\r
+0x0b84, 0x0b84,\r
+0x0b8b, 0x0b8d,\r
+0x0b91, 0x0b91,\r
+0x0b96, 0x0b98,\r
+0x0b9b, 0x0b9b,\r
+0x0b9d, 0x0b9d,\r
+0x0ba0, 0x0ba2,\r
+0x0ba5, 0x0ba7,\r
+0x0bab, 0x0bad,\r
+0x0bba, 0x0bbd,\r
+0x0bc3, 0x0bc5,\r
+0x0bc9, 0x0bc9,\r
+0x0bce, 0x0bcf,\r
+0x0bd1, 0x0bd6,\r
+0x0bd8, 0x0be5,\r
+0x0bfb, 0x0bff,\r
+0x0c0d, 0x0c0d,\r
+0x0c11, 0x0c11,\r
+0x0c29, 0x0c29,\r
+0x0c3a, 0x0c3c,\r
+0x0c45, 0x0c45,\r
+0x0c49, 0x0c49,\r
+0x0c4e, 0x0c54,\r
+0x0c57, 0x0c57,\r
+0x0c5b, 0x0c5f,\r
+0x0c64, 0x0c65,\r
+0x0c70, 0x0c77,\r
+0x0c8d, 0x0c8d,\r
+0x0c91, 0x0c91,\r
+0x0ca9, 0x0ca9,\r
+0x0cb4, 0x0cb4,\r
+0x0cba, 0x0cbb,\r
+0x0cc5, 0x0cc5,\r
+0x0cc9, 0x0cc9,\r
+0x0cce, 0x0cd4,\r
+0x0cd7, 0x0cdd,\r
+0x0cdf, 0x0cdf,\r
+0x0ce4, 0x0ce5,\r
+0x0cf0, 0x0cf0,\r
+0x0cf3, 0x0cff,\r
+0x0d04, 0x0d04,\r
+0x0d0d, 0x0d0d,\r
+0x0d11, 0x0d11,\r
+0x0d45, 0x0d45,\r
+0x0d49, 0x0d49,\r
+0x0d50, 0x0d53,\r
+0x0d64, 0x0d65,\r
+0x0d80, 0x0d81,\r
+0x0d84, 0x0d84,\r
+0x0d97, 0x0d99,\r
+0x0db2, 0x0db2,\r
+0x0dbc, 0x0dbc,\r
+0x0dbe, 0x0dbf,\r
+0x0dc7, 0x0dc9,\r
+0x0dcb, 0x0dce,\r
+0x0dd5, 0x0dd5,\r
+0x0dd7, 0x0dd7,\r
+0x0de0, 0x0de5,\r
+0x0df0, 0x0df1,\r
+0x0df5, 0x0e00,\r
+0x0e3b, 0x0e3e,\r
+0x0e5c, 0x0e80,\r
+0x0e83, 0x0e83,\r
+0x0e85, 0x0e86,\r
+0x0e89, 0x0e89,\r
+0x0e8b, 0x0e8c,\r
+0x0e8e, 0x0e93,\r
+0x0e98, 0x0e98,\r
+0x0ea0, 0x0ea0,\r
+0x0ea4, 0x0ea4,\r
+0x0ea6, 0x0ea6,\r
+0x0ea8, 0x0ea9,\r
+0x0eac, 0x0eac,\r
+0x0eba, 0x0eba,\r
+0x0ebe, 0x0ebf,\r
+0x0ec5, 0x0ec5,\r
+0x0ec7, 0x0ec7,\r
+0x0ece, 0x0ecf,\r
+0x0eda, 0x0edb,\r
+0x0ee0, 0x0eff,\r
+0x0f48, 0x0f48,\r
+0x0f6d, 0x0f70,\r
+0x0f98, 0x0f98,\r
+0x0fbd, 0x0fbd,\r
+0x0fcd, 0x0fcd,\r
+0x0fdb, 0x0fff,\r
+0x10c6, 0x10c6,\r
+0x10c8, 0x10cc,\r
+0x10ce, 0x10cf,\r
+0x1249, 0x1249,\r
+0x124e, 0x124f,\r
+0x1257, 0x1257,\r
+0x1259, 0x1259,\r
+0x125e, 0x125f,\r
+0x1289, 0x1289,\r
+0x128e, 0x128f,\r
+0x12b1, 0x12b1,\r
+0x12b6, 0x12b7,\r
+0x12bf, 0x12bf,\r
+0x12c1, 0x12c1,\r
+0x12c6, 0x12c7,\r
+0x12d7, 0x12d7,\r
+0x1311, 0x1311,\r
+0x1316, 0x1317,\r
+0x135b, 0x135c,\r
+0x137d, 0x137f,\r
+0x139a, 0x139f,\r
+0x13f6, 0x13f7,\r
+0x13fe, 0x13ff,\r
+0x169d, 0x169f,\r
+0x16f9, 0x16ff,\r
+0x170d, 0x170d,\r
+0x1715, 0x171f,\r
+0x1737, 0x173f,\r
+0x1754, 0x175f,\r
+0x176d, 0x176d,\r
+0x1771, 0x1771,\r
+0x1774, 0x177f,\r
+0x17de, 0x17df,\r
+0x17ea, 0x17ef,\r
+0x17fa, 0x17ff,\r
+0x180e, 0x180f,\r
+0x181a, 0x181f,\r
+0x1879, 0x187f,\r
+0x18ab, 0x18af,\r
+0x18f6, 0x18ff,\r
+0x191f, 0x191f,\r
+0x192c, 0x192f,\r
+0x193c, 0x193f,\r
+0x1941, 0x1943,\r
+0x196e, 0x196f,\r
+0x1975, 0x197f,\r
+0x19ac, 0x19af,\r
+0x19ca, 0x19cf,\r
+0x19db, 0x19dd,\r
+0x1a1c, 0x1a1d,\r
+0x1a5f, 0x1a5f,\r
+0x1a7d, 0x1a7e,\r
+0x1a8a, 0x1a8f,\r
+0x1a9a, 0x1a9f,\r
+0x1aae, 0x1aaf,\r
+0x1abf, 0x1aff,\r
+0x1b4c, 0x1b4f,\r
+0x1b7d, 0x1b7f,\r
+0x1bf4, 0x1bfb,\r
+0x1c38, 0x1c3a,\r
+0x1c4a, 0x1c4c,\r
+0x1c89, 0x1c8f,\r
+0x1cbb, 0x1cbc,\r
+0x1cc8, 0x1ccf,\r
+0x1cfa, 0x1cff,\r
+0x1dfa, 0x1dfa,\r
+0x1f16, 0x1f17,\r
+0x1f1e, 0x1f1f,\r
+0x1f46, 0x1f47,\r
+0x1f4e, 0x1f4f,\r
+0x1f58, 0x1f58,\r
+0x1f5a, 0x1f5a,\r
+0x1f5c, 0x1f5c,\r
+0x1f5e, 0x1f5e,\r
+0x1f7e, 0x1f7f,\r
+0x1fb5, 0x1fb5,\r
+0x1fc5, 0x1fc5,\r
+0x1fd4, 0x1fd5,\r
+0x1fdc, 0x1fdc,\r
+0x1ff0, 0x1ff1,\r
+0x1ff5, 0x1ff5,\r
+0x1fff, 0x1fff,\r
+0x200b, 0x200f,\r
+0x202a, 0x202e,\r
+0x2060, 0x206f,\r
+0x2072, 0x2073,\r
+0x208f, 0x208f,\r
+0x209d, 0x209f,\r
+0x20c0, 0x20cf,\r
+0x20f1, 0x20ff,\r
+0x218c, 0x218f,\r
+0x2427, 0x243f,\r
+0x244b, 0x245f,\r
+0x2b74, 0x2b75,\r
+0x2b96, 0x2b97,\r
+0x2bc9, 0x2bc9,\r
+0x2bff, 0x2bff,\r
+0x2c2f, 0x2c2f,\r
+0x2c5f, 0x2c5f,\r
+0x2cf4, 0x2cf8,\r
+0x2d26, 0x2d26,\r
+0x2d28, 0x2d2c,\r
+0x2d2e, 0x2d2f,\r
+0x2d68, 0x2d6e,\r
+0x2d71, 0x2d7e,\r
+0x2d97, 0x2d9f,\r
+0x2da7, 0x2da7,\r
+0x2daf, 0x2daf,\r
+0x2db7, 0x2db7,\r
+0x2dbf, 0x2dbf,\r
+0x2dc7, 0x2dc7,\r
+0x2dcf, 0x2dcf,\r
+0x2dd7, 0x2dd7,\r
+0x2ddf, 0x2ddf,\r
+0x2e4f, 0x2e7f,\r
+0x2e9a, 0x2e9a,\r
+0x2ef4, 0x2eff,\r
+0x2fd6, 0x2fef,\r
+0x2ffc, 0x2fff,\r
+0x3040, 0x3040,\r
+0x3097, 0x3098,\r
+0x3100, 0x3104,\r
+0x3130, 0x3130,\r
+0x318f, 0x318f,\r
+0x31bb, 0x31bf,\r
+0x31e4, 0x31ef,\r
+0x321f, 0x321f,\r
+0x32ff, 0x32ff,\r
+0x4db6, 0x4dbf,\r
+0x9ff0, 0x9fff,\r
+0xa48d, 0xa48f,\r
+0xa4c7, 0xa4cf,\r
+0xa62c, 0xa63f,\r
+0xa6f8, 0xa6ff,\r
+0xa7ba, 0xa7f6,\r
+0xa82c, 0xa82f,\r
+0xa83a, 0xa83f,\r
+0xa878, 0xa87f,\r
+0xa8c6, 0xa8cd,\r
+0xa8da, 0xa8df,\r
+0xa954, 0xa95e,\r
+0xa97d, 0xa97f,\r
+0xa9ce, 0xa9ce,\r
+0xa9da, 0xa9dd,\r
+0xa9ff, 0xa9ff,\r
+0xaa37, 0xaa3f,\r
+0xaa4e, 0xaa4f,\r
+0xaa5a, 0xaa5b,\r
+0xaac3, 0xaada,\r
+0xaaf7, 0xab00,\r
+0xab07, 0xab08,\r
+0xab0f, 0xab10,\r
+0xab17, 0xab1f,\r
+0xab27, 0xab27,\r
+0xab2f, 0xab2f,\r
+0xab66, 0xab6f,\r
+0xabee, 0xabef,\r
+0xabfa, 0xabff,\r
+0xd7a4, 0xd7af,\r
+0xd7c7, 0xd7ca,\r
+0xd7fc, 0xf8ff,\r
+0xfa6e, 0xfa6f,\r
+0xfada, 0xfaff,\r
+0xfb07, 0xfb12,\r
+0xfb18, 0xfb1c,\r
+0xfb37, 0xfb37,\r
+0xfb3d, 0xfb3d,\r
+0xfb3f, 0xfb3f,\r
+0xfb42, 0xfb42,\r
+0xfb45, 0xfb45,\r
+0xfbc2, 0xfbd2,\r
+0xfd40, 0xfd4f,\r
+0xfd90, 0xfd91,\r
+0xfdc8, 0xfdef,\r
+0xfdfe, 0xfdff,\r
+0xfe1a, 0xfe1f,\r
+0xfe53, 0xfe53,\r
+0xfe67, 0xfe67,\r
+0xfe6c, 0xfe6f,\r
+0xfe75, 0xfe75,\r
+0xfefd, 0xff00,\r
+0xffbf, 0xffc1,\r
+0xffc8, 0xffc9,\r
+0xffd0, 0xffd1,\r
+0xffd8, 0xffd9,\r
+0xffdd, 0xffdf,\r
+0xffe7, 0xffe7,\r
+0xffef, 0xfffb,\r
+0xfffe, 0xffff,\r
+0x1000c, 0x1000c,\r
+0x10027, 0x10027,\r
+0x1003b, 0x1003b,\r
+0x1003e, 0x1003e,\r
+0x1004e, 0x1004f,\r
+0x1005e, 0x1007f,\r
+0x100fb, 0x100ff,\r
+0x10103, 0x10106,\r
+0x10134, 0x10136,\r
+0x1018f, 0x1018f,\r
+0x1019c, 0x1019f,\r
+0x101a1, 0x101cf,\r
+0x101fe, 0x1027f,\r
+0x1029d, 0x1029f,\r
+0x102d1, 0x102df,\r
+0x102fc, 0x102ff,\r
+0x10324, 0x1032c,\r
+0x1034b, 0x1034f,\r
+0x1037b, 0x1037f,\r
+0x1039e, 0x1039e,\r
+0x103c4, 0x103c7,\r
+0x103d6, 0x103ff,\r
+0x1049e, 0x1049f,\r
+0x104aa, 0x104af,\r
+0x104d4, 0x104d7,\r
+0x104fc, 0x104ff,\r
+0x10528, 0x1052f,\r
+0x10564, 0x1056e,\r
+0x10570, 0x105ff,\r
+0x10737, 0x1073f,\r
+0x10756, 0x1075f,\r
+0x10768, 0x107ff,\r
+0x10806, 0x10807,\r
+0x10809, 0x10809,\r
+0x10836, 0x10836,\r
+0x10839, 0x1083b,\r
+0x1083d, 0x1083e,\r
+0x10856, 0x10856,\r
+0x1089f, 0x108a6,\r
+0x108b0, 0x108df,\r
+0x108f3, 0x108f3,\r
+0x108f6, 0x108fa,\r
+0x1091c, 0x1091e,\r
+0x1093a, 0x1093e,\r
+0x10940, 0x1097f,\r
+0x109b8, 0x109bb,\r
+0x109d0, 0x109d1,\r
+0x10a04, 0x10a04,\r
+0x10a07, 0x10a0b,\r
+0x10a14, 0x10a14,\r
+0x10a18, 0x10a18,\r
+0x10a36, 0x10a37,\r
+0x10a3b, 0x10a3e,\r
+0x10a49, 0x10a4f,\r
+0x10a59, 0x10a5f,\r
+0x10aa0, 0x10abf,\r
+0x10ae7, 0x10aea,\r
+0x10af7, 0x10aff,\r
+0x10b36, 0x10b38,\r
+0x10b56, 0x10b57,\r
+0x10b73, 0x10b77,\r
+0x10b92, 0x10b98,\r
+0x10b9d, 0x10ba8,\r
+0x10bb0, 0x10bff,\r
+0x10c49, 0x10c7f,\r
+0x10cb3, 0x10cbf,\r
+0x10cf3, 0x10cf9,\r
+0x10d28, 0x10d2f,\r
+0x10d3a, 0x10e5f,\r
+0x10e7f, 0x10eff,\r
+0x10f28, 0x10f2f,\r
+0x10f5a, 0x10fff,\r
+0x1104e, 0x11051,\r
+0x11070, 0x1107e,\r
+0x110bd, 0x110bd,\r
+0x110c2, 0x110cf,\r
+0x110e9, 0x110ef,\r
+0x110fa, 0x110ff,\r
+0x11135, 0x11135,\r
+0x11147, 0x1114f,\r
+0x11177, 0x1117f,\r
+0x111ce, 0x111cf,\r
+0x111e0, 0x111e0,\r
+0x111f5, 0x111ff,\r
+0x11212, 0x11212,\r
+0x1123f, 0x1127f,\r
+0x11287, 0x11287,\r
+0x11289, 0x11289,\r
+0x1128e, 0x1128e,\r
+0x1129e, 0x1129e,\r
+0x112aa, 0x112af,\r
+0x112eb, 0x112ef,\r
+0x112fa, 0x112ff,\r
+0x11304, 0x11304,\r
+0x1130d, 0x1130e,\r
+0x11311, 0x11312,\r
+0x11329, 0x11329,\r
+0x11331, 0x11331,\r
+0x11334, 0x11334,\r
+0x1133a, 0x1133a,\r
+0x11345, 0x11346,\r
+0x11349, 0x1134a,\r
+0x1134e, 0x1134f,\r
+0x11351, 0x11356,\r
+0x11358, 0x1135c,\r
+0x11364, 0x11365,\r
+0x1136d, 0x1136f,\r
+0x11375, 0x113ff,\r
+0x1145a, 0x1145a,\r
+0x1145c, 0x1145c,\r
+0x1145f, 0x1147f,\r
+0x114c8, 0x114cf,\r
+0x114da, 0x1157f,\r
+0x115b6, 0x115b7,\r
+0x115de, 0x115ff,\r
+0x11645, 0x1164f,\r
+0x1165a, 0x1165f,\r
+0x1166d, 0x1167f,\r
+0x116b8, 0x116bf,\r
+0x116ca, 0x116ff,\r
+0x1171b, 0x1171c,\r
+0x1172c, 0x1172f,\r
+0x11740, 0x117ff,\r
+0x1183c, 0x1189f,\r
+0x118f3, 0x118fe,\r
+0x11900, 0x119ff,\r
+0x11a48, 0x11a4f,\r
+0x11a84, 0x11a85,\r
+0x11aa3, 0x11abf,\r
+0x11af9, 0x11bff,\r
+0x11c09, 0x11c09,\r
+0x11c37, 0x11c37,\r
+0x11c46, 0x11c4f,\r
+0x11c6d, 0x11c6f,\r
+0x11c90, 0x11c91,\r
+0x11ca8, 0x11ca8,\r
+0x11cb7, 0x11cff,\r
+0x11d07, 0x11d07,\r
+0x11d0a, 0x11d0a,\r
+0x11d37, 0x11d39,\r
+0x11d3b, 0x11d3b,\r
+0x11d3e, 0x11d3e,\r
+0x11d48, 0x11d4f,\r
+0x11d5a, 0x11d5f,\r
+0x11d66, 0x11d66,\r
+0x11d69, 0x11d69,\r
+0x11d8f, 0x11d8f,\r
+0x11d92, 0x11d92,\r
+0x11d99, 0x11d9f,\r
+0x11daa, 0x11edf,\r
+0x11ef9, 0x11fff,\r
+0x1239a, 0x123ff,\r
+0x1246f, 0x1246f,\r
+0x12475, 0x1247f,\r
+0x12544, 0x12fff,\r
+0x1342f, 0x143ff,\r
+0x14647, 0x167ff,\r
+0x16a39, 0x16a3f,\r
+0x16a5f, 0x16a5f,\r
+0x16a6a, 0x16a6d,\r
+0x16a70, 0x16acf,\r
+0x16aee, 0x16aef,\r
+0x16af6, 0x16aff,\r
+0x16b46, 0x16b4f,\r
+0x16b5a, 0x16b5a,\r
+0x16b62, 0x16b62,\r
+0x16b78, 0x16b7c,\r
+0x16b90, 0x16e3f,\r
+0x16e9b, 0x16eff,\r
+0x16f45, 0x16f4f,\r
+0x16f7f, 0x16f8e,\r
+0x16fa0, 0x16fdf,\r
+0x16fe2, 0x16fff,\r
+0x187f2, 0x187ff,\r
+0x18af3, 0x1afff,\r
+0x1b11f, 0x1b16f,\r
+0x1b2fc, 0x1bbff,\r
+0x1bc6b, 0x1bc6f,\r
+0x1bc7d, 0x1bc7f,\r
+0x1bc89, 0x1bc8f,\r
+0x1bc9a, 0x1bc9b,\r
+0x1bca0, 0x1cfff,\r
+0x1d0f6, 0x1d0ff,\r
+0x1d127, 0x1d128,\r
+0x1d173, 0x1d17a,\r
+0x1d1e9, 0x1d1ff,\r
+0x1d246, 0x1d2df,\r
+0x1d2f4, 0x1d2ff,\r
+0x1d357, 0x1d35f,\r
+0x1d379, 0x1d3ff,\r
+0x1d455, 0x1d455,\r
+0x1d49d, 0x1d49d,\r
+0x1d4a0, 0x1d4a1,\r
+0x1d4a3, 0x1d4a4,\r
+0x1d4a7, 0x1d4a8,\r
+0x1d4ad, 0x1d4ad,\r
+0x1d4ba, 0x1d4ba,\r
+0x1d4bc, 0x1d4bc,\r
+0x1d4c4, 0x1d4c4,\r
+0x1d506, 0x1d506,\r
+0x1d50b, 0x1d50c,\r
+0x1d515, 0x1d515,\r
+0x1d51d, 0x1d51d,\r
+0x1d53a, 0x1d53a,\r
+0x1d53f, 0x1d53f,\r
+0x1d545, 0x1d545,\r
+0x1d547, 0x1d549,\r
+0x1d551, 0x1d551,\r
+0x1d6a6, 0x1d6a7,\r
+0x1d7cc, 0x1d7cd,\r
+0x1da8c, 0x1da9a,\r
+0x1daa0, 0x1daa0,\r
+0x1dab0, 0x1dfff,\r
+0x1e007, 0x1e007,\r
+0x1e019, 0x1e01a,\r
+0x1e022, 0x1e022,\r
+0x1e025, 0x1e025,\r
+0x1e02b, 0x1e7ff,\r
+0x1e8c5, 0x1e8c6,\r
+0x1e8d7, 0x1e8ff,\r
+0x1e94b, 0x1e94f,\r
+0x1e95a, 0x1e95d,\r
+0x1e960, 0x1ec70,\r
+0x1ecb5, 0x1edff,\r
+0x1ee04, 0x1ee04,\r
+0x1ee20, 0x1ee20,\r
+0x1ee23, 0x1ee23,\r
+0x1ee25, 0x1ee26,\r
+0x1ee28, 0x1ee28,\r
+0x1ee33, 0x1ee33,\r
+0x1ee38, 0x1ee38,\r
+0x1ee3a, 0x1ee3a,\r
+0x1ee3c, 0x1ee41,\r
+0x1ee43, 0x1ee46,\r
+0x1ee48, 0x1ee48,\r
+0x1ee4a, 0x1ee4a,\r
+0x1ee4c, 0x1ee4c,\r
+0x1ee50, 0x1ee50,\r
+0x1ee53, 0x1ee53,\r
+0x1ee55, 0x1ee56,\r
+0x1ee58, 0x1ee58,\r
+0x1ee5a, 0x1ee5a,\r
+0x1ee5c, 0x1ee5c,\r
+0x1ee5e, 0x1ee5e,\r
+0x1ee60, 0x1ee60,\r
+0x1ee63, 0x1ee63,\r
+0x1ee65, 0x1ee66,\r
+0x1ee6b, 0x1ee6b,\r
+0x1ee73, 0x1ee73,\r
+0x1ee78, 0x1ee78,\r
+0x1ee7d, 0x1ee7d,\r
+0x1ee7f, 0x1ee7f,\r
+0x1ee8a, 0x1ee8a,\r
+0x1ee9c, 0x1eea0,\r
+0x1eea4, 0x1eea4,\r
+0x1eeaa, 0x1eeaa,\r
+0x1eebc, 0x1eeef,\r
+0x1eef2, 0x1efff,\r
+0x1f02c, 0x1f02f,\r
+0x1f094, 0x1f09f,\r
+0x1f0af, 0x1f0b0,\r
+0x1f0c0, 0x1f0c0,\r
+0x1f0d0, 0x1f0d0,\r
+0x1f0f6, 0x1f0ff,\r
+0x1f10d, 0x1f10f,\r
+0x1f16c, 0x1f16f,\r
+0x1f1ad, 0x1f1e5,\r
+0x1f203, 0x1f20f,\r
+0x1f23c, 0x1f23f,\r
+0x1f249, 0x1f24f,\r
+0x1f252, 0x1f25f,\r
+0x1f266, 0x1f2ff,\r
+0x1f6d5, 0x1f6df,\r
+0x1f6ed, 0x1f6ef,\r
+0x1f6fa, 0x1f6ff,\r
+0x1f774, 0x1f77f,\r
+0x1f7d9, 0x1f7ff,\r
+0x1f80c, 0x1f80f,\r
+0x1f848, 0x1f84f,\r
+0x1f85a, 0x1f85f,\r
+0x1f888, 0x1f88f,\r
+0x1f8ae, 0x1f8ff,\r
+0x1f90c, 0x1f90f,\r
+0x1f93f, 0x1f93f,\r
+0x1f971, 0x1f972,\r
+0x1f977, 0x1f979,\r
+0x1f97b, 0x1f97b,\r
+0x1f9a3, 0x1f9af,\r
+0x1f9ba, 0x1f9bf,\r
+0x1f9c3, 0x1f9cf,\r
+0x1fa00, 0x1fa5f,\r
+0x1fa6e, 0x1ffff,\r
+0x2a6d7, 0x2a6ff,\r
+0x2b735, 0x2b73f,\r
+0x2b81e, 0x2b81f,\r
+0x2cea2, 0x2ceaf,\r
+0x2ebe1, 0x2f7ff,\r
+0x2fa1e, 0xe00ff,\r
+0xe01f0, 0x10ffff,\r
+}; /* END of CR_C */\r
+\r
+/* PROPERTY: 'Canadian_Aboriginal': Script */\r
+static const OnigCodePoint\r
+CR_Canadian_Aboriginal[] = { 2,\r
+0x1400, 0x167f,\r
+0x18b0, 0x18f5,\r
+}; /* END of CR_Canadian_Aboriginal */\r
+\r
+/* PROPERTY: 'Carian': Script */\r
+static const OnigCodePoint\r
+CR_Carian[] = { 1,\r
+0x102a0, 0x102d0,\r
+}; /* END of CR_Carian */\r
+\r
+/* PROPERTY: 'Case_Ignorable': Derived Property */\r
+static const OnigCodePoint\r
+CR_Case_Ignorable[] = { 394,\r
+0x0027, 0x0027,\r
+0x002e, 0x002e,\r
+0x003a, 0x003a,\r
+0x005e, 0x005e,\r
+0x0060, 0x0060,\r
+0x00a8, 0x00a8,\r
+0x00ad, 0x00ad,\r
+0x00af, 0x00af,\r
+0x00b4, 0x00b4,\r
+0x00b7, 0x00b8,\r
+0x02b0, 0x036f,\r
+0x0374, 0x0375,\r
+0x037a, 0x037a,\r
+0x0384, 0x0385,\r
+0x0387, 0x0387,\r
+0x0483, 0x0489,\r
+0x0559, 0x0559,\r
+0x0591, 0x05bd,\r
+0x05bf, 0x05bf,\r
+0x05c1, 0x05c2,\r
+0x05c4, 0x05c5,\r
+0x05c7, 0x05c7,\r
+0x05f4, 0x05f4,\r
+0x0600, 0x0605,\r
+0x0610, 0x061a,\r
+0x061c, 0x061c,\r
+0x0640, 0x0640,\r
+0x064b, 0x065f,\r
+0x0670, 0x0670,\r
+0x06d6, 0x06dd,\r
+0x06df, 0x06e8,\r
+0x06ea, 0x06ed,\r
+0x070f, 0x070f,\r
+0x0711, 0x0711,\r
+0x0730, 0x074a,\r
+0x07a6, 0x07b0,\r
+0x07eb, 0x07f5,\r
+0x07fa, 0x07fa,\r
+0x07fd, 0x07fd,\r
+0x0816, 0x082d,\r
+0x0859, 0x085b,\r
+0x08d3, 0x0902,\r
+0x093a, 0x093a,\r
+0x093c, 0x093c,\r
+0x0941, 0x0948,\r
+0x094d, 0x094d,\r
+0x0951, 0x0957,\r
+0x0962, 0x0963,\r
+0x0971, 0x0971,\r
+0x0981, 0x0981,\r
+0x09bc, 0x09bc,\r
+0x09c1, 0x09c4,\r
+0x09cd, 0x09cd,\r
+0x09e2, 0x09e3,\r
+0x09fe, 0x09fe,\r
+0x0a01, 0x0a02,\r
+0x0a3c, 0x0a3c,\r
+0x0a41, 0x0a42,\r
+0x0a47, 0x0a48,\r
+0x0a4b, 0x0a4d,\r
+0x0a51, 0x0a51,\r
+0x0a70, 0x0a71,\r
+0x0a75, 0x0a75,\r
+0x0a81, 0x0a82,\r
+0x0abc, 0x0abc,\r
+0x0ac1, 0x0ac5,\r
+0x0ac7, 0x0ac8,\r
+0x0acd, 0x0acd,\r
+0x0ae2, 0x0ae3,\r
+0x0afa, 0x0aff,\r
+0x0b01, 0x0b01,\r
+0x0b3c, 0x0b3c,\r
+0x0b3f, 0x0b3f,\r
+0x0b41, 0x0b44,\r
+0x0b4d, 0x0b4d,\r
+0x0b56, 0x0b56,\r
+0x0b62, 0x0b63,\r
+0x0b82, 0x0b82,\r
+0x0bc0, 0x0bc0,\r
+0x0bcd, 0x0bcd,\r
+0x0c00, 0x0c00,\r
+0x0c04, 0x0c04,\r
+0x0c3e, 0x0c40,\r
+0x0c46, 0x0c48,\r
+0x0c4a, 0x0c4d,\r
+0x0c55, 0x0c56,\r
+0x0c62, 0x0c63,\r
+0x0c81, 0x0c81,\r
+0x0cbc, 0x0cbc,\r
+0x0cbf, 0x0cbf,\r
+0x0cc6, 0x0cc6,\r
+0x0ccc, 0x0ccd,\r
+0x0ce2, 0x0ce3,\r
+0x0d00, 0x0d01,\r
+0x0d3b, 0x0d3c,\r
+0x0d41, 0x0d44,\r
+0x0d4d, 0x0d4d,\r
+0x0d62, 0x0d63,\r
+0x0dca, 0x0dca,\r
+0x0dd2, 0x0dd4,\r
+0x0dd6, 0x0dd6,\r
+0x0e31, 0x0e31,\r
+0x0e34, 0x0e3a,\r
+0x0e46, 0x0e4e,\r
+0x0eb1, 0x0eb1,\r
+0x0eb4, 0x0eb9,\r
+0x0ebb, 0x0ebc,\r
+0x0ec6, 0x0ec6,\r
+0x0ec8, 0x0ecd,\r
+0x0f18, 0x0f19,\r
+0x0f35, 0x0f35,\r
+0x0f37, 0x0f37,\r
+0x0f39, 0x0f39,\r
+0x0f71, 0x0f7e,\r
+0x0f80, 0x0f84,\r
+0x0f86, 0x0f87,\r
+0x0f8d, 0x0f97,\r
+0x0f99, 0x0fbc,\r
+0x0fc6, 0x0fc6,\r
+0x102d, 0x1030,\r
+0x1032, 0x1037,\r
+0x1039, 0x103a,\r
+0x103d, 0x103e,\r
+0x1058, 0x1059,\r
+0x105e, 0x1060,\r
+0x1071, 0x1074,\r
+0x1082, 0x1082,\r
+0x1085, 0x1086,\r
+0x108d, 0x108d,\r
+0x109d, 0x109d,\r
+0x10fc, 0x10fc,\r
+0x135d, 0x135f,\r
+0x1712, 0x1714,\r
+0x1732, 0x1734,\r
+0x1752, 0x1753,\r
+0x1772, 0x1773,\r
+0x17b4, 0x17b5,\r
+0x17b7, 0x17bd,\r
+0x17c6, 0x17c6,\r
+0x17c9, 0x17d3,\r
+0x17d7, 0x17d7,\r
+0x17dd, 0x17dd,\r
+0x180b, 0x180e,\r
+0x1843, 0x1843,\r
+0x1885, 0x1886,\r
+0x18a9, 0x18a9,\r
+0x1920, 0x1922,\r
+0x1927, 0x1928,\r
+0x1932, 0x1932,\r
+0x1939, 0x193b,\r
+0x1a17, 0x1a18,\r
+0x1a1b, 0x1a1b,\r
+0x1a56, 0x1a56,\r
+0x1a58, 0x1a5e,\r
+0x1a60, 0x1a60,\r
+0x1a62, 0x1a62,\r
+0x1a65, 0x1a6c,\r
+0x1a73, 0x1a7c,\r
+0x1a7f, 0x1a7f,\r
+0x1aa7, 0x1aa7,\r
+0x1ab0, 0x1abe,\r
+0x1b00, 0x1b03,\r
+0x1b34, 0x1b34,\r
+0x1b36, 0x1b3a,\r
+0x1b3c, 0x1b3c,\r
+0x1b42, 0x1b42,\r
+0x1b6b, 0x1b73,\r
+0x1b80, 0x1b81,\r
+0x1ba2, 0x1ba5,\r
+0x1ba8, 0x1ba9,\r
+0x1bab, 0x1bad,\r
+0x1be6, 0x1be6,\r
+0x1be8, 0x1be9,\r
+0x1bed, 0x1bed,\r
+0x1bef, 0x1bf1,\r
+0x1c2c, 0x1c33,\r
+0x1c36, 0x1c37,\r
+0x1c78, 0x1c7d,\r
+0x1cd0, 0x1cd2,\r
+0x1cd4, 0x1ce0,\r
+0x1ce2, 0x1ce8,\r
+0x1ced, 0x1ced,\r
+0x1cf4, 0x1cf4,\r
+0x1cf8, 0x1cf9,\r
+0x1d2c, 0x1d6a,\r
+0x1d78, 0x1d78,\r
+0x1d9b, 0x1df9,\r
+0x1dfb, 0x1dff,\r
+0x1fbd, 0x1fbd,\r
+0x1fbf, 0x1fc1,\r
+0x1fcd, 0x1fcf,\r
+0x1fdd, 0x1fdf,\r
+0x1fed, 0x1fef,\r
+0x1ffd, 0x1ffe,\r
+0x200b, 0x200f,\r
+0x2018, 0x2019,\r
+0x2024, 0x2024,\r
+0x2027, 0x2027,\r
+0x202a, 0x202e,\r
+0x2060, 0x2064,\r
+0x2066, 0x206f,\r
+0x2071, 0x2071,\r
+0x207f, 0x207f,\r
+0x2090, 0x209c,\r
+0x20d0, 0x20f0,\r
+0x2c7c, 0x2c7d,\r
+0x2cef, 0x2cf1,\r
+0x2d6f, 0x2d6f,\r
+0x2d7f, 0x2d7f,\r
+0x2de0, 0x2dff,\r
+0x2e2f, 0x2e2f,\r
+0x3005, 0x3005,\r
+0x302a, 0x302d,\r
+0x3031, 0x3035,\r
+0x303b, 0x303b,\r
+0x3099, 0x309e,\r
+0x30fc, 0x30fe,\r
+0xa015, 0xa015,\r
+0xa4f8, 0xa4fd,\r
+0xa60c, 0xa60c,\r
+0xa66f, 0xa672,\r
+0xa674, 0xa67d,\r
+0xa67f, 0xa67f,\r
+0xa69c, 0xa69f,\r
+0xa6f0, 0xa6f1,\r
+0xa700, 0xa721,\r
+0xa770, 0xa770,\r
+0xa788, 0xa78a,\r
+0xa7f8, 0xa7f9,\r
+0xa802, 0xa802,\r
+0xa806, 0xa806,\r
+0xa80b, 0xa80b,\r
+0xa825, 0xa826,\r
+0xa8c4, 0xa8c5,\r
+0xa8e0, 0xa8f1,\r
+0xa8ff, 0xa8ff,\r
+0xa926, 0xa92d,\r
+0xa947, 0xa951,\r
+0xa980, 0xa982,\r
+0xa9b3, 0xa9b3,\r
+0xa9b6, 0xa9b9,\r
+0xa9bc, 0xa9bc,\r
+0xa9cf, 0xa9cf,\r
+0xa9e5, 0xa9e6,\r
+0xaa29, 0xaa2e,\r
+0xaa31, 0xaa32,\r
+0xaa35, 0xaa36,\r
+0xaa43, 0xaa43,\r
+0xaa4c, 0xaa4c,\r
+0xaa70, 0xaa70,\r
+0xaa7c, 0xaa7c,\r
+0xaab0, 0xaab0,\r
+0xaab2, 0xaab4,\r
+0xaab7, 0xaab8,\r
+0xaabe, 0xaabf,\r
+0xaac1, 0xaac1,\r
+0xaadd, 0xaadd,\r
+0xaaec, 0xaaed,\r
+0xaaf3, 0xaaf4,\r
+0xaaf6, 0xaaf6,\r
+0xab5b, 0xab5f,\r
+0xabe5, 0xabe5,\r
+0xabe8, 0xabe8,\r
+0xabed, 0xabed,\r
+0xfb1e, 0xfb1e,\r
+0xfbb2, 0xfbc1,\r
+0xfe00, 0xfe0f,\r
+0xfe13, 0xfe13,\r
+0xfe20, 0xfe2f,\r
+0xfe52, 0xfe52,\r
+0xfe55, 0xfe55,\r
+0xfeff, 0xfeff,\r
+0xff07, 0xff07,\r
+0xff0e, 0xff0e,\r
+0xff1a, 0xff1a,\r
+0xff3e, 0xff3e,\r
+0xff40, 0xff40,\r
+0xff70, 0xff70,\r
+0xff9e, 0xff9f,\r
+0xffe3, 0xffe3,\r
+0xfff9, 0xfffb,\r
+0x101fd, 0x101fd,\r
+0x102e0, 0x102e0,\r
+0x10376, 0x1037a,\r
+0x10a01, 0x10a03,\r
+0x10a05, 0x10a06,\r
+0x10a0c, 0x10a0f,\r
+0x10a38, 0x10a3a,\r
+0x10a3f, 0x10a3f,\r
+0x10ae5, 0x10ae6,\r
+0x10d24, 0x10d27,\r
+0x10f46, 0x10f50,\r
+0x11001, 0x11001,\r
+0x11038, 0x11046,\r
+0x1107f, 0x11081,\r
+0x110b3, 0x110b6,\r
+0x110b9, 0x110ba,\r
+0x110bd, 0x110bd,\r
+0x110cd, 0x110cd,\r
+0x11100, 0x11102,\r
+0x11127, 0x1112b,\r
+0x1112d, 0x11134,\r
+0x11173, 0x11173,\r
+0x11180, 0x11181,\r
+0x111b6, 0x111be,\r
+0x111c9, 0x111cc,\r
+0x1122f, 0x11231,\r
+0x11234, 0x11234,\r
+0x11236, 0x11237,\r
+0x1123e, 0x1123e,\r
+0x112df, 0x112df,\r
+0x112e3, 0x112ea,\r
+0x11300, 0x11301,\r
+0x1133b, 0x1133c,\r
+0x11340, 0x11340,\r
+0x11366, 0x1136c,\r
+0x11370, 0x11374,\r
+0x11438, 0x1143f,\r
+0x11442, 0x11444,\r
+0x11446, 0x11446,\r
+0x1145e, 0x1145e,\r
+0x114b3, 0x114b8,\r
+0x114ba, 0x114ba,\r
+0x114bf, 0x114c0,\r
+0x114c2, 0x114c3,\r
+0x115b2, 0x115b5,\r
+0x115bc, 0x115bd,\r
+0x115bf, 0x115c0,\r
+0x115dc, 0x115dd,\r
+0x11633, 0x1163a,\r
+0x1163d, 0x1163d,\r
+0x1163f, 0x11640,\r
+0x116ab, 0x116ab,\r
+0x116ad, 0x116ad,\r
+0x116b0, 0x116b5,\r
+0x116b7, 0x116b7,\r
+0x1171d, 0x1171f,\r
+0x11722, 0x11725,\r
+0x11727, 0x1172b,\r
+0x1182f, 0x11837,\r
+0x11839, 0x1183a,\r
+0x11a01, 0x11a0a,\r
+0x11a33, 0x11a38,\r
+0x11a3b, 0x11a3e,\r
+0x11a47, 0x11a47,\r
+0x11a51, 0x11a56,\r
+0x11a59, 0x11a5b,\r
+0x11a8a, 0x11a96,\r
+0x11a98, 0x11a99,\r
+0x11c30, 0x11c36,\r
+0x11c38, 0x11c3d,\r
+0x11c3f, 0x11c3f,\r
+0x11c92, 0x11ca7,\r
+0x11caa, 0x11cb0,\r
+0x11cb2, 0x11cb3,\r
+0x11cb5, 0x11cb6,\r
+0x11d31, 0x11d36,\r
+0x11d3a, 0x11d3a,\r
+0x11d3c, 0x11d3d,\r
+0x11d3f, 0x11d45,\r
+0x11d47, 0x11d47,\r
+0x11d90, 0x11d91,\r
+0x11d95, 0x11d95,\r
+0x11d97, 0x11d97,\r
+0x11ef3, 0x11ef4,\r
+0x16af0, 0x16af4,\r
+0x16b30, 0x16b36,\r
+0x16b40, 0x16b43,\r
+0x16f8f, 0x16f9f,\r
+0x16fe0, 0x16fe1,\r
+0x1bc9d, 0x1bc9e,\r
+0x1bca0, 0x1bca3,\r
+0x1d167, 0x1d169,\r
+0x1d173, 0x1d182,\r
+0x1d185, 0x1d18b,\r
+0x1d1aa, 0x1d1ad,\r
+0x1d242, 0x1d244,\r
+0x1da00, 0x1da36,\r
+0x1da3b, 0x1da6c,\r
+0x1da75, 0x1da75,\r
+0x1da84, 0x1da84,\r
+0x1da9b, 0x1da9f,\r
+0x1daa1, 0x1daaf,\r
+0x1e000, 0x1e006,\r
+0x1e008, 0x1e018,\r
+0x1e01b, 0x1e021,\r
+0x1e023, 0x1e024,\r
+0x1e026, 0x1e02a,\r
+0x1e8d0, 0x1e8d6,\r
+0x1e944, 0x1e94a,\r
+0x1f3fb, 0x1f3ff,\r
+0xe0001, 0xe0001,\r
+0xe0020, 0xe007f,\r
+0xe0100, 0xe01ef,\r
+}; /* END of CR_Case_Ignorable */\r
+\r
+/* PROPERTY: 'Cased': Derived Property */\r
+static const OnigCodePoint\r
+CR_Cased[] = { 139,\r
+0x0041, 0x005a,\r
+0x0061, 0x007a,\r
+0x00aa, 0x00aa,\r
+0x00b5, 0x00b5,\r
+0x00ba, 0x00ba,\r
+0x00c0, 0x00d6,\r
+0x00d8, 0x00f6,\r
+0x00f8, 0x01ba,\r
+0x01bc, 0x01bf,\r
+0x01c4, 0x0293,\r
+0x0295, 0x02b8,\r
+0x02c0, 0x02c1,\r
+0x02e0, 0x02e4,\r
+0x0345, 0x0345,\r
+0x0370, 0x0373,\r
+0x0376, 0x0377,\r
+0x037a, 0x037d,\r
+0x037f, 0x037f,\r
+0x0386, 0x0386,\r
+0x0388, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x03f5,\r
+0x03f7, 0x0481,\r
+0x048a, 0x052f,\r
+0x0531, 0x0556,\r
+0x0560, 0x0588,\r
+0x10a0, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x10fa,\r
+0x10fd, 0x10ff,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0x1c80, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cbf,\r
+0x1d00, 0x1dbf,\r
+0x1e00, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fbc,\r
+0x1fbe, 0x1fbe,\r
+0x1fc2, 0x1fc4,\r
+0x1fc6, 0x1fcc,\r
+0x1fd0, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fe0, 0x1fec,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffc,\r
+0x2071, 0x2071,\r
+0x207f, 0x207f,\r
+0x2090, 0x209c,\r
+0x2102, 0x2102,\r
+0x2107, 0x2107,\r
+0x210a, 0x2113,\r
+0x2115, 0x2115,\r
+0x2119, 0x211d,\r
+0x2124, 0x2124,\r
+0x2126, 0x2126,\r
+0x2128, 0x2128,\r
+0x212a, 0x212d,\r
+0x212f, 0x2134,\r
+0x2139, 0x2139,\r
+0x213c, 0x213f,\r
+0x2145, 0x2149,\r
+0x214e, 0x214e,\r
+0x2160, 0x217f,\r
+0x2183, 0x2184,\r
+0x24b6, 0x24e9,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x2c60, 0x2ce4,\r
+0x2ceb, 0x2cee,\r
+0x2cf2, 0x2cf3,\r
+0x2d00, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0xa640, 0xa66d,\r
+0xa680, 0xa69d,\r
+0xa722, 0xa787,\r
+0xa78b, 0xa78e,\r
+0xa790, 0xa7b9,\r
+0xa7f8, 0xa7fa,\r
+0xab30, 0xab5a,\r
+0xab5c, 0xab65,\r
+0xab70, 0xabbf,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xff21, 0xff3a,\r
+0xff41, 0xff5a,\r
+0x10400, 0x1044f,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x118a0, 0x118df,\r
+0x16e40, 0x16e7f,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d6c0,\r
+0x1d6c2, 0x1d6da,\r
+0x1d6dc, 0x1d6fa,\r
+0x1d6fc, 0x1d714,\r
+0x1d716, 0x1d734,\r
+0x1d736, 0x1d74e,\r
+0x1d750, 0x1d76e,\r
+0x1d770, 0x1d788,\r
+0x1d78a, 0x1d7a8,\r
+0x1d7aa, 0x1d7c2,\r
+0x1d7c4, 0x1d7cb,\r
+0x1e900, 0x1e943,\r
+0x1f130, 0x1f149,\r
+0x1f150, 0x1f169,\r
+0x1f170, 0x1f189,\r
+}; /* END of CR_Cased */\r
+\r
+/* PROPERTY: 'Caucasian_Albanian': Script */\r
+static const OnigCodePoint\r
+CR_Caucasian_Albanian[] = { 2,\r
+0x10530, 0x10563,\r
+0x1056f, 0x1056f,\r
+}; /* END of CR_Caucasian_Albanian */\r
+\r
+/* PROPERTY: 'Cc': General Category */\r
+#define CR_Cc CR_Cntrl\r
+\r
+/* PROPERTY: 'Cf': General Category */\r
+static const OnigCodePoint\r
+CR_Cf[] = { 19,\r
+0x00ad, 0x00ad,\r
+0x0600, 0x0605,\r
+0x061c, 0x061c,\r
+0x06dd, 0x06dd,\r
+0x070f, 0x070f,\r
+0x08e2, 0x08e2,\r
+0x180e, 0x180e,\r
+0x200b, 0x200f,\r
+0x202a, 0x202e,\r
+0x2060, 0x2064,\r
+0x2066, 0x206f,\r
+0xfeff, 0xfeff,\r
+0xfff9, 0xfffb,\r
+0x110bd, 0x110bd,\r
+0x110cd, 0x110cd,\r
+0x1bca0, 0x1bca3,\r
+0x1d173, 0x1d17a,\r
+0xe0001, 0xe0001,\r
+0xe0020, 0xe007f,\r
+}; /* END of CR_Cf */\r
+\r
+/* PROPERTY: 'Chakma': Script */\r
+static const OnigCodePoint\r
+CR_Chakma[] = { 2,\r
+0x11100, 0x11134,\r
+0x11136, 0x11146,\r
+}; /* END of CR_Chakma */\r
+\r
+/* PROPERTY: 'Cham': Script */\r
+static const OnigCodePoint\r
+CR_Cham[] = { 4,\r
+0xaa00, 0xaa36,\r
+0xaa40, 0xaa4d,\r
+0xaa50, 0xaa59,\r
+0xaa5c, 0xaa5f,\r
+}; /* END of CR_Cham */\r
+\r
+/* PROPERTY: 'Changes_When_Casefolded': Derived Property */\r
+static const OnigCodePoint\r
+CR_Changes_When_Casefolded[] = { 607,\r
+0x0041, 0x005a,\r
+0x00b5, 0x00b5,\r
+0x00c0, 0x00d6,\r
+0x00d8, 0x00df,\r
+0x0100, 0x0100,\r
+0x0102, 0x0102,\r
+0x0104, 0x0104,\r
+0x0106, 0x0106,\r
+0x0108, 0x0108,\r
+0x010a, 0x010a,\r
+0x010c, 0x010c,\r
+0x010e, 0x010e,\r
+0x0110, 0x0110,\r
+0x0112, 0x0112,\r
+0x0114, 0x0114,\r
+0x0116, 0x0116,\r
+0x0118, 0x0118,\r
+0x011a, 0x011a,\r
+0x011c, 0x011c,\r
+0x011e, 0x011e,\r
+0x0120, 0x0120,\r
+0x0122, 0x0122,\r
+0x0124, 0x0124,\r
+0x0126, 0x0126,\r
+0x0128, 0x0128,\r
+0x012a, 0x012a,\r
+0x012c, 0x012c,\r
+0x012e, 0x012e,\r
+0x0130, 0x0130,\r
+0x0132, 0x0132,\r
+0x0134, 0x0134,\r
+0x0136, 0x0136,\r
+0x0139, 0x0139,\r
+0x013b, 0x013b,\r
+0x013d, 0x013d,\r
+0x013f, 0x013f,\r
+0x0141, 0x0141,\r
+0x0143, 0x0143,\r
+0x0145, 0x0145,\r
+0x0147, 0x0147,\r
+0x0149, 0x014a,\r
+0x014c, 0x014c,\r
+0x014e, 0x014e,\r
+0x0150, 0x0150,\r
+0x0152, 0x0152,\r
+0x0154, 0x0154,\r
+0x0156, 0x0156,\r
+0x0158, 0x0158,\r
+0x015a, 0x015a,\r
+0x015c, 0x015c,\r
+0x015e, 0x015e,\r
+0x0160, 0x0160,\r
+0x0162, 0x0162,\r
+0x0164, 0x0164,\r
+0x0166, 0x0166,\r
+0x0168, 0x0168,\r
+0x016a, 0x016a,\r
+0x016c, 0x016c,\r
+0x016e, 0x016e,\r
+0x0170, 0x0170,\r
+0x0172, 0x0172,\r
+0x0174, 0x0174,\r
+0x0176, 0x0176,\r
+0x0178, 0x0179,\r
+0x017b, 0x017b,\r
+0x017d, 0x017d,\r
+0x017f, 0x017f,\r
+0x0181, 0x0182,\r
+0x0184, 0x0184,\r
+0x0186, 0x0187,\r
+0x0189, 0x018b,\r
+0x018e, 0x0191,\r
+0x0193, 0x0194,\r
+0x0196, 0x0198,\r
+0x019c, 0x019d,\r
+0x019f, 0x01a0,\r
+0x01a2, 0x01a2,\r
+0x01a4, 0x01a4,\r
+0x01a6, 0x01a7,\r
+0x01a9, 0x01a9,\r
+0x01ac, 0x01ac,\r
+0x01ae, 0x01af,\r
+0x01b1, 0x01b3,\r
+0x01b5, 0x01b5,\r
+0x01b7, 0x01b8,\r
+0x01bc, 0x01bc,\r
+0x01c4, 0x01c5,\r
+0x01c7, 0x01c8,\r
+0x01ca, 0x01cb,\r
+0x01cd, 0x01cd,\r
+0x01cf, 0x01cf,\r
+0x01d1, 0x01d1,\r
+0x01d3, 0x01d3,\r
+0x01d5, 0x01d5,\r
+0x01d7, 0x01d7,\r
+0x01d9, 0x01d9,\r
+0x01db, 0x01db,\r
+0x01de, 0x01de,\r
+0x01e0, 0x01e0,\r
+0x01e2, 0x01e2,\r
+0x01e4, 0x01e4,\r
+0x01e6, 0x01e6,\r
+0x01e8, 0x01e8,\r
+0x01ea, 0x01ea,\r
+0x01ec, 0x01ec,\r
+0x01ee, 0x01ee,\r
+0x01f1, 0x01f2,\r
+0x01f4, 0x01f4,\r
+0x01f6, 0x01f8,\r
+0x01fa, 0x01fa,\r
+0x01fc, 0x01fc,\r
+0x01fe, 0x01fe,\r
+0x0200, 0x0200,\r
+0x0202, 0x0202,\r
+0x0204, 0x0204,\r
+0x0206, 0x0206,\r
+0x0208, 0x0208,\r
+0x020a, 0x020a,\r
+0x020c, 0x020c,\r
+0x020e, 0x020e,\r
+0x0210, 0x0210,\r
+0x0212, 0x0212,\r
+0x0214, 0x0214,\r
+0x0216, 0x0216,\r
+0x0218, 0x0218,\r
+0x021a, 0x021a,\r
+0x021c, 0x021c,\r
+0x021e, 0x021e,\r
+0x0220, 0x0220,\r
+0x0222, 0x0222,\r
+0x0224, 0x0224,\r
+0x0226, 0x0226,\r
+0x0228, 0x0228,\r
+0x022a, 0x022a,\r
+0x022c, 0x022c,\r
+0x022e, 0x022e,\r
+0x0230, 0x0230,\r
+0x0232, 0x0232,\r
+0x023a, 0x023b,\r
+0x023d, 0x023e,\r
+0x0241, 0x0241,\r
+0x0243, 0x0246,\r
+0x0248, 0x0248,\r
+0x024a, 0x024a,\r
+0x024c, 0x024c,\r
+0x024e, 0x024e,\r
+0x0345, 0x0345,\r
+0x0370, 0x0370,\r
+0x0372, 0x0372,\r
+0x0376, 0x0376,\r
+0x037f, 0x037f,\r
+0x0386, 0x0386,\r
+0x0388, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x038f,\r
+0x0391, 0x03a1,\r
+0x03a3, 0x03ab,\r
+0x03c2, 0x03c2,\r
+0x03cf, 0x03d1,\r
+0x03d5, 0x03d6,\r
+0x03d8, 0x03d8,\r
+0x03da, 0x03da,\r
+0x03dc, 0x03dc,\r
+0x03de, 0x03de,\r
+0x03e0, 0x03e0,\r
+0x03e2, 0x03e2,\r
+0x03e4, 0x03e4,\r
+0x03e6, 0x03e6,\r
+0x03e8, 0x03e8,\r
+0x03ea, 0x03ea,\r
+0x03ec, 0x03ec,\r
+0x03ee, 0x03ee,\r
+0x03f0, 0x03f1,\r
+0x03f4, 0x03f5,\r
+0x03f7, 0x03f7,\r
+0x03f9, 0x03fa,\r
+0x03fd, 0x042f,\r
+0x0460, 0x0460,\r
+0x0462, 0x0462,\r
+0x0464, 0x0464,\r
+0x0466, 0x0466,\r
+0x0468, 0x0468,\r
+0x046a, 0x046a,\r
+0x046c, 0x046c,\r
+0x046e, 0x046e,\r
+0x0470, 0x0470,\r
+0x0472, 0x0472,\r
+0x0474, 0x0474,\r
+0x0476, 0x0476,\r
+0x0478, 0x0478,\r
+0x047a, 0x047a,\r
+0x047c, 0x047c,\r
+0x047e, 0x047e,\r
+0x0480, 0x0480,\r
+0x048a, 0x048a,\r
+0x048c, 0x048c,\r
+0x048e, 0x048e,\r
+0x0490, 0x0490,\r
+0x0492, 0x0492,\r
+0x0494, 0x0494,\r
+0x0496, 0x0496,\r
+0x0498, 0x0498,\r
+0x049a, 0x049a,\r
+0x049c, 0x049c,\r
+0x049e, 0x049e,\r
+0x04a0, 0x04a0,\r
+0x04a2, 0x04a2,\r
+0x04a4, 0x04a4,\r
+0x04a6, 0x04a6,\r
+0x04a8, 0x04a8,\r
+0x04aa, 0x04aa,\r
+0x04ac, 0x04ac,\r
+0x04ae, 0x04ae,\r
+0x04b0, 0x04b0,\r
+0x04b2, 0x04b2,\r
+0x04b4, 0x04b4,\r
+0x04b6, 0x04b6,\r
+0x04b8, 0x04b8,\r
+0x04ba, 0x04ba,\r
+0x04bc, 0x04bc,\r
+0x04be, 0x04be,\r
+0x04c0, 0x04c1,\r
+0x04c3, 0x04c3,\r
+0x04c5, 0x04c5,\r
+0x04c7, 0x04c7,\r
+0x04c9, 0x04c9,\r
+0x04cb, 0x04cb,\r
+0x04cd, 0x04cd,\r
+0x04d0, 0x04d0,\r
+0x04d2, 0x04d2,\r
+0x04d4, 0x04d4,\r
+0x04d6, 0x04d6,\r
+0x04d8, 0x04d8,\r
+0x04da, 0x04da,\r
+0x04dc, 0x04dc,\r
+0x04de, 0x04de,\r
+0x04e0, 0x04e0,\r
+0x04e2, 0x04e2,\r
+0x04e4, 0x04e4,\r
+0x04e6, 0x04e6,\r
+0x04e8, 0x04e8,\r
+0x04ea, 0x04ea,\r
+0x04ec, 0x04ec,\r
+0x04ee, 0x04ee,\r
+0x04f0, 0x04f0,\r
+0x04f2, 0x04f2,\r
+0x04f4, 0x04f4,\r
+0x04f6, 0x04f6,\r
+0x04f8, 0x04f8,\r
+0x04fa, 0x04fa,\r
+0x04fc, 0x04fc,\r
+0x04fe, 0x04fe,\r
+0x0500, 0x0500,\r
+0x0502, 0x0502,\r
+0x0504, 0x0504,\r
+0x0506, 0x0506,\r
+0x0508, 0x0508,\r
+0x050a, 0x050a,\r
+0x050c, 0x050c,\r
+0x050e, 0x050e,\r
+0x0510, 0x0510,\r
+0x0512, 0x0512,\r
+0x0514, 0x0514,\r
+0x0516, 0x0516,\r
+0x0518, 0x0518,\r
+0x051a, 0x051a,\r
+0x051c, 0x051c,\r
+0x051e, 0x051e,\r
+0x0520, 0x0520,\r
+0x0522, 0x0522,\r
+0x0524, 0x0524,\r
+0x0526, 0x0526,\r
+0x0528, 0x0528,\r
+0x052a, 0x052a,\r
+0x052c, 0x052c,\r
+0x052e, 0x052e,\r
+0x0531, 0x0556,\r
+0x0587, 0x0587,\r
+0x10a0, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x13f8, 0x13fd,\r
+0x1c80, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cbf,\r
+0x1e00, 0x1e00,\r
+0x1e02, 0x1e02,\r
+0x1e04, 0x1e04,\r
+0x1e06, 0x1e06,\r
+0x1e08, 0x1e08,\r
+0x1e0a, 0x1e0a,\r
+0x1e0c, 0x1e0c,\r
+0x1e0e, 0x1e0e,\r
+0x1e10, 0x1e10,\r
+0x1e12, 0x1e12,\r
+0x1e14, 0x1e14,\r
+0x1e16, 0x1e16,\r
+0x1e18, 0x1e18,\r
+0x1e1a, 0x1e1a,\r
+0x1e1c, 0x1e1c,\r
+0x1e1e, 0x1e1e,\r
+0x1e20, 0x1e20,\r
+0x1e22, 0x1e22,\r
+0x1e24, 0x1e24,\r
+0x1e26, 0x1e26,\r
+0x1e28, 0x1e28,\r
+0x1e2a, 0x1e2a,\r
+0x1e2c, 0x1e2c,\r
+0x1e2e, 0x1e2e,\r
+0x1e30, 0x1e30,\r
+0x1e32, 0x1e32,\r
+0x1e34, 0x1e34,\r
+0x1e36, 0x1e36,\r
+0x1e38, 0x1e38,\r
+0x1e3a, 0x1e3a,\r
+0x1e3c, 0x1e3c,\r
+0x1e3e, 0x1e3e,\r
+0x1e40, 0x1e40,\r
+0x1e42, 0x1e42,\r
+0x1e44, 0x1e44,\r
+0x1e46, 0x1e46,\r
+0x1e48, 0x1e48,\r
+0x1e4a, 0x1e4a,\r
+0x1e4c, 0x1e4c,\r
+0x1e4e, 0x1e4e,\r
+0x1e50, 0x1e50,\r
+0x1e52, 0x1e52,\r
+0x1e54, 0x1e54,\r
+0x1e56, 0x1e56,\r
+0x1e58, 0x1e58,\r
+0x1e5a, 0x1e5a,\r
+0x1e5c, 0x1e5c,\r
+0x1e5e, 0x1e5e,\r
+0x1e60, 0x1e60,\r
+0x1e62, 0x1e62,\r
+0x1e64, 0x1e64,\r
+0x1e66, 0x1e66,\r
+0x1e68, 0x1e68,\r
+0x1e6a, 0x1e6a,\r
+0x1e6c, 0x1e6c,\r
+0x1e6e, 0x1e6e,\r
+0x1e70, 0x1e70,\r
+0x1e72, 0x1e72,\r
+0x1e74, 0x1e74,\r
+0x1e76, 0x1e76,\r
+0x1e78, 0x1e78,\r
+0x1e7a, 0x1e7a,\r
+0x1e7c, 0x1e7c,\r
+0x1e7e, 0x1e7e,\r
+0x1e80, 0x1e80,\r
+0x1e82, 0x1e82,\r
+0x1e84, 0x1e84,\r
+0x1e86, 0x1e86,\r
+0x1e88, 0x1e88,\r
+0x1e8a, 0x1e8a,\r
+0x1e8c, 0x1e8c,\r
+0x1e8e, 0x1e8e,\r
+0x1e90, 0x1e90,\r
+0x1e92, 0x1e92,\r
+0x1e94, 0x1e94,\r
+0x1e9a, 0x1e9b,\r
+0x1e9e, 0x1e9e,\r
+0x1ea0, 0x1ea0,\r
+0x1ea2, 0x1ea2,\r
+0x1ea4, 0x1ea4,\r
+0x1ea6, 0x1ea6,\r
+0x1ea8, 0x1ea8,\r
+0x1eaa, 0x1eaa,\r
+0x1eac, 0x1eac,\r
+0x1eae, 0x1eae,\r
+0x1eb0, 0x1eb0,\r
+0x1eb2, 0x1eb2,\r
+0x1eb4, 0x1eb4,\r
+0x1eb6, 0x1eb6,\r
+0x1eb8, 0x1eb8,\r
+0x1eba, 0x1eba,\r
+0x1ebc, 0x1ebc,\r
+0x1ebe, 0x1ebe,\r
+0x1ec0, 0x1ec0,\r
+0x1ec2, 0x1ec2,\r
+0x1ec4, 0x1ec4,\r
+0x1ec6, 0x1ec6,\r
+0x1ec8, 0x1ec8,\r
+0x1eca, 0x1eca,\r
+0x1ecc, 0x1ecc,\r
+0x1ece, 0x1ece,\r
+0x1ed0, 0x1ed0,\r
+0x1ed2, 0x1ed2,\r
+0x1ed4, 0x1ed4,\r
+0x1ed6, 0x1ed6,\r
+0x1ed8, 0x1ed8,\r
+0x1eda, 0x1eda,\r
+0x1edc, 0x1edc,\r
+0x1ede, 0x1ede,\r
+0x1ee0, 0x1ee0,\r
+0x1ee2, 0x1ee2,\r
+0x1ee4, 0x1ee4,\r
+0x1ee6, 0x1ee6,\r
+0x1ee8, 0x1ee8,\r
+0x1eea, 0x1eea,\r
+0x1eec, 0x1eec,\r
+0x1eee, 0x1eee,\r
+0x1ef0, 0x1ef0,\r
+0x1ef2, 0x1ef2,\r
+0x1ef4, 0x1ef4,\r
+0x1ef6, 0x1ef6,\r
+0x1ef8, 0x1ef8,\r
+0x1efa, 0x1efa,\r
+0x1efc, 0x1efc,\r
+0x1efe, 0x1efe,\r
+0x1f08, 0x1f0f,\r
+0x1f18, 0x1f1d,\r
+0x1f28, 0x1f2f,\r
+0x1f38, 0x1f3f,\r
+0x1f48, 0x1f4d,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f5f,\r
+0x1f68, 0x1f6f,\r
+0x1f80, 0x1faf,\r
+0x1fb2, 0x1fb4,\r
+0x1fb7, 0x1fbc,\r
+0x1fc2, 0x1fc4,\r
+0x1fc7, 0x1fcc,\r
+0x1fd8, 0x1fdb,\r
+0x1fe8, 0x1fec,\r
+0x1ff2, 0x1ff4,\r
+0x1ff7, 0x1ffc,\r
+0x2126, 0x2126,\r
+0x212a, 0x212b,\r
+0x2132, 0x2132,\r
+0x2160, 0x216f,\r
+0x2183, 0x2183,\r
+0x24b6, 0x24cf,\r
+0x2c00, 0x2c2e,\r
+0x2c60, 0x2c60,\r
+0x2c62, 0x2c64,\r
+0x2c67, 0x2c67,\r
+0x2c69, 0x2c69,\r
+0x2c6b, 0x2c6b,\r
+0x2c6d, 0x2c70,\r
+0x2c72, 0x2c72,\r
+0x2c75, 0x2c75,\r
+0x2c7e, 0x2c80,\r
+0x2c82, 0x2c82,\r
+0x2c84, 0x2c84,\r
+0x2c86, 0x2c86,\r
+0x2c88, 0x2c88,\r
+0x2c8a, 0x2c8a,\r
+0x2c8c, 0x2c8c,\r
+0x2c8e, 0x2c8e,\r
+0x2c90, 0x2c90,\r
+0x2c92, 0x2c92,\r
+0x2c94, 0x2c94,\r
+0x2c96, 0x2c96,\r
+0x2c98, 0x2c98,\r
+0x2c9a, 0x2c9a,\r
+0x2c9c, 0x2c9c,\r
+0x2c9e, 0x2c9e,\r
+0x2ca0, 0x2ca0,\r
+0x2ca2, 0x2ca2,\r
+0x2ca4, 0x2ca4,\r
+0x2ca6, 0x2ca6,\r
+0x2ca8, 0x2ca8,\r
+0x2caa, 0x2caa,\r
+0x2cac, 0x2cac,\r
+0x2cae, 0x2cae,\r
+0x2cb0, 0x2cb0,\r
+0x2cb2, 0x2cb2,\r
+0x2cb4, 0x2cb4,\r
+0x2cb6, 0x2cb6,\r
+0x2cb8, 0x2cb8,\r
+0x2cba, 0x2cba,\r
+0x2cbc, 0x2cbc,\r
+0x2cbe, 0x2cbe,\r
+0x2cc0, 0x2cc0,\r
+0x2cc2, 0x2cc2,\r
+0x2cc4, 0x2cc4,\r
+0x2cc6, 0x2cc6,\r
+0x2cc8, 0x2cc8,\r
+0x2cca, 0x2cca,\r
+0x2ccc, 0x2ccc,\r
+0x2cce, 0x2cce,\r
+0x2cd0, 0x2cd0,\r
+0x2cd2, 0x2cd2,\r
+0x2cd4, 0x2cd4,\r
+0x2cd6, 0x2cd6,\r
+0x2cd8, 0x2cd8,\r
+0x2cda, 0x2cda,\r
+0x2cdc, 0x2cdc,\r
+0x2cde, 0x2cde,\r
+0x2ce0, 0x2ce0,\r
+0x2ce2, 0x2ce2,\r
+0x2ceb, 0x2ceb,\r
+0x2ced, 0x2ced,\r
+0x2cf2, 0x2cf2,\r
+0xa640, 0xa640,\r
+0xa642, 0xa642,\r
+0xa644, 0xa644,\r
+0xa646, 0xa646,\r
+0xa648, 0xa648,\r
+0xa64a, 0xa64a,\r
+0xa64c, 0xa64c,\r
+0xa64e, 0xa64e,\r
+0xa650, 0xa650,\r
+0xa652, 0xa652,\r
+0xa654, 0xa654,\r
+0xa656, 0xa656,\r
+0xa658, 0xa658,\r
+0xa65a, 0xa65a,\r
+0xa65c, 0xa65c,\r
+0xa65e, 0xa65e,\r
+0xa660, 0xa660,\r
+0xa662, 0xa662,\r
+0xa664, 0xa664,\r
+0xa666, 0xa666,\r
+0xa668, 0xa668,\r
+0xa66a, 0xa66a,\r
+0xa66c, 0xa66c,\r
+0xa680, 0xa680,\r
+0xa682, 0xa682,\r
+0xa684, 0xa684,\r
+0xa686, 0xa686,\r
+0xa688, 0xa688,\r
+0xa68a, 0xa68a,\r
+0xa68c, 0xa68c,\r
+0xa68e, 0xa68e,\r
+0xa690, 0xa690,\r
+0xa692, 0xa692,\r
+0xa694, 0xa694,\r
+0xa696, 0xa696,\r
+0xa698, 0xa698,\r
+0xa69a, 0xa69a,\r
+0xa722, 0xa722,\r
+0xa724, 0xa724,\r
+0xa726, 0xa726,\r
+0xa728, 0xa728,\r
+0xa72a, 0xa72a,\r
+0xa72c, 0xa72c,\r
+0xa72e, 0xa72e,\r
+0xa732, 0xa732,\r
+0xa734, 0xa734,\r
+0xa736, 0xa736,\r
+0xa738, 0xa738,\r
+0xa73a, 0xa73a,\r
+0xa73c, 0xa73c,\r
+0xa73e, 0xa73e,\r
+0xa740, 0xa740,\r
+0xa742, 0xa742,\r
+0xa744, 0xa744,\r
+0xa746, 0xa746,\r
+0xa748, 0xa748,\r
+0xa74a, 0xa74a,\r
+0xa74c, 0xa74c,\r
+0xa74e, 0xa74e,\r
+0xa750, 0xa750,\r
+0xa752, 0xa752,\r
+0xa754, 0xa754,\r
+0xa756, 0xa756,\r
+0xa758, 0xa758,\r
+0xa75a, 0xa75a,\r
+0xa75c, 0xa75c,\r
+0xa75e, 0xa75e,\r
+0xa760, 0xa760,\r
+0xa762, 0xa762,\r
+0xa764, 0xa764,\r
+0xa766, 0xa766,\r
+0xa768, 0xa768,\r
+0xa76a, 0xa76a,\r
+0xa76c, 0xa76c,\r
+0xa76e, 0xa76e,\r
+0xa779, 0xa779,\r
+0xa77b, 0xa77b,\r
+0xa77d, 0xa77e,\r
+0xa780, 0xa780,\r
+0xa782, 0xa782,\r
+0xa784, 0xa784,\r
+0xa786, 0xa786,\r
+0xa78b, 0xa78b,\r
+0xa78d, 0xa78d,\r
+0xa790, 0xa790,\r
+0xa792, 0xa792,\r
+0xa796, 0xa796,\r
+0xa798, 0xa798,\r
+0xa79a, 0xa79a,\r
+0xa79c, 0xa79c,\r
+0xa79e, 0xa79e,\r
+0xa7a0, 0xa7a0,\r
+0xa7a2, 0xa7a2,\r
+0xa7a4, 0xa7a4,\r
+0xa7a6, 0xa7a6,\r
+0xa7a8, 0xa7a8,\r
+0xa7aa, 0xa7ae,\r
+0xa7b0, 0xa7b4,\r
+0xa7b6, 0xa7b6,\r
+0xa7b8, 0xa7b8,\r
+0xab70, 0xabbf,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xff21, 0xff3a,\r
+0x10400, 0x10427,\r
+0x104b0, 0x104d3,\r
+0x10c80, 0x10cb2,\r
+0x118a0, 0x118bf,\r
+0x16e40, 0x16e5f,\r
+0x1e900, 0x1e921,\r
+}; /* END of CR_Changes_When_Casefolded */\r
+\r
+/* PROPERTY: 'Changes_When_Casemapped': Derived Property */\r
+static const OnigCodePoint\r
+CR_Changes_When_Casemapped[] = { 121,\r
+0x0041, 0x005a,\r
+0x0061, 0x007a,\r
+0x00b5, 0x00b5,\r
+0x00c0, 0x00d6,\r
+0x00d8, 0x00f6,\r
+0x00f8, 0x0137,\r
+0x0139, 0x018c,\r
+0x018e, 0x019a,\r
+0x019c, 0x01a9,\r
+0x01ac, 0x01b9,\r
+0x01bc, 0x01bd,\r
+0x01bf, 0x01bf,\r
+0x01c4, 0x0220,\r
+0x0222, 0x0233,\r
+0x023a, 0x0254,\r
+0x0256, 0x0257,\r
+0x0259, 0x0259,\r
+0x025b, 0x025c,\r
+0x0260, 0x0261,\r
+0x0263, 0x0263,\r
+0x0265, 0x0266,\r
+0x0268, 0x026c,\r
+0x026f, 0x026f,\r
+0x0271, 0x0272,\r
+0x0275, 0x0275,\r
+0x027d, 0x027d,\r
+0x0280, 0x0280,\r
+0x0283, 0x0283,\r
+0x0287, 0x028c,\r
+0x0292, 0x0292,\r
+0x029d, 0x029e,\r
+0x0345, 0x0345,\r
+0x0370, 0x0373,\r
+0x0376, 0x0377,\r
+0x037b, 0x037d,\r
+0x037f, 0x037f,\r
+0x0386, 0x0386,\r
+0x0388, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x03d1,\r
+0x03d5, 0x03f5,\r
+0x03f7, 0x03fb,\r
+0x03fd, 0x0481,\r
+0x048a, 0x052f,\r
+0x0531, 0x0556,\r
+0x0561, 0x0587,\r
+0x10a0, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x10fa,\r
+0x10fd, 0x10ff,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0x1c80, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cbf,\r
+0x1d79, 0x1d79,\r
+0x1d7d, 0x1d7d,\r
+0x1e00, 0x1e9b,\r
+0x1e9e, 0x1e9e,\r
+0x1ea0, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fbc,\r
+0x1fbe, 0x1fbe,\r
+0x1fc2, 0x1fc4,\r
+0x1fc6, 0x1fcc,\r
+0x1fd0, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fe0, 0x1fec,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffc,\r
+0x2126, 0x2126,\r
+0x212a, 0x212b,\r
+0x2132, 0x2132,\r
+0x214e, 0x214e,\r
+0x2160, 0x217f,\r
+0x2183, 0x2184,\r
+0x24b6, 0x24e9,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x2c60, 0x2c70,\r
+0x2c72, 0x2c73,\r
+0x2c75, 0x2c76,\r
+0x2c7e, 0x2ce3,\r
+0x2ceb, 0x2cee,\r
+0x2cf2, 0x2cf3,\r
+0x2d00, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0xa640, 0xa66d,\r
+0xa680, 0xa69b,\r
+0xa722, 0xa72f,\r
+0xa732, 0xa76f,\r
+0xa779, 0xa787,\r
+0xa78b, 0xa78d,\r
+0xa790, 0xa793,\r
+0xa796, 0xa7ae,\r
+0xa7b0, 0xa7b9,\r
+0xab53, 0xab53,\r
+0xab70, 0xabbf,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xff21, 0xff3a,\r
+0xff41, 0xff5a,\r
+0x10400, 0x1044f,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x118a0, 0x118df,\r
+0x16e40, 0x16e7f,\r
+0x1e900, 0x1e943,\r
+}; /* END of CR_Changes_When_Casemapped */\r
+\r
+/* PROPERTY: 'Changes_When_Lowercased': Derived Property */\r
+static const OnigCodePoint\r
+CR_Changes_When_Lowercased[] = { 594,\r
+0x0041, 0x005a,\r
+0x00c0, 0x00d6,\r
+0x00d8, 0x00de,\r
+0x0100, 0x0100,\r
+0x0102, 0x0102,\r
+0x0104, 0x0104,\r
+0x0106, 0x0106,\r
+0x0108, 0x0108,\r
+0x010a, 0x010a,\r
+0x010c, 0x010c,\r
+0x010e, 0x010e,\r
+0x0110, 0x0110,\r
+0x0112, 0x0112,\r
+0x0114, 0x0114,\r
+0x0116, 0x0116,\r
+0x0118, 0x0118,\r
+0x011a, 0x011a,\r
+0x011c, 0x011c,\r
+0x011e, 0x011e,\r
+0x0120, 0x0120,\r
+0x0122, 0x0122,\r
+0x0124, 0x0124,\r
+0x0126, 0x0126,\r
+0x0128, 0x0128,\r
+0x012a, 0x012a,\r
+0x012c, 0x012c,\r
+0x012e, 0x012e,\r
+0x0130, 0x0130,\r
+0x0132, 0x0132,\r
+0x0134, 0x0134,\r
+0x0136, 0x0136,\r
+0x0139, 0x0139,\r
+0x013b, 0x013b,\r
+0x013d, 0x013d,\r
+0x013f, 0x013f,\r
+0x0141, 0x0141,\r
+0x0143, 0x0143,\r
+0x0145, 0x0145,\r
+0x0147, 0x0147,\r
+0x014a, 0x014a,\r
+0x014c, 0x014c,\r
+0x014e, 0x014e,\r
+0x0150, 0x0150,\r
+0x0152, 0x0152,\r
+0x0154, 0x0154,\r
+0x0156, 0x0156,\r
+0x0158, 0x0158,\r
+0x015a, 0x015a,\r
+0x015c, 0x015c,\r
+0x015e, 0x015e,\r
+0x0160, 0x0160,\r
+0x0162, 0x0162,\r
+0x0164, 0x0164,\r
+0x0166, 0x0166,\r
+0x0168, 0x0168,\r
+0x016a, 0x016a,\r
+0x016c, 0x016c,\r
+0x016e, 0x016e,\r
+0x0170, 0x0170,\r
+0x0172, 0x0172,\r
+0x0174, 0x0174,\r
+0x0176, 0x0176,\r
+0x0178, 0x0179,\r
+0x017b, 0x017b,\r
+0x017d, 0x017d,\r
+0x0181, 0x0182,\r
+0x0184, 0x0184,\r
+0x0186, 0x0187,\r
+0x0189, 0x018b,\r
+0x018e, 0x0191,\r
+0x0193, 0x0194,\r
+0x0196, 0x0198,\r
+0x019c, 0x019d,\r
+0x019f, 0x01a0,\r
+0x01a2, 0x01a2,\r
+0x01a4, 0x01a4,\r
+0x01a6, 0x01a7,\r
+0x01a9, 0x01a9,\r
+0x01ac, 0x01ac,\r
+0x01ae, 0x01af,\r
+0x01b1, 0x01b3,\r
+0x01b5, 0x01b5,\r
+0x01b7, 0x01b8,\r
+0x01bc, 0x01bc,\r
+0x01c4, 0x01c5,\r
+0x01c7, 0x01c8,\r
+0x01ca, 0x01cb,\r
+0x01cd, 0x01cd,\r
+0x01cf, 0x01cf,\r
+0x01d1, 0x01d1,\r
+0x01d3, 0x01d3,\r
+0x01d5, 0x01d5,\r
+0x01d7, 0x01d7,\r
+0x01d9, 0x01d9,\r
+0x01db, 0x01db,\r
+0x01de, 0x01de,\r
+0x01e0, 0x01e0,\r
+0x01e2, 0x01e2,\r
+0x01e4, 0x01e4,\r
+0x01e6, 0x01e6,\r
+0x01e8, 0x01e8,\r
+0x01ea, 0x01ea,\r
+0x01ec, 0x01ec,\r
+0x01ee, 0x01ee,\r
+0x01f1, 0x01f2,\r
+0x01f4, 0x01f4,\r
+0x01f6, 0x01f8,\r
+0x01fa, 0x01fa,\r
+0x01fc, 0x01fc,\r
+0x01fe, 0x01fe,\r
+0x0200, 0x0200,\r
+0x0202, 0x0202,\r
+0x0204, 0x0204,\r
+0x0206, 0x0206,\r
+0x0208, 0x0208,\r
+0x020a, 0x020a,\r
+0x020c, 0x020c,\r
+0x020e, 0x020e,\r
+0x0210, 0x0210,\r
+0x0212, 0x0212,\r
+0x0214, 0x0214,\r
+0x0216, 0x0216,\r
+0x0218, 0x0218,\r
+0x021a, 0x021a,\r
+0x021c, 0x021c,\r
+0x021e, 0x021e,\r
+0x0220, 0x0220,\r
+0x0222, 0x0222,\r
+0x0224, 0x0224,\r
+0x0226, 0x0226,\r
+0x0228, 0x0228,\r
+0x022a, 0x022a,\r
+0x022c, 0x022c,\r
+0x022e, 0x022e,\r
+0x0230, 0x0230,\r
+0x0232, 0x0232,\r
+0x023a, 0x023b,\r
+0x023d, 0x023e,\r
+0x0241, 0x0241,\r
+0x0243, 0x0246,\r
+0x0248, 0x0248,\r
+0x024a, 0x024a,\r
+0x024c, 0x024c,\r
+0x024e, 0x024e,\r
+0x0370, 0x0370,\r
+0x0372, 0x0372,\r
+0x0376, 0x0376,\r
+0x037f, 0x037f,\r
+0x0386, 0x0386,\r
+0x0388, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x038f,\r
+0x0391, 0x03a1,\r
+0x03a3, 0x03ab,\r
+0x03cf, 0x03cf,\r
+0x03d8, 0x03d8,\r
+0x03da, 0x03da,\r
+0x03dc, 0x03dc,\r
+0x03de, 0x03de,\r
+0x03e0, 0x03e0,\r
+0x03e2, 0x03e2,\r
+0x03e4, 0x03e4,\r
+0x03e6, 0x03e6,\r
+0x03e8, 0x03e8,\r
+0x03ea, 0x03ea,\r
+0x03ec, 0x03ec,\r
+0x03ee, 0x03ee,\r
+0x03f4, 0x03f4,\r
+0x03f7, 0x03f7,\r
+0x03f9, 0x03fa,\r
+0x03fd, 0x042f,\r
+0x0460, 0x0460,\r
+0x0462, 0x0462,\r
+0x0464, 0x0464,\r
+0x0466, 0x0466,\r
+0x0468, 0x0468,\r
+0x046a, 0x046a,\r
+0x046c, 0x046c,\r
+0x046e, 0x046e,\r
+0x0470, 0x0470,\r
+0x0472, 0x0472,\r
+0x0474, 0x0474,\r
+0x0476, 0x0476,\r
+0x0478, 0x0478,\r
+0x047a, 0x047a,\r
+0x047c, 0x047c,\r
+0x047e, 0x047e,\r
+0x0480, 0x0480,\r
+0x048a, 0x048a,\r
+0x048c, 0x048c,\r
+0x048e, 0x048e,\r
+0x0490, 0x0490,\r
+0x0492, 0x0492,\r
+0x0494, 0x0494,\r
+0x0496, 0x0496,\r
+0x0498, 0x0498,\r
+0x049a, 0x049a,\r
+0x049c, 0x049c,\r
+0x049e, 0x049e,\r
+0x04a0, 0x04a0,\r
+0x04a2, 0x04a2,\r
+0x04a4, 0x04a4,\r
+0x04a6, 0x04a6,\r
+0x04a8, 0x04a8,\r
+0x04aa, 0x04aa,\r
+0x04ac, 0x04ac,\r
+0x04ae, 0x04ae,\r
+0x04b0, 0x04b0,\r
+0x04b2, 0x04b2,\r
+0x04b4, 0x04b4,\r
+0x04b6, 0x04b6,\r
+0x04b8, 0x04b8,\r
+0x04ba, 0x04ba,\r
+0x04bc, 0x04bc,\r
+0x04be, 0x04be,\r
+0x04c0, 0x04c1,\r
+0x04c3, 0x04c3,\r
+0x04c5, 0x04c5,\r
+0x04c7, 0x04c7,\r
+0x04c9, 0x04c9,\r
+0x04cb, 0x04cb,\r
+0x04cd, 0x04cd,\r
+0x04d0, 0x04d0,\r
+0x04d2, 0x04d2,\r
+0x04d4, 0x04d4,\r
+0x04d6, 0x04d6,\r
+0x04d8, 0x04d8,\r
+0x04da, 0x04da,\r
+0x04dc, 0x04dc,\r
+0x04de, 0x04de,\r
+0x04e0, 0x04e0,\r
+0x04e2, 0x04e2,\r
+0x04e4, 0x04e4,\r
+0x04e6, 0x04e6,\r
+0x04e8, 0x04e8,\r
+0x04ea, 0x04ea,\r
+0x04ec, 0x04ec,\r
+0x04ee, 0x04ee,\r
+0x04f0, 0x04f0,\r
+0x04f2, 0x04f2,\r
+0x04f4, 0x04f4,\r
+0x04f6, 0x04f6,\r
+0x04f8, 0x04f8,\r
+0x04fa, 0x04fa,\r
+0x04fc, 0x04fc,\r
+0x04fe, 0x04fe,\r
+0x0500, 0x0500,\r
+0x0502, 0x0502,\r
+0x0504, 0x0504,\r
+0x0506, 0x0506,\r
+0x0508, 0x0508,\r
+0x050a, 0x050a,\r
+0x050c, 0x050c,\r
+0x050e, 0x050e,\r
+0x0510, 0x0510,\r
+0x0512, 0x0512,\r
+0x0514, 0x0514,\r
+0x0516, 0x0516,\r
+0x0518, 0x0518,\r
+0x051a, 0x051a,\r
+0x051c, 0x051c,\r
+0x051e, 0x051e,\r
+0x0520, 0x0520,\r
+0x0522, 0x0522,\r
+0x0524, 0x0524,\r
+0x0526, 0x0526,\r
+0x0528, 0x0528,\r
+0x052a, 0x052a,\r
+0x052c, 0x052c,\r
+0x052e, 0x052e,\r
+0x0531, 0x0556,\r
+0x10a0, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x13a0, 0x13f5,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cbf,\r
+0x1e00, 0x1e00,\r
+0x1e02, 0x1e02,\r
+0x1e04, 0x1e04,\r
+0x1e06, 0x1e06,\r
+0x1e08, 0x1e08,\r
+0x1e0a, 0x1e0a,\r
+0x1e0c, 0x1e0c,\r
+0x1e0e, 0x1e0e,\r
+0x1e10, 0x1e10,\r
+0x1e12, 0x1e12,\r
+0x1e14, 0x1e14,\r
+0x1e16, 0x1e16,\r
+0x1e18, 0x1e18,\r
+0x1e1a, 0x1e1a,\r
+0x1e1c, 0x1e1c,\r
+0x1e1e, 0x1e1e,\r
+0x1e20, 0x1e20,\r
+0x1e22, 0x1e22,\r
+0x1e24, 0x1e24,\r
+0x1e26, 0x1e26,\r
+0x1e28, 0x1e28,\r
+0x1e2a, 0x1e2a,\r
+0x1e2c, 0x1e2c,\r
+0x1e2e, 0x1e2e,\r
+0x1e30, 0x1e30,\r
+0x1e32, 0x1e32,\r
+0x1e34, 0x1e34,\r
+0x1e36, 0x1e36,\r
+0x1e38, 0x1e38,\r
+0x1e3a, 0x1e3a,\r
+0x1e3c, 0x1e3c,\r
+0x1e3e, 0x1e3e,\r
+0x1e40, 0x1e40,\r
+0x1e42, 0x1e42,\r
+0x1e44, 0x1e44,\r
+0x1e46, 0x1e46,\r
+0x1e48, 0x1e48,\r
+0x1e4a, 0x1e4a,\r
+0x1e4c, 0x1e4c,\r
+0x1e4e, 0x1e4e,\r
+0x1e50, 0x1e50,\r
+0x1e52, 0x1e52,\r
+0x1e54, 0x1e54,\r
+0x1e56, 0x1e56,\r
+0x1e58, 0x1e58,\r
+0x1e5a, 0x1e5a,\r
+0x1e5c, 0x1e5c,\r
+0x1e5e, 0x1e5e,\r
+0x1e60, 0x1e60,\r
+0x1e62, 0x1e62,\r
+0x1e64, 0x1e64,\r
+0x1e66, 0x1e66,\r
+0x1e68, 0x1e68,\r
+0x1e6a, 0x1e6a,\r
+0x1e6c, 0x1e6c,\r
+0x1e6e, 0x1e6e,\r
+0x1e70, 0x1e70,\r
+0x1e72, 0x1e72,\r
+0x1e74, 0x1e74,\r
+0x1e76, 0x1e76,\r
+0x1e78, 0x1e78,\r
+0x1e7a, 0x1e7a,\r
+0x1e7c, 0x1e7c,\r
+0x1e7e, 0x1e7e,\r
+0x1e80, 0x1e80,\r
+0x1e82, 0x1e82,\r
+0x1e84, 0x1e84,\r
+0x1e86, 0x1e86,\r
+0x1e88, 0x1e88,\r
+0x1e8a, 0x1e8a,\r
+0x1e8c, 0x1e8c,\r
+0x1e8e, 0x1e8e,\r
+0x1e90, 0x1e90,\r
+0x1e92, 0x1e92,\r
+0x1e94, 0x1e94,\r
+0x1e9e, 0x1e9e,\r
+0x1ea0, 0x1ea0,\r
+0x1ea2, 0x1ea2,\r
+0x1ea4, 0x1ea4,\r
+0x1ea6, 0x1ea6,\r
+0x1ea8, 0x1ea8,\r
+0x1eaa, 0x1eaa,\r
+0x1eac, 0x1eac,\r
+0x1eae, 0x1eae,\r
+0x1eb0, 0x1eb0,\r
+0x1eb2, 0x1eb2,\r
+0x1eb4, 0x1eb4,\r
+0x1eb6, 0x1eb6,\r
+0x1eb8, 0x1eb8,\r
+0x1eba, 0x1eba,\r
+0x1ebc, 0x1ebc,\r
+0x1ebe, 0x1ebe,\r
+0x1ec0, 0x1ec0,\r
+0x1ec2, 0x1ec2,\r
+0x1ec4, 0x1ec4,\r
+0x1ec6, 0x1ec6,\r
+0x1ec8, 0x1ec8,\r
+0x1eca, 0x1eca,\r
+0x1ecc, 0x1ecc,\r
+0x1ece, 0x1ece,\r
+0x1ed0, 0x1ed0,\r
+0x1ed2, 0x1ed2,\r
+0x1ed4, 0x1ed4,\r
+0x1ed6, 0x1ed6,\r
+0x1ed8, 0x1ed8,\r
+0x1eda, 0x1eda,\r
+0x1edc, 0x1edc,\r
+0x1ede, 0x1ede,\r
+0x1ee0, 0x1ee0,\r
+0x1ee2, 0x1ee2,\r
+0x1ee4, 0x1ee4,\r
+0x1ee6, 0x1ee6,\r
+0x1ee8, 0x1ee8,\r
+0x1eea, 0x1eea,\r
+0x1eec, 0x1eec,\r
+0x1eee, 0x1eee,\r
+0x1ef0, 0x1ef0,\r
+0x1ef2, 0x1ef2,\r
+0x1ef4, 0x1ef4,\r
+0x1ef6, 0x1ef6,\r
+0x1ef8, 0x1ef8,\r
+0x1efa, 0x1efa,\r
+0x1efc, 0x1efc,\r
+0x1efe, 0x1efe,\r
+0x1f08, 0x1f0f,\r
+0x1f18, 0x1f1d,\r
+0x1f28, 0x1f2f,\r
+0x1f38, 0x1f3f,\r
+0x1f48, 0x1f4d,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f5f,\r
+0x1f68, 0x1f6f,\r
+0x1f88, 0x1f8f,\r
+0x1f98, 0x1f9f,\r
+0x1fa8, 0x1faf,\r
+0x1fb8, 0x1fbc,\r
+0x1fc8, 0x1fcc,\r
+0x1fd8, 0x1fdb,\r
+0x1fe8, 0x1fec,\r
+0x1ff8, 0x1ffc,\r
+0x2126, 0x2126,\r
+0x212a, 0x212b,\r
+0x2132, 0x2132,\r
+0x2160, 0x216f,\r
+0x2183, 0x2183,\r
+0x24b6, 0x24cf,\r
+0x2c00, 0x2c2e,\r
+0x2c60, 0x2c60,\r
+0x2c62, 0x2c64,\r
+0x2c67, 0x2c67,\r
+0x2c69, 0x2c69,\r
+0x2c6b, 0x2c6b,\r
+0x2c6d, 0x2c70,\r
+0x2c72, 0x2c72,\r
+0x2c75, 0x2c75,\r
+0x2c7e, 0x2c80,\r
+0x2c82, 0x2c82,\r
+0x2c84, 0x2c84,\r
+0x2c86, 0x2c86,\r
+0x2c88, 0x2c88,\r
+0x2c8a, 0x2c8a,\r
+0x2c8c, 0x2c8c,\r
+0x2c8e, 0x2c8e,\r
+0x2c90, 0x2c90,\r
+0x2c92, 0x2c92,\r
+0x2c94, 0x2c94,\r
+0x2c96, 0x2c96,\r
+0x2c98, 0x2c98,\r
+0x2c9a, 0x2c9a,\r
+0x2c9c, 0x2c9c,\r
+0x2c9e, 0x2c9e,\r
+0x2ca0, 0x2ca0,\r
+0x2ca2, 0x2ca2,\r
+0x2ca4, 0x2ca4,\r
+0x2ca6, 0x2ca6,\r
+0x2ca8, 0x2ca8,\r
+0x2caa, 0x2caa,\r
+0x2cac, 0x2cac,\r
+0x2cae, 0x2cae,\r
+0x2cb0, 0x2cb0,\r
+0x2cb2, 0x2cb2,\r
+0x2cb4, 0x2cb4,\r
+0x2cb6, 0x2cb6,\r
+0x2cb8, 0x2cb8,\r
+0x2cba, 0x2cba,\r
+0x2cbc, 0x2cbc,\r
+0x2cbe, 0x2cbe,\r
+0x2cc0, 0x2cc0,\r
+0x2cc2, 0x2cc2,\r
+0x2cc4, 0x2cc4,\r
+0x2cc6, 0x2cc6,\r
+0x2cc8, 0x2cc8,\r
+0x2cca, 0x2cca,\r
+0x2ccc, 0x2ccc,\r
+0x2cce, 0x2cce,\r
+0x2cd0, 0x2cd0,\r
+0x2cd2, 0x2cd2,\r
+0x2cd4, 0x2cd4,\r
+0x2cd6, 0x2cd6,\r
+0x2cd8, 0x2cd8,\r
+0x2cda, 0x2cda,\r
+0x2cdc, 0x2cdc,\r
+0x2cde, 0x2cde,\r
+0x2ce0, 0x2ce0,\r
+0x2ce2, 0x2ce2,\r
+0x2ceb, 0x2ceb,\r
+0x2ced, 0x2ced,\r
+0x2cf2, 0x2cf2,\r
+0xa640, 0xa640,\r
+0xa642, 0xa642,\r
+0xa644, 0xa644,\r
+0xa646, 0xa646,\r
+0xa648, 0xa648,\r
+0xa64a, 0xa64a,\r
+0xa64c, 0xa64c,\r
+0xa64e, 0xa64e,\r
+0xa650, 0xa650,\r
+0xa652, 0xa652,\r
+0xa654, 0xa654,\r
+0xa656, 0xa656,\r
+0xa658, 0xa658,\r
+0xa65a, 0xa65a,\r
+0xa65c, 0xa65c,\r
+0xa65e, 0xa65e,\r
+0xa660, 0xa660,\r
+0xa662, 0xa662,\r
+0xa664, 0xa664,\r
+0xa666, 0xa666,\r
+0xa668, 0xa668,\r
+0xa66a, 0xa66a,\r
+0xa66c, 0xa66c,\r
+0xa680, 0xa680,\r
+0xa682, 0xa682,\r
+0xa684, 0xa684,\r
+0xa686, 0xa686,\r
+0xa688, 0xa688,\r
+0xa68a, 0xa68a,\r
+0xa68c, 0xa68c,\r
+0xa68e, 0xa68e,\r
+0xa690, 0xa690,\r
+0xa692, 0xa692,\r
+0xa694, 0xa694,\r
+0xa696, 0xa696,\r
+0xa698, 0xa698,\r
+0xa69a, 0xa69a,\r
+0xa722, 0xa722,\r
+0xa724, 0xa724,\r
+0xa726, 0xa726,\r
+0xa728, 0xa728,\r
+0xa72a, 0xa72a,\r
+0xa72c, 0xa72c,\r
+0xa72e, 0xa72e,\r
+0xa732, 0xa732,\r
+0xa734, 0xa734,\r
+0xa736, 0xa736,\r
+0xa738, 0xa738,\r
+0xa73a, 0xa73a,\r
+0xa73c, 0xa73c,\r
+0xa73e, 0xa73e,\r
+0xa740, 0xa740,\r
+0xa742, 0xa742,\r
+0xa744, 0xa744,\r
+0xa746, 0xa746,\r
+0xa748, 0xa748,\r
+0xa74a, 0xa74a,\r
+0xa74c, 0xa74c,\r
+0xa74e, 0xa74e,\r
+0xa750, 0xa750,\r
+0xa752, 0xa752,\r
+0xa754, 0xa754,\r
+0xa756, 0xa756,\r
+0xa758, 0xa758,\r
+0xa75a, 0xa75a,\r
+0xa75c, 0xa75c,\r
+0xa75e, 0xa75e,\r
+0xa760, 0xa760,\r
+0xa762, 0xa762,\r
+0xa764, 0xa764,\r
+0xa766, 0xa766,\r
+0xa768, 0xa768,\r
+0xa76a, 0xa76a,\r
+0xa76c, 0xa76c,\r
+0xa76e, 0xa76e,\r
+0xa779, 0xa779,\r
+0xa77b, 0xa77b,\r
+0xa77d, 0xa77e,\r
+0xa780, 0xa780,\r
+0xa782, 0xa782,\r
+0xa784, 0xa784,\r
+0xa786, 0xa786,\r
+0xa78b, 0xa78b,\r
+0xa78d, 0xa78d,\r
+0xa790, 0xa790,\r
+0xa792, 0xa792,\r
+0xa796, 0xa796,\r
+0xa798, 0xa798,\r
+0xa79a, 0xa79a,\r
+0xa79c, 0xa79c,\r
+0xa79e, 0xa79e,\r
+0xa7a0, 0xa7a0,\r
+0xa7a2, 0xa7a2,\r
+0xa7a4, 0xa7a4,\r
+0xa7a6, 0xa7a6,\r
+0xa7a8, 0xa7a8,\r
+0xa7aa, 0xa7ae,\r
+0xa7b0, 0xa7b4,\r
+0xa7b6, 0xa7b6,\r
+0xa7b8, 0xa7b8,\r
+0xff21, 0xff3a,\r
+0x10400, 0x10427,\r
+0x104b0, 0x104d3,\r
+0x10c80, 0x10cb2,\r
+0x118a0, 0x118bf,\r
+0x16e40, 0x16e5f,\r
+0x1e900, 0x1e921,\r
+}; /* END of CR_Changes_When_Lowercased */\r
+\r
+/* PROPERTY: 'Changes_When_Titlecased': Derived Property */\r
+static const OnigCodePoint\r
+CR_Changes_When_Titlecased[] = { 610,\r
+0x0061, 0x007a,\r
+0x00b5, 0x00b5,\r
+0x00df, 0x00f6,\r
+0x00f8, 0x00ff,\r
+0x0101, 0x0101,\r
+0x0103, 0x0103,\r
+0x0105, 0x0105,\r
+0x0107, 0x0107,\r
+0x0109, 0x0109,\r
+0x010b, 0x010b,\r
+0x010d, 0x010d,\r
+0x010f, 0x010f,\r
+0x0111, 0x0111,\r
+0x0113, 0x0113,\r
+0x0115, 0x0115,\r
+0x0117, 0x0117,\r
+0x0119, 0x0119,\r
+0x011b, 0x011b,\r
+0x011d, 0x011d,\r
+0x011f, 0x011f,\r
+0x0121, 0x0121,\r
+0x0123, 0x0123,\r
+0x0125, 0x0125,\r
+0x0127, 0x0127,\r
+0x0129, 0x0129,\r
+0x012b, 0x012b,\r
+0x012d, 0x012d,\r
+0x012f, 0x012f,\r
+0x0131, 0x0131,\r
+0x0133, 0x0133,\r
+0x0135, 0x0135,\r
+0x0137, 0x0137,\r
+0x013a, 0x013a,\r
+0x013c, 0x013c,\r
+0x013e, 0x013e,\r
+0x0140, 0x0140,\r
+0x0142, 0x0142,\r
+0x0144, 0x0144,\r
+0x0146, 0x0146,\r
+0x0148, 0x0149,\r
+0x014b, 0x014b,\r
+0x014d, 0x014d,\r
+0x014f, 0x014f,\r
+0x0151, 0x0151,\r
+0x0153, 0x0153,\r
+0x0155, 0x0155,\r
+0x0157, 0x0157,\r
+0x0159, 0x0159,\r
+0x015b, 0x015b,\r
+0x015d, 0x015d,\r
+0x015f, 0x015f,\r
+0x0161, 0x0161,\r
+0x0163, 0x0163,\r
+0x0165, 0x0165,\r
+0x0167, 0x0167,\r
+0x0169, 0x0169,\r
+0x016b, 0x016b,\r
+0x016d, 0x016d,\r
+0x016f, 0x016f,\r
+0x0171, 0x0171,\r
+0x0173, 0x0173,\r
+0x0175, 0x0175,\r
+0x0177, 0x0177,\r
+0x017a, 0x017a,\r
+0x017c, 0x017c,\r
+0x017e, 0x0180,\r
+0x0183, 0x0183,\r
+0x0185, 0x0185,\r
+0x0188, 0x0188,\r
+0x018c, 0x018c,\r
+0x0192, 0x0192,\r
+0x0195, 0x0195,\r
+0x0199, 0x019a,\r
+0x019e, 0x019e,\r
+0x01a1, 0x01a1,\r
+0x01a3, 0x01a3,\r
+0x01a5, 0x01a5,\r
+0x01a8, 0x01a8,\r
+0x01ad, 0x01ad,\r
+0x01b0, 0x01b0,\r
+0x01b4, 0x01b4,\r
+0x01b6, 0x01b6,\r
+0x01b9, 0x01b9,\r
+0x01bd, 0x01bd,\r
+0x01bf, 0x01bf,\r
+0x01c4, 0x01c4,\r
+0x01c6, 0x01c7,\r
+0x01c9, 0x01ca,\r
+0x01cc, 0x01cc,\r
+0x01ce, 0x01ce,\r
+0x01d0, 0x01d0,\r
+0x01d2, 0x01d2,\r
+0x01d4, 0x01d4,\r
+0x01d6, 0x01d6,\r
+0x01d8, 0x01d8,\r
+0x01da, 0x01da,\r
+0x01dc, 0x01dd,\r
+0x01df, 0x01df,\r
+0x01e1, 0x01e1,\r
+0x01e3, 0x01e3,\r
+0x01e5, 0x01e5,\r
+0x01e7, 0x01e7,\r
+0x01e9, 0x01e9,\r
+0x01eb, 0x01eb,\r
+0x01ed, 0x01ed,\r
+0x01ef, 0x01f1,\r
+0x01f3, 0x01f3,\r
+0x01f5, 0x01f5,\r
+0x01f9, 0x01f9,\r
+0x01fb, 0x01fb,\r
+0x01fd, 0x01fd,\r
+0x01ff, 0x01ff,\r
+0x0201, 0x0201,\r
+0x0203, 0x0203,\r
+0x0205, 0x0205,\r
+0x0207, 0x0207,\r
+0x0209, 0x0209,\r
+0x020b, 0x020b,\r
+0x020d, 0x020d,\r
+0x020f, 0x020f,\r
+0x0211, 0x0211,\r
+0x0213, 0x0213,\r
+0x0215, 0x0215,\r
+0x0217, 0x0217,\r
+0x0219, 0x0219,\r
+0x021b, 0x021b,\r
+0x021d, 0x021d,\r
+0x021f, 0x021f,\r
+0x0223, 0x0223,\r
+0x0225, 0x0225,\r
+0x0227, 0x0227,\r
+0x0229, 0x0229,\r
+0x022b, 0x022b,\r
+0x022d, 0x022d,\r
+0x022f, 0x022f,\r
+0x0231, 0x0231,\r
+0x0233, 0x0233,\r
+0x023c, 0x023c,\r
+0x023f, 0x0240,\r
+0x0242, 0x0242,\r
+0x0247, 0x0247,\r
+0x0249, 0x0249,\r
+0x024b, 0x024b,\r
+0x024d, 0x024d,\r
+0x024f, 0x0254,\r
+0x0256, 0x0257,\r
+0x0259, 0x0259,\r
+0x025b, 0x025c,\r
+0x0260, 0x0261,\r
+0x0263, 0x0263,\r
+0x0265, 0x0266,\r
+0x0268, 0x026c,\r
+0x026f, 0x026f,\r
+0x0271, 0x0272,\r
+0x0275, 0x0275,\r
+0x027d, 0x027d,\r
+0x0280, 0x0280,\r
+0x0283, 0x0283,\r
+0x0287, 0x028c,\r
+0x0292, 0x0292,\r
+0x029d, 0x029e,\r
+0x0345, 0x0345,\r
+0x0371, 0x0371,\r
+0x0373, 0x0373,\r
+0x0377, 0x0377,\r
+0x037b, 0x037d,\r
+0x0390, 0x0390,\r
+0x03ac, 0x03ce,\r
+0x03d0, 0x03d1,\r
+0x03d5, 0x03d7,\r
+0x03d9, 0x03d9,\r
+0x03db, 0x03db,\r
+0x03dd, 0x03dd,\r
+0x03df, 0x03df,\r
+0x03e1, 0x03e1,\r
+0x03e3, 0x03e3,\r
+0x03e5, 0x03e5,\r
+0x03e7, 0x03e7,\r
+0x03e9, 0x03e9,\r
+0x03eb, 0x03eb,\r
+0x03ed, 0x03ed,\r
+0x03ef, 0x03f3,\r
+0x03f5, 0x03f5,\r
+0x03f8, 0x03f8,\r
+0x03fb, 0x03fb,\r
+0x0430, 0x045f,\r
+0x0461, 0x0461,\r
+0x0463, 0x0463,\r
+0x0465, 0x0465,\r
+0x0467, 0x0467,\r
+0x0469, 0x0469,\r
+0x046b, 0x046b,\r
+0x046d, 0x046d,\r
+0x046f, 0x046f,\r
+0x0471, 0x0471,\r
+0x0473, 0x0473,\r
+0x0475, 0x0475,\r
+0x0477, 0x0477,\r
+0x0479, 0x0479,\r
+0x047b, 0x047b,\r
+0x047d, 0x047d,\r
+0x047f, 0x047f,\r
+0x0481, 0x0481,\r
+0x048b, 0x048b,\r
+0x048d, 0x048d,\r
+0x048f, 0x048f,\r
+0x0491, 0x0491,\r
+0x0493, 0x0493,\r
+0x0495, 0x0495,\r
+0x0497, 0x0497,\r
+0x0499, 0x0499,\r
+0x049b, 0x049b,\r
+0x049d, 0x049d,\r
+0x049f, 0x049f,\r
+0x04a1, 0x04a1,\r
+0x04a3, 0x04a3,\r
+0x04a5, 0x04a5,\r
+0x04a7, 0x04a7,\r
+0x04a9, 0x04a9,\r
+0x04ab, 0x04ab,\r
+0x04ad, 0x04ad,\r
+0x04af, 0x04af,\r
+0x04b1, 0x04b1,\r
+0x04b3, 0x04b3,\r
+0x04b5, 0x04b5,\r
+0x04b7, 0x04b7,\r
+0x04b9, 0x04b9,\r
+0x04bb, 0x04bb,\r
+0x04bd, 0x04bd,\r
+0x04bf, 0x04bf,\r
+0x04c2, 0x04c2,\r
+0x04c4, 0x04c4,\r
+0x04c6, 0x04c6,\r
+0x04c8, 0x04c8,\r
+0x04ca, 0x04ca,\r
+0x04cc, 0x04cc,\r
+0x04ce, 0x04cf,\r
+0x04d1, 0x04d1,\r
+0x04d3, 0x04d3,\r
+0x04d5, 0x04d5,\r
+0x04d7, 0x04d7,\r
+0x04d9, 0x04d9,\r
+0x04db, 0x04db,\r
+0x04dd, 0x04dd,\r
+0x04df, 0x04df,\r
+0x04e1, 0x04e1,\r
+0x04e3, 0x04e3,\r
+0x04e5, 0x04e5,\r
+0x04e7, 0x04e7,\r
+0x04e9, 0x04e9,\r
+0x04eb, 0x04eb,\r
+0x04ed, 0x04ed,\r
+0x04ef, 0x04ef,\r
+0x04f1, 0x04f1,\r
+0x04f3, 0x04f3,\r
+0x04f5, 0x04f5,\r
+0x04f7, 0x04f7,\r
+0x04f9, 0x04f9,\r
+0x04fb, 0x04fb,\r
+0x04fd, 0x04fd,\r
+0x04ff, 0x04ff,\r
+0x0501, 0x0501,\r
+0x0503, 0x0503,\r
+0x0505, 0x0505,\r
+0x0507, 0x0507,\r
+0x0509, 0x0509,\r
+0x050b, 0x050b,\r
+0x050d, 0x050d,\r
+0x050f, 0x050f,\r
+0x0511, 0x0511,\r
+0x0513, 0x0513,\r
+0x0515, 0x0515,\r
+0x0517, 0x0517,\r
+0x0519, 0x0519,\r
+0x051b, 0x051b,\r
+0x051d, 0x051d,\r
+0x051f, 0x051f,\r
+0x0521, 0x0521,\r
+0x0523, 0x0523,\r
+0x0525, 0x0525,\r
+0x0527, 0x0527,\r
+0x0529, 0x0529,\r
+0x052b, 0x052b,\r
+0x052d, 0x052d,\r
+0x052f, 0x052f,\r
+0x0561, 0x0587,\r
+0x13f8, 0x13fd,\r
+0x1c80, 0x1c88,\r
+0x1d79, 0x1d79,\r
+0x1d7d, 0x1d7d,\r
+0x1e01, 0x1e01,\r
+0x1e03, 0x1e03,\r
+0x1e05, 0x1e05,\r
+0x1e07, 0x1e07,\r
+0x1e09, 0x1e09,\r
+0x1e0b, 0x1e0b,\r
+0x1e0d, 0x1e0d,\r
+0x1e0f, 0x1e0f,\r
+0x1e11, 0x1e11,\r
+0x1e13, 0x1e13,\r
+0x1e15, 0x1e15,\r
+0x1e17, 0x1e17,\r
+0x1e19, 0x1e19,\r
+0x1e1b, 0x1e1b,\r
+0x1e1d, 0x1e1d,\r
+0x1e1f, 0x1e1f,\r
+0x1e21, 0x1e21,\r
+0x1e23, 0x1e23,\r
+0x1e25, 0x1e25,\r
+0x1e27, 0x1e27,\r
+0x1e29, 0x1e29,\r
+0x1e2b, 0x1e2b,\r
+0x1e2d, 0x1e2d,\r
+0x1e2f, 0x1e2f,\r
+0x1e31, 0x1e31,\r
+0x1e33, 0x1e33,\r
+0x1e35, 0x1e35,\r
+0x1e37, 0x1e37,\r
+0x1e39, 0x1e39,\r
+0x1e3b, 0x1e3b,\r
+0x1e3d, 0x1e3d,\r
+0x1e3f, 0x1e3f,\r
+0x1e41, 0x1e41,\r
+0x1e43, 0x1e43,\r
+0x1e45, 0x1e45,\r
+0x1e47, 0x1e47,\r
+0x1e49, 0x1e49,\r
+0x1e4b, 0x1e4b,\r
+0x1e4d, 0x1e4d,\r
+0x1e4f, 0x1e4f,\r
+0x1e51, 0x1e51,\r
+0x1e53, 0x1e53,\r
+0x1e55, 0x1e55,\r
+0x1e57, 0x1e57,\r
+0x1e59, 0x1e59,\r
+0x1e5b, 0x1e5b,\r
+0x1e5d, 0x1e5d,\r
+0x1e5f, 0x1e5f,\r
+0x1e61, 0x1e61,\r
+0x1e63, 0x1e63,\r
+0x1e65, 0x1e65,\r
+0x1e67, 0x1e67,\r
+0x1e69, 0x1e69,\r
+0x1e6b, 0x1e6b,\r
+0x1e6d, 0x1e6d,\r
+0x1e6f, 0x1e6f,\r
+0x1e71, 0x1e71,\r
+0x1e73, 0x1e73,\r
+0x1e75, 0x1e75,\r
+0x1e77, 0x1e77,\r
+0x1e79, 0x1e79,\r
+0x1e7b, 0x1e7b,\r
+0x1e7d, 0x1e7d,\r
+0x1e7f, 0x1e7f,\r
+0x1e81, 0x1e81,\r
+0x1e83, 0x1e83,\r
+0x1e85, 0x1e85,\r
+0x1e87, 0x1e87,\r
+0x1e89, 0x1e89,\r
+0x1e8b, 0x1e8b,\r
+0x1e8d, 0x1e8d,\r
+0x1e8f, 0x1e8f,\r
+0x1e91, 0x1e91,\r
+0x1e93, 0x1e93,\r
+0x1e95, 0x1e9b,\r
+0x1ea1, 0x1ea1,\r
+0x1ea3, 0x1ea3,\r
+0x1ea5, 0x1ea5,\r
+0x1ea7, 0x1ea7,\r
+0x1ea9, 0x1ea9,\r
+0x1eab, 0x1eab,\r
+0x1ead, 0x1ead,\r
+0x1eaf, 0x1eaf,\r
+0x1eb1, 0x1eb1,\r
+0x1eb3, 0x1eb3,\r
+0x1eb5, 0x1eb5,\r
+0x1eb7, 0x1eb7,\r
+0x1eb9, 0x1eb9,\r
+0x1ebb, 0x1ebb,\r
+0x1ebd, 0x1ebd,\r
+0x1ebf, 0x1ebf,\r
+0x1ec1, 0x1ec1,\r
+0x1ec3, 0x1ec3,\r
+0x1ec5, 0x1ec5,\r
+0x1ec7, 0x1ec7,\r
+0x1ec9, 0x1ec9,\r
+0x1ecb, 0x1ecb,\r
+0x1ecd, 0x1ecd,\r
+0x1ecf, 0x1ecf,\r
+0x1ed1, 0x1ed1,\r
+0x1ed3, 0x1ed3,\r
+0x1ed5, 0x1ed5,\r
+0x1ed7, 0x1ed7,\r
+0x1ed9, 0x1ed9,\r
+0x1edb, 0x1edb,\r
+0x1edd, 0x1edd,\r
+0x1edf, 0x1edf,\r
+0x1ee1, 0x1ee1,\r
+0x1ee3, 0x1ee3,\r
+0x1ee5, 0x1ee5,\r
+0x1ee7, 0x1ee7,\r
+0x1ee9, 0x1ee9,\r
+0x1eeb, 0x1eeb,\r
+0x1eed, 0x1eed,\r
+0x1eef, 0x1eef,\r
+0x1ef1, 0x1ef1,\r
+0x1ef3, 0x1ef3,\r
+0x1ef5, 0x1ef5,\r
+0x1ef7, 0x1ef7,\r
+0x1ef9, 0x1ef9,\r
+0x1efb, 0x1efb,\r
+0x1efd, 0x1efd,\r
+0x1eff, 0x1f07,\r
+0x1f10, 0x1f15,\r
+0x1f20, 0x1f27,\r
+0x1f30, 0x1f37,\r
+0x1f40, 0x1f45,\r
+0x1f50, 0x1f57,\r
+0x1f60, 0x1f67,\r
+0x1f70, 0x1f7d,\r
+0x1f80, 0x1f87,\r
+0x1f90, 0x1f97,\r
+0x1fa0, 0x1fa7,\r
+0x1fb0, 0x1fb4,\r
+0x1fb6, 0x1fb7,\r
+0x1fbe, 0x1fbe,\r
+0x1fc2, 0x1fc4,\r
+0x1fc6, 0x1fc7,\r
+0x1fd0, 0x1fd3,\r
+0x1fd6, 0x1fd7,\r
+0x1fe0, 0x1fe7,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ff7,\r
+0x214e, 0x214e,\r
+0x2170, 0x217f,\r
+0x2184, 0x2184,\r
+0x24d0, 0x24e9,\r
+0x2c30, 0x2c5e,\r
+0x2c61, 0x2c61,\r
+0x2c65, 0x2c66,\r
+0x2c68, 0x2c68,\r
+0x2c6a, 0x2c6a,\r
+0x2c6c, 0x2c6c,\r
+0x2c73, 0x2c73,\r
+0x2c76, 0x2c76,\r
+0x2c81, 0x2c81,\r
+0x2c83, 0x2c83,\r
+0x2c85, 0x2c85,\r
+0x2c87, 0x2c87,\r
+0x2c89, 0x2c89,\r
+0x2c8b, 0x2c8b,\r
+0x2c8d, 0x2c8d,\r
+0x2c8f, 0x2c8f,\r
+0x2c91, 0x2c91,\r
+0x2c93, 0x2c93,\r
+0x2c95, 0x2c95,\r
+0x2c97, 0x2c97,\r
+0x2c99, 0x2c99,\r
+0x2c9b, 0x2c9b,\r
+0x2c9d, 0x2c9d,\r
+0x2c9f, 0x2c9f,\r
+0x2ca1, 0x2ca1,\r
+0x2ca3, 0x2ca3,\r
+0x2ca5, 0x2ca5,\r
+0x2ca7, 0x2ca7,\r
+0x2ca9, 0x2ca9,\r
+0x2cab, 0x2cab,\r
+0x2cad, 0x2cad,\r
+0x2caf, 0x2caf,\r
+0x2cb1, 0x2cb1,\r
+0x2cb3, 0x2cb3,\r
+0x2cb5, 0x2cb5,\r
+0x2cb7, 0x2cb7,\r
+0x2cb9, 0x2cb9,\r
+0x2cbb, 0x2cbb,\r
+0x2cbd, 0x2cbd,\r
+0x2cbf, 0x2cbf,\r
+0x2cc1, 0x2cc1,\r
+0x2cc3, 0x2cc3,\r
+0x2cc5, 0x2cc5,\r
+0x2cc7, 0x2cc7,\r
+0x2cc9, 0x2cc9,\r
+0x2ccb, 0x2ccb,\r
+0x2ccd, 0x2ccd,\r
+0x2ccf, 0x2ccf,\r
+0x2cd1, 0x2cd1,\r
+0x2cd3, 0x2cd3,\r
+0x2cd5, 0x2cd5,\r
+0x2cd7, 0x2cd7,\r
+0x2cd9, 0x2cd9,\r
+0x2cdb, 0x2cdb,\r
+0x2cdd, 0x2cdd,\r
+0x2cdf, 0x2cdf,\r
+0x2ce1, 0x2ce1,\r
+0x2ce3, 0x2ce3,\r
+0x2cec, 0x2cec,\r
+0x2cee, 0x2cee,\r
+0x2cf3, 0x2cf3,\r
+0x2d00, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0xa641, 0xa641,\r
+0xa643, 0xa643,\r
+0xa645, 0xa645,\r
+0xa647, 0xa647,\r
+0xa649, 0xa649,\r
+0xa64b, 0xa64b,\r
+0xa64d, 0xa64d,\r
+0xa64f, 0xa64f,\r
+0xa651, 0xa651,\r
+0xa653, 0xa653,\r
+0xa655, 0xa655,\r
+0xa657, 0xa657,\r
+0xa659, 0xa659,\r
+0xa65b, 0xa65b,\r
+0xa65d, 0xa65d,\r
+0xa65f, 0xa65f,\r
+0xa661, 0xa661,\r
+0xa663, 0xa663,\r
+0xa665, 0xa665,\r
+0xa667, 0xa667,\r
+0xa669, 0xa669,\r
+0xa66b, 0xa66b,\r
+0xa66d, 0xa66d,\r
+0xa681, 0xa681,\r
+0xa683, 0xa683,\r
+0xa685, 0xa685,\r
+0xa687, 0xa687,\r
+0xa689, 0xa689,\r
+0xa68b, 0xa68b,\r
+0xa68d, 0xa68d,\r
+0xa68f, 0xa68f,\r
+0xa691, 0xa691,\r
+0xa693, 0xa693,\r
+0xa695, 0xa695,\r
+0xa697, 0xa697,\r
+0xa699, 0xa699,\r
+0xa69b, 0xa69b,\r
+0xa723, 0xa723,\r
+0xa725, 0xa725,\r
+0xa727, 0xa727,\r
+0xa729, 0xa729,\r
+0xa72b, 0xa72b,\r
+0xa72d, 0xa72d,\r
+0xa72f, 0xa72f,\r
+0xa733, 0xa733,\r
+0xa735, 0xa735,\r
+0xa737, 0xa737,\r
+0xa739, 0xa739,\r
+0xa73b, 0xa73b,\r
+0xa73d, 0xa73d,\r
+0xa73f, 0xa73f,\r
+0xa741, 0xa741,\r
+0xa743, 0xa743,\r
+0xa745, 0xa745,\r
+0xa747, 0xa747,\r
+0xa749, 0xa749,\r
+0xa74b, 0xa74b,\r
+0xa74d, 0xa74d,\r
+0xa74f, 0xa74f,\r
+0xa751, 0xa751,\r
+0xa753, 0xa753,\r
+0xa755, 0xa755,\r
+0xa757, 0xa757,\r
+0xa759, 0xa759,\r
+0xa75b, 0xa75b,\r
+0xa75d, 0xa75d,\r
+0xa75f, 0xa75f,\r
+0xa761, 0xa761,\r
+0xa763, 0xa763,\r
+0xa765, 0xa765,\r
+0xa767, 0xa767,\r
+0xa769, 0xa769,\r
+0xa76b, 0xa76b,\r
+0xa76d, 0xa76d,\r
+0xa76f, 0xa76f,\r
+0xa77a, 0xa77a,\r
+0xa77c, 0xa77c,\r
+0xa77f, 0xa77f,\r
+0xa781, 0xa781,\r
+0xa783, 0xa783,\r
+0xa785, 0xa785,\r
+0xa787, 0xa787,\r
+0xa78c, 0xa78c,\r
+0xa791, 0xa791,\r
+0xa793, 0xa793,\r
+0xa797, 0xa797,\r
+0xa799, 0xa799,\r
+0xa79b, 0xa79b,\r
+0xa79d, 0xa79d,\r
+0xa79f, 0xa79f,\r
+0xa7a1, 0xa7a1,\r
+0xa7a3, 0xa7a3,\r
+0xa7a5, 0xa7a5,\r
+0xa7a7, 0xa7a7,\r
+0xa7a9, 0xa7a9,\r
+0xa7b5, 0xa7b5,\r
+0xa7b7, 0xa7b7,\r
+0xa7b9, 0xa7b9,\r
+0xab53, 0xab53,\r
+0xab70, 0xabbf,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xff41, 0xff5a,\r
+0x10428, 0x1044f,\r
+0x104d8, 0x104fb,\r
+0x10cc0, 0x10cf2,\r
+0x118c0, 0x118df,\r
+0x16e60, 0x16e7f,\r
+0x1e922, 0x1e943,\r
+}; /* END of CR_Changes_When_Titlecased */\r
+\r
+/* PROPERTY: 'Changes_When_Uppercased': Derived Property */\r
+static const OnigCodePoint\r
+CR_Changes_When_Uppercased[] = { 611,\r
+0x0061, 0x007a,\r
+0x00b5, 0x00b5,\r
+0x00df, 0x00f6,\r
+0x00f8, 0x00ff,\r
+0x0101, 0x0101,\r
+0x0103, 0x0103,\r
+0x0105, 0x0105,\r
+0x0107, 0x0107,\r
+0x0109, 0x0109,\r
+0x010b, 0x010b,\r
+0x010d, 0x010d,\r
+0x010f, 0x010f,\r
+0x0111, 0x0111,\r
+0x0113, 0x0113,\r
+0x0115, 0x0115,\r
+0x0117, 0x0117,\r
+0x0119, 0x0119,\r
+0x011b, 0x011b,\r
+0x011d, 0x011d,\r
+0x011f, 0x011f,\r
+0x0121, 0x0121,\r
+0x0123, 0x0123,\r
+0x0125, 0x0125,\r
+0x0127, 0x0127,\r
+0x0129, 0x0129,\r
+0x012b, 0x012b,\r
+0x012d, 0x012d,\r
+0x012f, 0x012f,\r
+0x0131, 0x0131,\r
+0x0133, 0x0133,\r
+0x0135, 0x0135,\r
+0x0137, 0x0137,\r
+0x013a, 0x013a,\r
+0x013c, 0x013c,\r
+0x013e, 0x013e,\r
+0x0140, 0x0140,\r
+0x0142, 0x0142,\r
+0x0144, 0x0144,\r
+0x0146, 0x0146,\r
+0x0148, 0x0149,\r
+0x014b, 0x014b,\r
+0x014d, 0x014d,\r
+0x014f, 0x014f,\r
+0x0151, 0x0151,\r
+0x0153, 0x0153,\r
+0x0155, 0x0155,\r
+0x0157, 0x0157,\r
+0x0159, 0x0159,\r
+0x015b, 0x015b,\r
+0x015d, 0x015d,\r
+0x015f, 0x015f,\r
+0x0161, 0x0161,\r
+0x0163, 0x0163,\r
+0x0165, 0x0165,\r
+0x0167, 0x0167,\r
+0x0169, 0x0169,\r
+0x016b, 0x016b,\r
+0x016d, 0x016d,\r
+0x016f, 0x016f,\r
+0x0171, 0x0171,\r
+0x0173, 0x0173,\r
+0x0175, 0x0175,\r
+0x0177, 0x0177,\r
+0x017a, 0x017a,\r
+0x017c, 0x017c,\r
+0x017e, 0x0180,\r
+0x0183, 0x0183,\r
+0x0185, 0x0185,\r
+0x0188, 0x0188,\r
+0x018c, 0x018c,\r
+0x0192, 0x0192,\r
+0x0195, 0x0195,\r
+0x0199, 0x019a,\r
+0x019e, 0x019e,\r
+0x01a1, 0x01a1,\r
+0x01a3, 0x01a3,\r
+0x01a5, 0x01a5,\r
+0x01a8, 0x01a8,\r
+0x01ad, 0x01ad,\r
+0x01b0, 0x01b0,\r
+0x01b4, 0x01b4,\r
+0x01b6, 0x01b6,\r
+0x01b9, 0x01b9,\r
+0x01bd, 0x01bd,\r
+0x01bf, 0x01bf,\r
+0x01c5, 0x01c6,\r
+0x01c8, 0x01c9,\r
+0x01cb, 0x01cc,\r
+0x01ce, 0x01ce,\r
+0x01d0, 0x01d0,\r
+0x01d2, 0x01d2,\r
+0x01d4, 0x01d4,\r
+0x01d6, 0x01d6,\r
+0x01d8, 0x01d8,\r
+0x01da, 0x01da,\r
+0x01dc, 0x01dd,\r
+0x01df, 0x01df,\r
+0x01e1, 0x01e1,\r
+0x01e3, 0x01e3,\r
+0x01e5, 0x01e5,\r
+0x01e7, 0x01e7,\r
+0x01e9, 0x01e9,\r
+0x01eb, 0x01eb,\r
+0x01ed, 0x01ed,\r
+0x01ef, 0x01f0,\r
+0x01f2, 0x01f3,\r
+0x01f5, 0x01f5,\r
+0x01f9, 0x01f9,\r
+0x01fb, 0x01fb,\r
+0x01fd, 0x01fd,\r
+0x01ff, 0x01ff,\r
+0x0201, 0x0201,\r
+0x0203, 0x0203,\r
+0x0205, 0x0205,\r
+0x0207, 0x0207,\r
+0x0209, 0x0209,\r
+0x020b, 0x020b,\r
+0x020d, 0x020d,\r
+0x020f, 0x020f,\r
+0x0211, 0x0211,\r
+0x0213, 0x0213,\r
+0x0215, 0x0215,\r
+0x0217, 0x0217,\r
+0x0219, 0x0219,\r
+0x021b, 0x021b,\r
+0x021d, 0x021d,\r
+0x021f, 0x021f,\r
+0x0223, 0x0223,\r
+0x0225, 0x0225,\r
+0x0227, 0x0227,\r
+0x0229, 0x0229,\r
+0x022b, 0x022b,\r
+0x022d, 0x022d,\r
+0x022f, 0x022f,\r
+0x0231, 0x0231,\r
+0x0233, 0x0233,\r
+0x023c, 0x023c,\r
+0x023f, 0x0240,\r
+0x0242, 0x0242,\r
+0x0247, 0x0247,\r
+0x0249, 0x0249,\r
+0x024b, 0x024b,\r
+0x024d, 0x024d,\r
+0x024f, 0x0254,\r
+0x0256, 0x0257,\r
+0x0259, 0x0259,\r
+0x025b, 0x025c,\r
+0x0260, 0x0261,\r
+0x0263, 0x0263,\r
+0x0265, 0x0266,\r
+0x0268, 0x026c,\r
+0x026f, 0x026f,\r
+0x0271, 0x0272,\r
+0x0275, 0x0275,\r
+0x027d, 0x027d,\r
+0x0280, 0x0280,\r
+0x0283, 0x0283,\r
+0x0287, 0x028c,\r
+0x0292, 0x0292,\r
+0x029d, 0x029e,\r
+0x0345, 0x0345,\r
+0x0371, 0x0371,\r
+0x0373, 0x0373,\r
+0x0377, 0x0377,\r
+0x037b, 0x037d,\r
+0x0390, 0x0390,\r
+0x03ac, 0x03ce,\r
+0x03d0, 0x03d1,\r
+0x03d5, 0x03d7,\r
+0x03d9, 0x03d9,\r
+0x03db, 0x03db,\r
+0x03dd, 0x03dd,\r
+0x03df, 0x03df,\r
+0x03e1, 0x03e1,\r
+0x03e3, 0x03e3,\r
+0x03e5, 0x03e5,\r
+0x03e7, 0x03e7,\r
+0x03e9, 0x03e9,\r
+0x03eb, 0x03eb,\r
+0x03ed, 0x03ed,\r
+0x03ef, 0x03f3,\r
+0x03f5, 0x03f5,\r
+0x03f8, 0x03f8,\r
+0x03fb, 0x03fb,\r
+0x0430, 0x045f,\r
+0x0461, 0x0461,\r
+0x0463, 0x0463,\r
+0x0465, 0x0465,\r
+0x0467, 0x0467,\r
+0x0469, 0x0469,\r
+0x046b, 0x046b,\r
+0x046d, 0x046d,\r
+0x046f, 0x046f,\r
+0x0471, 0x0471,\r
+0x0473, 0x0473,\r
+0x0475, 0x0475,\r
+0x0477, 0x0477,\r
+0x0479, 0x0479,\r
+0x047b, 0x047b,\r
+0x047d, 0x047d,\r
+0x047f, 0x047f,\r
+0x0481, 0x0481,\r
+0x048b, 0x048b,\r
+0x048d, 0x048d,\r
+0x048f, 0x048f,\r
+0x0491, 0x0491,\r
+0x0493, 0x0493,\r
+0x0495, 0x0495,\r
+0x0497, 0x0497,\r
+0x0499, 0x0499,\r
+0x049b, 0x049b,\r
+0x049d, 0x049d,\r
+0x049f, 0x049f,\r
+0x04a1, 0x04a1,\r
+0x04a3, 0x04a3,\r
+0x04a5, 0x04a5,\r
+0x04a7, 0x04a7,\r
+0x04a9, 0x04a9,\r
+0x04ab, 0x04ab,\r
+0x04ad, 0x04ad,\r
+0x04af, 0x04af,\r
+0x04b1, 0x04b1,\r
+0x04b3, 0x04b3,\r
+0x04b5, 0x04b5,\r
+0x04b7, 0x04b7,\r
+0x04b9, 0x04b9,\r
+0x04bb, 0x04bb,\r
+0x04bd, 0x04bd,\r
+0x04bf, 0x04bf,\r
+0x04c2, 0x04c2,\r
+0x04c4, 0x04c4,\r
+0x04c6, 0x04c6,\r
+0x04c8, 0x04c8,\r
+0x04ca, 0x04ca,\r
+0x04cc, 0x04cc,\r
+0x04ce, 0x04cf,\r
+0x04d1, 0x04d1,\r
+0x04d3, 0x04d3,\r
+0x04d5, 0x04d5,\r
+0x04d7, 0x04d7,\r
+0x04d9, 0x04d9,\r
+0x04db, 0x04db,\r
+0x04dd, 0x04dd,\r
+0x04df, 0x04df,\r
+0x04e1, 0x04e1,\r
+0x04e3, 0x04e3,\r
+0x04e5, 0x04e5,\r
+0x04e7, 0x04e7,\r
+0x04e9, 0x04e9,\r
+0x04eb, 0x04eb,\r
+0x04ed, 0x04ed,\r
+0x04ef, 0x04ef,\r
+0x04f1, 0x04f1,\r
+0x04f3, 0x04f3,\r
+0x04f5, 0x04f5,\r
+0x04f7, 0x04f7,\r
+0x04f9, 0x04f9,\r
+0x04fb, 0x04fb,\r
+0x04fd, 0x04fd,\r
+0x04ff, 0x04ff,\r
+0x0501, 0x0501,\r
+0x0503, 0x0503,\r
+0x0505, 0x0505,\r
+0x0507, 0x0507,\r
+0x0509, 0x0509,\r
+0x050b, 0x050b,\r
+0x050d, 0x050d,\r
+0x050f, 0x050f,\r
+0x0511, 0x0511,\r
+0x0513, 0x0513,\r
+0x0515, 0x0515,\r
+0x0517, 0x0517,\r
+0x0519, 0x0519,\r
+0x051b, 0x051b,\r
+0x051d, 0x051d,\r
+0x051f, 0x051f,\r
+0x0521, 0x0521,\r
+0x0523, 0x0523,\r
+0x0525, 0x0525,\r
+0x0527, 0x0527,\r
+0x0529, 0x0529,\r
+0x052b, 0x052b,\r
+0x052d, 0x052d,\r
+0x052f, 0x052f,\r
+0x0561, 0x0587,\r
+0x10d0, 0x10fa,\r
+0x10fd, 0x10ff,\r
+0x13f8, 0x13fd,\r
+0x1c80, 0x1c88,\r
+0x1d79, 0x1d79,\r
+0x1d7d, 0x1d7d,\r
+0x1e01, 0x1e01,\r
+0x1e03, 0x1e03,\r
+0x1e05, 0x1e05,\r
+0x1e07, 0x1e07,\r
+0x1e09, 0x1e09,\r
+0x1e0b, 0x1e0b,\r
+0x1e0d, 0x1e0d,\r
+0x1e0f, 0x1e0f,\r
+0x1e11, 0x1e11,\r
+0x1e13, 0x1e13,\r
+0x1e15, 0x1e15,\r
+0x1e17, 0x1e17,\r
+0x1e19, 0x1e19,\r
+0x1e1b, 0x1e1b,\r
+0x1e1d, 0x1e1d,\r
+0x1e1f, 0x1e1f,\r
+0x1e21, 0x1e21,\r
+0x1e23, 0x1e23,\r
+0x1e25, 0x1e25,\r
+0x1e27, 0x1e27,\r
+0x1e29, 0x1e29,\r
+0x1e2b, 0x1e2b,\r
+0x1e2d, 0x1e2d,\r
+0x1e2f, 0x1e2f,\r
+0x1e31, 0x1e31,\r
+0x1e33, 0x1e33,\r
+0x1e35, 0x1e35,\r
+0x1e37, 0x1e37,\r
+0x1e39, 0x1e39,\r
+0x1e3b, 0x1e3b,\r
+0x1e3d, 0x1e3d,\r
+0x1e3f, 0x1e3f,\r
+0x1e41, 0x1e41,\r
+0x1e43, 0x1e43,\r
+0x1e45, 0x1e45,\r
+0x1e47, 0x1e47,\r
+0x1e49, 0x1e49,\r
+0x1e4b, 0x1e4b,\r
+0x1e4d, 0x1e4d,\r
+0x1e4f, 0x1e4f,\r
+0x1e51, 0x1e51,\r
+0x1e53, 0x1e53,\r
+0x1e55, 0x1e55,\r
+0x1e57, 0x1e57,\r
+0x1e59, 0x1e59,\r
+0x1e5b, 0x1e5b,\r
+0x1e5d, 0x1e5d,\r
+0x1e5f, 0x1e5f,\r
+0x1e61, 0x1e61,\r
+0x1e63, 0x1e63,\r
+0x1e65, 0x1e65,\r
+0x1e67, 0x1e67,\r
+0x1e69, 0x1e69,\r
+0x1e6b, 0x1e6b,\r
+0x1e6d, 0x1e6d,\r
+0x1e6f, 0x1e6f,\r
+0x1e71, 0x1e71,\r
+0x1e73, 0x1e73,\r
+0x1e75, 0x1e75,\r
+0x1e77, 0x1e77,\r
+0x1e79, 0x1e79,\r
+0x1e7b, 0x1e7b,\r
+0x1e7d, 0x1e7d,\r
+0x1e7f, 0x1e7f,\r
+0x1e81, 0x1e81,\r
+0x1e83, 0x1e83,\r
+0x1e85, 0x1e85,\r
+0x1e87, 0x1e87,\r
+0x1e89, 0x1e89,\r
+0x1e8b, 0x1e8b,\r
+0x1e8d, 0x1e8d,\r
+0x1e8f, 0x1e8f,\r
+0x1e91, 0x1e91,\r
+0x1e93, 0x1e93,\r
+0x1e95, 0x1e9b,\r
+0x1ea1, 0x1ea1,\r
+0x1ea3, 0x1ea3,\r
+0x1ea5, 0x1ea5,\r
+0x1ea7, 0x1ea7,\r
+0x1ea9, 0x1ea9,\r
+0x1eab, 0x1eab,\r
+0x1ead, 0x1ead,\r
+0x1eaf, 0x1eaf,\r
+0x1eb1, 0x1eb1,\r
+0x1eb3, 0x1eb3,\r
+0x1eb5, 0x1eb5,\r
+0x1eb7, 0x1eb7,\r
+0x1eb9, 0x1eb9,\r
+0x1ebb, 0x1ebb,\r
+0x1ebd, 0x1ebd,\r
+0x1ebf, 0x1ebf,\r
+0x1ec1, 0x1ec1,\r
+0x1ec3, 0x1ec3,\r
+0x1ec5, 0x1ec5,\r
+0x1ec7, 0x1ec7,\r
+0x1ec9, 0x1ec9,\r
+0x1ecb, 0x1ecb,\r
+0x1ecd, 0x1ecd,\r
+0x1ecf, 0x1ecf,\r
+0x1ed1, 0x1ed1,\r
+0x1ed3, 0x1ed3,\r
+0x1ed5, 0x1ed5,\r
+0x1ed7, 0x1ed7,\r
+0x1ed9, 0x1ed9,\r
+0x1edb, 0x1edb,\r
+0x1edd, 0x1edd,\r
+0x1edf, 0x1edf,\r
+0x1ee1, 0x1ee1,\r
+0x1ee3, 0x1ee3,\r
+0x1ee5, 0x1ee5,\r
+0x1ee7, 0x1ee7,\r
+0x1ee9, 0x1ee9,\r
+0x1eeb, 0x1eeb,\r
+0x1eed, 0x1eed,\r
+0x1eef, 0x1eef,\r
+0x1ef1, 0x1ef1,\r
+0x1ef3, 0x1ef3,\r
+0x1ef5, 0x1ef5,\r
+0x1ef7, 0x1ef7,\r
+0x1ef9, 0x1ef9,\r
+0x1efb, 0x1efb,\r
+0x1efd, 0x1efd,\r
+0x1eff, 0x1f07,\r
+0x1f10, 0x1f15,\r
+0x1f20, 0x1f27,\r
+0x1f30, 0x1f37,\r
+0x1f40, 0x1f45,\r
+0x1f50, 0x1f57,\r
+0x1f60, 0x1f67,\r
+0x1f70, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fb7,\r
+0x1fbc, 0x1fbc,\r
+0x1fbe, 0x1fbe,\r
+0x1fc2, 0x1fc4,\r
+0x1fc6, 0x1fc7,\r
+0x1fcc, 0x1fcc,\r
+0x1fd0, 0x1fd3,\r
+0x1fd6, 0x1fd7,\r
+0x1fe0, 0x1fe7,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ff7,\r
+0x1ffc, 0x1ffc,\r
+0x214e, 0x214e,\r
+0x2170, 0x217f,\r
+0x2184, 0x2184,\r
+0x24d0, 0x24e9,\r
+0x2c30, 0x2c5e,\r
+0x2c61, 0x2c61,\r
+0x2c65, 0x2c66,\r
+0x2c68, 0x2c68,\r
+0x2c6a, 0x2c6a,\r
+0x2c6c, 0x2c6c,\r
+0x2c73, 0x2c73,\r
+0x2c76, 0x2c76,\r
+0x2c81, 0x2c81,\r
+0x2c83, 0x2c83,\r
+0x2c85, 0x2c85,\r
+0x2c87, 0x2c87,\r
+0x2c89, 0x2c89,\r
+0x2c8b, 0x2c8b,\r
+0x2c8d, 0x2c8d,\r
+0x2c8f, 0x2c8f,\r
+0x2c91, 0x2c91,\r
+0x2c93, 0x2c93,\r
+0x2c95, 0x2c95,\r
+0x2c97, 0x2c97,\r
+0x2c99, 0x2c99,\r
+0x2c9b, 0x2c9b,\r
+0x2c9d, 0x2c9d,\r
+0x2c9f, 0x2c9f,\r
+0x2ca1, 0x2ca1,\r
+0x2ca3, 0x2ca3,\r
+0x2ca5, 0x2ca5,\r
+0x2ca7, 0x2ca7,\r
+0x2ca9, 0x2ca9,\r
+0x2cab, 0x2cab,\r
+0x2cad, 0x2cad,\r
+0x2caf, 0x2caf,\r
+0x2cb1, 0x2cb1,\r
+0x2cb3, 0x2cb3,\r
+0x2cb5, 0x2cb5,\r
+0x2cb7, 0x2cb7,\r
+0x2cb9, 0x2cb9,\r
+0x2cbb, 0x2cbb,\r
+0x2cbd, 0x2cbd,\r
+0x2cbf, 0x2cbf,\r
+0x2cc1, 0x2cc1,\r
+0x2cc3, 0x2cc3,\r
+0x2cc5, 0x2cc5,\r
+0x2cc7, 0x2cc7,\r
+0x2cc9, 0x2cc9,\r
+0x2ccb, 0x2ccb,\r
+0x2ccd, 0x2ccd,\r
+0x2ccf, 0x2ccf,\r
+0x2cd1, 0x2cd1,\r
+0x2cd3, 0x2cd3,\r
+0x2cd5, 0x2cd5,\r
+0x2cd7, 0x2cd7,\r
+0x2cd9, 0x2cd9,\r
+0x2cdb, 0x2cdb,\r
+0x2cdd, 0x2cdd,\r
+0x2cdf, 0x2cdf,\r
+0x2ce1, 0x2ce1,\r
+0x2ce3, 0x2ce3,\r
+0x2cec, 0x2cec,\r
+0x2cee, 0x2cee,\r
+0x2cf3, 0x2cf3,\r
+0x2d00, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0xa641, 0xa641,\r
+0xa643, 0xa643,\r
+0xa645, 0xa645,\r
+0xa647, 0xa647,\r
+0xa649, 0xa649,\r
+0xa64b, 0xa64b,\r
+0xa64d, 0xa64d,\r
+0xa64f, 0xa64f,\r
+0xa651, 0xa651,\r
+0xa653, 0xa653,\r
+0xa655, 0xa655,\r
+0xa657, 0xa657,\r
+0xa659, 0xa659,\r
+0xa65b, 0xa65b,\r
+0xa65d, 0xa65d,\r
+0xa65f, 0xa65f,\r
+0xa661, 0xa661,\r
+0xa663, 0xa663,\r
+0xa665, 0xa665,\r
+0xa667, 0xa667,\r
+0xa669, 0xa669,\r
+0xa66b, 0xa66b,\r
+0xa66d, 0xa66d,\r
+0xa681, 0xa681,\r
+0xa683, 0xa683,\r
+0xa685, 0xa685,\r
+0xa687, 0xa687,\r
+0xa689, 0xa689,\r
+0xa68b, 0xa68b,\r
+0xa68d, 0xa68d,\r
+0xa68f, 0xa68f,\r
+0xa691, 0xa691,\r
+0xa693, 0xa693,\r
+0xa695, 0xa695,\r
+0xa697, 0xa697,\r
+0xa699, 0xa699,\r
+0xa69b, 0xa69b,\r
+0xa723, 0xa723,\r
+0xa725, 0xa725,\r
+0xa727, 0xa727,\r
+0xa729, 0xa729,\r
+0xa72b, 0xa72b,\r
+0xa72d, 0xa72d,\r
+0xa72f, 0xa72f,\r
+0xa733, 0xa733,\r
+0xa735, 0xa735,\r
+0xa737, 0xa737,\r
+0xa739, 0xa739,\r
+0xa73b, 0xa73b,\r
+0xa73d, 0xa73d,\r
+0xa73f, 0xa73f,\r
+0xa741, 0xa741,\r
+0xa743, 0xa743,\r
+0xa745, 0xa745,\r
+0xa747, 0xa747,\r
+0xa749, 0xa749,\r
+0xa74b, 0xa74b,\r
+0xa74d, 0xa74d,\r
+0xa74f, 0xa74f,\r
+0xa751, 0xa751,\r
+0xa753, 0xa753,\r
+0xa755, 0xa755,\r
+0xa757, 0xa757,\r
+0xa759, 0xa759,\r
+0xa75b, 0xa75b,\r
+0xa75d, 0xa75d,\r
+0xa75f, 0xa75f,\r
+0xa761, 0xa761,\r
+0xa763, 0xa763,\r
+0xa765, 0xa765,\r
+0xa767, 0xa767,\r
+0xa769, 0xa769,\r
+0xa76b, 0xa76b,\r
+0xa76d, 0xa76d,\r
+0xa76f, 0xa76f,\r
+0xa77a, 0xa77a,\r
+0xa77c, 0xa77c,\r
+0xa77f, 0xa77f,\r
+0xa781, 0xa781,\r
+0xa783, 0xa783,\r
+0xa785, 0xa785,\r
+0xa787, 0xa787,\r
+0xa78c, 0xa78c,\r
+0xa791, 0xa791,\r
+0xa793, 0xa793,\r
+0xa797, 0xa797,\r
+0xa799, 0xa799,\r
+0xa79b, 0xa79b,\r
+0xa79d, 0xa79d,\r
+0xa79f, 0xa79f,\r
+0xa7a1, 0xa7a1,\r
+0xa7a3, 0xa7a3,\r
+0xa7a5, 0xa7a5,\r
+0xa7a7, 0xa7a7,\r
+0xa7a9, 0xa7a9,\r
+0xa7b5, 0xa7b5,\r
+0xa7b7, 0xa7b7,\r
+0xa7b9, 0xa7b9,\r
+0xab53, 0xab53,\r
+0xab70, 0xabbf,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xff41, 0xff5a,\r
+0x10428, 0x1044f,\r
+0x104d8, 0x104fb,\r
+0x10cc0, 0x10cf2,\r
+0x118c0, 0x118df,\r
+0x16e60, 0x16e7f,\r
+0x1e922, 0x1e943,\r
+}; /* END of CR_Changes_When_Uppercased */\r
+\r
+/* PROPERTY: 'Cherokee': Script */\r
+static const OnigCodePoint\r
+CR_Cherokee[] = { 3,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0xab70, 0xabbf,\r
+}; /* END of CR_Cherokee */\r
+\r
+/* PROPERTY: 'Cn': General Category */\r
+static const OnigCodePoint\r
+CR_Cn[] = { 658,\r
+0x0378, 0x0379,\r
+0x0380, 0x0383,\r
+0x038b, 0x038b,\r
+0x038d, 0x038d,\r
+0x03a2, 0x03a2,\r
+0x0530, 0x0530,\r
+0x0557, 0x0558,\r
+0x058b, 0x058c,\r
+0x0590, 0x0590,\r
+0x05c8, 0x05cf,\r
+0x05eb, 0x05ee,\r
+0x05f5, 0x05ff,\r
+0x061d, 0x061d,\r
+0x070e, 0x070e,\r
+0x074b, 0x074c,\r
+0x07b2, 0x07bf,\r
+0x07fb, 0x07fc,\r
+0x082e, 0x082f,\r
+0x083f, 0x083f,\r
+0x085c, 0x085d,\r
+0x085f, 0x085f,\r
+0x086b, 0x089f,\r
+0x08b5, 0x08b5,\r
+0x08be, 0x08d2,\r
+0x0984, 0x0984,\r
+0x098d, 0x098e,\r
+0x0991, 0x0992,\r
+0x09a9, 0x09a9,\r
+0x09b1, 0x09b1,\r
+0x09b3, 0x09b5,\r
+0x09ba, 0x09bb,\r
+0x09c5, 0x09c6,\r
+0x09c9, 0x09ca,\r
+0x09cf, 0x09d6,\r
+0x09d8, 0x09db,\r
+0x09de, 0x09de,\r
+0x09e4, 0x09e5,\r
+0x09ff, 0x0a00,\r
+0x0a04, 0x0a04,\r
+0x0a0b, 0x0a0e,\r
+0x0a11, 0x0a12,\r
+0x0a29, 0x0a29,\r
+0x0a31, 0x0a31,\r
+0x0a34, 0x0a34,\r
+0x0a37, 0x0a37,\r
+0x0a3a, 0x0a3b,\r
+0x0a3d, 0x0a3d,\r
+0x0a43, 0x0a46,\r
+0x0a49, 0x0a4a,\r
+0x0a4e, 0x0a50,\r
+0x0a52, 0x0a58,\r
+0x0a5d, 0x0a5d,\r
+0x0a5f, 0x0a65,\r
+0x0a77, 0x0a80,\r
+0x0a84, 0x0a84,\r
+0x0a8e, 0x0a8e,\r
+0x0a92, 0x0a92,\r
+0x0aa9, 0x0aa9,\r
+0x0ab1, 0x0ab1,\r
+0x0ab4, 0x0ab4,\r
+0x0aba, 0x0abb,\r
+0x0ac6, 0x0ac6,\r
+0x0aca, 0x0aca,\r
+0x0ace, 0x0acf,\r
+0x0ad1, 0x0adf,\r
+0x0ae4, 0x0ae5,\r
+0x0af2, 0x0af8,\r
+0x0b00, 0x0b00,\r
+0x0b04, 0x0b04,\r
+0x0b0d, 0x0b0e,\r
+0x0b11, 0x0b12,\r
+0x0b29, 0x0b29,\r
+0x0b31, 0x0b31,\r
+0x0b34, 0x0b34,\r
+0x0b3a, 0x0b3b,\r
+0x0b45, 0x0b46,\r
+0x0b49, 0x0b4a,\r
+0x0b4e, 0x0b55,\r
+0x0b58, 0x0b5b,\r
+0x0b5e, 0x0b5e,\r
+0x0b64, 0x0b65,\r
+0x0b78, 0x0b81,\r
+0x0b84, 0x0b84,\r
+0x0b8b, 0x0b8d,\r
+0x0b91, 0x0b91,\r
+0x0b96, 0x0b98,\r
+0x0b9b, 0x0b9b,\r
+0x0b9d, 0x0b9d,\r
+0x0ba0, 0x0ba2,\r
+0x0ba5, 0x0ba7,\r
+0x0bab, 0x0bad,\r
+0x0bba, 0x0bbd,\r
+0x0bc3, 0x0bc5,\r
+0x0bc9, 0x0bc9,\r
+0x0bce, 0x0bcf,\r
+0x0bd1, 0x0bd6,\r
+0x0bd8, 0x0be5,\r
+0x0bfb, 0x0bff,\r
+0x0c0d, 0x0c0d,\r
+0x0c11, 0x0c11,\r
+0x0c29, 0x0c29,\r
+0x0c3a, 0x0c3c,\r
+0x0c45, 0x0c45,\r
+0x0c49, 0x0c49,\r
+0x0c4e, 0x0c54,\r
+0x0c57, 0x0c57,\r
+0x0c5b, 0x0c5f,\r
+0x0c64, 0x0c65,\r
+0x0c70, 0x0c77,\r
+0x0c8d, 0x0c8d,\r
+0x0c91, 0x0c91,\r
+0x0ca9, 0x0ca9,\r
+0x0cb4, 0x0cb4,\r
+0x0cba, 0x0cbb,\r
+0x0cc5, 0x0cc5,\r
+0x0cc9, 0x0cc9,\r
+0x0cce, 0x0cd4,\r
+0x0cd7, 0x0cdd,\r
+0x0cdf, 0x0cdf,\r
+0x0ce4, 0x0ce5,\r
+0x0cf0, 0x0cf0,\r
+0x0cf3, 0x0cff,\r
+0x0d04, 0x0d04,\r
+0x0d0d, 0x0d0d,\r
+0x0d11, 0x0d11,\r
+0x0d45, 0x0d45,\r
+0x0d49, 0x0d49,\r
+0x0d50, 0x0d53,\r
+0x0d64, 0x0d65,\r
+0x0d80, 0x0d81,\r
+0x0d84, 0x0d84,\r
+0x0d97, 0x0d99,\r
+0x0db2, 0x0db2,\r
+0x0dbc, 0x0dbc,\r
+0x0dbe, 0x0dbf,\r
+0x0dc7, 0x0dc9,\r
+0x0dcb, 0x0dce,\r
+0x0dd5, 0x0dd5,\r
+0x0dd7, 0x0dd7,\r
+0x0de0, 0x0de5,\r
+0x0df0, 0x0df1,\r
+0x0df5, 0x0e00,\r
+0x0e3b, 0x0e3e,\r
+0x0e5c, 0x0e80,\r
+0x0e83, 0x0e83,\r
+0x0e85, 0x0e86,\r
+0x0e89, 0x0e89,\r
+0x0e8b, 0x0e8c,\r
+0x0e8e, 0x0e93,\r
+0x0e98, 0x0e98,\r
+0x0ea0, 0x0ea0,\r
+0x0ea4, 0x0ea4,\r
+0x0ea6, 0x0ea6,\r
+0x0ea8, 0x0ea9,\r
+0x0eac, 0x0eac,\r
+0x0eba, 0x0eba,\r
+0x0ebe, 0x0ebf,\r
+0x0ec5, 0x0ec5,\r
+0x0ec7, 0x0ec7,\r
+0x0ece, 0x0ecf,\r
+0x0eda, 0x0edb,\r
+0x0ee0, 0x0eff,\r
+0x0f48, 0x0f48,\r
+0x0f6d, 0x0f70,\r
+0x0f98, 0x0f98,\r
+0x0fbd, 0x0fbd,\r
+0x0fcd, 0x0fcd,\r
+0x0fdb, 0x0fff,\r
+0x10c6, 0x10c6,\r
+0x10c8, 0x10cc,\r
+0x10ce, 0x10cf,\r
+0x1249, 0x1249,\r
+0x124e, 0x124f,\r
+0x1257, 0x1257,\r
+0x1259, 0x1259,\r
+0x125e, 0x125f,\r
+0x1289, 0x1289,\r
+0x128e, 0x128f,\r
+0x12b1, 0x12b1,\r
+0x12b6, 0x12b7,\r
+0x12bf, 0x12bf,\r
+0x12c1, 0x12c1,\r
+0x12c6, 0x12c7,\r
+0x12d7, 0x12d7,\r
+0x1311, 0x1311,\r
+0x1316, 0x1317,\r
+0x135b, 0x135c,\r
+0x137d, 0x137f,\r
+0x139a, 0x139f,\r
+0x13f6, 0x13f7,\r
+0x13fe, 0x13ff,\r
+0x169d, 0x169f,\r
+0x16f9, 0x16ff,\r
+0x170d, 0x170d,\r
+0x1715, 0x171f,\r
+0x1737, 0x173f,\r
+0x1754, 0x175f,\r
+0x176d, 0x176d,\r
+0x1771, 0x1771,\r
+0x1774, 0x177f,\r
+0x17de, 0x17df,\r
+0x17ea, 0x17ef,\r
+0x17fa, 0x17ff,\r
+0x180f, 0x180f,\r
+0x181a, 0x181f,\r
+0x1879, 0x187f,\r
+0x18ab, 0x18af,\r
+0x18f6, 0x18ff,\r
+0x191f, 0x191f,\r
+0x192c, 0x192f,\r
+0x193c, 0x193f,\r
+0x1941, 0x1943,\r
+0x196e, 0x196f,\r
+0x1975, 0x197f,\r
+0x19ac, 0x19af,\r
+0x19ca, 0x19cf,\r
+0x19db, 0x19dd,\r
+0x1a1c, 0x1a1d,\r
+0x1a5f, 0x1a5f,\r
+0x1a7d, 0x1a7e,\r
+0x1a8a, 0x1a8f,\r
+0x1a9a, 0x1a9f,\r
+0x1aae, 0x1aaf,\r
+0x1abf, 0x1aff,\r
+0x1b4c, 0x1b4f,\r
+0x1b7d, 0x1b7f,\r
+0x1bf4, 0x1bfb,\r
+0x1c38, 0x1c3a,\r
+0x1c4a, 0x1c4c,\r
+0x1c89, 0x1c8f,\r
+0x1cbb, 0x1cbc,\r
+0x1cc8, 0x1ccf,\r
+0x1cfa, 0x1cff,\r
+0x1dfa, 0x1dfa,\r
+0x1f16, 0x1f17,\r
+0x1f1e, 0x1f1f,\r
+0x1f46, 0x1f47,\r
+0x1f4e, 0x1f4f,\r
+0x1f58, 0x1f58,\r
+0x1f5a, 0x1f5a,\r
+0x1f5c, 0x1f5c,\r
+0x1f5e, 0x1f5e,\r
+0x1f7e, 0x1f7f,\r
+0x1fb5, 0x1fb5,\r
+0x1fc5, 0x1fc5,\r
+0x1fd4, 0x1fd5,\r
+0x1fdc, 0x1fdc,\r
+0x1ff0, 0x1ff1,\r
+0x1ff5, 0x1ff5,\r
+0x1fff, 0x1fff,\r
+0x2065, 0x2065,\r
+0x2072, 0x2073,\r
+0x208f, 0x208f,\r
+0x209d, 0x209f,\r
+0x20c0, 0x20cf,\r
+0x20f1, 0x20ff,\r
+0x218c, 0x218f,\r
+0x2427, 0x243f,\r
+0x244b, 0x245f,\r
+0x2b74, 0x2b75,\r
+0x2b96, 0x2b97,\r
+0x2bc9, 0x2bc9,\r
+0x2bff, 0x2bff,\r
+0x2c2f, 0x2c2f,\r
+0x2c5f, 0x2c5f,\r
+0x2cf4, 0x2cf8,\r
+0x2d26, 0x2d26,\r
+0x2d28, 0x2d2c,\r
+0x2d2e, 0x2d2f,\r
+0x2d68, 0x2d6e,\r
+0x2d71, 0x2d7e,\r
+0x2d97, 0x2d9f,\r
+0x2da7, 0x2da7,\r
+0x2daf, 0x2daf,\r
+0x2db7, 0x2db7,\r
+0x2dbf, 0x2dbf,\r
+0x2dc7, 0x2dc7,\r
+0x2dcf, 0x2dcf,\r
+0x2dd7, 0x2dd7,\r
+0x2ddf, 0x2ddf,\r
+0x2e4f, 0x2e7f,\r
+0x2e9a, 0x2e9a,\r
+0x2ef4, 0x2eff,\r
+0x2fd6, 0x2fef,\r
+0x2ffc, 0x2fff,\r
+0x3040, 0x3040,\r
+0x3097, 0x3098,\r
+0x3100, 0x3104,\r
+0x3130, 0x3130,\r
+0x318f, 0x318f,\r
+0x31bb, 0x31bf,\r
+0x31e4, 0x31ef,\r
+0x321f, 0x321f,\r
+0x32ff, 0x32ff,\r
+0x4db6, 0x4dbf,\r
+0x9ff0, 0x9fff,\r
+0xa48d, 0xa48f,\r
+0xa4c7, 0xa4cf,\r
+0xa62c, 0xa63f,\r
+0xa6f8, 0xa6ff,\r
+0xa7ba, 0xa7f6,\r
+0xa82c, 0xa82f,\r
+0xa83a, 0xa83f,\r
+0xa878, 0xa87f,\r
+0xa8c6, 0xa8cd,\r
+0xa8da, 0xa8df,\r
+0xa954, 0xa95e,\r
+0xa97d, 0xa97f,\r
+0xa9ce, 0xa9ce,\r
+0xa9da, 0xa9dd,\r
+0xa9ff, 0xa9ff,\r
+0xaa37, 0xaa3f,\r
+0xaa4e, 0xaa4f,\r
+0xaa5a, 0xaa5b,\r
+0xaac3, 0xaada,\r
+0xaaf7, 0xab00,\r
+0xab07, 0xab08,\r
+0xab0f, 0xab10,\r
+0xab17, 0xab1f,\r
+0xab27, 0xab27,\r
+0xab2f, 0xab2f,\r
+0xab66, 0xab6f,\r
+0xabee, 0xabef,\r
+0xabfa, 0xabff,\r
+0xd7a4, 0xd7af,\r
+0xd7c7, 0xd7ca,\r
+0xd7fc, 0xd7ff,\r
+0xfa6e, 0xfa6f,\r
+0xfada, 0xfaff,\r
+0xfb07, 0xfb12,\r
+0xfb18, 0xfb1c,\r
+0xfb37, 0xfb37,\r
+0xfb3d, 0xfb3d,\r
+0xfb3f, 0xfb3f,\r
+0xfb42, 0xfb42,\r
+0xfb45, 0xfb45,\r
+0xfbc2, 0xfbd2,\r
+0xfd40, 0xfd4f,\r
+0xfd90, 0xfd91,\r
+0xfdc8, 0xfdef,\r
+0xfdfe, 0xfdff,\r
+0xfe1a, 0xfe1f,\r
+0xfe53, 0xfe53,\r
+0xfe67, 0xfe67,\r
+0xfe6c, 0xfe6f,\r
+0xfe75, 0xfe75,\r
+0xfefd, 0xfefe,\r
+0xff00, 0xff00,\r
+0xffbf, 0xffc1,\r
+0xffc8, 0xffc9,\r
+0xffd0, 0xffd1,\r
+0xffd8, 0xffd9,\r
+0xffdd, 0xffdf,\r
+0xffe7, 0xffe7,\r
+0xffef, 0xfff8,\r
+0xfffe, 0xffff,\r
+0x1000c, 0x1000c,\r
+0x10027, 0x10027,\r
+0x1003b, 0x1003b,\r
+0x1003e, 0x1003e,\r
+0x1004e, 0x1004f,\r
+0x1005e, 0x1007f,\r
+0x100fb, 0x100ff,\r
+0x10103, 0x10106,\r
+0x10134, 0x10136,\r
+0x1018f, 0x1018f,\r
+0x1019c, 0x1019f,\r
+0x101a1, 0x101cf,\r
+0x101fe, 0x1027f,\r
+0x1029d, 0x1029f,\r
+0x102d1, 0x102df,\r
+0x102fc, 0x102ff,\r
+0x10324, 0x1032c,\r
+0x1034b, 0x1034f,\r
+0x1037b, 0x1037f,\r
+0x1039e, 0x1039e,\r
+0x103c4, 0x103c7,\r
+0x103d6, 0x103ff,\r
+0x1049e, 0x1049f,\r
+0x104aa, 0x104af,\r
+0x104d4, 0x104d7,\r
+0x104fc, 0x104ff,\r
+0x10528, 0x1052f,\r
+0x10564, 0x1056e,\r
+0x10570, 0x105ff,\r
+0x10737, 0x1073f,\r
+0x10756, 0x1075f,\r
+0x10768, 0x107ff,\r
+0x10806, 0x10807,\r
+0x10809, 0x10809,\r
+0x10836, 0x10836,\r
+0x10839, 0x1083b,\r
+0x1083d, 0x1083e,\r
+0x10856, 0x10856,\r
+0x1089f, 0x108a6,\r
+0x108b0, 0x108df,\r
+0x108f3, 0x108f3,\r
+0x108f6, 0x108fa,\r
+0x1091c, 0x1091e,\r
+0x1093a, 0x1093e,\r
+0x10940, 0x1097f,\r
+0x109b8, 0x109bb,\r
+0x109d0, 0x109d1,\r
+0x10a04, 0x10a04,\r
+0x10a07, 0x10a0b,\r
+0x10a14, 0x10a14,\r
+0x10a18, 0x10a18,\r
+0x10a36, 0x10a37,\r
+0x10a3b, 0x10a3e,\r
+0x10a49, 0x10a4f,\r
+0x10a59, 0x10a5f,\r
+0x10aa0, 0x10abf,\r
+0x10ae7, 0x10aea,\r
+0x10af7, 0x10aff,\r
+0x10b36, 0x10b38,\r
+0x10b56, 0x10b57,\r
+0x10b73, 0x10b77,\r
+0x10b92, 0x10b98,\r
+0x10b9d, 0x10ba8,\r
+0x10bb0, 0x10bff,\r
+0x10c49, 0x10c7f,\r
+0x10cb3, 0x10cbf,\r
+0x10cf3, 0x10cf9,\r
+0x10d28, 0x10d2f,\r
+0x10d3a, 0x10e5f,\r
+0x10e7f, 0x10eff,\r
+0x10f28, 0x10f2f,\r
+0x10f5a, 0x10fff,\r
+0x1104e, 0x11051,\r
+0x11070, 0x1107e,\r
+0x110c2, 0x110cc,\r
+0x110ce, 0x110cf,\r
+0x110e9, 0x110ef,\r
+0x110fa, 0x110ff,\r
+0x11135, 0x11135,\r
+0x11147, 0x1114f,\r
+0x11177, 0x1117f,\r
+0x111ce, 0x111cf,\r
+0x111e0, 0x111e0,\r
+0x111f5, 0x111ff,\r
+0x11212, 0x11212,\r
+0x1123f, 0x1127f,\r
+0x11287, 0x11287,\r
+0x11289, 0x11289,\r
+0x1128e, 0x1128e,\r
+0x1129e, 0x1129e,\r
+0x112aa, 0x112af,\r
+0x112eb, 0x112ef,\r
+0x112fa, 0x112ff,\r
+0x11304, 0x11304,\r
+0x1130d, 0x1130e,\r
+0x11311, 0x11312,\r
+0x11329, 0x11329,\r
+0x11331, 0x11331,\r
+0x11334, 0x11334,\r
+0x1133a, 0x1133a,\r
+0x11345, 0x11346,\r
+0x11349, 0x1134a,\r
+0x1134e, 0x1134f,\r
+0x11351, 0x11356,\r
+0x11358, 0x1135c,\r
+0x11364, 0x11365,\r
+0x1136d, 0x1136f,\r
+0x11375, 0x113ff,\r
+0x1145a, 0x1145a,\r
+0x1145c, 0x1145c,\r
+0x1145f, 0x1147f,\r
+0x114c8, 0x114cf,\r
+0x114da, 0x1157f,\r
+0x115b6, 0x115b7,\r
+0x115de, 0x115ff,\r
+0x11645, 0x1164f,\r
+0x1165a, 0x1165f,\r
+0x1166d, 0x1167f,\r
+0x116b8, 0x116bf,\r
+0x116ca, 0x116ff,\r
+0x1171b, 0x1171c,\r
+0x1172c, 0x1172f,\r
+0x11740, 0x117ff,\r
+0x1183c, 0x1189f,\r
+0x118f3, 0x118fe,\r
+0x11900, 0x119ff,\r
+0x11a48, 0x11a4f,\r
+0x11a84, 0x11a85,\r
+0x11aa3, 0x11abf,\r
+0x11af9, 0x11bff,\r
+0x11c09, 0x11c09,\r
+0x11c37, 0x11c37,\r
+0x11c46, 0x11c4f,\r
+0x11c6d, 0x11c6f,\r
+0x11c90, 0x11c91,\r
+0x11ca8, 0x11ca8,\r
+0x11cb7, 0x11cff,\r
+0x11d07, 0x11d07,\r
+0x11d0a, 0x11d0a,\r
+0x11d37, 0x11d39,\r
+0x11d3b, 0x11d3b,\r
+0x11d3e, 0x11d3e,\r
+0x11d48, 0x11d4f,\r
+0x11d5a, 0x11d5f,\r
+0x11d66, 0x11d66,\r
+0x11d69, 0x11d69,\r
+0x11d8f, 0x11d8f,\r
+0x11d92, 0x11d92,\r
+0x11d99, 0x11d9f,\r
+0x11daa, 0x11edf,\r
+0x11ef9, 0x11fff,\r
+0x1239a, 0x123ff,\r
+0x1246f, 0x1246f,\r
+0x12475, 0x1247f,\r
+0x12544, 0x12fff,\r
+0x1342f, 0x143ff,\r
+0x14647, 0x167ff,\r
+0x16a39, 0x16a3f,\r
+0x16a5f, 0x16a5f,\r
+0x16a6a, 0x16a6d,\r
+0x16a70, 0x16acf,\r
+0x16aee, 0x16aef,\r
+0x16af6, 0x16aff,\r
+0x16b46, 0x16b4f,\r
+0x16b5a, 0x16b5a,\r
+0x16b62, 0x16b62,\r
+0x16b78, 0x16b7c,\r
+0x16b90, 0x16e3f,\r
+0x16e9b, 0x16eff,\r
+0x16f45, 0x16f4f,\r
+0x16f7f, 0x16f8e,\r
+0x16fa0, 0x16fdf,\r
+0x16fe2, 0x16fff,\r
+0x187f2, 0x187ff,\r
+0x18af3, 0x1afff,\r
+0x1b11f, 0x1b16f,\r
+0x1b2fc, 0x1bbff,\r
+0x1bc6b, 0x1bc6f,\r
+0x1bc7d, 0x1bc7f,\r
+0x1bc89, 0x1bc8f,\r
+0x1bc9a, 0x1bc9b,\r
+0x1bca4, 0x1cfff,\r
+0x1d0f6, 0x1d0ff,\r
+0x1d127, 0x1d128,\r
+0x1d1e9, 0x1d1ff,\r
+0x1d246, 0x1d2df,\r
+0x1d2f4, 0x1d2ff,\r
+0x1d357, 0x1d35f,\r
+0x1d379, 0x1d3ff,\r
+0x1d455, 0x1d455,\r
+0x1d49d, 0x1d49d,\r
+0x1d4a0, 0x1d4a1,\r
+0x1d4a3, 0x1d4a4,\r
+0x1d4a7, 0x1d4a8,\r
+0x1d4ad, 0x1d4ad,\r
+0x1d4ba, 0x1d4ba,\r
+0x1d4bc, 0x1d4bc,\r
+0x1d4c4, 0x1d4c4,\r
+0x1d506, 0x1d506,\r
+0x1d50b, 0x1d50c,\r
+0x1d515, 0x1d515,\r
+0x1d51d, 0x1d51d,\r
+0x1d53a, 0x1d53a,\r
+0x1d53f, 0x1d53f,\r
+0x1d545, 0x1d545,\r
+0x1d547, 0x1d549,\r
+0x1d551, 0x1d551,\r
+0x1d6a6, 0x1d6a7,\r
+0x1d7cc, 0x1d7cd,\r
+0x1da8c, 0x1da9a,\r
+0x1daa0, 0x1daa0,\r
+0x1dab0, 0x1dfff,\r
+0x1e007, 0x1e007,\r
+0x1e019, 0x1e01a,\r
+0x1e022, 0x1e022,\r
+0x1e025, 0x1e025,\r
+0x1e02b, 0x1e7ff,\r
+0x1e8c5, 0x1e8c6,\r
+0x1e8d7, 0x1e8ff,\r
+0x1e94b, 0x1e94f,\r
+0x1e95a, 0x1e95d,\r
+0x1e960, 0x1ec70,\r
+0x1ecb5, 0x1edff,\r
+0x1ee04, 0x1ee04,\r
+0x1ee20, 0x1ee20,\r
+0x1ee23, 0x1ee23,\r
+0x1ee25, 0x1ee26,\r
+0x1ee28, 0x1ee28,\r
+0x1ee33, 0x1ee33,\r
+0x1ee38, 0x1ee38,\r
+0x1ee3a, 0x1ee3a,\r
+0x1ee3c, 0x1ee41,\r
+0x1ee43, 0x1ee46,\r
+0x1ee48, 0x1ee48,\r
+0x1ee4a, 0x1ee4a,\r
+0x1ee4c, 0x1ee4c,\r
+0x1ee50, 0x1ee50,\r
+0x1ee53, 0x1ee53,\r
+0x1ee55, 0x1ee56,\r
+0x1ee58, 0x1ee58,\r
+0x1ee5a, 0x1ee5a,\r
+0x1ee5c, 0x1ee5c,\r
+0x1ee5e, 0x1ee5e,\r
+0x1ee60, 0x1ee60,\r
+0x1ee63, 0x1ee63,\r
+0x1ee65, 0x1ee66,\r
+0x1ee6b, 0x1ee6b,\r
+0x1ee73, 0x1ee73,\r
+0x1ee78, 0x1ee78,\r
+0x1ee7d, 0x1ee7d,\r
+0x1ee7f, 0x1ee7f,\r
+0x1ee8a, 0x1ee8a,\r
+0x1ee9c, 0x1eea0,\r
+0x1eea4, 0x1eea4,\r
+0x1eeaa, 0x1eeaa,\r
+0x1eebc, 0x1eeef,\r
+0x1eef2, 0x1efff,\r
+0x1f02c, 0x1f02f,\r
+0x1f094, 0x1f09f,\r
+0x1f0af, 0x1f0b0,\r
+0x1f0c0, 0x1f0c0,\r
+0x1f0d0, 0x1f0d0,\r
+0x1f0f6, 0x1f0ff,\r
+0x1f10d, 0x1f10f,\r
+0x1f16c, 0x1f16f,\r
+0x1f1ad, 0x1f1e5,\r
+0x1f203, 0x1f20f,\r
+0x1f23c, 0x1f23f,\r
+0x1f249, 0x1f24f,\r
+0x1f252, 0x1f25f,\r
+0x1f266, 0x1f2ff,\r
+0x1f6d5, 0x1f6df,\r
+0x1f6ed, 0x1f6ef,\r
+0x1f6fa, 0x1f6ff,\r
+0x1f774, 0x1f77f,\r
+0x1f7d9, 0x1f7ff,\r
+0x1f80c, 0x1f80f,\r
+0x1f848, 0x1f84f,\r
+0x1f85a, 0x1f85f,\r
+0x1f888, 0x1f88f,\r
+0x1f8ae, 0x1f8ff,\r
+0x1f90c, 0x1f90f,\r
+0x1f93f, 0x1f93f,\r
+0x1f971, 0x1f972,\r
+0x1f977, 0x1f979,\r
+0x1f97b, 0x1f97b,\r
+0x1f9a3, 0x1f9af,\r
+0x1f9ba, 0x1f9bf,\r
+0x1f9c3, 0x1f9cf,\r
+0x1fa00, 0x1fa5f,\r
+0x1fa6e, 0x1ffff,\r
+0x2a6d7, 0x2a6ff,\r
+0x2b735, 0x2b73f,\r
+0x2b81e, 0x2b81f,\r
+0x2cea2, 0x2ceaf,\r
+0x2ebe1, 0x2f7ff,\r
+0x2fa1e, 0xe0000,\r
+0xe0002, 0xe001f,\r
+0xe0080, 0xe00ff,\r
+0xe01f0, 0xeffff,\r
+0xffffe, 0xfffff,\r
+0x10fffe, 0x10ffff,\r
+}; /* END of CR_Cn */\r
+\r
+/* PROPERTY: 'Co': General Category */\r
+static const OnigCodePoint\r
+CR_Co[] = { 3,\r
+0xe000, 0xf8ff,\r
+0xf0000, 0xffffd,\r
+0x100000, 0x10fffd,\r
+}; /* END of CR_Co */\r
+\r
+/* PROPERTY: 'Common': Script */\r
+static const OnigCodePoint\r
+CR_Common[] = { 166,\r
+0x0000, 0x0040,\r
+0x005b, 0x0060,\r
+0x007b, 0x00a9,\r
+0x00ab, 0x00b9,\r
+0x00bb, 0x00bf,\r
+0x00d7, 0x00d7,\r
+0x00f7, 0x00f7,\r
+0x02b9, 0x02df,\r
+0x02e5, 0x02e9,\r
+0x02ec, 0x02ff,\r
+0x0374, 0x0374,\r
+0x037e, 0x037e,\r
+0x0385, 0x0385,\r
+0x0387, 0x0387,\r
+0x0589, 0x0589,\r
+0x0605, 0x0605,\r
+0x060c, 0x060c,\r
+0x061b, 0x061b,\r
+0x061f, 0x061f,\r
+0x0640, 0x0640,\r
+0x06dd, 0x06dd,\r
+0x08e2, 0x08e2,\r
+0x0964, 0x0965,\r
+0x0e3f, 0x0e3f,\r
+0x0fd5, 0x0fd8,\r
+0x10fb, 0x10fb,\r
+0x16eb, 0x16ed,\r
+0x1735, 0x1736,\r
+0x1802, 0x1803,\r
+0x1805, 0x1805,\r
+0x1cd3, 0x1cd3,\r
+0x1ce1, 0x1ce1,\r
+0x1ce9, 0x1cec,\r
+0x1cee, 0x1cf3,\r
+0x1cf5, 0x1cf7,\r
+0x2000, 0x200b,\r
+0x200e, 0x2064,\r
+0x2066, 0x2070,\r
+0x2074, 0x207e,\r
+0x2080, 0x208e,\r
+0x20a0, 0x20bf,\r
+0x2100, 0x2125,\r
+0x2127, 0x2129,\r
+0x212c, 0x2131,\r
+0x2133, 0x214d,\r
+0x214f, 0x215f,\r
+0x2189, 0x218b,\r
+0x2190, 0x2426,\r
+0x2440, 0x244a,\r
+0x2460, 0x27ff,\r
+0x2900, 0x2b73,\r
+0x2b76, 0x2b95,\r
+0x2b98, 0x2bc8,\r
+0x2bca, 0x2bfe,\r
+0x2e00, 0x2e4e,\r
+0x2ff0, 0x2ffb,\r
+0x3000, 0x3004,\r
+0x3006, 0x3006,\r
+0x3008, 0x3020,\r
+0x3030, 0x3037,\r
+0x303c, 0x303f,\r
+0x309b, 0x309c,\r
+0x30a0, 0x30a0,\r
+0x30fb, 0x30fc,\r
+0x3190, 0x319f,\r
+0x31c0, 0x31e3,\r
+0x3220, 0x325f,\r
+0x327f, 0x32cf,\r
+0x3358, 0x33ff,\r
+0x4dc0, 0x4dff,\r
+0xa700, 0xa721,\r
+0xa788, 0xa78a,\r
+0xa830, 0xa839,\r
+0xa92e, 0xa92e,\r
+0xa9cf, 0xa9cf,\r
+0xab5b, 0xab5b,\r
+0xfd3e, 0xfd3f,\r
+0xfe10, 0xfe19,\r
+0xfe30, 0xfe52,\r
+0xfe54, 0xfe66,\r
+0xfe68, 0xfe6b,\r
+0xfeff, 0xfeff,\r
+0xff01, 0xff20,\r
+0xff3b, 0xff40,\r
+0xff5b, 0xff65,\r
+0xff70, 0xff70,\r
+0xff9e, 0xff9f,\r
+0xffe0, 0xffe6,\r
+0xffe8, 0xffee,\r
+0xfff9, 0xfffd,\r
+0x10100, 0x10102,\r
+0x10107, 0x10133,\r
+0x10137, 0x1013f,\r
+0x10190, 0x1019b,\r
+0x101d0, 0x101fc,\r
+0x102e1, 0x102fb,\r
+0x1bca0, 0x1bca3,\r
+0x1d000, 0x1d0f5,\r
+0x1d100, 0x1d126,\r
+0x1d129, 0x1d166,\r
+0x1d16a, 0x1d17a,\r
+0x1d183, 0x1d184,\r
+0x1d18c, 0x1d1a9,\r
+0x1d1ae, 0x1d1e8,\r
+0x1d2e0, 0x1d2f3,\r
+0x1d300, 0x1d356,\r
+0x1d360, 0x1d378,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d7cb,\r
+0x1d7ce, 0x1d7ff,\r
+0x1ec71, 0x1ecb4,\r
+0x1f000, 0x1f02b,\r
+0x1f030, 0x1f093,\r
+0x1f0a0, 0x1f0ae,\r
+0x1f0b1, 0x1f0bf,\r
+0x1f0c1, 0x1f0cf,\r
+0x1f0d1, 0x1f0f5,\r
+0x1f100, 0x1f10c,\r
+0x1f110, 0x1f16b,\r
+0x1f170, 0x1f1ac,\r
+0x1f1e6, 0x1f1ff,\r
+0x1f201, 0x1f202,\r
+0x1f210, 0x1f23b,\r
+0x1f240, 0x1f248,\r
+0x1f250, 0x1f251,\r
+0x1f260, 0x1f265,\r
+0x1f300, 0x1f6d4,\r
+0x1f6e0, 0x1f6ec,\r
+0x1f6f0, 0x1f6f9,\r
+0x1f700, 0x1f773,\r
+0x1f780, 0x1f7d8,\r
+0x1f800, 0x1f80b,\r
+0x1f810, 0x1f847,\r
+0x1f850, 0x1f859,\r
+0x1f860, 0x1f887,\r
+0x1f890, 0x1f8ad,\r
+0x1f900, 0x1f90b,\r
+0x1f910, 0x1f93e,\r
+0x1f940, 0x1f970,\r
+0x1f973, 0x1f976,\r
+0x1f97a, 0x1f97a,\r
+0x1f97c, 0x1f9a2,\r
+0x1f9b0, 0x1f9b9,\r
+0x1f9c0, 0x1f9c2,\r
+0x1f9d0, 0x1f9ff,\r
+0x1fa60, 0x1fa6d,\r
+0xe0001, 0xe0001,\r
+0xe0020, 0xe007f,\r
+}; /* END of CR_Common */\r
+\r
+/* PROPERTY: 'Coptic': Script */\r
+static const OnigCodePoint\r
+CR_Coptic[] = { 3,\r
+0x03e2, 0x03ef,\r
+0x2c80, 0x2cf3,\r
+0x2cf9, 0x2cff,\r
+}; /* END of CR_Coptic */\r
+\r
+/* PROPERTY: 'Cs': General Category */\r
+static const OnigCodePoint\r
+CR_Cs[] = { 1,\r
+0xd800, 0xdfff,\r
+}; /* END of CR_Cs */\r
+\r
+/* PROPERTY: 'Cuneiform': Script */\r
+static const OnigCodePoint\r
+CR_Cuneiform[] = { 4,\r
+0x12000, 0x12399,\r
+0x12400, 0x1246e,\r
+0x12470, 0x12474,\r
+0x12480, 0x12543,\r
+}; /* END of CR_Cuneiform */\r
+\r
+/* PROPERTY: 'Cypriot': Script */\r
+static const OnigCodePoint\r
+CR_Cypriot[] = { 6,\r
+0x10800, 0x10805,\r
+0x10808, 0x10808,\r
+0x1080a, 0x10835,\r
+0x10837, 0x10838,\r
+0x1083c, 0x1083c,\r
+0x1083f, 0x1083f,\r
+}; /* END of CR_Cypriot */\r
+\r
+/* PROPERTY: 'Cyrillic': Script */\r
+static const OnigCodePoint\r
+CR_Cyrillic[] = { 8,\r
+0x0400, 0x0484,\r
+0x0487, 0x052f,\r
+0x1c80, 0x1c88,\r
+0x1d2b, 0x1d2b,\r
+0x1d78, 0x1d78,\r
+0x2de0, 0x2dff,\r
+0xa640, 0xa69f,\r
+0xfe2e, 0xfe2f,\r
+}; /* END of CR_Cyrillic */\r
+\r
+/* PROPERTY: 'Dash': Binary Property */\r
+static const OnigCodePoint\r
+CR_Dash[] = { 21,\r
+0x002d, 0x002d,\r
+0x058a, 0x058a,\r
+0x05be, 0x05be,\r
+0x1400, 0x1400,\r
+0x1806, 0x1806,\r
+0x2010, 0x2015,\r
+0x2053, 0x2053,\r
+0x207b, 0x207b,\r
+0x208b, 0x208b,\r
+0x2212, 0x2212,\r
+0x2e17, 0x2e17,\r
+0x2e1a, 0x2e1a,\r
+0x2e3a, 0x2e3b,\r
+0x2e40, 0x2e40,\r
+0x301c, 0x301c,\r
+0x3030, 0x3030,\r
+0x30a0, 0x30a0,\r
+0xfe31, 0xfe32,\r
+0xfe58, 0xfe58,\r
+0xfe63, 0xfe63,\r
+0xff0d, 0xff0d,\r
+}; /* END of CR_Dash */\r
+\r
+/* PROPERTY: 'Default_Ignorable_Code_Point': Derived Property */\r
+static const OnigCodePoint\r
+CR_Default_Ignorable_Code_Point[] = { 17,\r
+0x00ad, 0x00ad,\r
+0x034f, 0x034f,\r
+0x061c, 0x061c,\r
+0x115f, 0x1160,\r
+0x17b4, 0x17b5,\r
+0x180b, 0x180e,\r
+0x200b, 0x200f,\r
+0x202a, 0x202e,\r
+0x2060, 0x206f,\r
+0x3164, 0x3164,\r
+0xfe00, 0xfe0f,\r
+0xfeff, 0xfeff,\r
+0xffa0, 0xffa0,\r
+0xfff0, 0xfff8,\r
+0x1bca0, 0x1bca3,\r
+0x1d173, 0x1d17a,\r
+0xe0000, 0xe0fff,\r
+}; /* END of CR_Default_Ignorable_Code_Point */\r
+\r
+/* PROPERTY: 'Deprecated': Binary Property */\r
+static const OnigCodePoint\r
+CR_Deprecated[] = { 8,\r
+0x0149, 0x0149,\r
+0x0673, 0x0673,\r
+0x0f77, 0x0f77,\r
+0x0f79, 0x0f79,\r
+0x17a3, 0x17a4,\r
+0x206a, 0x206f,\r
+0x2329, 0x232a,\r
+0xe0001, 0xe0001,\r
+}; /* END of CR_Deprecated */\r
+\r
+/* PROPERTY: 'Deseret': Script */\r
+static const OnigCodePoint\r
+CR_Deseret[] = { 1,\r
+0x10400, 0x1044f,\r
+}; /* END of CR_Deseret */\r
+\r
+/* PROPERTY: 'Devanagari': Script */\r
+static const OnigCodePoint\r
+CR_Devanagari[] = { 4,\r
+0x0900, 0x0950,\r
+0x0953, 0x0963,\r
+0x0966, 0x097f,\r
+0xa8e0, 0xa8ff,\r
+}; /* END of CR_Devanagari */\r
+\r
+/* PROPERTY: 'Diacritic': Binary Property */\r
+static const OnigCodePoint\r
+CR_Diacritic[] = { 163,\r
+0x005e, 0x005e,\r
+0x0060, 0x0060,\r
+0x00a8, 0x00a8,\r
+0x00af, 0x00af,\r
+0x00b4, 0x00b4,\r
+0x00b7, 0x00b8,\r
+0x02b0, 0x034e,\r
+0x0350, 0x0357,\r
+0x035d, 0x0362,\r
+0x0374, 0x0375,\r
+0x037a, 0x037a,\r
+0x0384, 0x0385,\r
+0x0483, 0x0487,\r
+0x0559, 0x0559,\r
+0x0591, 0x05a1,\r
+0x05a3, 0x05bd,\r
+0x05bf, 0x05bf,\r
+0x05c1, 0x05c2,\r
+0x05c4, 0x05c4,\r
+0x064b, 0x0652,\r
+0x0657, 0x0658,\r
+0x06df, 0x06e0,\r
+0x06e5, 0x06e6,\r
+0x06ea, 0x06ec,\r
+0x0730, 0x074a,\r
+0x07a6, 0x07b0,\r
+0x07eb, 0x07f5,\r
+0x0818, 0x0819,\r
+0x08e3, 0x08fe,\r
+0x093c, 0x093c,\r
+0x094d, 0x094d,\r
+0x0951, 0x0954,\r
+0x0971, 0x0971,\r
+0x09bc, 0x09bc,\r
+0x09cd, 0x09cd,\r
+0x0a3c, 0x0a3c,\r
+0x0a4d, 0x0a4d,\r
+0x0abc, 0x0abc,\r
+0x0acd, 0x0acd,\r
+0x0afd, 0x0aff,\r
+0x0b3c, 0x0b3c,\r
+0x0b4d, 0x0b4d,\r
+0x0bcd, 0x0bcd,\r
+0x0c4d, 0x0c4d,\r
+0x0cbc, 0x0cbc,\r
+0x0ccd, 0x0ccd,\r
+0x0d3b, 0x0d3c,\r
+0x0d4d, 0x0d4d,\r
+0x0dca, 0x0dca,\r
+0x0e47, 0x0e4c,\r
+0x0e4e, 0x0e4e,\r
+0x0ec8, 0x0ecc,\r
+0x0f18, 0x0f19,\r
+0x0f35, 0x0f35,\r
+0x0f37, 0x0f37,\r
+0x0f39, 0x0f39,\r
+0x0f3e, 0x0f3f,\r
+0x0f82, 0x0f84,\r
+0x0f86, 0x0f87,\r
+0x0fc6, 0x0fc6,\r
+0x1037, 0x1037,\r
+0x1039, 0x103a,\r
+0x1087, 0x108d,\r
+0x108f, 0x108f,\r
+0x109a, 0x109b,\r
+0x17c9, 0x17d3,\r
+0x17dd, 0x17dd,\r
+0x1939, 0x193b,\r
+0x1a75, 0x1a7c,\r
+0x1a7f, 0x1a7f,\r
+0x1ab0, 0x1abd,\r
+0x1b34, 0x1b34,\r
+0x1b44, 0x1b44,\r
+0x1b6b, 0x1b73,\r
+0x1baa, 0x1bab,\r
+0x1c36, 0x1c37,\r
+0x1c78, 0x1c7d,\r
+0x1cd0, 0x1ce8,\r
+0x1ced, 0x1ced,\r
+0x1cf4, 0x1cf4,\r
+0x1cf7, 0x1cf9,\r
+0x1d2c, 0x1d6a,\r
+0x1dc4, 0x1dcf,\r
+0x1df5, 0x1df9,\r
+0x1dfd, 0x1dff,\r
+0x1fbd, 0x1fbd,\r
+0x1fbf, 0x1fc1,\r
+0x1fcd, 0x1fcf,\r
+0x1fdd, 0x1fdf,\r
+0x1fed, 0x1fef,\r
+0x1ffd, 0x1ffe,\r
+0x2cef, 0x2cf1,\r
+0x2e2f, 0x2e2f,\r
+0x302a, 0x302f,\r
+0x3099, 0x309c,\r
+0x30fc, 0x30fc,\r
+0xa66f, 0xa66f,\r
+0xa67c, 0xa67d,\r
+0xa67f, 0xa67f,\r
+0xa69c, 0xa69d,\r
+0xa6f0, 0xa6f1,\r
+0xa717, 0xa721,\r
+0xa788, 0xa788,\r
+0xa7f8, 0xa7f9,\r
+0xa8c4, 0xa8c4,\r
+0xa8e0, 0xa8f1,\r
+0xa92b, 0xa92e,\r
+0xa953, 0xa953,\r
+0xa9b3, 0xa9b3,\r
+0xa9c0, 0xa9c0,\r
+0xa9e5, 0xa9e5,\r
+0xaa7b, 0xaa7d,\r
+0xaabf, 0xaac2,\r
+0xaaf6, 0xaaf6,\r
+0xab5b, 0xab5f,\r
+0xabec, 0xabed,\r
+0xfb1e, 0xfb1e,\r
+0xfe20, 0xfe2f,\r
+0xff3e, 0xff3e,\r
+0xff40, 0xff40,\r
+0xff70, 0xff70,\r
+0xff9e, 0xff9f,\r
+0xffe3, 0xffe3,\r
+0x102e0, 0x102e0,\r
+0x10ae5, 0x10ae6,\r
+0x10d22, 0x10d27,\r
+0x10f46, 0x10f50,\r
+0x110b9, 0x110ba,\r
+0x11133, 0x11134,\r
+0x11173, 0x11173,\r
+0x111c0, 0x111c0,\r
+0x111ca, 0x111cc,\r
+0x11235, 0x11236,\r
+0x112e9, 0x112ea,\r
+0x1133c, 0x1133c,\r
+0x1134d, 0x1134d,\r
+0x11366, 0x1136c,\r
+0x11370, 0x11374,\r
+0x11442, 0x11442,\r
+0x11446, 0x11446,\r
+0x114c2, 0x114c3,\r
+0x115bf, 0x115c0,\r
+0x1163f, 0x1163f,\r
+0x116b6, 0x116b7,\r
+0x1172b, 0x1172b,\r
+0x11839, 0x1183a,\r
+0x11a34, 0x11a34,\r
+0x11a47, 0x11a47,\r
+0x11a99, 0x11a99,\r
+0x11c3f, 0x11c3f,\r
+0x11d42, 0x11d42,\r
+0x11d44, 0x11d45,\r
+0x11d97, 0x11d97,\r
+0x16af0, 0x16af4,\r
+0x16f8f, 0x16f9f,\r
+0x1d167, 0x1d169,\r
+0x1d16d, 0x1d172,\r
+0x1d17b, 0x1d182,\r
+0x1d185, 0x1d18b,\r
+0x1d1aa, 0x1d1ad,\r
+0x1e8d0, 0x1e8d6,\r
+0x1e944, 0x1e946,\r
+0x1e948, 0x1e94a,\r
+}; /* END of CR_Diacritic */\r
+\r
+/* PROPERTY: 'Dogra': Script */\r
+static const OnigCodePoint\r
+CR_Dogra[] = { 1,\r
+0x11800, 0x1183b,\r
+}; /* END of CR_Dogra */\r
+\r
+/* PROPERTY: 'Duployan': Script */\r
+static const OnigCodePoint\r
+CR_Duployan[] = { 5,\r
+0x1bc00, 0x1bc6a,\r
+0x1bc70, 0x1bc7c,\r
+0x1bc80, 0x1bc88,\r
+0x1bc90, 0x1bc99,\r
+0x1bc9c, 0x1bc9f,\r
+}; /* END of CR_Duployan */\r
+\r
+/* PROPERTY: 'Egyptian_Hieroglyphs': Script */\r
+static const OnigCodePoint\r
+CR_Egyptian_Hieroglyphs[] = { 1,\r
+0x13000, 0x1342e,\r
+}; /* END of CR_Egyptian_Hieroglyphs */\r
+\r
+/* PROPERTY: 'Elbasan': Script */\r
+static const OnigCodePoint\r
+CR_Elbasan[] = { 1,\r
+0x10500, 0x10527,\r
+}; /* END of CR_Elbasan */\r
+\r
+/* PROPERTY: 'Emoji': Emoji Property */\r
+static const OnigCodePoint\r
+CR_Emoji[] = { 147,\r
+0x0023, 0x0023,\r
+0x002a, 0x002a,\r
+0x0030, 0x0039,\r
+0x00a9, 0x00a9,\r
+0x00ae, 0x00ae,\r
+0x203c, 0x203c,\r
+0x2049, 0x2049,\r
+0x2122, 0x2122,\r
+0x2139, 0x2139,\r
+0x2194, 0x2199,\r
+0x21a9, 0x21aa,\r
+0x231a, 0x231b,\r
+0x2328, 0x2328,\r
+0x23cf, 0x23cf,\r
+0x23e9, 0x23f3,\r
+0x23f8, 0x23fa,\r
+0x24c2, 0x24c2,\r
+0x25aa, 0x25ab,\r
+0x25b6, 0x25b6,\r
+0x25c0, 0x25c0,\r
+0x25fb, 0x25fe,\r
+0x2600, 0x2604,\r
+0x260e, 0x260e,\r
+0x2611, 0x2611,\r
+0x2614, 0x2615,\r
+0x2618, 0x2618,\r
+0x261d, 0x261d,\r
+0x2620, 0x2620,\r
+0x2622, 0x2623,\r
+0x2626, 0x2626,\r
+0x262a, 0x262a,\r
+0x262e, 0x262f,\r
+0x2638, 0x263a,\r
+0x2640, 0x2640,\r
+0x2642, 0x2642,\r
+0x2648, 0x2653,\r
+0x265f, 0x2660,\r
+0x2663, 0x2663,\r
+0x2665, 0x2666,\r
+0x2668, 0x2668,\r
+0x267b, 0x267b,\r
+0x267e, 0x267f,\r
+0x2692, 0x2697,\r
+0x2699, 0x2699,\r
+0x269b, 0x269c,\r
+0x26a0, 0x26a1,\r
+0x26aa, 0x26ab,\r
+0x26b0, 0x26b1,\r
+0x26bd, 0x26be,\r
+0x26c4, 0x26c5,\r
+0x26c8, 0x26c8,\r
+0x26ce, 0x26cf,\r
+0x26d1, 0x26d1,\r
+0x26d3, 0x26d4,\r
+0x26e9, 0x26ea,\r
+0x26f0, 0x26f5,\r
+0x26f7, 0x26fa,\r
+0x26fd, 0x26fd,\r
+0x2702, 0x2702,\r
+0x2705, 0x2705,\r
+0x2708, 0x270d,\r
+0x270f, 0x270f,\r
+0x2712, 0x2712,\r
+0x2714, 0x2714,\r
+0x2716, 0x2716,\r
+0x271d, 0x271d,\r
+0x2721, 0x2721,\r
+0x2728, 0x2728,\r
+0x2733, 0x2734,\r
+0x2744, 0x2744,\r
+0x2747, 0x2747,\r
+0x274c, 0x274c,\r
+0x274e, 0x274e,\r
+0x2753, 0x2755,\r
+0x2757, 0x2757,\r
+0x2763, 0x2764,\r
+0x2795, 0x2797,\r
+0x27a1, 0x27a1,\r
+0x27b0, 0x27b0,\r
+0x27bf, 0x27bf,\r
+0x2934, 0x2935,\r
+0x2b05, 0x2b07,\r
+0x2b1b, 0x2b1c,\r
+0x2b50, 0x2b50,\r
+0x2b55, 0x2b55,\r
+0x3030, 0x3030,\r
+0x303d, 0x303d,\r
+0x3297, 0x3297,\r
+0x3299, 0x3299,\r
+0x1f004, 0x1f004,\r
+0x1f0cf, 0x1f0cf,\r
+0x1f170, 0x1f171,\r
+0x1f17e, 0x1f17f,\r
+0x1f18e, 0x1f18e,\r
+0x1f191, 0x1f19a,\r
+0x1f1e6, 0x1f1ff,\r
+0x1f201, 0x1f202,\r
+0x1f21a, 0x1f21a,\r
+0x1f22f, 0x1f22f,\r
+0x1f232, 0x1f23a,\r
+0x1f250, 0x1f251,\r
+0x1f300, 0x1f321,\r
+0x1f324, 0x1f393,\r
+0x1f396, 0x1f397,\r
+0x1f399, 0x1f39b,\r
+0x1f39e, 0x1f3f0,\r
+0x1f3f3, 0x1f3f5,\r
+0x1f3f7, 0x1f4fd,\r
+0x1f4ff, 0x1f53d,\r
+0x1f549, 0x1f54e,\r
+0x1f550, 0x1f567,\r
+0x1f56f, 0x1f570,\r
+0x1f573, 0x1f57a,\r
+0x1f587, 0x1f587,\r
+0x1f58a, 0x1f58d,\r
+0x1f590, 0x1f590,\r
+0x1f595, 0x1f596,\r
+0x1f5a4, 0x1f5a5,\r
+0x1f5a8, 0x1f5a8,\r
+0x1f5b1, 0x1f5b2,\r
+0x1f5bc, 0x1f5bc,\r
+0x1f5c2, 0x1f5c4,\r
+0x1f5d1, 0x1f5d3,\r
+0x1f5dc, 0x1f5de,\r
+0x1f5e1, 0x1f5e1,\r
+0x1f5e3, 0x1f5e3,\r
+0x1f5e8, 0x1f5e8,\r
+0x1f5ef, 0x1f5ef,\r
+0x1f5f3, 0x1f5f3,\r
+0x1f5fa, 0x1f64f,\r
+0x1f680, 0x1f6c5,\r
+0x1f6cb, 0x1f6d2,\r
+0x1f6e0, 0x1f6e5,\r
+0x1f6e9, 0x1f6e9,\r
+0x1f6eb, 0x1f6ec,\r
+0x1f6f0, 0x1f6f0,\r
+0x1f6f3, 0x1f6f9,\r
+0x1f910, 0x1f93a,\r
+0x1f93c, 0x1f93e,\r
+0x1f940, 0x1f945,\r
+0x1f947, 0x1f970,\r
+0x1f973, 0x1f976,\r
+0x1f97a, 0x1f97a,\r
+0x1f97c, 0x1f9a2,\r
+0x1f9b0, 0x1f9b9,\r
+0x1f9c0, 0x1f9c2,\r
+0x1f9d0, 0x1f9ff,\r
+}; /* END of CR_Emoji */\r
+\r
+/* PROPERTY: 'Emoji_Component': Emoji Property */\r
+static const OnigCodePoint\r
+CR_Emoji_Component[] = { 10,\r
+0x0023, 0x0023,\r
+0x002a, 0x002a,\r
+0x0030, 0x0039,\r
+0x200d, 0x200d,\r
+0x20e3, 0x20e3,\r
+0xfe0f, 0xfe0f,\r
+0x1f1e6, 0x1f1ff,\r
+0x1f3fb, 0x1f3ff,\r
+0x1f9b0, 0x1f9b3,\r
+0xe0020, 0xe007f,\r
+}; /* END of CR_Emoji_Component */\r
+\r
+/* PROPERTY: 'Emoji_Modifier': Emoji Property */\r
+static const OnigCodePoint\r
+CR_Emoji_Modifier[] = { 1,\r
+0x1f3fb, 0x1f3ff,\r
+}; /* END of CR_Emoji_Modifier */\r
+\r
+/* PROPERTY: 'Emoji_Modifier_Base': Emoji Property */\r
+static const OnigCodePoint\r
+CR_Emoji_Modifier_Base[] = { 34,\r
+0x261d, 0x261d,\r
+0x26f9, 0x26f9,\r
+0x270a, 0x270d,\r
+0x1f385, 0x1f385,\r
+0x1f3c2, 0x1f3c4,\r
+0x1f3c7, 0x1f3c7,\r
+0x1f3ca, 0x1f3cc,\r
+0x1f442, 0x1f443,\r
+0x1f446, 0x1f450,\r
+0x1f466, 0x1f469,\r
+0x1f46e, 0x1f46e,\r
+0x1f470, 0x1f478,\r
+0x1f47c, 0x1f47c,\r
+0x1f481, 0x1f483,\r
+0x1f485, 0x1f487,\r
+0x1f4aa, 0x1f4aa,\r
+0x1f574, 0x1f575,\r
+0x1f57a, 0x1f57a,\r
+0x1f590, 0x1f590,\r
+0x1f595, 0x1f596,\r
+0x1f645, 0x1f647,\r
+0x1f64b, 0x1f64f,\r
+0x1f6a3, 0x1f6a3,\r
+0x1f6b4, 0x1f6b6,\r
+0x1f6c0, 0x1f6c0,\r
+0x1f6cc, 0x1f6cc,\r
+0x1f918, 0x1f91c,\r
+0x1f91e, 0x1f91f,\r
+0x1f926, 0x1f926,\r
+0x1f930, 0x1f939,\r
+0x1f93d, 0x1f93e,\r
+0x1f9b5, 0x1f9b6,\r
+0x1f9b8, 0x1f9b9,\r
+0x1f9d1, 0x1f9dd,\r
+}; /* END of CR_Emoji_Modifier_Base */\r
+\r
+/* PROPERTY: 'Emoji_Presentation': Emoji Property */\r
+static const OnigCodePoint\r
+CR_Emoji_Presentation[] = { 77,\r
+0x231a, 0x231b,\r
+0x23e9, 0x23ec,\r
+0x23f0, 0x23f0,\r
+0x23f3, 0x23f3,\r
+0x25fd, 0x25fe,\r
+0x2614, 0x2615,\r
+0x2648, 0x2653,\r
+0x267f, 0x267f,\r
+0x2693, 0x2693,\r
+0x26a1, 0x26a1,\r
+0x26aa, 0x26ab,\r
+0x26bd, 0x26be,\r
+0x26c4, 0x26c5,\r
+0x26ce, 0x26ce,\r
+0x26d4, 0x26d4,\r
+0x26ea, 0x26ea,\r
+0x26f2, 0x26f3,\r
+0x26f5, 0x26f5,\r
+0x26fa, 0x26fa,\r
+0x26fd, 0x26fd,\r
+0x2705, 0x2705,\r
+0x270a, 0x270b,\r
+0x2728, 0x2728,\r
+0x274c, 0x274c,\r
+0x274e, 0x274e,\r
+0x2753, 0x2755,\r
+0x2757, 0x2757,\r
+0x2795, 0x2797,\r
+0x27b0, 0x27b0,\r
+0x27bf, 0x27bf,\r
+0x2b1b, 0x2b1c,\r
+0x2b50, 0x2b50,\r
+0x2b55, 0x2b55,\r
+0x1f004, 0x1f004,\r
+0x1f0cf, 0x1f0cf,\r
+0x1f18e, 0x1f18e,\r
+0x1f191, 0x1f19a,\r
+0x1f1e6, 0x1f1ff,\r
+0x1f201, 0x1f201,\r
+0x1f21a, 0x1f21a,\r
+0x1f22f, 0x1f22f,\r
+0x1f232, 0x1f236,\r
+0x1f238, 0x1f23a,\r
+0x1f250, 0x1f251,\r
+0x1f300, 0x1f320,\r
+0x1f32d, 0x1f335,\r
+0x1f337, 0x1f37c,\r
+0x1f37e, 0x1f393,\r
+0x1f3a0, 0x1f3ca,\r
+0x1f3cf, 0x1f3d3,\r
+0x1f3e0, 0x1f3f0,\r
+0x1f3f4, 0x1f3f4,\r
+0x1f3f8, 0x1f43e,\r
+0x1f440, 0x1f440,\r
+0x1f442, 0x1f4fc,\r
+0x1f4ff, 0x1f53d,\r
+0x1f54b, 0x1f54e,\r
+0x1f550, 0x1f567,\r
+0x1f57a, 0x1f57a,\r
+0x1f595, 0x1f596,\r
+0x1f5a4, 0x1f5a4,\r
+0x1f5fb, 0x1f64f,\r
+0x1f680, 0x1f6c5,\r
+0x1f6cc, 0x1f6cc,\r
+0x1f6d0, 0x1f6d2,\r
+0x1f6eb, 0x1f6ec,\r
+0x1f6f4, 0x1f6f9,\r
+0x1f910, 0x1f93a,\r
+0x1f93c, 0x1f93e,\r
+0x1f940, 0x1f945,\r
+0x1f947, 0x1f970,\r
+0x1f973, 0x1f976,\r
+0x1f97a, 0x1f97a,\r
+0x1f97c, 0x1f9a2,\r
+0x1f9b0, 0x1f9b9,\r
+0x1f9c0, 0x1f9c2,\r
+0x1f9d0, 0x1f9ff,\r
+}; /* END of CR_Emoji_Presentation */\r
+\r
+/* PROPERTY: 'Ethiopic': Script */\r
+static const OnigCodePoint\r
+CR_Ethiopic[] = { 32,\r
+0x1200, 0x1248,\r
+0x124a, 0x124d,\r
+0x1250, 0x1256,\r
+0x1258, 0x1258,\r
+0x125a, 0x125d,\r
+0x1260, 0x1288,\r
+0x128a, 0x128d,\r
+0x1290, 0x12b0,\r
+0x12b2, 0x12b5,\r
+0x12b8, 0x12be,\r
+0x12c0, 0x12c0,\r
+0x12c2, 0x12c5,\r
+0x12c8, 0x12d6,\r
+0x12d8, 0x1310,\r
+0x1312, 0x1315,\r
+0x1318, 0x135a,\r
+0x135d, 0x137c,\r
+0x1380, 0x1399,\r
+0x2d80, 0x2d96,\r
+0x2da0, 0x2da6,\r
+0x2da8, 0x2dae,\r
+0x2db0, 0x2db6,\r
+0x2db8, 0x2dbe,\r
+0x2dc0, 0x2dc6,\r
+0x2dc8, 0x2dce,\r
+0x2dd0, 0x2dd6,\r
+0x2dd8, 0x2dde,\r
+0xab01, 0xab06,\r
+0xab09, 0xab0e,\r
+0xab11, 0xab16,\r
+0xab20, 0xab26,\r
+0xab28, 0xab2e,\r
+}; /* END of CR_Ethiopic */\r
+\r
+/* PROPERTY: 'Extended_Pictographic': Emoji Property */\r
+static const OnigCodePoint\r
+CR_Extended_Pictographic[] = { 77,\r
+0x00a9, 0x00a9,\r
+0x00ae, 0x00ae,\r
+0x203c, 0x203c,\r
+0x2049, 0x2049,\r
+0x2122, 0x2122,\r
+0x2139, 0x2139,\r
+0x2194, 0x2199,\r
+0x21a9, 0x21aa,\r
+0x231a, 0x231b,\r
+0x2328, 0x2328,\r
+0x2388, 0x2388,\r
+0x23cf, 0x23cf,\r
+0x23e9, 0x23f3,\r
+0x23f8, 0x23fa,\r
+0x24c2, 0x24c2,\r
+0x25aa, 0x25ab,\r
+0x25b6, 0x25b6,\r
+0x25c0, 0x25c0,\r
+0x25fb, 0x25fe,\r
+0x2600, 0x2605,\r
+0x2607, 0x2612,\r
+0x2614, 0x2685,\r
+0x2690, 0x2705,\r
+0x2708, 0x2712,\r
+0x2714, 0x2714,\r
+0x2716, 0x2716,\r
+0x271d, 0x271d,\r
+0x2721, 0x2721,\r
+0x2728, 0x2728,\r
+0x2733, 0x2734,\r
+0x2744, 0x2744,\r
+0x2747, 0x2747,\r
+0x274c, 0x274c,\r
+0x274e, 0x274e,\r
+0x2753, 0x2755,\r
+0x2757, 0x2757,\r
+0x2763, 0x2767,\r
+0x2795, 0x2797,\r
+0x27a1, 0x27a1,\r
+0x27b0, 0x27b0,\r
+0x27bf, 0x27bf,\r
+0x2934, 0x2935,\r
+0x2b05, 0x2b07,\r
+0x2b1b, 0x2b1c,\r
+0x2b50, 0x2b50,\r
+0x2b55, 0x2b55,\r
+0x3030, 0x3030,\r
+0x303d, 0x303d,\r
+0x3297, 0x3297,\r
+0x3299, 0x3299,\r
+0x1f000, 0x1f0ff,\r
+0x1f10d, 0x1f10f,\r
+0x1f12f, 0x1f12f,\r
+0x1f16c, 0x1f171,\r
+0x1f17e, 0x1f17f,\r
+0x1f18e, 0x1f18e,\r
+0x1f191, 0x1f19a,\r
+0x1f1ad, 0x1f1e5,\r
+0x1f201, 0x1f20f,\r
+0x1f21a, 0x1f21a,\r
+0x1f22f, 0x1f22f,\r
+0x1f232, 0x1f23a,\r
+0x1f23c, 0x1f23f,\r
+0x1f249, 0x1f3fa,\r
+0x1f400, 0x1f53d,\r
+0x1f546, 0x1f64f,\r
+0x1f680, 0x1f6ff,\r
+0x1f774, 0x1f77f,\r
+0x1f7d5, 0x1f7ff,\r
+0x1f80c, 0x1f80f,\r
+0x1f848, 0x1f84f,\r
+0x1f85a, 0x1f85f,\r
+0x1f888, 0x1f88f,\r
+0x1f8ae, 0x1f8ff,\r
+0x1f90c, 0x1f93a,\r
+0x1f93c, 0x1f945,\r
+0x1f947, 0x1fffd,\r
+}; /* END of CR_Extended_Pictographic */\r
+\r
+/* PROPERTY: 'Extender': Binary Property */\r
+static const OnigCodePoint\r
+CR_Extender[] = { 29,\r
+0x00b7, 0x00b7,\r
+0x02d0, 0x02d1,\r
+0x0640, 0x0640,\r
+0x07fa, 0x07fa,\r
+0x0e46, 0x0e46,\r
+0x0ec6, 0x0ec6,\r
+0x180a, 0x180a,\r
+0x1843, 0x1843,\r
+0x1aa7, 0x1aa7,\r
+0x1c36, 0x1c36,\r
+0x1c7b, 0x1c7b,\r
+0x3005, 0x3005,\r
+0x3031, 0x3035,\r
+0x309d, 0x309e,\r
+0x30fc, 0x30fe,\r
+0xa015, 0xa015,\r
+0xa60c, 0xa60c,\r
+0xa9cf, 0xa9cf,\r
+0xa9e6, 0xa9e6,\r
+0xaa70, 0xaa70,\r
+0xaadd, 0xaadd,\r
+0xaaf3, 0xaaf4,\r
+0xff70, 0xff70,\r
+0x1135d, 0x1135d,\r
+0x115c6, 0x115c8,\r
+0x11a98, 0x11a98,\r
+0x16b42, 0x16b43,\r
+0x16fe0, 0x16fe1,\r
+0x1e944, 0x1e946,\r
+}; /* END of CR_Extender */\r
+\r
+/* PROPERTY: 'Georgian': Script */\r
+static const OnigCodePoint\r
+CR_Georgian[] = { 10,\r
+0x10a0, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x10fa,\r
+0x10fc, 0x10ff,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cbf,\r
+0x2d00, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+}; /* END of CR_Georgian */\r
+\r
+/* PROPERTY: 'Glagolitic': Script */\r
+static const OnigCodePoint\r
+CR_Glagolitic[] = { 7,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x1e000, 0x1e006,\r
+0x1e008, 0x1e018,\r
+0x1e01b, 0x1e021,\r
+0x1e023, 0x1e024,\r
+0x1e026, 0x1e02a,\r
+}; /* END of CR_Glagolitic */\r
+\r
+/* PROPERTY: 'Gothic': Script */\r
+static const OnigCodePoint\r
+CR_Gothic[] = { 1,\r
+0x10330, 0x1034a,\r
+}; /* END of CR_Gothic */\r
+\r
+/* PROPERTY: 'Grantha': Script */\r
+static const OnigCodePoint\r
+CR_Grantha[] = { 15,\r
+0x11300, 0x11303,\r
+0x11305, 0x1130c,\r
+0x1130f, 0x11310,\r
+0x11313, 0x11328,\r
+0x1132a, 0x11330,\r
+0x11332, 0x11333,\r
+0x11335, 0x11339,\r
+0x1133c, 0x11344,\r
+0x11347, 0x11348,\r
+0x1134b, 0x1134d,\r
+0x11350, 0x11350,\r
+0x11357, 0x11357,\r
+0x1135d, 0x11363,\r
+0x11366, 0x1136c,\r
+0x11370, 0x11374,\r
+}; /* END of CR_Grantha */\r
+\r
+/* PROPERTY: 'Grapheme_Base': Derived Property */\r
+static const OnigCodePoint\r
+CR_Grapheme_Base[] = { 806,\r
+0x0020, 0x007e,\r
+0x00a0, 0x00ac,\r
+0x00ae, 0x02ff,\r
+0x0370, 0x0377,\r
+0x037a, 0x037f,\r
+0x0384, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x0482,\r
+0x048a, 0x052f,\r
+0x0531, 0x0556,\r
+0x0559, 0x058a,\r
+0x058d, 0x058f,\r
+0x05be, 0x05be,\r
+0x05c0, 0x05c0,\r
+0x05c3, 0x05c3,\r
+0x05c6, 0x05c6,\r
+0x05d0, 0x05ea,\r
+0x05ef, 0x05f4,\r
+0x0606, 0x060f,\r
+0x061b, 0x061b,\r
+0x061e, 0x064a,\r
+0x0660, 0x066f,\r
+0x0671, 0x06d5,\r
+0x06de, 0x06de,\r
+0x06e5, 0x06e6,\r
+0x06e9, 0x06e9,\r
+0x06ee, 0x070d,\r
+0x0710, 0x0710,\r
+0x0712, 0x072f,\r
+0x074d, 0x07a5,\r
+0x07b1, 0x07b1,\r
+0x07c0, 0x07ea,\r
+0x07f4, 0x07fa,\r
+0x07fe, 0x0815,\r
+0x081a, 0x081a,\r
+0x0824, 0x0824,\r
+0x0828, 0x0828,\r
+0x0830, 0x083e,\r
+0x0840, 0x0858,\r
+0x085e, 0x085e,\r
+0x0860, 0x086a,\r
+0x08a0, 0x08b4,\r
+0x08b6, 0x08bd,\r
+0x0903, 0x0939,\r
+0x093b, 0x093b,\r
+0x093d, 0x0940,\r
+0x0949, 0x094c,\r
+0x094e, 0x0950,\r
+0x0958, 0x0961,\r
+0x0964, 0x0980,\r
+0x0982, 0x0983,\r
+0x0985, 0x098c,\r
+0x098f, 0x0990,\r
+0x0993, 0x09a8,\r
+0x09aa, 0x09b0,\r
+0x09b2, 0x09b2,\r
+0x09b6, 0x09b9,\r
+0x09bd, 0x09bd,\r
+0x09bf, 0x09c0,\r
+0x09c7, 0x09c8,\r
+0x09cb, 0x09cc,\r
+0x09ce, 0x09ce,\r
+0x09dc, 0x09dd,\r
+0x09df, 0x09e1,\r
+0x09e6, 0x09fd,\r
+0x0a03, 0x0a03,\r
+0x0a05, 0x0a0a,\r
+0x0a0f, 0x0a10,\r
+0x0a13, 0x0a28,\r
+0x0a2a, 0x0a30,\r
+0x0a32, 0x0a33,\r
+0x0a35, 0x0a36,\r
+0x0a38, 0x0a39,\r
+0x0a3e, 0x0a40,\r
+0x0a59, 0x0a5c,\r
+0x0a5e, 0x0a5e,\r
+0x0a66, 0x0a6f,\r
+0x0a72, 0x0a74,\r
+0x0a76, 0x0a76,\r
+0x0a83, 0x0a83,\r
+0x0a85, 0x0a8d,\r
+0x0a8f, 0x0a91,\r
+0x0a93, 0x0aa8,\r
+0x0aaa, 0x0ab0,\r
+0x0ab2, 0x0ab3,\r
+0x0ab5, 0x0ab9,\r
+0x0abd, 0x0ac0,\r
+0x0ac9, 0x0ac9,\r
+0x0acb, 0x0acc,\r
+0x0ad0, 0x0ad0,\r
+0x0ae0, 0x0ae1,\r
+0x0ae6, 0x0af1,\r
+0x0af9, 0x0af9,\r
+0x0b02, 0x0b03,\r
+0x0b05, 0x0b0c,\r
+0x0b0f, 0x0b10,\r
+0x0b13, 0x0b28,\r
+0x0b2a, 0x0b30,\r
+0x0b32, 0x0b33,\r
+0x0b35, 0x0b39,\r
+0x0b3d, 0x0b3d,\r
+0x0b40, 0x0b40,\r
+0x0b47, 0x0b48,\r
+0x0b4b, 0x0b4c,\r
+0x0b5c, 0x0b5d,\r
+0x0b5f, 0x0b61,\r
+0x0b66, 0x0b77,\r
+0x0b83, 0x0b83,\r
+0x0b85, 0x0b8a,\r
+0x0b8e, 0x0b90,\r
+0x0b92, 0x0b95,\r
+0x0b99, 0x0b9a,\r
+0x0b9c, 0x0b9c,\r
+0x0b9e, 0x0b9f,\r
+0x0ba3, 0x0ba4,\r
+0x0ba8, 0x0baa,\r
+0x0bae, 0x0bb9,\r
+0x0bbf, 0x0bbf,\r
+0x0bc1, 0x0bc2,\r
+0x0bc6, 0x0bc8,\r
+0x0bca, 0x0bcc,\r
+0x0bd0, 0x0bd0,\r
+0x0be6, 0x0bfa,\r
+0x0c01, 0x0c03,\r
+0x0c05, 0x0c0c,\r
+0x0c0e, 0x0c10,\r
+0x0c12, 0x0c28,\r
+0x0c2a, 0x0c39,\r
+0x0c3d, 0x0c3d,\r
+0x0c41, 0x0c44,\r
+0x0c58, 0x0c5a,\r
+0x0c60, 0x0c61,\r
+0x0c66, 0x0c6f,\r
+0x0c78, 0x0c80,\r
+0x0c82, 0x0c8c,\r
+0x0c8e, 0x0c90,\r
+0x0c92, 0x0ca8,\r
+0x0caa, 0x0cb3,\r
+0x0cb5, 0x0cb9,\r
+0x0cbd, 0x0cbe,\r
+0x0cc0, 0x0cc1,\r
+0x0cc3, 0x0cc4,\r
+0x0cc7, 0x0cc8,\r
+0x0cca, 0x0ccb,\r
+0x0cde, 0x0cde,\r
+0x0ce0, 0x0ce1,\r
+0x0ce6, 0x0cef,\r
+0x0cf1, 0x0cf2,\r
+0x0d02, 0x0d03,\r
+0x0d05, 0x0d0c,\r
+0x0d0e, 0x0d10,\r
+0x0d12, 0x0d3a,\r
+0x0d3d, 0x0d3d,\r
+0x0d3f, 0x0d40,\r
+0x0d46, 0x0d48,\r
+0x0d4a, 0x0d4c,\r
+0x0d4e, 0x0d4f,\r
+0x0d54, 0x0d56,\r
+0x0d58, 0x0d61,\r
+0x0d66, 0x0d7f,\r
+0x0d82, 0x0d83,\r
+0x0d85, 0x0d96,\r
+0x0d9a, 0x0db1,\r
+0x0db3, 0x0dbb,\r
+0x0dbd, 0x0dbd,\r
+0x0dc0, 0x0dc6,\r
+0x0dd0, 0x0dd1,\r
+0x0dd8, 0x0dde,\r
+0x0de6, 0x0def,\r
+0x0df2, 0x0df4,\r
+0x0e01, 0x0e30,\r
+0x0e32, 0x0e33,\r
+0x0e3f, 0x0e46,\r
+0x0e4f, 0x0e5b,\r
+0x0e81, 0x0e82,\r
+0x0e84, 0x0e84,\r
+0x0e87, 0x0e88,\r
+0x0e8a, 0x0e8a,\r
+0x0e8d, 0x0e8d,\r
+0x0e94, 0x0e97,\r
+0x0e99, 0x0e9f,\r
+0x0ea1, 0x0ea3,\r
+0x0ea5, 0x0ea5,\r
+0x0ea7, 0x0ea7,\r
+0x0eaa, 0x0eab,\r
+0x0ead, 0x0eb0,\r
+0x0eb2, 0x0eb3,\r
+0x0ebd, 0x0ebd,\r
+0x0ec0, 0x0ec4,\r
+0x0ec6, 0x0ec6,\r
+0x0ed0, 0x0ed9,\r
+0x0edc, 0x0edf,\r
+0x0f00, 0x0f17,\r
+0x0f1a, 0x0f34,\r
+0x0f36, 0x0f36,\r
+0x0f38, 0x0f38,\r
+0x0f3a, 0x0f47,\r
+0x0f49, 0x0f6c,\r
+0x0f7f, 0x0f7f,\r
+0x0f85, 0x0f85,\r
+0x0f88, 0x0f8c,\r
+0x0fbe, 0x0fc5,\r
+0x0fc7, 0x0fcc,\r
+0x0fce, 0x0fda,\r
+0x1000, 0x102c,\r
+0x1031, 0x1031,\r
+0x1038, 0x1038,\r
+0x103b, 0x103c,\r
+0x103f, 0x1057,\r
+0x105a, 0x105d,\r
+0x1061, 0x1070,\r
+0x1075, 0x1081,\r
+0x1083, 0x1084,\r
+0x1087, 0x108c,\r
+0x108e, 0x109c,\r
+0x109e, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x1248,\r
+0x124a, 0x124d,\r
+0x1250, 0x1256,\r
+0x1258, 0x1258,\r
+0x125a, 0x125d,\r
+0x1260, 0x1288,\r
+0x128a, 0x128d,\r
+0x1290, 0x12b0,\r
+0x12b2, 0x12b5,\r
+0x12b8, 0x12be,\r
+0x12c0, 0x12c0,\r
+0x12c2, 0x12c5,\r
+0x12c8, 0x12d6,\r
+0x12d8, 0x1310,\r
+0x1312, 0x1315,\r
+0x1318, 0x135a,\r
+0x1360, 0x137c,\r
+0x1380, 0x1399,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0x1400, 0x169c,\r
+0x16a0, 0x16f8,\r
+0x1700, 0x170c,\r
+0x170e, 0x1711,\r
+0x1720, 0x1731,\r
+0x1735, 0x1736,\r
+0x1740, 0x1751,\r
+0x1760, 0x176c,\r
+0x176e, 0x1770,\r
+0x1780, 0x17b3,\r
+0x17b6, 0x17b6,\r
+0x17be, 0x17c5,\r
+0x17c7, 0x17c8,\r
+0x17d4, 0x17dc,\r
+0x17e0, 0x17e9,\r
+0x17f0, 0x17f9,\r
+0x1800, 0x180a,\r
+0x1810, 0x1819,\r
+0x1820, 0x1878,\r
+0x1880, 0x1884,\r
+0x1887, 0x18a8,\r
+0x18aa, 0x18aa,\r
+0x18b0, 0x18f5,\r
+0x1900, 0x191e,\r
+0x1923, 0x1926,\r
+0x1929, 0x192b,\r
+0x1930, 0x1931,\r
+0x1933, 0x1938,\r
+0x1940, 0x1940,\r
+0x1944, 0x196d,\r
+0x1970, 0x1974,\r
+0x1980, 0x19ab,\r
+0x19b0, 0x19c9,\r
+0x19d0, 0x19da,\r
+0x19de, 0x1a16,\r
+0x1a19, 0x1a1a,\r
+0x1a1e, 0x1a55,\r
+0x1a57, 0x1a57,\r
+0x1a61, 0x1a61,\r
+0x1a63, 0x1a64,\r
+0x1a6d, 0x1a72,\r
+0x1a80, 0x1a89,\r
+0x1a90, 0x1a99,\r
+0x1aa0, 0x1aad,\r
+0x1b04, 0x1b33,\r
+0x1b35, 0x1b35,\r
+0x1b3b, 0x1b3b,\r
+0x1b3d, 0x1b41,\r
+0x1b43, 0x1b4b,\r
+0x1b50, 0x1b6a,\r
+0x1b74, 0x1b7c,\r
+0x1b82, 0x1ba1,\r
+0x1ba6, 0x1ba7,\r
+0x1baa, 0x1baa,\r
+0x1bae, 0x1be5,\r
+0x1be7, 0x1be7,\r
+0x1bea, 0x1bec,\r
+0x1bee, 0x1bee,\r
+0x1bf2, 0x1bf3,\r
+0x1bfc, 0x1c2b,\r
+0x1c34, 0x1c35,\r
+0x1c3b, 0x1c49,\r
+0x1c4d, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cc7,\r
+0x1cd3, 0x1cd3,\r
+0x1ce1, 0x1ce1,\r
+0x1ce9, 0x1cec,\r
+0x1cee, 0x1cf3,\r
+0x1cf5, 0x1cf7,\r
+0x1d00, 0x1dbf,\r
+0x1e00, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fc4,\r
+0x1fc6, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fdd, 0x1fef,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffe,\r
+0x2000, 0x200a,\r
+0x2010, 0x2027,\r
+0x202f, 0x205f,\r
+0x2070, 0x2071,\r
+0x2074, 0x208e,\r
+0x2090, 0x209c,\r
+0x20a0, 0x20bf,\r
+0x2100, 0x218b,\r
+0x2190, 0x2426,\r
+0x2440, 0x244a,\r
+0x2460, 0x2b73,\r
+0x2b76, 0x2b95,\r
+0x2b98, 0x2bc8,\r
+0x2bca, 0x2bfe,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x2c60, 0x2cee,\r
+0x2cf2, 0x2cf3,\r
+0x2cf9, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0x2d30, 0x2d67,\r
+0x2d6f, 0x2d70,\r
+0x2d80, 0x2d96,\r
+0x2da0, 0x2da6,\r
+0x2da8, 0x2dae,\r
+0x2db0, 0x2db6,\r
+0x2db8, 0x2dbe,\r
+0x2dc0, 0x2dc6,\r
+0x2dc8, 0x2dce,\r
+0x2dd0, 0x2dd6,\r
+0x2dd8, 0x2dde,\r
+0x2e00, 0x2e4e,\r
+0x2e80, 0x2e99,\r
+0x2e9b, 0x2ef3,\r
+0x2f00, 0x2fd5,\r
+0x2ff0, 0x2ffb,\r
+0x3000, 0x3029,\r
+0x3030, 0x303f,\r
+0x3041, 0x3096,\r
+0x309b, 0x30ff,\r
+0x3105, 0x312f,\r
+0x3131, 0x318e,\r
+0x3190, 0x31ba,\r
+0x31c0, 0x31e3,\r
+0x31f0, 0x321e,\r
+0x3220, 0x32fe,\r
+0x3300, 0x4db5,\r
+0x4dc0, 0x9fef,\r
+0xa000, 0xa48c,\r
+0xa490, 0xa4c6,\r
+0xa4d0, 0xa62b,\r
+0xa640, 0xa66e,\r
+0xa673, 0xa673,\r
+0xa67e, 0xa69d,\r
+0xa6a0, 0xa6ef,\r
+0xa6f2, 0xa6f7,\r
+0xa700, 0xa7b9,\r
+0xa7f7, 0xa801,\r
+0xa803, 0xa805,\r
+0xa807, 0xa80a,\r
+0xa80c, 0xa824,\r
+0xa827, 0xa82b,\r
+0xa830, 0xa839,\r
+0xa840, 0xa877,\r
+0xa880, 0xa8c3,\r
+0xa8ce, 0xa8d9,\r
+0xa8f2, 0xa8fe,\r
+0xa900, 0xa925,\r
+0xa92e, 0xa946,\r
+0xa952, 0xa953,\r
+0xa95f, 0xa97c,\r
+0xa983, 0xa9b2,\r
+0xa9b4, 0xa9b5,\r
+0xa9ba, 0xa9bb,\r
+0xa9bd, 0xa9cd,\r
+0xa9cf, 0xa9d9,\r
+0xa9de, 0xa9e4,\r
+0xa9e6, 0xa9fe,\r
+0xaa00, 0xaa28,\r
+0xaa2f, 0xaa30,\r
+0xaa33, 0xaa34,\r
+0xaa40, 0xaa42,\r
+0xaa44, 0xaa4b,\r
+0xaa4d, 0xaa4d,\r
+0xaa50, 0xaa59,\r
+0xaa5c, 0xaa7b,\r
+0xaa7d, 0xaaaf,\r
+0xaab1, 0xaab1,\r
+0xaab5, 0xaab6,\r
+0xaab9, 0xaabd,\r
+0xaac0, 0xaac0,\r
+0xaac2, 0xaac2,\r
+0xaadb, 0xaaeb,\r
+0xaaee, 0xaaf5,\r
+0xab01, 0xab06,\r
+0xab09, 0xab0e,\r
+0xab11, 0xab16,\r
+0xab20, 0xab26,\r
+0xab28, 0xab2e,\r
+0xab30, 0xab65,\r
+0xab70, 0xabe4,\r
+0xabe6, 0xabe7,\r
+0xabe9, 0xabec,\r
+0xabf0, 0xabf9,\r
+0xac00, 0xd7a3,\r
+0xd7b0, 0xd7c6,\r
+0xd7cb, 0xd7fb,\r
+0xf900, 0xfa6d,\r
+0xfa70, 0xfad9,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xfb1d, 0xfb1d,\r
+0xfb1f, 0xfb36,\r
+0xfb38, 0xfb3c,\r
+0xfb3e, 0xfb3e,\r
+0xfb40, 0xfb41,\r
+0xfb43, 0xfb44,\r
+0xfb46, 0xfbc1,\r
+0xfbd3, 0xfd3f,\r
+0xfd50, 0xfd8f,\r
+0xfd92, 0xfdc7,\r
+0xfdf0, 0xfdfd,\r
+0xfe10, 0xfe19,\r
+0xfe30, 0xfe52,\r
+0xfe54, 0xfe66,\r
+0xfe68, 0xfe6b,\r
+0xfe70, 0xfe74,\r
+0xfe76, 0xfefc,\r
+0xff01, 0xff9d,\r
+0xffa0, 0xffbe,\r
+0xffc2, 0xffc7,\r
+0xffca, 0xffcf,\r
+0xffd2, 0xffd7,\r
+0xffda, 0xffdc,\r
+0xffe0, 0xffe6,\r
+0xffe8, 0xffee,\r
+0xfffc, 0xfffd,\r
+0x10000, 0x1000b,\r
+0x1000d, 0x10026,\r
+0x10028, 0x1003a,\r
+0x1003c, 0x1003d,\r
+0x1003f, 0x1004d,\r
+0x10050, 0x1005d,\r
+0x10080, 0x100fa,\r
+0x10100, 0x10102,\r
+0x10107, 0x10133,\r
+0x10137, 0x1018e,\r
+0x10190, 0x1019b,\r
+0x101a0, 0x101a0,\r
+0x101d0, 0x101fc,\r
+0x10280, 0x1029c,\r
+0x102a0, 0x102d0,\r
+0x102e1, 0x102fb,\r
+0x10300, 0x10323,\r
+0x1032d, 0x1034a,\r
+0x10350, 0x10375,\r
+0x10380, 0x1039d,\r
+0x1039f, 0x103c3,\r
+0x103c8, 0x103d5,\r
+0x10400, 0x1049d,\r
+0x104a0, 0x104a9,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+0x10500, 0x10527,\r
+0x10530, 0x10563,\r
+0x1056f, 0x1056f,\r
+0x10600, 0x10736,\r
+0x10740, 0x10755,\r
+0x10760, 0x10767,\r
+0x10800, 0x10805,\r
+0x10808, 0x10808,\r
+0x1080a, 0x10835,\r
+0x10837, 0x10838,\r
+0x1083c, 0x1083c,\r
+0x1083f, 0x10855,\r
+0x10857, 0x1089e,\r
+0x108a7, 0x108af,\r
+0x108e0, 0x108f2,\r
+0x108f4, 0x108f5,\r
+0x108fb, 0x1091b,\r
+0x1091f, 0x10939,\r
+0x1093f, 0x1093f,\r
+0x10980, 0x109b7,\r
+0x109bc, 0x109cf,\r
+0x109d2, 0x10a00,\r
+0x10a10, 0x10a13,\r
+0x10a15, 0x10a17,\r
+0x10a19, 0x10a35,\r
+0x10a40, 0x10a48,\r
+0x10a50, 0x10a58,\r
+0x10a60, 0x10a9f,\r
+0x10ac0, 0x10ae4,\r
+0x10aeb, 0x10af6,\r
+0x10b00, 0x10b35,\r
+0x10b39, 0x10b55,\r
+0x10b58, 0x10b72,\r
+0x10b78, 0x10b91,\r
+0x10b99, 0x10b9c,\r
+0x10ba9, 0x10baf,\r
+0x10c00, 0x10c48,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x10cfa, 0x10d23,\r
+0x10d30, 0x10d39,\r
+0x10e60, 0x10e7e,\r
+0x10f00, 0x10f27,\r
+0x10f30, 0x10f45,\r
+0x10f51, 0x10f59,\r
+0x11000, 0x11000,\r
+0x11002, 0x11037,\r
+0x11047, 0x1104d,\r
+0x11052, 0x1106f,\r
+0x11082, 0x110b2,\r
+0x110b7, 0x110b8,\r
+0x110bb, 0x110bc,\r
+0x110be, 0x110c1,\r
+0x110d0, 0x110e8,\r
+0x110f0, 0x110f9,\r
+0x11103, 0x11126,\r
+0x1112c, 0x1112c,\r
+0x11136, 0x11146,\r
+0x11150, 0x11172,\r
+0x11174, 0x11176,\r
+0x11182, 0x111b5,\r
+0x111bf, 0x111c8,\r
+0x111cd, 0x111cd,\r
+0x111d0, 0x111df,\r
+0x111e1, 0x111f4,\r
+0x11200, 0x11211,\r
+0x11213, 0x1122e,\r
+0x11232, 0x11233,\r
+0x11235, 0x11235,\r
+0x11238, 0x1123d,\r
+0x11280, 0x11286,\r
+0x11288, 0x11288,\r
+0x1128a, 0x1128d,\r
+0x1128f, 0x1129d,\r
+0x1129f, 0x112a9,\r
+0x112b0, 0x112de,\r
+0x112e0, 0x112e2,\r
+0x112f0, 0x112f9,\r
+0x11302, 0x11303,\r
+0x11305, 0x1130c,\r
+0x1130f, 0x11310,\r
+0x11313, 0x11328,\r
+0x1132a, 0x11330,\r
+0x11332, 0x11333,\r
+0x11335, 0x11339,\r
+0x1133d, 0x1133d,\r
+0x1133f, 0x1133f,\r
+0x11341, 0x11344,\r
+0x11347, 0x11348,\r
+0x1134b, 0x1134d,\r
+0x11350, 0x11350,\r
+0x1135d, 0x11363,\r
+0x11400, 0x11437,\r
+0x11440, 0x11441,\r
+0x11445, 0x11445,\r
+0x11447, 0x11459,\r
+0x1145b, 0x1145b,\r
+0x1145d, 0x1145d,\r
+0x11480, 0x114af,\r
+0x114b1, 0x114b2,\r
+0x114b9, 0x114b9,\r
+0x114bb, 0x114bc,\r
+0x114be, 0x114be,\r
+0x114c1, 0x114c1,\r
+0x114c4, 0x114c7,\r
+0x114d0, 0x114d9,\r
+0x11580, 0x115ae,\r
+0x115b0, 0x115b1,\r
+0x115b8, 0x115bb,\r
+0x115be, 0x115be,\r
+0x115c1, 0x115db,\r
+0x11600, 0x11632,\r
+0x1163b, 0x1163c,\r
+0x1163e, 0x1163e,\r
+0x11641, 0x11644,\r
+0x11650, 0x11659,\r
+0x11660, 0x1166c,\r
+0x11680, 0x116aa,\r
+0x116ac, 0x116ac,\r
+0x116ae, 0x116af,\r
+0x116b6, 0x116b6,\r
+0x116c0, 0x116c9,\r
+0x11700, 0x1171a,\r
+0x11720, 0x11721,\r
+0x11726, 0x11726,\r
+0x11730, 0x1173f,\r
+0x11800, 0x1182e,\r
+0x11838, 0x11838,\r
+0x1183b, 0x1183b,\r
+0x118a0, 0x118f2,\r
+0x118ff, 0x118ff,\r
+0x11a00, 0x11a00,\r
+0x11a0b, 0x11a32,\r
+0x11a39, 0x11a3a,\r
+0x11a3f, 0x11a46,\r
+0x11a50, 0x11a50,\r
+0x11a57, 0x11a58,\r
+0x11a5c, 0x11a83,\r
+0x11a86, 0x11a89,\r
+0x11a97, 0x11a97,\r
+0x11a9a, 0x11aa2,\r
+0x11ac0, 0x11af8,\r
+0x11c00, 0x11c08,\r
+0x11c0a, 0x11c2f,\r
+0x11c3e, 0x11c3e,\r
+0x11c40, 0x11c45,\r
+0x11c50, 0x11c6c,\r
+0x11c70, 0x11c8f,\r
+0x11ca9, 0x11ca9,\r
+0x11cb1, 0x11cb1,\r
+0x11cb4, 0x11cb4,\r
+0x11d00, 0x11d06,\r
+0x11d08, 0x11d09,\r
+0x11d0b, 0x11d30,\r
+0x11d46, 0x11d46,\r
+0x11d50, 0x11d59,\r
+0x11d60, 0x11d65,\r
+0x11d67, 0x11d68,\r
+0x11d6a, 0x11d8e,\r
+0x11d93, 0x11d94,\r
+0x11d96, 0x11d96,\r
+0x11d98, 0x11d98,\r
+0x11da0, 0x11da9,\r
+0x11ee0, 0x11ef2,\r
+0x11ef5, 0x11ef8,\r
+0x12000, 0x12399,\r
+0x12400, 0x1246e,\r
+0x12470, 0x12474,\r
+0x12480, 0x12543,\r
+0x13000, 0x1342e,\r
+0x14400, 0x14646,\r
+0x16800, 0x16a38,\r
+0x16a40, 0x16a5e,\r
+0x16a60, 0x16a69,\r
+0x16a6e, 0x16a6f,\r
+0x16ad0, 0x16aed,\r
+0x16af5, 0x16af5,\r
+0x16b00, 0x16b2f,\r
+0x16b37, 0x16b45,\r
+0x16b50, 0x16b59,\r
+0x16b5b, 0x16b61,\r
+0x16b63, 0x16b77,\r
+0x16b7d, 0x16b8f,\r
+0x16e40, 0x16e9a,\r
+0x16f00, 0x16f44,\r
+0x16f50, 0x16f7e,\r
+0x16f93, 0x16f9f,\r
+0x16fe0, 0x16fe1,\r
+0x17000, 0x187f1,\r
+0x18800, 0x18af2,\r
+0x1b000, 0x1b11e,\r
+0x1b170, 0x1b2fb,\r
+0x1bc00, 0x1bc6a,\r
+0x1bc70, 0x1bc7c,\r
+0x1bc80, 0x1bc88,\r
+0x1bc90, 0x1bc99,\r
+0x1bc9c, 0x1bc9c,\r
+0x1bc9f, 0x1bc9f,\r
+0x1d000, 0x1d0f5,\r
+0x1d100, 0x1d126,\r
+0x1d129, 0x1d164,\r
+0x1d166, 0x1d166,\r
+0x1d16a, 0x1d16d,\r
+0x1d183, 0x1d184,\r
+0x1d18c, 0x1d1a9,\r
+0x1d1ae, 0x1d1e8,\r
+0x1d200, 0x1d241,\r
+0x1d245, 0x1d245,\r
+0x1d2e0, 0x1d2f3,\r
+0x1d300, 0x1d356,\r
+0x1d360, 0x1d378,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d7cb,\r
+0x1d7ce, 0x1d9ff,\r
+0x1da37, 0x1da3a,\r
+0x1da6d, 0x1da74,\r
+0x1da76, 0x1da83,\r
+0x1da85, 0x1da8b,\r
+0x1e800, 0x1e8c4,\r
+0x1e8c7, 0x1e8cf,\r
+0x1e900, 0x1e943,\r
+0x1e950, 0x1e959,\r
+0x1e95e, 0x1e95f,\r
+0x1ec71, 0x1ecb4,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+0x1eef0, 0x1eef1,\r
+0x1f000, 0x1f02b,\r
+0x1f030, 0x1f093,\r
+0x1f0a0, 0x1f0ae,\r
+0x1f0b1, 0x1f0bf,\r
+0x1f0c1, 0x1f0cf,\r
+0x1f0d1, 0x1f0f5,\r
+0x1f100, 0x1f10c,\r
+0x1f110, 0x1f16b,\r
+0x1f170, 0x1f1ac,\r
+0x1f1e6, 0x1f202,\r
+0x1f210, 0x1f23b,\r
+0x1f240, 0x1f248,\r
+0x1f250, 0x1f251,\r
+0x1f260, 0x1f265,\r
+0x1f300, 0x1f6d4,\r
+0x1f6e0, 0x1f6ec,\r
+0x1f6f0, 0x1f6f9,\r
+0x1f700, 0x1f773,\r
+0x1f780, 0x1f7d8,\r
+0x1f800, 0x1f80b,\r
+0x1f810, 0x1f847,\r
+0x1f850, 0x1f859,\r
+0x1f860, 0x1f887,\r
+0x1f890, 0x1f8ad,\r
+0x1f900, 0x1f90b,\r
+0x1f910, 0x1f93e,\r
+0x1f940, 0x1f970,\r
+0x1f973, 0x1f976,\r
+0x1f97a, 0x1f97a,\r
+0x1f97c, 0x1f9a2,\r
+0x1f9b0, 0x1f9b9,\r
+0x1f9c0, 0x1f9c2,\r
+0x1f9d0, 0x1f9ff,\r
+0x1fa60, 0x1fa6d,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+0x2f800, 0x2fa1d,\r
+}; /* END of CR_Grapheme_Base */\r
+\r
+/* PROPERTY: 'Grapheme_Extend': Derived Property */\r
+static const OnigCodePoint\r
+CR_Grapheme_Extend[] = { 331,\r
+0x0300, 0x036f,\r
+0x0483, 0x0489,\r
+0x0591, 0x05bd,\r
+0x05bf, 0x05bf,\r
+0x05c1, 0x05c2,\r
+0x05c4, 0x05c5,\r
+0x05c7, 0x05c7,\r
+0x0610, 0x061a,\r
+0x064b, 0x065f,\r
+0x0670, 0x0670,\r
+0x06d6, 0x06dc,\r
+0x06df, 0x06e4,\r
+0x06e7, 0x06e8,\r
+0x06ea, 0x06ed,\r
+0x0711, 0x0711,\r
+0x0730, 0x074a,\r
+0x07a6, 0x07b0,\r
+0x07eb, 0x07f3,\r
+0x07fd, 0x07fd,\r
+0x0816, 0x0819,\r
+0x081b, 0x0823,\r
+0x0825, 0x0827,\r
+0x0829, 0x082d,\r
+0x0859, 0x085b,\r
+0x08d3, 0x08e1,\r
+0x08e3, 0x0902,\r
+0x093a, 0x093a,\r
+0x093c, 0x093c,\r
+0x0941, 0x0948,\r
+0x094d, 0x094d,\r
+0x0951, 0x0957,\r
+0x0962, 0x0963,\r
+0x0981, 0x0981,\r
+0x09bc, 0x09bc,\r
+0x09be, 0x09be,\r
+0x09c1, 0x09c4,\r
+0x09cd, 0x09cd,\r
+0x09d7, 0x09d7,\r
+0x09e2, 0x09e3,\r
+0x09fe, 0x09fe,\r
+0x0a01, 0x0a02,\r
+0x0a3c, 0x0a3c,\r
+0x0a41, 0x0a42,\r
+0x0a47, 0x0a48,\r
+0x0a4b, 0x0a4d,\r
+0x0a51, 0x0a51,\r
+0x0a70, 0x0a71,\r
+0x0a75, 0x0a75,\r
+0x0a81, 0x0a82,\r
+0x0abc, 0x0abc,\r
+0x0ac1, 0x0ac5,\r
+0x0ac7, 0x0ac8,\r
+0x0acd, 0x0acd,\r
+0x0ae2, 0x0ae3,\r
+0x0afa, 0x0aff,\r
+0x0b01, 0x0b01,\r
+0x0b3c, 0x0b3c,\r
+0x0b3e, 0x0b3f,\r
+0x0b41, 0x0b44,\r
+0x0b4d, 0x0b4d,\r
+0x0b56, 0x0b57,\r
+0x0b62, 0x0b63,\r
+0x0b82, 0x0b82,\r
+0x0bbe, 0x0bbe,\r
+0x0bc0, 0x0bc0,\r
+0x0bcd, 0x0bcd,\r
+0x0bd7, 0x0bd7,\r
+0x0c00, 0x0c00,\r
+0x0c04, 0x0c04,\r
+0x0c3e, 0x0c40,\r
+0x0c46, 0x0c48,\r
+0x0c4a, 0x0c4d,\r
+0x0c55, 0x0c56,\r
+0x0c62, 0x0c63,\r
+0x0c81, 0x0c81,\r
+0x0cbc, 0x0cbc,\r
+0x0cbf, 0x0cbf,\r
+0x0cc2, 0x0cc2,\r
+0x0cc6, 0x0cc6,\r
+0x0ccc, 0x0ccd,\r
+0x0cd5, 0x0cd6,\r
+0x0ce2, 0x0ce3,\r
+0x0d00, 0x0d01,\r
+0x0d3b, 0x0d3c,\r
+0x0d3e, 0x0d3e,\r
+0x0d41, 0x0d44,\r
+0x0d4d, 0x0d4d,\r
+0x0d57, 0x0d57,\r
+0x0d62, 0x0d63,\r
+0x0dca, 0x0dca,\r
+0x0dcf, 0x0dcf,\r
+0x0dd2, 0x0dd4,\r
+0x0dd6, 0x0dd6,\r
+0x0ddf, 0x0ddf,\r
+0x0e31, 0x0e31,\r
+0x0e34, 0x0e3a,\r
+0x0e47, 0x0e4e,\r
+0x0eb1, 0x0eb1,\r
+0x0eb4, 0x0eb9,\r
+0x0ebb, 0x0ebc,\r
+0x0ec8, 0x0ecd,\r
+0x0f18, 0x0f19,\r
+0x0f35, 0x0f35,\r
+0x0f37, 0x0f37,\r
+0x0f39, 0x0f39,\r
+0x0f71, 0x0f7e,\r
+0x0f80, 0x0f84,\r
+0x0f86, 0x0f87,\r
+0x0f8d, 0x0f97,\r
+0x0f99, 0x0fbc,\r
+0x0fc6, 0x0fc6,\r
+0x102d, 0x1030,\r
+0x1032, 0x1037,\r
+0x1039, 0x103a,\r
+0x103d, 0x103e,\r
+0x1058, 0x1059,\r
+0x105e, 0x1060,\r
+0x1071, 0x1074,\r
+0x1082, 0x1082,\r
+0x1085, 0x1086,\r
+0x108d, 0x108d,\r
+0x109d, 0x109d,\r
+0x135d, 0x135f,\r
+0x1712, 0x1714,\r
+0x1732, 0x1734,\r
+0x1752, 0x1753,\r
+0x1772, 0x1773,\r
+0x17b4, 0x17b5,\r
+0x17b7, 0x17bd,\r
+0x17c6, 0x17c6,\r
+0x17c9, 0x17d3,\r
+0x17dd, 0x17dd,\r
+0x180b, 0x180d,\r
+0x1885, 0x1886,\r
+0x18a9, 0x18a9,\r
+0x1920, 0x1922,\r
+0x1927, 0x1928,\r
+0x1932, 0x1932,\r
+0x1939, 0x193b,\r
+0x1a17, 0x1a18,\r
+0x1a1b, 0x1a1b,\r
+0x1a56, 0x1a56,\r
+0x1a58, 0x1a5e,\r
+0x1a60, 0x1a60,\r
+0x1a62, 0x1a62,\r
+0x1a65, 0x1a6c,\r
+0x1a73, 0x1a7c,\r
+0x1a7f, 0x1a7f,\r
+0x1ab0, 0x1abe,\r
+0x1b00, 0x1b03,\r
+0x1b34, 0x1b34,\r
+0x1b36, 0x1b3a,\r
+0x1b3c, 0x1b3c,\r
+0x1b42, 0x1b42,\r
+0x1b6b, 0x1b73,\r
+0x1b80, 0x1b81,\r
+0x1ba2, 0x1ba5,\r
+0x1ba8, 0x1ba9,\r
+0x1bab, 0x1bad,\r
+0x1be6, 0x1be6,\r
+0x1be8, 0x1be9,\r
+0x1bed, 0x1bed,\r
+0x1bef, 0x1bf1,\r
+0x1c2c, 0x1c33,\r
+0x1c36, 0x1c37,\r
+0x1cd0, 0x1cd2,\r
+0x1cd4, 0x1ce0,\r
+0x1ce2, 0x1ce8,\r
+0x1ced, 0x1ced,\r
+0x1cf4, 0x1cf4,\r
+0x1cf8, 0x1cf9,\r
+0x1dc0, 0x1df9,\r
+0x1dfb, 0x1dff,\r
+0x200c, 0x200c,\r
+0x20d0, 0x20f0,\r
+0x2cef, 0x2cf1,\r
+0x2d7f, 0x2d7f,\r
+0x2de0, 0x2dff,\r
+0x302a, 0x302f,\r
+0x3099, 0x309a,\r
+0xa66f, 0xa672,\r
+0xa674, 0xa67d,\r
+0xa69e, 0xa69f,\r
+0xa6f0, 0xa6f1,\r
+0xa802, 0xa802,\r
+0xa806, 0xa806,\r
+0xa80b, 0xa80b,\r
+0xa825, 0xa826,\r
+0xa8c4, 0xa8c5,\r
+0xa8e0, 0xa8f1,\r
+0xa8ff, 0xa8ff,\r
+0xa926, 0xa92d,\r
+0xa947, 0xa951,\r
+0xa980, 0xa982,\r
+0xa9b3, 0xa9b3,\r
+0xa9b6, 0xa9b9,\r
+0xa9bc, 0xa9bc,\r
+0xa9e5, 0xa9e5,\r
+0xaa29, 0xaa2e,\r
+0xaa31, 0xaa32,\r
+0xaa35, 0xaa36,\r
+0xaa43, 0xaa43,\r
+0xaa4c, 0xaa4c,\r
+0xaa7c, 0xaa7c,\r
+0xaab0, 0xaab0,\r
+0xaab2, 0xaab4,\r
+0xaab7, 0xaab8,\r
+0xaabe, 0xaabf,\r
+0xaac1, 0xaac1,\r
+0xaaec, 0xaaed,\r
+0xaaf6, 0xaaf6,\r
+0xabe5, 0xabe5,\r
+0xabe8, 0xabe8,\r
+0xabed, 0xabed,\r
+0xfb1e, 0xfb1e,\r
+0xfe00, 0xfe0f,\r
+0xfe20, 0xfe2f,\r
+0xff9e, 0xff9f,\r
+0x101fd, 0x101fd,\r
+0x102e0, 0x102e0,\r
+0x10376, 0x1037a,\r
+0x10a01, 0x10a03,\r
+0x10a05, 0x10a06,\r
+0x10a0c, 0x10a0f,\r
+0x10a38, 0x10a3a,\r
+0x10a3f, 0x10a3f,\r
+0x10ae5, 0x10ae6,\r
+0x10d24, 0x10d27,\r
+0x10f46, 0x10f50,\r
+0x11001, 0x11001,\r
+0x11038, 0x11046,\r
+0x1107f, 0x11081,\r
+0x110b3, 0x110b6,\r
+0x110b9, 0x110ba,\r
+0x11100, 0x11102,\r
+0x11127, 0x1112b,\r
+0x1112d, 0x11134,\r
+0x11173, 0x11173,\r
+0x11180, 0x11181,\r
+0x111b6, 0x111be,\r
+0x111c9, 0x111cc,\r
+0x1122f, 0x11231,\r
+0x11234, 0x11234,\r
+0x11236, 0x11237,\r
+0x1123e, 0x1123e,\r
+0x112df, 0x112df,\r
+0x112e3, 0x112ea,\r
+0x11300, 0x11301,\r
+0x1133b, 0x1133c,\r
+0x1133e, 0x1133e,\r
+0x11340, 0x11340,\r
+0x11357, 0x11357,\r
+0x11366, 0x1136c,\r
+0x11370, 0x11374,\r
+0x11438, 0x1143f,\r
+0x11442, 0x11444,\r
+0x11446, 0x11446,\r
+0x1145e, 0x1145e,\r
+0x114b0, 0x114b0,\r
+0x114b3, 0x114b8,\r
+0x114ba, 0x114ba,\r
+0x114bd, 0x114bd,\r
+0x114bf, 0x114c0,\r
+0x114c2, 0x114c3,\r
+0x115af, 0x115af,\r
+0x115b2, 0x115b5,\r
+0x115bc, 0x115bd,\r
+0x115bf, 0x115c0,\r
+0x115dc, 0x115dd,\r
+0x11633, 0x1163a,\r
+0x1163d, 0x1163d,\r
+0x1163f, 0x11640,\r
+0x116ab, 0x116ab,\r
+0x116ad, 0x116ad,\r
+0x116b0, 0x116b5,\r
+0x116b7, 0x116b7,\r
+0x1171d, 0x1171f,\r
+0x11722, 0x11725,\r
+0x11727, 0x1172b,\r
+0x1182f, 0x11837,\r
+0x11839, 0x1183a,\r
+0x11a01, 0x11a0a,\r
+0x11a33, 0x11a38,\r
+0x11a3b, 0x11a3e,\r
+0x11a47, 0x11a47,\r
+0x11a51, 0x11a56,\r
+0x11a59, 0x11a5b,\r
+0x11a8a, 0x11a96,\r
+0x11a98, 0x11a99,\r
+0x11c30, 0x11c36,\r
+0x11c38, 0x11c3d,\r
+0x11c3f, 0x11c3f,\r
+0x11c92, 0x11ca7,\r
+0x11caa, 0x11cb0,\r
+0x11cb2, 0x11cb3,\r
+0x11cb5, 0x11cb6,\r
+0x11d31, 0x11d36,\r
+0x11d3a, 0x11d3a,\r
+0x11d3c, 0x11d3d,\r
+0x11d3f, 0x11d45,\r
+0x11d47, 0x11d47,\r
+0x11d90, 0x11d91,\r
+0x11d95, 0x11d95,\r
+0x11d97, 0x11d97,\r
+0x11ef3, 0x11ef4,\r
+0x16af0, 0x16af4,\r
+0x16b30, 0x16b36,\r
+0x16f8f, 0x16f92,\r
+0x1bc9d, 0x1bc9e,\r
+0x1d165, 0x1d165,\r
+0x1d167, 0x1d169,\r
+0x1d16e, 0x1d172,\r
+0x1d17b, 0x1d182,\r
+0x1d185, 0x1d18b,\r
+0x1d1aa, 0x1d1ad,\r
+0x1d242, 0x1d244,\r
+0x1da00, 0x1da36,\r
+0x1da3b, 0x1da6c,\r
+0x1da75, 0x1da75,\r
+0x1da84, 0x1da84,\r
+0x1da9b, 0x1da9f,\r
+0x1daa1, 0x1daaf,\r
+0x1e000, 0x1e006,\r
+0x1e008, 0x1e018,\r
+0x1e01b, 0x1e021,\r
+0x1e023, 0x1e024,\r
+0x1e026, 0x1e02a,\r
+0x1e8d0, 0x1e8d6,\r
+0x1e944, 0x1e94a,\r
+0xe0020, 0xe007f,\r
+0xe0100, 0xe01ef,\r
+}; /* END of CR_Grapheme_Extend */\r
+\r
+/* PROPERTY: 'Grapheme_Link': Derived Property */\r
+static const OnigCodePoint\r
+CR_Grapheme_Link[] = { 50,\r
+0x094d, 0x094d,\r
+0x09cd, 0x09cd,\r
+0x0a4d, 0x0a4d,\r
+0x0acd, 0x0acd,\r
+0x0b4d, 0x0b4d,\r
+0x0bcd, 0x0bcd,\r
+0x0c4d, 0x0c4d,\r
+0x0ccd, 0x0ccd,\r
+0x0d3b, 0x0d3c,\r
+0x0d4d, 0x0d4d,\r
+0x0dca, 0x0dca,\r
+0x0e3a, 0x0e3a,\r
+0x0f84, 0x0f84,\r
+0x1039, 0x103a,\r
+0x1714, 0x1714,\r
+0x1734, 0x1734,\r
+0x17d2, 0x17d2,\r
+0x1a60, 0x1a60,\r
+0x1b44, 0x1b44,\r
+0x1baa, 0x1bab,\r
+0x1bf2, 0x1bf3,\r
+0x2d7f, 0x2d7f,\r
+0xa806, 0xa806,\r
+0xa8c4, 0xa8c4,\r
+0xa953, 0xa953,\r
+0xa9c0, 0xa9c0,\r
+0xaaf6, 0xaaf6,\r
+0xabed, 0xabed,\r
+0x10a3f, 0x10a3f,\r
+0x11046, 0x11046,\r
+0x1107f, 0x1107f,\r
+0x110b9, 0x110b9,\r
+0x11133, 0x11134,\r
+0x111c0, 0x111c0,\r
+0x11235, 0x11235,\r
+0x112ea, 0x112ea,\r
+0x1134d, 0x1134d,\r
+0x11442, 0x11442,\r
+0x114c2, 0x114c2,\r
+0x115bf, 0x115bf,\r
+0x1163f, 0x1163f,\r
+0x116b6, 0x116b6,\r
+0x1172b, 0x1172b,\r
+0x11839, 0x11839,\r
+0x11a34, 0x11a34,\r
+0x11a47, 0x11a47,\r
+0x11a99, 0x11a99,\r
+0x11c3f, 0x11c3f,\r
+0x11d44, 0x11d45,\r
+0x11d97, 0x11d97,\r
+}; /* END of CR_Grapheme_Link */\r
+\r
+/* PROPERTY: 'Greek': Script */\r
+static const OnigCodePoint\r
+CR_Greek[] = { 36,\r
+0x0370, 0x0373,\r
+0x0375, 0x0377,\r
+0x037a, 0x037d,\r
+0x037f, 0x037f,\r
+0x0384, 0x0384,\r
+0x0386, 0x0386,\r
+0x0388, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x03e1,\r
+0x03f0, 0x03ff,\r
+0x1d26, 0x1d2a,\r
+0x1d5d, 0x1d61,\r
+0x1d66, 0x1d6a,\r
+0x1dbf, 0x1dbf,\r
+0x1f00, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fc4,\r
+0x1fc6, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fdd, 0x1fef,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffe,\r
+0x2126, 0x2126,\r
+0xab65, 0xab65,\r
+0x10140, 0x1018e,\r
+0x101a0, 0x101a0,\r
+0x1d200, 0x1d245,\r
+}; /* END of CR_Greek */\r
+\r
+/* PROPERTY: 'Gujarati': Script */\r
+static const OnigCodePoint\r
+CR_Gujarati[] = { 14,\r
+0x0a81, 0x0a83,\r
+0x0a85, 0x0a8d,\r
+0x0a8f, 0x0a91,\r
+0x0a93, 0x0aa8,\r
+0x0aaa, 0x0ab0,\r
+0x0ab2, 0x0ab3,\r
+0x0ab5, 0x0ab9,\r
+0x0abc, 0x0ac5,\r
+0x0ac7, 0x0ac9,\r
+0x0acb, 0x0acd,\r
+0x0ad0, 0x0ad0,\r
+0x0ae0, 0x0ae3,\r
+0x0ae6, 0x0af1,\r
+0x0af9, 0x0aff,\r
+}; /* END of CR_Gujarati */\r
+\r
+/* PROPERTY: 'Gunjala_Gondi': Script */\r
+static const OnigCodePoint\r
+CR_Gunjala_Gondi[] = { 6,\r
+0x11d60, 0x11d65,\r
+0x11d67, 0x11d68,\r
+0x11d6a, 0x11d8e,\r
+0x11d90, 0x11d91,\r
+0x11d93, 0x11d98,\r
+0x11da0, 0x11da9,\r
+}; /* END of CR_Gunjala_Gondi */\r
+\r
+/* PROPERTY: 'Gurmukhi': Script */\r
+static const OnigCodePoint\r
+CR_Gurmukhi[] = { 16,\r
+0x0a01, 0x0a03,\r
+0x0a05, 0x0a0a,\r
+0x0a0f, 0x0a10,\r
+0x0a13, 0x0a28,\r
+0x0a2a, 0x0a30,\r
+0x0a32, 0x0a33,\r
+0x0a35, 0x0a36,\r
+0x0a38, 0x0a39,\r
+0x0a3c, 0x0a3c,\r
+0x0a3e, 0x0a42,\r
+0x0a47, 0x0a48,\r
+0x0a4b, 0x0a4d,\r
+0x0a51, 0x0a51,\r
+0x0a59, 0x0a5c,\r
+0x0a5e, 0x0a5e,\r
+0x0a66, 0x0a76,\r
+}; /* END of CR_Gurmukhi */\r
+\r
+/* PROPERTY: 'Han': Script */\r
+static const OnigCodePoint\r
+CR_Han[] = { 17,\r
+0x2e80, 0x2e99,\r
+0x2e9b, 0x2ef3,\r
+0x2f00, 0x2fd5,\r
+0x3005, 0x3005,\r
+0x3007, 0x3007,\r
+0x3021, 0x3029,\r
+0x3038, 0x303b,\r
+0x3400, 0x4db5,\r
+0x4e00, 0x9fef,\r
+0xf900, 0xfa6d,\r
+0xfa70, 0xfad9,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+0x2f800, 0x2fa1d,\r
+}; /* END of CR_Han */\r
+\r
+/* PROPERTY: 'Hangul': Script */\r
+static const OnigCodePoint\r
+CR_Hangul[] = { 14,\r
+0x1100, 0x11ff,\r
+0x302e, 0x302f,\r
+0x3131, 0x318e,\r
+0x3200, 0x321e,\r
+0x3260, 0x327e,\r
+0xa960, 0xa97c,\r
+0xac00, 0xd7a3,\r
+0xd7b0, 0xd7c6,\r
+0xd7cb, 0xd7fb,\r
+0xffa0, 0xffbe,\r
+0xffc2, 0xffc7,\r
+0xffca, 0xffcf,\r
+0xffd2, 0xffd7,\r
+0xffda, 0xffdc,\r
+}; /* END of CR_Hangul */\r
+\r
+/* PROPERTY: 'Hanifi_Rohingya': Script */\r
+static const OnigCodePoint\r
+CR_Hanifi_Rohingya[] = { 2,\r
+0x10d00, 0x10d27,\r
+0x10d30, 0x10d39,\r
+}; /* END of CR_Hanifi_Rohingya */\r
+\r
+/* PROPERTY: 'Hanunoo': Script */\r
+static const OnigCodePoint\r
+CR_Hanunoo[] = { 1,\r
+0x1720, 0x1734,\r
+}; /* END of CR_Hanunoo */\r
+\r
+/* PROPERTY: 'Hatran': Script */\r
+static const OnigCodePoint\r
+CR_Hatran[] = { 3,\r
+0x108e0, 0x108f2,\r
+0x108f4, 0x108f5,\r
+0x108fb, 0x108ff,\r
+}; /* END of CR_Hatran */\r
+\r
+/* PROPERTY: 'Hebrew': Script */\r
+static const OnigCodePoint\r
+CR_Hebrew[] = { 9,\r
+0x0591, 0x05c7,\r
+0x05d0, 0x05ea,\r
+0x05ef, 0x05f4,\r
+0xfb1d, 0xfb36,\r
+0xfb38, 0xfb3c,\r
+0xfb3e, 0xfb3e,\r
+0xfb40, 0xfb41,\r
+0xfb43, 0xfb44,\r
+0xfb46, 0xfb4f,\r
+}; /* END of CR_Hebrew */\r
+\r
+/* PROPERTY: 'Hex_Digit': Binary Property */\r
+static const OnigCodePoint\r
+CR_Hex_Digit[] = { 6,\r
+0x0030, 0x0039,\r
+0x0041, 0x0046,\r
+0x0061, 0x0066,\r
+0xff10, 0xff19,\r
+0xff21, 0xff26,\r
+0xff41, 0xff46,\r
+}; /* END of CR_Hex_Digit */\r
+\r
+/* PROPERTY: 'Hiragana': Script */\r
+static const OnigCodePoint\r
+CR_Hiragana[] = { 4,\r
+0x3041, 0x3096,\r
+0x309d, 0x309f,\r
+0x1b001, 0x1b11e,\r
+0x1f200, 0x1f200,\r
+}; /* END of CR_Hiragana */\r
+\r
+/* PROPERTY: 'Hyphen': Binary Property */\r
+static const OnigCodePoint\r
+CR_Hyphen[] = { 10,\r
+0x002d, 0x002d,\r
+0x00ad, 0x00ad,\r
+0x058a, 0x058a,\r
+0x1806, 0x1806,\r
+0x2010, 0x2011,\r
+0x2e17, 0x2e17,\r
+0x30fb, 0x30fb,\r
+0xfe63, 0xfe63,\r
+0xff0d, 0xff0d,\r
+0xff65, 0xff65,\r
+}; /* END of CR_Hyphen */\r
+\r
+/* PROPERTY: 'IDS_Binary_Operator': Binary Property */\r
+static const OnigCodePoint\r
+CR_IDS_Binary_Operator[] = { 2,\r
+0x2ff0, 0x2ff1,\r
+0x2ff4, 0x2ffb,\r
+}; /* END of CR_IDS_Binary_Operator */\r
+\r
+/* PROPERTY: 'IDS_Trinary_Operator': Binary Property */\r
+static const OnigCodePoint\r
+CR_IDS_Trinary_Operator[] = { 1,\r
+0x2ff2, 0x2ff3,\r
+}; /* END of CR_IDS_Trinary_Operator */\r
+\r
+/* PROPERTY: 'ID_Continue': Derived Property */\r
+static const OnigCodePoint\r
+CR_ID_Continue[] = { 707,\r
+0x0030, 0x0039,\r
+0x0041, 0x005a,\r
+0x005f, 0x005f,\r
+0x0061, 0x007a,\r
+0x00aa, 0x00aa,\r
+0x00b5, 0x00b5,\r
+0x00b7, 0x00b7,\r
+0x00ba, 0x00ba,\r
+0x00c0, 0x00d6,\r
+0x00d8, 0x00f6,\r
+0x00f8, 0x02c1,\r
+0x02c6, 0x02d1,\r
+0x02e0, 0x02e4,\r
+0x02ec, 0x02ec,\r
+0x02ee, 0x02ee,\r
+0x0300, 0x0374,\r
+0x0376, 0x0377,\r
+0x037a, 0x037d,\r
+0x037f, 0x037f,\r
+0x0386, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x03f5,\r
+0x03f7, 0x0481,\r
+0x0483, 0x0487,\r
+0x048a, 0x052f,\r
+0x0531, 0x0556,\r
+0x0559, 0x0559,\r
+0x0560, 0x0588,\r
+0x0591, 0x05bd,\r
+0x05bf, 0x05bf,\r
+0x05c1, 0x05c2,\r
+0x05c4, 0x05c5,\r
+0x05c7, 0x05c7,\r
+0x05d0, 0x05ea,\r
+0x05ef, 0x05f2,\r
+0x0610, 0x061a,\r
+0x0620, 0x0669,\r
+0x066e, 0x06d3,\r
+0x06d5, 0x06dc,\r
+0x06df, 0x06e8,\r
+0x06ea, 0x06fc,\r
+0x06ff, 0x06ff,\r
+0x0710, 0x074a,\r
+0x074d, 0x07b1,\r
+0x07c0, 0x07f5,\r
+0x07fa, 0x07fa,\r
+0x07fd, 0x07fd,\r
+0x0800, 0x082d,\r
+0x0840, 0x085b,\r
+0x0860, 0x086a,\r
+0x08a0, 0x08b4,\r
+0x08b6, 0x08bd,\r
+0x08d3, 0x08e1,\r
+0x08e3, 0x0963,\r
+0x0966, 0x096f,\r
+0x0971, 0x0983,\r
+0x0985, 0x098c,\r
+0x098f, 0x0990,\r
+0x0993, 0x09a8,\r
+0x09aa, 0x09b0,\r
+0x09b2, 0x09b2,\r
+0x09b6, 0x09b9,\r
+0x09bc, 0x09c4,\r
+0x09c7, 0x09c8,\r
+0x09cb, 0x09ce,\r
+0x09d7, 0x09d7,\r
+0x09dc, 0x09dd,\r
+0x09df, 0x09e3,\r
+0x09e6, 0x09f1,\r
+0x09fc, 0x09fc,\r
+0x09fe, 0x09fe,\r
+0x0a01, 0x0a03,\r
+0x0a05, 0x0a0a,\r
+0x0a0f, 0x0a10,\r
+0x0a13, 0x0a28,\r
+0x0a2a, 0x0a30,\r
+0x0a32, 0x0a33,\r
+0x0a35, 0x0a36,\r
+0x0a38, 0x0a39,\r
+0x0a3c, 0x0a3c,\r
+0x0a3e, 0x0a42,\r
+0x0a47, 0x0a48,\r
+0x0a4b, 0x0a4d,\r
+0x0a51, 0x0a51,\r
+0x0a59, 0x0a5c,\r
+0x0a5e, 0x0a5e,\r
+0x0a66, 0x0a75,\r
+0x0a81, 0x0a83,\r
+0x0a85, 0x0a8d,\r
+0x0a8f, 0x0a91,\r
+0x0a93, 0x0aa8,\r
+0x0aaa, 0x0ab0,\r
+0x0ab2, 0x0ab3,\r
+0x0ab5, 0x0ab9,\r
+0x0abc, 0x0ac5,\r
+0x0ac7, 0x0ac9,\r
+0x0acb, 0x0acd,\r
+0x0ad0, 0x0ad0,\r
+0x0ae0, 0x0ae3,\r
+0x0ae6, 0x0aef,\r
+0x0af9, 0x0aff,\r
+0x0b01, 0x0b03,\r
+0x0b05, 0x0b0c,\r
+0x0b0f, 0x0b10,\r
+0x0b13, 0x0b28,\r
+0x0b2a, 0x0b30,\r
+0x0b32, 0x0b33,\r
+0x0b35, 0x0b39,\r
+0x0b3c, 0x0b44,\r
+0x0b47, 0x0b48,\r
+0x0b4b, 0x0b4d,\r
+0x0b56, 0x0b57,\r
+0x0b5c, 0x0b5d,\r
+0x0b5f, 0x0b63,\r
+0x0b66, 0x0b6f,\r
+0x0b71, 0x0b71,\r
+0x0b82, 0x0b83,\r
+0x0b85, 0x0b8a,\r
+0x0b8e, 0x0b90,\r
+0x0b92, 0x0b95,\r
+0x0b99, 0x0b9a,\r
+0x0b9c, 0x0b9c,\r
+0x0b9e, 0x0b9f,\r
+0x0ba3, 0x0ba4,\r
+0x0ba8, 0x0baa,\r
+0x0bae, 0x0bb9,\r
+0x0bbe, 0x0bc2,\r
+0x0bc6, 0x0bc8,\r
+0x0bca, 0x0bcd,\r
+0x0bd0, 0x0bd0,\r
+0x0bd7, 0x0bd7,\r
+0x0be6, 0x0bef,\r
+0x0c00, 0x0c0c,\r
+0x0c0e, 0x0c10,\r
+0x0c12, 0x0c28,\r
+0x0c2a, 0x0c39,\r
+0x0c3d, 0x0c44,\r
+0x0c46, 0x0c48,\r
+0x0c4a, 0x0c4d,\r
+0x0c55, 0x0c56,\r
+0x0c58, 0x0c5a,\r
+0x0c60, 0x0c63,\r
+0x0c66, 0x0c6f,\r
+0x0c80, 0x0c83,\r
+0x0c85, 0x0c8c,\r
+0x0c8e, 0x0c90,\r
+0x0c92, 0x0ca8,\r
+0x0caa, 0x0cb3,\r
+0x0cb5, 0x0cb9,\r
+0x0cbc, 0x0cc4,\r
+0x0cc6, 0x0cc8,\r
+0x0cca, 0x0ccd,\r
+0x0cd5, 0x0cd6,\r
+0x0cde, 0x0cde,\r
+0x0ce0, 0x0ce3,\r
+0x0ce6, 0x0cef,\r
+0x0cf1, 0x0cf2,\r
+0x0d00, 0x0d03,\r
+0x0d05, 0x0d0c,\r
+0x0d0e, 0x0d10,\r
+0x0d12, 0x0d44,\r
+0x0d46, 0x0d48,\r
+0x0d4a, 0x0d4e,\r
+0x0d54, 0x0d57,\r
+0x0d5f, 0x0d63,\r
+0x0d66, 0x0d6f,\r
+0x0d7a, 0x0d7f,\r
+0x0d82, 0x0d83,\r
+0x0d85, 0x0d96,\r
+0x0d9a, 0x0db1,\r
+0x0db3, 0x0dbb,\r
+0x0dbd, 0x0dbd,\r
+0x0dc0, 0x0dc6,\r
+0x0dca, 0x0dca,\r
+0x0dcf, 0x0dd4,\r
+0x0dd6, 0x0dd6,\r
+0x0dd8, 0x0ddf,\r
+0x0de6, 0x0def,\r
+0x0df2, 0x0df3,\r
+0x0e01, 0x0e3a,\r
+0x0e40, 0x0e4e,\r
+0x0e50, 0x0e59,\r
+0x0e81, 0x0e82,\r
+0x0e84, 0x0e84,\r
+0x0e87, 0x0e88,\r
+0x0e8a, 0x0e8a,\r
+0x0e8d, 0x0e8d,\r
+0x0e94, 0x0e97,\r
+0x0e99, 0x0e9f,\r
+0x0ea1, 0x0ea3,\r
+0x0ea5, 0x0ea5,\r
+0x0ea7, 0x0ea7,\r
+0x0eaa, 0x0eab,\r
+0x0ead, 0x0eb9,\r
+0x0ebb, 0x0ebd,\r
+0x0ec0, 0x0ec4,\r
+0x0ec6, 0x0ec6,\r
+0x0ec8, 0x0ecd,\r
+0x0ed0, 0x0ed9,\r
+0x0edc, 0x0edf,\r
+0x0f00, 0x0f00,\r
+0x0f18, 0x0f19,\r
+0x0f20, 0x0f29,\r
+0x0f35, 0x0f35,\r
+0x0f37, 0x0f37,\r
+0x0f39, 0x0f39,\r
+0x0f3e, 0x0f47,\r
+0x0f49, 0x0f6c,\r
+0x0f71, 0x0f84,\r
+0x0f86, 0x0f97,\r
+0x0f99, 0x0fbc,\r
+0x0fc6, 0x0fc6,\r
+0x1000, 0x1049,\r
+0x1050, 0x109d,\r
+0x10a0, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x10fa,\r
+0x10fc, 0x1248,\r
+0x124a, 0x124d,\r
+0x1250, 0x1256,\r
+0x1258, 0x1258,\r
+0x125a, 0x125d,\r
+0x1260, 0x1288,\r
+0x128a, 0x128d,\r
+0x1290, 0x12b0,\r
+0x12b2, 0x12b5,\r
+0x12b8, 0x12be,\r
+0x12c0, 0x12c0,\r
+0x12c2, 0x12c5,\r
+0x12c8, 0x12d6,\r
+0x12d8, 0x1310,\r
+0x1312, 0x1315,\r
+0x1318, 0x135a,\r
+0x135d, 0x135f,\r
+0x1369, 0x1371,\r
+0x1380, 0x138f,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0x1401, 0x166c,\r
+0x166f, 0x167f,\r
+0x1681, 0x169a,\r
+0x16a0, 0x16ea,\r
+0x16ee, 0x16f8,\r
+0x1700, 0x170c,\r
+0x170e, 0x1714,\r
+0x1720, 0x1734,\r
+0x1740, 0x1753,\r
+0x1760, 0x176c,\r
+0x176e, 0x1770,\r
+0x1772, 0x1773,\r
+0x1780, 0x17d3,\r
+0x17d7, 0x17d7,\r
+0x17dc, 0x17dd,\r
+0x17e0, 0x17e9,\r
+0x180b, 0x180d,\r
+0x1810, 0x1819,\r
+0x1820, 0x1878,\r
+0x1880, 0x18aa,\r
+0x18b0, 0x18f5,\r
+0x1900, 0x191e,\r
+0x1920, 0x192b,\r
+0x1930, 0x193b,\r
+0x1946, 0x196d,\r
+0x1970, 0x1974,\r
+0x1980, 0x19ab,\r
+0x19b0, 0x19c9,\r
+0x19d0, 0x19da,\r
+0x1a00, 0x1a1b,\r
+0x1a20, 0x1a5e,\r
+0x1a60, 0x1a7c,\r
+0x1a7f, 0x1a89,\r
+0x1a90, 0x1a99,\r
+0x1aa7, 0x1aa7,\r
+0x1ab0, 0x1abd,\r
+0x1b00, 0x1b4b,\r
+0x1b50, 0x1b59,\r
+0x1b6b, 0x1b73,\r
+0x1b80, 0x1bf3,\r
+0x1c00, 0x1c37,\r
+0x1c40, 0x1c49,\r
+0x1c4d, 0x1c7d,\r
+0x1c80, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cbf,\r
+0x1cd0, 0x1cd2,\r
+0x1cd4, 0x1cf9,\r
+0x1d00, 0x1df9,\r
+0x1dfb, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fbc,\r
+0x1fbe, 0x1fbe,\r
+0x1fc2, 0x1fc4,\r
+0x1fc6, 0x1fcc,\r
+0x1fd0, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fe0, 0x1fec,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffc,\r
+0x203f, 0x2040,\r
+0x2054, 0x2054,\r
+0x2071, 0x2071,\r
+0x207f, 0x207f,\r
+0x2090, 0x209c,\r
+0x20d0, 0x20dc,\r
+0x20e1, 0x20e1,\r
+0x20e5, 0x20f0,\r
+0x2102, 0x2102,\r
+0x2107, 0x2107,\r
+0x210a, 0x2113,\r
+0x2115, 0x2115,\r
+0x2118, 0x211d,\r
+0x2124, 0x2124,\r
+0x2126, 0x2126,\r
+0x2128, 0x2128,\r
+0x212a, 0x2139,\r
+0x213c, 0x213f,\r
+0x2145, 0x2149,\r
+0x214e, 0x214e,\r
+0x2160, 0x2188,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x2c60, 0x2ce4,\r
+0x2ceb, 0x2cf3,\r
+0x2d00, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0x2d30, 0x2d67,\r
+0x2d6f, 0x2d6f,\r
+0x2d7f, 0x2d96,\r
+0x2da0, 0x2da6,\r
+0x2da8, 0x2dae,\r
+0x2db0, 0x2db6,\r
+0x2db8, 0x2dbe,\r
+0x2dc0, 0x2dc6,\r
+0x2dc8, 0x2dce,\r
+0x2dd0, 0x2dd6,\r
+0x2dd8, 0x2dde,\r
+0x2de0, 0x2dff,\r
+0x3005, 0x3007,\r
+0x3021, 0x302f,\r
+0x3031, 0x3035,\r
+0x3038, 0x303c,\r
+0x3041, 0x3096,\r
+0x3099, 0x309f,\r
+0x30a1, 0x30fa,\r
+0x30fc, 0x30ff,\r
+0x3105, 0x312f,\r
+0x3131, 0x318e,\r
+0x31a0, 0x31ba,\r
+0x31f0, 0x31ff,\r
+0x3400, 0x4db5,\r
+0x4e00, 0x9fef,\r
+0xa000, 0xa48c,\r
+0xa4d0, 0xa4fd,\r
+0xa500, 0xa60c,\r
+0xa610, 0xa62b,\r
+0xa640, 0xa66f,\r
+0xa674, 0xa67d,\r
+0xa67f, 0xa6f1,\r
+0xa717, 0xa71f,\r
+0xa722, 0xa788,\r
+0xa78b, 0xa7b9,\r
+0xa7f7, 0xa827,\r
+0xa840, 0xa873,\r
+0xa880, 0xa8c5,\r
+0xa8d0, 0xa8d9,\r
+0xa8e0, 0xa8f7,\r
+0xa8fb, 0xa8fb,\r
+0xa8fd, 0xa92d,\r
+0xa930, 0xa953,\r
+0xa960, 0xa97c,\r
+0xa980, 0xa9c0,\r
+0xa9cf, 0xa9d9,\r
+0xa9e0, 0xa9fe,\r
+0xaa00, 0xaa36,\r
+0xaa40, 0xaa4d,\r
+0xaa50, 0xaa59,\r
+0xaa60, 0xaa76,\r
+0xaa7a, 0xaac2,\r
+0xaadb, 0xaadd,\r
+0xaae0, 0xaaef,\r
+0xaaf2, 0xaaf6,\r
+0xab01, 0xab06,\r
+0xab09, 0xab0e,\r
+0xab11, 0xab16,\r
+0xab20, 0xab26,\r
+0xab28, 0xab2e,\r
+0xab30, 0xab5a,\r
+0xab5c, 0xab65,\r
+0xab70, 0xabea,\r
+0xabec, 0xabed,\r
+0xabf0, 0xabf9,\r
+0xac00, 0xd7a3,\r
+0xd7b0, 0xd7c6,\r
+0xd7cb, 0xd7fb,\r
+0xf900, 0xfa6d,\r
+0xfa70, 0xfad9,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xfb1d, 0xfb28,\r
+0xfb2a, 0xfb36,\r
+0xfb38, 0xfb3c,\r
+0xfb3e, 0xfb3e,\r
+0xfb40, 0xfb41,\r
+0xfb43, 0xfb44,\r
+0xfb46, 0xfbb1,\r
+0xfbd3, 0xfd3d,\r
+0xfd50, 0xfd8f,\r
+0xfd92, 0xfdc7,\r
+0xfdf0, 0xfdfb,\r
+0xfe00, 0xfe0f,\r
+0xfe20, 0xfe2f,\r
+0xfe33, 0xfe34,\r
+0xfe4d, 0xfe4f,\r
+0xfe70, 0xfe74,\r
+0xfe76, 0xfefc,\r
+0xff10, 0xff19,\r
+0xff21, 0xff3a,\r
+0xff3f, 0xff3f,\r
+0xff41, 0xff5a,\r
+0xff66, 0xffbe,\r
+0xffc2, 0xffc7,\r
+0xffca, 0xffcf,\r
+0xffd2, 0xffd7,\r
+0xffda, 0xffdc,\r
+0x10000, 0x1000b,\r
+0x1000d, 0x10026,\r
+0x10028, 0x1003a,\r
+0x1003c, 0x1003d,\r
+0x1003f, 0x1004d,\r
+0x10050, 0x1005d,\r
+0x10080, 0x100fa,\r
+0x10140, 0x10174,\r
+0x101fd, 0x101fd,\r
+0x10280, 0x1029c,\r
+0x102a0, 0x102d0,\r
+0x102e0, 0x102e0,\r
+0x10300, 0x1031f,\r
+0x1032d, 0x1034a,\r
+0x10350, 0x1037a,\r
+0x10380, 0x1039d,\r
+0x103a0, 0x103c3,\r
+0x103c8, 0x103cf,\r
+0x103d1, 0x103d5,\r
+0x10400, 0x1049d,\r
+0x104a0, 0x104a9,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+0x10500, 0x10527,\r
+0x10530, 0x10563,\r
+0x10600, 0x10736,\r
+0x10740, 0x10755,\r
+0x10760, 0x10767,\r
+0x10800, 0x10805,\r
+0x10808, 0x10808,\r
+0x1080a, 0x10835,\r
+0x10837, 0x10838,\r
+0x1083c, 0x1083c,\r
+0x1083f, 0x10855,\r
+0x10860, 0x10876,\r
+0x10880, 0x1089e,\r
+0x108e0, 0x108f2,\r
+0x108f4, 0x108f5,\r
+0x10900, 0x10915,\r
+0x10920, 0x10939,\r
+0x10980, 0x109b7,\r
+0x109be, 0x109bf,\r
+0x10a00, 0x10a03,\r
+0x10a05, 0x10a06,\r
+0x10a0c, 0x10a13,\r
+0x10a15, 0x10a17,\r
+0x10a19, 0x10a35,\r
+0x10a38, 0x10a3a,\r
+0x10a3f, 0x10a3f,\r
+0x10a60, 0x10a7c,\r
+0x10a80, 0x10a9c,\r
+0x10ac0, 0x10ac7,\r
+0x10ac9, 0x10ae6,\r
+0x10b00, 0x10b35,\r
+0x10b40, 0x10b55,\r
+0x10b60, 0x10b72,\r
+0x10b80, 0x10b91,\r
+0x10c00, 0x10c48,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x10d00, 0x10d27,\r
+0x10d30, 0x10d39,\r
+0x10f00, 0x10f1c,\r
+0x10f27, 0x10f27,\r
+0x10f30, 0x10f50,\r
+0x11000, 0x11046,\r
+0x11066, 0x1106f,\r
+0x1107f, 0x110ba,\r
+0x110d0, 0x110e8,\r
+0x110f0, 0x110f9,\r
+0x11100, 0x11134,\r
+0x11136, 0x1113f,\r
+0x11144, 0x11146,\r
+0x11150, 0x11173,\r
+0x11176, 0x11176,\r
+0x11180, 0x111c4,\r
+0x111c9, 0x111cc,\r
+0x111d0, 0x111da,\r
+0x111dc, 0x111dc,\r
+0x11200, 0x11211,\r
+0x11213, 0x11237,\r
+0x1123e, 0x1123e,\r
+0x11280, 0x11286,\r
+0x11288, 0x11288,\r
+0x1128a, 0x1128d,\r
+0x1128f, 0x1129d,\r
+0x1129f, 0x112a8,\r
+0x112b0, 0x112ea,\r
+0x112f0, 0x112f9,\r
+0x11300, 0x11303,\r
+0x11305, 0x1130c,\r
+0x1130f, 0x11310,\r
+0x11313, 0x11328,\r
+0x1132a, 0x11330,\r
+0x11332, 0x11333,\r
+0x11335, 0x11339,\r
+0x1133b, 0x11344,\r
+0x11347, 0x11348,\r
+0x1134b, 0x1134d,\r
+0x11350, 0x11350,\r
+0x11357, 0x11357,\r
+0x1135d, 0x11363,\r
+0x11366, 0x1136c,\r
+0x11370, 0x11374,\r
+0x11400, 0x1144a,\r
+0x11450, 0x11459,\r
+0x1145e, 0x1145e,\r
+0x11480, 0x114c5,\r
+0x114c7, 0x114c7,\r
+0x114d0, 0x114d9,\r
+0x11580, 0x115b5,\r
+0x115b8, 0x115c0,\r
+0x115d8, 0x115dd,\r
+0x11600, 0x11640,\r
+0x11644, 0x11644,\r
+0x11650, 0x11659,\r
+0x11680, 0x116b7,\r
+0x116c0, 0x116c9,\r
+0x11700, 0x1171a,\r
+0x1171d, 0x1172b,\r
+0x11730, 0x11739,\r
+0x11800, 0x1183a,\r
+0x118a0, 0x118e9,\r
+0x118ff, 0x118ff,\r
+0x11a00, 0x11a3e,\r
+0x11a47, 0x11a47,\r
+0x11a50, 0x11a83,\r
+0x11a86, 0x11a99,\r
+0x11a9d, 0x11a9d,\r
+0x11ac0, 0x11af8,\r
+0x11c00, 0x11c08,\r
+0x11c0a, 0x11c36,\r
+0x11c38, 0x11c40,\r
+0x11c50, 0x11c59,\r
+0x11c72, 0x11c8f,\r
+0x11c92, 0x11ca7,\r
+0x11ca9, 0x11cb6,\r
+0x11d00, 0x11d06,\r
+0x11d08, 0x11d09,\r
+0x11d0b, 0x11d36,\r
+0x11d3a, 0x11d3a,\r
+0x11d3c, 0x11d3d,\r
+0x11d3f, 0x11d47,\r
+0x11d50, 0x11d59,\r
+0x11d60, 0x11d65,\r
+0x11d67, 0x11d68,\r
+0x11d6a, 0x11d8e,\r
+0x11d90, 0x11d91,\r
+0x11d93, 0x11d98,\r
+0x11da0, 0x11da9,\r
+0x11ee0, 0x11ef6,\r
+0x12000, 0x12399,\r
+0x12400, 0x1246e,\r
+0x12480, 0x12543,\r
+0x13000, 0x1342e,\r
+0x14400, 0x14646,\r
+0x16800, 0x16a38,\r
+0x16a40, 0x16a5e,\r
+0x16a60, 0x16a69,\r
+0x16ad0, 0x16aed,\r
+0x16af0, 0x16af4,\r
+0x16b00, 0x16b36,\r
+0x16b40, 0x16b43,\r
+0x16b50, 0x16b59,\r
+0x16b63, 0x16b77,\r
+0x16b7d, 0x16b8f,\r
+0x16e40, 0x16e7f,\r
+0x16f00, 0x16f44,\r
+0x16f50, 0x16f7e,\r
+0x16f8f, 0x16f9f,\r
+0x16fe0, 0x16fe1,\r
+0x17000, 0x187f1,\r
+0x18800, 0x18af2,\r
+0x1b000, 0x1b11e,\r
+0x1b170, 0x1b2fb,\r
+0x1bc00, 0x1bc6a,\r
+0x1bc70, 0x1bc7c,\r
+0x1bc80, 0x1bc88,\r
+0x1bc90, 0x1bc99,\r
+0x1bc9d, 0x1bc9e,\r
+0x1d165, 0x1d169,\r
+0x1d16d, 0x1d172,\r
+0x1d17b, 0x1d182,\r
+0x1d185, 0x1d18b,\r
+0x1d1aa, 0x1d1ad,\r
+0x1d242, 0x1d244,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d6c0,\r
+0x1d6c2, 0x1d6da,\r
+0x1d6dc, 0x1d6fa,\r
+0x1d6fc, 0x1d714,\r
+0x1d716, 0x1d734,\r
+0x1d736, 0x1d74e,\r
+0x1d750, 0x1d76e,\r
+0x1d770, 0x1d788,\r
+0x1d78a, 0x1d7a8,\r
+0x1d7aa, 0x1d7c2,\r
+0x1d7c4, 0x1d7cb,\r
+0x1d7ce, 0x1d7ff,\r
+0x1da00, 0x1da36,\r
+0x1da3b, 0x1da6c,\r
+0x1da75, 0x1da75,\r
+0x1da84, 0x1da84,\r
+0x1da9b, 0x1da9f,\r
+0x1daa1, 0x1daaf,\r
+0x1e000, 0x1e006,\r
+0x1e008, 0x1e018,\r
+0x1e01b, 0x1e021,\r
+0x1e023, 0x1e024,\r
+0x1e026, 0x1e02a,\r
+0x1e800, 0x1e8c4,\r
+0x1e8d0, 0x1e8d6,\r
+0x1e900, 0x1e94a,\r
+0x1e950, 0x1e959,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+0x2f800, 0x2fa1d,\r
+0xe0100, 0xe01ef,\r
+}; /* END of CR_ID_Continue */\r
+\r
+/* PROPERTY: 'ID_Start': Derived Property */\r
+static const OnigCodePoint\r
+CR_ID_Start[] = { 599,\r
+0x0041, 0x005a,\r
+0x0061, 0x007a,\r
+0x00aa, 0x00aa,\r
+0x00b5, 0x00b5,\r
+0x00ba, 0x00ba,\r
+0x00c0, 0x00d6,\r
+0x00d8, 0x00f6,\r
+0x00f8, 0x02c1,\r
+0x02c6, 0x02d1,\r
+0x02e0, 0x02e4,\r
+0x02ec, 0x02ec,\r
+0x02ee, 0x02ee,\r
+0x0370, 0x0374,\r
+0x0376, 0x0377,\r
+0x037a, 0x037d,\r
+0x037f, 0x037f,\r
+0x0386, 0x0386,\r
+0x0388, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x03f5,\r
+0x03f7, 0x0481,\r
+0x048a, 0x052f,\r
+0x0531, 0x0556,\r
+0x0559, 0x0559,\r
+0x0560, 0x0588,\r
+0x05d0, 0x05ea,\r
+0x05ef, 0x05f2,\r
+0x0620, 0x064a,\r
+0x066e, 0x066f,\r
+0x0671, 0x06d3,\r
+0x06d5, 0x06d5,\r
+0x06e5, 0x06e6,\r
+0x06ee, 0x06ef,\r
+0x06fa, 0x06fc,\r
+0x06ff, 0x06ff,\r
+0x0710, 0x0710,\r
+0x0712, 0x072f,\r
+0x074d, 0x07a5,\r
+0x07b1, 0x07b1,\r
+0x07ca, 0x07ea,\r
+0x07f4, 0x07f5,\r
+0x07fa, 0x07fa,\r
+0x0800, 0x0815,\r
+0x081a, 0x081a,\r
+0x0824, 0x0824,\r
+0x0828, 0x0828,\r
+0x0840, 0x0858,\r
+0x0860, 0x086a,\r
+0x08a0, 0x08b4,\r
+0x08b6, 0x08bd,\r
+0x0904, 0x0939,\r
+0x093d, 0x093d,\r
+0x0950, 0x0950,\r
+0x0958, 0x0961,\r
+0x0971, 0x0980,\r
+0x0985, 0x098c,\r
+0x098f, 0x0990,\r
+0x0993, 0x09a8,\r
+0x09aa, 0x09b0,\r
+0x09b2, 0x09b2,\r
+0x09b6, 0x09b9,\r
+0x09bd, 0x09bd,\r
+0x09ce, 0x09ce,\r
+0x09dc, 0x09dd,\r
+0x09df, 0x09e1,\r
+0x09f0, 0x09f1,\r
+0x09fc, 0x09fc,\r
+0x0a05, 0x0a0a,\r
+0x0a0f, 0x0a10,\r
+0x0a13, 0x0a28,\r
+0x0a2a, 0x0a30,\r
+0x0a32, 0x0a33,\r
+0x0a35, 0x0a36,\r
+0x0a38, 0x0a39,\r
+0x0a59, 0x0a5c,\r
+0x0a5e, 0x0a5e,\r
+0x0a72, 0x0a74,\r
+0x0a85, 0x0a8d,\r
+0x0a8f, 0x0a91,\r
+0x0a93, 0x0aa8,\r
+0x0aaa, 0x0ab0,\r
+0x0ab2, 0x0ab3,\r
+0x0ab5, 0x0ab9,\r
+0x0abd, 0x0abd,\r
+0x0ad0, 0x0ad0,\r
+0x0ae0, 0x0ae1,\r
+0x0af9, 0x0af9,\r
+0x0b05, 0x0b0c,\r
+0x0b0f, 0x0b10,\r
+0x0b13, 0x0b28,\r
+0x0b2a, 0x0b30,\r
+0x0b32, 0x0b33,\r
+0x0b35, 0x0b39,\r
+0x0b3d, 0x0b3d,\r
+0x0b5c, 0x0b5d,\r
+0x0b5f, 0x0b61,\r
+0x0b71, 0x0b71,\r
+0x0b83, 0x0b83,\r
+0x0b85, 0x0b8a,\r
+0x0b8e, 0x0b90,\r
+0x0b92, 0x0b95,\r
+0x0b99, 0x0b9a,\r
+0x0b9c, 0x0b9c,\r
+0x0b9e, 0x0b9f,\r
+0x0ba3, 0x0ba4,\r
+0x0ba8, 0x0baa,\r
+0x0bae, 0x0bb9,\r
+0x0bd0, 0x0bd0,\r
+0x0c05, 0x0c0c,\r
+0x0c0e, 0x0c10,\r
+0x0c12, 0x0c28,\r
+0x0c2a, 0x0c39,\r
+0x0c3d, 0x0c3d,\r
+0x0c58, 0x0c5a,\r
+0x0c60, 0x0c61,\r
+0x0c80, 0x0c80,\r
+0x0c85, 0x0c8c,\r
+0x0c8e, 0x0c90,\r
+0x0c92, 0x0ca8,\r
+0x0caa, 0x0cb3,\r
+0x0cb5, 0x0cb9,\r
+0x0cbd, 0x0cbd,\r
+0x0cde, 0x0cde,\r
+0x0ce0, 0x0ce1,\r
+0x0cf1, 0x0cf2,\r
+0x0d05, 0x0d0c,\r
+0x0d0e, 0x0d10,\r
+0x0d12, 0x0d3a,\r
+0x0d3d, 0x0d3d,\r
+0x0d4e, 0x0d4e,\r
+0x0d54, 0x0d56,\r
+0x0d5f, 0x0d61,\r
+0x0d7a, 0x0d7f,\r
+0x0d85, 0x0d96,\r
+0x0d9a, 0x0db1,\r
+0x0db3, 0x0dbb,\r
+0x0dbd, 0x0dbd,\r
+0x0dc0, 0x0dc6,\r
+0x0e01, 0x0e30,\r
+0x0e32, 0x0e33,\r
+0x0e40, 0x0e46,\r
+0x0e81, 0x0e82,\r
+0x0e84, 0x0e84,\r
+0x0e87, 0x0e88,\r
+0x0e8a, 0x0e8a,\r
+0x0e8d, 0x0e8d,\r
+0x0e94, 0x0e97,\r
+0x0e99, 0x0e9f,\r
+0x0ea1, 0x0ea3,\r
+0x0ea5, 0x0ea5,\r
+0x0ea7, 0x0ea7,\r
+0x0eaa, 0x0eab,\r
+0x0ead, 0x0eb0,\r
+0x0eb2, 0x0eb3,\r
+0x0ebd, 0x0ebd,\r
+0x0ec0, 0x0ec4,\r
+0x0ec6, 0x0ec6,\r
+0x0edc, 0x0edf,\r
+0x0f00, 0x0f00,\r
+0x0f40, 0x0f47,\r
+0x0f49, 0x0f6c,\r
+0x0f88, 0x0f8c,\r
+0x1000, 0x102a,\r
+0x103f, 0x103f,\r
+0x1050, 0x1055,\r
+0x105a, 0x105d,\r
+0x1061, 0x1061,\r
+0x1065, 0x1066,\r
+0x106e, 0x1070,\r
+0x1075, 0x1081,\r
+0x108e, 0x108e,\r
+0x10a0, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x10fa,\r
+0x10fc, 0x1248,\r
+0x124a, 0x124d,\r
+0x1250, 0x1256,\r
+0x1258, 0x1258,\r
+0x125a, 0x125d,\r
+0x1260, 0x1288,\r
+0x128a, 0x128d,\r
+0x1290, 0x12b0,\r
+0x12b2, 0x12b5,\r
+0x12b8, 0x12be,\r
+0x12c0, 0x12c0,\r
+0x12c2, 0x12c5,\r
+0x12c8, 0x12d6,\r
+0x12d8, 0x1310,\r
+0x1312, 0x1315,\r
+0x1318, 0x135a,\r
+0x1380, 0x138f,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0x1401, 0x166c,\r
+0x166f, 0x167f,\r
+0x1681, 0x169a,\r
+0x16a0, 0x16ea,\r
+0x16ee, 0x16f8,\r
+0x1700, 0x170c,\r
+0x170e, 0x1711,\r
+0x1720, 0x1731,\r
+0x1740, 0x1751,\r
+0x1760, 0x176c,\r
+0x176e, 0x1770,\r
+0x1780, 0x17b3,\r
+0x17d7, 0x17d7,\r
+0x17dc, 0x17dc,\r
+0x1820, 0x1878,\r
+0x1880, 0x18a8,\r
+0x18aa, 0x18aa,\r
+0x18b0, 0x18f5,\r
+0x1900, 0x191e,\r
+0x1950, 0x196d,\r
+0x1970, 0x1974,\r
+0x1980, 0x19ab,\r
+0x19b0, 0x19c9,\r
+0x1a00, 0x1a16,\r
+0x1a20, 0x1a54,\r
+0x1aa7, 0x1aa7,\r
+0x1b05, 0x1b33,\r
+0x1b45, 0x1b4b,\r
+0x1b83, 0x1ba0,\r
+0x1bae, 0x1baf,\r
+0x1bba, 0x1be5,\r
+0x1c00, 0x1c23,\r
+0x1c4d, 0x1c4f,\r
+0x1c5a, 0x1c7d,\r
+0x1c80, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cbf,\r
+0x1ce9, 0x1cec,\r
+0x1cee, 0x1cf1,\r
+0x1cf5, 0x1cf6,\r
+0x1d00, 0x1dbf,\r
+0x1e00, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fbc,\r
+0x1fbe, 0x1fbe,\r
+0x1fc2, 0x1fc4,\r
+0x1fc6, 0x1fcc,\r
+0x1fd0, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fe0, 0x1fec,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffc,\r
+0x2071, 0x2071,\r
+0x207f, 0x207f,\r
+0x2090, 0x209c,\r
+0x2102, 0x2102,\r
+0x2107, 0x2107,\r
+0x210a, 0x2113,\r
+0x2115, 0x2115,\r
+0x2118, 0x211d,\r
+0x2124, 0x2124,\r
+0x2126, 0x2126,\r
+0x2128, 0x2128,\r
+0x212a, 0x2139,\r
+0x213c, 0x213f,\r
+0x2145, 0x2149,\r
+0x214e, 0x214e,\r
+0x2160, 0x2188,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x2c60, 0x2ce4,\r
+0x2ceb, 0x2cee,\r
+0x2cf2, 0x2cf3,\r
+0x2d00, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0x2d30, 0x2d67,\r
+0x2d6f, 0x2d6f,\r
+0x2d80, 0x2d96,\r
+0x2da0, 0x2da6,\r
+0x2da8, 0x2dae,\r
+0x2db0, 0x2db6,\r
+0x2db8, 0x2dbe,\r
+0x2dc0, 0x2dc6,\r
+0x2dc8, 0x2dce,\r
+0x2dd0, 0x2dd6,\r
+0x2dd8, 0x2dde,\r
+0x3005, 0x3007,\r
+0x3021, 0x3029,\r
+0x3031, 0x3035,\r
+0x3038, 0x303c,\r
+0x3041, 0x3096,\r
+0x309b, 0x309f,\r
+0x30a1, 0x30fa,\r
+0x30fc, 0x30ff,\r
+0x3105, 0x312f,\r
+0x3131, 0x318e,\r
+0x31a0, 0x31ba,\r
+0x31f0, 0x31ff,\r
+0x3400, 0x4db5,\r
+0x4e00, 0x9fef,\r
+0xa000, 0xa48c,\r
+0xa4d0, 0xa4fd,\r
+0xa500, 0xa60c,\r
+0xa610, 0xa61f,\r
+0xa62a, 0xa62b,\r
+0xa640, 0xa66e,\r
+0xa67f, 0xa69d,\r
+0xa6a0, 0xa6ef,\r
+0xa717, 0xa71f,\r
+0xa722, 0xa788,\r
+0xa78b, 0xa7b9,\r
+0xa7f7, 0xa801,\r
+0xa803, 0xa805,\r
+0xa807, 0xa80a,\r
+0xa80c, 0xa822,\r
+0xa840, 0xa873,\r
+0xa882, 0xa8b3,\r
+0xa8f2, 0xa8f7,\r
+0xa8fb, 0xa8fb,\r
+0xa8fd, 0xa8fe,\r
+0xa90a, 0xa925,\r
+0xa930, 0xa946,\r
+0xa960, 0xa97c,\r
+0xa984, 0xa9b2,\r
+0xa9cf, 0xa9cf,\r
+0xa9e0, 0xa9e4,\r
+0xa9e6, 0xa9ef,\r
+0xa9fa, 0xa9fe,\r
+0xaa00, 0xaa28,\r
+0xaa40, 0xaa42,\r
+0xaa44, 0xaa4b,\r
+0xaa60, 0xaa76,\r
+0xaa7a, 0xaa7a,\r
+0xaa7e, 0xaaaf,\r
+0xaab1, 0xaab1,\r
+0xaab5, 0xaab6,\r
+0xaab9, 0xaabd,\r
+0xaac0, 0xaac0,\r
+0xaac2, 0xaac2,\r
+0xaadb, 0xaadd,\r
+0xaae0, 0xaaea,\r
+0xaaf2, 0xaaf4,\r
+0xab01, 0xab06,\r
+0xab09, 0xab0e,\r
+0xab11, 0xab16,\r
+0xab20, 0xab26,\r
+0xab28, 0xab2e,\r
+0xab30, 0xab5a,\r
+0xab5c, 0xab65,\r
+0xab70, 0xabe2,\r
+0xac00, 0xd7a3,\r
+0xd7b0, 0xd7c6,\r
+0xd7cb, 0xd7fb,\r
+0xf900, 0xfa6d,\r
+0xfa70, 0xfad9,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xfb1d, 0xfb1d,\r
+0xfb1f, 0xfb28,\r
+0xfb2a, 0xfb36,\r
+0xfb38, 0xfb3c,\r
+0xfb3e, 0xfb3e,\r
+0xfb40, 0xfb41,\r
+0xfb43, 0xfb44,\r
+0xfb46, 0xfbb1,\r
+0xfbd3, 0xfd3d,\r
+0xfd50, 0xfd8f,\r
+0xfd92, 0xfdc7,\r
+0xfdf0, 0xfdfb,\r
+0xfe70, 0xfe74,\r
+0xfe76, 0xfefc,\r
+0xff21, 0xff3a,\r
+0xff41, 0xff5a,\r
+0xff66, 0xffbe,\r
+0xffc2, 0xffc7,\r
+0xffca, 0xffcf,\r
+0xffd2, 0xffd7,\r
+0xffda, 0xffdc,\r
+0x10000, 0x1000b,\r
+0x1000d, 0x10026,\r
+0x10028, 0x1003a,\r
+0x1003c, 0x1003d,\r
+0x1003f, 0x1004d,\r
+0x10050, 0x1005d,\r
+0x10080, 0x100fa,\r
+0x10140, 0x10174,\r
+0x10280, 0x1029c,\r
+0x102a0, 0x102d0,\r
+0x10300, 0x1031f,\r
+0x1032d, 0x1034a,\r
+0x10350, 0x10375,\r
+0x10380, 0x1039d,\r
+0x103a0, 0x103c3,\r
+0x103c8, 0x103cf,\r
+0x103d1, 0x103d5,\r
+0x10400, 0x1049d,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+0x10500, 0x10527,\r
+0x10530, 0x10563,\r
+0x10600, 0x10736,\r
+0x10740, 0x10755,\r
+0x10760, 0x10767,\r
+0x10800, 0x10805,\r
+0x10808, 0x10808,\r
+0x1080a, 0x10835,\r
+0x10837, 0x10838,\r
+0x1083c, 0x1083c,\r
+0x1083f, 0x10855,\r
+0x10860, 0x10876,\r
+0x10880, 0x1089e,\r
+0x108e0, 0x108f2,\r
+0x108f4, 0x108f5,\r
+0x10900, 0x10915,\r
+0x10920, 0x10939,\r
+0x10980, 0x109b7,\r
+0x109be, 0x109bf,\r
+0x10a00, 0x10a00,\r
+0x10a10, 0x10a13,\r
+0x10a15, 0x10a17,\r
+0x10a19, 0x10a35,\r
+0x10a60, 0x10a7c,\r
+0x10a80, 0x10a9c,\r
+0x10ac0, 0x10ac7,\r
+0x10ac9, 0x10ae4,\r
+0x10b00, 0x10b35,\r
+0x10b40, 0x10b55,\r
+0x10b60, 0x10b72,\r
+0x10b80, 0x10b91,\r
+0x10c00, 0x10c48,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x10d00, 0x10d23,\r
+0x10f00, 0x10f1c,\r
+0x10f27, 0x10f27,\r
+0x10f30, 0x10f45,\r
+0x11003, 0x11037,\r
+0x11083, 0x110af,\r
+0x110d0, 0x110e8,\r
+0x11103, 0x11126,\r
+0x11144, 0x11144,\r
+0x11150, 0x11172,\r
+0x11176, 0x11176,\r
+0x11183, 0x111b2,\r
+0x111c1, 0x111c4,\r
+0x111da, 0x111da,\r
+0x111dc, 0x111dc,\r
+0x11200, 0x11211,\r
+0x11213, 0x1122b,\r
+0x11280, 0x11286,\r
+0x11288, 0x11288,\r
+0x1128a, 0x1128d,\r
+0x1128f, 0x1129d,\r
+0x1129f, 0x112a8,\r
+0x112b0, 0x112de,\r
+0x11305, 0x1130c,\r
+0x1130f, 0x11310,\r
+0x11313, 0x11328,\r
+0x1132a, 0x11330,\r
+0x11332, 0x11333,\r
+0x11335, 0x11339,\r
+0x1133d, 0x1133d,\r
+0x11350, 0x11350,\r
+0x1135d, 0x11361,\r
+0x11400, 0x11434,\r
+0x11447, 0x1144a,\r
+0x11480, 0x114af,\r
+0x114c4, 0x114c5,\r
+0x114c7, 0x114c7,\r
+0x11580, 0x115ae,\r
+0x115d8, 0x115db,\r
+0x11600, 0x1162f,\r
+0x11644, 0x11644,\r
+0x11680, 0x116aa,\r
+0x11700, 0x1171a,\r
+0x11800, 0x1182b,\r
+0x118a0, 0x118df,\r
+0x118ff, 0x118ff,\r
+0x11a00, 0x11a00,\r
+0x11a0b, 0x11a32,\r
+0x11a3a, 0x11a3a,\r
+0x11a50, 0x11a50,\r
+0x11a5c, 0x11a83,\r
+0x11a86, 0x11a89,\r
+0x11a9d, 0x11a9d,\r
+0x11ac0, 0x11af8,\r
+0x11c00, 0x11c08,\r
+0x11c0a, 0x11c2e,\r
+0x11c40, 0x11c40,\r
+0x11c72, 0x11c8f,\r
+0x11d00, 0x11d06,\r
+0x11d08, 0x11d09,\r
+0x11d0b, 0x11d30,\r
+0x11d46, 0x11d46,\r
+0x11d60, 0x11d65,\r
+0x11d67, 0x11d68,\r
+0x11d6a, 0x11d89,\r
+0x11d98, 0x11d98,\r
+0x11ee0, 0x11ef2,\r
+0x12000, 0x12399,\r
+0x12400, 0x1246e,\r
+0x12480, 0x12543,\r
+0x13000, 0x1342e,\r
+0x14400, 0x14646,\r
+0x16800, 0x16a38,\r
+0x16a40, 0x16a5e,\r
+0x16ad0, 0x16aed,\r
+0x16b00, 0x16b2f,\r
+0x16b40, 0x16b43,\r
+0x16b63, 0x16b77,\r
+0x16b7d, 0x16b8f,\r
+0x16e40, 0x16e7f,\r
+0x16f00, 0x16f44,\r
+0x16f50, 0x16f50,\r
+0x16f93, 0x16f9f,\r
+0x16fe0, 0x16fe1,\r
+0x17000, 0x187f1,\r
+0x18800, 0x18af2,\r
+0x1b000, 0x1b11e,\r
+0x1b170, 0x1b2fb,\r
+0x1bc00, 0x1bc6a,\r
+0x1bc70, 0x1bc7c,\r
+0x1bc80, 0x1bc88,\r
+0x1bc90, 0x1bc99,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d6c0,\r
+0x1d6c2, 0x1d6da,\r
+0x1d6dc, 0x1d6fa,\r
+0x1d6fc, 0x1d714,\r
+0x1d716, 0x1d734,\r
+0x1d736, 0x1d74e,\r
+0x1d750, 0x1d76e,\r
+0x1d770, 0x1d788,\r
+0x1d78a, 0x1d7a8,\r
+0x1d7aa, 0x1d7c2,\r
+0x1d7c4, 0x1d7cb,\r
+0x1e800, 0x1e8c4,\r
+0x1e900, 0x1e943,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+0x2f800, 0x2fa1d,\r
+}; /* END of CR_ID_Start */\r
+\r
+/* PROPERTY: 'Ideographic': Binary Property */\r
+static const OnigCodePoint\r
+CR_Ideographic[] = { 16,\r
+0x3006, 0x3007,\r
+0x3021, 0x3029,\r
+0x3038, 0x303a,\r
+0x3400, 0x4db5,\r
+0x4e00, 0x9fef,\r
+0xf900, 0xfa6d,\r
+0xfa70, 0xfad9,\r
+0x17000, 0x187f1,\r
+0x18800, 0x18af2,\r
+0x1b170, 0x1b2fb,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+0x2f800, 0x2fa1d,\r
+}; /* END of CR_Ideographic */\r
+\r
+/* PROPERTY: 'Imperial_Aramaic': Script */\r
+static const OnigCodePoint\r
+CR_Imperial_Aramaic[] = { 2,\r
+0x10840, 0x10855,\r
+0x10857, 0x1085f,\r
+}; /* END of CR_Imperial_Aramaic */\r
+\r
+/* PROPERTY: 'Inherited': Script */\r
+static const OnigCodePoint\r
+CR_Inherited[] = { 28,\r
+0x0300, 0x036f,\r
+0x0485, 0x0486,\r
+0x064b, 0x0655,\r
+0x0670, 0x0670,\r
+0x0951, 0x0952,\r
+0x1ab0, 0x1abe,\r
+0x1cd0, 0x1cd2,\r
+0x1cd4, 0x1ce0,\r
+0x1ce2, 0x1ce8,\r
+0x1ced, 0x1ced,\r
+0x1cf4, 0x1cf4,\r
+0x1cf8, 0x1cf9,\r
+0x1dc0, 0x1df9,\r
+0x1dfb, 0x1dff,\r
+0x200c, 0x200d,\r
+0x20d0, 0x20f0,\r
+0x302a, 0x302d,\r
+0x3099, 0x309a,\r
+0xfe00, 0xfe0f,\r
+0xfe20, 0xfe2d,\r
+0x101fd, 0x101fd,\r
+0x102e0, 0x102e0,\r
+0x1133b, 0x1133b,\r
+0x1d167, 0x1d169,\r
+0x1d17b, 0x1d182,\r
+0x1d185, 0x1d18b,\r
+0x1d1aa, 0x1d1ad,\r
+0xe0100, 0xe01ef,\r
+}; /* END of CR_Inherited */\r
+\r
+/* PROPERTY: 'Inscriptional_Pahlavi': Script */\r
+static const OnigCodePoint\r
+CR_Inscriptional_Pahlavi[] = { 2,\r
+0x10b60, 0x10b72,\r
+0x10b78, 0x10b7f,\r
+}; /* END of CR_Inscriptional_Pahlavi */\r
+\r
+/* PROPERTY: 'Inscriptional_Parthian': Script */\r
+static const OnigCodePoint\r
+CR_Inscriptional_Parthian[] = { 2,\r
+0x10b40, 0x10b55,\r
+0x10b58, 0x10b5f,\r
+}; /* END of CR_Inscriptional_Parthian */\r
+\r
+/* PROPERTY: 'Javanese': Script */\r
+static const OnigCodePoint\r
+CR_Javanese[] = { 3,\r
+0xa980, 0xa9cd,\r
+0xa9d0, 0xa9d9,\r
+0xa9de, 0xa9df,\r
+}; /* END of CR_Javanese */\r
+\r
+/* PROPERTY: 'Join_Control': Binary Property */\r
+static const OnigCodePoint\r
+CR_Join_Control[] = { 1,\r
+0x200c, 0x200d,\r
+}; /* END of CR_Join_Control */\r
+\r
+/* PROPERTY: 'Kaithi': Script */\r
+static const OnigCodePoint\r
+CR_Kaithi[] = { 2,\r
+0x11080, 0x110c1,\r
+0x110cd, 0x110cd,\r
+}; /* END of CR_Kaithi */\r
+\r
+/* PROPERTY: 'Kannada': Script */\r
+static const OnigCodePoint\r
+CR_Kannada[] = { 13,\r
+0x0c80, 0x0c8c,\r
+0x0c8e, 0x0c90,\r
+0x0c92, 0x0ca8,\r
+0x0caa, 0x0cb3,\r
+0x0cb5, 0x0cb9,\r
+0x0cbc, 0x0cc4,\r
+0x0cc6, 0x0cc8,\r
+0x0cca, 0x0ccd,\r
+0x0cd5, 0x0cd6,\r
+0x0cde, 0x0cde,\r
+0x0ce0, 0x0ce3,\r
+0x0ce6, 0x0cef,\r
+0x0cf1, 0x0cf2,\r
+}; /* END of CR_Kannada */\r
+\r
+/* PROPERTY: 'Katakana': Script */\r
+static const OnigCodePoint\r
+CR_Katakana[] = { 8,\r
+0x30a1, 0x30fa,\r
+0x30fd, 0x30ff,\r
+0x31f0, 0x31ff,\r
+0x32d0, 0x32fe,\r
+0x3300, 0x3357,\r
+0xff66, 0xff6f,\r
+0xff71, 0xff9d,\r
+0x1b000, 0x1b000,\r
+}; /* END of CR_Katakana */\r
+\r
+/* PROPERTY: 'Kayah_Li': Script */\r
+static const OnigCodePoint\r
+CR_Kayah_Li[] = { 2,\r
+0xa900, 0xa92d,\r
+0xa92f, 0xa92f,\r
+}; /* END of CR_Kayah_Li */\r
+\r
+/* PROPERTY: 'Kharoshthi': Script */\r
+static const OnigCodePoint\r
+CR_Kharoshthi[] = { 8,\r
+0x10a00, 0x10a03,\r
+0x10a05, 0x10a06,\r
+0x10a0c, 0x10a13,\r
+0x10a15, 0x10a17,\r
+0x10a19, 0x10a35,\r
+0x10a38, 0x10a3a,\r
+0x10a3f, 0x10a48,\r
+0x10a50, 0x10a58,\r
+}; /* END of CR_Kharoshthi */\r
+\r
+/* PROPERTY: 'Khmer': Script */\r
+static const OnigCodePoint\r
+CR_Khmer[] = { 4,\r
+0x1780, 0x17dd,\r
+0x17e0, 0x17e9,\r
+0x17f0, 0x17f9,\r
+0x19e0, 0x19ff,\r
+}; /* END of CR_Khmer */\r
+\r
+/* PROPERTY: 'Khojki': Script */\r
+static const OnigCodePoint\r
+CR_Khojki[] = { 2,\r
+0x11200, 0x11211,\r
+0x11213, 0x1123e,\r
+}; /* END of CR_Khojki */\r
+\r
+/* PROPERTY: 'Khudawadi': Script */\r
+static const OnigCodePoint\r
+CR_Khudawadi[] = { 2,\r
+0x112b0, 0x112ea,\r
+0x112f0, 0x112f9,\r
+}; /* END of CR_Khudawadi */\r
+\r
+/* PROPERTY: 'L': Major Category */\r
+static const OnigCodePoint\r
+CR_L[] = { 599,\r
+0x0041, 0x005a,\r
+0x0061, 0x007a,\r
+0x00aa, 0x00aa,\r
+0x00b5, 0x00b5,\r
+0x00ba, 0x00ba,\r
+0x00c0, 0x00d6,\r
+0x00d8, 0x00f6,\r
+0x00f8, 0x02c1,\r
+0x02c6, 0x02d1,\r
+0x02e0, 0x02e4,\r
+0x02ec, 0x02ec,\r
+0x02ee, 0x02ee,\r
+0x0370, 0x0374,\r
+0x0376, 0x0377,\r
+0x037a, 0x037d,\r
+0x037f, 0x037f,\r
+0x0386, 0x0386,\r
+0x0388, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x03f5,\r
+0x03f7, 0x0481,\r
+0x048a, 0x052f,\r
+0x0531, 0x0556,\r
+0x0559, 0x0559,\r
+0x0560, 0x0588,\r
+0x05d0, 0x05ea,\r
+0x05ef, 0x05f2,\r
+0x0620, 0x064a,\r
+0x066e, 0x066f,\r
+0x0671, 0x06d3,\r
+0x06d5, 0x06d5,\r
+0x06e5, 0x06e6,\r
+0x06ee, 0x06ef,\r
+0x06fa, 0x06fc,\r
+0x06ff, 0x06ff,\r
+0x0710, 0x0710,\r
+0x0712, 0x072f,\r
+0x074d, 0x07a5,\r
+0x07b1, 0x07b1,\r
+0x07ca, 0x07ea,\r
+0x07f4, 0x07f5,\r
+0x07fa, 0x07fa,\r
+0x0800, 0x0815,\r
+0x081a, 0x081a,\r
+0x0824, 0x0824,\r
+0x0828, 0x0828,\r
+0x0840, 0x0858,\r
+0x0860, 0x086a,\r
+0x08a0, 0x08b4,\r
+0x08b6, 0x08bd,\r
+0x0904, 0x0939,\r
+0x093d, 0x093d,\r
+0x0950, 0x0950,\r
+0x0958, 0x0961,\r
+0x0971, 0x0980,\r
+0x0985, 0x098c,\r
+0x098f, 0x0990,\r
+0x0993, 0x09a8,\r
+0x09aa, 0x09b0,\r
+0x09b2, 0x09b2,\r
+0x09b6, 0x09b9,\r
+0x09bd, 0x09bd,\r
+0x09ce, 0x09ce,\r
+0x09dc, 0x09dd,\r
+0x09df, 0x09e1,\r
+0x09f0, 0x09f1,\r
+0x09fc, 0x09fc,\r
+0x0a05, 0x0a0a,\r
+0x0a0f, 0x0a10,\r
+0x0a13, 0x0a28,\r
+0x0a2a, 0x0a30,\r
+0x0a32, 0x0a33,\r
+0x0a35, 0x0a36,\r
+0x0a38, 0x0a39,\r
+0x0a59, 0x0a5c,\r
+0x0a5e, 0x0a5e,\r
+0x0a72, 0x0a74,\r
+0x0a85, 0x0a8d,\r
+0x0a8f, 0x0a91,\r
+0x0a93, 0x0aa8,\r
+0x0aaa, 0x0ab0,\r
+0x0ab2, 0x0ab3,\r
+0x0ab5, 0x0ab9,\r
+0x0abd, 0x0abd,\r
+0x0ad0, 0x0ad0,\r
+0x0ae0, 0x0ae1,\r
+0x0af9, 0x0af9,\r
+0x0b05, 0x0b0c,\r
+0x0b0f, 0x0b10,\r
+0x0b13, 0x0b28,\r
+0x0b2a, 0x0b30,\r
+0x0b32, 0x0b33,\r
+0x0b35, 0x0b39,\r
+0x0b3d, 0x0b3d,\r
+0x0b5c, 0x0b5d,\r
+0x0b5f, 0x0b61,\r
+0x0b71, 0x0b71,\r
+0x0b83, 0x0b83,\r
+0x0b85, 0x0b8a,\r
+0x0b8e, 0x0b90,\r
+0x0b92, 0x0b95,\r
+0x0b99, 0x0b9a,\r
+0x0b9c, 0x0b9c,\r
+0x0b9e, 0x0b9f,\r
+0x0ba3, 0x0ba4,\r
+0x0ba8, 0x0baa,\r
+0x0bae, 0x0bb9,\r
+0x0bd0, 0x0bd0,\r
+0x0c05, 0x0c0c,\r
+0x0c0e, 0x0c10,\r
+0x0c12, 0x0c28,\r
+0x0c2a, 0x0c39,\r
+0x0c3d, 0x0c3d,\r
+0x0c58, 0x0c5a,\r
+0x0c60, 0x0c61,\r
+0x0c80, 0x0c80,\r
+0x0c85, 0x0c8c,\r
+0x0c8e, 0x0c90,\r
+0x0c92, 0x0ca8,\r
+0x0caa, 0x0cb3,\r
+0x0cb5, 0x0cb9,\r
+0x0cbd, 0x0cbd,\r
+0x0cde, 0x0cde,\r
+0x0ce0, 0x0ce1,\r
+0x0cf1, 0x0cf2,\r
+0x0d05, 0x0d0c,\r
+0x0d0e, 0x0d10,\r
+0x0d12, 0x0d3a,\r
+0x0d3d, 0x0d3d,\r
+0x0d4e, 0x0d4e,\r
+0x0d54, 0x0d56,\r
+0x0d5f, 0x0d61,\r
+0x0d7a, 0x0d7f,\r
+0x0d85, 0x0d96,\r
+0x0d9a, 0x0db1,\r
+0x0db3, 0x0dbb,\r
+0x0dbd, 0x0dbd,\r
+0x0dc0, 0x0dc6,\r
+0x0e01, 0x0e30,\r
+0x0e32, 0x0e33,\r
+0x0e40, 0x0e46,\r
+0x0e81, 0x0e82,\r
+0x0e84, 0x0e84,\r
+0x0e87, 0x0e88,\r
+0x0e8a, 0x0e8a,\r
+0x0e8d, 0x0e8d,\r
+0x0e94, 0x0e97,\r
+0x0e99, 0x0e9f,\r
+0x0ea1, 0x0ea3,\r
+0x0ea5, 0x0ea5,\r
+0x0ea7, 0x0ea7,\r
+0x0eaa, 0x0eab,\r
+0x0ead, 0x0eb0,\r
+0x0eb2, 0x0eb3,\r
+0x0ebd, 0x0ebd,\r
+0x0ec0, 0x0ec4,\r
+0x0ec6, 0x0ec6,\r
+0x0edc, 0x0edf,\r
+0x0f00, 0x0f00,\r
+0x0f40, 0x0f47,\r
+0x0f49, 0x0f6c,\r
+0x0f88, 0x0f8c,\r
+0x1000, 0x102a,\r
+0x103f, 0x103f,\r
+0x1050, 0x1055,\r
+0x105a, 0x105d,\r
+0x1061, 0x1061,\r
+0x1065, 0x1066,\r
+0x106e, 0x1070,\r
+0x1075, 0x1081,\r
+0x108e, 0x108e,\r
+0x10a0, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x10fa,\r
+0x10fc, 0x1248,\r
+0x124a, 0x124d,\r
+0x1250, 0x1256,\r
+0x1258, 0x1258,\r
+0x125a, 0x125d,\r
+0x1260, 0x1288,\r
+0x128a, 0x128d,\r
+0x1290, 0x12b0,\r
+0x12b2, 0x12b5,\r
+0x12b8, 0x12be,\r
+0x12c0, 0x12c0,\r
+0x12c2, 0x12c5,\r
+0x12c8, 0x12d6,\r
+0x12d8, 0x1310,\r
+0x1312, 0x1315,\r
+0x1318, 0x135a,\r
+0x1380, 0x138f,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0x1401, 0x166c,\r
+0x166f, 0x167f,\r
+0x1681, 0x169a,\r
+0x16a0, 0x16ea,\r
+0x16f1, 0x16f8,\r
+0x1700, 0x170c,\r
+0x170e, 0x1711,\r
+0x1720, 0x1731,\r
+0x1740, 0x1751,\r
+0x1760, 0x176c,\r
+0x176e, 0x1770,\r
+0x1780, 0x17b3,\r
+0x17d7, 0x17d7,\r
+0x17dc, 0x17dc,\r
+0x1820, 0x1878,\r
+0x1880, 0x1884,\r
+0x1887, 0x18a8,\r
+0x18aa, 0x18aa,\r
+0x18b0, 0x18f5,\r
+0x1900, 0x191e,\r
+0x1950, 0x196d,\r
+0x1970, 0x1974,\r
+0x1980, 0x19ab,\r
+0x19b0, 0x19c9,\r
+0x1a00, 0x1a16,\r
+0x1a20, 0x1a54,\r
+0x1aa7, 0x1aa7,\r
+0x1b05, 0x1b33,\r
+0x1b45, 0x1b4b,\r
+0x1b83, 0x1ba0,\r
+0x1bae, 0x1baf,\r
+0x1bba, 0x1be5,\r
+0x1c00, 0x1c23,\r
+0x1c4d, 0x1c4f,\r
+0x1c5a, 0x1c7d,\r
+0x1c80, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cbf,\r
+0x1ce9, 0x1cec,\r
+0x1cee, 0x1cf1,\r
+0x1cf5, 0x1cf6,\r
+0x1d00, 0x1dbf,\r
+0x1e00, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fbc,\r
+0x1fbe, 0x1fbe,\r
+0x1fc2, 0x1fc4,\r
+0x1fc6, 0x1fcc,\r
+0x1fd0, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fe0, 0x1fec,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffc,\r
+0x2071, 0x2071,\r
+0x207f, 0x207f,\r
+0x2090, 0x209c,\r
+0x2102, 0x2102,\r
+0x2107, 0x2107,\r
+0x210a, 0x2113,\r
+0x2115, 0x2115,\r
+0x2119, 0x211d,\r
+0x2124, 0x2124,\r
+0x2126, 0x2126,\r
+0x2128, 0x2128,\r
+0x212a, 0x212d,\r
+0x212f, 0x2139,\r
+0x213c, 0x213f,\r
+0x2145, 0x2149,\r
+0x214e, 0x214e,\r
+0x2183, 0x2184,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x2c60, 0x2ce4,\r
+0x2ceb, 0x2cee,\r
+0x2cf2, 0x2cf3,\r
+0x2d00, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0x2d30, 0x2d67,\r
+0x2d6f, 0x2d6f,\r
+0x2d80, 0x2d96,\r
+0x2da0, 0x2da6,\r
+0x2da8, 0x2dae,\r
+0x2db0, 0x2db6,\r
+0x2db8, 0x2dbe,\r
+0x2dc0, 0x2dc6,\r
+0x2dc8, 0x2dce,\r
+0x2dd0, 0x2dd6,\r
+0x2dd8, 0x2dde,\r
+0x2e2f, 0x2e2f,\r
+0x3005, 0x3006,\r
+0x3031, 0x3035,\r
+0x303b, 0x303c,\r
+0x3041, 0x3096,\r
+0x309d, 0x309f,\r
+0x30a1, 0x30fa,\r
+0x30fc, 0x30ff,\r
+0x3105, 0x312f,\r
+0x3131, 0x318e,\r
+0x31a0, 0x31ba,\r
+0x31f0, 0x31ff,\r
+0x3400, 0x4db5,\r
+0x4e00, 0x9fef,\r
+0xa000, 0xa48c,\r
+0xa4d0, 0xa4fd,\r
+0xa500, 0xa60c,\r
+0xa610, 0xa61f,\r
+0xa62a, 0xa62b,\r
+0xa640, 0xa66e,\r
+0xa67f, 0xa69d,\r
+0xa6a0, 0xa6e5,\r
+0xa717, 0xa71f,\r
+0xa722, 0xa788,\r
+0xa78b, 0xa7b9,\r
+0xa7f7, 0xa801,\r
+0xa803, 0xa805,\r
+0xa807, 0xa80a,\r
+0xa80c, 0xa822,\r
+0xa840, 0xa873,\r
+0xa882, 0xa8b3,\r
+0xa8f2, 0xa8f7,\r
+0xa8fb, 0xa8fb,\r
+0xa8fd, 0xa8fe,\r
+0xa90a, 0xa925,\r
+0xa930, 0xa946,\r
+0xa960, 0xa97c,\r
+0xa984, 0xa9b2,\r
+0xa9cf, 0xa9cf,\r
+0xa9e0, 0xa9e4,\r
+0xa9e6, 0xa9ef,\r
+0xa9fa, 0xa9fe,\r
+0xaa00, 0xaa28,\r
+0xaa40, 0xaa42,\r
+0xaa44, 0xaa4b,\r
+0xaa60, 0xaa76,\r
+0xaa7a, 0xaa7a,\r
+0xaa7e, 0xaaaf,\r
+0xaab1, 0xaab1,\r
+0xaab5, 0xaab6,\r
+0xaab9, 0xaabd,\r
+0xaac0, 0xaac0,\r
+0xaac2, 0xaac2,\r
+0xaadb, 0xaadd,\r
+0xaae0, 0xaaea,\r
+0xaaf2, 0xaaf4,\r
+0xab01, 0xab06,\r
+0xab09, 0xab0e,\r
+0xab11, 0xab16,\r
+0xab20, 0xab26,\r
+0xab28, 0xab2e,\r
+0xab30, 0xab5a,\r
+0xab5c, 0xab65,\r
+0xab70, 0xabe2,\r
+0xac00, 0xd7a3,\r
+0xd7b0, 0xd7c6,\r
+0xd7cb, 0xd7fb,\r
+0xf900, 0xfa6d,\r
+0xfa70, 0xfad9,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xfb1d, 0xfb1d,\r
+0xfb1f, 0xfb28,\r
+0xfb2a, 0xfb36,\r
+0xfb38, 0xfb3c,\r
+0xfb3e, 0xfb3e,\r
+0xfb40, 0xfb41,\r
+0xfb43, 0xfb44,\r
+0xfb46, 0xfbb1,\r
+0xfbd3, 0xfd3d,\r
+0xfd50, 0xfd8f,\r
+0xfd92, 0xfdc7,\r
+0xfdf0, 0xfdfb,\r
+0xfe70, 0xfe74,\r
+0xfe76, 0xfefc,\r
+0xff21, 0xff3a,\r
+0xff41, 0xff5a,\r
+0xff66, 0xffbe,\r
+0xffc2, 0xffc7,\r
+0xffca, 0xffcf,\r
+0xffd2, 0xffd7,\r
+0xffda, 0xffdc,\r
+0x10000, 0x1000b,\r
+0x1000d, 0x10026,\r
+0x10028, 0x1003a,\r
+0x1003c, 0x1003d,\r
+0x1003f, 0x1004d,\r
+0x10050, 0x1005d,\r
+0x10080, 0x100fa,\r
+0x10280, 0x1029c,\r
+0x102a0, 0x102d0,\r
+0x10300, 0x1031f,\r
+0x1032d, 0x10340,\r
+0x10342, 0x10349,\r
+0x10350, 0x10375,\r
+0x10380, 0x1039d,\r
+0x103a0, 0x103c3,\r
+0x103c8, 0x103cf,\r
+0x10400, 0x1049d,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+0x10500, 0x10527,\r
+0x10530, 0x10563,\r
+0x10600, 0x10736,\r
+0x10740, 0x10755,\r
+0x10760, 0x10767,\r
+0x10800, 0x10805,\r
+0x10808, 0x10808,\r
+0x1080a, 0x10835,\r
+0x10837, 0x10838,\r
+0x1083c, 0x1083c,\r
+0x1083f, 0x10855,\r
+0x10860, 0x10876,\r
+0x10880, 0x1089e,\r
+0x108e0, 0x108f2,\r
+0x108f4, 0x108f5,\r
+0x10900, 0x10915,\r
+0x10920, 0x10939,\r
+0x10980, 0x109b7,\r
+0x109be, 0x109bf,\r
+0x10a00, 0x10a00,\r
+0x10a10, 0x10a13,\r
+0x10a15, 0x10a17,\r
+0x10a19, 0x10a35,\r
+0x10a60, 0x10a7c,\r
+0x10a80, 0x10a9c,\r
+0x10ac0, 0x10ac7,\r
+0x10ac9, 0x10ae4,\r
+0x10b00, 0x10b35,\r
+0x10b40, 0x10b55,\r
+0x10b60, 0x10b72,\r
+0x10b80, 0x10b91,\r
+0x10c00, 0x10c48,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x10d00, 0x10d23,\r
+0x10f00, 0x10f1c,\r
+0x10f27, 0x10f27,\r
+0x10f30, 0x10f45,\r
+0x11003, 0x11037,\r
+0x11083, 0x110af,\r
+0x110d0, 0x110e8,\r
+0x11103, 0x11126,\r
+0x11144, 0x11144,\r
+0x11150, 0x11172,\r
+0x11176, 0x11176,\r
+0x11183, 0x111b2,\r
+0x111c1, 0x111c4,\r
+0x111da, 0x111da,\r
+0x111dc, 0x111dc,\r
+0x11200, 0x11211,\r
+0x11213, 0x1122b,\r
+0x11280, 0x11286,\r
+0x11288, 0x11288,\r
+0x1128a, 0x1128d,\r
+0x1128f, 0x1129d,\r
+0x1129f, 0x112a8,\r
+0x112b0, 0x112de,\r
+0x11305, 0x1130c,\r
+0x1130f, 0x11310,\r
+0x11313, 0x11328,\r
+0x1132a, 0x11330,\r
+0x11332, 0x11333,\r
+0x11335, 0x11339,\r
+0x1133d, 0x1133d,\r
+0x11350, 0x11350,\r
+0x1135d, 0x11361,\r
+0x11400, 0x11434,\r
+0x11447, 0x1144a,\r
+0x11480, 0x114af,\r
+0x114c4, 0x114c5,\r
+0x114c7, 0x114c7,\r
+0x11580, 0x115ae,\r
+0x115d8, 0x115db,\r
+0x11600, 0x1162f,\r
+0x11644, 0x11644,\r
+0x11680, 0x116aa,\r
+0x11700, 0x1171a,\r
+0x11800, 0x1182b,\r
+0x118a0, 0x118df,\r
+0x118ff, 0x118ff,\r
+0x11a00, 0x11a00,\r
+0x11a0b, 0x11a32,\r
+0x11a3a, 0x11a3a,\r
+0x11a50, 0x11a50,\r
+0x11a5c, 0x11a83,\r
+0x11a86, 0x11a89,\r
+0x11a9d, 0x11a9d,\r
+0x11ac0, 0x11af8,\r
+0x11c00, 0x11c08,\r
+0x11c0a, 0x11c2e,\r
+0x11c40, 0x11c40,\r
+0x11c72, 0x11c8f,\r
+0x11d00, 0x11d06,\r
+0x11d08, 0x11d09,\r
+0x11d0b, 0x11d30,\r
+0x11d46, 0x11d46,\r
+0x11d60, 0x11d65,\r
+0x11d67, 0x11d68,\r
+0x11d6a, 0x11d89,\r
+0x11d98, 0x11d98,\r
+0x11ee0, 0x11ef2,\r
+0x12000, 0x12399,\r
+0x12480, 0x12543,\r
+0x13000, 0x1342e,\r
+0x14400, 0x14646,\r
+0x16800, 0x16a38,\r
+0x16a40, 0x16a5e,\r
+0x16ad0, 0x16aed,\r
+0x16b00, 0x16b2f,\r
+0x16b40, 0x16b43,\r
+0x16b63, 0x16b77,\r
+0x16b7d, 0x16b8f,\r
+0x16e40, 0x16e7f,\r
+0x16f00, 0x16f44,\r
+0x16f50, 0x16f50,\r
+0x16f93, 0x16f9f,\r
+0x16fe0, 0x16fe1,\r
+0x17000, 0x187f1,\r
+0x18800, 0x18af2,\r
+0x1b000, 0x1b11e,\r
+0x1b170, 0x1b2fb,\r
+0x1bc00, 0x1bc6a,\r
+0x1bc70, 0x1bc7c,\r
+0x1bc80, 0x1bc88,\r
+0x1bc90, 0x1bc99,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d6c0,\r
+0x1d6c2, 0x1d6da,\r
+0x1d6dc, 0x1d6fa,\r
+0x1d6fc, 0x1d714,\r
+0x1d716, 0x1d734,\r
+0x1d736, 0x1d74e,\r
+0x1d750, 0x1d76e,\r
+0x1d770, 0x1d788,\r
+0x1d78a, 0x1d7a8,\r
+0x1d7aa, 0x1d7c2,\r
+0x1d7c4, 0x1d7cb,\r
+0x1e800, 0x1e8c4,\r
+0x1e900, 0x1e943,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+0x2f800, 0x2fa1d,\r
+}; /* END of CR_L */\r
+\r
+/* PROPERTY: 'LC': General Category */\r
+static const OnigCodePoint\r
+CR_LC[] = { 130,\r
+0x0041, 0x005a,\r
+0x0061, 0x007a,\r
+0x00b5, 0x00b5,\r
+0x00c0, 0x00d6,\r
+0x00d8, 0x00f6,\r
+0x00f8, 0x01ba,\r
+0x01bc, 0x01bf,\r
+0x01c4, 0x0293,\r
+0x0295, 0x02af,\r
+0x0370, 0x0373,\r
+0x0376, 0x0377,\r
+0x037b, 0x037d,\r
+0x037f, 0x037f,\r
+0x0386, 0x0386,\r
+0x0388, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x03f5,\r
+0x03f7, 0x0481,\r
+0x048a, 0x052f,\r
+0x0531, 0x0556,\r
+0x0560, 0x0588,\r
+0x10a0, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x10fa,\r
+0x10fd, 0x10ff,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0x1c80, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cbf,\r
+0x1d00, 0x1d2b,\r
+0x1d6b, 0x1d77,\r
+0x1d79, 0x1d9a,\r
+0x1e00, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fbc,\r
+0x1fbe, 0x1fbe,\r
+0x1fc2, 0x1fc4,\r
+0x1fc6, 0x1fcc,\r
+0x1fd0, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fe0, 0x1fec,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffc,\r
+0x2102, 0x2102,\r
+0x2107, 0x2107,\r
+0x210a, 0x2113,\r
+0x2115, 0x2115,\r
+0x2119, 0x211d,\r
+0x2124, 0x2124,\r
+0x2126, 0x2126,\r
+0x2128, 0x2128,\r
+0x212a, 0x212d,\r
+0x212f, 0x2134,\r
+0x2139, 0x2139,\r
+0x213c, 0x213f,\r
+0x2145, 0x2149,\r
+0x214e, 0x214e,\r
+0x2183, 0x2184,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x2c60, 0x2c7b,\r
+0x2c7e, 0x2ce4,\r
+0x2ceb, 0x2cee,\r
+0x2cf2, 0x2cf3,\r
+0x2d00, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0xa640, 0xa66d,\r
+0xa680, 0xa69b,\r
+0xa722, 0xa76f,\r
+0xa771, 0xa787,\r
+0xa78b, 0xa78e,\r
+0xa790, 0xa7b9,\r
+0xa7fa, 0xa7fa,\r
+0xab30, 0xab5a,\r
+0xab60, 0xab65,\r
+0xab70, 0xabbf,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xff21, 0xff3a,\r
+0xff41, 0xff5a,\r
+0x10400, 0x1044f,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x118a0, 0x118df,\r
+0x16e40, 0x16e7f,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d6c0,\r
+0x1d6c2, 0x1d6da,\r
+0x1d6dc, 0x1d6fa,\r
+0x1d6fc, 0x1d714,\r
+0x1d716, 0x1d734,\r
+0x1d736, 0x1d74e,\r
+0x1d750, 0x1d76e,\r
+0x1d770, 0x1d788,\r
+0x1d78a, 0x1d7a8,\r
+0x1d7aa, 0x1d7c2,\r
+0x1d7c4, 0x1d7cb,\r
+0x1e900, 0x1e943,\r
+}; /* END of CR_LC */\r
+\r
+/* PROPERTY: 'Lao': Script */\r
+static const OnigCodePoint\r
+CR_Lao[] = { 18,\r
+0x0e81, 0x0e82,\r
+0x0e84, 0x0e84,\r
+0x0e87, 0x0e88,\r
+0x0e8a, 0x0e8a,\r
+0x0e8d, 0x0e8d,\r
+0x0e94, 0x0e97,\r
+0x0e99, 0x0e9f,\r
+0x0ea1, 0x0ea3,\r
+0x0ea5, 0x0ea5,\r
+0x0ea7, 0x0ea7,\r
+0x0eaa, 0x0eab,\r
+0x0ead, 0x0eb9,\r
+0x0ebb, 0x0ebd,\r
+0x0ec0, 0x0ec4,\r
+0x0ec6, 0x0ec6,\r
+0x0ec8, 0x0ecd,\r
+0x0ed0, 0x0ed9,\r
+0x0edc, 0x0edf,\r
+}; /* END of CR_Lao */\r
+\r
+/* PROPERTY: 'Latin': Script */\r
+static const OnigCodePoint\r
+CR_Latin[] = { 30,\r
+0x0041, 0x005a,\r
+0x0061, 0x007a,\r
+0x00aa, 0x00aa,\r
+0x00ba, 0x00ba,\r
+0x00c0, 0x00d6,\r
+0x00d8, 0x00f6,\r
+0x00f8, 0x02b8,\r
+0x02e0, 0x02e4,\r
+0x1d00, 0x1d25,\r
+0x1d2c, 0x1d5c,\r
+0x1d62, 0x1d65,\r
+0x1d6b, 0x1d77,\r
+0x1d79, 0x1dbe,\r
+0x1e00, 0x1eff,\r
+0x2071, 0x2071,\r
+0x207f, 0x207f,\r
+0x2090, 0x209c,\r
+0x212a, 0x212b,\r
+0x2132, 0x2132,\r
+0x214e, 0x214e,\r
+0x2160, 0x2188,\r
+0x2c60, 0x2c7f,\r
+0xa722, 0xa787,\r
+0xa78b, 0xa7b9,\r
+0xa7f7, 0xa7ff,\r
+0xab30, 0xab5a,\r
+0xab5c, 0xab64,\r
+0xfb00, 0xfb06,\r
+0xff21, 0xff3a,\r
+0xff41, 0xff5a,\r
+}; /* END of CR_Latin */\r
+\r
+/* PROPERTY: 'Lepcha': Script */\r
+static const OnigCodePoint\r
+CR_Lepcha[] = { 3,\r
+0x1c00, 0x1c37,\r
+0x1c3b, 0x1c49,\r
+0x1c4d, 0x1c4f,\r
+}; /* END of CR_Lepcha */\r
+\r
+/* PROPERTY: 'Limbu': Script */\r
+static const OnigCodePoint\r
+CR_Limbu[] = { 5,\r
+0x1900, 0x191e,\r
+0x1920, 0x192b,\r
+0x1930, 0x193b,\r
+0x1940, 0x1940,\r
+0x1944, 0x194f,\r
+}; /* END of CR_Limbu */\r
+\r
+/* PROPERTY: 'Linear_A': Script */\r
+static const OnigCodePoint\r
+CR_Linear_A[] = { 3,\r
+0x10600, 0x10736,\r
+0x10740, 0x10755,\r
+0x10760, 0x10767,\r
+}; /* END of CR_Linear_A */\r
+\r
+/* PROPERTY: 'Linear_B': Script */\r
+static const OnigCodePoint\r
+CR_Linear_B[] = { 7,\r
+0x10000, 0x1000b,\r
+0x1000d, 0x10026,\r
+0x10028, 0x1003a,\r
+0x1003c, 0x1003d,\r
+0x1003f, 0x1004d,\r
+0x10050, 0x1005d,\r
+0x10080, 0x100fa,\r
+}; /* END of CR_Linear_B */\r
+\r
+/* PROPERTY: 'Lisu': Script */\r
+static const OnigCodePoint\r
+CR_Lisu[] = { 1,\r
+0xa4d0, 0xa4ff,\r
+}; /* END of CR_Lisu */\r
+\r
+/* PROPERTY: 'Ll': General Category */\r
+static const OnigCodePoint\r
+CR_Ll[] = { 638,\r
+0x0061, 0x007a,\r
+0x00b5, 0x00b5,\r
+0x00df, 0x00f6,\r
+0x00f8, 0x00ff,\r
+0x0101, 0x0101,\r
+0x0103, 0x0103,\r
+0x0105, 0x0105,\r
+0x0107, 0x0107,\r
+0x0109, 0x0109,\r
+0x010b, 0x010b,\r
+0x010d, 0x010d,\r
+0x010f, 0x010f,\r
+0x0111, 0x0111,\r
+0x0113, 0x0113,\r
+0x0115, 0x0115,\r
+0x0117, 0x0117,\r
+0x0119, 0x0119,\r
+0x011b, 0x011b,\r
+0x011d, 0x011d,\r
+0x011f, 0x011f,\r
+0x0121, 0x0121,\r
+0x0123, 0x0123,\r
+0x0125, 0x0125,\r
+0x0127, 0x0127,\r
+0x0129, 0x0129,\r
+0x012b, 0x012b,\r
+0x012d, 0x012d,\r
+0x012f, 0x012f,\r
+0x0131, 0x0131,\r
+0x0133, 0x0133,\r
+0x0135, 0x0135,\r
+0x0137, 0x0138,\r
+0x013a, 0x013a,\r
+0x013c, 0x013c,\r
+0x013e, 0x013e,\r
+0x0140, 0x0140,\r
+0x0142, 0x0142,\r
+0x0144, 0x0144,\r
+0x0146, 0x0146,\r
+0x0148, 0x0149,\r
+0x014b, 0x014b,\r
+0x014d, 0x014d,\r
+0x014f, 0x014f,\r
+0x0151, 0x0151,\r
+0x0153, 0x0153,\r
+0x0155, 0x0155,\r
+0x0157, 0x0157,\r
+0x0159, 0x0159,\r
+0x015b, 0x015b,\r
+0x015d, 0x015d,\r
+0x015f, 0x015f,\r
+0x0161, 0x0161,\r
+0x0163, 0x0163,\r
+0x0165, 0x0165,\r
+0x0167, 0x0167,\r
+0x0169, 0x0169,\r
+0x016b, 0x016b,\r
+0x016d, 0x016d,\r
+0x016f, 0x016f,\r
+0x0171, 0x0171,\r
+0x0173, 0x0173,\r
+0x0175, 0x0175,\r
+0x0177, 0x0177,\r
+0x017a, 0x017a,\r
+0x017c, 0x017c,\r
+0x017e, 0x0180,\r
+0x0183, 0x0183,\r
+0x0185, 0x0185,\r
+0x0188, 0x0188,\r
+0x018c, 0x018d,\r
+0x0192, 0x0192,\r
+0x0195, 0x0195,\r
+0x0199, 0x019b,\r
+0x019e, 0x019e,\r
+0x01a1, 0x01a1,\r
+0x01a3, 0x01a3,\r
+0x01a5, 0x01a5,\r
+0x01a8, 0x01a8,\r
+0x01aa, 0x01ab,\r
+0x01ad, 0x01ad,\r
+0x01b0, 0x01b0,\r
+0x01b4, 0x01b4,\r
+0x01b6, 0x01b6,\r
+0x01b9, 0x01ba,\r
+0x01bd, 0x01bf,\r
+0x01c6, 0x01c6,\r
+0x01c9, 0x01c9,\r
+0x01cc, 0x01cc,\r
+0x01ce, 0x01ce,\r
+0x01d0, 0x01d0,\r
+0x01d2, 0x01d2,\r
+0x01d4, 0x01d4,\r
+0x01d6, 0x01d6,\r
+0x01d8, 0x01d8,\r
+0x01da, 0x01da,\r
+0x01dc, 0x01dd,\r
+0x01df, 0x01df,\r
+0x01e1, 0x01e1,\r
+0x01e3, 0x01e3,\r
+0x01e5, 0x01e5,\r
+0x01e7, 0x01e7,\r
+0x01e9, 0x01e9,\r
+0x01eb, 0x01eb,\r
+0x01ed, 0x01ed,\r
+0x01ef, 0x01f0,\r
+0x01f3, 0x01f3,\r
+0x01f5, 0x01f5,\r
+0x01f9, 0x01f9,\r
+0x01fb, 0x01fb,\r
+0x01fd, 0x01fd,\r
+0x01ff, 0x01ff,\r
+0x0201, 0x0201,\r
+0x0203, 0x0203,\r
+0x0205, 0x0205,\r
+0x0207, 0x0207,\r
+0x0209, 0x0209,\r
+0x020b, 0x020b,\r
+0x020d, 0x020d,\r
+0x020f, 0x020f,\r
+0x0211, 0x0211,\r
+0x0213, 0x0213,\r
+0x0215, 0x0215,\r
+0x0217, 0x0217,\r
+0x0219, 0x0219,\r
+0x021b, 0x021b,\r
+0x021d, 0x021d,\r
+0x021f, 0x021f,\r
+0x0221, 0x0221,\r
+0x0223, 0x0223,\r
+0x0225, 0x0225,\r
+0x0227, 0x0227,\r
+0x0229, 0x0229,\r
+0x022b, 0x022b,\r
+0x022d, 0x022d,\r
+0x022f, 0x022f,\r
+0x0231, 0x0231,\r
+0x0233, 0x0239,\r
+0x023c, 0x023c,\r
+0x023f, 0x0240,\r
+0x0242, 0x0242,\r
+0x0247, 0x0247,\r
+0x0249, 0x0249,\r
+0x024b, 0x024b,\r
+0x024d, 0x024d,\r
+0x024f, 0x0293,\r
+0x0295, 0x02af,\r
+0x0371, 0x0371,\r
+0x0373, 0x0373,\r
+0x0377, 0x0377,\r
+0x037b, 0x037d,\r
+0x0390, 0x0390,\r
+0x03ac, 0x03ce,\r
+0x03d0, 0x03d1,\r
+0x03d5, 0x03d7,\r
+0x03d9, 0x03d9,\r
+0x03db, 0x03db,\r
+0x03dd, 0x03dd,\r
+0x03df, 0x03df,\r
+0x03e1, 0x03e1,\r
+0x03e3, 0x03e3,\r
+0x03e5, 0x03e5,\r
+0x03e7, 0x03e7,\r
+0x03e9, 0x03e9,\r
+0x03eb, 0x03eb,\r
+0x03ed, 0x03ed,\r
+0x03ef, 0x03f3,\r
+0x03f5, 0x03f5,\r
+0x03f8, 0x03f8,\r
+0x03fb, 0x03fc,\r
+0x0430, 0x045f,\r
+0x0461, 0x0461,\r
+0x0463, 0x0463,\r
+0x0465, 0x0465,\r
+0x0467, 0x0467,\r
+0x0469, 0x0469,\r
+0x046b, 0x046b,\r
+0x046d, 0x046d,\r
+0x046f, 0x046f,\r
+0x0471, 0x0471,\r
+0x0473, 0x0473,\r
+0x0475, 0x0475,\r
+0x0477, 0x0477,\r
+0x0479, 0x0479,\r
+0x047b, 0x047b,\r
+0x047d, 0x047d,\r
+0x047f, 0x047f,\r
+0x0481, 0x0481,\r
+0x048b, 0x048b,\r
+0x048d, 0x048d,\r
+0x048f, 0x048f,\r
+0x0491, 0x0491,\r
+0x0493, 0x0493,\r
+0x0495, 0x0495,\r
+0x0497, 0x0497,\r
+0x0499, 0x0499,\r
+0x049b, 0x049b,\r
+0x049d, 0x049d,\r
+0x049f, 0x049f,\r
+0x04a1, 0x04a1,\r
+0x04a3, 0x04a3,\r
+0x04a5, 0x04a5,\r
+0x04a7, 0x04a7,\r
+0x04a9, 0x04a9,\r
+0x04ab, 0x04ab,\r
+0x04ad, 0x04ad,\r
+0x04af, 0x04af,\r
+0x04b1, 0x04b1,\r
+0x04b3, 0x04b3,\r
+0x04b5, 0x04b5,\r
+0x04b7, 0x04b7,\r
+0x04b9, 0x04b9,\r
+0x04bb, 0x04bb,\r
+0x04bd, 0x04bd,\r
+0x04bf, 0x04bf,\r
+0x04c2, 0x04c2,\r
+0x04c4, 0x04c4,\r
+0x04c6, 0x04c6,\r
+0x04c8, 0x04c8,\r
+0x04ca, 0x04ca,\r
+0x04cc, 0x04cc,\r
+0x04ce, 0x04cf,\r
+0x04d1, 0x04d1,\r
+0x04d3, 0x04d3,\r
+0x04d5, 0x04d5,\r
+0x04d7, 0x04d7,\r
+0x04d9, 0x04d9,\r
+0x04db, 0x04db,\r
+0x04dd, 0x04dd,\r
+0x04df, 0x04df,\r
+0x04e1, 0x04e1,\r
+0x04e3, 0x04e3,\r
+0x04e5, 0x04e5,\r
+0x04e7, 0x04e7,\r
+0x04e9, 0x04e9,\r
+0x04eb, 0x04eb,\r
+0x04ed, 0x04ed,\r
+0x04ef, 0x04ef,\r
+0x04f1, 0x04f1,\r
+0x04f3, 0x04f3,\r
+0x04f5, 0x04f5,\r
+0x04f7, 0x04f7,\r
+0x04f9, 0x04f9,\r
+0x04fb, 0x04fb,\r
+0x04fd, 0x04fd,\r
+0x04ff, 0x04ff,\r
+0x0501, 0x0501,\r
+0x0503, 0x0503,\r
+0x0505, 0x0505,\r
+0x0507, 0x0507,\r
+0x0509, 0x0509,\r
+0x050b, 0x050b,\r
+0x050d, 0x050d,\r
+0x050f, 0x050f,\r
+0x0511, 0x0511,\r
+0x0513, 0x0513,\r
+0x0515, 0x0515,\r
+0x0517, 0x0517,\r
+0x0519, 0x0519,\r
+0x051b, 0x051b,\r
+0x051d, 0x051d,\r
+0x051f, 0x051f,\r
+0x0521, 0x0521,\r
+0x0523, 0x0523,\r
+0x0525, 0x0525,\r
+0x0527, 0x0527,\r
+0x0529, 0x0529,\r
+0x052b, 0x052b,\r
+0x052d, 0x052d,\r
+0x052f, 0x052f,\r
+0x0560, 0x0588,\r
+0x10d0, 0x10fa,\r
+0x10fd, 0x10ff,\r
+0x13f8, 0x13fd,\r
+0x1c80, 0x1c88,\r
+0x1d00, 0x1d2b,\r
+0x1d6b, 0x1d77,\r
+0x1d79, 0x1d9a,\r
+0x1e01, 0x1e01,\r
+0x1e03, 0x1e03,\r
+0x1e05, 0x1e05,\r
+0x1e07, 0x1e07,\r
+0x1e09, 0x1e09,\r
+0x1e0b, 0x1e0b,\r
+0x1e0d, 0x1e0d,\r
+0x1e0f, 0x1e0f,\r
+0x1e11, 0x1e11,\r
+0x1e13, 0x1e13,\r
+0x1e15, 0x1e15,\r
+0x1e17, 0x1e17,\r
+0x1e19, 0x1e19,\r
+0x1e1b, 0x1e1b,\r
+0x1e1d, 0x1e1d,\r
+0x1e1f, 0x1e1f,\r
+0x1e21, 0x1e21,\r
+0x1e23, 0x1e23,\r
+0x1e25, 0x1e25,\r
+0x1e27, 0x1e27,\r
+0x1e29, 0x1e29,\r
+0x1e2b, 0x1e2b,\r
+0x1e2d, 0x1e2d,\r
+0x1e2f, 0x1e2f,\r
+0x1e31, 0x1e31,\r
+0x1e33, 0x1e33,\r
+0x1e35, 0x1e35,\r
+0x1e37, 0x1e37,\r
+0x1e39, 0x1e39,\r
+0x1e3b, 0x1e3b,\r
+0x1e3d, 0x1e3d,\r
+0x1e3f, 0x1e3f,\r
+0x1e41, 0x1e41,\r
+0x1e43, 0x1e43,\r
+0x1e45, 0x1e45,\r
+0x1e47, 0x1e47,\r
+0x1e49, 0x1e49,\r
+0x1e4b, 0x1e4b,\r
+0x1e4d, 0x1e4d,\r
+0x1e4f, 0x1e4f,\r
+0x1e51, 0x1e51,\r
+0x1e53, 0x1e53,\r
+0x1e55, 0x1e55,\r
+0x1e57, 0x1e57,\r
+0x1e59, 0x1e59,\r
+0x1e5b, 0x1e5b,\r
+0x1e5d, 0x1e5d,\r
+0x1e5f, 0x1e5f,\r
+0x1e61, 0x1e61,\r
+0x1e63, 0x1e63,\r
+0x1e65, 0x1e65,\r
+0x1e67, 0x1e67,\r
+0x1e69, 0x1e69,\r
+0x1e6b, 0x1e6b,\r
+0x1e6d, 0x1e6d,\r
+0x1e6f, 0x1e6f,\r
+0x1e71, 0x1e71,\r
+0x1e73, 0x1e73,\r
+0x1e75, 0x1e75,\r
+0x1e77, 0x1e77,\r
+0x1e79, 0x1e79,\r
+0x1e7b, 0x1e7b,\r
+0x1e7d, 0x1e7d,\r
+0x1e7f, 0x1e7f,\r
+0x1e81, 0x1e81,\r
+0x1e83, 0x1e83,\r
+0x1e85, 0x1e85,\r
+0x1e87, 0x1e87,\r
+0x1e89, 0x1e89,\r
+0x1e8b, 0x1e8b,\r
+0x1e8d, 0x1e8d,\r
+0x1e8f, 0x1e8f,\r
+0x1e91, 0x1e91,\r
+0x1e93, 0x1e93,\r
+0x1e95, 0x1e9d,\r
+0x1e9f, 0x1e9f,\r
+0x1ea1, 0x1ea1,\r
+0x1ea3, 0x1ea3,\r
+0x1ea5, 0x1ea5,\r
+0x1ea7, 0x1ea7,\r
+0x1ea9, 0x1ea9,\r
+0x1eab, 0x1eab,\r
+0x1ead, 0x1ead,\r
+0x1eaf, 0x1eaf,\r
+0x1eb1, 0x1eb1,\r
+0x1eb3, 0x1eb3,\r
+0x1eb5, 0x1eb5,\r
+0x1eb7, 0x1eb7,\r
+0x1eb9, 0x1eb9,\r
+0x1ebb, 0x1ebb,\r
+0x1ebd, 0x1ebd,\r
+0x1ebf, 0x1ebf,\r
+0x1ec1, 0x1ec1,\r
+0x1ec3, 0x1ec3,\r
+0x1ec5, 0x1ec5,\r
+0x1ec7, 0x1ec7,\r
+0x1ec9, 0x1ec9,\r
+0x1ecb, 0x1ecb,\r
+0x1ecd, 0x1ecd,\r
+0x1ecf, 0x1ecf,\r
+0x1ed1, 0x1ed1,\r
+0x1ed3, 0x1ed3,\r
+0x1ed5, 0x1ed5,\r
+0x1ed7, 0x1ed7,\r
+0x1ed9, 0x1ed9,\r
+0x1edb, 0x1edb,\r
+0x1edd, 0x1edd,\r
+0x1edf, 0x1edf,\r
+0x1ee1, 0x1ee1,\r
+0x1ee3, 0x1ee3,\r
+0x1ee5, 0x1ee5,\r
+0x1ee7, 0x1ee7,\r
+0x1ee9, 0x1ee9,\r
+0x1eeb, 0x1eeb,\r
+0x1eed, 0x1eed,\r
+0x1eef, 0x1eef,\r
+0x1ef1, 0x1ef1,\r
+0x1ef3, 0x1ef3,\r
+0x1ef5, 0x1ef5,\r
+0x1ef7, 0x1ef7,\r
+0x1ef9, 0x1ef9,\r
+0x1efb, 0x1efb,\r
+0x1efd, 0x1efd,\r
+0x1eff, 0x1f07,\r
+0x1f10, 0x1f15,\r
+0x1f20, 0x1f27,\r
+0x1f30, 0x1f37,\r
+0x1f40, 0x1f45,\r
+0x1f50, 0x1f57,\r
+0x1f60, 0x1f67,\r
+0x1f70, 0x1f7d,\r
+0x1f80, 0x1f87,\r
+0x1f90, 0x1f97,\r
+0x1fa0, 0x1fa7,\r
+0x1fb0, 0x1fb4,\r
+0x1fb6, 0x1fb7,\r
+0x1fbe, 0x1fbe,\r
+0x1fc2, 0x1fc4,\r
+0x1fc6, 0x1fc7,\r
+0x1fd0, 0x1fd3,\r
+0x1fd6, 0x1fd7,\r
+0x1fe0, 0x1fe7,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ff7,\r
+0x210a, 0x210a,\r
+0x210e, 0x210f,\r
+0x2113, 0x2113,\r
+0x212f, 0x212f,\r
+0x2134, 0x2134,\r
+0x2139, 0x2139,\r
+0x213c, 0x213d,\r
+0x2146, 0x2149,\r
+0x214e, 0x214e,\r
+0x2184, 0x2184,\r
+0x2c30, 0x2c5e,\r
+0x2c61, 0x2c61,\r
+0x2c65, 0x2c66,\r
+0x2c68, 0x2c68,\r
+0x2c6a, 0x2c6a,\r
+0x2c6c, 0x2c6c,\r
+0x2c71, 0x2c71,\r
+0x2c73, 0x2c74,\r
+0x2c76, 0x2c7b,\r
+0x2c81, 0x2c81,\r
+0x2c83, 0x2c83,\r
+0x2c85, 0x2c85,\r
+0x2c87, 0x2c87,\r
+0x2c89, 0x2c89,\r
+0x2c8b, 0x2c8b,\r
+0x2c8d, 0x2c8d,\r
+0x2c8f, 0x2c8f,\r
+0x2c91, 0x2c91,\r
+0x2c93, 0x2c93,\r
+0x2c95, 0x2c95,\r
+0x2c97, 0x2c97,\r
+0x2c99, 0x2c99,\r
+0x2c9b, 0x2c9b,\r
+0x2c9d, 0x2c9d,\r
+0x2c9f, 0x2c9f,\r
+0x2ca1, 0x2ca1,\r
+0x2ca3, 0x2ca3,\r
+0x2ca5, 0x2ca5,\r
+0x2ca7, 0x2ca7,\r
+0x2ca9, 0x2ca9,\r
+0x2cab, 0x2cab,\r
+0x2cad, 0x2cad,\r
+0x2caf, 0x2caf,\r
+0x2cb1, 0x2cb1,\r
+0x2cb3, 0x2cb3,\r
+0x2cb5, 0x2cb5,\r
+0x2cb7, 0x2cb7,\r
+0x2cb9, 0x2cb9,\r
+0x2cbb, 0x2cbb,\r
+0x2cbd, 0x2cbd,\r
+0x2cbf, 0x2cbf,\r
+0x2cc1, 0x2cc1,\r
+0x2cc3, 0x2cc3,\r
+0x2cc5, 0x2cc5,\r
+0x2cc7, 0x2cc7,\r
+0x2cc9, 0x2cc9,\r
+0x2ccb, 0x2ccb,\r
+0x2ccd, 0x2ccd,\r
+0x2ccf, 0x2ccf,\r
+0x2cd1, 0x2cd1,\r
+0x2cd3, 0x2cd3,\r
+0x2cd5, 0x2cd5,\r
+0x2cd7, 0x2cd7,\r
+0x2cd9, 0x2cd9,\r
+0x2cdb, 0x2cdb,\r
+0x2cdd, 0x2cdd,\r
+0x2cdf, 0x2cdf,\r
+0x2ce1, 0x2ce1,\r
+0x2ce3, 0x2ce4,\r
+0x2cec, 0x2cec,\r
+0x2cee, 0x2cee,\r
+0x2cf3, 0x2cf3,\r
+0x2d00, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0xa641, 0xa641,\r
+0xa643, 0xa643,\r
+0xa645, 0xa645,\r
+0xa647, 0xa647,\r
+0xa649, 0xa649,\r
+0xa64b, 0xa64b,\r
+0xa64d, 0xa64d,\r
+0xa64f, 0xa64f,\r
+0xa651, 0xa651,\r
+0xa653, 0xa653,\r
+0xa655, 0xa655,\r
+0xa657, 0xa657,\r
+0xa659, 0xa659,\r
+0xa65b, 0xa65b,\r
+0xa65d, 0xa65d,\r
+0xa65f, 0xa65f,\r
+0xa661, 0xa661,\r
+0xa663, 0xa663,\r
+0xa665, 0xa665,\r
+0xa667, 0xa667,\r
+0xa669, 0xa669,\r
+0xa66b, 0xa66b,\r
+0xa66d, 0xa66d,\r
+0xa681, 0xa681,\r
+0xa683, 0xa683,\r
+0xa685, 0xa685,\r
+0xa687, 0xa687,\r
+0xa689, 0xa689,\r
+0xa68b, 0xa68b,\r
+0xa68d, 0xa68d,\r
+0xa68f, 0xa68f,\r
+0xa691, 0xa691,\r
+0xa693, 0xa693,\r
+0xa695, 0xa695,\r
+0xa697, 0xa697,\r
+0xa699, 0xa699,\r
+0xa69b, 0xa69b,\r
+0xa723, 0xa723,\r
+0xa725, 0xa725,\r
+0xa727, 0xa727,\r
+0xa729, 0xa729,\r
+0xa72b, 0xa72b,\r
+0xa72d, 0xa72d,\r
+0xa72f, 0xa731,\r
+0xa733, 0xa733,\r
+0xa735, 0xa735,\r
+0xa737, 0xa737,\r
+0xa739, 0xa739,\r
+0xa73b, 0xa73b,\r
+0xa73d, 0xa73d,\r
+0xa73f, 0xa73f,\r
+0xa741, 0xa741,\r
+0xa743, 0xa743,\r
+0xa745, 0xa745,\r
+0xa747, 0xa747,\r
+0xa749, 0xa749,\r
+0xa74b, 0xa74b,\r
+0xa74d, 0xa74d,\r
+0xa74f, 0xa74f,\r
+0xa751, 0xa751,\r
+0xa753, 0xa753,\r
+0xa755, 0xa755,\r
+0xa757, 0xa757,\r
+0xa759, 0xa759,\r
+0xa75b, 0xa75b,\r
+0xa75d, 0xa75d,\r
+0xa75f, 0xa75f,\r
+0xa761, 0xa761,\r
+0xa763, 0xa763,\r
+0xa765, 0xa765,\r
+0xa767, 0xa767,\r
+0xa769, 0xa769,\r
+0xa76b, 0xa76b,\r
+0xa76d, 0xa76d,\r
+0xa76f, 0xa76f,\r
+0xa771, 0xa778,\r
+0xa77a, 0xa77a,\r
+0xa77c, 0xa77c,\r
+0xa77f, 0xa77f,\r
+0xa781, 0xa781,\r
+0xa783, 0xa783,\r
+0xa785, 0xa785,\r
+0xa787, 0xa787,\r
+0xa78c, 0xa78c,\r
+0xa78e, 0xa78e,\r
+0xa791, 0xa791,\r
+0xa793, 0xa795,\r
+0xa797, 0xa797,\r
+0xa799, 0xa799,\r
+0xa79b, 0xa79b,\r
+0xa79d, 0xa79d,\r
+0xa79f, 0xa79f,\r
+0xa7a1, 0xa7a1,\r
+0xa7a3, 0xa7a3,\r
+0xa7a5, 0xa7a5,\r
+0xa7a7, 0xa7a7,\r
+0xa7a9, 0xa7a9,\r
+0xa7af, 0xa7af,\r
+0xa7b5, 0xa7b5,\r
+0xa7b7, 0xa7b7,\r
+0xa7b9, 0xa7b9,\r
+0xa7fa, 0xa7fa,\r
+0xab30, 0xab5a,\r
+0xab60, 0xab65,\r
+0xab70, 0xabbf,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xff41, 0xff5a,\r
+0x10428, 0x1044f,\r
+0x104d8, 0x104fb,\r
+0x10cc0, 0x10cf2,\r
+0x118c0, 0x118df,\r
+0x16e60, 0x16e7f,\r
+0x1d41a, 0x1d433,\r
+0x1d44e, 0x1d454,\r
+0x1d456, 0x1d467,\r
+0x1d482, 0x1d49b,\r
+0x1d4b6, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d4cf,\r
+0x1d4ea, 0x1d503,\r
+0x1d51e, 0x1d537,\r
+0x1d552, 0x1d56b,\r
+0x1d586, 0x1d59f,\r
+0x1d5ba, 0x1d5d3,\r
+0x1d5ee, 0x1d607,\r
+0x1d622, 0x1d63b,\r
+0x1d656, 0x1d66f,\r
+0x1d68a, 0x1d6a5,\r
+0x1d6c2, 0x1d6da,\r
+0x1d6dc, 0x1d6e1,\r
+0x1d6fc, 0x1d714,\r
+0x1d716, 0x1d71b,\r
+0x1d736, 0x1d74e,\r
+0x1d750, 0x1d755,\r
+0x1d770, 0x1d788,\r
+0x1d78a, 0x1d78f,\r
+0x1d7aa, 0x1d7c2,\r
+0x1d7c4, 0x1d7c9,\r
+0x1d7cb, 0x1d7cb,\r
+0x1e922, 0x1e943,\r
+}; /* END of CR_Ll */\r
+\r
+/* PROPERTY: 'Lm': General Category */\r
+static const OnigCodePoint\r
+CR_Lm[] = { 57,\r
+0x02b0, 0x02c1,\r
+0x02c6, 0x02d1,\r
+0x02e0, 0x02e4,\r
+0x02ec, 0x02ec,\r
+0x02ee, 0x02ee,\r
+0x0374, 0x0374,\r
+0x037a, 0x037a,\r
+0x0559, 0x0559,\r
+0x0640, 0x0640,\r
+0x06e5, 0x06e6,\r
+0x07f4, 0x07f5,\r
+0x07fa, 0x07fa,\r
+0x081a, 0x081a,\r
+0x0824, 0x0824,\r
+0x0828, 0x0828,\r
+0x0971, 0x0971,\r
+0x0e46, 0x0e46,\r
+0x0ec6, 0x0ec6,\r
+0x10fc, 0x10fc,\r
+0x17d7, 0x17d7,\r
+0x1843, 0x1843,\r
+0x1aa7, 0x1aa7,\r
+0x1c78, 0x1c7d,\r
+0x1d2c, 0x1d6a,\r
+0x1d78, 0x1d78,\r
+0x1d9b, 0x1dbf,\r
+0x2071, 0x2071,\r
+0x207f, 0x207f,\r
+0x2090, 0x209c,\r
+0x2c7c, 0x2c7d,\r
+0x2d6f, 0x2d6f,\r
+0x2e2f, 0x2e2f,\r
+0x3005, 0x3005,\r
+0x3031, 0x3035,\r
+0x303b, 0x303b,\r
+0x309d, 0x309e,\r
+0x30fc, 0x30fe,\r
+0xa015, 0xa015,\r
+0xa4f8, 0xa4fd,\r
+0xa60c, 0xa60c,\r
+0xa67f, 0xa67f,\r
+0xa69c, 0xa69d,\r
+0xa717, 0xa71f,\r
+0xa770, 0xa770,\r
+0xa788, 0xa788,\r
+0xa7f8, 0xa7f9,\r
+0xa9cf, 0xa9cf,\r
+0xa9e6, 0xa9e6,\r
+0xaa70, 0xaa70,\r
+0xaadd, 0xaadd,\r
+0xaaf3, 0xaaf4,\r
+0xab5c, 0xab5f,\r
+0xff70, 0xff70,\r
+0xff9e, 0xff9f,\r
+0x16b40, 0x16b43,\r
+0x16f93, 0x16f9f,\r
+0x16fe0, 0x16fe1,\r
+}; /* END of CR_Lm */\r
+\r
+/* PROPERTY: 'Lo': General Category */\r
+static const OnigCodePoint\r
+CR_Lo[] = { 470,\r
+0x00aa, 0x00aa,\r
+0x00ba, 0x00ba,\r
+0x01bb, 0x01bb,\r
+0x01c0, 0x01c3,\r
+0x0294, 0x0294,\r
+0x05d0, 0x05ea,\r
+0x05ef, 0x05f2,\r
+0x0620, 0x063f,\r
+0x0641, 0x064a,\r
+0x066e, 0x066f,\r
+0x0671, 0x06d3,\r
+0x06d5, 0x06d5,\r
+0x06ee, 0x06ef,\r
+0x06fa, 0x06fc,\r
+0x06ff, 0x06ff,\r
+0x0710, 0x0710,\r
+0x0712, 0x072f,\r
+0x074d, 0x07a5,\r
+0x07b1, 0x07b1,\r
+0x07ca, 0x07ea,\r
+0x0800, 0x0815,\r
+0x0840, 0x0858,\r
+0x0860, 0x086a,\r
+0x08a0, 0x08b4,\r
+0x08b6, 0x08bd,\r
+0x0904, 0x0939,\r
+0x093d, 0x093d,\r
+0x0950, 0x0950,\r
+0x0958, 0x0961,\r
+0x0972, 0x0980,\r
+0x0985, 0x098c,\r
+0x098f, 0x0990,\r
+0x0993, 0x09a8,\r
+0x09aa, 0x09b0,\r
+0x09b2, 0x09b2,\r
+0x09b6, 0x09b9,\r
+0x09bd, 0x09bd,\r
+0x09ce, 0x09ce,\r
+0x09dc, 0x09dd,\r
+0x09df, 0x09e1,\r
+0x09f0, 0x09f1,\r
+0x09fc, 0x09fc,\r
+0x0a05, 0x0a0a,\r
+0x0a0f, 0x0a10,\r
+0x0a13, 0x0a28,\r
+0x0a2a, 0x0a30,\r
+0x0a32, 0x0a33,\r
+0x0a35, 0x0a36,\r
+0x0a38, 0x0a39,\r
+0x0a59, 0x0a5c,\r
+0x0a5e, 0x0a5e,\r
+0x0a72, 0x0a74,\r
+0x0a85, 0x0a8d,\r
+0x0a8f, 0x0a91,\r
+0x0a93, 0x0aa8,\r
+0x0aaa, 0x0ab0,\r
+0x0ab2, 0x0ab3,\r
+0x0ab5, 0x0ab9,\r
+0x0abd, 0x0abd,\r
+0x0ad0, 0x0ad0,\r
+0x0ae0, 0x0ae1,\r
+0x0af9, 0x0af9,\r
+0x0b05, 0x0b0c,\r
+0x0b0f, 0x0b10,\r
+0x0b13, 0x0b28,\r
+0x0b2a, 0x0b30,\r
+0x0b32, 0x0b33,\r
+0x0b35, 0x0b39,\r
+0x0b3d, 0x0b3d,\r
+0x0b5c, 0x0b5d,\r
+0x0b5f, 0x0b61,\r
+0x0b71, 0x0b71,\r
+0x0b83, 0x0b83,\r
+0x0b85, 0x0b8a,\r
+0x0b8e, 0x0b90,\r
+0x0b92, 0x0b95,\r
+0x0b99, 0x0b9a,\r
+0x0b9c, 0x0b9c,\r
+0x0b9e, 0x0b9f,\r
+0x0ba3, 0x0ba4,\r
+0x0ba8, 0x0baa,\r
+0x0bae, 0x0bb9,\r
+0x0bd0, 0x0bd0,\r
+0x0c05, 0x0c0c,\r
+0x0c0e, 0x0c10,\r
+0x0c12, 0x0c28,\r
+0x0c2a, 0x0c39,\r
+0x0c3d, 0x0c3d,\r
+0x0c58, 0x0c5a,\r
+0x0c60, 0x0c61,\r
+0x0c80, 0x0c80,\r
+0x0c85, 0x0c8c,\r
+0x0c8e, 0x0c90,\r
+0x0c92, 0x0ca8,\r
+0x0caa, 0x0cb3,\r
+0x0cb5, 0x0cb9,\r
+0x0cbd, 0x0cbd,\r
+0x0cde, 0x0cde,\r
+0x0ce0, 0x0ce1,\r
+0x0cf1, 0x0cf2,\r
+0x0d05, 0x0d0c,\r
+0x0d0e, 0x0d10,\r
+0x0d12, 0x0d3a,\r
+0x0d3d, 0x0d3d,\r
+0x0d4e, 0x0d4e,\r
+0x0d54, 0x0d56,\r
+0x0d5f, 0x0d61,\r
+0x0d7a, 0x0d7f,\r
+0x0d85, 0x0d96,\r
+0x0d9a, 0x0db1,\r
+0x0db3, 0x0dbb,\r
+0x0dbd, 0x0dbd,\r
+0x0dc0, 0x0dc6,\r
+0x0e01, 0x0e30,\r
+0x0e32, 0x0e33,\r
+0x0e40, 0x0e45,\r
+0x0e81, 0x0e82,\r
+0x0e84, 0x0e84,\r
+0x0e87, 0x0e88,\r
+0x0e8a, 0x0e8a,\r
+0x0e8d, 0x0e8d,\r
+0x0e94, 0x0e97,\r
+0x0e99, 0x0e9f,\r
+0x0ea1, 0x0ea3,\r
+0x0ea5, 0x0ea5,\r
+0x0ea7, 0x0ea7,\r
+0x0eaa, 0x0eab,\r
+0x0ead, 0x0eb0,\r
+0x0eb2, 0x0eb3,\r
+0x0ebd, 0x0ebd,\r
+0x0ec0, 0x0ec4,\r
+0x0edc, 0x0edf,\r
+0x0f00, 0x0f00,\r
+0x0f40, 0x0f47,\r
+0x0f49, 0x0f6c,\r
+0x0f88, 0x0f8c,\r
+0x1000, 0x102a,\r
+0x103f, 0x103f,\r
+0x1050, 0x1055,\r
+0x105a, 0x105d,\r
+0x1061, 0x1061,\r
+0x1065, 0x1066,\r
+0x106e, 0x1070,\r
+0x1075, 0x1081,\r
+0x108e, 0x108e,\r
+0x1100, 0x1248,\r
+0x124a, 0x124d,\r
+0x1250, 0x1256,\r
+0x1258, 0x1258,\r
+0x125a, 0x125d,\r
+0x1260, 0x1288,\r
+0x128a, 0x128d,\r
+0x1290, 0x12b0,\r
+0x12b2, 0x12b5,\r
+0x12b8, 0x12be,\r
+0x12c0, 0x12c0,\r
+0x12c2, 0x12c5,\r
+0x12c8, 0x12d6,\r
+0x12d8, 0x1310,\r
+0x1312, 0x1315,\r
+0x1318, 0x135a,\r
+0x1380, 0x138f,\r
+0x1401, 0x166c,\r
+0x166f, 0x167f,\r
+0x1681, 0x169a,\r
+0x16a0, 0x16ea,\r
+0x16f1, 0x16f8,\r
+0x1700, 0x170c,\r
+0x170e, 0x1711,\r
+0x1720, 0x1731,\r
+0x1740, 0x1751,\r
+0x1760, 0x176c,\r
+0x176e, 0x1770,\r
+0x1780, 0x17b3,\r
+0x17dc, 0x17dc,\r
+0x1820, 0x1842,\r
+0x1844, 0x1878,\r
+0x1880, 0x1884,\r
+0x1887, 0x18a8,\r
+0x18aa, 0x18aa,\r
+0x18b0, 0x18f5,\r
+0x1900, 0x191e,\r
+0x1950, 0x196d,\r
+0x1970, 0x1974,\r
+0x1980, 0x19ab,\r
+0x19b0, 0x19c9,\r
+0x1a00, 0x1a16,\r
+0x1a20, 0x1a54,\r
+0x1b05, 0x1b33,\r
+0x1b45, 0x1b4b,\r
+0x1b83, 0x1ba0,\r
+0x1bae, 0x1baf,\r
+0x1bba, 0x1be5,\r
+0x1c00, 0x1c23,\r
+0x1c4d, 0x1c4f,\r
+0x1c5a, 0x1c77,\r
+0x1ce9, 0x1cec,\r
+0x1cee, 0x1cf1,\r
+0x1cf5, 0x1cf6,\r
+0x2135, 0x2138,\r
+0x2d30, 0x2d67,\r
+0x2d80, 0x2d96,\r
+0x2da0, 0x2da6,\r
+0x2da8, 0x2dae,\r
+0x2db0, 0x2db6,\r
+0x2db8, 0x2dbe,\r
+0x2dc0, 0x2dc6,\r
+0x2dc8, 0x2dce,\r
+0x2dd0, 0x2dd6,\r
+0x2dd8, 0x2dde,\r
+0x3006, 0x3006,\r
+0x303c, 0x303c,\r
+0x3041, 0x3096,\r
+0x309f, 0x309f,\r
+0x30a1, 0x30fa,\r
+0x30ff, 0x30ff,\r
+0x3105, 0x312f,\r
+0x3131, 0x318e,\r
+0x31a0, 0x31ba,\r
+0x31f0, 0x31ff,\r
+0x3400, 0x4db5,\r
+0x4e00, 0x9fef,\r
+0xa000, 0xa014,\r
+0xa016, 0xa48c,\r
+0xa4d0, 0xa4f7,\r
+0xa500, 0xa60b,\r
+0xa610, 0xa61f,\r
+0xa62a, 0xa62b,\r
+0xa66e, 0xa66e,\r
+0xa6a0, 0xa6e5,\r
+0xa78f, 0xa78f,\r
+0xa7f7, 0xa7f7,\r
+0xa7fb, 0xa801,\r
+0xa803, 0xa805,\r
+0xa807, 0xa80a,\r
+0xa80c, 0xa822,\r
+0xa840, 0xa873,\r
+0xa882, 0xa8b3,\r
+0xa8f2, 0xa8f7,\r
+0xa8fb, 0xa8fb,\r
+0xa8fd, 0xa8fe,\r
+0xa90a, 0xa925,\r
+0xa930, 0xa946,\r
+0xa960, 0xa97c,\r
+0xa984, 0xa9b2,\r
+0xa9e0, 0xa9e4,\r
+0xa9e7, 0xa9ef,\r
+0xa9fa, 0xa9fe,\r
+0xaa00, 0xaa28,\r
+0xaa40, 0xaa42,\r
+0xaa44, 0xaa4b,\r
+0xaa60, 0xaa6f,\r
+0xaa71, 0xaa76,\r
+0xaa7a, 0xaa7a,\r
+0xaa7e, 0xaaaf,\r
+0xaab1, 0xaab1,\r
+0xaab5, 0xaab6,\r
+0xaab9, 0xaabd,\r
+0xaac0, 0xaac0,\r
+0xaac2, 0xaac2,\r
+0xaadb, 0xaadc,\r
+0xaae0, 0xaaea,\r
+0xaaf2, 0xaaf2,\r
+0xab01, 0xab06,\r
+0xab09, 0xab0e,\r
+0xab11, 0xab16,\r
+0xab20, 0xab26,\r
+0xab28, 0xab2e,\r
+0xabc0, 0xabe2,\r
+0xac00, 0xd7a3,\r
+0xd7b0, 0xd7c6,\r
+0xd7cb, 0xd7fb,\r
+0xf900, 0xfa6d,\r
+0xfa70, 0xfad9,\r
+0xfb1d, 0xfb1d,\r
+0xfb1f, 0xfb28,\r
+0xfb2a, 0xfb36,\r
+0xfb38, 0xfb3c,\r
+0xfb3e, 0xfb3e,\r
+0xfb40, 0xfb41,\r
+0xfb43, 0xfb44,\r
+0xfb46, 0xfbb1,\r
+0xfbd3, 0xfd3d,\r
+0xfd50, 0xfd8f,\r
+0xfd92, 0xfdc7,\r
+0xfdf0, 0xfdfb,\r
+0xfe70, 0xfe74,\r
+0xfe76, 0xfefc,\r
+0xff66, 0xff6f,\r
+0xff71, 0xff9d,\r
+0xffa0, 0xffbe,\r
+0xffc2, 0xffc7,\r
+0xffca, 0xffcf,\r
+0xffd2, 0xffd7,\r
+0xffda, 0xffdc,\r
+0x10000, 0x1000b,\r
+0x1000d, 0x10026,\r
+0x10028, 0x1003a,\r
+0x1003c, 0x1003d,\r
+0x1003f, 0x1004d,\r
+0x10050, 0x1005d,\r
+0x10080, 0x100fa,\r
+0x10280, 0x1029c,\r
+0x102a0, 0x102d0,\r
+0x10300, 0x1031f,\r
+0x1032d, 0x10340,\r
+0x10342, 0x10349,\r
+0x10350, 0x10375,\r
+0x10380, 0x1039d,\r
+0x103a0, 0x103c3,\r
+0x103c8, 0x103cf,\r
+0x10450, 0x1049d,\r
+0x10500, 0x10527,\r
+0x10530, 0x10563,\r
+0x10600, 0x10736,\r
+0x10740, 0x10755,\r
+0x10760, 0x10767,\r
+0x10800, 0x10805,\r
+0x10808, 0x10808,\r
+0x1080a, 0x10835,\r
+0x10837, 0x10838,\r
+0x1083c, 0x1083c,\r
+0x1083f, 0x10855,\r
+0x10860, 0x10876,\r
+0x10880, 0x1089e,\r
+0x108e0, 0x108f2,\r
+0x108f4, 0x108f5,\r
+0x10900, 0x10915,\r
+0x10920, 0x10939,\r
+0x10980, 0x109b7,\r
+0x109be, 0x109bf,\r
+0x10a00, 0x10a00,\r
+0x10a10, 0x10a13,\r
+0x10a15, 0x10a17,\r
+0x10a19, 0x10a35,\r
+0x10a60, 0x10a7c,\r
+0x10a80, 0x10a9c,\r
+0x10ac0, 0x10ac7,\r
+0x10ac9, 0x10ae4,\r
+0x10b00, 0x10b35,\r
+0x10b40, 0x10b55,\r
+0x10b60, 0x10b72,\r
+0x10b80, 0x10b91,\r
+0x10c00, 0x10c48,\r
+0x10d00, 0x10d23,\r
+0x10f00, 0x10f1c,\r
+0x10f27, 0x10f27,\r
+0x10f30, 0x10f45,\r
+0x11003, 0x11037,\r
+0x11083, 0x110af,\r
+0x110d0, 0x110e8,\r
+0x11103, 0x11126,\r
+0x11144, 0x11144,\r
+0x11150, 0x11172,\r
+0x11176, 0x11176,\r
+0x11183, 0x111b2,\r
+0x111c1, 0x111c4,\r
+0x111da, 0x111da,\r
+0x111dc, 0x111dc,\r
+0x11200, 0x11211,\r
+0x11213, 0x1122b,\r
+0x11280, 0x11286,\r
+0x11288, 0x11288,\r
+0x1128a, 0x1128d,\r
+0x1128f, 0x1129d,\r
+0x1129f, 0x112a8,\r
+0x112b0, 0x112de,\r
+0x11305, 0x1130c,\r
+0x1130f, 0x11310,\r
+0x11313, 0x11328,\r
+0x1132a, 0x11330,\r
+0x11332, 0x11333,\r
+0x11335, 0x11339,\r
+0x1133d, 0x1133d,\r
+0x11350, 0x11350,\r
+0x1135d, 0x11361,\r
+0x11400, 0x11434,\r
+0x11447, 0x1144a,\r
+0x11480, 0x114af,\r
+0x114c4, 0x114c5,\r
+0x114c7, 0x114c7,\r
+0x11580, 0x115ae,\r
+0x115d8, 0x115db,\r
+0x11600, 0x1162f,\r
+0x11644, 0x11644,\r
+0x11680, 0x116aa,\r
+0x11700, 0x1171a,\r
+0x11800, 0x1182b,\r
+0x118ff, 0x118ff,\r
+0x11a00, 0x11a00,\r
+0x11a0b, 0x11a32,\r
+0x11a3a, 0x11a3a,\r
+0x11a50, 0x11a50,\r
+0x11a5c, 0x11a83,\r
+0x11a86, 0x11a89,\r
+0x11a9d, 0x11a9d,\r
+0x11ac0, 0x11af8,\r
+0x11c00, 0x11c08,\r
+0x11c0a, 0x11c2e,\r
+0x11c40, 0x11c40,\r
+0x11c72, 0x11c8f,\r
+0x11d00, 0x11d06,\r
+0x11d08, 0x11d09,\r
+0x11d0b, 0x11d30,\r
+0x11d46, 0x11d46,\r
+0x11d60, 0x11d65,\r
+0x11d67, 0x11d68,\r
+0x11d6a, 0x11d89,\r
+0x11d98, 0x11d98,\r
+0x11ee0, 0x11ef2,\r
+0x12000, 0x12399,\r
+0x12480, 0x12543,\r
+0x13000, 0x1342e,\r
+0x14400, 0x14646,\r
+0x16800, 0x16a38,\r
+0x16a40, 0x16a5e,\r
+0x16ad0, 0x16aed,\r
+0x16b00, 0x16b2f,\r
+0x16b63, 0x16b77,\r
+0x16b7d, 0x16b8f,\r
+0x16f00, 0x16f44,\r
+0x16f50, 0x16f50,\r
+0x17000, 0x187f1,\r
+0x18800, 0x18af2,\r
+0x1b000, 0x1b11e,\r
+0x1b170, 0x1b2fb,\r
+0x1bc00, 0x1bc6a,\r
+0x1bc70, 0x1bc7c,\r
+0x1bc80, 0x1bc88,\r
+0x1bc90, 0x1bc99,\r
+0x1e800, 0x1e8c4,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+0x2f800, 0x2fa1d,\r
+}; /* END of CR_Lo */\r
+\r
+/* PROPERTY: 'Logical_Order_Exception': Binary Property */\r
+static const OnigCodePoint\r
+CR_Logical_Order_Exception[] = { 7,\r
+0x0e40, 0x0e44,\r
+0x0ec0, 0x0ec4,\r
+0x19b5, 0x19b7,\r
+0x19ba, 0x19ba,\r
+0xaab5, 0xaab6,\r
+0xaab9, 0xaab9,\r
+0xaabb, 0xaabc,\r
+}; /* END of CR_Logical_Order_Exception */\r
+\r
+/* PROPERTY: 'Lowercase': Derived Property */\r
+#define CR_Lowercase CR_Lower\r
+\r
+/* PROPERTY: 'Lt': General Category */\r
+static const OnigCodePoint\r
+CR_Lt[] = { 10,\r
+0x01c5, 0x01c5,\r
+0x01c8, 0x01c8,\r
+0x01cb, 0x01cb,\r
+0x01f2, 0x01f2,\r
+0x1f88, 0x1f8f,\r
+0x1f98, 0x1f9f,\r
+0x1fa8, 0x1faf,\r
+0x1fbc, 0x1fbc,\r
+0x1fcc, 0x1fcc,\r
+0x1ffc, 0x1ffc,\r
+}; /* END of CR_Lt */\r
+\r
+/* PROPERTY: 'Lu': General Category */\r
+static const OnigCodePoint\r
+CR_Lu[] = { 631,\r
+0x0041, 0x005a,\r
+0x00c0, 0x00d6,\r
+0x00d8, 0x00de,\r
+0x0100, 0x0100,\r
+0x0102, 0x0102,\r
+0x0104, 0x0104,\r
+0x0106, 0x0106,\r
+0x0108, 0x0108,\r
+0x010a, 0x010a,\r
+0x010c, 0x010c,\r
+0x010e, 0x010e,\r
+0x0110, 0x0110,\r
+0x0112, 0x0112,\r
+0x0114, 0x0114,\r
+0x0116, 0x0116,\r
+0x0118, 0x0118,\r
+0x011a, 0x011a,\r
+0x011c, 0x011c,\r
+0x011e, 0x011e,\r
+0x0120, 0x0120,\r
+0x0122, 0x0122,\r
+0x0124, 0x0124,\r
+0x0126, 0x0126,\r
+0x0128, 0x0128,\r
+0x012a, 0x012a,\r
+0x012c, 0x012c,\r
+0x012e, 0x012e,\r
+0x0130, 0x0130,\r
+0x0132, 0x0132,\r
+0x0134, 0x0134,\r
+0x0136, 0x0136,\r
+0x0139, 0x0139,\r
+0x013b, 0x013b,\r
+0x013d, 0x013d,\r
+0x013f, 0x013f,\r
+0x0141, 0x0141,\r
+0x0143, 0x0143,\r
+0x0145, 0x0145,\r
+0x0147, 0x0147,\r
+0x014a, 0x014a,\r
+0x014c, 0x014c,\r
+0x014e, 0x014e,\r
+0x0150, 0x0150,\r
+0x0152, 0x0152,\r
+0x0154, 0x0154,\r
+0x0156, 0x0156,\r
+0x0158, 0x0158,\r
+0x015a, 0x015a,\r
+0x015c, 0x015c,\r
+0x015e, 0x015e,\r
+0x0160, 0x0160,\r
+0x0162, 0x0162,\r
+0x0164, 0x0164,\r
+0x0166, 0x0166,\r
+0x0168, 0x0168,\r
+0x016a, 0x016a,\r
+0x016c, 0x016c,\r
+0x016e, 0x016e,\r
+0x0170, 0x0170,\r
+0x0172, 0x0172,\r
+0x0174, 0x0174,\r
+0x0176, 0x0176,\r
+0x0178, 0x0179,\r
+0x017b, 0x017b,\r
+0x017d, 0x017d,\r
+0x0181, 0x0182,\r
+0x0184, 0x0184,\r
+0x0186, 0x0187,\r
+0x0189, 0x018b,\r
+0x018e, 0x0191,\r
+0x0193, 0x0194,\r
+0x0196, 0x0198,\r
+0x019c, 0x019d,\r
+0x019f, 0x01a0,\r
+0x01a2, 0x01a2,\r
+0x01a4, 0x01a4,\r
+0x01a6, 0x01a7,\r
+0x01a9, 0x01a9,\r
+0x01ac, 0x01ac,\r
+0x01ae, 0x01af,\r
+0x01b1, 0x01b3,\r
+0x01b5, 0x01b5,\r
+0x01b7, 0x01b8,\r
+0x01bc, 0x01bc,\r
+0x01c4, 0x01c4,\r
+0x01c7, 0x01c7,\r
+0x01ca, 0x01ca,\r
+0x01cd, 0x01cd,\r
+0x01cf, 0x01cf,\r
+0x01d1, 0x01d1,\r
+0x01d3, 0x01d3,\r
+0x01d5, 0x01d5,\r
+0x01d7, 0x01d7,\r
+0x01d9, 0x01d9,\r
+0x01db, 0x01db,\r
+0x01de, 0x01de,\r
+0x01e0, 0x01e0,\r
+0x01e2, 0x01e2,\r
+0x01e4, 0x01e4,\r
+0x01e6, 0x01e6,\r
+0x01e8, 0x01e8,\r
+0x01ea, 0x01ea,\r
+0x01ec, 0x01ec,\r
+0x01ee, 0x01ee,\r
+0x01f1, 0x01f1,\r
+0x01f4, 0x01f4,\r
+0x01f6, 0x01f8,\r
+0x01fa, 0x01fa,\r
+0x01fc, 0x01fc,\r
+0x01fe, 0x01fe,\r
+0x0200, 0x0200,\r
+0x0202, 0x0202,\r
+0x0204, 0x0204,\r
+0x0206, 0x0206,\r
+0x0208, 0x0208,\r
+0x020a, 0x020a,\r
+0x020c, 0x020c,\r
+0x020e, 0x020e,\r
+0x0210, 0x0210,\r
+0x0212, 0x0212,\r
+0x0214, 0x0214,\r
+0x0216, 0x0216,\r
+0x0218, 0x0218,\r
+0x021a, 0x021a,\r
+0x021c, 0x021c,\r
+0x021e, 0x021e,\r
+0x0220, 0x0220,\r
+0x0222, 0x0222,\r
+0x0224, 0x0224,\r
+0x0226, 0x0226,\r
+0x0228, 0x0228,\r
+0x022a, 0x022a,\r
+0x022c, 0x022c,\r
+0x022e, 0x022e,\r
+0x0230, 0x0230,\r
+0x0232, 0x0232,\r
+0x023a, 0x023b,\r
+0x023d, 0x023e,\r
+0x0241, 0x0241,\r
+0x0243, 0x0246,\r
+0x0248, 0x0248,\r
+0x024a, 0x024a,\r
+0x024c, 0x024c,\r
+0x024e, 0x024e,\r
+0x0370, 0x0370,\r
+0x0372, 0x0372,\r
+0x0376, 0x0376,\r
+0x037f, 0x037f,\r
+0x0386, 0x0386,\r
+0x0388, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x038f,\r
+0x0391, 0x03a1,\r
+0x03a3, 0x03ab,\r
+0x03cf, 0x03cf,\r
+0x03d2, 0x03d4,\r
+0x03d8, 0x03d8,\r
+0x03da, 0x03da,\r
+0x03dc, 0x03dc,\r
+0x03de, 0x03de,\r
+0x03e0, 0x03e0,\r
+0x03e2, 0x03e2,\r
+0x03e4, 0x03e4,\r
+0x03e6, 0x03e6,\r
+0x03e8, 0x03e8,\r
+0x03ea, 0x03ea,\r
+0x03ec, 0x03ec,\r
+0x03ee, 0x03ee,\r
+0x03f4, 0x03f4,\r
+0x03f7, 0x03f7,\r
+0x03f9, 0x03fa,\r
+0x03fd, 0x042f,\r
+0x0460, 0x0460,\r
+0x0462, 0x0462,\r
+0x0464, 0x0464,\r
+0x0466, 0x0466,\r
+0x0468, 0x0468,\r
+0x046a, 0x046a,\r
+0x046c, 0x046c,\r
+0x046e, 0x046e,\r
+0x0470, 0x0470,\r
+0x0472, 0x0472,\r
+0x0474, 0x0474,\r
+0x0476, 0x0476,\r
+0x0478, 0x0478,\r
+0x047a, 0x047a,\r
+0x047c, 0x047c,\r
+0x047e, 0x047e,\r
+0x0480, 0x0480,\r
+0x048a, 0x048a,\r
+0x048c, 0x048c,\r
+0x048e, 0x048e,\r
+0x0490, 0x0490,\r
+0x0492, 0x0492,\r
+0x0494, 0x0494,\r
+0x0496, 0x0496,\r
+0x0498, 0x0498,\r
+0x049a, 0x049a,\r
+0x049c, 0x049c,\r
+0x049e, 0x049e,\r
+0x04a0, 0x04a0,\r
+0x04a2, 0x04a2,\r
+0x04a4, 0x04a4,\r
+0x04a6, 0x04a6,\r
+0x04a8, 0x04a8,\r
+0x04aa, 0x04aa,\r
+0x04ac, 0x04ac,\r
+0x04ae, 0x04ae,\r
+0x04b0, 0x04b0,\r
+0x04b2, 0x04b2,\r
+0x04b4, 0x04b4,\r
+0x04b6, 0x04b6,\r
+0x04b8, 0x04b8,\r
+0x04ba, 0x04ba,\r
+0x04bc, 0x04bc,\r
+0x04be, 0x04be,\r
+0x04c0, 0x04c1,\r
+0x04c3, 0x04c3,\r
+0x04c5, 0x04c5,\r
+0x04c7, 0x04c7,\r
+0x04c9, 0x04c9,\r
+0x04cb, 0x04cb,\r
+0x04cd, 0x04cd,\r
+0x04d0, 0x04d0,\r
+0x04d2, 0x04d2,\r
+0x04d4, 0x04d4,\r
+0x04d6, 0x04d6,\r
+0x04d8, 0x04d8,\r
+0x04da, 0x04da,\r
+0x04dc, 0x04dc,\r
+0x04de, 0x04de,\r
+0x04e0, 0x04e0,\r
+0x04e2, 0x04e2,\r
+0x04e4, 0x04e4,\r
+0x04e6, 0x04e6,\r
+0x04e8, 0x04e8,\r
+0x04ea, 0x04ea,\r
+0x04ec, 0x04ec,\r
+0x04ee, 0x04ee,\r
+0x04f0, 0x04f0,\r
+0x04f2, 0x04f2,\r
+0x04f4, 0x04f4,\r
+0x04f6, 0x04f6,\r
+0x04f8, 0x04f8,\r
+0x04fa, 0x04fa,\r
+0x04fc, 0x04fc,\r
+0x04fe, 0x04fe,\r
+0x0500, 0x0500,\r
+0x0502, 0x0502,\r
+0x0504, 0x0504,\r
+0x0506, 0x0506,\r
+0x0508, 0x0508,\r
+0x050a, 0x050a,\r
+0x050c, 0x050c,\r
+0x050e, 0x050e,\r
+0x0510, 0x0510,\r
+0x0512, 0x0512,\r
+0x0514, 0x0514,\r
+0x0516, 0x0516,\r
+0x0518, 0x0518,\r
+0x051a, 0x051a,\r
+0x051c, 0x051c,\r
+0x051e, 0x051e,\r
+0x0520, 0x0520,\r
+0x0522, 0x0522,\r
+0x0524, 0x0524,\r
+0x0526, 0x0526,\r
+0x0528, 0x0528,\r
+0x052a, 0x052a,\r
+0x052c, 0x052c,\r
+0x052e, 0x052e,\r
+0x0531, 0x0556,\r
+0x10a0, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x13a0, 0x13f5,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cbf,\r
+0x1e00, 0x1e00,\r
+0x1e02, 0x1e02,\r
+0x1e04, 0x1e04,\r
+0x1e06, 0x1e06,\r
+0x1e08, 0x1e08,\r
+0x1e0a, 0x1e0a,\r
+0x1e0c, 0x1e0c,\r
+0x1e0e, 0x1e0e,\r
+0x1e10, 0x1e10,\r
+0x1e12, 0x1e12,\r
+0x1e14, 0x1e14,\r
+0x1e16, 0x1e16,\r
+0x1e18, 0x1e18,\r
+0x1e1a, 0x1e1a,\r
+0x1e1c, 0x1e1c,\r
+0x1e1e, 0x1e1e,\r
+0x1e20, 0x1e20,\r
+0x1e22, 0x1e22,\r
+0x1e24, 0x1e24,\r
+0x1e26, 0x1e26,\r
+0x1e28, 0x1e28,\r
+0x1e2a, 0x1e2a,\r
+0x1e2c, 0x1e2c,\r
+0x1e2e, 0x1e2e,\r
+0x1e30, 0x1e30,\r
+0x1e32, 0x1e32,\r
+0x1e34, 0x1e34,\r
+0x1e36, 0x1e36,\r
+0x1e38, 0x1e38,\r
+0x1e3a, 0x1e3a,\r
+0x1e3c, 0x1e3c,\r
+0x1e3e, 0x1e3e,\r
+0x1e40, 0x1e40,\r
+0x1e42, 0x1e42,\r
+0x1e44, 0x1e44,\r
+0x1e46, 0x1e46,\r
+0x1e48, 0x1e48,\r
+0x1e4a, 0x1e4a,\r
+0x1e4c, 0x1e4c,\r
+0x1e4e, 0x1e4e,\r
+0x1e50, 0x1e50,\r
+0x1e52, 0x1e52,\r
+0x1e54, 0x1e54,\r
+0x1e56, 0x1e56,\r
+0x1e58, 0x1e58,\r
+0x1e5a, 0x1e5a,\r
+0x1e5c, 0x1e5c,\r
+0x1e5e, 0x1e5e,\r
+0x1e60, 0x1e60,\r
+0x1e62, 0x1e62,\r
+0x1e64, 0x1e64,\r
+0x1e66, 0x1e66,\r
+0x1e68, 0x1e68,\r
+0x1e6a, 0x1e6a,\r
+0x1e6c, 0x1e6c,\r
+0x1e6e, 0x1e6e,\r
+0x1e70, 0x1e70,\r
+0x1e72, 0x1e72,\r
+0x1e74, 0x1e74,\r
+0x1e76, 0x1e76,\r
+0x1e78, 0x1e78,\r
+0x1e7a, 0x1e7a,\r
+0x1e7c, 0x1e7c,\r
+0x1e7e, 0x1e7e,\r
+0x1e80, 0x1e80,\r
+0x1e82, 0x1e82,\r
+0x1e84, 0x1e84,\r
+0x1e86, 0x1e86,\r
+0x1e88, 0x1e88,\r
+0x1e8a, 0x1e8a,\r
+0x1e8c, 0x1e8c,\r
+0x1e8e, 0x1e8e,\r
+0x1e90, 0x1e90,\r
+0x1e92, 0x1e92,\r
+0x1e94, 0x1e94,\r
+0x1e9e, 0x1e9e,\r
+0x1ea0, 0x1ea0,\r
+0x1ea2, 0x1ea2,\r
+0x1ea4, 0x1ea4,\r
+0x1ea6, 0x1ea6,\r
+0x1ea8, 0x1ea8,\r
+0x1eaa, 0x1eaa,\r
+0x1eac, 0x1eac,\r
+0x1eae, 0x1eae,\r
+0x1eb0, 0x1eb0,\r
+0x1eb2, 0x1eb2,\r
+0x1eb4, 0x1eb4,\r
+0x1eb6, 0x1eb6,\r
+0x1eb8, 0x1eb8,\r
+0x1eba, 0x1eba,\r
+0x1ebc, 0x1ebc,\r
+0x1ebe, 0x1ebe,\r
+0x1ec0, 0x1ec0,\r
+0x1ec2, 0x1ec2,\r
+0x1ec4, 0x1ec4,\r
+0x1ec6, 0x1ec6,\r
+0x1ec8, 0x1ec8,\r
+0x1eca, 0x1eca,\r
+0x1ecc, 0x1ecc,\r
+0x1ece, 0x1ece,\r
+0x1ed0, 0x1ed0,\r
+0x1ed2, 0x1ed2,\r
+0x1ed4, 0x1ed4,\r
+0x1ed6, 0x1ed6,\r
+0x1ed8, 0x1ed8,\r
+0x1eda, 0x1eda,\r
+0x1edc, 0x1edc,\r
+0x1ede, 0x1ede,\r
+0x1ee0, 0x1ee0,\r
+0x1ee2, 0x1ee2,\r
+0x1ee4, 0x1ee4,\r
+0x1ee6, 0x1ee6,\r
+0x1ee8, 0x1ee8,\r
+0x1eea, 0x1eea,\r
+0x1eec, 0x1eec,\r
+0x1eee, 0x1eee,\r
+0x1ef0, 0x1ef0,\r
+0x1ef2, 0x1ef2,\r
+0x1ef4, 0x1ef4,\r
+0x1ef6, 0x1ef6,\r
+0x1ef8, 0x1ef8,\r
+0x1efa, 0x1efa,\r
+0x1efc, 0x1efc,\r
+0x1efe, 0x1efe,\r
+0x1f08, 0x1f0f,\r
+0x1f18, 0x1f1d,\r
+0x1f28, 0x1f2f,\r
+0x1f38, 0x1f3f,\r
+0x1f48, 0x1f4d,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f5f,\r
+0x1f68, 0x1f6f,\r
+0x1fb8, 0x1fbb,\r
+0x1fc8, 0x1fcb,\r
+0x1fd8, 0x1fdb,\r
+0x1fe8, 0x1fec,\r
+0x1ff8, 0x1ffb,\r
+0x2102, 0x2102,\r
+0x2107, 0x2107,\r
+0x210b, 0x210d,\r
+0x2110, 0x2112,\r
+0x2115, 0x2115,\r
+0x2119, 0x211d,\r
+0x2124, 0x2124,\r
+0x2126, 0x2126,\r
+0x2128, 0x2128,\r
+0x212a, 0x212d,\r
+0x2130, 0x2133,\r
+0x213e, 0x213f,\r
+0x2145, 0x2145,\r
+0x2183, 0x2183,\r
+0x2c00, 0x2c2e,\r
+0x2c60, 0x2c60,\r
+0x2c62, 0x2c64,\r
+0x2c67, 0x2c67,\r
+0x2c69, 0x2c69,\r
+0x2c6b, 0x2c6b,\r
+0x2c6d, 0x2c70,\r
+0x2c72, 0x2c72,\r
+0x2c75, 0x2c75,\r
+0x2c7e, 0x2c80,\r
+0x2c82, 0x2c82,\r
+0x2c84, 0x2c84,\r
+0x2c86, 0x2c86,\r
+0x2c88, 0x2c88,\r
+0x2c8a, 0x2c8a,\r
+0x2c8c, 0x2c8c,\r
+0x2c8e, 0x2c8e,\r
+0x2c90, 0x2c90,\r
+0x2c92, 0x2c92,\r
+0x2c94, 0x2c94,\r
+0x2c96, 0x2c96,\r
+0x2c98, 0x2c98,\r
+0x2c9a, 0x2c9a,\r
+0x2c9c, 0x2c9c,\r
+0x2c9e, 0x2c9e,\r
+0x2ca0, 0x2ca0,\r
+0x2ca2, 0x2ca2,\r
+0x2ca4, 0x2ca4,\r
+0x2ca6, 0x2ca6,\r
+0x2ca8, 0x2ca8,\r
+0x2caa, 0x2caa,\r
+0x2cac, 0x2cac,\r
+0x2cae, 0x2cae,\r
+0x2cb0, 0x2cb0,\r
+0x2cb2, 0x2cb2,\r
+0x2cb4, 0x2cb4,\r
+0x2cb6, 0x2cb6,\r
+0x2cb8, 0x2cb8,\r
+0x2cba, 0x2cba,\r
+0x2cbc, 0x2cbc,\r
+0x2cbe, 0x2cbe,\r
+0x2cc0, 0x2cc0,\r
+0x2cc2, 0x2cc2,\r
+0x2cc4, 0x2cc4,\r
+0x2cc6, 0x2cc6,\r
+0x2cc8, 0x2cc8,\r
+0x2cca, 0x2cca,\r
+0x2ccc, 0x2ccc,\r
+0x2cce, 0x2cce,\r
+0x2cd0, 0x2cd0,\r
+0x2cd2, 0x2cd2,\r
+0x2cd4, 0x2cd4,\r
+0x2cd6, 0x2cd6,\r
+0x2cd8, 0x2cd8,\r
+0x2cda, 0x2cda,\r
+0x2cdc, 0x2cdc,\r
+0x2cde, 0x2cde,\r
+0x2ce0, 0x2ce0,\r
+0x2ce2, 0x2ce2,\r
+0x2ceb, 0x2ceb,\r
+0x2ced, 0x2ced,\r
+0x2cf2, 0x2cf2,\r
+0xa640, 0xa640,\r
+0xa642, 0xa642,\r
+0xa644, 0xa644,\r
+0xa646, 0xa646,\r
+0xa648, 0xa648,\r
+0xa64a, 0xa64a,\r
+0xa64c, 0xa64c,\r
+0xa64e, 0xa64e,\r
+0xa650, 0xa650,\r
+0xa652, 0xa652,\r
+0xa654, 0xa654,\r
+0xa656, 0xa656,\r
+0xa658, 0xa658,\r
+0xa65a, 0xa65a,\r
+0xa65c, 0xa65c,\r
+0xa65e, 0xa65e,\r
+0xa660, 0xa660,\r
+0xa662, 0xa662,\r
+0xa664, 0xa664,\r
+0xa666, 0xa666,\r
+0xa668, 0xa668,\r
+0xa66a, 0xa66a,\r
+0xa66c, 0xa66c,\r
+0xa680, 0xa680,\r
+0xa682, 0xa682,\r
+0xa684, 0xa684,\r
+0xa686, 0xa686,\r
+0xa688, 0xa688,\r
+0xa68a, 0xa68a,\r
+0xa68c, 0xa68c,\r
+0xa68e, 0xa68e,\r
+0xa690, 0xa690,\r
+0xa692, 0xa692,\r
+0xa694, 0xa694,\r
+0xa696, 0xa696,\r
+0xa698, 0xa698,\r
+0xa69a, 0xa69a,\r
+0xa722, 0xa722,\r
+0xa724, 0xa724,\r
+0xa726, 0xa726,\r
+0xa728, 0xa728,\r
+0xa72a, 0xa72a,\r
+0xa72c, 0xa72c,\r
+0xa72e, 0xa72e,\r
+0xa732, 0xa732,\r
+0xa734, 0xa734,\r
+0xa736, 0xa736,\r
+0xa738, 0xa738,\r
+0xa73a, 0xa73a,\r
+0xa73c, 0xa73c,\r
+0xa73e, 0xa73e,\r
+0xa740, 0xa740,\r
+0xa742, 0xa742,\r
+0xa744, 0xa744,\r
+0xa746, 0xa746,\r
+0xa748, 0xa748,\r
+0xa74a, 0xa74a,\r
+0xa74c, 0xa74c,\r
+0xa74e, 0xa74e,\r
+0xa750, 0xa750,\r
+0xa752, 0xa752,\r
+0xa754, 0xa754,\r
+0xa756, 0xa756,\r
+0xa758, 0xa758,\r
+0xa75a, 0xa75a,\r
+0xa75c, 0xa75c,\r
+0xa75e, 0xa75e,\r
+0xa760, 0xa760,\r
+0xa762, 0xa762,\r
+0xa764, 0xa764,\r
+0xa766, 0xa766,\r
+0xa768, 0xa768,\r
+0xa76a, 0xa76a,\r
+0xa76c, 0xa76c,\r
+0xa76e, 0xa76e,\r
+0xa779, 0xa779,\r
+0xa77b, 0xa77b,\r
+0xa77d, 0xa77e,\r
+0xa780, 0xa780,\r
+0xa782, 0xa782,\r
+0xa784, 0xa784,\r
+0xa786, 0xa786,\r
+0xa78b, 0xa78b,\r
+0xa78d, 0xa78d,\r
+0xa790, 0xa790,\r
+0xa792, 0xa792,\r
+0xa796, 0xa796,\r
+0xa798, 0xa798,\r
+0xa79a, 0xa79a,\r
+0xa79c, 0xa79c,\r
+0xa79e, 0xa79e,\r
+0xa7a0, 0xa7a0,\r
+0xa7a2, 0xa7a2,\r
+0xa7a4, 0xa7a4,\r
+0xa7a6, 0xa7a6,\r
+0xa7a8, 0xa7a8,\r
+0xa7aa, 0xa7ae,\r
+0xa7b0, 0xa7b4,\r
+0xa7b6, 0xa7b6,\r
+0xa7b8, 0xa7b8,\r
+0xff21, 0xff3a,\r
+0x10400, 0x10427,\r
+0x104b0, 0x104d3,\r
+0x10c80, 0x10cb2,\r
+0x118a0, 0x118bf,\r
+0x16e40, 0x16e5f,\r
+0x1d400, 0x1d419,\r
+0x1d434, 0x1d44d,\r
+0x1d468, 0x1d481,\r
+0x1d49c, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b5,\r
+0x1d4d0, 0x1d4e9,\r
+0x1d504, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d538, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d56c, 0x1d585,\r
+0x1d5a0, 0x1d5b9,\r
+0x1d5d4, 0x1d5ed,\r
+0x1d608, 0x1d621,\r
+0x1d63c, 0x1d655,\r
+0x1d670, 0x1d689,\r
+0x1d6a8, 0x1d6c0,\r
+0x1d6e2, 0x1d6fa,\r
+0x1d71c, 0x1d734,\r
+0x1d756, 0x1d76e,\r
+0x1d790, 0x1d7a8,\r
+0x1d7ca, 0x1d7ca,\r
+0x1e900, 0x1e921,\r
+}; /* END of CR_Lu */\r
+\r
+/* PROPERTY: 'Lycian': Script */\r
+static const OnigCodePoint\r
+CR_Lycian[] = { 1,\r
+0x10280, 0x1029c,\r
+}; /* END of CR_Lycian */\r
+\r
+/* PROPERTY: 'Lydian': Script */\r
+static const OnigCodePoint\r
+CR_Lydian[] = { 2,\r
+0x10920, 0x10939,\r
+0x1093f, 0x1093f,\r
+}; /* END of CR_Lydian */\r
+\r
+/* PROPERTY: 'M': Major Category */\r
+static const OnigCodePoint\r
+CR_M[] = { 275,\r
+0x0300, 0x036f,\r
+0x0483, 0x0489,\r
+0x0591, 0x05bd,\r
+0x05bf, 0x05bf,\r
+0x05c1, 0x05c2,\r
+0x05c4, 0x05c5,\r
+0x05c7, 0x05c7,\r
+0x0610, 0x061a,\r
+0x064b, 0x065f,\r
+0x0670, 0x0670,\r
+0x06d6, 0x06dc,\r
+0x06df, 0x06e4,\r
+0x06e7, 0x06e8,\r
+0x06ea, 0x06ed,\r
+0x0711, 0x0711,\r
+0x0730, 0x074a,\r
+0x07a6, 0x07b0,\r
+0x07eb, 0x07f3,\r
+0x07fd, 0x07fd,\r
+0x0816, 0x0819,\r
+0x081b, 0x0823,\r
+0x0825, 0x0827,\r
+0x0829, 0x082d,\r
+0x0859, 0x085b,\r
+0x08d3, 0x08e1,\r
+0x08e3, 0x0903,\r
+0x093a, 0x093c,\r
+0x093e, 0x094f,\r
+0x0951, 0x0957,\r
+0x0962, 0x0963,\r
+0x0981, 0x0983,\r
+0x09bc, 0x09bc,\r
+0x09be, 0x09c4,\r
+0x09c7, 0x09c8,\r
+0x09cb, 0x09cd,\r
+0x09d7, 0x09d7,\r
+0x09e2, 0x09e3,\r
+0x09fe, 0x09fe,\r
+0x0a01, 0x0a03,\r
+0x0a3c, 0x0a3c,\r
+0x0a3e, 0x0a42,\r
+0x0a47, 0x0a48,\r
+0x0a4b, 0x0a4d,\r
+0x0a51, 0x0a51,\r
+0x0a70, 0x0a71,\r
+0x0a75, 0x0a75,\r
+0x0a81, 0x0a83,\r
+0x0abc, 0x0abc,\r
+0x0abe, 0x0ac5,\r
+0x0ac7, 0x0ac9,\r
+0x0acb, 0x0acd,\r
+0x0ae2, 0x0ae3,\r
+0x0afa, 0x0aff,\r
+0x0b01, 0x0b03,\r
+0x0b3c, 0x0b3c,\r
+0x0b3e, 0x0b44,\r
+0x0b47, 0x0b48,\r
+0x0b4b, 0x0b4d,\r
+0x0b56, 0x0b57,\r
+0x0b62, 0x0b63,\r
+0x0b82, 0x0b82,\r
+0x0bbe, 0x0bc2,\r
+0x0bc6, 0x0bc8,\r
+0x0bca, 0x0bcd,\r
+0x0bd7, 0x0bd7,\r
+0x0c00, 0x0c04,\r
+0x0c3e, 0x0c44,\r
+0x0c46, 0x0c48,\r
+0x0c4a, 0x0c4d,\r
+0x0c55, 0x0c56,\r
+0x0c62, 0x0c63,\r
+0x0c81, 0x0c83,\r
+0x0cbc, 0x0cbc,\r
+0x0cbe, 0x0cc4,\r
+0x0cc6, 0x0cc8,\r
+0x0cca, 0x0ccd,\r
+0x0cd5, 0x0cd6,\r
+0x0ce2, 0x0ce3,\r
+0x0d00, 0x0d03,\r
+0x0d3b, 0x0d3c,\r
+0x0d3e, 0x0d44,\r
+0x0d46, 0x0d48,\r
+0x0d4a, 0x0d4d,\r
+0x0d57, 0x0d57,\r
+0x0d62, 0x0d63,\r
+0x0d82, 0x0d83,\r
+0x0dca, 0x0dca,\r
+0x0dcf, 0x0dd4,\r
+0x0dd6, 0x0dd6,\r
+0x0dd8, 0x0ddf,\r
+0x0df2, 0x0df3,\r
+0x0e31, 0x0e31,\r
+0x0e34, 0x0e3a,\r
+0x0e47, 0x0e4e,\r
+0x0eb1, 0x0eb1,\r
+0x0eb4, 0x0eb9,\r
+0x0ebb, 0x0ebc,\r
+0x0ec8, 0x0ecd,\r
+0x0f18, 0x0f19,\r
+0x0f35, 0x0f35,\r
+0x0f37, 0x0f37,\r
+0x0f39, 0x0f39,\r
+0x0f3e, 0x0f3f,\r
+0x0f71, 0x0f84,\r
+0x0f86, 0x0f87,\r
+0x0f8d, 0x0f97,\r
+0x0f99, 0x0fbc,\r
+0x0fc6, 0x0fc6,\r
+0x102b, 0x103e,\r
+0x1056, 0x1059,\r
+0x105e, 0x1060,\r
+0x1062, 0x1064,\r
+0x1067, 0x106d,\r
+0x1071, 0x1074,\r
+0x1082, 0x108d,\r
+0x108f, 0x108f,\r
+0x109a, 0x109d,\r
+0x135d, 0x135f,\r
+0x1712, 0x1714,\r
+0x1732, 0x1734,\r
+0x1752, 0x1753,\r
+0x1772, 0x1773,\r
+0x17b4, 0x17d3,\r
+0x17dd, 0x17dd,\r
+0x180b, 0x180d,\r
+0x1885, 0x1886,\r
+0x18a9, 0x18a9,\r
+0x1920, 0x192b,\r
+0x1930, 0x193b,\r
+0x1a17, 0x1a1b,\r
+0x1a55, 0x1a5e,\r
+0x1a60, 0x1a7c,\r
+0x1a7f, 0x1a7f,\r
+0x1ab0, 0x1abe,\r
+0x1b00, 0x1b04,\r
+0x1b34, 0x1b44,\r
+0x1b6b, 0x1b73,\r
+0x1b80, 0x1b82,\r
+0x1ba1, 0x1bad,\r
+0x1be6, 0x1bf3,\r
+0x1c24, 0x1c37,\r
+0x1cd0, 0x1cd2,\r
+0x1cd4, 0x1ce8,\r
+0x1ced, 0x1ced,\r
+0x1cf2, 0x1cf4,\r
+0x1cf7, 0x1cf9,\r
+0x1dc0, 0x1df9,\r
+0x1dfb, 0x1dff,\r
+0x20d0, 0x20f0,\r
+0x2cef, 0x2cf1,\r
+0x2d7f, 0x2d7f,\r
+0x2de0, 0x2dff,\r
+0x302a, 0x302f,\r
+0x3099, 0x309a,\r
+0xa66f, 0xa672,\r
+0xa674, 0xa67d,\r
+0xa69e, 0xa69f,\r
+0xa6f0, 0xa6f1,\r
+0xa802, 0xa802,\r
+0xa806, 0xa806,\r
+0xa80b, 0xa80b,\r
+0xa823, 0xa827,\r
+0xa880, 0xa881,\r
+0xa8b4, 0xa8c5,\r
+0xa8e0, 0xa8f1,\r
+0xa8ff, 0xa8ff,\r
+0xa926, 0xa92d,\r
+0xa947, 0xa953,\r
+0xa980, 0xa983,\r
+0xa9b3, 0xa9c0,\r
+0xa9e5, 0xa9e5,\r
+0xaa29, 0xaa36,\r
+0xaa43, 0xaa43,\r
+0xaa4c, 0xaa4d,\r
+0xaa7b, 0xaa7d,\r
+0xaab0, 0xaab0,\r
+0xaab2, 0xaab4,\r
+0xaab7, 0xaab8,\r
+0xaabe, 0xaabf,\r
+0xaac1, 0xaac1,\r
+0xaaeb, 0xaaef,\r
+0xaaf5, 0xaaf6,\r
+0xabe3, 0xabea,\r
+0xabec, 0xabed,\r
+0xfb1e, 0xfb1e,\r
+0xfe00, 0xfe0f,\r
+0xfe20, 0xfe2f,\r
+0x101fd, 0x101fd,\r
+0x102e0, 0x102e0,\r
+0x10376, 0x1037a,\r
+0x10a01, 0x10a03,\r
+0x10a05, 0x10a06,\r
+0x10a0c, 0x10a0f,\r
+0x10a38, 0x10a3a,\r
+0x10a3f, 0x10a3f,\r
+0x10ae5, 0x10ae6,\r
+0x10d24, 0x10d27,\r
+0x10f46, 0x10f50,\r
+0x11000, 0x11002,\r
+0x11038, 0x11046,\r
+0x1107f, 0x11082,\r
+0x110b0, 0x110ba,\r
+0x11100, 0x11102,\r
+0x11127, 0x11134,\r
+0x11145, 0x11146,\r
+0x11173, 0x11173,\r
+0x11180, 0x11182,\r
+0x111b3, 0x111c0,\r
+0x111c9, 0x111cc,\r
+0x1122c, 0x11237,\r
+0x1123e, 0x1123e,\r
+0x112df, 0x112ea,\r
+0x11300, 0x11303,\r
+0x1133b, 0x1133c,\r
+0x1133e, 0x11344,\r
+0x11347, 0x11348,\r
+0x1134b, 0x1134d,\r
+0x11357, 0x11357,\r
+0x11362, 0x11363,\r
+0x11366, 0x1136c,\r
+0x11370, 0x11374,\r
+0x11435, 0x11446,\r
+0x1145e, 0x1145e,\r
+0x114b0, 0x114c3,\r
+0x115af, 0x115b5,\r
+0x115b8, 0x115c0,\r
+0x115dc, 0x115dd,\r
+0x11630, 0x11640,\r
+0x116ab, 0x116b7,\r
+0x1171d, 0x1172b,\r
+0x1182c, 0x1183a,\r
+0x11a01, 0x11a0a,\r
+0x11a33, 0x11a39,\r
+0x11a3b, 0x11a3e,\r
+0x11a47, 0x11a47,\r
+0x11a51, 0x11a5b,\r
+0x11a8a, 0x11a99,\r
+0x11c2f, 0x11c36,\r
+0x11c38, 0x11c3f,\r
+0x11c92, 0x11ca7,\r
+0x11ca9, 0x11cb6,\r
+0x11d31, 0x11d36,\r
+0x11d3a, 0x11d3a,\r
+0x11d3c, 0x11d3d,\r
+0x11d3f, 0x11d45,\r
+0x11d47, 0x11d47,\r
+0x11d8a, 0x11d8e,\r
+0x11d90, 0x11d91,\r
+0x11d93, 0x11d97,\r
+0x11ef3, 0x11ef6,\r
+0x16af0, 0x16af4,\r
+0x16b30, 0x16b36,\r
+0x16f51, 0x16f7e,\r
+0x16f8f, 0x16f92,\r
+0x1bc9d, 0x1bc9e,\r
+0x1d165, 0x1d169,\r
+0x1d16d, 0x1d172,\r
+0x1d17b, 0x1d182,\r
+0x1d185, 0x1d18b,\r
+0x1d1aa, 0x1d1ad,\r
+0x1d242, 0x1d244,\r
+0x1da00, 0x1da36,\r
+0x1da3b, 0x1da6c,\r
+0x1da75, 0x1da75,\r
+0x1da84, 0x1da84,\r
+0x1da9b, 0x1da9f,\r
+0x1daa1, 0x1daaf,\r
+0x1e000, 0x1e006,\r
+0x1e008, 0x1e018,\r
+0x1e01b, 0x1e021,\r
+0x1e023, 0x1e024,\r
+0x1e026, 0x1e02a,\r
+0x1e8d0, 0x1e8d6,\r
+0x1e944, 0x1e94a,\r
+0xe0100, 0xe01ef,\r
+}; /* END of CR_M */\r
+\r
+/* PROPERTY: 'Mahajani': Script */\r
+static const OnigCodePoint\r
+CR_Mahajani[] = { 1,\r
+0x11150, 0x11176,\r
+}; /* END of CR_Mahajani */\r
+\r
+/* PROPERTY: 'Makasar': Script */\r
+static const OnigCodePoint\r
+CR_Makasar[] = { 1,\r
+0x11ee0, 0x11ef8,\r
+}; /* END of CR_Makasar */\r
+\r
+/* PROPERTY: 'Malayalam': Script */\r
+static const OnigCodePoint\r
+CR_Malayalam[] = { 8,\r
+0x0d00, 0x0d03,\r
+0x0d05, 0x0d0c,\r
+0x0d0e, 0x0d10,\r
+0x0d12, 0x0d44,\r
+0x0d46, 0x0d48,\r
+0x0d4a, 0x0d4f,\r
+0x0d54, 0x0d63,\r
+0x0d66, 0x0d7f,\r
+}; /* END of CR_Malayalam */\r
+\r
+/* PROPERTY: 'Mandaic': Script */\r
+static const OnigCodePoint\r
+CR_Mandaic[] = { 2,\r
+0x0840, 0x085b,\r
+0x085e, 0x085e,\r
+}; /* END of CR_Mandaic */\r
+\r
+/* PROPERTY: 'Manichaean': Script */\r
+static const OnigCodePoint\r
+CR_Manichaean[] = { 2,\r
+0x10ac0, 0x10ae6,\r
+0x10aeb, 0x10af6,\r
+}; /* END of CR_Manichaean */\r
+\r
+/* PROPERTY: 'Marchen': Script */\r
+static const OnigCodePoint\r
+CR_Marchen[] = { 3,\r
+0x11c70, 0x11c8f,\r
+0x11c92, 0x11ca7,\r
+0x11ca9, 0x11cb6,\r
+}; /* END of CR_Marchen */\r
+\r
+/* PROPERTY: 'Masaram_Gondi': Script */\r
+static const OnigCodePoint\r
+CR_Masaram_Gondi[] = { 7,\r
+0x11d00, 0x11d06,\r
+0x11d08, 0x11d09,\r
+0x11d0b, 0x11d36,\r
+0x11d3a, 0x11d3a,\r
+0x11d3c, 0x11d3d,\r
+0x11d3f, 0x11d47,\r
+0x11d50, 0x11d59,\r
+}; /* END of CR_Masaram_Gondi */\r
+\r
+/* PROPERTY: 'Math': Derived Property */\r
+static const OnigCodePoint\r
+CR_Math[] = { 138,\r
+0x002b, 0x002b,\r
+0x003c, 0x003e,\r
+0x005e, 0x005e,\r
+0x007c, 0x007c,\r
+0x007e, 0x007e,\r
+0x00ac, 0x00ac,\r
+0x00b1, 0x00b1,\r
+0x00d7, 0x00d7,\r
+0x00f7, 0x00f7,\r
+0x03d0, 0x03d2,\r
+0x03d5, 0x03d5,\r
+0x03f0, 0x03f1,\r
+0x03f4, 0x03f6,\r
+0x0606, 0x0608,\r
+0x2016, 0x2016,\r
+0x2032, 0x2034,\r
+0x2040, 0x2040,\r
+0x2044, 0x2044,\r
+0x2052, 0x2052,\r
+0x2061, 0x2064,\r
+0x207a, 0x207e,\r
+0x208a, 0x208e,\r
+0x20d0, 0x20dc,\r
+0x20e1, 0x20e1,\r
+0x20e5, 0x20e6,\r
+0x20eb, 0x20ef,\r
+0x2102, 0x2102,\r
+0x2107, 0x2107,\r
+0x210a, 0x2113,\r
+0x2115, 0x2115,\r
+0x2118, 0x211d,\r
+0x2124, 0x2124,\r
+0x2128, 0x2129,\r
+0x212c, 0x212d,\r
+0x212f, 0x2131,\r
+0x2133, 0x2138,\r
+0x213c, 0x2149,\r
+0x214b, 0x214b,\r
+0x2190, 0x21a7,\r
+0x21a9, 0x21ae,\r
+0x21b0, 0x21b1,\r
+0x21b6, 0x21b7,\r
+0x21bc, 0x21db,\r
+0x21dd, 0x21dd,\r
+0x21e4, 0x21e5,\r
+0x21f4, 0x22ff,\r
+0x2308, 0x230b,\r
+0x2320, 0x2321,\r
+0x237c, 0x237c,\r
+0x239b, 0x23b5,\r
+0x23b7, 0x23b7,\r
+0x23d0, 0x23d0,\r
+0x23dc, 0x23e2,\r
+0x25a0, 0x25a1,\r
+0x25ae, 0x25b7,\r
+0x25bc, 0x25c1,\r
+0x25c6, 0x25c7,\r
+0x25ca, 0x25cb,\r
+0x25cf, 0x25d3,\r
+0x25e2, 0x25e2,\r
+0x25e4, 0x25e4,\r
+0x25e7, 0x25ec,\r
+0x25f8, 0x25ff,\r
+0x2605, 0x2606,\r
+0x2640, 0x2640,\r
+0x2642, 0x2642,\r
+0x2660, 0x2663,\r
+0x266d, 0x266f,\r
+0x27c0, 0x27ff,\r
+0x2900, 0x2aff,\r
+0x2b30, 0x2b44,\r
+0x2b47, 0x2b4c,\r
+0xfb29, 0xfb29,\r
+0xfe61, 0xfe66,\r
+0xfe68, 0xfe68,\r
+0xff0b, 0xff0b,\r
+0xff1c, 0xff1e,\r
+0xff3c, 0xff3c,\r
+0xff3e, 0xff3e,\r
+0xff5c, 0xff5c,\r
+0xff5e, 0xff5e,\r
+0xffe2, 0xffe2,\r
+0xffe9, 0xffec,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d7cb,\r
+0x1d7ce, 0x1d7ff,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+0x1eef0, 0x1eef1,\r
+}; /* END of CR_Math */\r
+\r
+/* PROPERTY: 'Mc': General Category */\r
+static const OnigCodePoint\r
+CR_Mc[] = { 166,\r
+0x0903, 0x0903,\r
+0x093b, 0x093b,\r
+0x093e, 0x0940,\r
+0x0949, 0x094c,\r
+0x094e, 0x094f,\r
+0x0982, 0x0983,\r
+0x09be, 0x09c0,\r
+0x09c7, 0x09c8,\r
+0x09cb, 0x09cc,\r
+0x09d7, 0x09d7,\r
+0x0a03, 0x0a03,\r
+0x0a3e, 0x0a40,\r
+0x0a83, 0x0a83,\r
+0x0abe, 0x0ac0,\r
+0x0ac9, 0x0ac9,\r
+0x0acb, 0x0acc,\r
+0x0b02, 0x0b03,\r
+0x0b3e, 0x0b3e,\r
+0x0b40, 0x0b40,\r
+0x0b47, 0x0b48,\r
+0x0b4b, 0x0b4c,\r
+0x0b57, 0x0b57,\r
+0x0bbe, 0x0bbf,\r
+0x0bc1, 0x0bc2,\r
+0x0bc6, 0x0bc8,\r
+0x0bca, 0x0bcc,\r
+0x0bd7, 0x0bd7,\r
+0x0c01, 0x0c03,\r
+0x0c41, 0x0c44,\r
+0x0c82, 0x0c83,\r
+0x0cbe, 0x0cbe,\r
+0x0cc0, 0x0cc4,\r
+0x0cc7, 0x0cc8,\r
+0x0cca, 0x0ccb,\r
+0x0cd5, 0x0cd6,\r
+0x0d02, 0x0d03,\r
+0x0d3e, 0x0d40,\r
+0x0d46, 0x0d48,\r
+0x0d4a, 0x0d4c,\r
+0x0d57, 0x0d57,\r
+0x0d82, 0x0d83,\r
+0x0dcf, 0x0dd1,\r
+0x0dd8, 0x0ddf,\r
+0x0df2, 0x0df3,\r
+0x0f3e, 0x0f3f,\r
+0x0f7f, 0x0f7f,\r
+0x102b, 0x102c,\r
+0x1031, 0x1031,\r
+0x1038, 0x1038,\r
+0x103b, 0x103c,\r
+0x1056, 0x1057,\r
+0x1062, 0x1064,\r
+0x1067, 0x106d,\r
+0x1083, 0x1084,\r
+0x1087, 0x108c,\r
+0x108f, 0x108f,\r
+0x109a, 0x109c,\r
+0x17b6, 0x17b6,\r
+0x17be, 0x17c5,\r
+0x17c7, 0x17c8,\r
+0x1923, 0x1926,\r
+0x1929, 0x192b,\r
+0x1930, 0x1931,\r
+0x1933, 0x1938,\r
+0x1a19, 0x1a1a,\r
+0x1a55, 0x1a55,\r
+0x1a57, 0x1a57,\r
+0x1a61, 0x1a61,\r
+0x1a63, 0x1a64,\r
+0x1a6d, 0x1a72,\r
+0x1b04, 0x1b04,\r
+0x1b35, 0x1b35,\r
+0x1b3b, 0x1b3b,\r
+0x1b3d, 0x1b41,\r
+0x1b43, 0x1b44,\r
+0x1b82, 0x1b82,\r
+0x1ba1, 0x1ba1,\r
+0x1ba6, 0x1ba7,\r
+0x1baa, 0x1baa,\r
+0x1be7, 0x1be7,\r
+0x1bea, 0x1bec,\r
+0x1bee, 0x1bee,\r
+0x1bf2, 0x1bf3,\r
+0x1c24, 0x1c2b,\r
+0x1c34, 0x1c35,\r
+0x1ce1, 0x1ce1,\r
+0x1cf2, 0x1cf3,\r
+0x1cf7, 0x1cf7,\r
+0x302e, 0x302f,\r
+0xa823, 0xa824,\r
+0xa827, 0xa827,\r
+0xa880, 0xa881,\r
+0xa8b4, 0xa8c3,\r
+0xa952, 0xa953,\r
+0xa983, 0xa983,\r
+0xa9b4, 0xa9b5,\r
+0xa9ba, 0xa9bb,\r
+0xa9bd, 0xa9c0,\r
+0xaa2f, 0xaa30,\r
+0xaa33, 0xaa34,\r
+0xaa4d, 0xaa4d,\r
+0xaa7b, 0xaa7b,\r
+0xaa7d, 0xaa7d,\r
+0xaaeb, 0xaaeb,\r
+0xaaee, 0xaaef,\r
+0xaaf5, 0xaaf5,\r
+0xabe3, 0xabe4,\r
+0xabe6, 0xabe7,\r
+0xabe9, 0xabea,\r
+0xabec, 0xabec,\r
+0x11000, 0x11000,\r
+0x11002, 0x11002,\r
+0x11082, 0x11082,\r
+0x110b0, 0x110b2,\r
+0x110b7, 0x110b8,\r
+0x1112c, 0x1112c,\r
+0x11145, 0x11146,\r
+0x11182, 0x11182,\r
+0x111b3, 0x111b5,\r
+0x111bf, 0x111c0,\r
+0x1122c, 0x1122e,\r
+0x11232, 0x11233,\r
+0x11235, 0x11235,\r
+0x112e0, 0x112e2,\r
+0x11302, 0x11303,\r
+0x1133e, 0x1133f,\r
+0x11341, 0x11344,\r
+0x11347, 0x11348,\r
+0x1134b, 0x1134d,\r
+0x11357, 0x11357,\r
+0x11362, 0x11363,\r
+0x11435, 0x11437,\r
+0x11440, 0x11441,\r
+0x11445, 0x11445,\r
+0x114b0, 0x114b2,\r
+0x114b9, 0x114b9,\r
+0x114bb, 0x114be,\r
+0x114c1, 0x114c1,\r
+0x115af, 0x115b1,\r
+0x115b8, 0x115bb,\r
+0x115be, 0x115be,\r
+0x11630, 0x11632,\r
+0x1163b, 0x1163c,\r
+0x1163e, 0x1163e,\r
+0x116ac, 0x116ac,\r
+0x116ae, 0x116af,\r
+0x116b6, 0x116b6,\r
+0x11720, 0x11721,\r
+0x11726, 0x11726,\r
+0x1182c, 0x1182e,\r
+0x11838, 0x11838,\r
+0x11a39, 0x11a39,\r
+0x11a57, 0x11a58,\r
+0x11a97, 0x11a97,\r
+0x11c2f, 0x11c2f,\r
+0x11c3e, 0x11c3e,\r
+0x11ca9, 0x11ca9,\r
+0x11cb1, 0x11cb1,\r
+0x11cb4, 0x11cb4,\r
+0x11d8a, 0x11d8e,\r
+0x11d93, 0x11d94,\r
+0x11d96, 0x11d96,\r
+0x11ef5, 0x11ef6,\r
+0x16f51, 0x16f7e,\r
+0x1d165, 0x1d166,\r
+0x1d16d, 0x1d172,\r
+}; /* END of CR_Mc */\r
+\r
+/* PROPERTY: 'Me': General Category */\r
+static const OnigCodePoint\r
+CR_Me[] = { 5,\r
+0x0488, 0x0489,\r
+0x1abe, 0x1abe,\r
+0x20dd, 0x20e0,\r
+0x20e2, 0x20e4,\r
+0xa670, 0xa672,\r
+}; /* END of CR_Me */\r
+\r
+/* PROPERTY: 'Medefaidrin': Script */\r
+static const OnigCodePoint\r
+CR_Medefaidrin[] = { 1,\r
+0x16e40, 0x16e9a,\r
+}; /* END of CR_Medefaidrin */\r
+\r
+/* PROPERTY: 'Meetei_Mayek': Script */\r
+static const OnigCodePoint\r
+CR_Meetei_Mayek[] = { 3,\r
+0xaae0, 0xaaf6,\r
+0xabc0, 0xabed,\r
+0xabf0, 0xabf9,\r
+}; /* END of CR_Meetei_Mayek */\r
+\r
+/* PROPERTY: 'Mende_Kikakui': Script */\r
+static const OnigCodePoint\r
+CR_Mende_Kikakui[] = { 2,\r
+0x1e800, 0x1e8c4,\r
+0x1e8c7, 0x1e8d6,\r
+}; /* END of CR_Mende_Kikakui */\r
+\r
+/* PROPERTY: 'Meroitic_Cursive': Script */\r
+static const OnigCodePoint\r
+CR_Meroitic_Cursive[] = { 3,\r
+0x109a0, 0x109b7,\r
+0x109bc, 0x109cf,\r
+0x109d2, 0x109ff,\r
+}; /* END of CR_Meroitic_Cursive */\r
+\r
+/* PROPERTY: 'Meroitic_Hieroglyphs': Script */\r
+static const OnigCodePoint\r
+CR_Meroitic_Hieroglyphs[] = { 1,\r
+0x10980, 0x1099f,\r
+}; /* END of CR_Meroitic_Hieroglyphs */\r
+\r
+/* PROPERTY: 'Miao': Script */\r
+static const OnigCodePoint\r
+CR_Miao[] = { 3,\r
+0x16f00, 0x16f44,\r
+0x16f50, 0x16f7e,\r
+0x16f8f, 0x16f9f,\r
+}; /* END of CR_Miao */\r
+\r
+/* PROPERTY: 'Mn': General Category */\r
+static const OnigCodePoint\r
+CR_Mn[] = { 313,\r
+0x0300, 0x036f,\r
+0x0483, 0x0487,\r
+0x0591, 0x05bd,\r
+0x05bf, 0x05bf,\r
+0x05c1, 0x05c2,\r
+0x05c4, 0x05c5,\r
+0x05c7, 0x05c7,\r
+0x0610, 0x061a,\r
+0x064b, 0x065f,\r
+0x0670, 0x0670,\r
+0x06d6, 0x06dc,\r
+0x06df, 0x06e4,\r
+0x06e7, 0x06e8,\r
+0x06ea, 0x06ed,\r
+0x0711, 0x0711,\r
+0x0730, 0x074a,\r
+0x07a6, 0x07b0,\r
+0x07eb, 0x07f3,\r
+0x07fd, 0x07fd,\r
+0x0816, 0x0819,\r
+0x081b, 0x0823,\r
+0x0825, 0x0827,\r
+0x0829, 0x082d,\r
+0x0859, 0x085b,\r
+0x08d3, 0x08e1,\r
+0x08e3, 0x0902,\r
+0x093a, 0x093a,\r
+0x093c, 0x093c,\r
+0x0941, 0x0948,\r
+0x094d, 0x094d,\r
+0x0951, 0x0957,\r
+0x0962, 0x0963,\r
+0x0981, 0x0981,\r
+0x09bc, 0x09bc,\r
+0x09c1, 0x09c4,\r
+0x09cd, 0x09cd,\r
+0x09e2, 0x09e3,\r
+0x09fe, 0x09fe,\r
+0x0a01, 0x0a02,\r
+0x0a3c, 0x0a3c,\r
+0x0a41, 0x0a42,\r
+0x0a47, 0x0a48,\r
+0x0a4b, 0x0a4d,\r
+0x0a51, 0x0a51,\r
+0x0a70, 0x0a71,\r
+0x0a75, 0x0a75,\r
+0x0a81, 0x0a82,\r
+0x0abc, 0x0abc,\r
+0x0ac1, 0x0ac5,\r
+0x0ac7, 0x0ac8,\r
+0x0acd, 0x0acd,\r
+0x0ae2, 0x0ae3,\r
+0x0afa, 0x0aff,\r
+0x0b01, 0x0b01,\r
+0x0b3c, 0x0b3c,\r
+0x0b3f, 0x0b3f,\r
+0x0b41, 0x0b44,\r
+0x0b4d, 0x0b4d,\r
+0x0b56, 0x0b56,\r
+0x0b62, 0x0b63,\r
+0x0b82, 0x0b82,\r
+0x0bc0, 0x0bc0,\r
+0x0bcd, 0x0bcd,\r
+0x0c00, 0x0c00,\r
+0x0c04, 0x0c04,\r
+0x0c3e, 0x0c40,\r
+0x0c46, 0x0c48,\r
+0x0c4a, 0x0c4d,\r
+0x0c55, 0x0c56,\r
+0x0c62, 0x0c63,\r
+0x0c81, 0x0c81,\r
+0x0cbc, 0x0cbc,\r
+0x0cbf, 0x0cbf,\r
+0x0cc6, 0x0cc6,\r
+0x0ccc, 0x0ccd,\r
+0x0ce2, 0x0ce3,\r
+0x0d00, 0x0d01,\r
+0x0d3b, 0x0d3c,\r
+0x0d41, 0x0d44,\r
+0x0d4d, 0x0d4d,\r
+0x0d62, 0x0d63,\r
+0x0dca, 0x0dca,\r
+0x0dd2, 0x0dd4,\r
+0x0dd6, 0x0dd6,\r
+0x0e31, 0x0e31,\r
+0x0e34, 0x0e3a,\r
+0x0e47, 0x0e4e,\r
+0x0eb1, 0x0eb1,\r
+0x0eb4, 0x0eb9,\r
+0x0ebb, 0x0ebc,\r
+0x0ec8, 0x0ecd,\r
+0x0f18, 0x0f19,\r
+0x0f35, 0x0f35,\r
+0x0f37, 0x0f37,\r
+0x0f39, 0x0f39,\r
+0x0f71, 0x0f7e,\r
+0x0f80, 0x0f84,\r
+0x0f86, 0x0f87,\r
+0x0f8d, 0x0f97,\r
+0x0f99, 0x0fbc,\r
+0x0fc6, 0x0fc6,\r
+0x102d, 0x1030,\r
+0x1032, 0x1037,\r
+0x1039, 0x103a,\r
+0x103d, 0x103e,\r
+0x1058, 0x1059,\r
+0x105e, 0x1060,\r
+0x1071, 0x1074,\r
+0x1082, 0x1082,\r
+0x1085, 0x1086,\r
+0x108d, 0x108d,\r
+0x109d, 0x109d,\r
+0x135d, 0x135f,\r
+0x1712, 0x1714,\r
+0x1732, 0x1734,\r
+0x1752, 0x1753,\r
+0x1772, 0x1773,\r
+0x17b4, 0x17b5,\r
+0x17b7, 0x17bd,\r
+0x17c6, 0x17c6,\r
+0x17c9, 0x17d3,\r
+0x17dd, 0x17dd,\r
+0x180b, 0x180d,\r
+0x1885, 0x1886,\r
+0x18a9, 0x18a9,\r
+0x1920, 0x1922,\r
+0x1927, 0x1928,\r
+0x1932, 0x1932,\r
+0x1939, 0x193b,\r
+0x1a17, 0x1a18,\r
+0x1a1b, 0x1a1b,\r
+0x1a56, 0x1a56,\r
+0x1a58, 0x1a5e,\r
+0x1a60, 0x1a60,\r
+0x1a62, 0x1a62,\r
+0x1a65, 0x1a6c,\r
+0x1a73, 0x1a7c,\r
+0x1a7f, 0x1a7f,\r
+0x1ab0, 0x1abd,\r
+0x1b00, 0x1b03,\r
+0x1b34, 0x1b34,\r
+0x1b36, 0x1b3a,\r
+0x1b3c, 0x1b3c,\r
+0x1b42, 0x1b42,\r
+0x1b6b, 0x1b73,\r
+0x1b80, 0x1b81,\r
+0x1ba2, 0x1ba5,\r
+0x1ba8, 0x1ba9,\r
+0x1bab, 0x1bad,\r
+0x1be6, 0x1be6,\r
+0x1be8, 0x1be9,\r
+0x1bed, 0x1bed,\r
+0x1bef, 0x1bf1,\r
+0x1c2c, 0x1c33,\r
+0x1c36, 0x1c37,\r
+0x1cd0, 0x1cd2,\r
+0x1cd4, 0x1ce0,\r
+0x1ce2, 0x1ce8,\r
+0x1ced, 0x1ced,\r
+0x1cf4, 0x1cf4,\r
+0x1cf8, 0x1cf9,\r
+0x1dc0, 0x1df9,\r
+0x1dfb, 0x1dff,\r
+0x20d0, 0x20dc,\r
+0x20e1, 0x20e1,\r
+0x20e5, 0x20f0,\r
+0x2cef, 0x2cf1,\r
+0x2d7f, 0x2d7f,\r
+0x2de0, 0x2dff,\r
+0x302a, 0x302d,\r
+0x3099, 0x309a,\r
+0xa66f, 0xa66f,\r
+0xa674, 0xa67d,\r
+0xa69e, 0xa69f,\r
+0xa6f0, 0xa6f1,\r
+0xa802, 0xa802,\r
+0xa806, 0xa806,\r
+0xa80b, 0xa80b,\r
+0xa825, 0xa826,\r
+0xa8c4, 0xa8c5,\r
+0xa8e0, 0xa8f1,\r
+0xa8ff, 0xa8ff,\r
+0xa926, 0xa92d,\r
+0xa947, 0xa951,\r
+0xa980, 0xa982,\r
+0xa9b3, 0xa9b3,\r
+0xa9b6, 0xa9b9,\r
+0xa9bc, 0xa9bc,\r
+0xa9e5, 0xa9e5,\r
+0xaa29, 0xaa2e,\r
+0xaa31, 0xaa32,\r
+0xaa35, 0xaa36,\r
+0xaa43, 0xaa43,\r
+0xaa4c, 0xaa4c,\r
+0xaa7c, 0xaa7c,\r
+0xaab0, 0xaab0,\r
+0xaab2, 0xaab4,\r
+0xaab7, 0xaab8,\r
+0xaabe, 0xaabf,\r
+0xaac1, 0xaac1,\r
+0xaaec, 0xaaed,\r
+0xaaf6, 0xaaf6,\r
+0xabe5, 0xabe5,\r
+0xabe8, 0xabe8,\r
+0xabed, 0xabed,\r
+0xfb1e, 0xfb1e,\r
+0xfe00, 0xfe0f,\r
+0xfe20, 0xfe2f,\r
+0x101fd, 0x101fd,\r
+0x102e0, 0x102e0,\r
+0x10376, 0x1037a,\r
+0x10a01, 0x10a03,\r
+0x10a05, 0x10a06,\r
+0x10a0c, 0x10a0f,\r
+0x10a38, 0x10a3a,\r
+0x10a3f, 0x10a3f,\r
+0x10ae5, 0x10ae6,\r
+0x10d24, 0x10d27,\r
+0x10f46, 0x10f50,\r
+0x11001, 0x11001,\r
+0x11038, 0x11046,\r
+0x1107f, 0x11081,\r
+0x110b3, 0x110b6,\r
+0x110b9, 0x110ba,\r
+0x11100, 0x11102,\r
+0x11127, 0x1112b,\r
+0x1112d, 0x11134,\r
+0x11173, 0x11173,\r
+0x11180, 0x11181,\r
+0x111b6, 0x111be,\r
+0x111c9, 0x111cc,\r
+0x1122f, 0x11231,\r
+0x11234, 0x11234,\r
+0x11236, 0x11237,\r
+0x1123e, 0x1123e,\r
+0x112df, 0x112df,\r
+0x112e3, 0x112ea,\r
+0x11300, 0x11301,\r
+0x1133b, 0x1133c,\r
+0x11340, 0x11340,\r
+0x11366, 0x1136c,\r
+0x11370, 0x11374,\r
+0x11438, 0x1143f,\r
+0x11442, 0x11444,\r
+0x11446, 0x11446,\r
+0x1145e, 0x1145e,\r
+0x114b3, 0x114b8,\r
+0x114ba, 0x114ba,\r
+0x114bf, 0x114c0,\r
+0x114c2, 0x114c3,\r
+0x115b2, 0x115b5,\r
+0x115bc, 0x115bd,\r
+0x115bf, 0x115c0,\r
+0x115dc, 0x115dd,\r
+0x11633, 0x1163a,\r
+0x1163d, 0x1163d,\r
+0x1163f, 0x11640,\r
+0x116ab, 0x116ab,\r
+0x116ad, 0x116ad,\r
+0x116b0, 0x116b5,\r
+0x116b7, 0x116b7,\r
+0x1171d, 0x1171f,\r
+0x11722, 0x11725,\r
+0x11727, 0x1172b,\r
+0x1182f, 0x11837,\r
+0x11839, 0x1183a,\r
+0x11a01, 0x11a0a,\r
+0x11a33, 0x11a38,\r
+0x11a3b, 0x11a3e,\r
+0x11a47, 0x11a47,\r
+0x11a51, 0x11a56,\r
+0x11a59, 0x11a5b,\r
+0x11a8a, 0x11a96,\r
+0x11a98, 0x11a99,\r
+0x11c30, 0x11c36,\r
+0x11c38, 0x11c3d,\r
+0x11c3f, 0x11c3f,\r
+0x11c92, 0x11ca7,\r
+0x11caa, 0x11cb0,\r
+0x11cb2, 0x11cb3,\r
+0x11cb5, 0x11cb6,\r
+0x11d31, 0x11d36,\r
+0x11d3a, 0x11d3a,\r
+0x11d3c, 0x11d3d,\r
+0x11d3f, 0x11d45,\r
+0x11d47, 0x11d47,\r
+0x11d90, 0x11d91,\r
+0x11d95, 0x11d95,\r
+0x11d97, 0x11d97,\r
+0x11ef3, 0x11ef4,\r
+0x16af0, 0x16af4,\r
+0x16b30, 0x16b36,\r
+0x16f8f, 0x16f92,\r
+0x1bc9d, 0x1bc9e,\r
+0x1d167, 0x1d169,\r
+0x1d17b, 0x1d182,\r
+0x1d185, 0x1d18b,\r
+0x1d1aa, 0x1d1ad,\r
+0x1d242, 0x1d244,\r
+0x1da00, 0x1da36,\r
+0x1da3b, 0x1da6c,\r
+0x1da75, 0x1da75,\r
+0x1da84, 0x1da84,\r
+0x1da9b, 0x1da9f,\r
+0x1daa1, 0x1daaf,\r
+0x1e000, 0x1e006,\r
+0x1e008, 0x1e018,\r
+0x1e01b, 0x1e021,\r
+0x1e023, 0x1e024,\r
+0x1e026, 0x1e02a,\r
+0x1e8d0, 0x1e8d6,\r
+0x1e944, 0x1e94a,\r
+0xe0100, 0xe01ef,\r
+}; /* END of CR_Mn */\r
+\r
+/* PROPERTY: 'Modi': Script */\r
+static const OnigCodePoint\r
+CR_Modi[] = { 2,\r
+0x11600, 0x11644,\r
+0x11650, 0x11659,\r
+}; /* END of CR_Modi */\r
+\r
+/* PROPERTY: 'Mongolian': Script */\r
+static const OnigCodePoint\r
+CR_Mongolian[] = { 7,\r
+0x1800, 0x1801,\r
+0x1804, 0x1804,\r
+0x1806, 0x180e,\r
+0x1810, 0x1819,\r
+0x1820, 0x1878,\r
+0x1880, 0x18aa,\r
+0x11660, 0x1166c,\r
+}; /* END of CR_Mongolian */\r
+\r
+/* PROPERTY: 'Mro': Script */\r
+static const OnigCodePoint\r
+CR_Mro[] = { 3,\r
+0x16a40, 0x16a5e,\r
+0x16a60, 0x16a69,\r
+0x16a6e, 0x16a6f,\r
+}; /* END of CR_Mro */\r
+\r
+/* PROPERTY: 'Multani': Script */\r
+static const OnigCodePoint\r
+CR_Multani[] = { 5,\r
+0x11280, 0x11286,\r
+0x11288, 0x11288,\r
+0x1128a, 0x1128d,\r
+0x1128f, 0x1129d,\r
+0x1129f, 0x112a9,\r
+}; /* END of CR_Multani */\r
+\r
+/* PROPERTY: 'Myanmar': Script */\r
+static const OnigCodePoint\r
+CR_Myanmar[] = { 3,\r
+0x1000, 0x109f,\r
+0xa9e0, 0xa9fe,\r
+0xaa60, 0xaa7f,\r
+}; /* END of CR_Myanmar */\r
+\r
+/* PROPERTY: 'N': Major Category */\r
+static const OnigCodePoint\r
+CR_N[] = { 125,\r
+0x0030, 0x0039,\r
+0x00b2, 0x00b3,\r
+0x00b9, 0x00b9,\r
+0x00bc, 0x00be,\r
+0x0660, 0x0669,\r
+0x06f0, 0x06f9,\r
+0x07c0, 0x07c9,\r
+0x0966, 0x096f,\r
+0x09e6, 0x09ef,\r
+0x09f4, 0x09f9,\r
+0x0a66, 0x0a6f,\r
+0x0ae6, 0x0aef,\r
+0x0b66, 0x0b6f,\r
+0x0b72, 0x0b77,\r
+0x0be6, 0x0bf2,\r
+0x0c66, 0x0c6f,\r
+0x0c78, 0x0c7e,\r
+0x0ce6, 0x0cef,\r
+0x0d58, 0x0d5e,\r
+0x0d66, 0x0d78,\r
+0x0de6, 0x0def,\r
+0x0e50, 0x0e59,\r
+0x0ed0, 0x0ed9,\r
+0x0f20, 0x0f33,\r
+0x1040, 0x1049,\r
+0x1090, 0x1099,\r
+0x1369, 0x137c,\r
+0x16ee, 0x16f0,\r
+0x17e0, 0x17e9,\r
+0x17f0, 0x17f9,\r
+0x1810, 0x1819,\r
+0x1946, 0x194f,\r
+0x19d0, 0x19da,\r
+0x1a80, 0x1a89,\r
+0x1a90, 0x1a99,\r
+0x1b50, 0x1b59,\r
+0x1bb0, 0x1bb9,\r
+0x1c40, 0x1c49,\r
+0x1c50, 0x1c59,\r
+0x2070, 0x2070,\r
+0x2074, 0x2079,\r
+0x2080, 0x2089,\r
+0x2150, 0x2182,\r
+0x2185, 0x2189,\r
+0x2460, 0x249b,\r
+0x24ea, 0x24ff,\r
+0x2776, 0x2793,\r
+0x2cfd, 0x2cfd,\r
+0x3007, 0x3007,\r
+0x3021, 0x3029,\r
+0x3038, 0x303a,\r
+0x3192, 0x3195,\r
+0x3220, 0x3229,\r
+0x3248, 0x324f,\r
+0x3251, 0x325f,\r
+0x3280, 0x3289,\r
+0x32b1, 0x32bf,\r
+0xa620, 0xa629,\r
+0xa6e6, 0xa6ef,\r
+0xa830, 0xa835,\r
+0xa8d0, 0xa8d9,\r
+0xa900, 0xa909,\r
+0xa9d0, 0xa9d9,\r
+0xa9f0, 0xa9f9,\r
+0xaa50, 0xaa59,\r
+0xabf0, 0xabf9,\r
+0xff10, 0xff19,\r
+0x10107, 0x10133,\r
+0x10140, 0x10178,\r
+0x1018a, 0x1018b,\r
+0x102e1, 0x102fb,\r
+0x10320, 0x10323,\r
+0x10341, 0x10341,\r
+0x1034a, 0x1034a,\r
+0x103d1, 0x103d5,\r
+0x104a0, 0x104a9,\r
+0x10858, 0x1085f,\r
+0x10879, 0x1087f,\r
+0x108a7, 0x108af,\r
+0x108fb, 0x108ff,\r
+0x10916, 0x1091b,\r
+0x109bc, 0x109bd,\r
+0x109c0, 0x109cf,\r
+0x109d2, 0x109ff,\r
+0x10a40, 0x10a48,\r
+0x10a7d, 0x10a7e,\r
+0x10a9d, 0x10a9f,\r
+0x10aeb, 0x10aef,\r
+0x10b58, 0x10b5f,\r
+0x10b78, 0x10b7f,\r
+0x10ba9, 0x10baf,\r
+0x10cfa, 0x10cff,\r
+0x10d30, 0x10d39,\r
+0x10e60, 0x10e7e,\r
+0x10f1d, 0x10f26,\r
+0x10f51, 0x10f54,\r
+0x11052, 0x1106f,\r
+0x110f0, 0x110f9,\r
+0x11136, 0x1113f,\r
+0x111d0, 0x111d9,\r
+0x111e1, 0x111f4,\r
+0x112f0, 0x112f9,\r
+0x11450, 0x11459,\r
+0x114d0, 0x114d9,\r
+0x11650, 0x11659,\r
+0x116c0, 0x116c9,\r
+0x11730, 0x1173b,\r
+0x118e0, 0x118f2,\r
+0x11c50, 0x11c6c,\r
+0x11d50, 0x11d59,\r
+0x11da0, 0x11da9,\r
+0x12400, 0x1246e,\r
+0x16a60, 0x16a69,\r
+0x16b50, 0x16b59,\r
+0x16b5b, 0x16b61,\r
+0x16e80, 0x16e96,\r
+0x1d2e0, 0x1d2f3,\r
+0x1d360, 0x1d378,\r
+0x1d7ce, 0x1d7ff,\r
+0x1e8c7, 0x1e8cf,\r
+0x1e950, 0x1e959,\r
+0x1ec71, 0x1ecab,\r
+0x1ecad, 0x1ecaf,\r
+0x1ecb1, 0x1ecb4,\r
+0x1f100, 0x1f10c,\r
+}; /* END of CR_N */\r
+\r
+/* PROPERTY: 'Nabataean': Script */\r
+static const OnigCodePoint\r
+CR_Nabataean[] = { 2,\r
+0x10880, 0x1089e,\r
+0x108a7, 0x108af,\r
+}; /* END of CR_Nabataean */\r
+\r
+/* PROPERTY: 'Nd': General Category */\r
+#define CR_Nd CR_Digit\r
+\r
+/* PROPERTY: 'New_Tai_Lue': Script */\r
+static const OnigCodePoint\r
+CR_New_Tai_Lue[] = { 4,\r
+0x1980, 0x19ab,\r
+0x19b0, 0x19c9,\r
+0x19d0, 0x19da,\r
+0x19de, 0x19df,\r
+}; /* END of CR_New_Tai_Lue */\r
+\r
+/* PROPERTY: 'Newa': Script */\r
+static const OnigCodePoint\r
+CR_Newa[] = { 3,\r
+0x11400, 0x11459,\r
+0x1145b, 0x1145b,\r
+0x1145d, 0x1145e,\r
+}; /* END of CR_Newa */\r
+\r
+/* PROPERTY: 'Nko': Script */\r
+static const OnigCodePoint\r
+CR_Nko[] = { 2,\r
+0x07c0, 0x07fa,\r
+0x07fd, 0x07ff,\r
+}; /* END of CR_Nko */\r
+\r
+/* PROPERTY: 'Nl': General Category */\r
+static const OnigCodePoint\r
+CR_Nl[] = { 12,\r
+0x16ee, 0x16f0,\r
+0x2160, 0x2182,\r
+0x2185, 0x2188,\r
+0x3007, 0x3007,\r
+0x3021, 0x3029,\r
+0x3038, 0x303a,\r
+0xa6e6, 0xa6ef,\r
+0x10140, 0x10174,\r
+0x10341, 0x10341,\r
+0x1034a, 0x1034a,\r
+0x103d1, 0x103d5,\r
+0x12400, 0x1246e,\r
+}; /* END of CR_Nl */\r
+\r
+/* PROPERTY: 'No': General Category */\r
+static const OnigCodePoint\r
+CR_No[] = { 67,\r
+0x00b2, 0x00b3,\r
+0x00b9, 0x00b9,\r
+0x00bc, 0x00be,\r
+0x09f4, 0x09f9,\r
+0x0b72, 0x0b77,\r
+0x0bf0, 0x0bf2,\r
+0x0c78, 0x0c7e,\r
+0x0d58, 0x0d5e,\r
+0x0d70, 0x0d78,\r
+0x0f2a, 0x0f33,\r
+0x1369, 0x137c,\r
+0x17f0, 0x17f9,\r
+0x19da, 0x19da,\r
+0x2070, 0x2070,\r
+0x2074, 0x2079,\r
+0x2080, 0x2089,\r
+0x2150, 0x215f,\r
+0x2189, 0x2189,\r
+0x2460, 0x249b,\r
+0x24ea, 0x24ff,\r
+0x2776, 0x2793,\r
+0x2cfd, 0x2cfd,\r
+0x3192, 0x3195,\r
+0x3220, 0x3229,\r
+0x3248, 0x324f,\r
+0x3251, 0x325f,\r
+0x3280, 0x3289,\r
+0x32b1, 0x32bf,\r
+0xa830, 0xa835,\r
+0x10107, 0x10133,\r
+0x10175, 0x10178,\r
+0x1018a, 0x1018b,\r
+0x102e1, 0x102fb,\r
+0x10320, 0x10323,\r
+0x10858, 0x1085f,\r
+0x10879, 0x1087f,\r
+0x108a7, 0x108af,\r
+0x108fb, 0x108ff,\r
+0x10916, 0x1091b,\r
+0x109bc, 0x109bd,\r
+0x109c0, 0x109cf,\r
+0x109d2, 0x109ff,\r
+0x10a40, 0x10a48,\r
+0x10a7d, 0x10a7e,\r
+0x10a9d, 0x10a9f,\r
+0x10aeb, 0x10aef,\r
+0x10b58, 0x10b5f,\r
+0x10b78, 0x10b7f,\r
+0x10ba9, 0x10baf,\r
+0x10cfa, 0x10cff,\r
+0x10e60, 0x10e7e,\r
+0x10f1d, 0x10f26,\r
+0x10f51, 0x10f54,\r
+0x11052, 0x11065,\r
+0x111e1, 0x111f4,\r
+0x1173a, 0x1173b,\r
+0x118ea, 0x118f2,\r
+0x11c5a, 0x11c6c,\r
+0x16b5b, 0x16b61,\r
+0x16e80, 0x16e96,\r
+0x1d2e0, 0x1d2f3,\r
+0x1d360, 0x1d378,\r
+0x1e8c7, 0x1e8cf,\r
+0x1ec71, 0x1ecab,\r
+0x1ecad, 0x1ecaf,\r
+0x1ecb1, 0x1ecb4,\r
+0x1f100, 0x1f10c,\r
+}; /* END of CR_No */\r
+\r
+/* PROPERTY: 'Noncharacter_Code_Point': Binary Property */\r
+static const OnigCodePoint\r
+CR_Noncharacter_Code_Point[] = { 18,\r
+0xfdd0, 0xfdef,\r
+0xfffe, 0xffff,\r
+0x1fffe, 0x1ffff,\r
+0x2fffe, 0x2ffff,\r
+0x3fffe, 0x3ffff,\r
+0x4fffe, 0x4ffff,\r
+0x5fffe, 0x5ffff,\r
+0x6fffe, 0x6ffff,\r
+0x7fffe, 0x7ffff,\r
+0x8fffe, 0x8ffff,\r
+0x9fffe, 0x9ffff,\r
+0xafffe, 0xaffff,\r
+0xbfffe, 0xbffff,\r
+0xcfffe, 0xcffff,\r
+0xdfffe, 0xdffff,\r
+0xefffe, 0xeffff,\r
+0xffffe, 0xfffff,\r
+0x10fffe, 0x10ffff,\r
+}; /* END of CR_Noncharacter_Code_Point */\r
+\r
+/* PROPERTY: 'Nushu': Script */\r
+static const OnigCodePoint\r
+CR_Nushu[] = { 2,\r
+0x16fe1, 0x16fe1,\r
+0x1b170, 0x1b2fb,\r
+}; /* END of CR_Nushu */\r
+\r
+/* PROPERTY: 'Ogham': Script */\r
+static const OnigCodePoint\r
+CR_Ogham[] = { 1,\r
+0x1680, 0x169c,\r
+}; /* END of CR_Ogham */\r
+\r
+/* PROPERTY: 'Ol_Chiki': Script */\r
+static const OnigCodePoint\r
+CR_Ol_Chiki[] = { 1,\r
+0x1c50, 0x1c7f,\r
+}; /* END of CR_Ol_Chiki */\r
+\r
+/* PROPERTY: 'Old_Hungarian': Script */\r
+static const OnigCodePoint\r
+CR_Old_Hungarian[] = { 3,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x10cfa, 0x10cff,\r
+}; /* END of CR_Old_Hungarian */\r
+\r
+/* PROPERTY: 'Old_Italic': Script */\r
+static const OnigCodePoint\r
+CR_Old_Italic[] = { 2,\r
+0x10300, 0x10323,\r
+0x1032d, 0x1032f,\r
+}; /* END of CR_Old_Italic */\r
+\r
+/* PROPERTY: 'Old_North_Arabian': Script */\r
+static const OnigCodePoint\r
+CR_Old_North_Arabian[] = { 1,\r
+0x10a80, 0x10a9f,\r
+}; /* END of CR_Old_North_Arabian */\r
+\r
+/* PROPERTY: 'Old_Permic': Script */\r
+static const OnigCodePoint\r
+CR_Old_Permic[] = { 1,\r
+0x10350, 0x1037a,\r
+}; /* END of CR_Old_Permic */\r
+\r
+/* PROPERTY: 'Old_Persian': Script */\r
+static const OnigCodePoint\r
+CR_Old_Persian[] = { 2,\r
+0x103a0, 0x103c3,\r
+0x103c8, 0x103d5,\r
+}; /* END of CR_Old_Persian */\r
+\r
+/* PROPERTY: 'Old_Sogdian': Script */\r
+static const OnigCodePoint\r
+CR_Old_Sogdian[] = { 1,\r
+0x10f00, 0x10f27,\r
+}; /* END of CR_Old_Sogdian */\r
+\r
+/* PROPERTY: 'Old_South_Arabian': Script */\r
+static const OnigCodePoint\r
+CR_Old_South_Arabian[] = { 1,\r
+0x10a60, 0x10a7f,\r
+}; /* END of CR_Old_South_Arabian */\r
+\r
+/* PROPERTY: 'Old_Turkic': Script */\r
+static const OnigCodePoint\r
+CR_Old_Turkic[] = { 1,\r
+0x10c00, 0x10c48,\r
+}; /* END of CR_Old_Turkic */\r
+\r
+/* PROPERTY: 'Oriya': Script */\r
+static const OnigCodePoint\r
+CR_Oriya[] = { 14,\r
+0x0b01, 0x0b03,\r
+0x0b05, 0x0b0c,\r
+0x0b0f, 0x0b10,\r
+0x0b13, 0x0b28,\r
+0x0b2a, 0x0b30,\r
+0x0b32, 0x0b33,\r
+0x0b35, 0x0b39,\r
+0x0b3c, 0x0b44,\r
+0x0b47, 0x0b48,\r
+0x0b4b, 0x0b4d,\r
+0x0b56, 0x0b57,\r
+0x0b5c, 0x0b5d,\r
+0x0b5f, 0x0b63,\r
+0x0b66, 0x0b77,\r
+}; /* END of CR_Oriya */\r
+\r
+/* PROPERTY: 'Osage': Script */\r
+static const OnigCodePoint\r
+CR_Osage[] = { 2,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+}; /* END of CR_Osage */\r
+\r
+/* PROPERTY: 'Osmanya': Script */\r
+static const OnigCodePoint\r
+CR_Osmanya[] = { 2,\r
+0x10480, 0x1049d,\r
+0x104a0, 0x104a9,\r
+}; /* END of CR_Osmanya */\r
+\r
+/* PROPERTY: 'Other_Alphabetic': Binary Property */\r
+static const OnigCodePoint\r
+CR_Other_Alphabetic[] = { 213,\r
+0x0345, 0x0345,\r
+0x05b0, 0x05bd,\r
+0x05bf, 0x05bf,\r
+0x05c1, 0x05c2,\r
+0x05c4, 0x05c5,\r
+0x05c7, 0x05c7,\r
+0x0610, 0x061a,\r
+0x064b, 0x0657,\r
+0x0659, 0x065f,\r
+0x0670, 0x0670,\r
+0x06d6, 0x06dc,\r
+0x06e1, 0x06e4,\r
+0x06e7, 0x06e8,\r
+0x06ed, 0x06ed,\r
+0x0711, 0x0711,\r
+0x0730, 0x073f,\r
+0x07a6, 0x07b0,\r
+0x0816, 0x0817,\r
+0x081b, 0x0823,\r
+0x0825, 0x0827,\r
+0x0829, 0x082c,\r
+0x08d4, 0x08df,\r
+0x08e3, 0x08e9,\r
+0x08f0, 0x0903,\r
+0x093a, 0x093b,\r
+0x093e, 0x094c,\r
+0x094e, 0x094f,\r
+0x0955, 0x0957,\r
+0x0962, 0x0963,\r
+0x0981, 0x0983,\r
+0x09be, 0x09c4,\r
+0x09c7, 0x09c8,\r
+0x09cb, 0x09cc,\r
+0x09d7, 0x09d7,\r
+0x09e2, 0x09e3,\r
+0x0a01, 0x0a03,\r
+0x0a3e, 0x0a42,\r
+0x0a47, 0x0a48,\r
+0x0a4b, 0x0a4c,\r
+0x0a51, 0x0a51,\r
+0x0a70, 0x0a71,\r
+0x0a75, 0x0a75,\r
+0x0a81, 0x0a83,\r
+0x0abe, 0x0ac5,\r
+0x0ac7, 0x0ac9,\r
+0x0acb, 0x0acc,\r
+0x0ae2, 0x0ae3,\r
+0x0afa, 0x0afc,\r
+0x0b01, 0x0b03,\r
+0x0b3e, 0x0b44,\r
+0x0b47, 0x0b48,\r
+0x0b4b, 0x0b4c,\r
+0x0b56, 0x0b57,\r
+0x0b62, 0x0b63,\r
+0x0b82, 0x0b82,\r
+0x0bbe, 0x0bc2,\r
+0x0bc6, 0x0bc8,\r
+0x0bca, 0x0bcc,\r
+0x0bd7, 0x0bd7,\r
+0x0c00, 0x0c03,\r
+0x0c3e, 0x0c44,\r
+0x0c46, 0x0c48,\r
+0x0c4a, 0x0c4c,\r
+0x0c55, 0x0c56,\r
+0x0c62, 0x0c63,\r
+0x0c81, 0x0c83,\r
+0x0cbe, 0x0cc4,\r
+0x0cc6, 0x0cc8,\r
+0x0cca, 0x0ccc,\r
+0x0cd5, 0x0cd6,\r
+0x0ce2, 0x0ce3,\r
+0x0d00, 0x0d03,\r
+0x0d3e, 0x0d44,\r
+0x0d46, 0x0d48,\r
+0x0d4a, 0x0d4c,\r
+0x0d57, 0x0d57,\r
+0x0d62, 0x0d63,\r
+0x0d82, 0x0d83,\r
+0x0dcf, 0x0dd4,\r
+0x0dd6, 0x0dd6,\r
+0x0dd8, 0x0ddf,\r
+0x0df2, 0x0df3,\r
+0x0e31, 0x0e31,\r
+0x0e34, 0x0e3a,\r
+0x0e4d, 0x0e4d,\r
+0x0eb1, 0x0eb1,\r
+0x0eb4, 0x0eb9,\r
+0x0ebb, 0x0ebc,\r
+0x0ecd, 0x0ecd,\r
+0x0f71, 0x0f81,\r
+0x0f8d, 0x0f97,\r
+0x0f99, 0x0fbc,\r
+0x102b, 0x1036,\r
+0x1038, 0x1038,\r
+0x103b, 0x103e,\r
+0x1056, 0x1059,\r
+0x105e, 0x1060,\r
+0x1062, 0x1062,\r
+0x1067, 0x1068,\r
+0x1071, 0x1074,\r
+0x1082, 0x1086,\r
+0x109c, 0x109d,\r
+0x135f, 0x135f,\r
+0x1712, 0x1713,\r
+0x1732, 0x1733,\r
+0x1752, 0x1753,\r
+0x1772, 0x1773,\r
+0x17b6, 0x17c8,\r
+0x1885, 0x1886,\r
+0x18a9, 0x18a9,\r
+0x1920, 0x192b,\r
+0x1930, 0x1938,\r
+0x1a17, 0x1a1b,\r
+0x1a55, 0x1a5e,\r
+0x1a61, 0x1a74,\r
+0x1b00, 0x1b04,\r
+0x1b35, 0x1b43,\r
+0x1b80, 0x1b82,\r
+0x1ba1, 0x1ba9,\r
+0x1bac, 0x1bad,\r
+0x1be7, 0x1bf1,\r
+0x1c24, 0x1c35,\r
+0x1cf2, 0x1cf3,\r
+0x1de7, 0x1df4,\r
+0x24b6, 0x24e9,\r
+0x2de0, 0x2dff,\r
+0xa674, 0xa67b,\r
+0xa69e, 0xa69f,\r
+0xa823, 0xa827,\r
+0xa880, 0xa881,\r
+0xa8b4, 0xa8c3,\r
+0xa8c5, 0xa8c5,\r
+0xa926, 0xa92a,\r
+0xa947, 0xa952,\r
+0xa980, 0xa983,\r
+0xa9b4, 0xa9bf,\r
+0xaa29, 0xaa36,\r
+0xaa43, 0xaa43,\r
+0xaa4c, 0xaa4d,\r
+0xaab0, 0xaab0,\r
+0xaab2, 0xaab4,\r
+0xaab7, 0xaab8,\r
+0xaabe, 0xaabe,\r
+0xaaeb, 0xaaef,\r
+0xaaf5, 0xaaf5,\r
+0xabe3, 0xabea,\r
+0xfb1e, 0xfb1e,\r
+0x10376, 0x1037a,\r
+0x10a01, 0x10a03,\r
+0x10a05, 0x10a06,\r
+0x10a0c, 0x10a0f,\r
+0x10d24, 0x10d27,\r
+0x11000, 0x11002,\r
+0x11038, 0x11045,\r
+0x11082, 0x11082,\r
+0x110b0, 0x110b8,\r
+0x11100, 0x11102,\r
+0x11127, 0x11132,\r
+0x11145, 0x11146,\r
+0x11180, 0x11182,\r
+0x111b3, 0x111bf,\r
+0x1122c, 0x11234,\r
+0x11237, 0x11237,\r
+0x1123e, 0x1123e,\r
+0x112df, 0x112e8,\r
+0x11300, 0x11303,\r
+0x1133e, 0x11344,\r
+0x11347, 0x11348,\r
+0x1134b, 0x1134c,\r
+0x11357, 0x11357,\r
+0x11362, 0x11363,\r
+0x11435, 0x11441,\r
+0x11443, 0x11445,\r
+0x114b0, 0x114c1,\r
+0x115af, 0x115b5,\r
+0x115b8, 0x115be,\r
+0x115dc, 0x115dd,\r
+0x11630, 0x1163e,\r
+0x11640, 0x11640,\r
+0x116ab, 0x116b5,\r
+0x1171d, 0x1172a,\r
+0x1182c, 0x11838,\r
+0x11a01, 0x11a0a,\r
+0x11a35, 0x11a39,\r
+0x11a3b, 0x11a3e,\r
+0x11a51, 0x11a5b,\r
+0x11a8a, 0x11a97,\r
+0x11c2f, 0x11c36,\r
+0x11c38, 0x11c3e,\r
+0x11c92, 0x11ca7,\r
+0x11ca9, 0x11cb6,\r
+0x11d31, 0x11d36,\r
+0x11d3a, 0x11d3a,\r
+0x11d3c, 0x11d3d,\r
+0x11d3f, 0x11d41,\r
+0x11d43, 0x11d43,\r
+0x11d47, 0x11d47,\r
+0x11d8a, 0x11d8e,\r
+0x11d90, 0x11d91,\r
+0x11d93, 0x11d96,\r
+0x11ef3, 0x11ef6,\r
+0x16b30, 0x16b36,\r
+0x16f51, 0x16f7e,\r
+0x1bc9e, 0x1bc9e,\r
+0x1e000, 0x1e006,\r
+0x1e008, 0x1e018,\r
+0x1e01b, 0x1e021,\r
+0x1e023, 0x1e024,\r
+0x1e026, 0x1e02a,\r
+0x1e947, 0x1e947,\r
+0x1f130, 0x1f149,\r
+0x1f150, 0x1f169,\r
+0x1f170, 0x1f189,\r
+}; /* END of CR_Other_Alphabetic */\r
+\r
+/* PROPERTY: 'Other_Default_Ignorable_Code_Point': Binary Property */\r
+static const OnigCodePoint\r
+CR_Other_Default_Ignorable_Code_Point[] = { 11,\r
+0x034f, 0x034f,\r
+0x115f, 0x1160,\r
+0x17b4, 0x17b5,\r
+0x2065, 0x2065,\r
+0x3164, 0x3164,\r
+0xffa0, 0xffa0,\r
+0xfff0, 0xfff8,\r
+0xe0000, 0xe0000,\r
+0xe0002, 0xe001f,\r
+0xe0080, 0xe00ff,\r
+0xe01f0, 0xe0fff,\r
+}; /* END of CR_Other_Default_Ignorable_Code_Point */\r
+\r
+/* PROPERTY: 'Other_Grapheme_Extend': Binary Property */\r
+static const OnigCodePoint\r
+CR_Other_Grapheme_Extend[] = { 23,\r
+0x09be, 0x09be,\r
+0x09d7, 0x09d7,\r
+0x0b3e, 0x0b3e,\r
+0x0b57, 0x0b57,\r
+0x0bbe, 0x0bbe,\r
+0x0bd7, 0x0bd7,\r
+0x0cc2, 0x0cc2,\r
+0x0cd5, 0x0cd6,\r
+0x0d3e, 0x0d3e,\r
+0x0d57, 0x0d57,\r
+0x0dcf, 0x0dcf,\r
+0x0ddf, 0x0ddf,\r
+0x200c, 0x200c,\r
+0x302e, 0x302f,\r
+0xff9e, 0xff9f,\r
+0x1133e, 0x1133e,\r
+0x11357, 0x11357,\r
+0x114b0, 0x114b0,\r
+0x114bd, 0x114bd,\r
+0x115af, 0x115af,\r
+0x1d165, 0x1d165,\r
+0x1d16e, 0x1d172,\r
+0xe0020, 0xe007f,\r
+}; /* END of CR_Other_Grapheme_Extend */\r
+\r
+/* PROPERTY: 'Other_ID_Continue': Binary Property */\r
+static const OnigCodePoint\r
+CR_Other_ID_Continue[] = { 4,\r
+0x00b7, 0x00b7,\r
+0x0387, 0x0387,\r
+0x1369, 0x1371,\r
+0x19da, 0x19da,\r
+}; /* END of CR_Other_ID_Continue */\r
+\r
+/* PROPERTY: 'Other_ID_Start': Binary Property */\r
+static const OnigCodePoint\r
+CR_Other_ID_Start[] = { 4,\r
+0x1885, 0x1886,\r
+0x2118, 0x2118,\r
+0x212e, 0x212e,\r
+0x309b, 0x309c,\r
+}; /* END of CR_Other_ID_Start */\r
+\r
+/* PROPERTY: 'Other_Lowercase': Binary Property */\r
+static const OnigCodePoint\r
+CR_Other_Lowercase[] = { 20,\r
+0x00aa, 0x00aa,\r
+0x00ba, 0x00ba,\r
+0x02b0, 0x02b8,\r
+0x02c0, 0x02c1,\r
+0x02e0, 0x02e4,\r
+0x0345, 0x0345,\r
+0x037a, 0x037a,\r
+0x1d2c, 0x1d6a,\r
+0x1d78, 0x1d78,\r
+0x1d9b, 0x1dbf,\r
+0x2071, 0x2071,\r
+0x207f, 0x207f,\r
+0x2090, 0x209c,\r
+0x2170, 0x217f,\r
+0x24d0, 0x24e9,\r
+0x2c7c, 0x2c7d,\r
+0xa69c, 0xa69d,\r
+0xa770, 0xa770,\r
+0xa7f8, 0xa7f9,\r
+0xab5c, 0xab5f,\r
+}; /* END of CR_Other_Lowercase */\r
+\r
+/* PROPERTY: 'Other_Math': Binary Property */\r
+static const OnigCodePoint\r
+CR_Other_Math[] = { 134,\r
+0x005e, 0x005e,\r
+0x03d0, 0x03d2,\r
+0x03d5, 0x03d5,\r
+0x03f0, 0x03f1,\r
+0x03f4, 0x03f5,\r
+0x2016, 0x2016,\r
+0x2032, 0x2034,\r
+0x2040, 0x2040,\r
+0x2061, 0x2064,\r
+0x207d, 0x207e,\r
+0x208d, 0x208e,\r
+0x20d0, 0x20dc,\r
+0x20e1, 0x20e1,\r
+0x20e5, 0x20e6,\r
+0x20eb, 0x20ef,\r
+0x2102, 0x2102,\r
+0x2107, 0x2107,\r
+0x210a, 0x2113,\r
+0x2115, 0x2115,\r
+0x2119, 0x211d,\r
+0x2124, 0x2124,\r
+0x2128, 0x2129,\r
+0x212c, 0x212d,\r
+0x212f, 0x2131,\r
+0x2133, 0x2138,\r
+0x213c, 0x213f,\r
+0x2145, 0x2149,\r
+0x2195, 0x2199,\r
+0x219c, 0x219f,\r
+0x21a1, 0x21a2,\r
+0x21a4, 0x21a5,\r
+0x21a7, 0x21a7,\r
+0x21a9, 0x21ad,\r
+0x21b0, 0x21b1,\r
+0x21b6, 0x21b7,\r
+0x21bc, 0x21cd,\r
+0x21d0, 0x21d1,\r
+0x21d3, 0x21d3,\r
+0x21d5, 0x21db,\r
+0x21dd, 0x21dd,\r
+0x21e4, 0x21e5,\r
+0x2308, 0x230b,\r
+0x23b4, 0x23b5,\r
+0x23b7, 0x23b7,\r
+0x23d0, 0x23d0,\r
+0x23e2, 0x23e2,\r
+0x25a0, 0x25a1,\r
+0x25ae, 0x25b6,\r
+0x25bc, 0x25c0,\r
+0x25c6, 0x25c7,\r
+0x25ca, 0x25cb,\r
+0x25cf, 0x25d3,\r
+0x25e2, 0x25e2,\r
+0x25e4, 0x25e4,\r
+0x25e7, 0x25ec,\r
+0x2605, 0x2606,\r
+0x2640, 0x2640,\r
+0x2642, 0x2642,\r
+0x2660, 0x2663,\r
+0x266d, 0x266e,\r
+0x27c5, 0x27c6,\r
+0x27e6, 0x27ef,\r
+0x2983, 0x2998,\r
+0x29d8, 0x29db,\r
+0x29fc, 0x29fd,\r
+0xfe61, 0xfe61,\r
+0xfe63, 0xfe63,\r
+0xfe68, 0xfe68,\r
+0xff3c, 0xff3c,\r
+0xff3e, 0xff3e,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d6c0,\r
+0x1d6c2, 0x1d6da,\r
+0x1d6dc, 0x1d6fa,\r
+0x1d6fc, 0x1d714,\r
+0x1d716, 0x1d734,\r
+0x1d736, 0x1d74e,\r
+0x1d750, 0x1d76e,\r
+0x1d770, 0x1d788,\r
+0x1d78a, 0x1d7a8,\r
+0x1d7aa, 0x1d7c2,\r
+0x1d7c4, 0x1d7cb,\r
+0x1d7ce, 0x1d7ff,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+}; /* END of CR_Other_Math */\r
+\r
+/* PROPERTY: 'Other_Uppercase': Binary Property */\r
+static const OnigCodePoint\r
+CR_Other_Uppercase[] = { 5,\r
+0x2160, 0x216f,\r
+0x24b6, 0x24cf,\r
+0x1f130, 0x1f149,\r
+0x1f150, 0x1f169,\r
+0x1f170, 0x1f189,\r
+}; /* END of CR_Other_Uppercase */\r
+\r
+/* PROPERTY: 'P': Major Category */\r
+#define CR_P CR_Punct\r
+\r
+/* PROPERTY: 'Pahawh_Hmong': Script */\r
+static const OnigCodePoint\r
+CR_Pahawh_Hmong[] = { 5,\r
+0x16b00, 0x16b45,\r
+0x16b50, 0x16b59,\r
+0x16b5b, 0x16b61,\r
+0x16b63, 0x16b77,\r
+0x16b7d, 0x16b8f,\r
+}; /* END of CR_Pahawh_Hmong */\r
+\r
+/* PROPERTY: 'Palmyrene': Script */\r
+static const OnigCodePoint\r
+CR_Palmyrene[] = { 1,\r
+0x10860, 0x1087f,\r
+}; /* END of CR_Palmyrene */\r
+\r
+/* PROPERTY: 'Pattern_Syntax': Binary Property */\r
+static const OnigCodePoint\r
+CR_Pattern_Syntax[] = { 28,\r
+0x0021, 0x002f,\r
+0x003a, 0x0040,\r
+0x005b, 0x005e,\r
+0x0060, 0x0060,\r
+0x007b, 0x007e,\r
+0x00a1, 0x00a7,\r
+0x00a9, 0x00a9,\r
+0x00ab, 0x00ac,\r
+0x00ae, 0x00ae,\r
+0x00b0, 0x00b1,\r
+0x00b6, 0x00b6,\r
+0x00bb, 0x00bb,\r
+0x00bf, 0x00bf,\r
+0x00d7, 0x00d7,\r
+0x00f7, 0x00f7,\r
+0x2010, 0x2027,\r
+0x2030, 0x203e,\r
+0x2041, 0x2053,\r
+0x2055, 0x205e,\r
+0x2190, 0x245f,\r
+0x2500, 0x2775,\r
+0x2794, 0x2bff,\r
+0x2e00, 0x2e7f,\r
+0x3001, 0x3003,\r
+0x3008, 0x3020,\r
+0x3030, 0x3030,\r
+0xfd3e, 0xfd3f,\r
+0xfe45, 0xfe46,\r
+}; /* END of CR_Pattern_Syntax */\r
+\r
+/* PROPERTY: 'Pattern_White_Space': Binary Property */\r
+static const OnigCodePoint\r
+CR_Pattern_White_Space[] = { 5,\r
+0x0009, 0x000d,\r
+0x0020, 0x0020,\r
+0x0085, 0x0085,\r
+0x200e, 0x200f,\r
+0x2028, 0x2029,\r
+}; /* END of CR_Pattern_White_Space */\r
+\r
+/* PROPERTY: 'Pau_Cin_Hau': Script */\r
+static const OnigCodePoint\r
+CR_Pau_Cin_Hau[] = { 1,\r
+0x11ac0, 0x11af8,\r
+}; /* END of CR_Pau_Cin_Hau */\r
+\r
+/* PROPERTY: 'Pc': General Category */\r
+static const OnigCodePoint\r
+CR_Pc[] = { 6,\r
+0x005f, 0x005f,\r
+0x203f, 0x2040,\r
+0x2054, 0x2054,\r
+0xfe33, 0xfe34,\r
+0xfe4d, 0xfe4f,\r
+0xff3f, 0xff3f,\r
+}; /* END of CR_Pc */\r
+\r
+/* PROPERTY: 'Pd': General Category */\r
+static const OnigCodePoint\r
+CR_Pd[] = { 17,\r
+0x002d, 0x002d,\r
+0x058a, 0x058a,\r
+0x05be, 0x05be,\r
+0x1400, 0x1400,\r
+0x1806, 0x1806,\r
+0x2010, 0x2015,\r
+0x2e17, 0x2e17,\r
+0x2e1a, 0x2e1a,\r
+0x2e3a, 0x2e3b,\r
+0x2e40, 0x2e40,\r
+0x301c, 0x301c,\r
+0x3030, 0x3030,\r
+0x30a0, 0x30a0,\r
+0xfe31, 0xfe32,\r
+0xfe58, 0xfe58,\r
+0xfe63, 0xfe63,\r
+0xff0d, 0xff0d,\r
+}; /* END of CR_Pd */\r
+\r
+/* PROPERTY: 'Pe': General Category */\r
+static const OnigCodePoint\r
+CR_Pe[] = { 72,\r
+0x0029, 0x0029,\r
+0x005d, 0x005d,\r
+0x007d, 0x007d,\r
+0x0f3b, 0x0f3b,\r
+0x0f3d, 0x0f3d,\r
+0x169c, 0x169c,\r
+0x2046, 0x2046,\r
+0x207e, 0x207e,\r
+0x208e, 0x208e,\r
+0x2309, 0x2309,\r
+0x230b, 0x230b,\r
+0x232a, 0x232a,\r
+0x2769, 0x2769,\r
+0x276b, 0x276b,\r
+0x276d, 0x276d,\r
+0x276f, 0x276f,\r
+0x2771, 0x2771,\r
+0x2773, 0x2773,\r
+0x2775, 0x2775,\r
+0x27c6, 0x27c6,\r
+0x27e7, 0x27e7,\r
+0x27e9, 0x27e9,\r
+0x27eb, 0x27eb,\r
+0x27ed, 0x27ed,\r
+0x27ef, 0x27ef,\r
+0x2984, 0x2984,\r
+0x2986, 0x2986,\r
+0x2988, 0x2988,\r
+0x298a, 0x298a,\r
+0x298c, 0x298c,\r
+0x298e, 0x298e,\r
+0x2990, 0x2990,\r
+0x2992, 0x2992,\r
+0x2994, 0x2994,\r
+0x2996, 0x2996,\r
+0x2998, 0x2998,\r
+0x29d9, 0x29d9,\r
+0x29db, 0x29db,\r
+0x29fd, 0x29fd,\r
+0x2e23, 0x2e23,\r
+0x2e25, 0x2e25,\r
+0x2e27, 0x2e27,\r
+0x2e29, 0x2e29,\r
+0x3009, 0x3009,\r
+0x300b, 0x300b,\r
+0x300d, 0x300d,\r
+0x300f, 0x300f,\r
+0x3011, 0x3011,\r
+0x3015, 0x3015,\r
+0x3017, 0x3017,\r
+0x3019, 0x3019,\r
+0x301b, 0x301b,\r
+0x301e, 0x301f,\r
+0xfd3e, 0xfd3e,\r
+0xfe18, 0xfe18,\r
+0xfe36, 0xfe36,\r
+0xfe38, 0xfe38,\r
+0xfe3a, 0xfe3a,\r
+0xfe3c, 0xfe3c,\r
+0xfe3e, 0xfe3e,\r
+0xfe40, 0xfe40,\r
+0xfe42, 0xfe42,\r
+0xfe44, 0xfe44,\r
+0xfe48, 0xfe48,\r
+0xfe5a, 0xfe5a,\r
+0xfe5c, 0xfe5c,\r
+0xfe5e, 0xfe5e,\r
+0xff09, 0xff09,\r
+0xff3d, 0xff3d,\r
+0xff5d, 0xff5d,\r
+0xff60, 0xff60,\r
+0xff63, 0xff63,\r
+}; /* END of CR_Pe */\r
+\r
+/* PROPERTY: 'Pf': General Category */\r
+static const OnigCodePoint\r
+CR_Pf[] = { 10,\r
+0x00bb, 0x00bb,\r
+0x2019, 0x2019,\r
+0x201d, 0x201d,\r
+0x203a, 0x203a,\r
+0x2e03, 0x2e03,\r
+0x2e05, 0x2e05,\r
+0x2e0a, 0x2e0a,\r
+0x2e0d, 0x2e0d,\r
+0x2e1d, 0x2e1d,\r
+0x2e21, 0x2e21,\r
+}; /* END of CR_Pf */\r
+\r
+/* PROPERTY: 'Phags_Pa': Script */\r
+static const OnigCodePoint\r
+CR_Phags_Pa[] = { 1,\r
+0xa840, 0xa877,\r
+}; /* END of CR_Phags_Pa */\r
+\r
+/* PROPERTY: 'Phoenician': Script */\r
+static const OnigCodePoint\r
+CR_Phoenician[] = { 2,\r
+0x10900, 0x1091b,\r
+0x1091f, 0x1091f,\r
+}; /* END of CR_Phoenician */\r
+\r
+/* PROPERTY: 'Pi': General Category */\r
+static const OnigCodePoint\r
+CR_Pi[] = { 11,\r
+0x00ab, 0x00ab,\r
+0x2018, 0x2018,\r
+0x201b, 0x201c,\r
+0x201f, 0x201f,\r
+0x2039, 0x2039,\r
+0x2e02, 0x2e02,\r
+0x2e04, 0x2e04,\r
+0x2e09, 0x2e09,\r
+0x2e0c, 0x2e0c,\r
+0x2e1c, 0x2e1c,\r
+0x2e20, 0x2e20,\r
+}; /* END of CR_Pi */\r
+\r
+/* PROPERTY: 'Po': General Category */\r
+static const OnigCodePoint\r
+CR_Po[] = { 175,\r
+0x0021, 0x0023,\r
+0x0025, 0x0027,\r
+0x002a, 0x002a,\r
+0x002c, 0x002c,\r
+0x002e, 0x002f,\r
+0x003a, 0x003b,\r
+0x003f, 0x0040,\r
+0x005c, 0x005c,\r
+0x00a1, 0x00a1,\r
+0x00a7, 0x00a7,\r
+0x00b6, 0x00b7,\r
+0x00bf, 0x00bf,\r
+0x037e, 0x037e,\r
+0x0387, 0x0387,\r
+0x055a, 0x055f,\r
+0x0589, 0x0589,\r
+0x05c0, 0x05c0,\r
+0x05c3, 0x05c3,\r
+0x05c6, 0x05c6,\r
+0x05f3, 0x05f4,\r
+0x0609, 0x060a,\r
+0x060c, 0x060d,\r
+0x061b, 0x061b,\r
+0x061e, 0x061f,\r
+0x066a, 0x066d,\r
+0x06d4, 0x06d4,\r
+0x0700, 0x070d,\r
+0x07f7, 0x07f9,\r
+0x0830, 0x083e,\r
+0x085e, 0x085e,\r
+0x0964, 0x0965,\r
+0x0970, 0x0970,\r
+0x09fd, 0x09fd,\r
+0x0a76, 0x0a76,\r
+0x0af0, 0x0af0,\r
+0x0c84, 0x0c84,\r
+0x0df4, 0x0df4,\r
+0x0e4f, 0x0e4f,\r
+0x0e5a, 0x0e5b,\r
+0x0f04, 0x0f12,\r
+0x0f14, 0x0f14,\r
+0x0f85, 0x0f85,\r
+0x0fd0, 0x0fd4,\r
+0x0fd9, 0x0fda,\r
+0x104a, 0x104f,\r
+0x10fb, 0x10fb,\r
+0x1360, 0x1368,\r
+0x166d, 0x166e,\r
+0x16eb, 0x16ed,\r
+0x1735, 0x1736,\r
+0x17d4, 0x17d6,\r
+0x17d8, 0x17da,\r
+0x1800, 0x1805,\r
+0x1807, 0x180a,\r
+0x1944, 0x1945,\r
+0x1a1e, 0x1a1f,\r
+0x1aa0, 0x1aa6,\r
+0x1aa8, 0x1aad,\r
+0x1b5a, 0x1b60,\r
+0x1bfc, 0x1bff,\r
+0x1c3b, 0x1c3f,\r
+0x1c7e, 0x1c7f,\r
+0x1cc0, 0x1cc7,\r
+0x1cd3, 0x1cd3,\r
+0x2016, 0x2017,\r
+0x2020, 0x2027,\r
+0x2030, 0x2038,\r
+0x203b, 0x203e,\r
+0x2041, 0x2043,\r
+0x2047, 0x2051,\r
+0x2053, 0x2053,\r
+0x2055, 0x205e,\r
+0x2cf9, 0x2cfc,\r
+0x2cfe, 0x2cff,\r
+0x2d70, 0x2d70,\r
+0x2e00, 0x2e01,\r
+0x2e06, 0x2e08,\r
+0x2e0b, 0x2e0b,\r
+0x2e0e, 0x2e16,\r
+0x2e18, 0x2e19,\r
+0x2e1b, 0x2e1b,\r
+0x2e1e, 0x2e1f,\r
+0x2e2a, 0x2e2e,\r
+0x2e30, 0x2e39,\r
+0x2e3c, 0x2e3f,\r
+0x2e41, 0x2e41,\r
+0x2e43, 0x2e4e,\r
+0x3001, 0x3003,\r
+0x303d, 0x303d,\r
+0x30fb, 0x30fb,\r
+0xa4fe, 0xa4ff,\r
+0xa60d, 0xa60f,\r
+0xa673, 0xa673,\r
+0xa67e, 0xa67e,\r
+0xa6f2, 0xa6f7,\r
+0xa874, 0xa877,\r
+0xa8ce, 0xa8cf,\r
+0xa8f8, 0xa8fa,\r
+0xa8fc, 0xa8fc,\r
+0xa92e, 0xa92f,\r
+0xa95f, 0xa95f,\r
+0xa9c1, 0xa9cd,\r
+0xa9de, 0xa9df,\r
+0xaa5c, 0xaa5f,\r
+0xaade, 0xaadf,\r
+0xaaf0, 0xaaf1,\r
+0xabeb, 0xabeb,\r
+0xfe10, 0xfe16,\r
+0xfe19, 0xfe19,\r
+0xfe30, 0xfe30,\r
+0xfe45, 0xfe46,\r
+0xfe49, 0xfe4c,\r
+0xfe50, 0xfe52,\r
+0xfe54, 0xfe57,\r
+0xfe5f, 0xfe61,\r
+0xfe68, 0xfe68,\r
+0xfe6a, 0xfe6b,\r
+0xff01, 0xff03,\r
+0xff05, 0xff07,\r
+0xff0a, 0xff0a,\r
+0xff0c, 0xff0c,\r
+0xff0e, 0xff0f,\r
+0xff1a, 0xff1b,\r
+0xff1f, 0xff20,\r
+0xff3c, 0xff3c,\r
+0xff61, 0xff61,\r
+0xff64, 0xff65,\r
+0x10100, 0x10102,\r
+0x1039f, 0x1039f,\r
+0x103d0, 0x103d0,\r
+0x1056f, 0x1056f,\r
+0x10857, 0x10857,\r
+0x1091f, 0x1091f,\r
+0x1093f, 0x1093f,\r
+0x10a50, 0x10a58,\r
+0x10a7f, 0x10a7f,\r
+0x10af0, 0x10af6,\r
+0x10b39, 0x10b3f,\r
+0x10b99, 0x10b9c,\r
+0x10f55, 0x10f59,\r
+0x11047, 0x1104d,\r
+0x110bb, 0x110bc,\r
+0x110be, 0x110c1,\r
+0x11140, 0x11143,\r
+0x11174, 0x11175,\r
+0x111c5, 0x111c8,\r
+0x111cd, 0x111cd,\r
+0x111db, 0x111db,\r
+0x111dd, 0x111df,\r
+0x11238, 0x1123d,\r
+0x112a9, 0x112a9,\r
+0x1144b, 0x1144f,\r
+0x1145b, 0x1145b,\r
+0x1145d, 0x1145d,\r
+0x114c6, 0x114c6,\r
+0x115c1, 0x115d7,\r
+0x11641, 0x11643,\r
+0x11660, 0x1166c,\r
+0x1173c, 0x1173e,\r
+0x1183b, 0x1183b,\r
+0x11a3f, 0x11a46,\r
+0x11a9a, 0x11a9c,\r
+0x11a9e, 0x11aa2,\r
+0x11c41, 0x11c45,\r
+0x11c70, 0x11c71,\r
+0x11ef7, 0x11ef8,\r
+0x12470, 0x12474,\r
+0x16a6e, 0x16a6f,\r
+0x16af5, 0x16af5,\r
+0x16b37, 0x16b3b,\r
+0x16b44, 0x16b44,\r
+0x16e97, 0x16e9a,\r
+0x1bc9f, 0x1bc9f,\r
+0x1da87, 0x1da8b,\r
+0x1e95e, 0x1e95f,\r
+}; /* END of CR_Po */\r
+\r
+/* PROPERTY: 'Prepended_Concatenation_Mark': Binary Property */\r
+static const OnigCodePoint\r
+CR_Prepended_Concatenation_Mark[] = { 6,\r
+0x0600, 0x0605,\r
+0x06dd, 0x06dd,\r
+0x070f, 0x070f,\r
+0x08e2, 0x08e2,\r
+0x110bd, 0x110bd,\r
+0x110cd, 0x110cd,\r
+}; /* END of CR_Prepended_Concatenation_Mark */\r
+\r
+/* PROPERTY: 'Ps': General Category */\r
+static const OnigCodePoint\r
+CR_Ps[] = { 75,\r
+0x0028, 0x0028,\r
+0x005b, 0x005b,\r
+0x007b, 0x007b,\r
+0x0f3a, 0x0f3a,\r
+0x0f3c, 0x0f3c,\r
+0x169b, 0x169b,\r
+0x201a, 0x201a,\r
+0x201e, 0x201e,\r
+0x2045, 0x2045,\r
+0x207d, 0x207d,\r
+0x208d, 0x208d,\r
+0x2308, 0x2308,\r
+0x230a, 0x230a,\r
+0x2329, 0x2329,\r
+0x2768, 0x2768,\r
+0x276a, 0x276a,\r
+0x276c, 0x276c,\r
+0x276e, 0x276e,\r
+0x2770, 0x2770,\r
+0x2772, 0x2772,\r
+0x2774, 0x2774,\r
+0x27c5, 0x27c5,\r
+0x27e6, 0x27e6,\r
+0x27e8, 0x27e8,\r
+0x27ea, 0x27ea,\r
+0x27ec, 0x27ec,\r
+0x27ee, 0x27ee,\r
+0x2983, 0x2983,\r
+0x2985, 0x2985,\r
+0x2987, 0x2987,\r
+0x2989, 0x2989,\r
+0x298b, 0x298b,\r
+0x298d, 0x298d,\r
+0x298f, 0x298f,\r
+0x2991, 0x2991,\r
+0x2993, 0x2993,\r
+0x2995, 0x2995,\r
+0x2997, 0x2997,\r
+0x29d8, 0x29d8,\r
+0x29da, 0x29da,\r
+0x29fc, 0x29fc,\r
+0x2e22, 0x2e22,\r
+0x2e24, 0x2e24,\r
+0x2e26, 0x2e26,\r
+0x2e28, 0x2e28,\r
+0x2e42, 0x2e42,\r
+0x3008, 0x3008,\r
+0x300a, 0x300a,\r
+0x300c, 0x300c,\r
+0x300e, 0x300e,\r
+0x3010, 0x3010,\r
+0x3014, 0x3014,\r
+0x3016, 0x3016,\r
+0x3018, 0x3018,\r
+0x301a, 0x301a,\r
+0x301d, 0x301d,\r
+0xfd3f, 0xfd3f,\r
+0xfe17, 0xfe17,\r
+0xfe35, 0xfe35,\r
+0xfe37, 0xfe37,\r
+0xfe39, 0xfe39,\r
+0xfe3b, 0xfe3b,\r
+0xfe3d, 0xfe3d,\r
+0xfe3f, 0xfe3f,\r
+0xfe41, 0xfe41,\r
+0xfe43, 0xfe43,\r
+0xfe47, 0xfe47,\r
+0xfe59, 0xfe59,\r
+0xfe5b, 0xfe5b,\r
+0xfe5d, 0xfe5d,\r
+0xff08, 0xff08,\r
+0xff3b, 0xff3b,\r
+0xff5b, 0xff5b,\r
+0xff5f, 0xff5f,\r
+0xff62, 0xff62,\r
+}; /* END of CR_Ps */\r
+\r
+/* PROPERTY: 'Psalter_Pahlavi': Script */\r
+static const OnigCodePoint\r
+CR_Psalter_Pahlavi[] = { 3,\r
+0x10b80, 0x10b91,\r
+0x10b99, 0x10b9c,\r
+0x10ba9, 0x10baf,\r
+}; /* END of CR_Psalter_Pahlavi */\r
+\r
+/* PROPERTY: 'Quotation_Mark': Binary Property */\r
+static const OnigCodePoint\r
+CR_Quotation_Mark[] = { 13,\r
+0x0022, 0x0022,\r
+0x0027, 0x0027,\r
+0x00ab, 0x00ab,\r
+0x00bb, 0x00bb,\r
+0x2018, 0x201f,\r
+0x2039, 0x203a,\r
+0x2e42, 0x2e42,\r
+0x300c, 0x300f,\r
+0x301d, 0x301f,\r
+0xfe41, 0xfe44,\r
+0xff02, 0xff02,\r
+0xff07, 0xff07,\r
+0xff62, 0xff63,\r
+}; /* END of CR_Quotation_Mark */\r
+\r
+/* PROPERTY: 'Radical': Binary Property */\r
+static const OnigCodePoint\r
+CR_Radical[] = { 3,\r
+0x2e80, 0x2e99,\r
+0x2e9b, 0x2ef3,\r
+0x2f00, 0x2fd5,\r
+}; /* END of CR_Radical */\r
+\r
+/* PROPERTY: 'Regional_Indicator': Binary Property */\r
+static const OnigCodePoint\r
+CR_Regional_Indicator[] = { 1,\r
+0x1f1e6, 0x1f1ff,\r
+}; /* END of CR_Regional_Indicator */\r
+\r
+/* PROPERTY: 'Rejang': Script */\r
+static const OnigCodePoint\r
+CR_Rejang[] = { 2,\r
+0xa930, 0xa953,\r
+0xa95f, 0xa95f,\r
+}; /* END of CR_Rejang */\r
+\r
+/* PROPERTY: 'Runic': Script */\r
+static const OnigCodePoint\r
+CR_Runic[] = { 2,\r
+0x16a0, 0x16ea,\r
+0x16ee, 0x16f8,\r
+}; /* END of CR_Runic */\r
+\r
+/* PROPERTY: 'S': Major Category */\r
+static const OnigCodePoint\r
+CR_S[] = { 220,\r
+0x0024, 0x0024,\r
+0x002b, 0x002b,\r
+0x003c, 0x003e,\r
+0x005e, 0x005e,\r
+0x0060, 0x0060,\r
+0x007c, 0x007c,\r
+0x007e, 0x007e,\r
+0x00a2, 0x00a6,\r
+0x00a8, 0x00a9,\r
+0x00ac, 0x00ac,\r
+0x00ae, 0x00b1,\r
+0x00b4, 0x00b4,\r
+0x00b8, 0x00b8,\r
+0x00d7, 0x00d7,\r
+0x00f7, 0x00f7,\r
+0x02c2, 0x02c5,\r
+0x02d2, 0x02df,\r
+0x02e5, 0x02eb,\r
+0x02ed, 0x02ed,\r
+0x02ef, 0x02ff,\r
+0x0375, 0x0375,\r
+0x0384, 0x0385,\r
+0x03f6, 0x03f6,\r
+0x0482, 0x0482,\r
+0x058d, 0x058f,\r
+0x0606, 0x0608,\r
+0x060b, 0x060b,\r
+0x060e, 0x060f,\r
+0x06de, 0x06de,\r
+0x06e9, 0x06e9,\r
+0x06fd, 0x06fe,\r
+0x07f6, 0x07f6,\r
+0x07fe, 0x07ff,\r
+0x09f2, 0x09f3,\r
+0x09fa, 0x09fb,\r
+0x0af1, 0x0af1,\r
+0x0b70, 0x0b70,\r
+0x0bf3, 0x0bfa,\r
+0x0c7f, 0x0c7f,\r
+0x0d4f, 0x0d4f,\r
+0x0d79, 0x0d79,\r
+0x0e3f, 0x0e3f,\r
+0x0f01, 0x0f03,\r
+0x0f13, 0x0f13,\r
+0x0f15, 0x0f17,\r
+0x0f1a, 0x0f1f,\r
+0x0f34, 0x0f34,\r
+0x0f36, 0x0f36,\r
+0x0f38, 0x0f38,\r
+0x0fbe, 0x0fc5,\r
+0x0fc7, 0x0fcc,\r
+0x0fce, 0x0fcf,\r
+0x0fd5, 0x0fd8,\r
+0x109e, 0x109f,\r
+0x1390, 0x1399,\r
+0x17db, 0x17db,\r
+0x1940, 0x1940,\r
+0x19de, 0x19ff,\r
+0x1b61, 0x1b6a,\r
+0x1b74, 0x1b7c,\r
+0x1fbd, 0x1fbd,\r
+0x1fbf, 0x1fc1,\r
+0x1fcd, 0x1fcf,\r
+0x1fdd, 0x1fdf,\r
+0x1fed, 0x1fef,\r
+0x1ffd, 0x1ffe,\r
+0x2044, 0x2044,\r
+0x2052, 0x2052,\r
+0x207a, 0x207c,\r
+0x208a, 0x208c,\r
+0x20a0, 0x20bf,\r
+0x2100, 0x2101,\r
+0x2103, 0x2106,\r
+0x2108, 0x2109,\r
+0x2114, 0x2114,\r
+0x2116, 0x2118,\r
+0x211e, 0x2123,\r
+0x2125, 0x2125,\r
+0x2127, 0x2127,\r
+0x2129, 0x2129,\r
+0x212e, 0x212e,\r
+0x213a, 0x213b,\r
+0x2140, 0x2144,\r
+0x214a, 0x214d,\r
+0x214f, 0x214f,\r
+0x218a, 0x218b,\r
+0x2190, 0x2307,\r
+0x230c, 0x2328,\r
+0x232b, 0x2426,\r
+0x2440, 0x244a,\r
+0x249c, 0x24e9,\r
+0x2500, 0x2767,\r
+0x2794, 0x27c4,\r
+0x27c7, 0x27e5,\r
+0x27f0, 0x2982,\r
+0x2999, 0x29d7,\r
+0x29dc, 0x29fb,\r
+0x29fe, 0x2b73,\r
+0x2b76, 0x2b95,\r
+0x2b98, 0x2bc8,\r
+0x2bca, 0x2bfe,\r
+0x2ce5, 0x2cea,\r
+0x2e80, 0x2e99,\r
+0x2e9b, 0x2ef3,\r
+0x2f00, 0x2fd5,\r
+0x2ff0, 0x2ffb,\r
+0x3004, 0x3004,\r
+0x3012, 0x3013,\r
+0x3020, 0x3020,\r
+0x3036, 0x3037,\r
+0x303e, 0x303f,\r
+0x309b, 0x309c,\r
+0x3190, 0x3191,\r
+0x3196, 0x319f,\r
+0x31c0, 0x31e3,\r
+0x3200, 0x321e,\r
+0x322a, 0x3247,\r
+0x3250, 0x3250,\r
+0x3260, 0x327f,\r
+0x328a, 0x32b0,\r
+0x32c0, 0x32fe,\r
+0x3300, 0x33ff,\r
+0x4dc0, 0x4dff,\r
+0xa490, 0xa4c6,\r
+0xa700, 0xa716,\r
+0xa720, 0xa721,\r
+0xa789, 0xa78a,\r
+0xa828, 0xa82b,\r
+0xa836, 0xa839,\r
+0xaa77, 0xaa79,\r
+0xab5b, 0xab5b,\r
+0xfb29, 0xfb29,\r
+0xfbb2, 0xfbc1,\r
+0xfdfc, 0xfdfd,\r
+0xfe62, 0xfe62,\r
+0xfe64, 0xfe66,\r
+0xfe69, 0xfe69,\r
+0xff04, 0xff04,\r
+0xff0b, 0xff0b,\r
+0xff1c, 0xff1e,\r
+0xff3e, 0xff3e,\r
+0xff40, 0xff40,\r
+0xff5c, 0xff5c,\r
+0xff5e, 0xff5e,\r
+0xffe0, 0xffe6,\r
+0xffe8, 0xffee,\r
+0xfffc, 0xfffd,\r
+0x10137, 0x1013f,\r
+0x10179, 0x10189,\r
+0x1018c, 0x1018e,\r
+0x10190, 0x1019b,\r
+0x101a0, 0x101a0,\r
+0x101d0, 0x101fc,\r
+0x10877, 0x10878,\r
+0x10ac8, 0x10ac8,\r
+0x1173f, 0x1173f,\r
+0x16b3c, 0x16b3f,\r
+0x16b45, 0x16b45,\r
+0x1bc9c, 0x1bc9c,\r
+0x1d000, 0x1d0f5,\r
+0x1d100, 0x1d126,\r
+0x1d129, 0x1d164,\r
+0x1d16a, 0x1d16c,\r
+0x1d183, 0x1d184,\r
+0x1d18c, 0x1d1a9,\r
+0x1d1ae, 0x1d1e8,\r
+0x1d200, 0x1d241,\r
+0x1d245, 0x1d245,\r
+0x1d300, 0x1d356,\r
+0x1d6c1, 0x1d6c1,\r
+0x1d6db, 0x1d6db,\r
+0x1d6fb, 0x1d6fb,\r
+0x1d715, 0x1d715,\r
+0x1d735, 0x1d735,\r
+0x1d74f, 0x1d74f,\r
+0x1d76f, 0x1d76f,\r
+0x1d789, 0x1d789,\r
+0x1d7a9, 0x1d7a9,\r
+0x1d7c3, 0x1d7c3,\r
+0x1d800, 0x1d9ff,\r
+0x1da37, 0x1da3a,\r
+0x1da6d, 0x1da74,\r
+0x1da76, 0x1da83,\r
+0x1da85, 0x1da86,\r
+0x1ecac, 0x1ecac,\r
+0x1ecb0, 0x1ecb0,\r
+0x1eef0, 0x1eef1,\r
+0x1f000, 0x1f02b,\r
+0x1f030, 0x1f093,\r
+0x1f0a0, 0x1f0ae,\r
+0x1f0b1, 0x1f0bf,\r
+0x1f0c1, 0x1f0cf,\r
+0x1f0d1, 0x1f0f5,\r
+0x1f110, 0x1f16b,\r
+0x1f170, 0x1f1ac,\r
+0x1f1e6, 0x1f202,\r
+0x1f210, 0x1f23b,\r
+0x1f240, 0x1f248,\r
+0x1f250, 0x1f251,\r
+0x1f260, 0x1f265,\r
+0x1f300, 0x1f6d4,\r
+0x1f6e0, 0x1f6ec,\r
+0x1f6f0, 0x1f6f9,\r
+0x1f700, 0x1f773,\r
+0x1f780, 0x1f7d8,\r
+0x1f800, 0x1f80b,\r
+0x1f810, 0x1f847,\r
+0x1f850, 0x1f859,\r
+0x1f860, 0x1f887,\r
+0x1f890, 0x1f8ad,\r
+0x1f900, 0x1f90b,\r
+0x1f910, 0x1f93e,\r
+0x1f940, 0x1f970,\r
+0x1f973, 0x1f976,\r
+0x1f97a, 0x1f97a,\r
+0x1f97c, 0x1f9a2,\r
+0x1f9b0, 0x1f9b9,\r
+0x1f9c0, 0x1f9c2,\r
+0x1f9d0, 0x1f9ff,\r
+0x1fa60, 0x1fa6d,\r
+}; /* END of CR_S */\r
+\r
+/* PROPERTY: 'Samaritan': Script */\r
+static const OnigCodePoint\r
+CR_Samaritan[] = { 2,\r
+0x0800, 0x082d,\r
+0x0830, 0x083e,\r
+}; /* END of CR_Samaritan */\r
+\r
+/* PROPERTY: 'Saurashtra': Script */\r
+static const OnigCodePoint\r
+CR_Saurashtra[] = { 2,\r
+0xa880, 0xa8c5,\r
+0xa8ce, 0xa8d9,\r
+}; /* END of CR_Saurashtra */\r
+\r
+/* PROPERTY: 'Sc': General Category */\r
+static const OnigCodePoint\r
+CR_Sc[] = { 19,\r
+0x0024, 0x0024,\r
+0x00a2, 0x00a5,\r
+0x058f, 0x058f,\r
+0x060b, 0x060b,\r
+0x07fe, 0x07ff,\r
+0x09f2, 0x09f3,\r
+0x09fb, 0x09fb,\r
+0x0af1, 0x0af1,\r
+0x0bf9, 0x0bf9,\r
+0x0e3f, 0x0e3f,\r
+0x17db, 0x17db,\r
+0x20a0, 0x20bf,\r
+0xa838, 0xa838,\r
+0xfdfc, 0xfdfc,\r
+0xfe69, 0xfe69,\r
+0xff04, 0xff04,\r
+0xffe0, 0xffe1,\r
+0xffe5, 0xffe6,\r
+0x1ecb0, 0x1ecb0,\r
+}; /* END of CR_Sc */\r
+\r
+/* PROPERTY: 'Sentence_Terminal': Binary Property */\r
+static const OnigCodePoint\r
+CR_Sentence_Terminal[] = { 74,\r
+0x0021, 0x0021,\r
+0x002e, 0x002e,\r
+0x003f, 0x003f,\r
+0x0589, 0x0589,\r
+0x061e, 0x061f,\r
+0x06d4, 0x06d4,\r
+0x0700, 0x0702,\r
+0x07f9, 0x07f9,\r
+0x0837, 0x0837,\r
+0x0839, 0x0839,\r
+0x083d, 0x083e,\r
+0x0964, 0x0965,\r
+0x104a, 0x104b,\r
+0x1362, 0x1362,\r
+0x1367, 0x1368,\r
+0x166e, 0x166e,\r
+0x1735, 0x1736,\r
+0x1803, 0x1803,\r
+0x1809, 0x1809,\r
+0x1944, 0x1945,\r
+0x1aa8, 0x1aab,\r
+0x1b5a, 0x1b5b,\r
+0x1b5e, 0x1b5f,\r
+0x1c3b, 0x1c3c,\r
+0x1c7e, 0x1c7f,\r
+0x203c, 0x203d,\r
+0x2047, 0x2049,\r
+0x2e2e, 0x2e2e,\r
+0x2e3c, 0x2e3c,\r
+0x3002, 0x3002,\r
+0xa4ff, 0xa4ff,\r
+0xa60e, 0xa60f,\r
+0xa6f3, 0xa6f3,\r
+0xa6f7, 0xa6f7,\r
+0xa876, 0xa877,\r
+0xa8ce, 0xa8cf,\r
+0xa92f, 0xa92f,\r
+0xa9c8, 0xa9c9,\r
+0xaa5d, 0xaa5f,\r
+0xaaf0, 0xaaf1,\r
+0xabeb, 0xabeb,\r
+0xfe52, 0xfe52,\r
+0xfe56, 0xfe57,\r
+0xff01, 0xff01,\r
+0xff0e, 0xff0e,\r
+0xff1f, 0xff1f,\r
+0xff61, 0xff61,\r
+0x10a56, 0x10a57,\r
+0x10f55, 0x10f59,\r
+0x11047, 0x11048,\r
+0x110be, 0x110c1,\r
+0x11141, 0x11143,\r
+0x111c5, 0x111c6,\r
+0x111cd, 0x111cd,\r
+0x111de, 0x111df,\r
+0x11238, 0x11239,\r
+0x1123b, 0x1123c,\r
+0x112a9, 0x112a9,\r
+0x1144b, 0x1144c,\r
+0x115c2, 0x115c3,\r
+0x115c9, 0x115d7,\r
+0x11641, 0x11642,\r
+0x1173c, 0x1173e,\r
+0x11a42, 0x11a43,\r
+0x11a9b, 0x11a9c,\r
+0x11c41, 0x11c42,\r
+0x11ef7, 0x11ef8,\r
+0x16a6e, 0x16a6f,\r
+0x16af5, 0x16af5,\r
+0x16b37, 0x16b38,\r
+0x16b44, 0x16b44,\r
+0x16e98, 0x16e98,\r
+0x1bc9f, 0x1bc9f,\r
+0x1da88, 0x1da88,\r
+}; /* END of CR_Sentence_Terminal */\r
+\r
+/* PROPERTY: 'Sharada': Script */\r
+static const OnigCodePoint\r
+CR_Sharada[] = { 2,\r
+0x11180, 0x111cd,\r
+0x111d0, 0x111df,\r
+}; /* END of CR_Sharada */\r
+\r
+/* PROPERTY: 'Shavian': Script */\r
+static const OnigCodePoint\r
+CR_Shavian[] = { 1,\r
+0x10450, 0x1047f,\r
+}; /* END of CR_Shavian */\r
+\r
+/* PROPERTY: 'Siddham': Script */\r
+static const OnigCodePoint\r
+CR_Siddham[] = { 2,\r
+0x11580, 0x115b5,\r
+0x115b8, 0x115dd,\r
+}; /* END of CR_Siddham */\r
+\r
+/* PROPERTY: 'SignWriting': Script */\r
+static const OnigCodePoint\r
+CR_SignWriting[] = { 3,\r
+0x1d800, 0x1da8b,\r
+0x1da9b, 0x1da9f,\r
+0x1daa1, 0x1daaf,\r
+}; /* END of CR_SignWriting */\r
+\r
+/* PROPERTY: 'Sinhala': Script */\r
+static const OnigCodePoint\r
+CR_Sinhala[] = { 13,\r
+0x0d82, 0x0d83,\r
+0x0d85, 0x0d96,\r
+0x0d9a, 0x0db1,\r
+0x0db3, 0x0dbb,\r
+0x0dbd, 0x0dbd,\r
+0x0dc0, 0x0dc6,\r
+0x0dca, 0x0dca,\r
+0x0dcf, 0x0dd4,\r
+0x0dd6, 0x0dd6,\r
+0x0dd8, 0x0ddf,\r
+0x0de6, 0x0def,\r
+0x0df2, 0x0df4,\r
+0x111e1, 0x111f4,\r
+}; /* END of CR_Sinhala */\r
+\r
+/* PROPERTY: 'Sk': General Category */\r
+static const OnigCodePoint\r
+CR_Sk[] = { 29,\r
+0x005e, 0x005e,\r
+0x0060, 0x0060,\r
+0x00a8, 0x00a8,\r
+0x00af, 0x00af,\r
+0x00b4, 0x00b4,\r
+0x00b8, 0x00b8,\r
+0x02c2, 0x02c5,\r
+0x02d2, 0x02df,\r
+0x02e5, 0x02eb,\r
+0x02ed, 0x02ed,\r
+0x02ef, 0x02ff,\r
+0x0375, 0x0375,\r
+0x0384, 0x0385,\r
+0x1fbd, 0x1fbd,\r
+0x1fbf, 0x1fc1,\r
+0x1fcd, 0x1fcf,\r
+0x1fdd, 0x1fdf,\r
+0x1fed, 0x1fef,\r
+0x1ffd, 0x1ffe,\r
+0x309b, 0x309c,\r
+0xa700, 0xa716,\r
+0xa720, 0xa721,\r
+0xa789, 0xa78a,\r
+0xab5b, 0xab5b,\r
+0xfbb2, 0xfbc1,\r
+0xff3e, 0xff3e,\r
+0xff40, 0xff40,\r
+0xffe3, 0xffe3,\r
+0x1f3fb, 0x1f3ff,\r
+}; /* END of CR_Sk */\r
+\r
+/* PROPERTY: 'Sm': General Category */\r
+static const OnigCodePoint\r
+CR_Sm[] = { 64,\r
+0x002b, 0x002b,\r
+0x003c, 0x003e,\r
+0x007c, 0x007c,\r
+0x007e, 0x007e,\r
+0x00ac, 0x00ac,\r
+0x00b1, 0x00b1,\r
+0x00d7, 0x00d7,\r
+0x00f7, 0x00f7,\r
+0x03f6, 0x03f6,\r
+0x0606, 0x0608,\r
+0x2044, 0x2044,\r
+0x2052, 0x2052,\r
+0x207a, 0x207c,\r
+0x208a, 0x208c,\r
+0x2118, 0x2118,\r
+0x2140, 0x2144,\r
+0x214b, 0x214b,\r
+0x2190, 0x2194,\r
+0x219a, 0x219b,\r
+0x21a0, 0x21a0,\r
+0x21a3, 0x21a3,\r
+0x21a6, 0x21a6,\r
+0x21ae, 0x21ae,\r
+0x21ce, 0x21cf,\r
+0x21d2, 0x21d2,\r
+0x21d4, 0x21d4,\r
+0x21f4, 0x22ff,\r
+0x2320, 0x2321,\r
+0x237c, 0x237c,\r
+0x239b, 0x23b3,\r
+0x23dc, 0x23e1,\r
+0x25b7, 0x25b7,\r
+0x25c1, 0x25c1,\r
+0x25f8, 0x25ff,\r
+0x266f, 0x266f,\r
+0x27c0, 0x27c4,\r
+0x27c7, 0x27e5,\r
+0x27f0, 0x27ff,\r
+0x2900, 0x2982,\r
+0x2999, 0x29d7,\r
+0x29dc, 0x29fb,\r
+0x29fe, 0x2aff,\r
+0x2b30, 0x2b44,\r
+0x2b47, 0x2b4c,\r
+0xfb29, 0xfb29,\r
+0xfe62, 0xfe62,\r
+0xfe64, 0xfe66,\r
+0xff0b, 0xff0b,\r
+0xff1c, 0xff1e,\r
+0xff5c, 0xff5c,\r
+0xff5e, 0xff5e,\r
+0xffe2, 0xffe2,\r
+0xffe9, 0xffec,\r
+0x1d6c1, 0x1d6c1,\r
+0x1d6db, 0x1d6db,\r
+0x1d6fb, 0x1d6fb,\r
+0x1d715, 0x1d715,\r
+0x1d735, 0x1d735,\r
+0x1d74f, 0x1d74f,\r
+0x1d76f, 0x1d76f,\r
+0x1d789, 0x1d789,\r
+0x1d7a9, 0x1d7a9,\r
+0x1d7c3, 0x1d7c3,\r
+0x1eef0, 0x1eef1,\r
+}; /* END of CR_Sm */\r
+\r
+/* PROPERTY: 'So': General Category */\r
+static const OnigCodePoint\r
+CR_So[] = { 174,\r
+0x00a6, 0x00a6,\r
+0x00a9, 0x00a9,\r
+0x00ae, 0x00ae,\r
+0x00b0, 0x00b0,\r
+0x0482, 0x0482,\r
+0x058d, 0x058e,\r
+0x060e, 0x060f,\r
+0x06de, 0x06de,\r
+0x06e9, 0x06e9,\r
+0x06fd, 0x06fe,\r
+0x07f6, 0x07f6,\r
+0x09fa, 0x09fa,\r
+0x0b70, 0x0b70,\r
+0x0bf3, 0x0bf8,\r
+0x0bfa, 0x0bfa,\r
+0x0c7f, 0x0c7f,\r
+0x0d4f, 0x0d4f,\r
+0x0d79, 0x0d79,\r
+0x0f01, 0x0f03,\r
+0x0f13, 0x0f13,\r
+0x0f15, 0x0f17,\r
+0x0f1a, 0x0f1f,\r
+0x0f34, 0x0f34,\r
+0x0f36, 0x0f36,\r
+0x0f38, 0x0f38,\r
+0x0fbe, 0x0fc5,\r
+0x0fc7, 0x0fcc,\r
+0x0fce, 0x0fcf,\r
+0x0fd5, 0x0fd8,\r
+0x109e, 0x109f,\r
+0x1390, 0x1399,\r
+0x1940, 0x1940,\r
+0x19de, 0x19ff,\r
+0x1b61, 0x1b6a,\r
+0x1b74, 0x1b7c,\r
+0x2100, 0x2101,\r
+0x2103, 0x2106,\r
+0x2108, 0x2109,\r
+0x2114, 0x2114,\r
+0x2116, 0x2117,\r
+0x211e, 0x2123,\r
+0x2125, 0x2125,\r
+0x2127, 0x2127,\r
+0x2129, 0x2129,\r
+0x212e, 0x212e,\r
+0x213a, 0x213b,\r
+0x214a, 0x214a,\r
+0x214c, 0x214d,\r
+0x214f, 0x214f,\r
+0x218a, 0x218b,\r
+0x2195, 0x2199,\r
+0x219c, 0x219f,\r
+0x21a1, 0x21a2,\r
+0x21a4, 0x21a5,\r
+0x21a7, 0x21ad,\r
+0x21af, 0x21cd,\r
+0x21d0, 0x21d1,\r
+0x21d3, 0x21d3,\r
+0x21d5, 0x21f3,\r
+0x2300, 0x2307,\r
+0x230c, 0x231f,\r
+0x2322, 0x2328,\r
+0x232b, 0x237b,\r
+0x237d, 0x239a,\r
+0x23b4, 0x23db,\r
+0x23e2, 0x2426,\r
+0x2440, 0x244a,\r
+0x249c, 0x24e9,\r
+0x2500, 0x25b6,\r
+0x25b8, 0x25c0,\r
+0x25c2, 0x25f7,\r
+0x2600, 0x266e,\r
+0x2670, 0x2767,\r
+0x2794, 0x27bf,\r
+0x2800, 0x28ff,\r
+0x2b00, 0x2b2f,\r
+0x2b45, 0x2b46,\r
+0x2b4d, 0x2b73,\r
+0x2b76, 0x2b95,\r
+0x2b98, 0x2bc8,\r
+0x2bca, 0x2bfe,\r
+0x2ce5, 0x2cea,\r
+0x2e80, 0x2e99,\r
+0x2e9b, 0x2ef3,\r
+0x2f00, 0x2fd5,\r
+0x2ff0, 0x2ffb,\r
+0x3004, 0x3004,\r
+0x3012, 0x3013,\r
+0x3020, 0x3020,\r
+0x3036, 0x3037,\r
+0x303e, 0x303f,\r
+0x3190, 0x3191,\r
+0x3196, 0x319f,\r
+0x31c0, 0x31e3,\r
+0x3200, 0x321e,\r
+0x322a, 0x3247,\r
+0x3250, 0x3250,\r
+0x3260, 0x327f,\r
+0x328a, 0x32b0,\r
+0x32c0, 0x32fe,\r
+0x3300, 0x33ff,\r
+0x4dc0, 0x4dff,\r
+0xa490, 0xa4c6,\r
+0xa828, 0xa82b,\r
+0xa836, 0xa837,\r
+0xa839, 0xa839,\r
+0xaa77, 0xaa79,\r
+0xfdfd, 0xfdfd,\r
+0xffe4, 0xffe4,\r
+0xffe8, 0xffe8,\r
+0xffed, 0xffee,\r
+0xfffc, 0xfffd,\r
+0x10137, 0x1013f,\r
+0x10179, 0x10189,\r
+0x1018c, 0x1018e,\r
+0x10190, 0x1019b,\r
+0x101a0, 0x101a0,\r
+0x101d0, 0x101fc,\r
+0x10877, 0x10878,\r
+0x10ac8, 0x10ac8,\r
+0x1173f, 0x1173f,\r
+0x16b3c, 0x16b3f,\r
+0x16b45, 0x16b45,\r
+0x1bc9c, 0x1bc9c,\r
+0x1d000, 0x1d0f5,\r
+0x1d100, 0x1d126,\r
+0x1d129, 0x1d164,\r
+0x1d16a, 0x1d16c,\r
+0x1d183, 0x1d184,\r
+0x1d18c, 0x1d1a9,\r
+0x1d1ae, 0x1d1e8,\r
+0x1d200, 0x1d241,\r
+0x1d245, 0x1d245,\r
+0x1d300, 0x1d356,\r
+0x1d800, 0x1d9ff,\r
+0x1da37, 0x1da3a,\r
+0x1da6d, 0x1da74,\r
+0x1da76, 0x1da83,\r
+0x1da85, 0x1da86,\r
+0x1ecac, 0x1ecac,\r
+0x1f000, 0x1f02b,\r
+0x1f030, 0x1f093,\r
+0x1f0a0, 0x1f0ae,\r
+0x1f0b1, 0x1f0bf,\r
+0x1f0c1, 0x1f0cf,\r
+0x1f0d1, 0x1f0f5,\r
+0x1f110, 0x1f16b,\r
+0x1f170, 0x1f1ac,\r
+0x1f1e6, 0x1f202,\r
+0x1f210, 0x1f23b,\r
+0x1f240, 0x1f248,\r
+0x1f250, 0x1f251,\r
+0x1f260, 0x1f265,\r
+0x1f300, 0x1f3fa,\r
+0x1f400, 0x1f6d4,\r
+0x1f6e0, 0x1f6ec,\r
+0x1f6f0, 0x1f6f9,\r
+0x1f700, 0x1f773,\r
+0x1f780, 0x1f7d8,\r
+0x1f800, 0x1f80b,\r
+0x1f810, 0x1f847,\r
+0x1f850, 0x1f859,\r
+0x1f860, 0x1f887,\r
+0x1f890, 0x1f8ad,\r
+0x1f900, 0x1f90b,\r
+0x1f910, 0x1f93e,\r
+0x1f940, 0x1f970,\r
+0x1f973, 0x1f976,\r
+0x1f97a, 0x1f97a,\r
+0x1f97c, 0x1f9a2,\r
+0x1f9b0, 0x1f9b9,\r
+0x1f9c0, 0x1f9c2,\r
+0x1f9d0, 0x1f9ff,\r
+0x1fa60, 0x1fa6d,\r
+}; /* END of CR_So */\r
+\r
+/* PROPERTY: 'Soft_Dotted': Binary Property */\r
+static const OnigCodePoint\r
+CR_Soft_Dotted[] = { 31,\r
+0x0069, 0x006a,\r
+0x012f, 0x012f,\r
+0x0249, 0x0249,\r
+0x0268, 0x0268,\r
+0x029d, 0x029d,\r
+0x02b2, 0x02b2,\r
+0x03f3, 0x03f3,\r
+0x0456, 0x0456,\r
+0x0458, 0x0458,\r
+0x1d62, 0x1d62,\r
+0x1d96, 0x1d96,\r
+0x1da4, 0x1da4,\r
+0x1da8, 0x1da8,\r
+0x1e2d, 0x1e2d,\r
+0x1ecb, 0x1ecb,\r
+0x2071, 0x2071,\r
+0x2148, 0x2149,\r
+0x2c7c, 0x2c7c,\r
+0x1d422, 0x1d423,\r
+0x1d456, 0x1d457,\r
+0x1d48a, 0x1d48b,\r
+0x1d4be, 0x1d4bf,\r
+0x1d4f2, 0x1d4f3,\r
+0x1d526, 0x1d527,\r
+0x1d55a, 0x1d55b,\r
+0x1d58e, 0x1d58f,\r
+0x1d5c2, 0x1d5c3,\r
+0x1d5f6, 0x1d5f7,\r
+0x1d62a, 0x1d62b,\r
+0x1d65e, 0x1d65f,\r
+0x1d692, 0x1d693,\r
+}; /* END of CR_Soft_Dotted */\r
+\r
+/* PROPERTY: 'Sogdian': Script */\r
+static const OnigCodePoint\r
+CR_Sogdian[] = { 1,\r
+0x10f30, 0x10f59,\r
+}; /* END of CR_Sogdian */\r
+\r
+/* PROPERTY: 'Sora_Sompeng': Script */\r
+static const OnigCodePoint\r
+CR_Sora_Sompeng[] = { 2,\r
+0x110d0, 0x110e8,\r
+0x110f0, 0x110f9,\r
+}; /* END of CR_Sora_Sompeng */\r
+\r
+/* PROPERTY: 'Soyombo': Script */\r
+static const OnigCodePoint\r
+CR_Soyombo[] = { 2,\r
+0x11a50, 0x11a83,\r
+0x11a86, 0x11aa2,\r
+}; /* END of CR_Soyombo */\r
+\r
+/* PROPERTY: 'Sundanese': Script */\r
+static const OnigCodePoint\r
+CR_Sundanese[] = { 2,\r
+0x1b80, 0x1bbf,\r
+0x1cc0, 0x1cc7,\r
+}; /* END of CR_Sundanese */\r
+\r
+/* PROPERTY: 'Syloti_Nagri': Script */\r
+static const OnigCodePoint\r
+CR_Syloti_Nagri[] = { 1,\r
+0xa800, 0xa82b,\r
+}; /* END of CR_Syloti_Nagri */\r
+\r
+/* PROPERTY: 'Syriac': Script */\r
+static const OnigCodePoint\r
+CR_Syriac[] = { 4,\r
+0x0700, 0x070d,\r
+0x070f, 0x074a,\r
+0x074d, 0x074f,\r
+0x0860, 0x086a,\r
+}; /* END of CR_Syriac */\r
+\r
+/* PROPERTY: 'Tagalog': Script */\r
+static const OnigCodePoint\r
+CR_Tagalog[] = { 2,\r
+0x1700, 0x170c,\r
+0x170e, 0x1714,\r
+}; /* END of CR_Tagalog */\r
+\r
+/* PROPERTY: 'Tagbanwa': Script */\r
+static const OnigCodePoint\r
+CR_Tagbanwa[] = { 3,\r
+0x1760, 0x176c,\r
+0x176e, 0x1770,\r
+0x1772, 0x1773,\r
+}; /* END of CR_Tagbanwa */\r
+\r
+/* PROPERTY: 'Tai_Le': Script */\r
+static const OnigCodePoint\r
+CR_Tai_Le[] = { 2,\r
+0x1950, 0x196d,\r
+0x1970, 0x1974,\r
+}; /* END of CR_Tai_Le */\r
+\r
+/* PROPERTY: 'Tai_Tham': Script */\r
+static const OnigCodePoint\r
+CR_Tai_Tham[] = { 5,\r
+0x1a20, 0x1a5e,\r
+0x1a60, 0x1a7c,\r
+0x1a7f, 0x1a89,\r
+0x1a90, 0x1a99,\r
+0x1aa0, 0x1aad,\r
+}; /* END of CR_Tai_Tham */\r
+\r
+/* PROPERTY: 'Tai_Viet': Script */\r
+static const OnigCodePoint\r
+CR_Tai_Viet[] = { 2,\r
+0xaa80, 0xaac2,\r
+0xaadb, 0xaadf,\r
+}; /* END of CR_Tai_Viet */\r
+\r
+/* PROPERTY: 'Takri': Script */\r
+static const OnigCodePoint\r
+CR_Takri[] = { 2,\r
+0x11680, 0x116b7,\r
+0x116c0, 0x116c9,\r
+}; /* END of CR_Takri */\r
+\r
+/* PROPERTY: 'Tamil': Script */\r
+static const OnigCodePoint\r
+CR_Tamil[] = { 16,\r
+0x0b82, 0x0b83,\r
+0x0b85, 0x0b8a,\r
+0x0b8e, 0x0b90,\r
+0x0b92, 0x0b95,\r
+0x0b99, 0x0b9a,\r
+0x0b9c, 0x0b9c,\r
+0x0b9e, 0x0b9f,\r
+0x0ba3, 0x0ba4,\r
+0x0ba8, 0x0baa,\r
+0x0bae, 0x0bb9,\r
+0x0bbe, 0x0bc2,\r
+0x0bc6, 0x0bc8,\r
+0x0bca, 0x0bcd,\r
+0x0bd0, 0x0bd0,\r
+0x0bd7, 0x0bd7,\r
+0x0be6, 0x0bfa,\r
+}; /* END of CR_Tamil */\r
+\r
+/* PROPERTY: 'Tangut': Script */\r
+static const OnigCodePoint\r
+CR_Tangut[] = { 3,\r
+0x16fe0, 0x16fe0,\r
+0x17000, 0x187f1,\r
+0x18800, 0x18af2,\r
+}; /* END of CR_Tangut */\r
+\r
+/* PROPERTY: 'Telugu': Script */\r
+static const OnigCodePoint\r
+CR_Telugu[] = { 12,\r
+0x0c00, 0x0c0c,\r
+0x0c0e, 0x0c10,\r
+0x0c12, 0x0c28,\r
+0x0c2a, 0x0c39,\r
+0x0c3d, 0x0c44,\r
+0x0c46, 0x0c48,\r
+0x0c4a, 0x0c4d,\r
+0x0c55, 0x0c56,\r
+0x0c58, 0x0c5a,\r
+0x0c60, 0x0c63,\r
+0x0c66, 0x0c6f,\r
+0x0c78, 0x0c7f,\r
+}; /* END of CR_Telugu */\r
+\r
+/* PROPERTY: 'Terminal_Punctuation': Binary Property */\r
+static const OnigCodePoint\r
+CR_Terminal_Punctuation[] = { 102,\r
+0x0021, 0x0021,\r
+0x002c, 0x002c,\r
+0x002e, 0x002e,\r
+0x003a, 0x003b,\r
+0x003f, 0x003f,\r
+0x037e, 0x037e,\r
+0x0387, 0x0387,\r
+0x0589, 0x0589,\r
+0x05c3, 0x05c3,\r
+0x060c, 0x060c,\r
+0x061b, 0x061b,\r
+0x061e, 0x061f,\r
+0x06d4, 0x06d4,\r
+0x0700, 0x070a,\r
+0x070c, 0x070c,\r
+0x07f8, 0x07f9,\r
+0x0830, 0x083e,\r
+0x085e, 0x085e,\r
+0x0964, 0x0965,\r
+0x0e5a, 0x0e5b,\r
+0x0f08, 0x0f08,\r
+0x0f0d, 0x0f12,\r
+0x104a, 0x104b,\r
+0x1361, 0x1368,\r
+0x166d, 0x166e,\r
+0x16eb, 0x16ed,\r
+0x1735, 0x1736,\r
+0x17d4, 0x17d6,\r
+0x17da, 0x17da,\r
+0x1802, 0x1805,\r
+0x1808, 0x1809,\r
+0x1944, 0x1945,\r
+0x1aa8, 0x1aab,\r
+0x1b5a, 0x1b5b,\r
+0x1b5d, 0x1b5f,\r
+0x1c3b, 0x1c3f,\r
+0x1c7e, 0x1c7f,\r
+0x203c, 0x203d,\r
+0x2047, 0x2049,\r
+0x2e2e, 0x2e2e,\r
+0x2e3c, 0x2e3c,\r
+0x2e41, 0x2e41,\r
+0x2e4c, 0x2e4c,\r
+0x2e4e, 0x2e4e,\r
+0x3001, 0x3002,\r
+0xa4fe, 0xa4ff,\r
+0xa60d, 0xa60f,\r
+0xa6f3, 0xa6f7,\r
+0xa876, 0xa877,\r
+0xa8ce, 0xa8cf,\r
+0xa92f, 0xa92f,\r
+0xa9c7, 0xa9c9,\r
+0xaa5d, 0xaa5f,\r
+0xaadf, 0xaadf,\r
+0xaaf0, 0xaaf1,\r
+0xabeb, 0xabeb,\r
+0xfe50, 0xfe52,\r
+0xfe54, 0xfe57,\r
+0xff01, 0xff01,\r
+0xff0c, 0xff0c,\r
+0xff0e, 0xff0e,\r
+0xff1a, 0xff1b,\r
+0xff1f, 0xff1f,\r
+0xff61, 0xff61,\r
+0xff64, 0xff64,\r
+0x1039f, 0x1039f,\r
+0x103d0, 0x103d0,\r
+0x10857, 0x10857,\r
+0x1091f, 0x1091f,\r
+0x10a56, 0x10a57,\r
+0x10af0, 0x10af5,\r
+0x10b3a, 0x10b3f,\r
+0x10b99, 0x10b9c,\r
+0x10f55, 0x10f59,\r
+0x11047, 0x1104d,\r
+0x110be, 0x110c1,\r
+0x11141, 0x11143,\r
+0x111c5, 0x111c6,\r
+0x111cd, 0x111cd,\r
+0x111de, 0x111df,\r
+0x11238, 0x1123c,\r
+0x112a9, 0x112a9,\r
+0x1144b, 0x1144d,\r
+0x1145b, 0x1145b,\r
+0x115c2, 0x115c5,\r
+0x115c9, 0x115d7,\r
+0x11641, 0x11642,\r
+0x1173c, 0x1173e,\r
+0x11a42, 0x11a43,\r
+0x11a9b, 0x11a9c,\r
+0x11aa1, 0x11aa2,\r
+0x11c41, 0x11c43,\r
+0x11c71, 0x11c71,\r
+0x11ef7, 0x11ef8,\r
+0x12470, 0x12474,\r
+0x16a6e, 0x16a6f,\r
+0x16af5, 0x16af5,\r
+0x16b37, 0x16b39,\r
+0x16b44, 0x16b44,\r
+0x16e97, 0x16e98,\r
+0x1bc9f, 0x1bc9f,\r
+0x1da87, 0x1da8a,\r
+}; /* END of CR_Terminal_Punctuation */\r
+\r
+/* PROPERTY: 'Thaana': Script */\r
+static const OnigCodePoint\r
+CR_Thaana[] = { 1,\r
+0x0780, 0x07b1,\r
+}; /* END of CR_Thaana */\r
+\r
+/* PROPERTY: 'Thai': Script */\r
+static const OnigCodePoint\r
+CR_Thai[] = { 2,\r
+0x0e01, 0x0e3a,\r
+0x0e40, 0x0e5b,\r
+}; /* END of CR_Thai */\r
+\r
+/* PROPERTY: 'Tibetan': Script */\r
+static const OnigCodePoint\r
+CR_Tibetan[] = { 7,\r
+0x0f00, 0x0f47,\r
+0x0f49, 0x0f6c,\r
+0x0f71, 0x0f97,\r
+0x0f99, 0x0fbc,\r
+0x0fbe, 0x0fcc,\r
+0x0fce, 0x0fd4,\r
+0x0fd9, 0x0fda,\r
+}; /* END of CR_Tibetan */\r
+\r
+/* PROPERTY: 'Tifinagh': Script */\r
+static const OnigCodePoint\r
+CR_Tifinagh[] = { 3,\r
+0x2d30, 0x2d67,\r
+0x2d6f, 0x2d70,\r
+0x2d7f, 0x2d7f,\r
+}; /* END of CR_Tifinagh */\r
+\r
+/* PROPERTY: 'Tirhuta': Script */\r
+static const OnigCodePoint\r
+CR_Tirhuta[] = { 2,\r
+0x11480, 0x114c7,\r
+0x114d0, 0x114d9,\r
+}; /* END of CR_Tirhuta */\r
+\r
+/* PROPERTY: 'Ugaritic': Script */\r
+static const OnigCodePoint\r
+CR_Ugaritic[] = { 2,\r
+0x10380, 0x1039d,\r
+0x1039f, 0x1039f,\r
+}; /* END of CR_Ugaritic */\r
+\r
+/* PROPERTY: 'Unified_Ideograph': Binary Property */\r
+static const OnigCodePoint\r
+CR_Unified_Ideograph[] = { 14,\r
+0x3400, 0x4db5,\r
+0x4e00, 0x9fef,\r
+0xfa0e, 0xfa0f,\r
+0xfa11, 0xfa11,\r
+0xfa13, 0xfa14,\r
+0xfa1f, 0xfa1f,\r
+0xfa21, 0xfa21,\r
+0xfa23, 0xfa24,\r
+0xfa27, 0xfa29,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+}; /* END of CR_Unified_Ideograph */\r
+\r
+/* PROPERTY: 'Unknown': Script */\r
+static const OnigCodePoint\r
+CR_Unknown[] = { 656,\r
+0x0378, 0x0379,\r
+0x0380, 0x0383,\r
+0x038b, 0x038b,\r
+0x038d, 0x038d,\r
+0x03a2, 0x03a2,\r
+0x0530, 0x0530,\r
+0x0557, 0x0558,\r
+0x058b, 0x058c,\r
+0x0590, 0x0590,\r
+0x05c8, 0x05cf,\r
+0x05eb, 0x05ee,\r
+0x05f5, 0x05ff,\r
+0x061d, 0x061d,\r
+0x070e, 0x070e,\r
+0x074b, 0x074c,\r
+0x07b2, 0x07bf,\r
+0x07fb, 0x07fc,\r
+0x082e, 0x082f,\r
+0x083f, 0x083f,\r
+0x085c, 0x085d,\r
+0x085f, 0x085f,\r
+0x086b, 0x089f,\r
+0x08b5, 0x08b5,\r
+0x08be, 0x08d2,\r
+0x0984, 0x0984,\r
+0x098d, 0x098e,\r
+0x0991, 0x0992,\r
+0x09a9, 0x09a9,\r
+0x09b1, 0x09b1,\r
+0x09b3, 0x09b5,\r
+0x09ba, 0x09bb,\r
+0x09c5, 0x09c6,\r
+0x09c9, 0x09ca,\r
+0x09cf, 0x09d6,\r
+0x09d8, 0x09db,\r
+0x09de, 0x09de,\r
+0x09e4, 0x09e5,\r
+0x09ff, 0x0a00,\r
+0x0a04, 0x0a04,\r
+0x0a0b, 0x0a0e,\r
+0x0a11, 0x0a12,\r
+0x0a29, 0x0a29,\r
+0x0a31, 0x0a31,\r
+0x0a34, 0x0a34,\r
+0x0a37, 0x0a37,\r
+0x0a3a, 0x0a3b,\r
+0x0a3d, 0x0a3d,\r
+0x0a43, 0x0a46,\r
+0x0a49, 0x0a4a,\r
+0x0a4e, 0x0a50,\r
+0x0a52, 0x0a58,\r
+0x0a5d, 0x0a5d,\r
+0x0a5f, 0x0a65,\r
+0x0a77, 0x0a80,\r
+0x0a84, 0x0a84,\r
+0x0a8e, 0x0a8e,\r
+0x0a92, 0x0a92,\r
+0x0aa9, 0x0aa9,\r
+0x0ab1, 0x0ab1,\r
+0x0ab4, 0x0ab4,\r
+0x0aba, 0x0abb,\r
+0x0ac6, 0x0ac6,\r
+0x0aca, 0x0aca,\r
+0x0ace, 0x0acf,\r
+0x0ad1, 0x0adf,\r
+0x0ae4, 0x0ae5,\r
+0x0af2, 0x0af8,\r
+0x0b00, 0x0b00,\r
+0x0b04, 0x0b04,\r
+0x0b0d, 0x0b0e,\r
+0x0b11, 0x0b12,\r
+0x0b29, 0x0b29,\r
+0x0b31, 0x0b31,\r
+0x0b34, 0x0b34,\r
+0x0b3a, 0x0b3b,\r
+0x0b45, 0x0b46,\r
+0x0b49, 0x0b4a,\r
+0x0b4e, 0x0b55,\r
+0x0b58, 0x0b5b,\r
+0x0b5e, 0x0b5e,\r
+0x0b64, 0x0b65,\r
+0x0b78, 0x0b81,\r
+0x0b84, 0x0b84,\r
+0x0b8b, 0x0b8d,\r
+0x0b91, 0x0b91,\r
+0x0b96, 0x0b98,\r
+0x0b9b, 0x0b9b,\r
+0x0b9d, 0x0b9d,\r
+0x0ba0, 0x0ba2,\r
+0x0ba5, 0x0ba7,\r
+0x0bab, 0x0bad,\r
+0x0bba, 0x0bbd,\r
+0x0bc3, 0x0bc5,\r
+0x0bc9, 0x0bc9,\r
+0x0bce, 0x0bcf,\r
+0x0bd1, 0x0bd6,\r
+0x0bd8, 0x0be5,\r
+0x0bfb, 0x0bff,\r
+0x0c0d, 0x0c0d,\r
+0x0c11, 0x0c11,\r
+0x0c29, 0x0c29,\r
+0x0c3a, 0x0c3c,\r
+0x0c45, 0x0c45,\r
+0x0c49, 0x0c49,\r
+0x0c4e, 0x0c54,\r
+0x0c57, 0x0c57,\r
+0x0c5b, 0x0c5f,\r
+0x0c64, 0x0c65,\r
+0x0c70, 0x0c77,\r
+0x0c8d, 0x0c8d,\r
+0x0c91, 0x0c91,\r
+0x0ca9, 0x0ca9,\r
+0x0cb4, 0x0cb4,\r
+0x0cba, 0x0cbb,\r
+0x0cc5, 0x0cc5,\r
+0x0cc9, 0x0cc9,\r
+0x0cce, 0x0cd4,\r
+0x0cd7, 0x0cdd,\r
+0x0cdf, 0x0cdf,\r
+0x0ce4, 0x0ce5,\r
+0x0cf0, 0x0cf0,\r
+0x0cf3, 0x0cff,\r
+0x0d04, 0x0d04,\r
+0x0d0d, 0x0d0d,\r
+0x0d11, 0x0d11,\r
+0x0d45, 0x0d45,\r
+0x0d49, 0x0d49,\r
+0x0d50, 0x0d53,\r
+0x0d64, 0x0d65,\r
+0x0d80, 0x0d81,\r
+0x0d84, 0x0d84,\r
+0x0d97, 0x0d99,\r
+0x0db2, 0x0db2,\r
+0x0dbc, 0x0dbc,\r
+0x0dbe, 0x0dbf,\r
+0x0dc7, 0x0dc9,\r
+0x0dcb, 0x0dce,\r
+0x0dd5, 0x0dd5,\r
+0x0dd7, 0x0dd7,\r
+0x0de0, 0x0de5,\r
+0x0df0, 0x0df1,\r
+0x0df5, 0x0e00,\r
+0x0e3b, 0x0e3e,\r
+0x0e5c, 0x0e80,\r
+0x0e83, 0x0e83,\r
+0x0e85, 0x0e86,\r
+0x0e89, 0x0e89,\r
+0x0e8b, 0x0e8c,\r
+0x0e8e, 0x0e93,\r
+0x0e98, 0x0e98,\r
+0x0ea0, 0x0ea0,\r
+0x0ea4, 0x0ea4,\r
+0x0ea6, 0x0ea6,\r
+0x0ea8, 0x0ea9,\r
+0x0eac, 0x0eac,\r
+0x0eba, 0x0eba,\r
+0x0ebe, 0x0ebf,\r
+0x0ec5, 0x0ec5,\r
+0x0ec7, 0x0ec7,\r
+0x0ece, 0x0ecf,\r
+0x0eda, 0x0edb,\r
+0x0ee0, 0x0eff,\r
+0x0f48, 0x0f48,\r
+0x0f6d, 0x0f70,\r
+0x0f98, 0x0f98,\r
+0x0fbd, 0x0fbd,\r
+0x0fcd, 0x0fcd,\r
+0x0fdb, 0x0fff,\r
+0x10c6, 0x10c6,\r
+0x10c8, 0x10cc,\r
+0x10ce, 0x10cf,\r
+0x1249, 0x1249,\r
+0x124e, 0x124f,\r
+0x1257, 0x1257,\r
+0x1259, 0x1259,\r
+0x125e, 0x125f,\r
+0x1289, 0x1289,\r
+0x128e, 0x128f,\r
+0x12b1, 0x12b1,\r
+0x12b6, 0x12b7,\r
+0x12bf, 0x12bf,\r
+0x12c1, 0x12c1,\r
+0x12c6, 0x12c7,\r
+0x12d7, 0x12d7,\r
+0x1311, 0x1311,\r
+0x1316, 0x1317,\r
+0x135b, 0x135c,\r
+0x137d, 0x137f,\r
+0x139a, 0x139f,\r
+0x13f6, 0x13f7,\r
+0x13fe, 0x13ff,\r
+0x169d, 0x169f,\r
+0x16f9, 0x16ff,\r
+0x170d, 0x170d,\r
+0x1715, 0x171f,\r
+0x1737, 0x173f,\r
+0x1754, 0x175f,\r
+0x176d, 0x176d,\r
+0x1771, 0x1771,\r
+0x1774, 0x177f,\r
+0x17de, 0x17df,\r
+0x17ea, 0x17ef,\r
+0x17fa, 0x17ff,\r
+0x180f, 0x180f,\r
+0x181a, 0x181f,\r
+0x1879, 0x187f,\r
+0x18ab, 0x18af,\r
+0x18f6, 0x18ff,\r
+0x191f, 0x191f,\r
+0x192c, 0x192f,\r
+0x193c, 0x193f,\r
+0x1941, 0x1943,\r
+0x196e, 0x196f,\r
+0x1975, 0x197f,\r
+0x19ac, 0x19af,\r
+0x19ca, 0x19cf,\r
+0x19db, 0x19dd,\r
+0x1a1c, 0x1a1d,\r
+0x1a5f, 0x1a5f,\r
+0x1a7d, 0x1a7e,\r
+0x1a8a, 0x1a8f,\r
+0x1a9a, 0x1a9f,\r
+0x1aae, 0x1aaf,\r
+0x1abf, 0x1aff,\r
+0x1b4c, 0x1b4f,\r
+0x1b7d, 0x1b7f,\r
+0x1bf4, 0x1bfb,\r
+0x1c38, 0x1c3a,\r
+0x1c4a, 0x1c4c,\r
+0x1c89, 0x1c8f,\r
+0x1cbb, 0x1cbc,\r
+0x1cc8, 0x1ccf,\r
+0x1cfa, 0x1cff,\r
+0x1dfa, 0x1dfa,\r
+0x1f16, 0x1f17,\r
+0x1f1e, 0x1f1f,\r
+0x1f46, 0x1f47,\r
+0x1f4e, 0x1f4f,\r
+0x1f58, 0x1f58,\r
+0x1f5a, 0x1f5a,\r
+0x1f5c, 0x1f5c,\r
+0x1f5e, 0x1f5e,\r
+0x1f7e, 0x1f7f,\r
+0x1fb5, 0x1fb5,\r
+0x1fc5, 0x1fc5,\r
+0x1fd4, 0x1fd5,\r
+0x1fdc, 0x1fdc,\r
+0x1ff0, 0x1ff1,\r
+0x1ff5, 0x1ff5,\r
+0x1fff, 0x1fff,\r
+0x2065, 0x2065,\r
+0x2072, 0x2073,\r
+0x208f, 0x208f,\r
+0x209d, 0x209f,\r
+0x20c0, 0x20cf,\r
+0x20f1, 0x20ff,\r
+0x218c, 0x218f,\r
+0x2427, 0x243f,\r
+0x244b, 0x245f,\r
+0x2b74, 0x2b75,\r
+0x2b96, 0x2b97,\r
+0x2bc9, 0x2bc9,\r
+0x2bff, 0x2bff,\r
+0x2c2f, 0x2c2f,\r
+0x2c5f, 0x2c5f,\r
+0x2cf4, 0x2cf8,\r
+0x2d26, 0x2d26,\r
+0x2d28, 0x2d2c,\r
+0x2d2e, 0x2d2f,\r
+0x2d68, 0x2d6e,\r
+0x2d71, 0x2d7e,\r
+0x2d97, 0x2d9f,\r
+0x2da7, 0x2da7,\r
+0x2daf, 0x2daf,\r
+0x2db7, 0x2db7,\r
+0x2dbf, 0x2dbf,\r
+0x2dc7, 0x2dc7,\r
+0x2dcf, 0x2dcf,\r
+0x2dd7, 0x2dd7,\r
+0x2ddf, 0x2ddf,\r
+0x2e4f, 0x2e7f,\r
+0x2e9a, 0x2e9a,\r
+0x2ef4, 0x2eff,\r
+0x2fd6, 0x2fef,\r
+0x2ffc, 0x2fff,\r
+0x3040, 0x3040,\r
+0x3097, 0x3098,\r
+0x3100, 0x3104,\r
+0x3130, 0x3130,\r
+0x318f, 0x318f,\r
+0x31bb, 0x31bf,\r
+0x31e4, 0x31ef,\r
+0x321f, 0x321f,\r
+0x32ff, 0x32ff,\r
+0x4db6, 0x4dbf,\r
+0x9ff0, 0x9fff,\r
+0xa48d, 0xa48f,\r
+0xa4c7, 0xa4cf,\r
+0xa62c, 0xa63f,\r
+0xa6f8, 0xa6ff,\r
+0xa7ba, 0xa7f6,\r
+0xa82c, 0xa82f,\r
+0xa83a, 0xa83f,\r
+0xa878, 0xa87f,\r
+0xa8c6, 0xa8cd,\r
+0xa8da, 0xa8df,\r
+0xa954, 0xa95e,\r
+0xa97d, 0xa97f,\r
+0xa9ce, 0xa9ce,\r
+0xa9da, 0xa9dd,\r
+0xa9ff, 0xa9ff,\r
+0xaa37, 0xaa3f,\r
+0xaa4e, 0xaa4f,\r
+0xaa5a, 0xaa5b,\r
+0xaac3, 0xaada,\r
+0xaaf7, 0xab00,\r
+0xab07, 0xab08,\r
+0xab0f, 0xab10,\r
+0xab17, 0xab1f,\r
+0xab27, 0xab27,\r
+0xab2f, 0xab2f,\r
+0xab66, 0xab6f,\r
+0xabee, 0xabef,\r
+0xabfa, 0xabff,\r
+0xd7a4, 0xd7af,\r
+0xd7c7, 0xd7ca,\r
+0xd7fc, 0xf8ff,\r
+0xfa6e, 0xfa6f,\r
+0xfada, 0xfaff,\r
+0xfb07, 0xfb12,\r
+0xfb18, 0xfb1c,\r
+0xfb37, 0xfb37,\r
+0xfb3d, 0xfb3d,\r
+0xfb3f, 0xfb3f,\r
+0xfb42, 0xfb42,\r
+0xfb45, 0xfb45,\r
+0xfbc2, 0xfbd2,\r
+0xfd40, 0xfd4f,\r
+0xfd90, 0xfd91,\r
+0xfdc8, 0xfdef,\r
+0xfdfe, 0xfdff,\r
+0xfe1a, 0xfe1f,\r
+0xfe53, 0xfe53,\r
+0xfe67, 0xfe67,\r
+0xfe6c, 0xfe6f,\r
+0xfe75, 0xfe75,\r
+0xfefd, 0xfefe,\r
+0xff00, 0xff00,\r
+0xffbf, 0xffc1,\r
+0xffc8, 0xffc9,\r
+0xffd0, 0xffd1,\r
+0xffd8, 0xffd9,\r
+0xffdd, 0xffdf,\r
+0xffe7, 0xffe7,\r
+0xffef, 0xfff8,\r
+0xfffe, 0xffff,\r
+0x1000c, 0x1000c,\r
+0x10027, 0x10027,\r
+0x1003b, 0x1003b,\r
+0x1003e, 0x1003e,\r
+0x1004e, 0x1004f,\r
+0x1005e, 0x1007f,\r
+0x100fb, 0x100ff,\r
+0x10103, 0x10106,\r
+0x10134, 0x10136,\r
+0x1018f, 0x1018f,\r
+0x1019c, 0x1019f,\r
+0x101a1, 0x101cf,\r
+0x101fe, 0x1027f,\r
+0x1029d, 0x1029f,\r
+0x102d1, 0x102df,\r
+0x102fc, 0x102ff,\r
+0x10324, 0x1032c,\r
+0x1034b, 0x1034f,\r
+0x1037b, 0x1037f,\r
+0x1039e, 0x1039e,\r
+0x103c4, 0x103c7,\r
+0x103d6, 0x103ff,\r
+0x1049e, 0x1049f,\r
+0x104aa, 0x104af,\r
+0x104d4, 0x104d7,\r
+0x104fc, 0x104ff,\r
+0x10528, 0x1052f,\r
+0x10564, 0x1056e,\r
+0x10570, 0x105ff,\r
+0x10737, 0x1073f,\r
+0x10756, 0x1075f,\r
+0x10768, 0x107ff,\r
+0x10806, 0x10807,\r
+0x10809, 0x10809,\r
+0x10836, 0x10836,\r
+0x10839, 0x1083b,\r
+0x1083d, 0x1083e,\r
+0x10856, 0x10856,\r
+0x1089f, 0x108a6,\r
+0x108b0, 0x108df,\r
+0x108f3, 0x108f3,\r
+0x108f6, 0x108fa,\r
+0x1091c, 0x1091e,\r
+0x1093a, 0x1093e,\r
+0x10940, 0x1097f,\r
+0x109b8, 0x109bb,\r
+0x109d0, 0x109d1,\r
+0x10a04, 0x10a04,\r
+0x10a07, 0x10a0b,\r
+0x10a14, 0x10a14,\r
+0x10a18, 0x10a18,\r
+0x10a36, 0x10a37,\r
+0x10a3b, 0x10a3e,\r
+0x10a49, 0x10a4f,\r
+0x10a59, 0x10a5f,\r
+0x10aa0, 0x10abf,\r
+0x10ae7, 0x10aea,\r
+0x10af7, 0x10aff,\r
+0x10b36, 0x10b38,\r
+0x10b56, 0x10b57,\r
+0x10b73, 0x10b77,\r
+0x10b92, 0x10b98,\r
+0x10b9d, 0x10ba8,\r
+0x10bb0, 0x10bff,\r
+0x10c49, 0x10c7f,\r
+0x10cb3, 0x10cbf,\r
+0x10cf3, 0x10cf9,\r
+0x10d28, 0x10d2f,\r
+0x10d3a, 0x10e5f,\r
+0x10e7f, 0x10eff,\r
+0x10f28, 0x10f2f,\r
+0x10f5a, 0x10fff,\r
+0x1104e, 0x11051,\r
+0x11070, 0x1107e,\r
+0x110c2, 0x110cc,\r
+0x110ce, 0x110cf,\r
+0x110e9, 0x110ef,\r
+0x110fa, 0x110ff,\r
+0x11135, 0x11135,\r
+0x11147, 0x1114f,\r
+0x11177, 0x1117f,\r
+0x111ce, 0x111cf,\r
+0x111e0, 0x111e0,\r
+0x111f5, 0x111ff,\r
+0x11212, 0x11212,\r
+0x1123f, 0x1127f,\r
+0x11287, 0x11287,\r
+0x11289, 0x11289,\r
+0x1128e, 0x1128e,\r
+0x1129e, 0x1129e,\r
+0x112aa, 0x112af,\r
+0x112eb, 0x112ef,\r
+0x112fa, 0x112ff,\r
+0x11304, 0x11304,\r
+0x1130d, 0x1130e,\r
+0x11311, 0x11312,\r
+0x11329, 0x11329,\r
+0x11331, 0x11331,\r
+0x11334, 0x11334,\r
+0x1133a, 0x1133a,\r
+0x11345, 0x11346,\r
+0x11349, 0x1134a,\r
+0x1134e, 0x1134f,\r
+0x11351, 0x11356,\r
+0x11358, 0x1135c,\r
+0x11364, 0x11365,\r
+0x1136d, 0x1136f,\r
+0x11375, 0x113ff,\r
+0x1145a, 0x1145a,\r
+0x1145c, 0x1145c,\r
+0x1145f, 0x1147f,\r
+0x114c8, 0x114cf,\r
+0x114da, 0x1157f,\r
+0x115b6, 0x115b7,\r
+0x115de, 0x115ff,\r
+0x11645, 0x1164f,\r
+0x1165a, 0x1165f,\r
+0x1166d, 0x1167f,\r
+0x116b8, 0x116bf,\r
+0x116ca, 0x116ff,\r
+0x1171b, 0x1171c,\r
+0x1172c, 0x1172f,\r
+0x11740, 0x117ff,\r
+0x1183c, 0x1189f,\r
+0x118f3, 0x118fe,\r
+0x11900, 0x119ff,\r
+0x11a48, 0x11a4f,\r
+0x11a84, 0x11a85,\r
+0x11aa3, 0x11abf,\r
+0x11af9, 0x11bff,\r
+0x11c09, 0x11c09,\r
+0x11c37, 0x11c37,\r
+0x11c46, 0x11c4f,\r
+0x11c6d, 0x11c6f,\r
+0x11c90, 0x11c91,\r
+0x11ca8, 0x11ca8,\r
+0x11cb7, 0x11cff,\r
+0x11d07, 0x11d07,\r
+0x11d0a, 0x11d0a,\r
+0x11d37, 0x11d39,\r
+0x11d3b, 0x11d3b,\r
+0x11d3e, 0x11d3e,\r
+0x11d48, 0x11d4f,\r
+0x11d5a, 0x11d5f,\r
+0x11d66, 0x11d66,\r
+0x11d69, 0x11d69,\r
+0x11d8f, 0x11d8f,\r
+0x11d92, 0x11d92,\r
+0x11d99, 0x11d9f,\r
+0x11daa, 0x11edf,\r
+0x11ef9, 0x11fff,\r
+0x1239a, 0x123ff,\r
+0x1246f, 0x1246f,\r
+0x12475, 0x1247f,\r
+0x12544, 0x12fff,\r
+0x1342f, 0x143ff,\r
+0x14647, 0x167ff,\r
+0x16a39, 0x16a3f,\r
+0x16a5f, 0x16a5f,\r
+0x16a6a, 0x16a6d,\r
+0x16a70, 0x16acf,\r
+0x16aee, 0x16aef,\r
+0x16af6, 0x16aff,\r
+0x16b46, 0x16b4f,\r
+0x16b5a, 0x16b5a,\r
+0x16b62, 0x16b62,\r
+0x16b78, 0x16b7c,\r
+0x16b90, 0x16e3f,\r
+0x16e9b, 0x16eff,\r
+0x16f45, 0x16f4f,\r
+0x16f7f, 0x16f8e,\r
+0x16fa0, 0x16fdf,\r
+0x16fe2, 0x16fff,\r
+0x187f2, 0x187ff,\r
+0x18af3, 0x1afff,\r
+0x1b11f, 0x1b16f,\r
+0x1b2fc, 0x1bbff,\r
+0x1bc6b, 0x1bc6f,\r
+0x1bc7d, 0x1bc7f,\r
+0x1bc89, 0x1bc8f,\r
+0x1bc9a, 0x1bc9b,\r
+0x1bca4, 0x1cfff,\r
+0x1d0f6, 0x1d0ff,\r
+0x1d127, 0x1d128,\r
+0x1d1e9, 0x1d1ff,\r
+0x1d246, 0x1d2df,\r
+0x1d2f4, 0x1d2ff,\r
+0x1d357, 0x1d35f,\r
+0x1d379, 0x1d3ff,\r
+0x1d455, 0x1d455,\r
+0x1d49d, 0x1d49d,\r
+0x1d4a0, 0x1d4a1,\r
+0x1d4a3, 0x1d4a4,\r
+0x1d4a7, 0x1d4a8,\r
+0x1d4ad, 0x1d4ad,\r
+0x1d4ba, 0x1d4ba,\r
+0x1d4bc, 0x1d4bc,\r
+0x1d4c4, 0x1d4c4,\r
+0x1d506, 0x1d506,\r
+0x1d50b, 0x1d50c,\r
+0x1d515, 0x1d515,\r
+0x1d51d, 0x1d51d,\r
+0x1d53a, 0x1d53a,\r
+0x1d53f, 0x1d53f,\r
+0x1d545, 0x1d545,\r
+0x1d547, 0x1d549,\r
+0x1d551, 0x1d551,\r
+0x1d6a6, 0x1d6a7,\r
+0x1d7cc, 0x1d7cd,\r
+0x1da8c, 0x1da9a,\r
+0x1daa0, 0x1daa0,\r
+0x1dab0, 0x1dfff,\r
+0x1e007, 0x1e007,\r
+0x1e019, 0x1e01a,\r
+0x1e022, 0x1e022,\r
+0x1e025, 0x1e025,\r
+0x1e02b, 0x1e7ff,\r
+0x1e8c5, 0x1e8c6,\r
+0x1e8d7, 0x1e8ff,\r
+0x1e94b, 0x1e94f,\r
+0x1e95a, 0x1e95d,\r
+0x1e960, 0x1ec70,\r
+0x1ecb5, 0x1edff,\r
+0x1ee04, 0x1ee04,\r
+0x1ee20, 0x1ee20,\r
+0x1ee23, 0x1ee23,\r
+0x1ee25, 0x1ee26,\r
+0x1ee28, 0x1ee28,\r
+0x1ee33, 0x1ee33,\r
+0x1ee38, 0x1ee38,\r
+0x1ee3a, 0x1ee3a,\r
+0x1ee3c, 0x1ee41,\r
+0x1ee43, 0x1ee46,\r
+0x1ee48, 0x1ee48,\r
+0x1ee4a, 0x1ee4a,\r
+0x1ee4c, 0x1ee4c,\r
+0x1ee50, 0x1ee50,\r
+0x1ee53, 0x1ee53,\r
+0x1ee55, 0x1ee56,\r
+0x1ee58, 0x1ee58,\r
+0x1ee5a, 0x1ee5a,\r
+0x1ee5c, 0x1ee5c,\r
+0x1ee5e, 0x1ee5e,\r
+0x1ee60, 0x1ee60,\r
+0x1ee63, 0x1ee63,\r
+0x1ee65, 0x1ee66,\r
+0x1ee6b, 0x1ee6b,\r
+0x1ee73, 0x1ee73,\r
+0x1ee78, 0x1ee78,\r
+0x1ee7d, 0x1ee7d,\r
+0x1ee7f, 0x1ee7f,\r
+0x1ee8a, 0x1ee8a,\r
+0x1ee9c, 0x1eea0,\r
+0x1eea4, 0x1eea4,\r
+0x1eeaa, 0x1eeaa,\r
+0x1eebc, 0x1eeef,\r
+0x1eef2, 0x1efff,\r
+0x1f02c, 0x1f02f,\r
+0x1f094, 0x1f09f,\r
+0x1f0af, 0x1f0b0,\r
+0x1f0c0, 0x1f0c0,\r
+0x1f0d0, 0x1f0d0,\r
+0x1f0f6, 0x1f0ff,\r
+0x1f10d, 0x1f10f,\r
+0x1f16c, 0x1f16f,\r
+0x1f1ad, 0x1f1e5,\r
+0x1f203, 0x1f20f,\r
+0x1f23c, 0x1f23f,\r
+0x1f249, 0x1f24f,\r
+0x1f252, 0x1f25f,\r
+0x1f266, 0x1f2ff,\r
+0x1f6d5, 0x1f6df,\r
+0x1f6ed, 0x1f6ef,\r
+0x1f6fa, 0x1f6ff,\r
+0x1f774, 0x1f77f,\r
+0x1f7d9, 0x1f7ff,\r
+0x1f80c, 0x1f80f,\r
+0x1f848, 0x1f84f,\r
+0x1f85a, 0x1f85f,\r
+0x1f888, 0x1f88f,\r
+0x1f8ae, 0x1f8ff,\r
+0x1f90c, 0x1f90f,\r
+0x1f93f, 0x1f93f,\r
+0x1f971, 0x1f972,\r
+0x1f977, 0x1f979,\r
+0x1f97b, 0x1f97b,\r
+0x1f9a3, 0x1f9af,\r
+0x1f9ba, 0x1f9bf,\r
+0x1f9c3, 0x1f9cf,\r
+0x1fa00, 0x1fa5f,\r
+0x1fa6e, 0x1ffff,\r
+0x2a6d7, 0x2a6ff,\r
+0x2b735, 0x2b73f,\r
+0x2b81e, 0x2b81f,\r
+0x2cea2, 0x2ceaf,\r
+0x2ebe1, 0x2f7ff,\r
+0x2fa1e, 0xe0000,\r
+0xe0002, 0xe001f,\r
+0xe0080, 0xe00ff,\r
+0xe01f0, 0x10ffff,\r
+}; /* END of CR_Unknown */\r
+\r
+/* PROPERTY: 'Uppercase': Derived Property */\r
+#define CR_Uppercase CR_Upper\r
+\r
+/* PROPERTY: 'Vai': Script */\r
+static const OnigCodePoint\r
+CR_Vai[] = { 1,\r
+0xa500, 0xa62b,\r
+}; /* END of CR_Vai */\r
+\r
+/* PROPERTY: 'Variation_Selector': Binary Property */\r
+static const OnigCodePoint\r
+CR_Variation_Selector[] = { 3,\r
+0x180b, 0x180d,\r
+0xfe00, 0xfe0f,\r
+0xe0100, 0xe01ef,\r
+}; /* END of CR_Variation_Selector */\r
+\r
+/* PROPERTY: 'Warang_Citi': Script */\r
+static const OnigCodePoint\r
+CR_Warang_Citi[] = { 2,\r
+0x118a0, 0x118f2,\r
+0x118ff, 0x118ff,\r
+}; /* END of CR_Warang_Citi */\r
+\r
+/* PROPERTY: 'White_Space': Binary Property */\r
+#define CR_White_Space CR_Space\r
+\r
+/* PROPERTY: 'XID_Continue': Derived Property */\r
+static const OnigCodePoint\r
+CR_XID_Continue[] = { 714,\r
+0x0030, 0x0039,\r
+0x0041, 0x005a,\r
+0x005f, 0x005f,\r
+0x0061, 0x007a,\r
+0x00aa, 0x00aa,\r
+0x00b5, 0x00b5,\r
+0x00b7, 0x00b7,\r
+0x00ba, 0x00ba,\r
+0x00c0, 0x00d6,\r
+0x00d8, 0x00f6,\r
+0x00f8, 0x02c1,\r
+0x02c6, 0x02d1,\r
+0x02e0, 0x02e4,\r
+0x02ec, 0x02ec,\r
+0x02ee, 0x02ee,\r
+0x0300, 0x0374,\r
+0x0376, 0x0377,\r
+0x037b, 0x037d,\r
+0x037f, 0x037f,\r
+0x0386, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x03f5,\r
+0x03f7, 0x0481,\r
+0x0483, 0x0487,\r
+0x048a, 0x052f,\r
+0x0531, 0x0556,\r
+0x0559, 0x0559,\r
+0x0560, 0x0588,\r
+0x0591, 0x05bd,\r
+0x05bf, 0x05bf,\r
+0x05c1, 0x05c2,\r
+0x05c4, 0x05c5,\r
+0x05c7, 0x05c7,\r
+0x05d0, 0x05ea,\r
+0x05ef, 0x05f2,\r
+0x0610, 0x061a,\r
+0x0620, 0x0669,\r
+0x066e, 0x06d3,\r
+0x06d5, 0x06dc,\r
+0x06df, 0x06e8,\r
+0x06ea, 0x06fc,\r
+0x06ff, 0x06ff,\r
+0x0710, 0x074a,\r
+0x074d, 0x07b1,\r
+0x07c0, 0x07f5,\r
+0x07fa, 0x07fa,\r
+0x07fd, 0x07fd,\r
+0x0800, 0x082d,\r
+0x0840, 0x085b,\r
+0x0860, 0x086a,\r
+0x08a0, 0x08b4,\r
+0x08b6, 0x08bd,\r
+0x08d3, 0x08e1,\r
+0x08e3, 0x0963,\r
+0x0966, 0x096f,\r
+0x0971, 0x0983,\r
+0x0985, 0x098c,\r
+0x098f, 0x0990,\r
+0x0993, 0x09a8,\r
+0x09aa, 0x09b0,\r
+0x09b2, 0x09b2,\r
+0x09b6, 0x09b9,\r
+0x09bc, 0x09c4,\r
+0x09c7, 0x09c8,\r
+0x09cb, 0x09ce,\r
+0x09d7, 0x09d7,\r
+0x09dc, 0x09dd,\r
+0x09df, 0x09e3,\r
+0x09e6, 0x09f1,\r
+0x09fc, 0x09fc,\r
+0x09fe, 0x09fe,\r
+0x0a01, 0x0a03,\r
+0x0a05, 0x0a0a,\r
+0x0a0f, 0x0a10,\r
+0x0a13, 0x0a28,\r
+0x0a2a, 0x0a30,\r
+0x0a32, 0x0a33,\r
+0x0a35, 0x0a36,\r
+0x0a38, 0x0a39,\r
+0x0a3c, 0x0a3c,\r
+0x0a3e, 0x0a42,\r
+0x0a47, 0x0a48,\r
+0x0a4b, 0x0a4d,\r
+0x0a51, 0x0a51,\r
+0x0a59, 0x0a5c,\r
+0x0a5e, 0x0a5e,\r
+0x0a66, 0x0a75,\r
+0x0a81, 0x0a83,\r
+0x0a85, 0x0a8d,\r
+0x0a8f, 0x0a91,\r
+0x0a93, 0x0aa8,\r
+0x0aaa, 0x0ab0,\r
+0x0ab2, 0x0ab3,\r
+0x0ab5, 0x0ab9,\r
+0x0abc, 0x0ac5,\r
+0x0ac7, 0x0ac9,\r
+0x0acb, 0x0acd,\r
+0x0ad0, 0x0ad0,\r
+0x0ae0, 0x0ae3,\r
+0x0ae6, 0x0aef,\r
+0x0af9, 0x0aff,\r
+0x0b01, 0x0b03,\r
+0x0b05, 0x0b0c,\r
+0x0b0f, 0x0b10,\r
+0x0b13, 0x0b28,\r
+0x0b2a, 0x0b30,\r
+0x0b32, 0x0b33,\r
+0x0b35, 0x0b39,\r
+0x0b3c, 0x0b44,\r
+0x0b47, 0x0b48,\r
+0x0b4b, 0x0b4d,\r
+0x0b56, 0x0b57,\r
+0x0b5c, 0x0b5d,\r
+0x0b5f, 0x0b63,\r
+0x0b66, 0x0b6f,\r
+0x0b71, 0x0b71,\r
+0x0b82, 0x0b83,\r
+0x0b85, 0x0b8a,\r
+0x0b8e, 0x0b90,\r
+0x0b92, 0x0b95,\r
+0x0b99, 0x0b9a,\r
+0x0b9c, 0x0b9c,\r
+0x0b9e, 0x0b9f,\r
+0x0ba3, 0x0ba4,\r
+0x0ba8, 0x0baa,\r
+0x0bae, 0x0bb9,\r
+0x0bbe, 0x0bc2,\r
+0x0bc6, 0x0bc8,\r
+0x0bca, 0x0bcd,\r
+0x0bd0, 0x0bd0,\r
+0x0bd7, 0x0bd7,\r
+0x0be6, 0x0bef,\r
+0x0c00, 0x0c0c,\r
+0x0c0e, 0x0c10,\r
+0x0c12, 0x0c28,\r
+0x0c2a, 0x0c39,\r
+0x0c3d, 0x0c44,\r
+0x0c46, 0x0c48,\r
+0x0c4a, 0x0c4d,\r
+0x0c55, 0x0c56,\r
+0x0c58, 0x0c5a,\r
+0x0c60, 0x0c63,\r
+0x0c66, 0x0c6f,\r
+0x0c80, 0x0c83,\r
+0x0c85, 0x0c8c,\r
+0x0c8e, 0x0c90,\r
+0x0c92, 0x0ca8,\r
+0x0caa, 0x0cb3,\r
+0x0cb5, 0x0cb9,\r
+0x0cbc, 0x0cc4,\r
+0x0cc6, 0x0cc8,\r
+0x0cca, 0x0ccd,\r
+0x0cd5, 0x0cd6,\r
+0x0cde, 0x0cde,\r
+0x0ce0, 0x0ce3,\r
+0x0ce6, 0x0cef,\r
+0x0cf1, 0x0cf2,\r
+0x0d00, 0x0d03,\r
+0x0d05, 0x0d0c,\r
+0x0d0e, 0x0d10,\r
+0x0d12, 0x0d44,\r
+0x0d46, 0x0d48,\r
+0x0d4a, 0x0d4e,\r
+0x0d54, 0x0d57,\r
+0x0d5f, 0x0d63,\r
+0x0d66, 0x0d6f,\r
+0x0d7a, 0x0d7f,\r
+0x0d82, 0x0d83,\r
+0x0d85, 0x0d96,\r
+0x0d9a, 0x0db1,\r
+0x0db3, 0x0dbb,\r
+0x0dbd, 0x0dbd,\r
+0x0dc0, 0x0dc6,\r
+0x0dca, 0x0dca,\r
+0x0dcf, 0x0dd4,\r
+0x0dd6, 0x0dd6,\r
+0x0dd8, 0x0ddf,\r
+0x0de6, 0x0def,\r
+0x0df2, 0x0df3,\r
+0x0e01, 0x0e3a,\r
+0x0e40, 0x0e4e,\r
+0x0e50, 0x0e59,\r
+0x0e81, 0x0e82,\r
+0x0e84, 0x0e84,\r
+0x0e87, 0x0e88,\r
+0x0e8a, 0x0e8a,\r
+0x0e8d, 0x0e8d,\r
+0x0e94, 0x0e97,\r
+0x0e99, 0x0e9f,\r
+0x0ea1, 0x0ea3,\r
+0x0ea5, 0x0ea5,\r
+0x0ea7, 0x0ea7,\r
+0x0eaa, 0x0eab,\r
+0x0ead, 0x0eb9,\r
+0x0ebb, 0x0ebd,\r
+0x0ec0, 0x0ec4,\r
+0x0ec6, 0x0ec6,\r
+0x0ec8, 0x0ecd,\r
+0x0ed0, 0x0ed9,\r
+0x0edc, 0x0edf,\r
+0x0f00, 0x0f00,\r
+0x0f18, 0x0f19,\r
+0x0f20, 0x0f29,\r
+0x0f35, 0x0f35,\r
+0x0f37, 0x0f37,\r
+0x0f39, 0x0f39,\r
+0x0f3e, 0x0f47,\r
+0x0f49, 0x0f6c,\r
+0x0f71, 0x0f84,\r
+0x0f86, 0x0f97,\r
+0x0f99, 0x0fbc,\r
+0x0fc6, 0x0fc6,\r
+0x1000, 0x1049,\r
+0x1050, 0x109d,\r
+0x10a0, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x10fa,\r
+0x10fc, 0x1248,\r
+0x124a, 0x124d,\r
+0x1250, 0x1256,\r
+0x1258, 0x1258,\r
+0x125a, 0x125d,\r
+0x1260, 0x1288,\r
+0x128a, 0x128d,\r
+0x1290, 0x12b0,\r
+0x12b2, 0x12b5,\r
+0x12b8, 0x12be,\r
+0x12c0, 0x12c0,\r
+0x12c2, 0x12c5,\r
+0x12c8, 0x12d6,\r
+0x12d8, 0x1310,\r
+0x1312, 0x1315,\r
+0x1318, 0x135a,\r
+0x135d, 0x135f,\r
+0x1369, 0x1371,\r
+0x1380, 0x138f,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0x1401, 0x166c,\r
+0x166f, 0x167f,\r
+0x1681, 0x169a,\r
+0x16a0, 0x16ea,\r
+0x16ee, 0x16f8,\r
+0x1700, 0x170c,\r
+0x170e, 0x1714,\r
+0x1720, 0x1734,\r
+0x1740, 0x1753,\r
+0x1760, 0x176c,\r
+0x176e, 0x1770,\r
+0x1772, 0x1773,\r
+0x1780, 0x17d3,\r
+0x17d7, 0x17d7,\r
+0x17dc, 0x17dd,\r
+0x17e0, 0x17e9,\r
+0x180b, 0x180d,\r
+0x1810, 0x1819,\r
+0x1820, 0x1878,\r
+0x1880, 0x18aa,\r
+0x18b0, 0x18f5,\r
+0x1900, 0x191e,\r
+0x1920, 0x192b,\r
+0x1930, 0x193b,\r
+0x1946, 0x196d,\r
+0x1970, 0x1974,\r
+0x1980, 0x19ab,\r
+0x19b0, 0x19c9,\r
+0x19d0, 0x19da,\r
+0x1a00, 0x1a1b,\r
+0x1a20, 0x1a5e,\r
+0x1a60, 0x1a7c,\r
+0x1a7f, 0x1a89,\r
+0x1a90, 0x1a99,\r
+0x1aa7, 0x1aa7,\r
+0x1ab0, 0x1abd,\r
+0x1b00, 0x1b4b,\r
+0x1b50, 0x1b59,\r
+0x1b6b, 0x1b73,\r
+0x1b80, 0x1bf3,\r
+0x1c00, 0x1c37,\r
+0x1c40, 0x1c49,\r
+0x1c4d, 0x1c7d,\r
+0x1c80, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cbf,\r
+0x1cd0, 0x1cd2,\r
+0x1cd4, 0x1cf9,\r
+0x1d00, 0x1df9,\r
+0x1dfb, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fbc,\r
+0x1fbe, 0x1fbe,\r
+0x1fc2, 0x1fc4,\r
+0x1fc6, 0x1fcc,\r
+0x1fd0, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fe0, 0x1fec,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffc,\r
+0x203f, 0x2040,\r
+0x2054, 0x2054,\r
+0x2071, 0x2071,\r
+0x207f, 0x207f,\r
+0x2090, 0x209c,\r
+0x20d0, 0x20dc,\r
+0x20e1, 0x20e1,\r
+0x20e5, 0x20f0,\r
+0x2102, 0x2102,\r
+0x2107, 0x2107,\r
+0x210a, 0x2113,\r
+0x2115, 0x2115,\r
+0x2118, 0x211d,\r
+0x2124, 0x2124,\r
+0x2126, 0x2126,\r
+0x2128, 0x2128,\r
+0x212a, 0x2139,\r
+0x213c, 0x213f,\r
+0x2145, 0x2149,\r
+0x214e, 0x214e,\r
+0x2160, 0x2188,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x2c60, 0x2ce4,\r
+0x2ceb, 0x2cf3,\r
+0x2d00, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0x2d30, 0x2d67,\r
+0x2d6f, 0x2d6f,\r
+0x2d7f, 0x2d96,\r
+0x2da0, 0x2da6,\r
+0x2da8, 0x2dae,\r
+0x2db0, 0x2db6,\r
+0x2db8, 0x2dbe,\r
+0x2dc0, 0x2dc6,\r
+0x2dc8, 0x2dce,\r
+0x2dd0, 0x2dd6,\r
+0x2dd8, 0x2dde,\r
+0x2de0, 0x2dff,\r
+0x3005, 0x3007,\r
+0x3021, 0x302f,\r
+0x3031, 0x3035,\r
+0x3038, 0x303c,\r
+0x3041, 0x3096,\r
+0x3099, 0x309a,\r
+0x309d, 0x309f,\r
+0x30a1, 0x30fa,\r
+0x30fc, 0x30ff,\r
+0x3105, 0x312f,\r
+0x3131, 0x318e,\r
+0x31a0, 0x31ba,\r
+0x31f0, 0x31ff,\r
+0x3400, 0x4db5,\r
+0x4e00, 0x9fef,\r
+0xa000, 0xa48c,\r
+0xa4d0, 0xa4fd,\r
+0xa500, 0xa60c,\r
+0xa610, 0xa62b,\r
+0xa640, 0xa66f,\r
+0xa674, 0xa67d,\r
+0xa67f, 0xa6f1,\r
+0xa717, 0xa71f,\r
+0xa722, 0xa788,\r
+0xa78b, 0xa7b9,\r
+0xa7f7, 0xa827,\r
+0xa840, 0xa873,\r
+0xa880, 0xa8c5,\r
+0xa8d0, 0xa8d9,\r
+0xa8e0, 0xa8f7,\r
+0xa8fb, 0xa8fb,\r
+0xa8fd, 0xa92d,\r
+0xa930, 0xa953,\r
+0xa960, 0xa97c,\r
+0xa980, 0xa9c0,\r
+0xa9cf, 0xa9d9,\r
+0xa9e0, 0xa9fe,\r
+0xaa00, 0xaa36,\r
+0xaa40, 0xaa4d,\r
+0xaa50, 0xaa59,\r
+0xaa60, 0xaa76,\r
+0xaa7a, 0xaac2,\r
+0xaadb, 0xaadd,\r
+0xaae0, 0xaaef,\r
+0xaaf2, 0xaaf6,\r
+0xab01, 0xab06,\r
+0xab09, 0xab0e,\r
+0xab11, 0xab16,\r
+0xab20, 0xab26,\r
+0xab28, 0xab2e,\r
+0xab30, 0xab5a,\r
+0xab5c, 0xab65,\r
+0xab70, 0xabea,\r
+0xabec, 0xabed,\r
+0xabf0, 0xabf9,\r
+0xac00, 0xd7a3,\r
+0xd7b0, 0xd7c6,\r
+0xd7cb, 0xd7fb,\r
+0xf900, 0xfa6d,\r
+0xfa70, 0xfad9,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xfb1d, 0xfb28,\r
+0xfb2a, 0xfb36,\r
+0xfb38, 0xfb3c,\r
+0xfb3e, 0xfb3e,\r
+0xfb40, 0xfb41,\r
+0xfb43, 0xfb44,\r
+0xfb46, 0xfbb1,\r
+0xfbd3, 0xfc5d,\r
+0xfc64, 0xfd3d,\r
+0xfd50, 0xfd8f,\r
+0xfd92, 0xfdc7,\r
+0xfdf0, 0xfdf9,\r
+0xfe00, 0xfe0f,\r
+0xfe20, 0xfe2f,\r
+0xfe33, 0xfe34,\r
+0xfe4d, 0xfe4f,\r
+0xfe71, 0xfe71,\r
+0xfe73, 0xfe73,\r
+0xfe77, 0xfe77,\r
+0xfe79, 0xfe79,\r
+0xfe7b, 0xfe7b,\r
+0xfe7d, 0xfe7d,\r
+0xfe7f, 0xfefc,\r
+0xff10, 0xff19,\r
+0xff21, 0xff3a,\r
+0xff3f, 0xff3f,\r
+0xff41, 0xff5a,\r
+0xff66, 0xffbe,\r
+0xffc2, 0xffc7,\r
+0xffca, 0xffcf,\r
+0xffd2, 0xffd7,\r
+0xffda, 0xffdc,\r
+0x10000, 0x1000b,\r
+0x1000d, 0x10026,\r
+0x10028, 0x1003a,\r
+0x1003c, 0x1003d,\r
+0x1003f, 0x1004d,\r
+0x10050, 0x1005d,\r
+0x10080, 0x100fa,\r
+0x10140, 0x10174,\r
+0x101fd, 0x101fd,\r
+0x10280, 0x1029c,\r
+0x102a0, 0x102d0,\r
+0x102e0, 0x102e0,\r
+0x10300, 0x1031f,\r
+0x1032d, 0x1034a,\r
+0x10350, 0x1037a,\r
+0x10380, 0x1039d,\r
+0x103a0, 0x103c3,\r
+0x103c8, 0x103cf,\r
+0x103d1, 0x103d5,\r
+0x10400, 0x1049d,\r
+0x104a0, 0x104a9,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+0x10500, 0x10527,\r
+0x10530, 0x10563,\r
+0x10600, 0x10736,\r
+0x10740, 0x10755,\r
+0x10760, 0x10767,\r
+0x10800, 0x10805,\r
+0x10808, 0x10808,\r
+0x1080a, 0x10835,\r
+0x10837, 0x10838,\r
+0x1083c, 0x1083c,\r
+0x1083f, 0x10855,\r
+0x10860, 0x10876,\r
+0x10880, 0x1089e,\r
+0x108e0, 0x108f2,\r
+0x108f4, 0x108f5,\r
+0x10900, 0x10915,\r
+0x10920, 0x10939,\r
+0x10980, 0x109b7,\r
+0x109be, 0x109bf,\r
+0x10a00, 0x10a03,\r
+0x10a05, 0x10a06,\r
+0x10a0c, 0x10a13,\r
+0x10a15, 0x10a17,\r
+0x10a19, 0x10a35,\r
+0x10a38, 0x10a3a,\r
+0x10a3f, 0x10a3f,\r
+0x10a60, 0x10a7c,\r
+0x10a80, 0x10a9c,\r
+0x10ac0, 0x10ac7,\r
+0x10ac9, 0x10ae6,\r
+0x10b00, 0x10b35,\r
+0x10b40, 0x10b55,\r
+0x10b60, 0x10b72,\r
+0x10b80, 0x10b91,\r
+0x10c00, 0x10c48,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x10d00, 0x10d27,\r
+0x10d30, 0x10d39,\r
+0x10f00, 0x10f1c,\r
+0x10f27, 0x10f27,\r
+0x10f30, 0x10f50,\r
+0x11000, 0x11046,\r
+0x11066, 0x1106f,\r
+0x1107f, 0x110ba,\r
+0x110d0, 0x110e8,\r
+0x110f0, 0x110f9,\r
+0x11100, 0x11134,\r
+0x11136, 0x1113f,\r
+0x11144, 0x11146,\r
+0x11150, 0x11173,\r
+0x11176, 0x11176,\r
+0x11180, 0x111c4,\r
+0x111c9, 0x111cc,\r
+0x111d0, 0x111da,\r
+0x111dc, 0x111dc,\r
+0x11200, 0x11211,\r
+0x11213, 0x11237,\r
+0x1123e, 0x1123e,\r
+0x11280, 0x11286,\r
+0x11288, 0x11288,\r
+0x1128a, 0x1128d,\r
+0x1128f, 0x1129d,\r
+0x1129f, 0x112a8,\r
+0x112b0, 0x112ea,\r
+0x112f0, 0x112f9,\r
+0x11300, 0x11303,\r
+0x11305, 0x1130c,\r
+0x1130f, 0x11310,\r
+0x11313, 0x11328,\r
+0x1132a, 0x11330,\r
+0x11332, 0x11333,\r
+0x11335, 0x11339,\r
+0x1133b, 0x11344,\r
+0x11347, 0x11348,\r
+0x1134b, 0x1134d,\r
+0x11350, 0x11350,\r
+0x11357, 0x11357,\r
+0x1135d, 0x11363,\r
+0x11366, 0x1136c,\r
+0x11370, 0x11374,\r
+0x11400, 0x1144a,\r
+0x11450, 0x11459,\r
+0x1145e, 0x1145e,\r
+0x11480, 0x114c5,\r
+0x114c7, 0x114c7,\r
+0x114d0, 0x114d9,\r
+0x11580, 0x115b5,\r
+0x115b8, 0x115c0,\r
+0x115d8, 0x115dd,\r
+0x11600, 0x11640,\r
+0x11644, 0x11644,\r
+0x11650, 0x11659,\r
+0x11680, 0x116b7,\r
+0x116c0, 0x116c9,\r
+0x11700, 0x1171a,\r
+0x1171d, 0x1172b,\r
+0x11730, 0x11739,\r
+0x11800, 0x1183a,\r
+0x118a0, 0x118e9,\r
+0x118ff, 0x118ff,\r
+0x11a00, 0x11a3e,\r
+0x11a47, 0x11a47,\r
+0x11a50, 0x11a83,\r
+0x11a86, 0x11a99,\r
+0x11a9d, 0x11a9d,\r
+0x11ac0, 0x11af8,\r
+0x11c00, 0x11c08,\r
+0x11c0a, 0x11c36,\r
+0x11c38, 0x11c40,\r
+0x11c50, 0x11c59,\r
+0x11c72, 0x11c8f,\r
+0x11c92, 0x11ca7,\r
+0x11ca9, 0x11cb6,\r
+0x11d00, 0x11d06,\r
+0x11d08, 0x11d09,\r
+0x11d0b, 0x11d36,\r
+0x11d3a, 0x11d3a,\r
+0x11d3c, 0x11d3d,\r
+0x11d3f, 0x11d47,\r
+0x11d50, 0x11d59,\r
+0x11d60, 0x11d65,\r
+0x11d67, 0x11d68,\r
+0x11d6a, 0x11d8e,\r
+0x11d90, 0x11d91,\r
+0x11d93, 0x11d98,\r
+0x11da0, 0x11da9,\r
+0x11ee0, 0x11ef6,\r
+0x12000, 0x12399,\r
+0x12400, 0x1246e,\r
+0x12480, 0x12543,\r
+0x13000, 0x1342e,\r
+0x14400, 0x14646,\r
+0x16800, 0x16a38,\r
+0x16a40, 0x16a5e,\r
+0x16a60, 0x16a69,\r
+0x16ad0, 0x16aed,\r
+0x16af0, 0x16af4,\r
+0x16b00, 0x16b36,\r
+0x16b40, 0x16b43,\r
+0x16b50, 0x16b59,\r
+0x16b63, 0x16b77,\r
+0x16b7d, 0x16b8f,\r
+0x16e40, 0x16e7f,\r
+0x16f00, 0x16f44,\r
+0x16f50, 0x16f7e,\r
+0x16f8f, 0x16f9f,\r
+0x16fe0, 0x16fe1,\r
+0x17000, 0x187f1,\r
+0x18800, 0x18af2,\r
+0x1b000, 0x1b11e,\r
+0x1b170, 0x1b2fb,\r
+0x1bc00, 0x1bc6a,\r
+0x1bc70, 0x1bc7c,\r
+0x1bc80, 0x1bc88,\r
+0x1bc90, 0x1bc99,\r
+0x1bc9d, 0x1bc9e,\r
+0x1d165, 0x1d169,\r
+0x1d16d, 0x1d172,\r
+0x1d17b, 0x1d182,\r
+0x1d185, 0x1d18b,\r
+0x1d1aa, 0x1d1ad,\r
+0x1d242, 0x1d244,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d6c0,\r
+0x1d6c2, 0x1d6da,\r
+0x1d6dc, 0x1d6fa,\r
+0x1d6fc, 0x1d714,\r
+0x1d716, 0x1d734,\r
+0x1d736, 0x1d74e,\r
+0x1d750, 0x1d76e,\r
+0x1d770, 0x1d788,\r
+0x1d78a, 0x1d7a8,\r
+0x1d7aa, 0x1d7c2,\r
+0x1d7c4, 0x1d7cb,\r
+0x1d7ce, 0x1d7ff,\r
+0x1da00, 0x1da36,\r
+0x1da3b, 0x1da6c,\r
+0x1da75, 0x1da75,\r
+0x1da84, 0x1da84,\r
+0x1da9b, 0x1da9f,\r
+0x1daa1, 0x1daaf,\r
+0x1e000, 0x1e006,\r
+0x1e008, 0x1e018,\r
+0x1e01b, 0x1e021,\r
+0x1e023, 0x1e024,\r
+0x1e026, 0x1e02a,\r
+0x1e800, 0x1e8c4,\r
+0x1e8d0, 0x1e8d6,\r
+0x1e900, 0x1e94a,\r
+0x1e950, 0x1e959,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+0x2f800, 0x2fa1d,\r
+0xe0100, 0xe01ef,\r
+}; /* END of CR_XID_Continue */\r
+\r
+/* PROPERTY: 'XID_Start': Derived Property */\r
+static const OnigCodePoint\r
+CR_XID_Start[] = { 606,\r
+0x0041, 0x005a,\r
+0x0061, 0x007a,\r
+0x00aa, 0x00aa,\r
+0x00b5, 0x00b5,\r
+0x00ba, 0x00ba,\r
+0x00c0, 0x00d6,\r
+0x00d8, 0x00f6,\r
+0x00f8, 0x02c1,\r
+0x02c6, 0x02d1,\r
+0x02e0, 0x02e4,\r
+0x02ec, 0x02ec,\r
+0x02ee, 0x02ee,\r
+0x0370, 0x0374,\r
+0x0376, 0x0377,\r
+0x037b, 0x037d,\r
+0x037f, 0x037f,\r
+0x0386, 0x0386,\r
+0x0388, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x03f5,\r
+0x03f7, 0x0481,\r
+0x048a, 0x052f,\r
+0x0531, 0x0556,\r
+0x0559, 0x0559,\r
+0x0560, 0x0588,\r
+0x05d0, 0x05ea,\r
+0x05ef, 0x05f2,\r
+0x0620, 0x064a,\r
+0x066e, 0x066f,\r
+0x0671, 0x06d3,\r
+0x06d5, 0x06d5,\r
+0x06e5, 0x06e6,\r
+0x06ee, 0x06ef,\r
+0x06fa, 0x06fc,\r
+0x06ff, 0x06ff,\r
+0x0710, 0x0710,\r
+0x0712, 0x072f,\r
+0x074d, 0x07a5,\r
+0x07b1, 0x07b1,\r
+0x07ca, 0x07ea,\r
+0x07f4, 0x07f5,\r
+0x07fa, 0x07fa,\r
+0x0800, 0x0815,\r
+0x081a, 0x081a,\r
+0x0824, 0x0824,\r
+0x0828, 0x0828,\r
+0x0840, 0x0858,\r
+0x0860, 0x086a,\r
+0x08a0, 0x08b4,\r
+0x08b6, 0x08bd,\r
+0x0904, 0x0939,\r
+0x093d, 0x093d,\r
+0x0950, 0x0950,\r
+0x0958, 0x0961,\r
+0x0971, 0x0980,\r
+0x0985, 0x098c,\r
+0x098f, 0x0990,\r
+0x0993, 0x09a8,\r
+0x09aa, 0x09b0,\r
+0x09b2, 0x09b2,\r
+0x09b6, 0x09b9,\r
+0x09bd, 0x09bd,\r
+0x09ce, 0x09ce,\r
+0x09dc, 0x09dd,\r
+0x09df, 0x09e1,\r
+0x09f0, 0x09f1,\r
+0x09fc, 0x09fc,\r
+0x0a05, 0x0a0a,\r
+0x0a0f, 0x0a10,\r
+0x0a13, 0x0a28,\r
+0x0a2a, 0x0a30,\r
+0x0a32, 0x0a33,\r
+0x0a35, 0x0a36,\r
+0x0a38, 0x0a39,\r
+0x0a59, 0x0a5c,\r
+0x0a5e, 0x0a5e,\r
+0x0a72, 0x0a74,\r
+0x0a85, 0x0a8d,\r
+0x0a8f, 0x0a91,\r
+0x0a93, 0x0aa8,\r
+0x0aaa, 0x0ab0,\r
+0x0ab2, 0x0ab3,\r
+0x0ab5, 0x0ab9,\r
+0x0abd, 0x0abd,\r
+0x0ad0, 0x0ad0,\r
+0x0ae0, 0x0ae1,\r
+0x0af9, 0x0af9,\r
+0x0b05, 0x0b0c,\r
+0x0b0f, 0x0b10,\r
+0x0b13, 0x0b28,\r
+0x0b2a, 0x0b30,\r
+0x0b32, 0x0b33,\r
+0x0b35, 0x0b39,\r
+0x0b3d, 0x0b3d,\r
+0x0b5c, 0x0b5d,\r
+0x0b5f, 0x0b61,\r
+0x0b71, 0x0b71,\r
+0x0b83, 0x0b83,\r
+0x0b85, 0x0b8a,\r
+0x0b8e, 0x0b90,\r
+0x0b92, 0x0b95,\r
+0x0b99, 0x0b9a,\r
+0x0b9c, 0x0b9c,\r
+0x0b9e, 0x0b9f,\r
+0x0ba3, 0x0ba4,\r
+0x0ba8, 0x0baa,\r
+0x0bae, 0x0bb9,\r
+0x0bd0, 0x0bd0,\r
+0x0c05, 0x0c0c,\r
+0x0c0e, 0x0c10,\r
+0x0c12, 0x0c28,\r
+0x0c2a, 0x0c39,\r
+0x0c3d, 0x0c3d,\r
+0x0c58, 0x0c5a,\r
+0x0c60, 0x0c61,\r
+0x0c80, 0x0c80,\r
+0x0c85, 0x0c8c,\r
+0x0c8e, 0x0c90,\r
+0x0c92, 0x0ca8,\r
+0x0caa, 0x0cb3,\r
+0x0cb5, 0x0cb9,\r
+0x0cbd, 0x0cbd,\r
+0x0cde, 0x0cde,\r
+0x0ce0, 0x0ce1,\r
+0x0cf1, 0x0cf2,\r
+0x0d05, 0x0d0c,\r
+0x0d0e, 0x0d10,\r
+0x0d12, 0x0d3a,\r
+0x0d3d, 0x0d3d,\r
+0x0d4e, 0x0d4e,\r
+0x0d54, 0x0d56,\r
+0x0d5f, 0x0d61,\r
+0x0d7a, 0x0d7f,\r
+0x0d85, 0x0d96,\r
+0x0d9a, 0x0db1,\r
+0x0db3, 0x0dbb,\r
+0x0dbd, 0x0dbd,\r
+0x0dc0, 0x0dc6,\r
+0x0e01, 0x0e30,\r
+0x0e32, 0x0e32,\r
+0x0e40, 0x0e46,\r
+0x0e81, 0x0e82,\r
+0x0e84, 0x0e84,\r
+0x0e87, 0x0e88,\r
+0x0e8a, 0x0e8a,\r
+0x0e8d, 0x0e8d,\r
+0x0e94, 0x0e97,\r
+0x0e99, 0x0e9f,\r
+0x0ea1, 0x0ea3,\r
+0x0ea5, 0x0ea5,\r
+0x0ea7, 0x0ea7,\r
+0x0eaa, 0x0eab,\r
+0x0ead, 0x0eb0,\r
+0x0eb2, 0x0eb2,\r
+0x0ebd, 0x0ebd,\r
+0x0ec0, 0x0ec4,\r
+0x0ec6, 0x0ec6,\r
+0x0edc, 0x0edf,\r
+0x0f00, 0x0f00,\r
+0x0f40, 0x0f47,\r
+0x0f49, 0x0f6c,\r
+0x0f88, 0x0f8c,\r
+0x1000, 0x102a,\r
+0x103f, 0x103f,\r
+0x1050, 0x1055,\r
+0x105a, 0x105d,\r
+0x1061, 0x1061,\r
+0x1065, 0x1066,\r
+0x106e, 0x1070,\r
+0x1075, 0x1081,\r
+0x108e, 0x108e,\r
+0x10a0, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x10fa,\r
+0x10fc, 0x1248,\r
+0x124a, 0x124d,\r
+0x1250, 0x1256,\r
+0x1258, 0x1258,\r
+0x125a, 0x125d,\r
+0x1260, 0x1288,\r
+0x128a, 0x128d,\r
+0x1290, 0x12b0,\r
+0x12b2, 0x12b5,\r
+0x12b8, 0x12be,\r
+0x12c0, 0x12c0,\r
+0x12c2, 0x12c5,\r
+0x12c8, 0x12d6,\r
+0x12d8, 0x1310,\r
+0x1312, 0x1315,\r
+0x1318, 0x135a,\r
+0x1380, 0x138f,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0x1401, 0x166c,\r
+0x166f, 0x167f,\r
+0x1681, 0x169a,\r
+0x16a0, 0x16ea,\r
+0x16ee, 0x16f8,\r
+0x1700, 0x170c,\r
+0x170e, 0x1711,\r
+0x1720, 0x1731,\r
+0x1740, 0x1751,\r
+0x1760, 0x176c,\r
+0x176e, 0x1770,\r
+0x1780, 0x17b3,\r
+0x17d7, 0x17d7,\r
+0x17dc, 0x17dc,\r
+0x1820, 0x1878,\r
+0x1880, 0x18a8,\r
+0x18aa, 0x18aa,\r
+0x18b0, 0x18f5,\r
+0x1900, 0x191e,\r
+0x1950, 0x196d,\r
+0x1970, 0x1974,\r
+0x1980, 0x19ab,\r
+0x19b0, 0x19c9,\r
+0x1a00, 0x1a16,\r
+0x1a20, 0x1a54,\r
+0x1aa7, 0x1aa7,\r
+0x1b05, 0x1b33,\r
+0x1b45, 0x1b4b,\r
+0x1b83, 0x1ba0,\r
+0x1bae, 0x1baf,\r
+0x1bba, 0x1be5,\r
+0x1c00, 0x1c23,\r
+0x1c4d, 0x1c4f,\r
+0x1c5a, 0x1c7d,\r
+0x1c80, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cbf,\r
+0x1ce9, 0x1cec,\r
+0x1cee, 0x1cf1,\r
+0x1cf5, 0x1cf6,\r
+0x1d00, 0x1dbf,\r
+0x1e00, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fbc,\r
+0x1fbe, 0x1fbe,\r
+0x1fc2, 0x1fc4,\r
+0x1fc6, 0x1fcc,\r
+0x1fd0, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fe0, 0x1fec,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffc,\r
+0x2071, 0x2071,\r
+0x207f, 0x207f,\r
+0x2090, 0x209c,\r
+0x2102, 0x2102,\r
+0x2107, 0x2107,\r
+0x210a, 0x2113,\r
+0x2115, 0x2115,\r
+0x2118, 0x211d,\r
+0x2124, 0x2124,\r
+0x2126, 0x2126,\r
+0x2128, 0x2128,\r
+0x212a, 0x2139,\r
+0x213c, 0x213f,\r
+0x2145, 0x2149,\r
+0x214e, 0x214e,\r
+0x2160, 0x2188,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x2c60, 0x2ce4,\r
+0x2ceb, 0x2cee,\r
+0x2cf2, 0x2cf3,\r
+0x2d00, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0x2d30, 0x2d67,\r
+0x2d6f, 0x2d6f,\r
+0x2d80, 0x2d96,\r
+0x2da0, 0x2da6,\r
+0x2da8, 0x2dae,\r
+0x2db0, 0x2db6,\r
+0x2db8, 0x2dbe,\r
+0x2dc0, 0x2dc6,\r
+0x2dc8, 0x2dce,\r
+0x2dd0, 0x2dd6,\r
+0x2dd8, 0x2dde,\r
+0x3005, 0x3007,\r
+0x3021, 0x3029,\r
+0x3031, 0x3035,\r
+0x3038, 0x303c,\r
+0x3041, 0x3096,\r
+0x309d, 0x309f,\r
+0x30a1, 0x30fa,\r
+0x30fc, 0x30ff,\r
+0x3105, 0x312f,\r
+0x3131, 0x318e,\r
+0x31a0, 0x31ba,\r
+0x31f0, 0x31ff,\r
+0x3400, 0x4db5,\r
+0x4e00, 0x9fef,\r
+0xa000, 0xa48c,\r
+0xa4d0, 0xa4fd,\r
+0xa500, 0xa60c,\r
+0xa610, 0xa61f,\r
+0xa62a, 0xa62b,\r
+0xa640, 0xa66e,\r
+0xa67f, 0xa69d,\r
+0xa6a0, 0xa6ef,\r
+0xa717, 0xa71f,\r
+0xa722, 0xa788,\r
+0xa78b, 0xa7b9,\r
+0xa7f7, 0xa801,\r
+0xa803, 0xa805,\r
+0xa807, 0xa80a,\r
+0xa80c, 0xa822,\r
+0xa840, 0xa873,\r
+0xa882, 0xa8b3,\r
+0xa8f2, 0xa8f7,\r
+0xa8fb, 0xa8fb,\r
+0xa8fd, 0xa8fe,\r
+0xa90a, 0xa925,\r
+0xa930, 0xa946,\r
+0xa960, 0xa97c,\r
+0xa984, 0xa9b2,\r
+0xa9cf, 0xa9cf,\r
+0xa9e0, 0xa9e4,\r
+0xa9e6, 0xa9ef,\r
+0xa9fa, 0xa9fe,\r
+0xaa00, 0xaa28,\r
+0xaa40, 0xaa42,\r
+0xaa44, 0xaa4b,\r
+0xaa60, 0xaa76,\r
+0xaa7a, 0xaa7a,\r
+0xaa7e, 0xaaaf,\r
+0xaab1, 0xaab1,\r
+0xaab5, 0xaab6,\r
+0xaab9, 0xaabd,\r
+0xaac0, 0xaac0,\r
+0xaac2, 0xaac2,\r
+0xaadb, 0xaadd,\r
+0xaae0, 0xaaea,\r
+0xaaf2, 0xaaf4,\r
+0xab01, 0xab06,\r
+0xab09, 0xab0e,\r
+0xab11, 0xab16,\r
+0xab20, 0xab26,\r
+0xab28, 0xab2e,\r
+0xab30, 0xab5a,\r
+0xab5c, 0xab65,\r
+0xab70, 0xabe2,\r
+0xac00, 0xd7a3,\r
+0xd7b0, 0xd7c6,\r
+0xd7cb, 0xd7fb,\r
+0xf900, 0xfa6d,\r
+0xfa70, 0xfad9,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xfb1d, 0xfb1d,\r
+0xfb1f, 0xfb28,\r
+0xfb2a, 0xfb36,\r
+0xfb38, 0xfb3c,\r
+0xfb3e, 0xfb3e,\r
+0xfb40, 0xfb41,\r
+0xfb43, 0xfb44,\r
+0xfb46, 0xfbb1,\r
+0xfbd3, 0xfc5d,\r
+0xfc64, 0xfd3d,\r
+0xfd50, 0xfd8f,\r
+0xfd92, 0xfdc7,\r
+0xfdf0, 0xfdf9,\r
+0xfe71, 0xfe71,\r
+0xfe73, 0xfe73,\r
+0xfe77, 0xfe77,\r
+0xfe79, 0xfe79,\r
+0xfe7b, 0xfe7b,\r
+0xfe7d, 0xfe7d,\r
+0xfe7f, 0xfefc,\r
+0xff21, 0xff3a,\r
+0xff41, 0xff5a,\r
+0xff66, 0xff9d,\r
+0xffa0, 0xffbe,\r
+0xffc2, 0xffc7,\r
+0xffca, 0xffcf,\r
+0xffd2, 0xffd7,\r
+0xffda, 0xffdc,\r
+0x10000, 0x1000b,\r
+0x1000d, 0x10026,\r
+0x10028, 0x1003a,\r
+0x1003c, 0x1003d,\r
+0x1003f, 0x1004d,\r
+0x10050, 0x1005d,\r
+0x10080, 0x100fa,\r
+0x10140, 0x10174,\r
+0x10280, 0x1029c,\r
+0x102a0, 0x102d0,\r
+0x10300, 0x1031f,\r
+0x1032d, 0x1034a,\r
+0x10350, 0x10375,\r
+0x10380, 0x1039d,\r
+0x103a0, 0x103c3,\r
+0x103c8, 0x103cf,\r
+0x103d1, 0x103d5,\r
+0x10400, 0x1049d,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+0x10500, 0x10527,\r
+0x10530, 0x10563,\r
+0x10600, 0x10736,\r
+0x10740, 0x10755,\r
+0x10760, 0x10767,\r
+0x10800, 0x10805,\r
+0x10808, 0x10808,\r
+0x1080a, 0x10835,\r
+0x10837, 0x10838,\r
+0x1083c, 0x1083c,\r
+0x1083f, 0x10855,\r
+0x10860, 0x10876,\r
+0x10880, 0x1089e,\r
+0x108e0, 0x108f2,\r
+0x108f4, 0x108f5,\r
+0x10900, 0x10915,\r
+0x10920, 0x10939,\r
+0x10980, 0x109b7,\r
+0x109be, 0x109bf,\r
+0x10a00, 0x10a00,\r
+0x10a10, 0x10a13,\r
+0x10a15, 0x10a17,\r
+0x10a19, 0x10a35,\r
+0x10a60, 0x10a7c,\r
+0x10a80, 0x10a9c,\r
+0x10ac0, 0x10ac7,\r
+0x10ac9, 0x10ae4,\r
+0x10b00, 0x10b35,\r
+0x10b40, 0x10b55,\r
+0x10b60, 0x10b72,\r
+0x10b80, 0x10b91,\r
+0x10c00, 0x10c48,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x10d00, 0x10d23,\r
+0x10f00, 0x10f1c,\r
+0x10f27, 0x10f27,\r
+0x10f30, 0x10f45,\r
+0x11003, 0x11037,\r
+0x11083, 0x110af,\r
+0x110d0, 0x110e8,\r
+0x11103, 0x11126,\r
+0x11144, 0x11144,\r
+0x11150, 0x11172,\r
+0x11176, 0x11176,\r
+0x11183, 0x111b2,\r
+0x111c1, 0x111c4,\r
+0x111da, 0x111da,\r
+0x111dc, 0x111dc,\r
+0x11200, 0x11211,\r
+0x11213, 0x1122b,\r
+0x11280, 0x11286,\r
+0x11288, 0x11288,\r
+0x1128a, 0x1128d,\r
+0x1128f, 0x1129d,\r
+0x1129f, 0x112a8,\r
+0x112b0, 0x112de,\r
+0x11305, 0x1130c,\r
+0x1130f, 0x11310,\r
+0x11313, 0x11328,\r
+0x1132a, 0x11330,\r
+0x11332, 0x11333,\r
+0x11335, 0x11339,\r
+0x1133d, 0x1133d,\r
+0x11350, 0x11350,\r
+0x1135d, 0x11361,\r
+0x11400, 0x11434,\r
+0x11447, 0x1144a,\r
+0x11480, 0x114af,\r
+0x114c4, 0x114c5,\r
+0x114c7, 0x114c7,\r
+0x11580, 0x115ae,\r
+0x115d8, 0x115db,\r
+0x11600, 0x1162f,\r
+0x11644, 0x11644,\r
+0x11680, 0x116aa,\r
+0x11700, 0x1171a,\r
+0x11800, 0x1182b,\r
+0x118a0, 0x118df,\r
+0x118ff, 0x118ff,\r
+0x11a00, 0x11a00,\r
+0x11a0b, 0x11a32,\r
+0x11a3a, 0x11a3a,\r
+0x11a50, 0x11a50,\r
+0x11a5c, 0x11a83,\r
+0x11a86, 0x11a89,\r
+0x11a9d, 0x11a9d,\r
+0x11ac0, 0x11af8,\r
+0x11c00, 0x11c08,\r
+0x11c0a, 0x11c2e,\r
+0x11c40, 0x11c40,\r
+0x11c72, 0x11c8f,\r
+0x11d00, 0x11d06,\r
+0x11d08, 0x11d09,\r
+0x11d0b, 0x11d30,\r
+0x11d46, 0x11d46,\r
+0x11d60, 0x11d65,\r
+0x11d67, 0x11d68,\r
+0x11d6a, 0x11d89,\r
+0x11d98, 0x11d98,\r
+0x11ee0, 0x11ef2,\r
+0x12000, 0x12399,\r
+0x12400, 0x1246e,\r
+0x12480, 0x12543,\r
+0x13000, 0x1342e,\r
+0x14400, 0x14646,\r
+0x16800, 0x16a38,\r
+0x16a40, 0x16a5e,\r
+0x16ad0, 0x16aed,\r
+0x16b00, 0x16b2f,\r
+0x16b40, 0x16b43,\r
+0x16b63, 0x16b77,\r
+0x16b7d, 0x16b8f,\r
+0x16e40, 0x16e7f,\r
+0x16f00, 0x16f44,\r
+0x16f50, 0x16f50,\r
+0x16f93, 0x16f9f,\r
+0x16fe0, 0x16fe1,\r
+0x17000, 0x187f1,\r
+0x18800, 0x18af2,\r
+0x1b000, 0x1b11e,\r
+0x1b170, 0x1b2fb,\r
+0x1bc00, 0x1bc6a,\r
+0x1bc70, 0x1bc7c,\r
+0x1bc80, 0x1bc88,\r
+0x1bc90, 0x1bc99,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d6c0,\r
+0x1d6c2, 0x1d6da,\r
+0x1d6dc, 0x1d6fa,\r
+0x1d6fc, 0x1d714,\r
+0x1d716, 0x1d734,\r
+0x1d736, 0x1d74e,\r
+0x1d750, 0x1d76e,\r
+0x1d770, 0x1d788,\r
+0x1d78a, 0x1d7a8,\r
+0x1d7aa, 0x1d7c2,\r
+0x1d7c4, 0x1d7cb,\r
+0x1e800, 0x1e8c4,\r
+0x1e900, 0x1e943,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+0x2f800, 0x2fa1d,\r
+}; /* END of CR_XID_Start */\r
+\r
+/* PROPERTY: 'Yi': Script */\r
+static const OnigCodePoint\r
+CR_Yi[] = { 2,\r
+0xa000, 0xa48c,\r
+0xa490, 0xa4c6,\r
+}; /* END of CR_Yi */\r
+\r
+/* PROPERTY: 'Z': Major Category */\r
+static const OnigCodePoint\r
+CR_Z[] = { 8,\r
+0x0020, 0x0020,\r
+0x00a0, 0x00a0,\r
+0x1680, 0x1680,\r
+0x2000, 0x200a,\r
+0x2028, 0x2029,\r
+0x202f, 0x202f,\r
+0x205f, 0x205f,\r
+0x3000, 0x3000,\r
+}; /* END of CR_Z */\r
+\r
+/* PROPERTY: 'Zanabazar_Square': Script */\r
+static const OnigCodePoint\r
+CR_Zanabazar_Square[] = { 1,\r
+0x11a00, 0x11a47,\r
+}; /* END of CR_Zanabazar_Square */\r
+\r
+/* PROPERTY: 'Zl': General Category */\r
+static const OnigCodePoint\r
+CR_Zl[] = { 1,\r
+0x2028, 0x2028,\r
+}; /* END of CR_Zl */\r
+\r
+/* PROPERTY: 'Zp': General Category */\r
+static const OnigCodePoint\r
+CR_Zp[] = { 1,\r
+0x2029, 0x2029,\r
+}; /* END of CR_Zp */\r
+\r
+/* PROPERTY: 'Zs': General Category */\r
+static const OnigCodePoint\r
+CR_Zs[] = { 7,\r
+0x0020, 0x0020,\r
+0x00a0, 0x00a0,\r
+0x1680, 0x1680,\r
+0x2000, 0x200a,\r
+0x202f, 0x202f,\r
+0x205f, 0x205f,\r
+0x3000, 0x3000,\r
+}; /* END of CR_Zs */\r
+\r
+/* PROPERTY: 'In_Basic_Latin': Block */\r
+#define CR_In_Basic_Latin CR_ASCII\r
+\r
+/* PROPERTY: 'In_Latin_1_Supplement': Block */\r
+static const OnigCodePoint\r
+CR_In_Latin_1_Supplement[] = { 1,\r
+0x0080, 0x00ff,\r
+}; /* END of CR_In_Latin_1_Supplement */\r
+\r
+/* PROPERTY: 'In_Latin_Extended_A': Block */\r
+static const OnigCodePoint\r
+CR_In_Latin_Extended_A[] = { 1,\r
+0x0100, 0x017f,\r
+}; /* END of CR_In_Latin_Extended_A */\r
+\r
+/* PROPERTY: 'In_Latin_Extended_B': Block */\r
+static const OnigCodePoint\r
+CR_In_Latin_Extended_B[] = { 1,\r
+0x0180, 0x024f,\r
+}; /* END of CR_In_Latin_Extended_B */\r
+\r
+/* PROPERTY: 'In_IPA_Extensions': Block */\r
+static const OnigCodePoint\r
+CR_In_IPA_Extensions[] = { 1,\r
+0x0250, 0x02af,\r
+}; /* END of CR_In_IPA_Extensions */\r
+\r
+/* PROPERTY: 'In_Spacing_Modifier_Letters': Block */\r
+static const OnigCodePoint\r
+CR_In_Spacing_Modifier_Letters[] = { 1,\r
+0x02b0, 0x02ff,\r
+}; /* END of CR_In_Spacing_Modifier_Letters */\r
+\r
+/* PROPERTY: 'In_Combining_Diacritical_Marks': Block */\r
+static const OnigCodePoint\r
+CR_In_Combining_Diacritical_Marks[] = { 1,\r
+0x0300, 0x036f,\r
+}; /* END of CR_In_Combining_Diacritical_Marks */\r
+\r
+/* PROPERTY: 'In_Greek_and_Coptic': Block */\r
+static const OnigCodePoint\r
+CR_In_Greek_and_Coptic[] = { 1,\r
+0x0370, 0x03ff,\r
+}; /* END of CR_In_Greek_and_Coptic */\r
+\r
+/* PROPERTY: 'In_Cyrillic': Block */\r
+static const OnigCodePoint\r
+CR_In_Cyrillic[] = { 1,\r
+0x0400, 0x04ff,\r
+}; /* END of CR_In_Cyrillic */\r
+\r
+/* PROPERTY: 'In_Cyrillic_Supplement': Block */\r
+static const OnigCodePoint\r
+CR_In_Cyrillic_Supplement[] = { 1,\r
+0x0500, 0x052f,\r
+}; /* END of CR_In_Cyrillic_Supplement */\r
+\r
+/* PROPERTY: 'In_Armenian': Block */\r
+static const OnigCodePoint\r
+CR_In_Armenian[] = { 1,\r
+0x0530, 0x058f,\r
+}; /* END of CR_In_Armenian */\r
+\r
+/* PROPERTY: 'In_Hebrew': Block */\r
+static const OnigCodePoint\r
+CR_In_Hebrew[] = { 1,\r
+0x0590, 0x05ff,\r
+}; /* END of CR_In_Hebrew */\r
+\r
+/* PROPERTY: 'In_Arabic': Block */\r
+static const OnigCodePoint\r
+CR_In_Arabic[] = { 1,\r
+0x0600, 0x06ff,\r
+}; /* END of CR_In_Arabic */\r
+\r
+/* PROPERTY: 'In_Syriac': Block */\r
+static const OnigCodePoint\r
+CR_In_Syriac[] = { 1,\r
+0x0700, 0x074f,\r
+}; /* END of CR_In_Syriac */\r
+\r
+/* PROPERTY: 'In_Arabic_Supplement': Block */\r
+static const OnigCodePoint\r
+CR_In_Arabic_Supplement[] = { 1,\r
+0x0750, 0x077f,\r
+}; /* END of CR_In_Arabic_Supplement */\r
+\r
+/* PROPERTY: 'In_Thaana': Block */\r
+static const OnigCodePoint\r
+CR_In_Thaana[] = { 1,\r
+0x0780, 0x07bf,\r
+}; /* END of CR_In_Thaana */\r
+\r
+/* PROPERTY: 'In_NKo': Block */\r
+static const OnigCodePoint\r
+CR_In_NKo[] = { 1,\r
+0x07c0, 0x07ff,\r
+}; /* END of CR_In_NKo */\r
+\r
+/* PROPERTY: 'In_Samaritan': Block */\r
+static const OnigCodePoint\r
+CR_In_Samaritan[] = { 1,\r
+0x0800, 0x083f,\r
+}; /* END of CR_In_Samaritan */\r
+\r
+/* PROPERTY: 'In_Mandaic': Block */\r
+static const OnigCodePoint\r
+CR_In_Mandaic[] = { 1,\r
+0x0840, 0x085f,\r
+}; /* END of CR_In_Mandaic */\r
+\r
+/* PROPERTY: 'In_Syriac_Supplement': Block */\r
+static const OnigCodePoint\r
+CR_In_Syriac_Supplement[] = { 1,\r
+0x0860, 0x086f,\r
+}; /* END of CR_In_Syriac_Supplement */\r
+\r
+/* PROPERTY: 'In_Arabic_Extended_A': Block */\r
+static const OnigCodePoint\r
+CR_In_Arabic_Extended_A[] = { 1,\r
+0x08a0, 0x08ff,\r
+}; /* END of CR_In_Arabic_Extended_A */\r
+\r
+/* PROPERTY: 'In_Devanagari': Block */\r
+static const OnigCodePoint\r
+CR_In_Devanagari[] = { 1,\r
+0x0900, 0x097f,\r
+}; /* END of CR_In_Devanagari */\r
+\r
+/* PROPERTY: 'In_Bengali': Block */\r
+static const OnigCodePoint\r
+CR_In_Bengali[] = { 1,\r
+0x0980, 0x09ff,\r
+}; /* END of CR_In_Bengali */\r
+\r
+/* PROPERTY: 'In_Gurmukhi': Block */\r
+static const OnigCodePoint\r
+CR_In_Gurmukhi[] = { 1,\r
+0x0a00, 0x0a7f,\r
+}; /* END of CR_In_Gurmukhi */\r
+\r
+/* PROPERTY: 'In_Gujarati': Block */\r
+static const OnigCodePoint\r
+CR_In_Gujarati[] = { 1,\r
+0x0a80, 0x0aff,\r
+}; /* END of CR_In_Gujarati */\r
+\r
+/* PROPERTY: 'In_Oriya': Block */\r
+static const OnigCodePoint\r
+CR_In_Oriya[] = { 1,\r
+0x0b00, 0x0b7f,\r
+}; /* END of CR_In_Oriya */\r
+\r
+/* PROPERTY: 'In_Tamil': Block */\r
+static const OnigCodePoint\r
+CR_In_Tamil[] = { 1,\r
+0x0b80, 0x0bff,\r
+}; /* END of CR_In_Tamil */\r
+\r
+/* PROPERTY: 'In_Telugu': Block */\r
+static const OnigCodePoint\r
+CR_In_Telugu[] = { 1,\r
+0x0c00, 0x0c7f,\r
+}; /* END of CR_In_Telugu */\r
+\r
+/* PROPERTY: 'In_Kannada': Block */\r
+static const OnigCodePoint\r
+CR_In_Kannada[] = { 1,\r
+0x0c80, 0x0cff,\r
+}; /* END of CR_In_Kannada */\r
+\r
+/* PROPERTY: 'In_Malayalam': Block */\r
+static const OnigCodePoint\r
+CR_In_Malayalam[] = { 1,\r
+0x0d00, 0x0d7f,\r
+}; /* END of CR_In_Malayalam */\r
+\r
+/* PROPERTY: 'In_Sinhala': Block */\r
+static const OnigCodePoint\r
+CR_In_Sinhala[] = { 1,\r
+0x0d80, 0x0dff,\r
+}; /* END of CR_In_Sinhala */\r
+\r
+/* PROPERTY: 'In_Thai': Block */\r
+static const OnigCodePoint\r
+CR_In_Thai[] = { 1,\r
+0x0e00, 0x0e7f,\r
+}; /* END of CR_In_Thai */\r
+\r
+/* PROPERTY: 'In_Lao': Block */\r
+static const OnigCodePoint\r
+CR_In_Lao[] = { 1,\r
+0x0e80, 0x0eff,\r
+}; /* END of CR_In_Lao */\r
+\r
+/* PROPERTY: 'In_Tibetan': Block */\r
+static const OnigCodePoint\r
+CR_In_Tibetan[] = { 1,\r
+0x0f00, 0x0fff,\r
+}; /* END of CR_In_Tibetan */\r
+\r
+/* PROPERTY: 'In_Myanmar': Block */\r
+static const OnigCodePoint\r
+CR_In_Myanmar[] = { 1,\r
+0x1000, 0x109f,\r
+}; /* END of CR_In_Myanmar */\r
+\r
+/* PROPERTY: 'In_Georgian': Block */\r
+static const OnigCodePoint\r
+CR_In_Georgian[] = { 1,\r
+0x10a0, 0x10ff,\r
+}; /* END of CR_In_Georgian */\r
+\r
+/* PROPERTY: 'In_Hangul_Jamo': Block */\r
+static const OnigCodePoint\r
+CR_In_Hangul_Jamo[] = { 1,\r
+0x1100, 0x11ff,\r
+}; /* END of CR_In_Hangul_Jamo */\r
+\r
+/* PROPERTY: 'In_Ethiopic': Block */\r
+static const OnigCodePoint\r
+CR_In_Ethiopic[] = { 1,\r
+0x1200, 0x137f,\r
+}; /* END of CR_In_Ethiopic */\r
+\r
+/* PROPERTY: 'In_Ethiopic_Supplement': Block */\r
+static const OnigCodePoint\r
+CR_In_Ethiopic_Supplement[] = { 1,\r
+0x1380, 0x139f,\r
+}; /* END of CR_In_Ethiopic_Supplement */\r
+\r
+/* PROPERTY: 'In_Cherokee': Block */\r
+static const OnigCodePoint\r
+CR_In_Cherokee[] = { 1,\r
+0x13a0, 0x13ff,\r
+}; /* END of CR_In_Cherokee */\r
+\r
+/* PROPERTY: 'In_Unified_Canadian_Aboriginal_Syllabics': Block */\r
+static const OnigCodePoint\r
+CR_In_Unified_Canadian_Aboriginal_Syllabics[] = { 1,\r
+0x1400, 0x167f,\r
+}; /* END of CR_In_Unified_Canadian_Aboriginal_Syllabics */\r
+\r
+/* PROPERTY: 'In_Ogham': Block */\r
+static const OnigCodePoint\r
+CR_In_Ogham[] = { 1,\r
+0x1680, 0x169f,\r
+}; /* END of CR_In_Ogham */\r
+\r
+/* PROPERTY: 'In_Runic': Block */\r
+static const OnigCodePoint\r
+CR_In_Runic[] = { 1,\r
+0x16a0, 0x16ff,\r
+}; /* END of CR_In_Runic */\r
+\r
+/* PROPERTY: 'In_Tagalog': Block */\r
+static const OnigCodePoint\r
+CR_In_Tagalog[] = { 1,\r
+0x1700, 0x171f,\r
+}; /* END of CR_In_Tagalog */\r
+\r
+/* PROPERTY: 'In_Hanunoo': Block */\r
+static const OnigCodePoint\r
+CR_In_Hanunoo[] = { 1,\r
+0x1720, 0x173f,\r
+}; /* END of CR_In_Hanunoo */\r
+\r
+/* PROPERTY: 'In_Buhid': Block */\r
+static const OnigCodePoint\r
+CR_In_Buhid[] = { 1,\r
+0x1740, 0x175f,\r
+}; /* END of CR_In_Buhid */\r
+\r
+/* PROPERTY: 'In_Tagbanwa': Block */\r
+static const OnigCodePoint\r
+CR_In_Tagbanwa[] = { 1,\r
+0x1760, 0x177f,\r
+}; /* END of CR_In_Tagbanwa */\r
+\r
+/* PROPERTY: 'In_Khmer': Block */\r
+static const OnigCodePoint\r
+CR_In_Khmer[] = { 1,\r
+0x1780, 0x17ff,\r
+}; /* END of CR_In_Khmer */\r
+\r
+/* PROPERTY: 'In_Mongolian': Block */\r
+static const OnigCodePoint\r
+CR_In_Mongolian[] = { 1,\r
+0x1800, 0x18af,\r
+}; /* END of CR_In_Mongolian */\r
+\r
+/* PROPERTY: 'In_Unified_Canadian_Aboriginal_Syllabics_Extended': Block */\r
+static const OnigCodePoint\r
+CR_In_Unified_Canadian_Aboriginal_Syllabics_Extended[] = { 1,\r
+0x18b0, 0x18ff,\r
+}; /* END of CR_In_Unified_Canadian_Aboriginal_Syllabics_Extended */\r
+\r
+/* PROPERTY: 'In_Limbu': Block */\r
+static const OnigCodePoint\r
+CR_In_Limbu[] = { 1,\r
+0x1900, 0x194f,\r
+}; /* END of CR_In_Limbu */\r
+\r
+/* PROPERTY: 'In_Tai_Le': Block */\r
+static const OnigCodePoint\r
+CR_In_Tai_Le[] = { 1,\r
+0x1950, 0x197f,\r
+}; /* END of CR_In_Tai_Le */\r
+\r
+/* PROPERTY: 'In_New_Tai_Lue': Block */\r
+static const OnigCodePoint\r
+CR_In_New_Tai_Lue[] = { 1,\r
+0x1980, 0x19df,\r
+}; /* END of CR_In_New_Tai_Lue */\r
+\r
+/* PROPERTY: 'In_Khmer_Symbols': Block */\r
+static const OnigCodePoint\r
+CR_In_Khmer_Symbols[] = { 1,\r
+0x19e0, 0x19ff,\r
+}; /* END of CR_In_Khmer_Symbols */\r
+\r
+/* PROPERTY: 'In_Buginese': Block */\r
+static const OnigCodePoint\r
+CR_In_Buginese[] = { 1,\r
+0x1a00, 0x1a1f,\r
+}; /* END of CR_In_Buginese */\r
+\r
+/* PROPERTY: 'In_Tai_Tham': Block */\r
+static const OnigCodePoint\r
+CR_In_Tai_Tham[] = { 1,\r
+0x1a20, 0x1aaf,\r
+}; /* END of CR_In_Tai_Tham */\r
+\r
+/* PROPERTY: 'In_Combining_Diacritical_Marks_Extended': Block */\r
+static const OnigCodePoint\r
+CR_In_Combining_Diacritical_Marks_Extended[] = { 1,\r
+0x1ab0, 0x1aff,\r
+}; /* END of CR_In_Combining_Diacritical_Marks_Extended */\r
+\r
+/* PROPERTY: 'In_Balinese': Block */\r
+static const OnigCodePoint\r
+CR_In_Balinese[] = { 1,\r
+0x1b00, 0x1b7f,\r
+}; /* END of CR_In_Balinese */\r
+\r
+/* PROPERTY: 'In_Sundanese': Block */\r
+static const OnigCodePoint\r
+CR_In_Sundanese[] = { 1,\r
+0x1b80, 0x1bbf,\r
+}; /* END of CR_In_Sundanese */\r
+\r
+/* PROPERTY: 'In_Batak': Block */\r
+static const OnigCodePoint\r
+CR_In_Batak[] = { 1,\r
+0x1bc0, 0x1bff,\r
+}; /* END of CR_In_Batak */\r
+\r
+/* PROPERTY: 'In_Lepcha': Block */\r
+static const OnigCodePoint\r
+CR_In_Lepcha[] = { 1,\r
+0x1c00, 0x1c4f,\r
+}; /* END of CR_In_Lepcha */\r
+\r
+/* PROPERTY: 'In_Ol_Chiki': Block */\r
+#define CR_In_Ol_Chiki CR_Ol_Chiki\r
+\r
+/* PROPERTY: 'In_Cyrillic_Extended_C': Block */\r
+static const OnigCodePoint\r
+CR_In_Cyrillic_Extended_C[] = { 1,\r
+0x1c80, 0x1c8f,\r
+}; /* END of CR_In_Cyrillic_Extended_C */\r
+\r
+/* PROPERTY: 'In_Georgian_Extended': Block */\r
+static const OnigCodePoint\r
+CR_In_Georgian_Extended[] = { 1,\r
+0x1c90, 0x1cbf,\r
+}; /* END of CR_In_Georgian_Extended */\r
+\r
+/* PROPERTY: 'In_Sundanese_Supplement': Block */\r
+static const OnigCodePoint\r
+CR_In_Sundanese_Supplement[] = { 1,\r
+0x1cc0, 0x1ccf,\r
+}; /* END of CR_In_Sundanese_Supplement */\r
+\r
+/* PROPERTY: 'In_Vedic_Extensions': Block */\r
+static const OnigCodePoint\r
+CR_In_Vedic_Extensions[] = { 1,\r
+0x1cd0, 0x1cff,\r
+}; /* END of CR_In_Vedic_Extensions */\r
+\r
+/* PROPERTY: 'In_Phonetic_Extensions': Block */\r
+static const OnigCodePoint\r
+CR_In_Phonetic_Extensions[] = { 1,\r
+0x1d00, 0x1d7f,\r
+}; /* END of CR_In_Phonetic_Extensions */\r
+\r
+/* PROPERTY: 'In_Phonetic_Extensions_Supplement': Block */\r
+static const OnigCodePoint\r
+CR_In_Phonetic_Extensions_Supplement[] = { 1,\r
+0x1d80, 0x1dbf,\r
+}; /* END of CR_In_Phonetic_Extensions_Supplement */\r
+\r
+/* PROPERTY: 'In_Combining_Diacritical_Marks_Supplement': Block */\r
+static const OnigCodePoint\r
+CR_In_Combining_Diacritical_Marks_Supplement[] = { 1,\r
+0x1dc0, 0x1dff,\r
+}; /* END of CR_In_Combining_Diacritical_Marks_Supplement */\r
+\r
+/* PROPERTY: 'In_Latin_Extended_Additional': Block */\r
+static const OnigCodePoint\r
+CR_In_Latin_Extended_Additional[] = { 1,\r
+0x1e00, 0x1eff,\r
+}; /* END of CR_In_Latin_Extended_Additional */\r
+\r
+/* PROPERTY: 'In_Greek_Extended': Block */\r
+static const OnigCodePoint\r
+CR_In_Greek_Extended[] = { 1,\r
+0x1f00, 0x1fff,\r
+}; /* END of CR_In_Greek_Extended */\r
+\r
+/* PROPERTY: 'In_General_Punctuation': Block */\r
+static const OnigCodePoint\r
+CR_In_General_Punctuation[] = { 1,\r
+0x2000, 0x206f,\r
+}; /* END of CR_In_General_Punctuation */\r
+\r
+/* PROPERTY: 'In_Superscripts_and_Subscripts': Block */\r
+static const OnigCodePoint\r
+CR_In_Superscripts_and_Subscripts[] = { 1,\r
+0x2070, 0x209f,\r
+}; /* END of CR_In_Superscripts_and_Subscripts */\r
+\r
+/* PROPERTY: 'In_Currency_Symbols': Block */\r
+static const OnigCodePoint\r
+CR_In_Currency_Symbols[] = { 1,\r
+0x20a0, 0x20cf,\r
+}; /* END of CR_In_Currency_Symbols */\r
+\r
+/* PROPERTY: 'In_Combining_Diacritical_Marks_for_Symbols': Block */\r
+static const OnigCodePoint\r
+CR_In_Combining_Diacritical_Marks_for_Symbols[] = { 1,\r
+0x20d0, 0x20ff,\r
+}; /* END of CR_In_Combining_Diacritical_Marks_for_Symbols */\r
+\r
+/* PROPERTY: 'In_Letterlike_Symbols': Block */\r
+static const OnigCodePoint\r
+CR_In_Letterlike_Symbols[] = { 1,\r
+0x2100, 0x214f,\r
+}; /* END of CR_In_Letterlike_Symbols */\r
+\r
+/* PROPERTY: 'In_Number_Forms': Block */\r
+static const OnigCodePoint\r
+CR_In_Number_Forms[] = { 1,\r
+0x2150, 0x218f,\r
+}; /* END of CR_In_Number_Forms */\r
+\r
+/* PROPERTY: 'In_Arrows': Block */\r
+static const OnigCodePoint\r
+CR_In_Arrows[] = { 1,\r
+0x2190, 0x21ff,\r
+}; /* END of CR_In_Arrows */\r
+\r
+/* PROPERTY: 'In_Mathematical_Operators': Block */\r
+static const OnigCodePoint\r
+CR_In_Mathematical_Operators[] = { 1,\r
+0x2200, 0x22ff,\r
+}; /* END of CR_In_Mathematical_Operators */\r
+\r
+/* PROPERTY: 'In_Miscellaneous_Technical': Block */\r
+static const OnigCodePoint\r
+CR_In_Miscellaneous_Technical[] = { 1,\r
+0x2300, 0x23ff,\r
+}; /* END of CR_In_Miscellaneous_Technical */\r
+\r
+/* PROPERTY: 'In_Control_Pictures': Block */\r
+static const OnigCodePoint\r
+CR_In_Control_Pictures[] = { 1,\r
+0x2400, 0x243f,\r
+}; /* END of CR_In_Control_Pictures */\r
+\r
+/* PROPERTY: 'In_Optical_Character_Recognition': Block */\r
+static const OnigCodePoint\r
+CR_In_Optical_Character_Recognition[] = { 1,\r
+0x2440, 0x245f,\r
+}; /* END of CR_In_Optical_Character_Recognition */\r
+\r
+/* PROPERTY: 'In_Enclosed_Alphanumerics': Block */\r
+static const OnigCodePoint\r
+CR_In_Enclosed_Alphanumerics[] = { 1,\r
+0x2460, 0x24ff,\r
+}; /* END of CR_In_Enclosed_Alphanumerics */\r
+\r
+/* PROPERTY: 'In_Box_Drawing': Block */\r
+static const OnigCodePoint\r
+CR_In_Box_Drawing[] = { 1,\r
+0x2500, 0x257f,\r
+}; /* END of CR_In_Box_Drawing */\r
+\r
+/* PROPERTY: 'In_Block_Elements': Block */\r
+static const OnigCodePoint\r
+CR_In_Block_Elements[] = { 1,\r
+0x2580, 0x259f,\r
+}; /* END of CR_In_Block_Elements */\r
+\r
+/* PROPERTY: 'In_Geometric_Shapes': Block */\r
+static const OnigCodePoint\r
+CR_In_Geometric_Shapes[] = { 1,\r
+0x25a0, 0x25ff,\r
+}; /* END of CR_In_Geometric_Shapes */\r
+\r
+/* PROPERTY: 'In_Miscellaneous_Symbols': Block */\r
+static const OnigCodePoint\r
+CR_In_Miscellaneous_Symbols[] = { 1,\r
+0x2600, 0x26ff,\r
+}; /* END of CR_In_Miscellaneous_Symbols */\r
+\r
+/* PROPERTY: 'In_Dingbats': Block */\r
+static const OnigCodePoint\r
+CR_In_Dingbats[] = { 1,\r
+0x2700, 0x27bf,\r
+}; /* END of CR_In_Dingbats */\r
+\r
+/* PROPERTY: 'In_Miscellaneous_Mathematical_Symbols_A': Block */\r
+static const OnigCodePoint\r
+CR_In_Miscellaneous_Mathematical_Symbols_A[] = { 1,\r
+0x27c0, 0x27ef,\r
+}; /* END of CR_In_Miscellaneous_Mathematical_Symbols_A */\r
+\r
+/* PROPERTY: 'In_Supplemental_Arrows_A': Block */\r
+static const OnigCodePoint\r
+CR_In_Supplemental_Arrows_A[] = { 1,\r
+0x27f0, 0x27ff,\r
+}; /* END of CR_In_Supplemental_Arrows_A */\r
+\r
+/* PROPERTY: 'In_Braille_Patterns': Block */\r
+#define CR_In_Braille_Patterns CR_Braille\r
+\r
+/* PROPERTY: 'In_Supplemental_Arrows_B': Block */\r
+static const OnigCodePoint\r
+CR_In_Supplemental_Arrows_B[] = { 1,\r
+0x2900, 0x297f,\r
+}; /* END of CR_In_Supplemental_Arrows_B */\r
+\r
+/* PROPERTY: 'In_Miscellaneous_Mathematical_Symbols_B': Block */\r
+static const OnigCodePoint\r
+CR_In_Miscellaneous_Mathematical_Symbols_B[] = { 1,\r
+0x2980, 0x29ff,\r
+}; /* END of CR_In_Miscellaneous_Mathematical_Symbols_B */\r
+\r
+/* PROPERTY: 'In_Supplemental_Mathematical_Operators': Block */\r
+static const OnigCodePoint\r
+CR_In_Supplemental_Mathematical_Operators[] = { 1,\r
+0x2a00, 0x2aff,\r
+}; /* END of CR_In_Supplemental_Mathematical_Operators */\r
+\r
+/* PROPERTY: 'In_Miscellaneous_Symbols_and_Arrows': Block */\r
+static const OnigCodePoint\r
+CR_In_Miscellaneous_Symbols_and_Arrows[] = { 1,\r
+0x2b00, 0x2bff,\r
+}; /* END of CR_In_Miscellaneous_Symbols_and_Arrows */\r
+\r
+/* PROPERTY: 'In_Glagolitic': Block */\r
+static const OnigCodePoint\r
+CR_In_Glagolitic[] = { 1,\r
+0x2c00, 0x2c5f,\r
+}; /* END of CR_In_Glagolitic */\r
+\r
+/* PROPERTY: 'In_Latin_Extended_C': Block */\r
+static const OnigCodePoint\r
+CR_In_Latin_Extended_C[] = { 1,\r
+0x2c60, 0x2c7f,\r
+}; /* END of CR_In_Latin_Extended_C */\r
+\r
+/* PROPERTY: 'In_Coptic': Block */\r
+static const OnigCodePoint\r
+CR_In_Coptic[] = { 1,\r
+0x2c80, 0x2cff,\r
+}; /* END of CR_In_Coptic */\r
+\r
+/* PROPERTY: 'In_Georgian_Supplement': Block */\r
+static const OnigCodePoint\r
+CR_In_Georgian_Supplement[] = { 1,\r
+0x2d00, 0x2d2f,\r
+}; /* END of CR_In_Georgian_Supplement */\r
+\r
+/* PROPERTY: 'In_Tifinagh': Block */\r
+static const OnigCodePoint\r
+CR_In_Tifinagh[] = { 1,\r
+0x2d30, 0x2d7f,\r
+}; /* END of CR_In_Tifinagh */\r
+\r
+/* PROPERTY: 'In_Ethiopic_Extended': Block */\r
+static const OnigCodePoint\r
+CR_In_Ethiopic_Extended[] = { 1,\r
+0x2d80, 0x2ddf,\r
+}; /* END of CR_In_Ethiopic_Extended */\r
+\r
+/* PROPERTY: 'In_Cyrillic_Extended_A': Block */\r
+static const OnigCodePoint\r
+CR_In_Cyrillic_Extended_A[] = { 1,\r
+0x2de0, 0x2dff,\r
+}; /* END of CR_In_Cyrillic_Extended_A */\r
+\r
+/* PROPERTY: 'In_Supplemental_Punctuation': Block */\r
+static const OnigCodePoint\r
+CR_In_Supplemental_Punctuation[] = { 1,\r
+0x2e00, 0x2e7f,\r
+}; /* END of CR_In_Supplemental_Punctuation */\r
+\r
+/* PROPERTY: 'In_CJK_Radicals_Supplement': Block */\r
+static const OnigCodePoint\r
+CR_In_CJK_Radicals_Supplement[] = { 1,\r
+0x2e80, 0x2eff,\r
+}; /* END of CR_In_CJK_Radicals_Supplement */\r
+\r
+/* PROPERTY: 'In_Kangxi_Radicals': Block */\r
+static const OnigCodePoint\r
+CR_In_Kangxi_Radicals[] = { 1,\r
+0x2f00, 0x2fdf,\r
+}; /* END of CR_In_Kangxi_Radicals */\r
+\r
+/* PROPERTY: 'In_Ideographic_Description_Characters': Block */\r
+static const OnigCodePoint\r
+CR_In_Ideographic_Description_Characters[] = { 1,\r
+0x2ff0, 0x2fff,\r
+}; /* END of CR_In_Ideographic_Description_Characters */\r
+\r
+/* PROPERTY: 'In_CJK_Symbols_and_Punctuation': Block */\r
+static const OnigCodePoint\r
+CR_In_CJK_Symbols_and_Punctuation[] = { 1,\r
+0x3000, 0x303f,\r
+}; /* END of CR_In_CJK_Symbols_and_Punctuation */\r
+\r
+/* PROPERTY: 'In_Hiragana': Block */\r
+static const OnigCodePoint\r
+CR_In_Hiragana[] = { 1,\r
+0x3040, 0x309f,\r
+}; /* END of CR_In_Hiragana */\r
+\r
+/* PROPERTY: 'In_Katakana': Block */\r
+static const OnigCodePoint\r
+CR_In_Katakana[] = { 1,\r
+0x30a0, 0x30ff,\r
+}; /* END of CR_In_Katakana */\r
+\r
+/* PROPERTY: 'In_Bopomofo': Block */\r
+static const OnigCodePoint\r
+CR_In_Bopomofo[] = { 1,\r
+0x3100, 0x312f,\r
+}; /* END of CR_In_Bopomofo */\r
+\r
+/* PROPERTY: 'In_Hangul_Compatibility_Jamo': Block */\r
+static const OnigCodePoint\r
+CR_In_Hangul_Compatibility_Jamo[] = { 1,\r
+0x3130, 0x318f,\r
+}; /* END of CR_In_Hangul_Compatibility_Jamo */\r
+\r
+/* PROPERTY: 'In_Kanbun': Block */\r
+static const OnigCodePoint\r
+CR_In_Kanbun[] = { 1,\r
+0x3190, 0x319f,\r
+}; /* END of CR_In_Kanbun */\r
+\r
+/* PROPERTY: 'In_Bopomofo_Extended': Block */\r
+static const OnigCodePoint\r
+CR_In_Bopomofo_Extended[] = { 1,\r
+0x31a0, 0x31bf,\r
+}; /* END of CR_In_Bopomofo_Extended */\r
+\r
+/* PROPERTY: 'In_CJK_Strokes': Block */\r
+static const OnigCodePoint\r
+CR_In_CJK_Strokes[] = { 1,\r
+0x31c0, 0x31ef,\r
+}; /* END of CR_In_CJK_Strokes */\r
+\r
+/* PROPERTY: 'In_Katakana_Phonetic_Extensions': Block */\r
+static const OnigCodePoint\r
+CR_In_Katakana_Phonetic_Extensions[] = { 1,\r
+0x31f0, 0x31ff,\r
+}; /* END of CR_In_Katakana_Phonetic_Extensions */\r
+\r
+/* PROPERTY: 'In_Enclosed_CJK_Letters_and_Months': Block */\r
+static const OnigCodePoint\r
+CR_In_Enclosed_CJK_Letters_and_Months[] = { 1,\r
+0x3200, 0x32ff,\r
+}; /* END of CR_In_Enclosed_CJK_Letters_and_Months */\r
+\r
+/* PROPERTY: 'In_CJK_Compatibility': Block */\r
+static const OnigCodePoint\r
+CR_In_CJK_Compatibility[] = { 1,\r
+0x3300, 0x33ff,\r
+}; /* END of CR_In_CJK_Compatibility */\r
+\r
+/* PROPERTY: 'In_CJK_Unified_Ideographs_Extension_A': Block */\r
+static const OnigCodePoint\r
+CR_In_CJK_Unified_Ideographs_Extension_A[] = { 1,\r
+0x3400, 0x4dbf,\r
+}; /* END of CR_In_CJK_Unified_Ideographs_Extension_A */\r
+\r
+/* PROPERTY: 'In_Yijing_Hexagram_Symbols': Block */\r
+static const OnigCodePoint\r
+CR_In_Yijing_Hexagram_Symbols[] = { 1,\r
+0x4dc0, 0x4dff,\r
+}; /* END of CR_In_Yijing_Hexagram_Symbols */\r
+\r
+/* PROPERTY: 'In_CJK_Unified_Ideographs': Block */\r
+static const OnigCodePoint\r
+CR_In_CJK_Unified_Ideographs[] = { 1,\r
+0x4e00, 0x9fff,\r
+}; /* END of CR_In_CJK_Unified_Ideographs */\r
+\r
+/* PROPERTY: 'In_Yi_Syllables': Block */\r
+static const OnigCodePoint\r
+CR_In_Yi_Syllables[] = { 1,\r
+0xa000, 0xa48f,\r
+}; /* END of CR_In_Yi_Syllables */\r
+\r
+/* PROPERTY: 'In_Yi_Radicals': Block */\r
+static const OnigCodePoint\r
+CR_In_Yi_Radicals[] = { 1,\r
+0xa490, 0xa4cf,\r
+}; /* END of CR_In_Yi_Radicals */\r
+\r
+/* PROPERTY: 'In_Lisu': Block */\r
+#define CR_In_Lisu CR_Lisu\r
+\r
+/* PROPERTY: 'In_Vai': Block */\r
+static const OnigCodePoint\r
+CR_In_Vai[] = { 1,\r
+0xa500, 0xa63f,\r
+}; /* END of CR_In_Vai */\r
+\r
+/* PROPERTY: 'In_Cyrillic_Extended_B': Block */\r
+static const OnigCodePoint\r
+CR_In_Cyrillic_Extended_B[] = { 1,\r
+0xa640, 0xa69f,\r
+}; /* END of CR_In_Cyrillic_Extended_B */\r
+\r
+/* PROPERTY: 'In_Bamum': Block */\r
+static const OnigCodePoint\r
+CR_In_Bamum[] = { 1,\r
+0xa6a0, 0xa6ff,\r
+}; /* END of CR_In_Bamum */\r
+\r
+/* PROPERTY: 'In_Modifier_Tone_Letters': Block */\r
+static const OnigCodePoint\r
+CR_In_Modifier_Tone_Letters[] = { 1,\r
+0xa700, 0xa71f,\r
+}; /* END of CR_In_Modifier_Tone_Letters */\r
+\r
+/* PROPERTY: 'In_Latin_Extended_D': Block */\r
+static const OnigCodePoint\r
+CR_In_Latin_Extended_D[] = { 1,\r
+0xa720, 0xa7ff,\r
+}; /* END of CR_In_Latin_Extended_D */\r
+\r
+/* PROPERTY: 'In_Syloti_Nagri': Block */\r
+static const OnigCodePoint\r
+CR_In_Syloti_Nagri[] = { 1,\r
+0xa800, 0xa82f,\r
+}; /* END of CR_In_Syloti_Nagri */\r
+\r
+/* PROPERTY: 'In_Common_Indic_Number_Forms': Block */\r
+static const OnigCodePoint\r
+CR_In_Common_Indic_Number_Forms[] = { 1,\r
+0xa830, 0xa83f,\r
+}; /* END of CR_In_Common_Indic_Number_Forms */\r
+\r
+/* PROPERTY: 'In_Phags_pa': Block */\r
+static const OnigCodePoint\r
+CR_In_Phags_pa[] = { 1,\r
+0xa840, 0xa87f,\r
+}; /* END of CR_In_Phags_pa */\r
+\r
+/* PROPERTY: 'In_Saurashtra': Block */\r
+static const OnigCodePoint\r
+CR_In_Saurashtra[] = { 1,\r
+0xa880, 0xa8df,\r
+}; /* END of CR_In_Saurashtra */\r
+\r
+/* PROPERTY: 'In_Devanagari_Extended': Block */\r
+static const OnigCodePoint\r
+CR_In_Devanagari_Extended[] = { 1,\r
+0xa8e0, 0xa8ff,\r
+}; /* END of CR_In_Devanagari_Extended */\r
+\r
+/* PROPERTY: 'In_Kayah_Li': Block */\r
+static const OnigCodePoint\r
+CR_In_Kayah_Li[] = { 1,\r
+0xa900, 0xa92f,\r
+}; /* END of CR_In_Kayah_Li */\r
+\r
+/* PROPERTY: 'In_Rejang': Block */\r
+static const OnigCodePoint\r
+CR_In_Rejang[] = { 1,\r
+0xa930, 0xa95f,\r
+}; /* END of CR_In_Rejang */\r
+\r
+/* PROPERTY: 'In_Hangul_Jamo_Extended_A': Block */\r
+static const OnigCodePoint\r
+CR_In_Hangul_Jamo_Extended_A[] = { 1,\r
+0xa960, 0xa97f,\r
+}; /* END of CR_In_Hangul_Jamo_Extended_A */\r
+\r
+/* PROPERTY: 'In_Javanese': Block */\r
+static const OnigCodePoint\r
+CR_In_Javanese[] = { 1,\r
+0xa980, 0xa9df,\r
+}; /* END of CR_In_Javanese */\r
+\r
+/* PROPERTY: 'In_Myanmar_Extended_B': Block */\r
+static const OnigCodePoint\r
+CR_In_Myanmar_Extended_B[] = { 1,\r
+0xa9e0, 0xa9ff,\r
+}; /* END of CR_In_Myanmar_Extended_B */\r
+\r
+/* PROPERTY: 'In_Cham': Block */\r
+static const OnigCodePoint\r
+CR_In_Cham[] = { 1,\r
+0xaa00, 0xaa5f,\r
+}; /* END of CR_In_Cham */\r
+\r
+/* PROPERTY: 'In_Myanmar_Extended_A': Block */\r
+static const OnigCodePoint\r
+CR_In_Myanmar_Extended_A[] = { 1,\r
+0xaa60, 0xaa7f,\r
+}; /* END of CR_In_Myanmar_Extended_A */\r
+\r
+/* PROPERTY: 'In_Tai_Viet': Block */\r
+static const OnigCodePoint\r
+CR_In_Tai_Viet[] = { 1,\r
+0xaa80, 0xaadf,\r
+}; /* END of CR_In_Tai_Viet */\r
+\r
+/* PROPERTY: 'In_Meetei_Mayek_Extensions': Block */\r
+static const OnigCodePoint\r
+CR_In_Meetei_Mayek_Extensions[] = { 1,\r
+0xaae0, 0xaaff,\r
+}; /* END of CR_In_Meetei_Mayek_Extensions */\r
+\r
+/* PROPERTY: 'In_Ethiopic_Extended_A': Block */\r
+static const OnigCodePoint\r
+CR_In_Ethiopic_Extended_A[] = { 1,\r
+0xab00, 0xab2f,\r
+}; /* END of CR_In_Ethiopic_Extended_A */\r
+\r
+/* PROPERTY: 'In_Latin_Extended_E': Block */\r
+static const OnigCodePoint\r
+CR_In_Latin_Extended_E[] = { 1,\r
+0xab30, 0xab6f,\r
+}; /* END of CR_In_Latin_Extended_E */\r
+\r
+/* PROPERTY: 'In_Cherokee_Supplement': Block */\r
+static const OnigCodePoint\r
+CR_In_Cherokee_Supplement[] = { 1,\r
+0xab70, 0xabbf,\r
+}; /* END of CR_In_Cherokee_Supplement */\r
+\r
+/* PROPERTY: 'In_Meetei_Mayek': Block */\r
+static const OnigCodePoint\r
+CR_In_Meetei_Mayek[] = { 1,\r
+0xabc0, 0xabff,\r
+}; /* END of CR_In_Meetei_Mayek */\r
+\r
+/* PROPERTY: 'In_Hangul_Syllables': Block */\r
+static const OnigCodePoint\r
+CR_In_Hangul_Syllables[] = { 1,\r
+0xac00, 0xd7af,\r
+}; /* END of CR_In_Hangul_Syllables */\r
+\r
+/* PROPERTY: 'In_Hangul_Jamo_Extended_B': Block */\r
+static const OnigCodePoint\r
+CR_In_Hangul_Jamo_Extended_B[] = { 1,\r
+0xd7b0, 0xd7ff,\r
+}; /* END of CR_In_Hangul_Jamo_Extended_B */\r
+\r
+/* PROPERTY: 'In_High_Surrogates': Block */\r
+static const OnigCodePoint\r
+CR_In_High_Surrogates[] = { 1,\r
+0xd800, 0xdb7f,\r
+}; /* END of CR_In_High_Surrogates */\r
+\r
+/* PROPERTY: 'In_High_Private_Use_Surrogates': Block */\r
+static const OnigCodePoint\r
+CR_In_High_Private_Use_Surrogates[] = { 1,\r
+0xdb80, 0xdbff,\r
+}; /* END of CR_In_High_Private_Use_Surrogates */\r
+\r
+/* PROPERTY: 'In_Low_Surrogates': Block */\r
+static const OnigCodePoint\r
+CR_In_Low_Surrogates[] = { 1,\r
+0xdc00, 0xdfff,\r
+}; /* END of CR_In_Low_Surrogates */\r
+\r
+/* PROPERTY: 'In_Private_Use_Area': Block */\r
+static const OnigCodePoint\r
+CR_In_Private_Use_Area[] = { 1,\r
+0xe000, 0xf8ff,\r
+}; /* END of CR_In_Private_Use_Area */\r
+\r
+/* PROPERTY: 'In_CJK_Compatibility_Ideographs': Block */\r
+static const OnigCodePoint\r
+CR_In_CJK_Compatibility_Ideographs[] = { 1,\r
+0xf900, 0xfaff,\r
+}; /* END of CR_In_CJK_Compatibility_Ideographs */\r
+\r
+/* PROPERTY: 'In_Alphabetic_Presentation_Forms': Block */\r
+static const OnigCodePoint\r
+CR_In_Alphabetic_Presentation_Forms[] = { 1,\r
+0xfb00, 0xfb4f,\r
+}; /* END of CR_In_Alphabetic_Presentation_Forms */\r
+\r
+/* PROPERTY: 'In_Arabic_Presentation_Forms_A': Block */\r
+static const OnigCodePoint\r
+CR_In_Arabic_Presentation_Forms_A[] = { 1,\r
+0xfb50, 0xfdff,\r
+}; /* END of CR_In_Arabic_Presentation_Forms_A */\r
+\r
+/* PROPERTY: 'In_Variation_Selectors': Block */\r
+static const OnigCodePoint\r
+CR_In_Variation_Selectors[] = { 1,\r
+0xfe00, 0xfe0f,\r
+}; /* END of CR_In_Variation_Selectors */\r
+\r
+/* PROPERTY: 'In_Vertical_Forms': Block */\r
+static const OnigCodePoint\r
+CR_In_Vertical_Forms[] = { 1,\r
+0xfe10, 0xfe1f,\r
+}; /* END of CR_In_Vertical_Forms */\r
+\r
+/* PROPERTY: 'In_Combining_Half_Marks': Block */\r
+static const OnigCodePoint\r
+CR_In_Combining_Half_Marks[] = { 1,\r
+0xfe20, 0xfe2f,\r
+}; /* END of CR_In_Combining_Half_Marks */\r
+\r
+/* PROPERTY: 'In_CJK_Compatibility_Forms': Block */\r
+static const OnigCodePoint\r
+CR_In_CJK_Compatibility_Forms[] = { 1,\r
+0xfe30, 0xfe4f,\r
+}; /* END of CR_In_CJK_Compatibility_Forms */\r
+\r
+/* PROPERTY: 'In_Small_Form_Variants': Block */\r
+static const OnigCodePoint\r
+CR_In_Small_Form_Variants[] = { 1,\r
+0xfe50, 0xfe6f,\r
+}; /* END of CR_In_Small_Form_Variants */\r
+\r
+/* PROPERTY: 'In_Arabic_Presentation_Forms_B': Block */\r
+static const OnigCodePoint\r
+CR_In_Arabic_Presentation_Forms_B[] = { 1,\r
+0xfe70, 0xfeff,\r
+}; /* END of CR_In_Arabic_Presentation_Forms_B */\r
+\r
+/* PROPERTY: 'In_Halfwidth_and_Fullwidth_Forms': Block */\r
+static const OnigCodePoint\r
+CR_In_Halfwidth_and_Fullwidth_Forms[] = { 1,\r
+0xff00, 0xffef,\r
+}; /* END of CR_In_Halfwidth_and_Fullwidth_Forms */\r
+\r
+/* PROPERTY: 'In_Specials': Block */\r
+static const OnigCodePoint\r
+CR_In_Specials[] = { 1,\r
+0xfff0, 0xffff,\r
+}; /* END of CR_In_Specials */\r
+\r
+/* PROPERTY: 'In_Linear_B_Syllabary': Block */\r
+static const OnigCodePoint\r
+CR_In_Linear_B_Syllabary[] = { 1,\r
+0x10000, 0x1007f,\r
+}; /* END of CR_In_Linear_B_Syllabary */\r
+\r
+/* PROPERTY: 'In_Linear_B_Ideograms': Block */\r
+static const OnigCodePoint\r
+CR_In_Linear_B_Ideograms[] = { 1,\r
+0x10080, 0x100ff,\r
+}; /* END of CR_In_Linear_B_Ideograms */\r
+\r
+/* PROPERTY: 'In_Aegean_Numbers': Block */\r
+static const OnigCodePoint\r
+CR_In_Aegean_Numbers[] = { 1,\r
+0x10100, 0x1013f,\r
+}; /* END of CR_In_Aegean_Numbers */\r
+\r
+/* PROPERTY: 'In_Ancient_Greek_Numbers': Block */\r
+static const OnigCodePoint\r
+CR_In_Ancient_Greek_Numbers[] = { 1,\r
+0x10140, 0x1018f,\r
+}; /* END of CR_In_Ancient_Greek_Numbers */\r
+\r
+/* PROPERTY: 'In_Ancient_Symbols': Block */\r
+static const OnigCodePoint\r
+CR_In_Ancient_Symbols[] = { 1,\r
+0x10190, 0x101cf,\r
+}; /* END of CR_In_Ancient_Symbols */\r
+\r
+/* PROPERTY: 'In_Phaistos_Disc': Block */\r
+static const OnigCodePoint\r
+CR_In_Phaistos_Disc[] = { 1,\r
+0x101d0, 0x101ff,\r
+}; /* END of CR_In_Phaistos_Disc */\r
+\r
+/* PROPERTY: 'In_Lycian': Block */\r
+static const OnigCodePoint\r
+CR_In_Lycian[] = { 1,\r
+0x10280, 0x1029f,\r
+}; /* END of CR_In_Lycian */\r
+\r
+/* PROPERTY: 'In_Carian': Block */\r
+static const OnigCodePoint\r
+CR_In_Carian[] = { 1,\r
+0x102a0, 0x102df,\r
+}; /* END of CR_In_Carian */\r
+\r
+/* PROPERTY: 'In_Coptic_Epact_Numbers': Block */\r
+static const OnigCodePoint\r
+CR_In_Coptic_Epact_Numbers[] = { 1,\r
+0x102e0, 0x102ff,\r
+}; /* END of CR_In_Coptic_Epact_Numbers */\r
+\r
+/* PROPERTY: 'In_Old_Italic': Block */\r
+static const OnigCodePoint\r
+CR_In_Old_Italic[] = { 1,\r
+0x10300, 0x1032f,\r
+}; /* END of CR_In_Old_Italic */\r
+\r
+/* PROPERTY: 'In_Gothic': Block */\r
+static const OnigCodePoint\r
+CR_In_Gothic[] = { 1,\r
+0x10330, 0x1034f,\r
+}; /* END of CR_In_Gothic */\r
+\r
+/* PROPERTY: 'In_Old_Permic': Block */\r
+static const OnigCodePoint\r
+CR_In_Old_Permic[] = { 1,\r
+0x10350, 0x1037f,\r
+}; /* END of CR_In_Old_Permic */\r
+\r
+/* PROPERTY: 'In_Ugaritic': Block */\r
+static const OnigCodePoint\r
+CR_In_Ugaritic[] = { 1,\r
+0x10380, 0x1039f,\r
+}; /* END of CR_In_Ugaritic */\r
+\r
+/* PROPERTY: 'In_Old_Persian': Block */\r
+static const OnigCodePoint\r
+CR_In_Old_Persian[] = { 1,\r
+0x103a0, 0x103df,\r
+}; /* END of CR_In_Old_Persian */\r
+\r
+/* PROPERTY: 'In_Deseret': Block */\r
+#define CR_In_Deseret CR_Deseret\r
+\r
+/* PROPERTY: 'In_Shavian': Block */\r
+#define CR_In_Shavian CR_Shavian\r
+\r
+/* PROPERTY: 'In_Osmanya': Block */\r
+static const OnigCodePoint\r
+CR_In_Osmanya[] = { 1,\r
+0x10480, 0x104af,\r
+}; /* END of CR_In_Osmanya */\r
+\r
+/* PROPERTY: 'In_Osage': Block */\r
+static const OnigCodePoint\r
+CR_In_Osage[] = { 1,\r
+0x104b0, 0x104ff,\r
+}; /* END of CR_In_Osage */\r
+\r
+/* PROPERTY: 'In_Elbasan': Block */\r
+static const OnigCodePoint\r
+CR_In_Elbasan[] = { 1,\r
+0x10500, 0x1052f,\r
+}; /* END of CR_In_Elbasan */\r
+\r
+/* PROPERTY: 'In_Caucasian_Albanian': Block */\r
+static const OnigCodePoint\r
+CR_In_Caucasian_Albanian[] = { 1,\r
+0x10530, 0x1056f,\r
+}; /* END of CR_In_Caucasian_Albanian */\r
+\r
+/* PROPERTY: 'In_Linear_A': Block */\r
+static const OnigCodePoint\r
+CR_In_Linear_A[] = { 1,\r
+0x10600, 0x1077f,\r
+}; /* END of CR_In_Linear_A */\r
+\r
+/* PROPERTY: 'In_Cypriot_Syllabary': Block */\r
+static const OnigCodePoint\r
+CR_In_Cypriot_Syllabary[] = { 1,\r
+0x10800, 0x1083f,\r
+}; /* END of CR_In_Cypriot_Syllabary */\r
+\r
+/* PROPERTY: 'In_Imperial_Aramaic': Block */\r
+static const OnigCodePoint\r
+CR_In_Imperial_Aramaic[] = { 1,\r
+0x10840, 0x1085f,\r
+}; /* END of CR_In_Imperial_Aramaic */\r
+\r
+/* PROPERTY: 'In_Palmyrene': Block */\r
+#define CR_In_Palmyrene CR_Palmyrene\r
+\r
+/* PROPERTY: 'In_Nabataean': Block */\r
+static const OnigCodePoint\r
+CR_In_Nabataean[] = { 1,\r
+0x10880, 0x108af,\r
+}; /* END of CR_In_Nabataean */\r
+\r
+/* PROPERTY: 'In_Hatran': Block */\r
+static const OnigCodePoint\r
+CR_In_Hatran[] = { 1,\r
+0x108e0, 0x108ff,\r
+}; /* END of CR_In_Hatran */\r
+\r
+/* PROPERTY: 'In_Phoenician': Block */\r
+static const OnigCodePoint\r
+CR_In_Phoenician[] = { 1,\r
+0x10900, 0x1091f,\r
+}; /* END of CR_In_Phoenician */\r
+\r
+/* PROPERTY: 'In_Lydian': Block */\r
+static const OnigCodePoint\r
+CR_In_Lydian[] = { 1,\r
+0x10920, 0x1093f,\r
+}; /* END of CR_In_Lydian */\r
+\r
+/* PROPERTY: 'In_Meroitic_Hieroglyphs': Block */\r
+#define CR_In_Meroitic_Hieroglyphs CR_Meroitic_Hieroglyphs\r
+\r
+/* PROPERTY: 'In_Meroitic_Cursive': Block */\r
+static const OnigCodePoint\r
+CR_In_Meroitic_Cursive[] = { 1,\r
+0x109a0, 0x109ff,\r
+}; /* END of CR_In_Meroitic_Cursive */\r
+\r
+/* PROPERTY: 'In_Kharoshthi': Block */\r
+static const OnigCodePoint\r
+CR_In_Kharoshthi[] = { 1,\r
+0x10a00, 0x10a5f,\r
+}; /* END of CR_In_Kharoshthi */\r
+\r
+/* PROPERTY: 'In_Old_South_Arabian': Block */\r
+#define CR_In_Old_South_Arabian CR_Old_South_Arabian\r
+\r
+/* PROPERTY: 'In_Old_North_Arabian': Block */\r
+#define CR_In_Old_North_Arabian CR_Old_North_Arabian\r
+\r
+/* PROPERTY: 'In_Manichaean': Block */\r
+static const OnigCodePoint\r
+CR_In_Manichaean[] = { 1,\r
+0x10ac0, 0x10aff,\r
+}; /* END of CR_In_Manichaean */\r
+\r
+/* PROPERTY: 'In_Avestan': Block */\r
+static const OnigCodePoint\r
+CR_In_Avestan[] = { 1,\r
+0x10b00, 0x10b3f,\r
+}; /* END of CR_In_Avestan */\r
+\r
+/* PROPERTY: 'In_Inscriptional_Parthian': Block */\r
+static const OnigCodePoint\r
+CR_In_Inscriptional_Parthian[] = { 1,\r
+0x10b40, 0x10b5f,\r
+}; /* END of CR_In_Inscriptional_Parthian */\r
+\r
+/* PROPERTY: 'In_Inscriptional_Pahlavi': Block */\r
+static const OnigCodePoint\r
+CR_In_Inscriptional_Pahlavi[] = { 1,\r
+0x10b60, 0x10b7f,\r
+}; /* END of CR_In_Inscriptional_Pahlavi */\r
+\r
+/* PROPERTY: 'In_Psalter_Pahlavi': Block */\r
+static const OnigCodePoint\r
+CR_In_Psalter_Pahlavi[] = { 1,\r
+0x10b80, 0x10baf,\r
+}; /* END of CR_In_Psalter_Pahlavi */\r
+\r
+/* PROPERTY: 'In_Old_Turkic': Block */\r
+static const OnigCodePoint\r
+CR_In_Old_Turkic[] = { 1,\r
+0x10c00, 0x10c4f,\r
+}; /* END of CR_In_Old_Turkic */\r
+\r
+/* PROPERTY: 'In_Old_Hungarian': Block */\r
+static const OnigCodePoint\r
+CR_In_Old_Hungarian[] = { 1,\r
+0x10c80, 0x10cff,\r
+}; /* END of CR_In_Old_Hungarian */\r
+\r
+/* PROPERTY: 'In_Hanifi_Rohingya': Block */\r
+static const OnigCodePoint\r
+CR_In_Hanifi_Rohingya[] = { 1,\r
+0x10d00, 0x10d3f,\r
+}; /* END of CR_In_Hanifi_Rohingya */\r
+\r
+/* PROPERTY: 'In_Rumi_Numeral_Symbols': Block */\r
+static const OnigCodePoint\r
+CR_In_Rumi_Numeral_Symbols[] = { 1,\r
+0x10e60, 0x10e7f,\r
+}; /* END of CR_In_Rumi_Numeral_Symbols */\r
+\r
+/* PROPERTY: 'In_Old_Sogdian': Block */\r
+static const OnigCodePoint\r
+CR_In_Old_Sogdian[] = { 1,\r
+0x10f00, 0x10f2f,\r
+}; /* END of CR_In_Old_Sogdian */\r
+\r
+/* PROPERTY: 'In_Sogdian': Block */\r
+static const OnigCodePoint\r
+CR_In_Sogdian[] = { 1,\r
+0x10f30, 0x10f6f,\r
+}; /* END of CR_In_Sogdian */\r
+\r
+/* PROPERTY: 'In_Brahmi': Block */\r
+static const OnigCodePoint\r
+CR_In_Brahmi[] = { 1,\r
+0x11000, 0x1107f,\r
+}; /* END of CR_In_Brahmi */\r
+\r
+/* PROPERTY: 'In_Kaithi': Block */\r
+static const OnigCodePoint\r
+CR_In_Kaithi[] = { 1,\r
+0x11080, 0x110cf,\r
+}; /* END of CR_In_Kaithi */\r
+\r
+/* PROPERTY: 'In_Sora_Sompeng': Block */\r
+static const OnigCodePoint\r
+CR_In_Sora_Sompeng[] = { 1,\r
+0x110d0, 0x110ff,\r
+}; /* END of CR_In_Sora_Sompeng */\r
+\r
+/* PROPERTY: 'In_Chakma': Block */\r
+static const OnigCodePoint\r
+CR_In_Chakma[] = { 1,\r
+0x11100, 0x1114f,\r
+}; /* END of CR_In_Chakma */\r
+\r
+/* PROPERTY: 'In_Mahajani': Block */\r
+static const OnigCodePoint\r
+CR_In_Mahajani[] = { 1,\r
+0x11150, 0x1117f,\r
+}; /* END of CR_In_Mahajani */\r
+\r
+/* PROPERTY: 'In_Sharada': Block */\r
+static const OnigCodePoint\r
+CR_In_Sharada[] = { 1,\r
+0x11180, 0x111df,\r
+}; /* END of CR_In_Sharada */\r
+\r
+/* PROPERTY: 'In_Sinhala_Archaic_Numbers': Block */\r
+static const OnigCodePoint\r
+CR_In_Sinhala_Archaic_Numbers[] = { 1,\r
+0x111e0, 0x111ff,\r
+}; /* END of CR_In_Sinhala_Archaic_Numbers */\r
+\r
+/* PROPERTY: 'In_Khojki': Block */\r
+static const OnigCodePoint\r
+CR_In_Khojki[] = { 1,\r
+0x11200, 0x1124f,\r
+}; /* END of CR_In_Khojki */\r
+\r
+/* PROPERTY: 'In_Multani': Block */\r
+static const OnigCodePoint\r
+CR_In_Multani[] = { 1,\r
+0x11280, 0x112af,\r
+}; /* END of CR_In_Multani */\r
+\r
+/* PROPERTY: 'In_Khudawadi': Block */\r
+static const OnigCodePoint\r
+CR_In_Khudawadi[] = { 1,\r
+0x112b0, 0x112ff,\r
+}; /* END of CR_In_Khudawadi */\r
+\r
+/* PROPERTY: 'In_Grantha': Block */\r
+static const OnigCodePoint\r
+CR_In_Grantha[] = { 1,\r
+0x11300, 0x1137f,\r
+}; /* END of CR_In_Grantha */\r
+\r
+/* PROPERTY: 'In_Newa': Block */\r
+static const OnigCodePoint\r
+CR_In_Newa[] = { 1,\r
+0x11400, 0x1147f,\r
+}; /* END of CR_In_Newa */\r
+\r
+/* PROPERTY: 'In_Tirhuta': Block */\r
+static const OnigCodePoint\r
+CR_In_Tirhuta[] = { 1,\r
+0x11480, 0x114df,\r
+}; /* END of CR_In_Tirhuta */\r
+\r
+/* PROPERTY: 'In_Siddham': Block */\r
+static const OnigCodePoint\r
+CR_In_Siddham[] = { 1,\r
+0x11580, 0x115ff,\r
+}; /* END of CR_In_Siddham */\r
+\r
+/* PROPERTY: 'In_Modi': Block */\r
+static const OnigCodePoint\r
+CR_In_Modi[] = { 1,\r
+0x11600, 0x1165f,\r
+}; /* END of CR_In_Modi */\r
+\r
+/* PROPERTY: 'In_Mongolian_Supplement': Block */\r
+static const OnigCodePoint\r
+CR_In_Mongolian_Supplement[] = { 1,\r
+0x11660, 0x1167f,\r
+}; /* END of CR_In_Mongolian_Supplement */\r
+\r
+/* PROPERTY: 'In_Takri': Block */\r
+static const OnigCodePoint\r
+CR_In_Takri[] = { 1,\r
+0x11680, 0x116cf,\r
+}; /* END of CR_In_Takri */\r
+\r
+/* PROPERTY: 'In_Ahom': Block */\r
+static const OnigCodePoint\r
+CR_In_Ahom[] = { 1,\r
+0x11700, 0x1173f,\r
+}; /* END of CR_In_Ahom */\r
+\r
+/* PROPERTY: 'In_Dogra': Block */\r
+static const OnigCodePoint\r
+CR_In_Dogra[] = { 1,\r
+0x11800, 0x1184f,\r
+}; /* END of CR_In_Dogra */\r
+\r
+/* PROPERTY: 'In_Warang_Citi': Block */\r
+static const OnigCodePoint\r
+CR_In_Warang_Citi[] = { 1,\r
+0x118a0, 0x118ff,\r
+}; /* END of CR_In_Warang_Citi */\r
+\r
+/* PROPERTY: 'In_Zanabazar_Square': Block */\r
+static const OnigCodePoint\r
+CR_In_Zanabazar_Square[] = { 1,\r
+0x11a00, 0x11a4f,\r
+}; /* END of CR_In_Zanabazar_Square */\r
+\r
+/* PROPERTY: 'In_Soyombo': Block */\r
+static const OnigCodePoint\r
+CR_In_Soyombo[] = { 1,\r
+0x11a50, 0x11aaf,\r
+}; /* END of CR_In_Soyombo */\r
+\r
+/* PROPERTY: 'In_Pau_Cin_Hau': Block */\r
+static const OnigCodePoint\r
+CR_In_Pau_Cin_Hau[] = { 1,\r
+0x11ac0, 0x11aff,\r
+}; /* END of CR_In_Pau_Cin_Hau */\r
+\r
+/* PROPERTY: 'In_Bhaiksuki': Block */\r
+static const OnigCodePoint\r
+CR_In_Bhaiksuki[] = { 1,\r
+0x11c00, 0x11c6f,\r
+}; /* END of CR_In_Bhaiksuki */\r
+\r
+/* PROPERTY: 'In_Marchen': Block */\r
+static const OnigCodePoint\r
+CR_In_Marchen[] = { 1,\r
+0x11c70, 0x11cbf,\r
+}; /* END of CR_In_Marchen */\r
+\r
+/* PROPERTY: 'In_Masaram_Gondi': Block */\r
+static const OnigCodePoint\r
+CR_In_Masaram_Gondi[] = { 1,\r
+0x11d00, 0x11d5f,\r
+}; /* END of CR_In_Masaram_Gondi */\r
+\r
+/* PROPERTY: 'In_Gunjala_Gondi': Block */\r
+static const OnigCodePoint\r
+CR_In_Gunjala_Gondi[] = { 1,\r
+0x11d60, 0x11daf,\r
+}; /* END of CR_In_Gunjala_Gondi */\r
+\r
+/* PROPERTY: 'In_Makasar': Block */\r
+static const OnigCodePoint\r
+CR_In_Makasar[] = { 1,\r
+0x11ee0, 0x11eff,\r
+}; /* END of CR_In_Makasar */\r
+\r
+/* PROPERTY: 'In_Cuneiform': Block */\r
+static const OnigCodePoint\r
+CR_In_Cuneiform[] = { 1,\r
+0x12000, 0x123ff,\r
+}; /* END of CR_In_Cuneiform */\r
+\r
+/* PROPERTY: 'In_Cuneiform_Numbers_and_Punctuation': Block */\r
+static const OnigCodePoint\r
+CR_In_Cuneiform_Numbers_and_Punctuation[] = { 1,\r
+0x12400, 0x1247f,\r
+}; /* END of CR_In_Cuneiform_Numbers_and_Punctuation */\r
+\r
+/* PROPERTY: 'In_Early_Dynastic_Cuneiform': Block */\r
+static const OnigCodePoint\r
+CR_In_Early_Dynastic_Cuneiform[] = { 1,\r
+0x12480, 0x1254f,\r
+}; /* END of CR_In_Early_Dynastic_Cuneiform */\r
+\r
+/* PROPERTY: 'In_Egyptian_Hieroglyphs': Block */\r
+static const OnigCodePoint\r
+CR_In_Egyptian_Hieroglyphs[] = { 1,\r
+0x13000, 0x1342f,\r
+}; /* END of CR_In_Egyptian_Hieroglyphs */\r
+\r
+/* PROPERTY: 'In_Anatolian_Hieroglyphs': Block */\r
+static const OnigCodePoint\r
+CR_In_Anatolian_Hieroglyphs[] = { 1,\r
+0x14400, 0x1467f,\r
+}; /* END of CR_In_Anatolian_Hieroglyphs */\r
+\r
+/* PROPERTY: 'In_Bamum_Supplement': Block */\r
+static const OnigCodePoint\r
+CR_In_Bamum_Supplement[] = { 1,\r
+0x16800, 0x16a3f,\r
+}; /* END of CR_In_Bamum_Supplement */\r
+\r
+/* PROPERTY: 'In_Mro': Block */\r
+static const OnigCodePoint\r
+CR_In_Mro[] = { 1,\r
+0x16a40, 0x16a6f,\r
+}; /* END of CR_In_Mro */\r
+\r
+/* PROPERTY: 'In_Bassa_Vah': Block */\r
+static const OnigCodePoint\r
+CR_In_Bassa_Vah[] = { 1,\r
+0x16ad0, 0x16aff,\r
+}; /* END of CR_In_Bassa_Vah */\r
+\r
+/* PROPERTY: 'In_Pahawh_Hmong': Block */\r
+static const OnigCodePoint\r
+CR_In_Pahawh_Hmong[] = { 1,\r
+0x16b00, 0x16b8f,\r
+}; /* END of CR_In_Pahawh_Hmong */\r
+\r
+/* PROPERTY: 'In_Medefaidrin': Block */\r
+static const OnigCodePoint\r
+CR_In_Medefaidrin[] = { 1,\r
+0x16e40, 0x16e9f,\r
+}; /* END of CR_In_Medefaidrin */\r
+\r
+/* PROPERTY: 'In_Miao': Block */\r
+static const OnigCodePoint\r
+CR_In_Miao[] = { 1,\r
+0x16f00, 0x16f9f,\r
+}; /* END of CR_In_Miao */\r
+\r
+/* PROPERTY: 'In_Ideographic_Symbols_and_Punctuation': Block */\r
+static const OnigCodePoint\r
+CR_In_Ideographic_Symbols_and_Punctuation[] = { 1,\r
+0x16fe0, 0x16fff,\r
+}; /* END of CR_In_Ideographic_Symbols_and_Punctuation */\r
+\r
+/* PROPERTY: 'In_Tangut': Block */\r
+static const OnigCodePoint\r
+CR_In_Tangut[] = { 1,\r
+0x17000, 0x187ff,\r
+}; /* END of CR_In_Tangut */\r
+\r
+/* PROPERTY: 'In_Tangut_Components': Block */\r
+static const OnigCodePoint\r
+CR_In_Tangut_Components[] = { 1,\r
+0x18800, 0x18aff,\r
+}; /* END of CR_In_Tangut_Components */\r
+\r
+/* PROPERTY: 'In_Kana_Supplement': Block */\r
+static const OnigCodePoint\r
+CR_In_Kana_Supplement[] = { 1,\r
+0x1b000, 0x1b0ff,\r
+}; /* END of CR_In_Kana_Supplement */\r
+\r
+/* PROPERTY: 'In_Kana_Extended_A': Block */\r
+static const OnigCodePoint\r
+CR_In_Kana_Extended_A[] = { 1,\r
+0x1b100, 0x1b12f,\r
+}; /* END of CR_In_Kana_Extended_A */\r
+\r
+/* PROPERTY: 'In_Nushu': Block */\r
+static const OnigCodePoint\r
+CR_In_Nushu[] = { 1,\r
+0x1b170, 0x1b2ff,\r
+}; /* END of CR_In_Nushu */\r
+\r
+/* PROPERTY: 'In_Duployan': Block */\r
+static const OnigCodePoint\r
+CR_In_Duployan[] = { 1,\r
+0x1bc00, 0x1bc9f,\r
+}; /* END of CR_In_Duployan */\r
+\r
+/* PROPERTY: 'In_Shorthand_Format_Controls': Block */\r
+static const OnigCodePoint\r
+CR_In_Shorthand_Format_Controls[] = { 1,\r
+0x1bca0, 0x1bcaf,\r
+}; /* END of CR_In_Shorthand_Format_Controls */\r
+\r
+/* PROPERTY: 'In_Byzantine_Musical_Symbols': Block */\r
+static const OnigCodePoint\r
+CR_In_Byzantine_Musical_Symbols[] = { 1,\r
+0x1d000, 0x1d0ff,\r
+}; /* END of CR_In_Byzantine_Musical_Symbols */\r
+\r
+/* PROPERTY: 'In_Musical_Symbols': Block */\r
+static const OnigCodePoint\r
+CR_In_Musical_Symbols[] = { 1,\r
+0x1d100, 0x1d1ff,\r
+}; /* END of CR_In_Musical_Symbols */\r
+\r
+/* PROPERTY: 'In_Ancient_Greek_Musical_Notation': Block */\r
+static const OnigCodePoint\r
+CR_In_Ancient_Greek_Musical_Notation[] = { 1,\r
+0x1d200, 0x1d24f,\r
+}; /* END of CR_In_Ancient_Greek_Musical_Notation */\r
+\r
+/* PROPERTY: 'In_Mayan_Numerals': Block */\r
+static const OnigCodePoint\r
+CR_In_Mayan_Numerals[] = { 1,\r
+0x1d2e0, 0x1d2ff,\r
+}; /* END of CR_In_Mayan_Numerals */\r
+\r
+/* PROPERTY: 'In_Tai_Xuan_Jing_Symbols': Block */\r
+static const OnigCodePoint\r
+CR_In_Tai_Xuan_Jing_Symbols[] = { 1,\r
+0x1d300, 0x1d35f,\r
+}; /* END of CR_In_Tai_Xuan_Jing_Symbols */\r
+\r
+/* PROPERTY: 'In_Counting_Rod_Numerals': Block */\r
+static const OnigCodePoint\r
+CR_In_Counting_Rod_Numerals[] = { 1,\r
+0x1d360, 0x1d37f,\r
+}; /* END of CR_In_Counting_Rod_Numerals */\r
+\r
+/* PROPERTY: 'In_Mathematical_Alphanumeric_Symbols': Block */\r
+static const OnigCodePoint\r
+CR_In_Mathematical_Alphanumeric_Symbols[] = { 1,\r
+0x1d400, 0x1d7ff,\r
+}; /* END of CR_In_Mathematical_Alphanumeric_Symbols */\r
+\r
+/* PROPERTY: 'In_Sutton_SignWriting': Block */\r
+static const OnigCodePoint\r
+CR_In_Sutton_SignWriting[] = { 1,\r
+0x1d800, 0x1daaf,\r
+}; /* END of CR_In_Sutton_SignWriting */\r
+\r
+/* PROPERTY: 'In_Glagolitic_Supplement': Block */\r
+static const OnigCodePoint\r
+CR_In_Glagolitic_Supplement[] = { 1,\r
+0x1e000, 0x1e02f,\r
+}; /* END of CR_In_Glagolitic_Supplement */\r
+\r
+/* PROPERTY: 'In_Mende_Kikakui': Block */\r
+static const OnigCodePoint\r
+CR_In_Mende_Kikakui[] = { 1,\r
+0x1e800, 0x1e8df,\r
+}; /* END of CR_In_Mende_Kikakui */\r
+\r
+/* PROPERTY: 'In_Adlam': Block */\r
+static const OnigCodePoint\r
+CR_In_Adlam[] = { 1,\r
+0x1e900, 0x1e95f,\r
+}; /* END of CR_In_Adlam */\r
+\r
+/* PROPERTY: 'In_Indic_Siyaq_Numbers': Block */\r
+static const OnigCodePoint\r
+CR_In_Indic_Siyaq_Numbers[] = { 1,\r
+0x1ec70, 0x1ecbf,\r
+}; /* END of CR_In_Indic_Siyaq_Numbers */\r
+\r
+/* PROPERTY: 'In_Arabic_Mathematical_Alphabetic_Symbols': Block */\r
+static const OnigCodePoint\r
+CR_In_Arabic_Mathematical_Alphabetic_Symbols[] = { 1,\r
+0x1ee00, 0x1eeff,\r
+}; /* END of CR_In_Arabic_Mathematical_Alphabetic_Symbols */\r
+\r
+/* PROPERTY: 'In_Mahjong_Tiles': Block */\r
+static const OnigCodePoint\r
+CR_In_Mahjong_Tiles[] = { 1,\r
+0x1f000, 0x1f02f,\r
+}; /* END of CR_In_Mahjong_Tiles */\r
+\r
+/* PROPERTY: 'In_Domino_Tiles': Block */\r
+static const OnigCodePoint\r
+CR_In_Domino_Tiles[] = { 1,\r
+0x1f030, 0x1f09f,\r
+}; /* END of CR_In_Domino_Tiles */\r
+\r
+/* PROPERTY: 'In_Playing_Cards': Block */\r
+static const OnigCodePoint\r
+CR_In_Playing_Cards[] = { 1,\r
+0x1f0a0, 0x1f0ff,\r
+}; /* END of CR_In_Playing_Cards */\r
+\r
+/* PROPERTY: 'In_Enclosed_Alphanumeric_Supplement': Block */\r
+static const OnigCodePoint\r
+CR_In_Enclosed_Alphanumeric_Supplement[] = { 1,\r
+0x1f100, 0x1f1ff,\r
+}; /* END of CR_In_Enclosed_Alphanumeric_Supplement */\r
+\r
+/* PROPERTY: 'In_Enclosed_Ideographic_Supplement': Block */\r
+static const OnigCodePoint\r
+CR_In_Enclosed_Ideographic_Supplement[] = { 1,\r
+0x1f200, 0x1f2ff,\r
+}; /* END of CR_In_Enclosed_Ideographic_Supplement */\r
+\r
+/* PROPERTY: 'In_Miscellaneous_Symbols_and_Pictographs': Block */\r
+static const OnigCodePoint\r
+CR_In_Miscellaneous_Symbols_and_Pictographs[] = { 1,\r
+0x1f300, 0x1f5ff,\r
+}; /* END of CR_In_Miscellaneous_Symbols_and_Pictographs */\r
+\r
+/* PROPERTY: 'In_Emoticons': Block */\r
+static const OnigCodePoint\r
+CR_In_Emoticons[] = { 1,\r
+0x1f600, 0x1f64f,\r
+}; /* END of CR_In_Emoticons */\r
+\r
+/* PROPERTY: 'In_Ornamental_Dingbats': Block */\r
+static const OnigCodePoint\r
+CR_In_Ornamental_Dingbats[] = { 1,\r
+0x1f650, 0x1f67f,\r
+}; /* END of CR_In_Ornamental_Dingbats */\r
+\r
+/* PROPERTY: 'In_Transport_and_Map_Symbols': Block */\r
+static const OnigCodePoint\r
+CR_In_Transport_and_Map_Symbols[] = { 1,\r
+0x1f680, 0x1f6ff,\r
+}; /* END of CR_In_Transport_and_Map_Symbols */\r
+\r
+/* PROPERTY: 'In_Alchemical_Symbols': Block */\r
+static const OnigCodePoint\r
+CR_In_Alchemical_Symbols[] = { 1,\r
+0x1f700, 0x1f77f,\r
+}; /* END of CR_In_Alchemical_Symbols */\r
+\r
+/* PROPERTY: 'In_Geometric_Shapes_Extended': Block */\r
+static const OnigCodePoint\r
+CR_In_Geometric_Shapes_Extended[] = { 1,\r
+0x1f780, 0x1f7ff,\r
+}; /* END of CR_In_Geometric_Shapes_Extended */\r
+\r
+/* PROPERTY: 'In_Supplemental_Arrows_C': Block */\r
+static const OnigCodePoint\r
+CR_In_Supplemental_Arrows_C[] = { 1,\r
+0x1f800, 0x1f8ff,\r
+}; /* END of CR_In_Supplemental_Arrows_C */\r
+\r
+/* PROPERTY: 'In_Supplemental_Symbols_and_Pictographs': Block */\r
+static const OnigCodePoint\r
+CR_In_Supplemental_Symbols_and_Pictographs[] = { 1,\r
+0x1f900, 0x1f9ff,\r
+}; /* END of CR_In_Supplemental_Symbols_and_Pictographs */\r
+\r
+/* PROPERTY: 'In_Chess_Symbols': Block */\r
+static const OnigCodePoint\r
+CR_In_Chess_Symbols[] = { 1,\r
+0x1fa00, 0x1fa6f,\r
+}; /* END of CR_In_Chess_Symbols */\r
+\r
+/* PROPERTY: 'In_CJK_Unified_Ideographs_Extension_B': Block */\r
+static const OnigCodePoint\r
+CR_In_CJK_Unified_Ideographs_Extension_B[] = { 1,\r
+0x20000, 0x2a6df,\r
+}; /* END of CR_In_CJK_Unified_Ideographs_Extension_B */\r
+\r
+/* PROPERTY: 'In_CJK_Unified_Ideographs_Extension_C': Block */\r
+static const OnigCodePoint\r
+CR_In_CJK_Unified_Ideographs_Extension_C[] = { 1,\r
+0x2a700, 0x2b73f,\r
+}; /* END of CR_In_CJK_Unified_Ideographs_Extension_C */\r
+\r
+/* PROPERTY: 'In_CJK_Unified_Ideographs_Extension_D': Block */\r
+static const OnigCodePoint\r
+CR_In_CJK_Unified_Ideographs_Extension_D[] = { 1,\r
+0x2b740, 0x2b81f,\r
+}; /* END of CR_In_CJK_Unified_Ideographs_Extension_D */\r
+\r
+/* PROPERTY: 'In_CJK_Unified_Ideographs_Extension_E': Block */\r
+static const OnigCodePoint\r
+CR_In_CJK_Unified_Ideographs_Extension_E[] = { 1,\r
+0x2b820, 0x2ceaf,\r
+}; /* END of CR_In_CJK_Unified_Ideographs_Extension_E */\r
+\r
+/* PROPERTY: 'In_CJK_Unified_Ideographs_Extension_F': Block */\r
+static const OnigCodePoint\r
+CR_In_CJK_Unified_Ideographs_Extension_F[] = { 1,\r
+0x2ceb0, 0x2ebef,\r
+}; /* END of CR_In_CJK_Unified_Ideographs_Extension_F */\r
+\r
+/* PROPERTY: 'In_CJK_Compatibility_Ideographs_Supplement': Block */\r
+static const OnigCodePoint\r
+CR_In_CJK_Compatibility_Ideographs_Supplement[] = { 1,\r
+0x2f800, 0x2fa1f,\r
+}; /* END of CR_In_CJK_Compatibility_Ideographs_Supplement */\r
+\r
+/* PROPERTY: 'In_Tags': Block */\r
+static const OnigCodePoint\r
+CR_In_Tags[] = { 1,\r
+0xe0000, 0xe007f,\r
+}; /* END of CR_In_Tags */\r
+\r
+/* PROPERTY: 'In_Variation_Selectors_Supplement': Block */\r
+static const OnigCodePoint\r
+CR_In_Variation_Selectors_Supplement[] = { 1,\r
+0xe0100, 0xe01ef,\r
+}; /* END of CR_In_Variation_Selectors_Supplement */\r
+\r
+/* PROPERTY: 'In_Supplementary_Private_Use_Area_A': Block */\r
+static const OnigCodePoint\r
+CR_In_Supplementary_Private_Use_Area_A[] = { 1,\r
+0xf0000, 0xfffff,\r
+}; /* END of CR_In_Supplementary_Private_Use_Area_A */\r
+\r
+/* PROPERTY: 'In_Supplementary_Private_Use_Area_B': Block */\r
+static const OnigCodePoint\r
+CR_In_Supplementary_Private_Use_Area_B[] = { 1,\r
+0x100000, 0x10ffff,\r
+}; /* END of CR_In_Supplementary_Private_Use_Area_B */\r
+\r
+/* PROPERTY: 'In_No_Block': Block */\r
+static const OnigCodePoint\r
+CR_In_No_Block[] = { 51,\r
+0x0870, 0x089f,\r
+0x2fe0, 0x2fef,\r
+0x10200, 0x1027f,\r
+0x103e0, 0x103ff,\r
+0x10570, 0x105ff,\r
+0x10780, 0x107ff,\r
+0x108b0, 0x108df,\r
+0x10940, 0x1097f,\r
+0x10aa0, 0x10abf,\r
+0x10bb0, 0x10bff,\r
+0x10c50, 0x10c7f,\r
+0x10d40, 0x10e5f,\r
+0x10e80, 0x10eff,\r
+0x10f70, 0x10fff,\r
+0x11250, 0x1127f,\r
+0x11380, 0x113ff,\r
+0x114e0, 0x1157f,\r
+0x116d0, 0x116ff,\r
+0x11740, 0x117ff,\r
+0x11850, 0x1189f,\r
+0x11900, 0x119ff,\r
+0x11ab0, 0x11abf,\r
+0x11b00, 0x11bff,\r
+0x11cc0, 0x11cff,\r
+0x11db0, 0x11edf,\r
+0x11f00, 0x11fff,\r
+0x12550, 0x12fff,\r
+0x13430, 0x143ff,\r
+0x14680, 0x167ff,\r
+0x16a70, 0x16acf,\r
+0x16b90, 0x16e3f,\r
+0x16ea0, 0x16eff,\r
+0x16fa0, 0x16fdf,\r
+0x18b00, 0x1afff,\r
+0x1b130, 0x1b16f,\r
+0x1b300, 0x1bbff,\r
+0x1bcb0, 0x1cfff,\r
+0x1d250, 0x1d2df,\r
+0x1d380, 0x1d3ff,\r
+0x1dab0, 0x1dfff,\r
+0x1e030, 0x1e7ff,\r
+0x1e8e0, 0x1e8ff,\r
+0x1e960, 0x1ec6f,\r
+0x1ecc0, 0x1edff,\r
+0x1ef00, 0x1efff,\r
+0x1fa70, 0x1ffff,\r
+0x2a6e0, 0x2a6ff,\r
+0x2ebf0, 0x2f7ff,\r
+0x2fa20, 0xdffff,\r
+0xe0080, 0xe00ff,\r
+0xe01f0, 0xeffff,\r
+}; /* END of CR_In_No_Block */\r
+\r
+static const OnigCodePoint*\r
+const CodeRanges[] = {\r
+  CR_NEWLINE,\r
+  CR_Alpha,\r
+  CR_Blank,\r
+  CR_Cntrl,\r
+  CR_Digit,\r
+  CR_Graph,\r
+  CR_Lower,\r
+  CR_Print,\r
+  CR_Punct,\r
+  CR_Space,\r
+  CR_Upper,\r
+  CR_XDigit,\r
+  CR_Word,\r
+  CR_Alnum,\r
+  CR_ASCII,\r
+  CR_ASCII_Hex_Digit,\r
+  CR_Adlam,\r
+  CR_Ahom,\r
+  CR_Alphabetic,\r
+  CR_Anatolian_Hieroglyphs,\r
+  CR_Any,\r
+  CR_Arabic,\r
+  CR_Armenian,\r
+  CR_Assigned,\r
+  CR_Avestan,\r
+  CR_Balinese,\r
+  CR_Bamum,\r
+  CR_Bassa_Vah,\r
+  CR_Batak,\r
+  CR_Bengali,\r
+  CR_Bhaiksuki,\r
+  CR_Bidi_Control,\r
+  CR_Bopomofo,\r
+  CR_Brahmi,\r
+  CR_Braille,\r
+  CR_Buginese,\r
+  CR_Buhid,\r
+  CR_C,\r
+  CR_Canadian_Aboriginal,\r
+  CR_Carian,\r
+  CR_Case_Ignorable,\r
+  CR_Cased,\r
+  CR_Caucasian_Albanian,\r
+  CR_Cc,\r
+  CR_Cf,\r
+  CR_Chakma,\r
+  CR_Cham,\r
+  CR_Changes_When_Casefolded,\r
+  CR_Changes_When_Casemapped,\r
+  CR_Changes_When_Lowercased,\r
+  CR_Changes_When_Titlecased,\r
+  CR_Changes_When_Uppercased,\r
+  CR_Cherokee,\r
+  CR_Cn,\r
+  CR_Co,\r
+  CR_Common,\r
+  CR_Coptic,\r
+  CR_Cs,\r
+  CR_Cuneiform,\r
+  CR_Cypriot,\r
+  CR_Cyrillic,\r
+  CR_Dash,\r
+  CR_Default_Ignorable_Code_Point,\r
+  CR_Deprecated,\r
+  CR_Deseret,\r
+  CR_Devanagari,\r
+  CR_Diacritic,\r
+  CR_Dogra,\r
+  CR_Duployan,\r
+  CR_Egyptian_Hieroglyphs,\r
+  CR_Elbasan,\r
+  CR_Emoji,\r
+  CR_Emoji_Component,\r
+  CR_Emoji_Modifier,\r
+  CR_Emoji_Modifier_Base,\r
+  CR_Emoji_Presentation,\r
+  CR_Ethiopic,\r
+  CR_Extended_Pictographic,\r
+  CR_Extender,\r
+  CR_Georgian,\r
+  CR_Glagolitic,\r
+  CR_Gothic,\r
+  CR_Grantha,\r
+  CR_Grapheme_Base,\r
+  CR_Grapheme_Extend,\r
+  CR_Grapheme_Link,\r
+  CR_Greek,\r
+  CR_Gujarati,\r
+  CR_Gunjala_Gondi,\r
+  CR_Gurmukhi,\r
+  CR_Han,\r
+  CR_Hangul,\r
+  CR_Hanifi_Rohingya,\r
+  CR_Hanunoo,\r
+  CR_Hatran,\r
+  CR_Hebrew,\r
+  CR_Hex_Digit,\r
+  CR_Hiragana,\r
+  CR_Hyphen,\r
+  CR_IDS_Binary_Operator,\r
+  CR_IDS_Trinary_Operator,\r
+  CR_ID_Continue,\r
+  CR_ID_Start,\r
+  CR_Ideographic,\r
+  CR_Imperial_Aramaic,\r
+  CR_Inherited,\r
+  CR_Inscriptional_Pahlavi,\r
+  CR_Inscriptional_Parthian,\r
+  CR_Javanese,\r
+  CR_Join_Control,\r
+  CR_Kaithi,\r
+  CR_Kannada,\r
+  CR_Katakana,\r
+  CR_Kayah_Li,\r
+  CR_Kharoshthi,\r
+  CR_Khmer,\r
+  CR_Khojki,\r
+  CR_Khudawadi,\r
+  CR_L,\r
+  CR_LC,\r
+  CR_Lao,\r
+  CR_Latin,\r
+  CR_Lepcha,\r
+  CR_Limbu,\r
+  CR_Linear_A,\r
+  CR_Linear_B,\r
+  CR_Lisu,\r
+  CR_Ll,\r
+  CR_Lm,\r
+  CR_Lo,\r
+  CR_Logical_Order_Exception,\r
+  CR_Lowercase,\r
+  CR_Lt,\r
+  CR_Lu,\r
+  CR_Lycian,\r
+  CR_Lydian,\r
+  CR_M,\r
+  CR_Mahajani,\r
+  CR_Makasar,\r
+  CR_Malayalam,\r
+  CR_Mandaic,\r
+  CR_Manichaean,\r
+  CR_Marchen,\r
+  CR_Masaram_Gondi,\r
+  CR_Math,\r
+  CR_Mc,\r
+  CR_Me,\r
+  CR_Medefaidrin,\r
+  CR_Meetei_Mayek,\r
+  CR_Mende_Kikakui,\r
+  CR_Meroitic_Cursive,\r
+  CR_Meroitic_Hieroglyphs,\r
+  CR_Miao,\r
+  CR_Mn,\r
+  CR_Modi,\r
+  CR_Mongolian,\r
+  CR_Mro,\r
+  CR_Multani,\r
+  CR_Myanmar,\r
+  CR_N,\r
+  CR_Nabataean,\r
+  CR_Nd,\r
+  CR_New_Tai_Lue,\r
+  CR_Newa,\r
+  CR_Nko,\r
+  CR_Nl,\r
+  CR_No,\r
+  CR_Noncharacter_Code_Point,\r
+  CR_Nushu,\r
+  CR_Ogham,\r
+  CR_Ol_Chiki,\r
+  CR_Old_Hungarian,\r
+  CR_Old_Italic,\r
+  CR_Old_North_Arabian,\r
+  CR_Old_Permic,\r
+  CR_Old_Persian,\r
+  CR_Old_Sogdian,\r
+  CR_Old_South_Arabian,\r
+  CR_Old_Turkic,\r
+  CR_Oriya,\r
+  CR_Osage,\r
+  CR_Osmanya,\r
+  CR_Other_Alphabetic,\r
+  CR_Other_Default_Ignorable_Code_Point,\r
+  CR_Other_Grapheme_Extend,\r
+  CR_Other_ID_Continue,\r
+  CR_Other_ID_Start,\r
+  CR_Other_Lowercase,\r
+  CR_Other_Math,\r
+  CR_Other_Uppercase,\r
+  CR_P,\r
+  CR_Pahawh_Hmong,\r
+  CR_Palmyrene,\r
+  CR_Pattern_Syntax,\r
+  CR_Pattern_White_Space,\r
+  CR_Pau_Cin_Hau,\r
+  CR_Pc,\r
+  CR_Pd,\r
+  CR_Pe,\r
+  CR_Pf,\r
+  CR_Phags_Pa,\r
+  CR_Phoenician,\r
+  CR_Pi,\r
+  CR_Po,\r
+  CR_Prepended_Concatenation_Mark,\r
+  CR_Ps,\r
+  CR_Psalter_Pahlavi,\r
+  CR_Quotation_Mark,\r
+  CR_Radical,\r
+  CR_Regional_Indicator,\r
+  CR_Rejang,\r
+  CR_Runic,\r
+  CR_S,\r
+  CR_Samaritan,\r
+  CR_Saurashtra,\r
+  CR_Sc,\r
+  CR_Sentence_Terminal,\r
+  CR_Sharada,\r
+  CR_Shavian,\r
+  CR_Siddham,\r
+  CR_SignWriting,\r
+  CR_Sinhala,\r
+  CR_Sk,\r
+  CR_Sm,\r
+  CR_So,\r
+  CR_Soft_Dotted,\r
+  CR_Sogdian,\r
+  CR_Sora_Sompeng,\r
+  CR_Soyombo,\r
+  CR_Sundanese,\r
+  CR_Syloti_Nagri,\r
+  CR_Syriac,\r
+  CR_Tagalog,\r
+  CR_Tagbanwa,\r
+  CR_Tai_Le,\r
+  CR_Tai_Tham,\r
+  CR_Tai_Viet,\r
+  CR_Takri,\r
+  CR_Tamil,\r
+  CR_Tangut,\r
+  CR_Telugu,\r
+  CR_Terminal_Punctuation,\r
+  CR_Thaana,\r
+  CR_Thai,\r
+  CR_Tibetan,\r
+  CR_Tifinagh,\r
+  CR_Tirhuta,\r
+  CR_Ugaritic,\r
+  CR_Unified_Ideograph,\r
+  CR_Unknown,\r
+  CR_Uppercase,\r
+  CR_Vai,\r
+  CR_Variation_Selector,\r
+  CR_Warang_Citi,\r
+  CR_White_Space,\r
+  CR_XID_Continue,\r
+  CR_XID_Start,\r
+  CR_Yi,\r
+  CR_Z,\r
+  CR_Zanabazar_Square,\r
+  CR_Zl,\r
+  CR_Zp,\r
+  CR_Zs,\r
+  CR_In_Basic_Latin,\r
+  CR_In_Latin_1_Supplement,\r
+  CR_In_Latin_Extended_A,\r
+  CR_In_Latin_Extended_B,\r
+  CR_In_IPA_Extensions,\r
+  CR_In_Spacing_Modifier_Letters,\r
+  CR_In_Combining_Diacritical_Marks,\r
+  CR_In_Greek_and_Coptic,\r
+  CR_In_Cyrillic,\r
+  CR_In_Cyrillic_Supplement,\r
+  CR_In_Armenian,\r
+  CR_In_Hebrew,\r
+  CR_In_Arabic,\r
+  CR_In_Syriac,\r
+  CR_In_Arabic_Supplement,\r
+  CR_In_Thaana,\r
+  CR_In_NKo,\r
+  CR_In_Samaritan,\r
+  CR_In_Mandaic,\r
+  CR_In_Syriac_Supplement,\r
+  CR_In_Arabic_Extended_A,\r
+  CR_In_Devanagari,\r
+  CR_In_Bengali,\r
+  CR_In_Gurmukhi,\r
+  CR_In_Gujarati,\r
+  CR_In_Oriya,\r
+  CR_In_Tamil,\r
+  CR_In_Telugu,\r
+  CR_In_Kannada,\r
+  CR_In_Malayalam,\r
+  CR_In_Sinhala,\r
+  CR_In_Thai,\r
+  CR_In_Lao,\r
+  CR_In_Tibetan,\r
+  CR_In_Myanmar,\r
+  CR_In_Georgian,\r
+  CR_In_Hangul_Jamo,\r
+  CR_In_Ethiopic,\r
+  CR_In_Ethiopic_Supplement,\r
+  CR_In_Cherokee,\r
+  CR_In_Unified_Canadian_Aboriginal_Syllabics,\r
+  CR_In_Ogham,\r
+  CR_In_Runic,\r
+  CR_In_Tagalog,\r
+  CR_In_Hanunoo,\r
+  CR_In_Buhid,\r
+  CR_In_Tagbanwa,\r
+  CR_In_Khmer,\r
+  CR_In_Mongolian,\r
+  CR_In_Unified_Canadian_Aboriginal_Syllabics_Extended,\r
+  CR_In_Limbu,\r
+  CR_In_Tai_Le,\r
+  CR_In_New_Tai_Lue,\r
+  CR_In_Khmer_Symbols,\r
+  CR_In_Buginese,\r
+  CR_In_Tai_Tham,\r
+  CR_In_Combining_Diacritical_Marks_Extended,\r
+  CR_In_Balinese,\r
+  CR_In_Sundanese,\r
+  CR_In_Batak,\r
+  CR_In_Lepcha,\r
+  CR_In_Ol_Chiki,\r
+  CR_In_Cyrillic_Extended_C,\r
+  CR_In_Georgian_Extended,\r
+  CR_In_Sundanese_Supplement,\r
+  CR_In_Vedic_Extensions,\r
+  CR_In_Phonetic_Extensions,\r
+  CR_In_Phonetic_Extensions_Supplement,\r
+  CR_In_Combining_Diacritical_Marks_Supplement,\r
+  CR_In_Latin_Extended_Additional,\r
+  CR_In_Greek_Extended,\r
+  CR_In_General_Punctuation,\r
+  CR_In_Superscripts_and_Subscripts,\r
+  CR_In_Currency_Symbols,\r
+  CR_In_Combining_Diacritical_Marks_for_Symbols,\r
+  CR_In_Letterlike_Symbols,\r
+  CR_In_Number_Forms,\r
+  CR_In_Arrows,\r
+  CR_In_Mathematical_Operators,\r
+  CR_In_Miscellaneous_Technical,\r
+  CR_In_Control_Pictures,\r
+  CR_In_Optical_Character_Recognition,\r
+  CR_In_Enclosed_Alphanumerics,\r
+  CR_In_Box_Drawing,\r
+  CR_In_Block_Elements,\r
+  CR_In_Geometric_Shapes,\r
+  CR_In_Miscellaneous_Symbols,\r
+  CR_In_Dingbats,\r
+  CR_In_Miscellaneous_Mathematical_Symbols_A,\r
+  CR_In_Supplemental_Arrows_A,\r
+  CR_In_Braille_Patterns,\r
+  CR_In_Supplemental_Arrows_B,\r
+  CR_In_Miscellaneous_Mathematical_Symbols_B,\r
+  CR_In_Supplemental_Mathematical_Operators,\r
+  CR_In_Miscellaneous_Symbols_and_Arrows,\r
+  CR_In_Glagolitic,\r
+  CR_In_Latin_Extended_C,\r
+  CR_In_Coptic,\r
+  CR_In_Georgian_Supplement,\r
+  CR_In_Tifinagh,\r
+  CR_In_Ethiopic_Extended,\r
+  CR_In_Cyrillic_Extended_A,\r
+  CR_In_Supplemental_Punctuation,\r
+  CR_In_CJK_Radicals_Supplement,\r
+  CR_In_Kangxi_Radicals,\r
+  CR_In_Ideographic_Description_Characters,\r
+  CR_In_CJK_Symbols_and_Punctuation,\r
+  CR_In_Hiragana,\r
+  CR_In_Katakana,\r
+  CR_In_Bopomofo,\r
+  CR_In_Hangul_Compatibility_Jamo,\r
+  CR_In_Kanbun,\r
+  CR_In_Bopomofo_Extended,\r
+  CR_In_CJK_Strokes,\r
+  CR_In_Katakana_Phonetic_Extensions,\r
+  CR_In_Enclosed_CJK_Letters_and_Months,\r
+  CR_In_CJK_Compatibility,\r
+  CR_In_CJK_Unified_Ideographs_Extension_A,\r
+  CR_In_Yijing_Hexagram_Symbols,\r
+  CR_In_CJK_Unified_Ideographs,\r
+  CR_In_Yi_Syllables,\r
+  CR_In_Yi_Radicals,\r
+  CR_In_Lisu,\r
+  CR_In_Vai,\r
+  CR_In_Cyrillic_Extended_B,\r
+  CR_In_Bamum,\r
+  CR_In_Modifier_Tone_Letters,\r
+  CR_In_Latin_Extended_D,\r
+  CR_In_Syloti_Nagri,\r
+  CR_In_Common_Indic_Number_Forms,\r
+  CR_In_Phags_pa,\r
+  CR_In_Saurashtra,\r
+  CR_In_Devanagari_Extended,\r
+  CR_In_Kayah_Li,\r
+  CR_In_Rejang,\r
+  CR_In_Hangul_Jamo_Extended_A,\r
+  CR_In_Javanese,\r
+  CR_In_Myanmar_Extended_B,\r
+  CR_In_Cham,\r
+  CR_In_Myanmar_Extended_A,\r
+  CR_In_Tai_Viet,\r
+  CR_In_Meetei_Mayek_Extensions,\r
+  CR_In_Ethiopic_Extended_A,\r
+  CR_In_Latin_Extended_E,\r
+  CR_In_Cherokee_Supplement,\r
+  CR_In_Meetei_Mayek,\r
+  CR_In_Hangul_Syllables,\r
+  CR_In_Hangul_Jamo_Extended_B,\r
+  CR_In_High_Surrogates,\r
+  CR_In_High_Private_Use_Surrogates,\r
+  CR_In_Low_Surrogates,\r
+  CR_In_Private_Use_Area,\r
+  CR_In_CJK_Compatibility_Ideographs,\r
+  CR_In_Alphabetic_Presentation_Forms,\r
+  CR_In_Arabic_Presentation_Forms_A,\r
+  CR_In_Variation_Selectors,\r
+  CR_In_Vertical_Forms,\r
+  CR_In_Combining_Half_Marks,\r
+  CR_In_CJK_Compatibility_Forms,\r
+  CR_In_Small_Form_Variants,\r
+  CR_In_Arabic_Presentation_Forms_B,\r
+  CR_In_Halfwidth_and_Fullwidth_Forms,\r
+  CR_In_Specials,\r
+  CR_In_Linear_B_Syllabary,\r
+  CR_In_Linear_B_Ideograms,\r
+  CR_In_Aegean_Numbers,\r
+  CR_In_Ancient_Greek_Numbers,\r
+  CR_In_Ancient_Symbols,\r
+  CR_In_Phaistos_Disc,\r
+  CR_In_Lycian,\r
+  CR_In_Carian,\r
+  CR_In_Coptic_Epact_Numbers,\r
+  CR_In_Old_Italic,\r
+  CR_In_Gothic,\r
+  CR_In_Old_Permic,\r
+  CR_In_Ugaritic,\r
+  CR_In_Old_Persian,\r
+  CR_In_Deseret,\r
+  CR_In_Shavian,\r
+  CR_In_Osmanya,\r
+  CR_In_Osage,\r
+  CR_In_Elbasan,\r
+  CR_In_Caucasian_Albanian,\r
+  CR_In_Linear_A,\r
+  CR_In_Cypriot_Syllabary,\r
+  CR_In_Imperial_Aramaic,\r
+  CR_In_Palmyrene,\r
+  CR_In_Nabataean,\r
+  CR_In_Hatran,\r
+  CR_In_Phoenician,\r
+  CR_In_Lydian,\r
+  CR_In_Meroitic_Hieroglyphs,\r
+  CR_In_Meroitic_Cursive,\r
+  CR_In_Kharoshthi,\r
+  CR_In_Old_South_Arabian,\r
+  CR_In_Old_North_Arabian,\r
+  CR_In_Manichaean,\r
+  CR_In_Avestan,\r
+  CR_In_Inscriptional_Parthian,\r
+  CR_In_Inscriptional_Pahlavi,\r
+  CR_In_Psalter_Pahlavi,\r
+  CR_In_Old_Turkic,\r
+  CR_In_Old_Hungarian,\r
+  CR_In_Hanifi_Rohingya,\r
+  CR_In_Rumi_Numeral_Symbols,\r
+  CR_In_Old_Sogdian,\r
+  CR_In_Sogdian,\r
+  CR_In_Brahmi,\r
+  CR_In_Kaithi,\r
+  CR_In_Sora_Sompeng,\r
+  CR_In_Chakma,\r
+  CR_In_Mahajani,\r
+  CR_In_Sharada,\r
+  CR_In_Sinhala_Archaic_Numbers,\r
+  CR_In_Khojki,\r
+  CR_In_Multani,\r
+  CR_In_Khudawadi,\r
+  CR_In_Grantha,\r
+  CR_In_Newa,\r
+  CR_In_Tirhuta,\r
+  CR_In_Siddham,\r
+  CR_In_Modi,\r
+  CR_In_Mongolian_Supplement,\r
+  CR_In_Takri,\r
+  CR_In_Ahom,\r
+  CR_In_Dogra,\r
+  CR_In_Warang_Citi,\r
+  CR_In_Zanabazar_Square,\r
+  CR_In_Soyombo,\r
+  CR_In_Pau_Cin_Hau,\r
+  CR_In_Bhaiksuki,\r
+  CR_In_Marchen,\r
+  CR_In_Masaram_Gondi,\r
+  CR_In_Gunjala_Gondi,\r
+  CR_In_Makasar,\r
+  CR_In_Cuneiform,\r
+  CR_In_Cuneiform_Numbers_and_Punctuation,\r
+  CR_In_Early_Dynastic_Cuneiform,\r
+  CR_In_Egyptian_Hieroglyphs,\r
+  CR_In_Anatolian_Hieroglyphs,\r
+  CR_In_Bamum_Supplement,\r
+  CR_In_Mro,\r
+  CR_In_Bassa_Vah,\r
+  CR_In_Pahawh_Hmong,\r
+  CR_In_Medefaidrin,\r
+  CR_In_Miao,\r
+  CR_In_Ideographic_Symbols_and_Punctuation,\r
+  CR_In_Tangut,\r
+  CR_In_Tangut_Components,\r
+  CR_In_Kana_Supplement,\r
+  CR_In_Kana_Extended_A,\r
+  CR_In_Nushu,\r
+  CR_In_Duployan,\r
+  CR_In_Shorthand_Format_Controls,\r
+  CR_In_Byzantine_Musical_Symbols,\r
+  CR_In_Musical_Symbols,\r
+  CR_In_Ancient_Greek_Musical_Notation,\r
+  CR_In_Mayan_Numerals,\r
+  CR_In_Tai_Xuan_Jing_Symbols,\r
+  CR_In_Counting_Rod_Numerals,\r
+  CR_In_Mathematical_Alphanumeric_Symbols,\r
+  CR_In_Sutton_SignWriting,\r
+  CR_In_Glagolitic_Supplement,\r
+  CR_In_Mende_Kikakui,\r
+  CR_In_Adlam,\r
+  CR_In_Indic_Siyaq_Numbers,\r
+  CR_In_Arabic_Mathematical_Alphabetic_Symbols,\r
+  CR_In_Mahjong_Tiles,\r
+  CR_In_Domino_Tiles,\r
+  CR_In_Playing_Cards,\r
+  CR_In_Enclosed_Alphanumeric_Supplement,\r
+  CR_In_Enclosed_Ideographic_Supplement,\r
+  CR_In_Miscellaneous_Symbols_and_Pictographs,\r
+  CR_In_Emoticons,\r
+  CR_In_Ornamental_Dingbats,\r
+  CR_In_Transport_and_Map_Symbols,\r
+  CR_In_Alchemical_Symbols,\r
+  CR_In_Geometric_Shapes_Extended,\r
+  CR_In_Supplemental_Arrows_C,\r
+  CR_In_Supplemental_Symbols_and_Pictographs,\r
+  CR_In_Chess_Symbols,\r
+  CR_In_CJK_Unified_Ideographs_Extension_B,\r
+  CR_In_CJK_Unified_Ideographs_Extension_C,\r
+  CR_In_CJK_Unified_Ideographs_Extension_D,\r
+  CR_In_CJK_Unified_Ideographs_Extension_E,\r
+  CR_In_CJK_Unified_Ideographs_Extension_F,\r
+  CR_In_CJK_Compatibility_Ideographs_Supplement,\r
+  CR_In_Tags,\r
+  CR_In_Variation_Selectors_Supplement,\r
+  CR_In_Supplementary_Private_Use_Area_A,\r
+  CR_In_Supplementary_Private_Use_Area_B,\r
+  CR_In_No_Block,\r
+};\r
+\r
+#define pool_offset(s) offsetof(struct unicode_prop_name_pool_t, unicode_prop_name_pool_str##s)\r
+\r
+\r
+#define TOTAL_KEYWORDS 784\r
+#define MIN_WORD_LENGTH 1\r
+#define MAX_WORD_LENGTH 44\r
+#define MIN_HASH_VALUE 10\r
+#define MAX_HASH_VALUE 5516\r
+/* maximum key range = 5507, duplicates = 0 */\r
+\r
+#ifndef GPERF_DOWNCASE\r
+#define GPERF_DOWNCASE 1\r
+static unsigned char gperf_downcase[256] =\r
+  {\r
+      0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,\r
+     15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,\r
+     30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,\r
+     45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,\r
+     60,  61,  62,  63,  64,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106,\r
+    107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,\r
+    122,  91,  92,  93,  94,  95,  96,  97,  98,  99, 100, 101, 102, 103, 104,\r
+    105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\r
+    120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,\r
+    135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,\r
+    150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,\r
+    165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,\r
+    180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,\r
+    195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,\r
+    210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,\r
+    225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,\r
+    240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,\r
+    255\r
+  };\r
+#endif\r
+\r
+#ifndef GPERF_CASE_STRNCMP\r
+#define GPERF_CASE_STRNCMP 1\r
+static int\r
+gperf_case_strncmp (register const char *s1, register const char *s2, register size_t n)\r
+{\r
+  for (; n > 0;)\r
+    {\r
+      unsigned char c1 = gperf_downcase[(unsigned char)*s1++];\r
+      unsigned char c2 = gperf_downcase[(unsigned char)*s2++];\r
+      if (c1 != 0 && c1 == c2)\r
+        {\r
+          n--;\r
+          continue;\r
+        }\r
+      return (int)c1 - (int)c2;\r
+    }\r
+  return 0;\r
+}\r
+#endif\r
+\r
+#ifdef __GNUC__\r
+__inline\r
+#else\r
+#ifdef __cplusplus\r
+inline\r
+#endif\r
+#endif\r
+static unsigned int\r
+hash (register const char *str, register size_t len)\r
+{\r
+  static const unsigned short asso_values[] =\r
+    {\r
+      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,\r
+      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,\r
+      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,\r
+      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,\r
+      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,\r
+      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,\r
+      5517, 5517, 5517, 5517, 5517,    0, 1387,  107,  399,   14,\r
+      1024,  783,  831,    7, 1473,   25,  363,   89,    3,   17,\r
+      1203,  711,   59,  149,  313,  590, 1257,  334,  172, 1559,\r
+        22,    2,    1, 5517, 5517, 5517, 5517,    0, 1387,  107,\r
+       399,   14, 1024,  783,  831,    7, 1473,   25,  363,   89,\r
+         3,   17, 1203,  711,   59,  149,  313,  590, 1257,  334,\r
+       172, 1559,   22,    2,    1, 5517, 5517, 5517, 5517, 5517,\r
+      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,\r
+      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,\r
+      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,\r
+      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,\r
+      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,\r
+      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,\r
+      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,\r
+      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,\r
+      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,\r
+      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,\r
+      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,\r
+      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,\r
+      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517\r
+    };\r
+  register unsigned int hval = (unsigned int )len;\r
+\r
+  switch (hval)\r
+    {\r
+      default:\r
+        hval += asso_values[(unsigned char)str[15]];\r
+      /*FALLTHROUGH*/\r
+      case 15:\r
+      case 14:\r
+      case 13:\r
+      case 12:\r
+        hval += asso_values[(unsigned char)str[11]];\r
+      /*FALLTHROUGH*/\r
+      case 11:\r
+      case 10:\r
+      case 9:\r
+      case 8:\r
+      case 7:\r
+      case 6:\r
+        hval += asso_values[(unsigned char)str[5]];\r
+      /*FALLTHROUGH*/\r
+      case 5:\r
+        hval += asso_values[(unsigned char)str[4]];\r
+      /*FALLTHROUGH*/\r
+      case 4:\r
+      case 3:\r
+        hval += asso_values[(unsigned char)str[2]];\r
+      /*FALLTHROUGH*/\r
+      case 2:\r
+        hval += asso_values[(unsigned char)str[1]];\r
+      /*FALLTHROUGH*/\r
+      case 1:\r
+        hval += asso_values[(unsigned char)str[0]+2];\r
+        break;\r
+    }\r
+  return hval + asso_values[(unsigned char)str[len - 1]];\r
+}\r
+\r
+struct unicode_prop_name_pool_t\r
+  {\r
+    char unicode_prop_name_pool_str10[sizeof("lana")];\r
+    char unicode_prop_name_pool_str17[sizeof("lina")];\r
+    char unicode_prop_name_pool_str18[sizeof("yi")];\r
+    char unicode_prop_name_pool_str22[sizeof("cn")];\r
+    char unicode_prop_name_pool_str24[sizeof("z")];\r
+    char unicode_prop_name_pool_str25[sizeof("mn")];\r
+    char unicode_prop_name_pool_str27[sizeof("yiii")];\r
+    char unicode_prop_name_pool_str30[sizeof("ci")];\r
+    char unicode_prop_name_pool_str31[sizeof("mani")];\r
+    char unicode_prop_name_pool_str39[sizeof("lo")];\r
+    char unicode_prop_name_pool_str40[sizeof("lao")];\r
+    char unicode_prop_name_pool_str41[sizeof("laoo")];\r
+    char unicode_prop_name_pool_str45[sizeof("miao")];\r
+    char unicode_prop_name_pool_str46[sizeof("maka")];\r
+    char unicode_prop_name_pool_str47[sizeof("me")];\r
+    char unicode_prop_name_pool_str50[sizeof("co")];\r
+    char unicode_prop_name_pool_str51[sizeof("loe")];\r
+    char unicode_prop_name_pool_str68[sizeof("inkannada")];\r
+    char unicode_prop_name_pool_str70[sizeof("innko")];\r
+    char unicode_prop_name_pool_str71[sizeof("zzzz")];\r
+    char unicode_prop_name_pool_str73[sizeof("gran")];\r
+    char unicode_prop_name_pool_str75[sizeof("pi")];\r
+    char unicode_prop_name_pool_str79[sizeof("lineara")];\r
+    char unicode_prop_name_pool_str84[sizeof("cari")];\r
+    char unicode_prop_name_pool_str85[sizeof("carian")];\r
+    char unicode_prop_name_pool_str89[sizeof("pe")];\r
+    char unicode_prop_name_pool_str95[sizeof("po")];\r
+    char unicode_prop_name_pool_str96[sizeof("kana")];\r
+    char unicode_prop_name_pool_str99[sizeof("mendekikakui")];\r
+    char unicode_prop_name_pool_str101[sizeof("geor")];\r
+    char unicode_prop_name_pool_str102[sizeof("meeteimayek")];\r
+    char unicode_prop_name_pool_str105[sizeof("mark")];\r
+    char unicode_prop_name_pool_str107[sizeof("m")];\r
+    char unicode_prop_name_pool_str109[sizeof("grek")];\r
+    char unicode_prop_name_pool_str111[sizeof("mero")];\r
+    char unicode_prop_name_pool_str113[sizeof("mro")];\r
+    char unicode_prop_name_pool_str114[sizeof("mroo")];\r
+    char unicode_prop_name_pool_str120[sizeof("gonm")];\r
+    char unicode_prop_name_pool_str122[sizeof("c")];\r
+    char unicode_prop_name_pool_str132[sizeof("cakm")];\r
+    char unicode_prop_name_pool_str135[sizeof("greek")];\r
+    char unicode_prop_name_pool_str138[sizeof("inkharoshthi")];\r
+    char unicode_prop_name_pool_str141[sizeof("mandaic")];\r
+    char unicode_prop_name_pool_str143[sizeof("inosmanya")];\r
+    char unicode_prop_name_pool_str144[sizeof("inarmenian")];\r
+    char unicode_prop_name_pool_str145[sizeof("inmanichaean")];\r
+    char unicode_prop_name_pool_str149[sizeof("common")];\r
+    char unicode_prop_name_pool_str156[sizeof("inmro")];\r
+    char unicode_prop_name_pool_str157[sizeof("inmiao")];\r
+    char unicode_prop_name_pool_str160[sizeof("qaai")];\r
+    char unicode_prop_name_pool_str168[sizeof("inchakma")];\r
+    char unicode_prop_name_pool_str170[sizeof("cans")];\r
+    char unicode_prop_name_pool_str181[sizeof("connectorpunctuation")];\r
+    char unicode_prop_name_pool_str183[sizeof("lm")];\r
+    char unicode_prop_name_pool_str187[sizeof("marc")];\r
+    char unicode_prop_name_pool_str188[sizeof("inmyanmar")];\r
+    char unicode_prop_name_pool_str189[sizeof("vai")];\r
+    char unicode_prop_name_pool_str190[sizeof("vaii")];\r
+    char unicode_prop_name_pool_str199[sizeof("inideographicsymbolsandpunctuation")];\r
+    char unicode_prop_name_pool_str201[sizeof("merc")];\r
+    char unicode_prop_name_pool_str203[sizeof("inavestan")];\r
+    char unicode_prop_name_pool_str204[sizeof("incuneiformnumbersandpunctuation")];\r
+    char unicode_prop_name_pool_str210[sizeof("inmakasar")];\r
+    char unicode_prop_name_pool_str211[sizeof("inrunic")];\r
+    char unicode_prop_name_pool_str212[sizeof("incarian")];\r
+    char unicode_prop_name_pool_str217[sizeof("prependedconcatenationmark")];\r
+    char unicode_prop_name_pool_str219[sizeof("lc")];\r
+    char unicode_prop_name_pool_str220[sizeof("inipaextensions")];\r
+    char unicode_prop_name_pool_str222[sizeof("inkhmer")];\r
+    char unicode_prop_name_pool_str225[sizeof("perm")];\r
+    char unicode_prop_name_pool_str227[sizeof("combiningmark")];\r
+    char unicode_prop_name_pool_str229[sizeof("inahom")];\r
+    char unicode_prop_name_pool_str230[sizeof("cc")];\r
+    char unicode_prop_name_pool_str232[sizeof("incherokee")];\r
+    char unicode_prop_name_pool_str233[sizeof("mc")];\r
+    char unicode_prop_name_pool_str245[sizeof("insharada")];\r
+    char unicode_prop_name_pool_str251[sizeof("masaramgondi")];\r
+    char unicode_prop_name_pool_str252[sizeof("incuneiform")];\r
+    char unicode_prop_name_pool_str257[sizeof("makasar")];\r
+    char unicode_prop_name_pool_str260[sizeof("qaac")];\r
+    char unicode_prop_name_pool_str261[sizeof("inarrows")];\r
+    char unicode_prop_name_pool_str262[sizeof("armn")];\r
+    char unicode_prop_name_pool_str265[sizeof("lineseparator")];\r
+    char unicode_prop_name_pool_str266[sizeof("armi")];\r
+    char unicode_prop_name_pool_str275[sizeof("pc")];\r
+    char unicode_prop_name_pool_str276[sizeof("armenian")];\r
+    char unicode_prop_name_pool_str280[sizeof("insamaritan")];\r
+    char unicode_prop_name_pool_str290[sizeof("inmasaramgondi")];\r
+    char unicode_prop_name_pool_str292[sizeof("inzanabazarsquare")];\r
+    char unicode_prop_name_pool_str293[sizeof("qmark")];\r
+    char unicode_prop_name_pool_str295[sizeof("inmarchen")];\r
+    char unicode_prop_name_pool_str301[sizeof("zs")];\r
+    char unicode_prop_name_pool_str314[sizeof("cs")];\r
+    char unicode_prop_name_pool_str318[sizeof("incyrillic")];\r
+    char unicode_prop_name_pool_str319[sizeof("incham")];\r
+    char unicode_prop_name_pool_str323[sizeof("latn")];\r
+    char unicode_prop_name_pool_str326[sizeof("inscriptionalparthian")];\r
+    char unicode_prop_name_pool_str327[sizeof("latin")];\r
+    char unicode_prop_name_pool_str329[sizeof("ri")];\r
+    char unicode_prop_name_pool_str336[sizeof("inkhmersymbols")];\r
+    char unicode_prop_name_pool_str347[sizeof("pcm")];\r
+    char unicode_prop_name_pool_str349[sizeof("inthaana")];\r
+    char unicode_prop_name_pool_str355[sizeof("mtei")];\r
+    char unicode_prop_name_pool_str358[sizeof("insyriac")];\r
+    char unicode_prop_name_pool_str359[sizeof("ps")];\r
+    char unicode_prop_name_pool_str361[sizeof("inthai")];\r
+    char unicode_prop_name_pool_str367[sizeof("l")];\r
+    char unicode_prop_name_pool_str371[sizeof("innewa")];\r
+    char unicode_prop_name_pool_str376[sizeof("inkatakana")];\r
+    char unicode_prop_name_pool_str382[sizeof("ascii")];\r
+    char unicode_prop_name_pool_str383[sizeof("initialpunctuation")];\r
+    char unicode_prop_name_pool_str388[sizeof("inkaithi")];\r
+    char unicode_prop_name_pool_str393[sizeof("arabic")];\r
+    char unicode_prop_name_pool_str405[sizeof("inideographicdescriptioncharacters")];\r
+    char unicode_prop_name_pool_str417[sizeof("inlineara")];\r
+    char unicode_prop_name_pool_str423[sizeof("mand")];\r
+    char unicode_prop_name_pool_str429[sizeof("mongolian")];\r
+    char unicode_prop_name_pool_str430[sizeof("inlao")];\r
+    char unicode_prop_name_pool_str435[sizeof("katakana")];\r
+    char unicode_prop_name_pool_str437[sizeof("mend")];\r
+    char unicode_prop_name_pool_str439[sizeof("intakri")];\r
+    char unicode_prop_name_pool_str441[sizeof("inruminumeralsymbols")];\r
+    char unicode_prop_name_pool_str442[sizeof("prti")];\r
+    char unicode_prop_name_pool_str444[sizeof("modi")];\r
+    char unicode_prop_name_pool_str447[sizeof("inwarangciti")];\r
+    char unicode_prop_name_pool_str453[sizeof("incjkcompatibilityforms")];\r
+    char unicode_prop_name_pool_str457[sizeof("inspecials")];\r
+    char unicode_prop_name_pool_str458[sizeof("incjkcompatibilityideographs")];\r
+    char unicode_prop_name_pool_str459[sizeof("ideo")];\r
+    char unicode_prop_name_pool_str462[sizeof("privateuse")];\r
+    char unicode_prop_name_pool_str463[sizeof("kali")];\r
+    char unicode_prop_name_pool_str465[sizeof("inmyanmarextendeda")];\r
+    char unicode_prop_name_pool_str468[sizeof("letter")];\r
+    char unicode_prop_name_pool_str469[sizeof("brai")];\r
+    char unicode_prop_name_pool_str470[sizeof("inkanaextendeda")];\r
+    char unicode_prop_name_pool_str472[sizeof("vs")];\r
+    char unicode_prop_name_pool_str473[sizeof("xidcontinue")];\r
+    char unicode_prop_name_pool_str477[sizeof("lower")];\r
+    char unicode_prop_name_pool_str478[sizeof("inchesssymbols")];\r
+    char unicode_prop_name_pool_str480[sizeof("control")];\r
+    char unicode_prop_name_pool_str487[sizeof("inadlam")];\r
+    char unicode_prop_name_pool_str488[sizeof("grlink")];\r
+    char unicode_prop_name_pool_str495[sizeof("knda")];\r
+    char unicode_prop_name_pool_str496[sizeof("inmeeteimayek")];\r
+    char unicode_prop_name_pool_str498[sizeof("kannada")];\r
+    char unicode_prop_name_pool_str511[sizeof("inmiscellaneousmathematicalsymbolsa")];\r
+    char unicode_prop_name_pool_str515[sizeof("palm")];\r
+    char unicode_prop_name_pool_str516[sizeof("inlycian")];\r
+    char unicode_prop_name_pool_str517[sizeof("intransportandmapsymbols")];\r
+    char unicode_prop_name_pool_str526[sizeof("inoldnortharabian")];\r
+    char unicode_prop_name_pool_str532[sizeof("inemoticons")];\r
+    char unicode_prop_name_pool_str533[sizeof("letternumber")];\r
+    char unicode_prop_name_pool_str536[sizeof("inmodi")];\r
+    char unicode_prop_name_pool_str539[sizeof("xidc")];\r
+    char unicode_prop_name_pool_str543[sizeof("lowercase")];\r
+    char unicode_prop_name_pool_str545[sizeof("inancientsymbols")];\r
+    char unicode_prop_name_pool_str548[sizeof("cwcm")];\r
+    char unicode_prop_name_pool_str553[sizeof("inmedefaidrin")];\r
+    char unicode_prop_name_pool_str556[sizeof("psalterpahlavi")];\r
+    char unicode_prop_name_pool_str564[sizeof("gothic")];\r
+    char unicode_prop_name_pool_str565[sizeof("inmendekikakui")];\r
+    char unicode_prop_name_pool_str567[sizeof("brahmi")];\r
+    char unicode_prop_name_pool_str569[sizeof("inolditalic")];\r
+    char unicode_prop_name_pool_str580[sizeof("inmalayalam")];\r
+    char unicode_prop_name_pool_str581[sizeof("xids")];\r
+    char unicode_prop_name_pool_str582[sizeof("incommonindicnumberforms")];\r
+    char unicode_prop_name_pool_str588[sizeof("meroiticcursive")];\r
+    char unicode_prop_name_pool_str589[sizeof("inlinearbideograms")];\r
+    char unicode_prop_name_pool_str597[sizeof("patternwhitespace")];\r
+    char unicode_prop_name_pool_str604[sizeof("insundanese")];\r
+    char unicode_prop_name_pool_str606[sizeof("joinc")];\r
+    char unicode_prop_name_pool_str611[sizeof("inoldsogdian")];\r
+    char unicode_prop_name_pool_str619[sizeof("incjkstrokes")];\r
+    char unicode_prop_name_pool_str626[sizeof("so")];\r
+    char unicode_prop_name_pool_str630[sizeof("patternsyntax")];\r
+    char unicode_prop_name_pool_str631[sizeof("lt")];\r
+    char unicode_prop_name_pool_str632[sizeof("incjkcompatibilityideographssupplement")];\r
+    char unicode_prop_name_pool_str635[sizeof("inmandaic")];\r
+    char unicode_prop_name_pool_str636[sizeof("insylotinagri")];\r
+    char unicode_prop_name_pool_str641[sizeof("idc")];\r
+    char unicode_prop_name_pool_str642[sizeof("sk")];\r
+    char unicode_prop_name_pool_str656[sizeof("alnum")];\r
+    char unicode_prop_name_pool_str670[sizeof("sora")];\r
+    char unicode_prop_name_pool_str671[sizeof("bamum")];\r
+    char unicode_prop_name_pool_str672[sizeof("inoldsoutharabian")];\r
+    char unicode_prop_name_pool_str675[sizeof("patws")];\r
+    char unicode_prop_name_pool_str676[sizeof("inmusicalsymbols")];\r
+    char unicode_prop_name_pool_str690[sizeof("idsbinaryoperator")];\r
+    char unicode_prop_name_pool_str699[sizeof("indominotiles")];\r
+    char unicode_prop_name_pool_str701[sizeof("bass")];\r
+    char unicode_prop_name_pool_str703[sizeof("innewtailue")];\r
+    char unicode_prop_name_pool_str705[sizeof("ital")];\r
+    char unicode_prop_name_pool_str707[sizeof("inmiscellaneoussymbols")];\r
+    char unicode_prop_name_pool_str710[sizeof("inopticalcharacterrecognition")];\r
+    char unicode_prop_name_pool_str711[sizeof("grext")];\r
+    char unicode_prop_name_pool_str712[sizeof("inkanasupplement")];\r
+    char unicode_prop_name_pool_str716[sizeof("inmiscellaneoussymbolsandarrows")];\r
+    char unicode_prop_name_pool_str721[sizeof("inmiscellaneoussymbolsandpictographs")];\r
+    char unicode_prop_name_pool_str723[sizeof("unknown")];\r
+    char unicode_prop_name_pool_str724[sizeof("inmodifiertoneletters")];\r
+    char unicode_prop_name_pool_str725[sizeof("ids")];\r
+    char unicode_prop_name_pool_str729[sizeof("zl")];\r
+    char unicode_prop_name_pool_str730[sizeof("inlatinextendeda")];\r
+    char unicode_prop_name_pool_str731[sizeof("ll")];\r
+    char unicode_prop_name_pool_str732[sizeof("intaile")];\r
+    char unicode_prop_name_pool_str738[sizeof("incontrolpictures")];\r
+    char unicode_prop_name_pool_str740[sizeof("s")];\r
+    char unicode_prop_name_pool_str741[sizeof("batk")];\r
+    char unicode_prop_name_pool_str742[sizeof("samr")];\r
+    char unicode_prop_name_pool_str753[sizeof("lisu")];\r
+    char unicode_prop_name_pool_str756[sizeof("print")];\r
+    char unicode_prop_name_pool_str757[sizeof("samaritan")];\r
+    char unicode_prop_name_pool_str758[sizeof("inlatinextendede")];\r
+    char unicode_prop_name_pool_str759[sizeof("intaitham")];\r
+    char unicode_prop_name_pool_str760[sizeof("pauc")];\r
+    char unicode_prop_name_pool_str767[sizeof("batak")];\r
+    char unicode_prop_name_pool_str770[sizeof("sm")];\r
+    char unicode_prop_name_pool_str773[sizeof("bali")];\r
+    char unicode_prop_name_pool_str778[sizeof("inancientgreekmusicalnotation")];\r
+    char unicode_prop_name_pool_str779[sizeof("uideo")];\r
+    char unicode_prop_name_pool_str781[sizeof("intaixuanjingsymbols")];\r
+    char unicode_prop_name_pool_str782[sizeof("oriya")];\r
+    char unicode_prop_name_pool_str791[sizeof("incyrillicextendeda")];\r
+    char unicode_prop_name_pool_str793[sizeof("bengali")];\r
+    char unicode_prop_name_pool_str794[sizeof("inugaritic")];\r
+    char unicode_prop_name_pool_str801[sizeof("balinese")];\r
+    char unicode_prop_name_pool_str806[sizeof("sc")];\r
+    char unicode_prop_name_pool_str807[sizeof("intamil")];\r
+    char unicode_prop_name_pool_str808[sizeof("inlydian")];\r
+    char unicode_prop_name_pool_str809[sizeof("inmultani")];\r
+    char unicode_prop_name_pool_str814[sizeof("gong")];\r
+    char unicode_prop_name_pool_str817[sizeof("blank")];\r
+    char unicode_prop_name_pool_str823[sizeof("ingrantha")];\r
+    char unicode_prop_name_pool_str824[sizeof("mong")];\r
+    char unicode_prop_name_pool_str833[sizeof("inearlydynasticcuneiform")];\r
+    char unicode_prop_name_pool_str838[sizeof("insaurashtra")];\r
+    char unicode_prop_name_pool_str839[sizeof("georgian")];\r
+    char unicode_prop_name_pool_str846[sizeof("zinh")];\r
+    char unicode_prop_name_pool_str849[sizeof("inosage")];\r
+    char unicode_prop_name_pool_str854[sizeof("ingeneralpunctuation")];\r
+    char unicode_prop_name_pool_str857[sizeof("incaucasianalbanian")];\r
+    char unicode_prop_name_pool_str859[sizeof("pd")];\r
+    char unicode_prop_name_pool_str866[sizeof("canadianaboriginal")];\r
+    char unicode_prop_name_pool_str867[sizeof("glagolitic")];\r
+    char unicode_prop_name_pool_str870[sizeof("inspacingmodifierletters")];\r
+    char unicode_prop_name_pool_str871[sizeof("idcontinue")];\r
+    char unicode_prop_name_pool_str875[sizeof("inoldturkic")];\r
+    char unicode_prop_name_pool_str884[sizeof("plrd")];\r
+    char unicode_prop_name_pool_str885[sizeof("joincontrol")];\r
+    char unicode_prop_name_pool_str890[sizeof("idst")];\r
+    char unicode_prop_name_pool_str892[sizeof("inhanifirohingya")];\r
+    char unicode_prop_name_pool_str893[sizeof("osage")];\r
+    char unicode_prop_name_pool_str898[sizeof("incyrillicextendedc")];\r
+    char unicode_prop_name_pool_str900[sizeof("ingeorgian")];\r
+    char unicode_prop_name_pool_str902[sizeof("unassigned")];\r
+    char unicode_prop_name_pool_str907[sizeof("lowercaseletter")];\r
+    char unicode_prop_name_pool_str908[sizeof("emoji")];\r
+    char unicode_prop_name_pool_str912[sizeof("indeseret")];\r
+    char unicode_prop_name_pool_str916[sizeof("inancientgreeknumbers")];\r
+    char unicode_prop_name_pool_str917[sizeof("inmongolian")];\r
+    char unicode_prop_name_pool_str922[sizeof("cher")];\r
+    char unicode_prop_name_pool_str923[sizeof("cherokee")];\r
+    char unicode_prop_name_pool_str928[sizeof("inhiragana")];\r
+    char unicode_prop_name_pool_str930[sizeof("phoenician")];\r
+    char unicode_prop_name_pool_str931[sizeof("marchen")];\r
+    char unicode_prop_name_pool_str937[sizeof("xsux")];\r
+    char unicode_prop_name_pool_str938[sizeof("cham")];\r
+    char unicode_prop_name_pool_str940[sizeof("chakma")];\r
+    char unicode_prop_name_pool_str943[sizeof("inmeeteimayekextensions")];\r
+    char unicode_prop_name_pool_str944[sizeof("inlatinextendedc")];\r
+    char unicode_prop_name_pool_str947[sizeof("kaithi")];\r
+    char unicode_prop_name_pool_str951[sizeof("graphemebase")];\r
+    char unicode_prop_name_pool_str952[sizeof("idstart")];\r
+    char unicode_prop_name_pool_str953[sizeof("osma")];\r
+    char unicode_prop_name_pool_str962[sizeof("adlm")];\r
+    char unicode_prop_name_pool_str965[sizeof("inmahajani")];\r
+    char unicode_prop_name_pool_str966[sizeof("cased")];\r
+    char unicode_prop_name_pool_str969[sizeof("runr")];\r
+    char unicode_prop_name_pool_str970[sizeof("sinhala")];\r
+    char unicode_prop_name_pool_str971[sizeof("manichaean")];\r
+    char unicode_prop_name_pool_str972[sizeof("inogham")];\r
+    char unicode_prop_name_pool_str973[sizeof("graphemelink")];\r
+    char unicode_prop_name_pool_str976[sizeof("ingurmukhi")];\r
+    char unicode_prop_name_pool_str977[sizeof("cwt")];\r
+    char unicode_prop_name_pool_str982[sizeof("khojki")];\r
+    char unicode_prop_name_pool_str983[sizeof("khar")];\r
+    char unicode_prop_name_pool_str987[sizeof("multani")];\r
+    char unicode_prop_name_pool_str989[sizeof("gunjalagondi")];\r
+    char unicode_prop_name_pool_str995[sizeof("casedletter")];\r
+    char unicode_prop_name_pool_str997[sizeof("inethiopic")];\r
+    char unicode_prop_name_pool_str999[sizeof("inolchiki")];\r
+    char unicode_prop_name_pool_str1000[sizeof("variationselector")];\r
+    char unicode_prop_name_pool_str1003[sizeof("sind")];\r
+    char unicode_prop_name_pool_str1004[sizeof("incountingrodnumerals")];\r
+    char unicode_prop_name_pool_str1007[sizeof("logicalorderexception")];\r
+    char unicode_prop_name_pool_str1020[sizeof("insinhala")];\r
+    char unicode_prop_name_pool_str1024[sizeof("bidic")];\r
+    char unicode_prop_name_pool_str1034[sizeof("dia")];\r
+    char unicode_prop_name_pool_str1035[sizeof("insorasompeng")];\r
+    char unicode_prop_name_pool_str1036[sizeof("anatolianhieroglyphs")];\r
+    char unicode_prop_name_pool_str1038[sizeof("inlowsurrogates")];\r
+    char unicode_prop_name_pool_str1040[sizeof("di")];\r
+    char unicode_prop_name_pool_str1048[sizeof("ahom")];\r
+    char unicode_prop_name_pool_str1050[sizeof("inenclosedalphanumerics")];\r
+    char unicode_prop_name_pool_str1052[sizeof("adlam")];\r
+    char unicode_prop_name_pool_str1060[sizeof("inkhudawadi")];\r
+    char unicode_prop_name_pool_str1061[sizeof("cntrl")];\r
+    char unicode_prop_name_pool_str1062[sizeof("xidstart")];\r
+    char unicode_prop_name_pool_str1067[sizeof("xdigit")];\r
+    char unicode_prop_name_pool_str1069[sizeof("phnx")];\r
+    char unicode_prop_name_pool_str1071[sizeof("emojimodifier")];\r
+    char unicode_prop_name_pool_str1072[sizeof("khmr")];\r
+    char unicode_prop_name_pool_str1073[sizeof("insiddham")];\r
+    char unicode_prop_name_pool_str1077[sizeof("cwl")];\r
+    char unicode_prop_name_pool_str1082[sizeof("bamu")];\r
+    char unicode_prop_name_pool_str1086[sizeof("ingreekandcoptic")];\r
+    char unicode_prop_name_pool_str1087[sizeof("inmiscellaneoustechnical")];\r
+    char unicode_prop_name_pool_str1100[sizeof("sterm")];\r
+    char unicode_prop_name_pool_str1101[sizeof("inscriptionalpahlavi")];\r
+    char unicode_prop_name_pool_str1102[sizeof("inlatinextendedadditional")];\r
+    char unicode_prop_name_pool_str1103[sizeof("kharoshthi")];\r
+    char unicode_prop_name_pool_str1125[sizeof("runic")];\r
+    char unicode_prop_name_pool_str1127[sizeof("odi")];\r
+    char unicode_prop_name_pool_str1128[sizeof("ahex")];\r
+    char unicode_prop_name_pool_str1132[sizeof("khmer")];\r
+    char unicode_prop_name_pool_str1138[sizeof("incyrillicsupplement")];\r
+    char unicode_prop_name_pool_str1145[sizeof("incherokeesupplement")];\r
+    char unicode_prop_name_pool_str1153[sizeof("inmeroitichieroglyphs")];\r
+    char unicode_prop_name_pool_str1156[sizeof("enclosingmark")];\r
+    char unicode_prop_name_pool_str1157[sizeof("glag")];\r
+    char unicode_prop_name_pool_str1160[sizeof("inkangxiradicals")];\r
+    char unicode_prop_name_pool_str1165[sizeof("math")];\r
+    char unicode_prop_name_pool_str1166[sizeof("quotationmark")];\r
+    char unicode_prop_name_pool_str1172[sizeof("goth")];\r
+    char unicode_prop_name_pool_str1179[sizeof("emojimodifierbase")];\r
+    char unicode_prop_name_pool_str1180[sizeof("ugar")];\r
+    char unicode_prop_name_pool_str1185[sizeof("lu")];\r
+    char unicode_prop_name_pool_str1189[sizeof("radical")];\r
+    char unicode_prop_name_pool_str1198[sizeof("incjkunifiedideographsextensiona")];\r
+    char unicode_prop_name_pool_str1203[sizeof("beng")];\r
+    char unicode_prop_name_pool_str1205[sizeof("braille")];\r
+    char unicode_prop_name_pool_str1207[sizeof("n")];\r
+    char unicode_prop_name_pool_str1209[sizeof("sundanese")];\r
+    char unicode_prop_name_pool_str1210[sizeof("olck")];\r
+    char unicode_prop_name_pool_str1212[sizeof("incjkunifiedideographsextensione")];\r
+    char unicode_prop_name_pool_str1213[sizeof("diacritic")];\r
+    char unicode_prop_name_pool_str1217[sizeof("grantha")];\r
+    char unicode_prop_name_pool_str1223[sizeof("inenclosedalphanumericsupplement")];\r
+    char unicode_prop_name_pool_str1227[sizeof("olchiki")];\r
+    char unicode_prop_name_pool_str1228[sizeof("oidc")];\r
+    char unicode_prop_name_pool_str1229[sizeof("olower")];\r
+    char unicode_prop_name_pool_str1230[sizeof("regionalindicator")];\r
+    char unicode_prop_name_pool_str1239[sizeof("no")];\r
+    char unicode_prop_name_pool_str1240[sizeof("intirhuta")];\r
+    char unicode_prop_name_pool_str1242[sizeof("inhatran")];\r
+    char unicode_prop_name_pool_str1243[sizeof("saur")];\r
+    char unicode_prop_name_pool_str1244[sizeof("kthi")];\r
+    char unicode_prop_name_pool_str1246[sizeof("ingeometricshapes")];\r
+    char unicode_prop_name_pool_str1250[sizeof("guru")];\r
+    char unicode_prop_name_pool_str1256[sizeof("ingreekextended")];\r
+    char unicode_prop_name_pool_str1258[sizeof("paucinhau")];\r
+    char unicode_prop_name_pool_str1260[sizeof("xpeo")];\r
+    char unicode_prop_name_pool_str1263[sizeof("p")];\r
+    char unicode_prop_name_pool_str1264[sizeof("phli")];\r
+    char unicode_prop_name_pool_str1265[sizeof("nko")];\r
+    char unicode_prop_name_pool_str1266[sizeof("nkoo")];\r
+    char unicode_prop_name_pool_str1270[sizeof("oids")];\r
+    char unicode_prop_name_pool_str1276[sizeof("indogra")];\r
+    char unicode_prop_name_pool_str1280[sizeof("inphoenician")];\r
+    char unicode_prop_name_pool_str1283[sizeof("punct")];\r
+    char unicode_prop_name_pool_str1284[sizeof("limbu")];\r
+    char unicode_prop_name_pool_str1286[sizeof("gurmukhi")];\r
+    char unicode_prop_name_pool_str1287[sizeof("mult")];\r
+    char unicode_prop_name_pool_str1293[sizeof("brah")];\r
+    char unicode_prop_name_pool_str1297[sizeof("taile")];\r
+    char unicode_prop_name_pool_str1299[sizeof("inoldhungarian")];\r
+    char unicode_prop_name_pool_str1301[sizeof("takri")];\r
+    char unicode_prop_name_pool_str1303[sizeof("bidicontrol")];\r
+    char unicode_prop_name_pool_str1304[sizeof("invai")];\r
+    char unicode_prop_name_pool_str1305[sizeof("incjkunifiedideographsextensionc")];\r
+    char unicode_prop_name_pool_str1314[sizeof("inenclosedideographicsupplement")];\r
+    char unicode_prop_name_pool_str1320[sizeof("decimalnumber")];\r
+    char unicode_prop_name_pool_str1331[sizeof("lepc")];\r
+    char unicode_prop_name_pool_str1333[sizeof("inherited")];\r
+    char unicode_prop_name_pool_str1337[sizeof("incjkunifiedideographs")];\r
+    char unicode_prop_name_pool_str1338[sizeof("graphemeextend")];\r
+    char unicode_prop_name_pool_str1339[sizeof("saurashtra")];\r
+    char unicode_prop_name_pool_str1343[sizeof("caseignorable")];\r
+    char unicode_prop_name_pool_str1344[sizeof("emojicomponent")];\r
+    char unicode_prop_name_pool_str1345[sizeof("takr")];\r
+    char unicode_prop_name_pool_str1360[sizeof("inanatolianhieroglyphs")];\r
+    char unicode_prop_name_pool_str1363[sizeof("inornamentaldingbats")];\r
+    char unicode_prop_name_pool_str1366[sizeof("inphaistosdisc")];\r
+    char unicode_prop_name_pool_str1371[sizeof("insogdian")];\r
+    char unicode_prop_name_pool_str1372[sizeof("indingbats")];\r
+    char unicode_prop_name_pool_str1390[sizeof("sd")];\r
+    char unicode_prop_name_pool_str1395[sizeof("zanb")];\r
+    char unicode_prop_name_pool_str1397[sizeof("insinhalaarchaicnumbers")];\r
+    char unicode_prop_name_pool_str1398[sizeof("ideographic")];\r
+    char unicode_prop_name_pool_str1399[sizeof("sidd")];\r
+    char unicode_prop_name_pool_str1404[sizeof("linb")];\r
+    char unicode_prop_name_pool_str1407[sizeof("sogdian")];\r
+    char unicode_prop_name_pool_str1408[sizeof("bhks")];\r
+    char unicode_prop_name_pool_str1411[sizeof("sogo")];\r
+    char unicode_prop_name_pool_str1420[sizeof("bhaiksuki")];\r
+    char unicode_prop_name_pool_str1423[sizeof("term")];\r
+    char unicode_prop_name_pool_str1425[sizeof("insundanesesupplement")];\r
+    char unicode_prop_name_pool_str1428[sizeof("intags")];\r
+    char unicode_prop_name_pool_str1432[sizeof("innabataean")];\r
+    char unicode_prop_name_pool_str1435[sizeof("sinh")];\r
+    char unicode_prop_name_pool_str1438[sizeof("shavian")];\r
+    char unicode_prop_name_pool_str1440[sizeof("inbhaiksuki")];\r
+    char unicode_prop_name_pool_str1441[sizeof("inelbasan")];\r
+    char unicode_prop_name_pool_str1442[sizeof("inimperialaramaic")];\r
+    char unicode_prop_name_pool_str1446[sizeof("inshavian")];\r
+    char unicode_prop_name_pool_str1448[sizeof("intangut")];\r
+    char unicode_prop_name_pool_str1451[sizeof("inshorthandformatcontrols")];\r
+    char unicode_prop_name_pool_str1454[sizeof("inkanbun")];\r
+    char unicode_prop_name_pool_str1455[sizeof("sentenceterminal")];\r
+    char unicode_prop_name_pool_str1458[sizeof("medf")];\r
+    char unicode_prop_name_pool_str1461[sizeof("coptic")];\r
+    char unicode_prop_name_pool_str1466[sizeof("linearb")];\r
+    char unicode_prop_name_pool_str1468[sizeof("medefaidrin")];\r
+    char unicode_prop_name_pool_str1470[sizeof("inethiopicextendeda")];\r
+    char unicode_prop_name_pool_str1478[sizeof("inhanunoo")];\r
+    char unicode_prop_name_pool_str1482[sizeof("han")];\r
+    char unicode_prop_name_pool_str1483[sizeof("cwcf")];\r
+    char unicode_prop_name_pool_str1487[sizeof("hani")];\r
+    char unicode_prop_name_pool_str1490[sizeof("limb")];\r
+    char unicode_prop_name_pool_str1497[sizeof("hano")];\r
+    char unicode_prop_name_pool_str1504[sizeof("ingeometricshapesextended")];\r
+    char unicode_prop_name_pool_str1520[sizeof("hanunoo")];\r
+    char unicode_prop_name_pool_str1528[sizeof("inlatinextendedd")];\r
+    char unicode_prop_name_pool_str1530[sizeof("inarabic")];\r
+    char unicode_prop_name_pool_str1531[sizeof("cwu")];\r
+    char unicode_prop_name_pool_str1534[sizeof("asciihexdigit")];\r
+    char unicode_prop_name_pool_str1537[sizeof("ininscriptionalparthian")];\r
+    char unicode_prop_name_pool_str1539[sizeof("format")];\r
+    char unicode_prop_name_pool_str1540[sizeof("ininscriptionalpahlavi")];\r
+    char unicode_prop_name_pool_str1543[sizeof("hira")];\r
+    char unicode_prop_name_pool_str1549[sizeof("dsrt")];\r
+    char unicode_prop_name_pool_str1551[sizeof("copt")];\r
+    char unicode_prop_name_pool_str1552[sizeof("ugaritic")];\r
+    char unicode_prop_name_pool_str1555[sizeof("newa")];\r
+    char unicode_prop_name_pool_str1557[sizeof("arab")];\r
+    char unicode_prop_name_pool_str1558[sizeof("inkhojki")];\r
+    char unicode_prop_name_pool_str1559[sizeof("oldpersian")];\r
+    char unicode_prop_name_pool_str1569[sizeof("punctuation")];\r
+    char unicode_prop_name_pool_str1580[sizeof("deseret")];\r
+    char unicode_prop_name_pool_str1581[sizeof("newtailue")];\r
+    char unicode_prop_name_pool_str1582[sizeof("newline")];\r
+    char unicode_prop_name_pool_str1584[sizeof("ext")];\r
+    char unicode_prop_name_pool_str1586[sizeof("sund")];\r
+    char unicode_prop_name_pool_str1587[sizeof("ogam")];\r
+    char unicode_prop_name_pool_str1589[sizeof("inbasiclatin")];\r
+    char unicode_prop_name_pool_str1590[sizeof("inarabicpresentationformsa")];\r
+    char unicode_prop_name_pool_str1593[sizeof("cprt")];\r
+    char unicode_prop_name_pool_str1594[sizeof("imperialaramaic")];\r
+    char unicode_prop_name_pool_str1597[sizeof("incjkunifiedideographsextensiond")];\r
+    char unicode_prop_name_pool_str1598[sizeof("assigned")];\r
+    char unicode_prop_name_pool_str1605[sizeof("taiviet")];\r
+    char unicode_prop_name_pool_str1608[sizeof("innushu")];\r
+    char unicode_prop_name_pool_str1618[sizeof("inoriya")];\r
+    char unicode_prop_name_pool_str1622[sizeof("wara")];\r
+    char unicode_prop_name_pool_str1624[sizeof("java")];\r
+    char unicode_prop_name_pool_str1626[sizeof("sorasompeng")];\r
+    char unicode_prop_name_pool_str1628[sizeof("inkayahli")];\r
+    char unicode_prop_name_pool_str1630[sizeof("orkh")];\r
+    char unicode_prop_name_pool_str1633[sizeof("closepunctuation")];\r
+    char unicode_prop_name_pool_str1636[sizeof("grbase")];\r
+    char unicode_prop_name_pool_str1638[sizeof("tale")];\r
+    char unicode_prop_name_pool_str1640[sizeof("bopo")];\r
+    char unicode_prop_name_pool_str1659[sizeof("javanese")];\r
+    char unicode_prop_name_pool_str1661[sizeof("osge")];\r
+    char unicode_prop_name_pool_str1662[sizeof("oldpermic")];\r
+    char unicode_prop_name_pool_str1665[sizeof("inoldpersian")];\r
+    char unicode_prop_name_pool_str1677[sizeof("phag")];\r
+    char unicode_prop_name_pool_str1678[sizeof("alpha")];\r
+    char unicode_prop_name_pool_str1680[sizeof("lyci")];\r
+    char unicode_prop_name_pool_str1681[sizeof("lycian")];\r
+    char unicode_prop_name_pool_str1687[sizeof("inkatakanaphoneticextensions")];\r
+    char unicode_prop_name_pool_str1690[sizeof("incjksymbolsandpunctuation")];\r
+    char unicode_prop_name_pool_str1691[sizeof("inhanguljamo")];\r
+    char unicode_prop_name_pool_str1697[sizeof("inhanguljamoextendeda")];\r
+    char unicode_prop_name_pool_str1701[sizeof("avestan")];\r
+    char unicode_prop_name_pool_str1708[sizeof("inpalmyrene")];\r
+    char unicode_prop_name_pool_str1709[sizeof("inlepcha")];\r
+    char unicode_prop_name_pool_str1710[sizeof("indevanagari")];\r
+    char unicode_prop_name_pool_str1713[sizeof("taml")];\r
+    char unicode_prop_name_pool_str1714[sizeof("sgnw")];\r
+    char unicode_prop_name_pool_str1717[sizeof("inblockelements")];\r
+    char unicode_prop_name_pool_str1726[sizeof("inlisu")];\r
+    char unicode_prop_name_pool_str1728[sizeof("mymr")];\r
+    char unicode_prop_name_pool_str1731[sizeof("myanmar")];\r
+    char unicode_prop_name_pool_str1733[sizeof("graph")];\r
+    char unicode_prop_name_pool_str1736[sizeof("cuneiform")];\r
+    char unicode_prop_name_pool_str1737[sizeof("extender")];\r
+    char unicode_prop_name_pool_str1741[sizeof("inphoneticextensions")];\r
+    char unicode_prop_name_pool_str1749[sizeof("inmongoliansupplement")];\r
+    char unicode_prop_name_pool_str1750[sizeof("bopomofo")];\r
+    char unicode_prop_name_pool_str1754[sizeof("intibetan")];\r
+    char unicode_prop_name_pool_str1758[sizeof("innumberforms")];\r
+    char unicode_prop_name_pool_str1759[sizeof("shaw")];\r
+    char unicode_prop_name_pool_str1760[sizeof("inbatak")];\r
+    char unicode_prop_name_pool_str1765[sizeof("inoldpermic")];\r
+    char unicode_prop_name_pool_str1766[sizeof("incoptic")];\r
+    char unicode_prop_name_pool_str1776[sizeof("invariationselectors")];\r
+    char unicode_prop_name_pool_str1779[sizeof("insoyombo")];\r
+    char unicode_prop_name_pool_str1782[sizeof("terminalpunctuation")];\r
+    char unicode_prop_name_pool_str1783[sizeof("bugi")];\r
+    char unicode_prop_name_pool_str1791[sizeof("insyriacsupplement")];\r
+    char unicode_prop_name_pool_str1793[sizeof("sogd")];\r
+    char unicode_prop_name_pool_str1798[sizeof("hatran")];\r
+    char unicode_prop_name_pool_str1807[sizeof("inbyzantinemusicalsymbols")];\r
+    char unicode_prop_name_pool_str1809[sizeof("inbalinese")];\r
+    char unicode_prop_name_pool_str1811[sizeof("buginese")];\r
+    char unicode_prop_name_pool_str1815[sizeof("innoblock")];\r
+    char unicode_prop_name_pool_str1817[sizeof("inethiopicsupplement")];\r
+    char unicode_prop_name_pool_str1820[sizeof("inglagolitic")];\r
+    char unicode_prop_name_pool_str1824[sizeof("ingeorgiansupplement")];\r
+    char unicode_prop_name_pool_str1826[sizeof("space")];\r
+    char unicode_prop_name_pool_str1827[sizeof("sharada")];\r
+    char unicode_prop_name_pool_str1829[sizeof("dogra")];\r
+    char unicode_prop_name_pool_str1830[sizeof("avst")];\r
+    char unicode_prop_name_pool_str1834[sizeof("hex")];\r
+    char unicode_prop_name_pool_str1837[sizeof("inunifiedcanadianaboriginalsyllabics")];\r
+    char unicode_prop_name_pool_str1838[sizeof("inverticalforms")];\r
+    char unicode_prop_name_pool_str1839[sizeof("spacingmark")];\r
+    char unicode_prop_name_pool_str1845[sizeof("inarabicextendeda")];\r
+    char unicode_prop_name_pool_str1849[sizeof("hatr")];\r
+    char unicode_prop_name_pool_str1850[sizeof("modifierletter")];\r
+    char unicode_prop_name_pool_str1852[sizeof("inmyanmarextendedb")];\r
+    char unicode_prop_name_pool_str1858[sizeof("incjkcompatibility")];\r
+    char unicode_prop_name_pool_str1860[sizeof("khudawadi")];\r
+    char unicode_prop_name_pool_str1863[sizeof("invedicextensions")];\r
+    char unicode_prop_name_pool_str1868[sizeof("inethiopicextended")];\r
+    char unicode_prop_name_pool_str1875[sizeof("ingeorgianextended")];\r
+    char unicode_prop_name_pool_str1883[sizeof("shrd")];\r
+    char unicode_prop_name_pool_str1887[sizeof("dogr")];\r
+    char unicode_prop_name_pool_str1892[sizeof("intelugu")];\r
+    char unicode_prop_name_pool_str1898[sizeof("inmiscellaneousmathematicalsymbolsb")];\r
+    char unicode_prop_name_pool_str1899[sizeof("inmayannumerals")];\r
+    char unicode_prop_name_pool_str1902[sizeof("olditalic")];\r
+    char unicode_prop_name_pool_str1904[sizeof("inbraillepatterns")];\r
+    char unicode_prop_name_pool_str1911[sizeof("oalpha")];\r
+    char unicode_prop_name_pool_str1913[sizeof("inmathematicalalphanumericsymbols")];\r
+    char unicode_prop_name_pool_str1915[sizeof("inphoneticextensionssupplement")];\r
+    char unicode_prop_name_pool_str1916[sizeof("intagalog")];\r
+    char unicode_prop_name_pool_str1921[sizeof("insuttonsignwriting")];\r
+    char unicode_prop_name_pool_str1923[sizeof("siddham")];\r
+    char unicode_prop_name_pool_str1927[sizeof("intaiviet")];\r
+    char unicode_prop_name_pool_str1931[sizeof("nl")];\r
+    char unicode_prop_name_pool_str1934[sizeof("separator")];\r
+    char unicode_prop_name_pool_str1938[sizeof("ethi")];\r
+    char unicode_prop_name_pool_str1943[sizeof("patsyn")];\r
+    char unicode_prop_name_pool_str1948[sizeof("rohg")];\r
+    char unicode_prop_name_pool_str1950[sizeof("invariationselectorssupplement")];\r
+    char unicode_prop_name_pool_str1956[sizeof("inyiradicals")];\r
+    char unicode_prop_name_pool_str1957[sizeof("otheridcontinue")];\r
+    char unicode_prop_name_pool_str1964[sizeof("idsb")];\r
+    char unicode_prop_name_pool_str1965[sizeof("insmallformvariants")];\r
+    char unicode_prop_name_pool_str1972[sizeof("lydi")];\r
+    char unicode_prop_name_pool_str1973[sizeof("lydian")];\r
+    char unicode_prop_name_pool_str1978[sizeof("other")];\r
+    char unicode_prop_name_pool_str1987[sizeof("othernumber")];\r
+    char unicode_prop_name_pool_str1999[sizeof("cyrl")];\r
+    char unicode_prop_name_pool_str2003[sizeof("nd")];\r
+    char unicode_prop_name_pool_str2006[sizeof("induployan")];\r
+    char unicode_prop_name_pool_str2008[sizeof("dash")];\r
+    char unicode_prop_name_pool_str2010[sizeof("zanabazarsquare")];\r
+    char unicode_prop_name_pool_str2016[sizeof("incopticepactnumbers")];\r
+    char unicode_prop_name_pool_str2020[sizeof("number")];\r
+    char unicode_prop_name_pool_str2023[sizeof("inphagspa")];\r
+    char unicode_prop_name_pool_str2032[sizeof("mlym")];\r
+    char unicode_prop_name_pool_str2037[sizeof("malayalam")];\r
+    char unicode_prop_name_pool_str2038[sizeof("word")];\r
+    char unicode_prop_name_pool_str2040[sizeof("sarb")];\r
+    char unicode_prop_name_pool_str2047[sizeof("tang")];\r
+    char unicode_prop_name_pool_str2050[sizeof("otheralphabetic")];\r
+    char unicode_prop_name_pool_str2051[sizeof("tagbanwa")];\r
+    char unicode_prop_name_pool_str2057[sizeof("lepcha")];\r
+    char unicode_prop_name_pool_str2062[sizeof("surrogate")];\r
+    char unicode_prop_name_pool_str2063[sizeof("palmyrene")];\r
+    char unicode_prop_name_pool_str2064[sizeof("cf")];\r
+    char unicode_prop_name_pool_str2070[sizeof("ingothic")];\r
+    char unicode_prop_name_pool_str2071[sizeof("inmeroiticcursive")];\r
+    char unicode_prop_name_pool_str2077[sizeof("tamil")];\r
+    char unicode_prop_name_pool_str2084[sizeof("oldhungarian")];\r
+    char unicode_prop_name_pool_str2085[sizeof("titlecaseletter")];\r
+    char unicode_prop_name_pool_str2092[sizeof("thaa")];\r
+    char unicode_prop_name_pool_str2095[sizeof("inunifiedcanadianaboriginalsyllabicsextended")];\r
+    char unicode_prop_name_pool_str2097[sizeof("thaana")];\r
+    char unicode_prop_name_pool_str2099[sizeof("thai")];\r
+    char unicode_prop_name_pool_str2109[sizeof("pf")];\r
+    char unicode_prop_name_pool_str2110[sizeof("extendedpictographic")];\r
+    char unicode_prop_name_pool_str2121[sizeof("incjkradicalssupplement")];\r
+    char unicode_prop_name_pool_str2124[sizeof("indevanagariextended")];\r
+    char unicode_prop_name_pool_str2133[sizeof("gujr")];\r
+    char unicode_prop_name_pool_str2144[sizeof("gujarati")];\r
+    char unicode_prop_name_pool_str2158[sizeof("tirh")];\r
+    char unicode_prop_name_pool_str2160[sizeof("caucasianalbanian")];\r
+    char unicode_prop_name_pool_str2178[sizeof("incyrillicextendedb")];\r
+    char unicode_prop_name_pool_str2187[sizeof("soyo")];\r
+    char unicode_prop_name_pool_str2188[sizeof("inhangulsyllables")];\r
+    char unicode_prop_name_pool_str2190[sizeof("inbamum")];\r
+    char unicode_prop_name_pool_str2191[sizeof("taitham")];\r
+    char unicode_prop_name_pool_str2196[sizeof("meroitichieroglyphs")];\r
+    char unicode_prop_name_pool_str2213[sizeof("intifinagh")];\r
+    char unicode_prop_name_pool_str2214[sizeof("talu")];\r
+    char unicode_prop_name_pool_str2217[sizeof("inbengali")];\r
+    char unicode_prop_name_pool_str2222[sizeof("incjkunifiedideographsextensionf")];\r
+    char unicode_prop_name_pool_str2223[sizeof("buhd")];\r
+    char unicode_prop_name_pool_str2228[sizeof("telu")];\r
+    char unicode_prop_name_pool_str2229[sizeof("inbuginese")];\r
+    char unicode_prop_name_pool_str2232[sizeof("idstrinaryoperator")];\r
+    char unicode_prop_name_pool_str2233[sizeof("tirhuta")];\r
+    char unicode_prop_name_pool_str2238[sizeof("oldturkic")];\r
+    char unicode_prop_name_pool_str2245[sizeof("incombiningdiacriticalmarks")];\r
+    char unicode_prop_name_pool_str2249[sizeof("phagspa")];\r
+    char unicode_prop_name_pool_str2255[sizeof("incombiningdiacriticalmarksforsymbols")];\r
+    char unicode_prop_name_pool_str2258[sizeof("changeswhencasemapped")];\r
+    char unicode_prop_name_pool_str2259[sizeof("inlatin1supplement")];\r
+    char unicode_prop_name_pool_str2261[sizeof("inbrahmi")];\r
+    char unicode_prop_name_pool_str2263[sizeof("hang")];\r
+    char unicode_prop_name_pool_str2264[sizeof("nchar")];\r
+    char unicode_prop_name_pool_str2286[sizeof("oldsogdian")];\r
+    char unicode_prop_name_pool_str2299[sizeof("deva")];\r
+    char unicode_prop_name_pool_str2301[sizeof("ingujarati")];\r
+    char unicode_prop_name_pool_str2305[sizeof("otherlowercase")];\r
+    char unicode_prop_name_pool_str2311[sizeof("ingunjalagondi")];\r
+    char unicode_prop_name_pool_str2315[sizeof("devanagari")];\r
+    char unicode_prop_name_pool_str2319[sizeof("syrc")];\r
+    char unicode_prop_name_pool_str2325[sizeof("mahj")];\r
+    char unicode_prop_name_pool_str2330[sizeof("hiragana")];\r
+    char unicode_prop_name_pool_str2333[sizeof("orya")];\r
+    char unicode_prop_name_pool_str2336[sizeof("mahajani")];\r
+    char unicode_prop_name_pool_str2341[sizeof("incurrencysymbols")];\r
+    char unicode_prop_name_pool_str2342[sizeof("spaceseparator")];\r
+    char unicode_prop_name_pool_str2347[sizeof("otherletter")];\r
+    char unicode_prop_name_pool_str2348[sizeof("inlinearbsyllabary")];\r
+    char unicode_prop_name_pool_str2351[sizeof("inrejang")];\r
+    char unicode_prop_name_pool_str2352[sizeof("hmng")];\r
+    char unicode_prop_name_pool_str2357[sizeof("ogrext")];\r
+    char unicode_prop_name_pool_str2376[sizeof("inaegeannumbers")];\r
+    char unicode_prop_name_pool_str2389[sizeof("changeswhentitlecased")];\r
+    char unicode_prop_name_pool_str2409[sizeof("zp")];\r
+    char unicode_prop_name_pool_str2411[sizeof("mathsymbol")];\r
+    char unicode_prop_name_pool_str2414[sizeof("khoj")];\r
+    char unicode_prop_name_pool_str2419[sizeof("incombiningdiacriticalmarkssupplement")];\r
+    char unicode_prop_name_pool_str2421[sizeof("warangciti")];\r
+    char unicode_prop_name_pool_str2428[sizeof("syriac")];\r
+    char unicode_prop_name_pool_str2429[sizeof("finalpunctuation")];\r
+    char unicode_prop_name_pool_str2437[sizeof("othersymbol")];\r
+    char unicode_prop_name_pool_str2444[sizeof("currencysymbol")];\r
+    char unicode_prop_name_pool_str2445[sizeof("digit")];\r
+    char unicode_prop_name_pool_str2449[sizeof("emojipresentation")];\r
+    char unicode_prop_name_pool_str2455[sizeof("inpsalterpahlavi")];\r
+    char unicode_prop_name_pool_str2456[sizeof("softdotted")];\r
+    char unicode_prop_name_pool_str2460[sizeof("phlp")];\r
+    char unicode_prop_name_pool_str2461[sizeof("noncharactercodepoint")];\r
+    char unicode_prop_name_pool_str2464[sizeof("inlimbu")];\r
+    char unicode_prop_name_pool_str2465[sizeof("nonspacingmark")];\r
+    char unicode_prop_name_pool_str2467[sizeof("omath")];\r
+    char unicode_prop_name_pool_str2473[sizeof("cyrillic")];\r
+    char unicode_prop_name_pool_str2476[sizeof("inenclosedcjklettersandmonths")];\r
+    char unicode_prop_name_pool_str2482[sizeof("tangut")];\r
+    char unicode_prop_name_pool_str2484[sizeof("changeswhenlowercased")];\r
+    char unicode_prop_name_pool_str2496[sizeof("inalphabeticpresentationforms")];\r
+    char unicode_prop_name_pool_str2500[sizeof("intangutcomponents")];\r
+    char unicode_prop_name_pool_str2503[sizeof("incombiningdiacriticalmarksextended")];\r
+    char unicode_prop_name_pool_str2508[sizeof("ogham")];\r
+    char unicode_prop_name_pool_str2518[sizeof("osmanya")];\r
+    char unicode_prop_name_pool_str2521[sizeof("intagbanwa")];\r
+    char unicode_prop_name_pool_str2525[sizeof("inprivateusearea")];\r
+    char unicode_prop_name_pool_str2529[sizeof("inpaucinhau")];\r
+    char unicode_prop_name_pool_str2532[sizeof("otheruppercase")];\r
+    char unicode_prop_name_pool_str2533[sizeof("sylo")];\r
+    char unicode_prop_name_pool_str2537[sizeof("elba")];\r
+    char unicode_prop_name_pool_str2553[sizeof("paragraphseparator")];\r
+    char unicode_prop_name_pool_str2554[sizeof("inbassavah")];\r
+    char unicode_prop_name_pool_str2559[sizeof("otheridstart")];\r
+    char unicode_prop_name_pool_str2567[sizeof("signwriting")];\r
+    char unicode_prop_name_pool_str2576[sizeof("rjng")];\r
+    char unicode_prop_name_pool_str2584[sizeof("whitespace")];\r
+    char unicode_prop_name_pool_str2585[sizeof("incjkunifiedideographsextensionb")];\r
+    char unicode_prop_name_pool_str2586[sizeof("inletterlikesymbols")];\r
+    char unicode_prop_name_pool_str2623[sizeof("buhid")];\r
+    char unicode_prop_name_pool_str2642[sizeof("oupper")];\r
+    char unicode_prop_name_pool_str2644[sizeof("bassavah")];\r
+    char unicode_prop_name_pool_str2647[sizeof("inhebrew")];\r
+    char unicode_prop_name_pool_str2653[sizeof("narb")];\r
+    char unicode_prop_name_pool_str2659[sizeof("inbuhid")];\r
+    char unicode_prop_name_pool_str2662[sizeof("inbopomofo")];\r
+    char unicode_prop_name_pool_str2692[sizeof("elbasan")];\r
+    char unicode_prop_name_pool_str2700[sizeof("incombininghalfmarks")];\r
+    char unicode_prop_name_pool_str2707[sizeof("inindicsiyaqnumbers")];\r
+    char unicode_prop_name_pool_str2711[sizeof("changeswhenuppercased")];\r
+    char unicode_prop_name_pool_str2743[sizeof("inmathematicaloperators")];\r
+    char unicode_prop_name_pool_str2745[sizeof("inarabicmathematicalalphabeticsymbols")];\r
+    char unicode_prop_name_pool_str2764[sizeof("hluw")];\r
+    char unicode_prop_name_pool_str2770[sizeof("hexdigit")];\r
+    char unicode_prop_name_pool_str2771[sizeof("deprecated")];\r
+    char unicode_prop_name_pool_str2776[sizeof("insuperscriptsandsubscripts")];\r
+    char unicode_prop_name_pool_str2777[sizeof("nshu")];\r
+    char unicode_prop_name_pool_str2782[sizeof("injavanese")];\r
+    char unicode_prop_name_pool_str2790[sizeof("inbamumsupplement")];\r
+    char unicode_prop_name_pool_str2798[sizeof("hangul")];\r
+    char unicode_prop_name_pool_str2826[sizeof("unifiedideograph")];\r
+    char unicode_prop_name_pool_str2831[sizeof("tavt")];\r
+    char unicode_prop_name_pool_str2843[sizeof("othermath")];\r
+    char unicode_prop_name_pool_str2849[sizeof("pahawhhmong")];\r
+    char unicode_prop_name_pool_str2850[sizeof("sylotinagri")];\r
+    char unicode_prop_name_pool_str2853[sizeof("hung")];\r
+    char unicode_prop_name_pool_str2856[sizeof("kayahli")];\r
+    char unicode_prop_name_pool_str2861[sizeof("inpahawhhmong")];\r
+    char unicode_prop_name_pool_str2863[sizeof("upper")];\r
+    char unicode_prop_name_pool_str2884[sizeof("inalchemicalsymbols")];\r
+    char unicode_prop_name_pool_str2907[sizeof("nbat")];\r
+    char unicode_prop_name_pool_str2915[sizeof("nabataean")];\r
+    char unicode_prop_name_pool_str2929[sizeof("uppercase")];\r
+    char unicode_prop_name_pool_str2937[sizeof("hebr")];\r
+    char unicode_prop_name_pool_str2947[sizeof("inmahjongtiles")];\r
+    char unicode_prop_name_pool_str2954[sizeof("oldnortharabian")];\r
+    char unicode_prop_name_pool_str2963[sizeof("inarabicsupplement")];\r
+    char unicode_prop_name_pool_str2968[sizeof("tibt")];\r
+    char unicode_prop_name_pool_str2974[sizeof("tibetan")];\r
+    char unicode_prop_name_pool_str2975[sizeof("inhighprivateusesurrogates")];\r
+    char unicode_prop_name_pool_str2976[sizeof("insupplementalarrowsa")];\r
+    char unicode_prop_name_pool_str2977[sizeof("inarabicpresentationformsb")];\r
+    char unicode_prop_name_pool_str2986[sizeof("otherdefaultignorablecodepoint")];\r
+    char unicode_prop_name_pool_str2987[sizeof("symbol")];\r
+    char unicode_prop_name_pool_str3012[sizeof("inplayingcards")];\r
+    char unicode_prop_name_pool_str3013[sizeof("inhalfwidthandfullwidthforms")];\r
+    char unicode_prop_name_pool_str3052[sizeof("wspace")];\r
+    char unicode_prop_name_pool_str3071[sizeof("tfng")];\r
+    char unicode_prop_name_pool_str3080[sizeof("insupplementalmathematicaloperators")];\r
+    char unicode_prop_name_pool_str3083[sizeof("insupplementalarrowsc")];\r
+    char unicode_prop_name_pool_str3084[sizeof("inhanguljamoextendedb")];\r
+    char unicode_prop_name_pool_str3112[sizeof("aghb")];\r
+    char unicode_prop_name_pool_str3120[sizeof("cypriot")];\r
+    char unicode_prop_name_pool_str3127[sizeof("nushu")];\r
+    char unicode_prop_name_pool_str3130[sizeof("tifinagh")];\r
+    char unicode_prop_name_pool_str3139[sizeof("otherpunctuation")];\r
+    char unicode_prop_name_pool_str3177[sizeof("alphabetic")];\r
+    char unicode_prop_name_pool_str3184[sizeof("dupl")];\r
+    char unicode_prop_name_pool_str3190[sizeof("tglg")];\r
+    char unicode_prop_name_pool_str3193[sizeof("changeswhencasefolded")];\r
+    char unicode_prop_name_pool_str3210[sizeof("tagalog")];\r
+    char unicode_prop_name_pool_str3228[sizeof("modifiersymbol")];\r
+    char unicode_prop_name_pool_str3231[sizeof("any")];\r
+    char unicode_prop_name_pool_str3239[sizeof("inglagoliticsupplement")];\r
+    char unicode_prop_name_pool_str3262[sizeof("ethiopic")];\r
+    char unicode_prop_name_pool_str3293[sizeof("uppercaseletter")];\r
+    char unicode_prop_name_pool_str3297[sizeof("dashpunctuation")];\r
+    char unicode_prop_name_pool_str3304[sizeof("hanifirohingya")];\r
+    char unicode_prop_name_pool_str3328[sizeof("inyijinghexagramsymbols")];\r
+    char unicode_prop_name_pool_str3337[sizeof("incypriotsyllabary")];\r
+    char unicode_prop_name_pool_str3375[sizeof("rejang")];\r
+    char unicode_prop_name_pool_str3426[sizeof("defaultignorablecodepoint")];\r
+    char unicode_prop_name_pool_str3431[sizeof("tagb")];\r
+    char unicode_prop_name_pool_str3447[sizeof("dep")];\r
+    char unicode_prop_name_pool_str3471[sizeof("inyisyllables")];\r
+    char unicode_prop_name_pool_str3485[sizeof("oldsoutharabian")];\r
+    char unicode_prop_name_pool_str3504[sizeof("inlatinextendedb")];\r
+    char unicode_prop_name_pool_str3514[sizeof("insupplementalpunctuation")];\r
+    char unicode_prop_name_pool_str3517[sizeof("othergraphemeextend")];\r
+    char unicode_prop_name_pool_str3562[sizeof("hebrew")];\r
+    char unicode_prop_name_pool_str3564[sizeof("inboxdrawing")];\r
+    char unicode_prop_name_pool_str3570[sizeof("inhighsurrogates")];\r
+    char unicode_prop_name_pool_str3603[sizeof("telugu")];\r
+    char unicode_prop_name_pool_str3623[sizeof("inbopomofoextended")];\r
+    char unicode_prop_name_pool_str3666[sizeof("soyombo")];\r
+    char unicode_prop_name_pool_str3764[sizeof("inegyptianhieroglyphs")];\r
+    char unicode_prop_name_pool_str4052[sizeof("openpunctuation")];\r
+    char unicode_prop_name_pool_str4129[sizeof("insupplementaryprivateuseareaa")];\r
+    char unicode_prop_name_pool_str4261[sizeof("hyphen")];\r
+    char unicode_prop_name_pool_str4277[sizeof("inhangulcompatibilityjamo")];\r
+    char unicode_prop_name_pool_str4332[sizeof("egyp")];\r
+    char unicode_prop_name_pool_str4363[sizeof("insupplementalarrowsb")];\r
+    char unicode_prop_name_pool_str4404[sizeof("duployan")];\r
+    char unicode_prop_name_pool_str4639[sizeof("insupplementalsymbolsandpictographs")];\r
+    char unicode_prop_name_pool_str4682[sizeof("zyyy")];\r
+    char unicode_prop_name_pool_str5231[sizeof("egyptianhieroglyphs")];\r
+    char unicode_prop_name_pool_str5516[sizeof("insupplementaryprivateuseareab")];\r
+  };\r
+static const struct unicode_prop_name_pool_t unicode_prop_name_pool_contents =\r
+  {\r
+    "lana",\r
+    "lina",\r
+    "yi",\r
+    "cn",\r
+    "z",\r
+    "mn",\r
+    "yiii",\r
+    "ci",\r
+    "mani",\r
+    "lo",\r
+    "lao",\r
+    "laoo",\r
+    "miao",\r
+    "maka",\r
+    "me",\r
+    "co",\r
+    "loe",\r
+    "inkannada",\r
+    "innko",\r
+    "zzzz",\r
+    "gran",\r
+    "pi",\r
+    "lineara",\r
+    "cari",\r
+    "carian",\r
+    "pe",\r
+    "po",\r
+    "kana",\r
+    "mendekikakui",\r
+    "geor",\r
+    "meeteimayek",\r
+    "mark",\r
+    "m",\r
+    "grek",\r
+    "mero",\r
+    "mro",\r
+    "mroo",\r
+    "gonm",\r
+    "c",\r
+    "cakm",\r
+    "greek",\r
+    "inkharoshthi",\r
+    "mandaic",\r
+    "inosmanya",\r
+    "inarmenian",\r
+    "inmanichaean",\r
+    "common",\r
+    "inmro",\r
+    "inmiao",\r
+    "qaai",\r
+    "inchakma",\r
+    "cans",\r
+    "connectorpunctuation",\r
+    "lm",\r
+    "marc",\r
+    "inmyanmar",\r
+    "vai",\r
+    "vaii",\r
+    "inideographicsymbolsandpunctuation",\r
+    "merc",\r
+    "inavestan",\r
+    "incuneiformnumbersandpunctuation",\r
+    "inmakasar",\r
+    "inrunic",\r
+    "incarian",\r
+    "prependedconcatenationmark",\r
+    "lc",\r
+    "inipaextensions",\r
+    "inkhmer",\r
+    "perm",\r
+    "combiningmark",\r
+    "inahom",\r
+    "cc",\r
+    "incherokee",\r
+    "mc",\r
+    "insharada",\r
+    "masaramgondi",\r
+    "incuneiform",\r
+    "makasar",\r
+    "qaac",\r
+    "inarrows",\r
+    "armn",\r
+    "lineseparator",\r
+    "armi",\r
+    "pc",\r
+    "armenian",\r
+    "insamaritan",\r
+    "inmasaramgondi",\r
+    "inzanabazarsquare",\r
+    "qmark",\r
+    "inmarchen",\r
+    "zs",\r
+    "cs",\r
+    "incyrillic",\r
+    "incham",\r
+    "latn",\r
+    "inscriptionalparthian",\r
+    "latin",\r
+    "ri",\r
+    "inkhmersymbols",\r
+    "pcm",\r
+    "inthaana",\r
+    "mtei",\r
+    "insyriac",\r
+    "ps",\r
+    "inthai",\r
+    "l",\r
+    "innewa",\r
+    "inkatakana",\r
+    "ascii",\r
+    "initialpunctuation",\r
+    "inkaithi",\r
+    "arabic",\r
+    "inideographicdescriptioncharacters",\r
+    "inlineara",\r
+    "mand",\r
+    "mongolian",\r
+    "inlao",\r
+    "katakana",\r
+    "mend",\r
+    "intakri",\r
+    "inruminumeralsymbols",\r
+    "prti",\r
+    "modi",\r
+    "inwarangciti",\r
+    "incjkcompatibilityforms",\r
+    "inspecials",\r
+    "incjkcompatibilityideographs",\r
+    "ideo",\r
+    "privateuse",\r
+    "kali",\r
+    "inmyanmarextendeda",\r
+    "letter",\r
+    "brai",\r
+    "inkanaextendeda",\r
+    "vs",\r
+    "xidcontinue",\r
+    "lower",\r
+    "inchesssymbols",\r
+    "control",\r
+    "inadlam",\r
+    "grlink",\r
+    "knda",\r
+    "inmeeteimayek",\r
+    "kannada",\r
+    "inmiscellaneousmathematicalsymbolsa",\r
+    "palm",\r
+    "inlycian",\r
+    "intransportandmapsymbols",\r
+    "inoldnortharabian",\r
+    "inemoticons",\r
+    "letternumber",\r
+    "inmodi",\r
+    "xidc",\r
+    "lowercase",\r
+    "inancientsymbols",\r
+    "cwcm",\r
+    "inmedefaidrin",\r
+    "psalterpahlavi",\r
+    "gothic",\r
+    "inmendekikakui",\r
+    "brahmi",\r
+    "inolditalic",\r
+    "inmalayalam",\r
+    "xids",\r
+    "incommonindicnumberforms",\r
+    "meroiticcursive",\r
+    "inlinearbideograms",\r
+    "patternwhitespace",\r
+    "insundanese",\r
+    "joinc",\r
+    "inoldsogdian",\r
+    "incjkstrokes",\r
+    "so",\r
+    "patternsyntax",\r
+    "lt",\r
+    "incjkcompatibilityideographssupplement",\r
+    "inmandaic",\r
+    "insylotinagri",\r
+    "idc",\r
+    "sk",\r
+    "alnum",\r
+    "sora",\r
+    "bamum",\r
+    "inoldsoutharabian",\r
+    "patws",\r
+    "inmusicalsymbols",\r
+    "idsbinaryoperator",\r
+    "indominotiles",\r
+    "bass",\r
+    "innewtailue",\r
+    "ital",\r
+    "inmiscellaneoussymbols",\r
+    "inopticalcharacterrecognition",\r
+    "grext",\r
+    "inkanasupplement",\r
+    "inmiscellaneoussymbolsandarrows",\r
+    "inmiscellaneoussymbolsandpictographs",\r
+    "unknown",\r
+    "inmodifiertoneletters",\r
+    "ids",\r
+    "zl",\r
+    "inlatinextendeda",\r
+    "ll",\r
+    "intaile",\r
+    "incontrolpictures",\r
+    "s",\r
+    "batk",\r
+    "samr",\r
+    "lisu",\r
+    "print",\r
+    "samaritan",\r
+    "inlatinextendede",\r
+    "intaitham",\r
+    "pauc",\r
+    "batak",\r
+    "sm",\r
+    "bali",\r
+    "inancientgreekmusicalnotation",\r
+    "uideo",\r
+    "intaixuanjingsymbols",\r
+    "oriya",\r
+    "incyrillicextendeda",\r
+    "bengali",\r
+    "inugaritic",\r
+    "balinese",\r
+    "sc",\r
+    "intamil",\r
+    "inlydian",\r
+    "inmultani",\r
+    "gong",\r
+    "blank",\r
+    "ingrantha",\r
+    "mong",\r
+    "inearlydynasticcuneiform",\r
+    "insaurashtra",\r
+    "georgian",\r
+    "zinh",\r
+    "inosage",\r
+    "ingeneralpunctuation",\r
+    "incaucasianalbanian",\r
+    "pd",\r
+    "canadianaboriginal",\r
+    "glagolitic",\r
+    "inspacingmodifierletters",\r
+    "idcontinue",\r
+    "inoldturkic",\r
+    "plrd",\r
+    "joincontrol",\r
+    "idst",\r
+    "inhanifirohingya",\r
+    "osage",\r
+    "incyrillicextendedc",\r
+    "ingeorgian",\r
+    "unassigned",\r
+    "lowercaseletter",\r
+    "emoji",\r
+    "indeseret",\r
+    "inancientgreeknumbers",\r
+    "inmongolian",\r
+    "cher",\r
+    "cherokee",\r
+    "inhiragana",\r
+    "phoenician",\r
+    "marchen",\r
+    "xsux",\r
+    "cham",\r
+    "chakma",\r
+    "inmeeteimayekextensions",\r
+    "inlatinextendedc",\r
+    "kaithi",\r
+    "graphemebase",\r
+    "idstart",\r
+    "osma",\r
+    "adlm",\r
+    "inmahajani",\r
+    "cased",\r
+    "runr",\r
+    "sinhala",\r
+    "manichaean",\r
+    "inogham",\r
+    "graphemelink",\r
+    "ingurmukhi",\r
+    "cwt",\r
+    "khojki",\r
+    "khar",\r
+    "multani",\r
+    "gunjalagondi",\r
+    "casedletter",\r
+    "inethiopic",\r
+    "inolchiki",\r
+    "variationselector",\r
+    "sind",\r
+    "incountingrodnumerals",\r
+    "logicalorderexception",\r
+    "insinhala",\r
+    "bidic",\r
+    "dia",\r
+    "insorasompeng",\r
+    "anatolianhieroglyphs",\r
+    "inlowsurrogates",\r
+    "di",\r
+    "ahom",\r
+    "inenclosedalphanumerics",\r
+    "adlam",\r
+    "inkhudawadi",\r
+    "cntrl",\r
+    "xidstart",\r
+    "xdigit",\r
+    "phnx",\r
+    "emojimodifier",\r
+    "khmr",\r
+    "insiddham",\r
+    "cwl",\r
+    "bamu",\r
+    "ingreekandcoptic",\r
+    "inmiscellaneoustechnical",\r
+    "sterm",\r
+    "inscriptionalpahlavi",\r
+    "inlatinextendedadditional",\r
+    "kharoshthi",\r
+    "runic",\r
+    "odi",\r
+    "ahex",\r
+    "khmer",\r
+    "incyrillicsupplement",\r
+    "incherokeesupplement",\r
+    "inmeroitichieroglyphs",\r
+    "enclosingmark",\r
+    "glag",\r
+    "inkangxiradicals",\r
+    "math",\r
+    "quotationmark",\r
+    "goth",\r
+    "emojimodifierbase",\r
+    "ugar",\r
+    "lu",\r
+    "radical",\r
+    "incjkunifiedideographsextensiona",\r
+    "beng",\r
+    "braille",\r
+    "n",\r
+    "sundanese",\r
+    "olck",\r
+    "incjkunifiedideographsextensione",\r
+    "diacritic",\r
+    "grantha",\r
+    "inenclosedalphanumericsupplement",\r
+    "olchiki",\r
+    "oidc",\r
+    "olower",\r
+    "regionalindicator",\r
+    "no",\r
+    "intirhuta",\r
+    "inhatran",\r
+    "saur",\r
+    "kthi",\r
+    "ingeometricshapes",\r
+    "guru",\r
+    "ingreekextended",\r
+    "paucinhau",\r
+    "xpeo",\r
+    "p",\r
+    "phli",\r
+    "nko",\r
+    "nkoo",\r
+    "oids",\r
+    "indogra",\r
+    "inphoenician",\r
+    "punct",\r
+    "limbu",\r
+    "gurmukhi",\r
+    "mult",\r
+    "brah",\r
+    "taile",\r
+    "inoldhungarian",\r
+    "takri",\r
+    "bidicontrol",\r
+    "invai",\r
+    "incjkunifiedideographsextensionc",\r
+    "inenclosedideographicsupplement",\r
+    "decimalnumber",\r
+    "lepc",\r
+    "inherited",\r
+    "incjkunifiedideographs",\r
+    "graphemeextend",\r
+    "saurashtra",\r
+    "caseignorable",\r
+    "emojicomponent",\r
+    "takr",\r
+    "inanatolianhieroglyphs",\r
+    "inornamentaldingbats",\r
+    "inphaistosdisc",\r
+    "insogdian",\r
+    "indingbats",\r
+    "sd",\r
+    "zanb",\r
+    "insinhalaarchaicnumbers",\r
+    "ideographic",\r
+    "sidd",\r
+    "linb",\r
+    "sogdian",\r
+    "bhks",\r
+    "sogo",\r
+    "bhaiksuki",\r
+    "term",\r
+    "insundanesesupplement",\r
+    "intags",\r
+    "innabataean",\r
+    "sinh",\r
+    "shavian",\r
+    "inbhaiksuki",\r
+    "inelbasan",\r
+    "inimperialaramaic",\r
+    "inshavian",\r
+    "intangut",\r
+    "inshorthandformatcontrols",\r
+    "inkanbun",\r
+    "sentenceterminal",\r
+    "medf",\r
+    "coptic",\r
+    "linearb",\r
+    "medefaidrin",\r
+    "inethiopicextendeda",\r
+    "inhanunoo",\r
+    "han",\r
+    "cwcf",\r
+    "hani",\r
+    "limb",\r
+    "hano",\r
+    "ingeometricshapesextended",\r
+    "hanunoo",\r
+    "inlatinextendedd",\r
+    "inarabic",\r
+    "cwu",\r
+    "asciihexdigit",\r
+    "ininscriptionalparthian",\r
+    "format",\r
+    "ininscriptionalpahlavi",\r
+    "hira",\r
+    "dsrt",\r
+    "copt",\r
+    "ugaritic",\r
+    "newa",\r
+    "arab",\r
+    "inkhojki",\r
+    "oldpersian",\r
+    "punctuation",\r
+    "deseret",\r
+    "newtailue",\r
+    "newline",\r
+    "ext",\r
+    "sund",\r
+    "ogam",\r
+    "inbasiclatin",\r
+    "inarabicpresentationformsa",\r
+    "cprt",\r
+    "imperialaramaic",\r
+    "incjkunifiedideographsextensiond",\r
+    "assigned",\r
+    "taiviet",\r
+    "innushu",\r
+    "inoriya",\r
+    "wara",\r
+    "java",\r
+    "sorasompeng",\r
+    "inkayahli",\r
+    "orkh",\r
+    "closepunctuation",\r
+    "grbase",\r
+    "tale",\r
+    "bopo",\r
+    "javanese",\r
+    "osge",\r
+    "oldpermic",\r
+    "inoldpersian",\r
+    "phag",\r
+    "alpha",\r
+    "lyci",\r
+    "lycian",\r
+    "inkatakanaphoneticextensions",\r
+    "incjksymbolsandpunctuation",\r
+    "inhanguljamo",\r
+    "inhanguljamoextendeda",\r
+    "avestan",\r
+    "inpalmyrene",\r
+    "inlepcha",\r
+    "indevanagari",\r
+    "taml",\r
+    "sgnw",\r
+    "inblockelements",\r
+    "inlisu",\r
+    "mymr",\r
+    "myanmar",\r
+    "graph",\r
+    "cuneiform",\r
+    "extender",\r
+    "inphoneticextensions",\r
+    "inmongoliansupplement",\r
+    "bopomofo",\r
+    "intibetan",\r
+    "innumberforms",\r
+    "shaw",\r
+    "inbatak",\r
+    "inoldpermic",\r
+    "incoptic",\r
+    "invariationselectors",\r
+    "insoyombo",\r
+    "terminalpunctuation",\r
+    "bugi",\r
+    "insyriacsupplement",\r
+    "sogd",\r
+    "hatran",\r
+    "inbyzantinemusicalsymbols",\r
+    "inbalinese",\r
+    "buginese",\r
+    "innoblock",\r
+    "inethiopicsupplement",\r
+    "inglagolitic",\r
+    "ingeorgiansupplement",\r
+    "space",\r
+    "sharada",\r
+    "dogra",\r
+    "avst",\r
+    "hex",\r
+    "inunifiedcanadianaboriginalsyllabics",\r
+    "inverticalforms",\r
+    "spacingmark",\r
+    "inarabicextendeda",\r
+    "hatr",\r
+    "modifierletter",\r
+    "inmyanmarextendedb",\r
+    "incjkcompatibility",\r
+    "khudawadi",\r
+    "invedicextensions",\r
+    "inethiopicextended",\r
+    "ingeorgianextended",\r
+    "shrd",\r
+    "dogr",\r
+    "intelugu",\r
+    "inmiscellaneousmathematicalsymbolsb",\r
+    "inmayannumerals",\r
+    "olditalic",\r
+    "inbraillepatterns",\r
+    "oalpha",\r
+    "inmathematicalalphanumericsymbols",\r
+    "inphoneticextensionssupplement",\r
+    "intagalog",\r
+    "insuttonsignwriting",\r
+    "siddham",\r
+    "intaiviet",\r
+    "nl",\r
+    "separator",\r
+    "ethi",\r
+    "patsyn",\r
+    "rohg",\r
+    "invariationselectorssupplement",\r
+    "inyiradicals",\r
+    "otheridcontinue",\r
+    "idsb",\r
+    "insmallformvariants",\r
+    "lydi",\r
+    "lydian",\r
+    "other",\r
+    "othernumber",\r
+    "cyrl",\r
+    "nd",\r
+    "induployan",\r
+    "dash",\r
+    "zanabazarsquare",\r
+    "incopticepactnumbers",\r
+    "number",\r
+    "inphagspa",\r
+    "mlym",\r
+    "malayalam",\r
+    "word",\r
+    "sarb",\r
+    "tang",\r
+    "otheralphabetic",\r
+    "tagbanwa",\r
+    "lepcha",\r
+    "surrogate",\r
+    "palmyrene",\r
+    "cf",\r
+    "ingothic",\r
+    "inmeroiticcursive",\r
+    "tamil",\r
+    "oldhungarian",\r
+    "titlecaseletter",\r
+    "thaa",\r
+    "inunifiedcanadianaboriginalsyllabicsextended",\r
+    "thaana",\r
+    "thai",\r
+    "pf",\r
+    "extendedpictographic",\r
+    "incjkradicalssupplement",\r
+    "indevanagariextended",\r
+    "gujr",\r
+    "gujarati",\r
+    "tirh",\r
+    "caucasianalbanian",\r
+    "incyrillicextendedb",\r
+    "soyo",\r
+    "inhangulsyllables",\r
+    "inbamum",\r
+    "taitham",\r
+    "meroitichieroglyphs",\r
+    "intifinagh",\r
+    "talu",\r
+    "inbengali",\r
+    "incjkunifiedideographsextensionf",\r
+    "buhd",\r
+    "telu",\r
+    "inbuginese",\r
+    "idstrinaryoperator",\r
+    "tirhuta",\r
+    "oldturkic",\r
+    "incombiningdiacriticalmarks",\r
+    "phagspa",\r
+    "incombiningdiacriticalmarksforsymbols",\r
+    "changeswhencasemapped",\r
+    "inlatin1supplement",\r
+    "inbrahmi",\r
+    "hang",\r
+    "nchar",\r
+    "oldsogdian",\r
+    "deva",\r
+    "ingujarati",\r
+    "otherlowercase",\r
+    "ingunjalagondi",\r
+    "devanagari",\r
+    "syrc",\r
+    "mahj",\r
+    "hiragana",\r
+    "orya",\r
+    "mahajani",\r
+    "incurrencysymbols",\r
+    "spaceseparator",\r
+    "otherletter",\r
+    "inlinearbsyllabary",\r
+    "inrejang",\r
+    "hmng",\r
+    "ogrext",\r
+    "inaegeannumbers",\r
+    "changeswhentitlecased",\r
+    "zp",\r
+    "mathsymbol",\r
+    "khoj",\r
+    "incombiningdiacriticalmarkssupplement",\r
+    "warangciti",\r
+    "syriac",\r
+    "finalpunctuation",\r
+    "othersymbol",\r
+    "currencysymbol",\r
+    "digit",\r
+    "emojipresentation",\r
+    "inpsalterpahlavi",\r
+    "softdotted",\r
+    "phlp",\r
+    "noncharactercodepoint",\r
+    "inlimbu",\r
+    "nonspacingmark",\r
+    "omath",\r
+    "cyrillic",\r
+    "inenclosedcjklettersandmonths",\r
+    "tangut",\r
+    "changeswhenlowercased",\r
+    "inalphabeticpresentationforms",\r
+    "intangutcomponents",\r
+    "incombiningdiacriticalmarksextended",\r
+    "ogham",\r
+    "osmanya",\r
+    "intagbanwa",\r
+    "inprivateusearea",\r
+    "inpaucinhau",\r
+    "otheruppercase",\r
+    "sylo",\r
+    "elba",\r
+    "paragraphseparator",\r
+    "inbassavah",\r
+    "otheridstart",\r
+    "signwriting",\r
+    "rjng",\r
+    "whitespace",\r
+    "incjkunifiedideographsextensionb",\r
+    "inletterlikesymbols",\r
+    "buhid",\r
+    "oupper",\r
+    "bassavah",\r
+    "inhebrew",\r
+    "narb",\r
+    "inbuhid",\r
+    "inbopomofo",\r
+    "elbasan",\r
+    "incombininghalfmarks",\r
+    "inindicsiyaqnumbers",\r
+    "changeswhenuppercased",\r
+    "inmathematicaloperators",\r
+    "inarabicmathematicalalphabeticsymbols",\r
+    "hluw",\r
+    "hexdigit",\r
+    "deprecated",\r
+    "insuperscriptsandsubscripts",\r
+    "nshu",\r
+    "injavanese",\r
+    "inbamumsupplement",\r
+    "hangul",\r
+    "unifiedideograph",\r
+    "tavt",\r
+    "othermath",\r
+    "pahawhhmong",\r
+    "sylotinagri",\r
+    "hung",\r
+    "kayahli",\r
+    "inpahawhhmong",\r
+    "upper",\r
+    "inalchemicalsymbols",\r
+    "nbat",\r
+    "nabataean",\r
+    "uppercase",\r
+    "hebr",\r
+    "inmahjongtiles",\r
+    "oldnortharabian",\r
+    "inarabicsupplement",\r
+    "tibt",\r
+    "tibetan",\r
+    "inhighprivateusesurrogates",\r
+    "insupplementalarrowsa",\r
+    "inarabicpresentationformsb",\r
+    "otherdefaultignorablecodepoint",\r
+    "symbol",\r
+    "inplayingcards",\r
+    "inhalfwidthandfullwidthforms",\r
+    "wspace",\r
+    "tfng",\r
+    "insupplementalmathematicaloperators",\r
+    "insupplementalarrowsc",\r
+    "inhanguljamoextendedb",\r
+    "aghb",\r
+    "cypriot",\r
+    "nushu",\r
+    "tifinagh",\r
+    "otherpunctuation",\r
+    "alphabetic",\r
+    "dupl",\r
+    "tglg",\r
+    "changeswhencasefolded",\r
+    "tagalog",\r
+    "modifiersymbol",\r
+    "any",\r
+    "inglagoliticsupplement",\r
+    "ethiopic",\r
+    "uppercaseletter",\r
+    "dashpunctuation",\r
+    "hanifirohingya",\r
+    "inyijinghexagramsymbols",\r
+    "incypriotsyllabary",\r
+    "rejang",\r
+    "defaultignorablecodepoint",\r
+    "tagb",\r
+    "dep",\r
+    "inyisyllables",\r
+    "oldsoutharabian",\r
+    "inlatinextendedb",\r
+    "insupplementalpunctuation",\r
+    "othergraphemeextend",\r
+    "hebrew",\r
+    "inboxdrawing",\r
+    "inhighsurrogates",\r
+    "telugu",\r
+    "inbopomofoextended",\r
+    "soyombo",\r
+    "inegyptianhieroglyphs",\r
+    "openpunctuation",\r
+    "insupplementaryprivateuseareaa",\r
+    "hyphen",\r
+    "inhangulcompatibilityjamo",\r
+    "egyp",\r
+    "insupplementalarrowsb",\r
+    "duployan",\r
+    "insupplementalsymbolsandpictographs",\r
+    "zyyy",\r
+    "egyptianhieroglyphs",\r
+    "insupplementaryprivateuseareab"\r
+  };\r
+#define unicode_prop_name_pool ((const char *) &unicode_prop_name_pool_contents)\r
+static const struct PoolPropertyNameCtype *\r
+unicode_lookup_property_name (register const char *str, register size_t len)\r
+{\r
+  static const struct PoolPropertyNameCtype wordlist[] =\r
+    {\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1},\r
+\r
+      {pool_offset(10),                               235},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(17),                               124},\r
+\r
+      {pool_offset(18),                                 257},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(22),                                  53},\r
+      {-1},\r
+\r
+      {pool_offset(24),                                  258},\r
+\r
+      {pool_offset(25),                                 153},\r
+      {-1},\r
+\r
+      {pool_offset(27),                               257},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(30),                                  40},\r
+\r
+      {pool_offset(31),                               141},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(39),                                 129},\r
+\r
+      {pool_offset(40),                                120},\r
+\r
+      {pool_offset(41),                               120},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(45),                               152},\r
+\r
+      {pool_offset(46),                               138},\r
+\r
+      {pool_offset(47),                                 146},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(50),                                  54},\r
+\r
+      {pool_offset(51),                                130},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(68),                          291},\r
+      {-1},\r
+\r
+      {pool_offset(70),                              279},\r
+\r
+      {pool_offset(71),                               249},\r
+      {-1},\r
+\r
+      {pool_offset(73),                                82},\r
+      {-1},\r
+\r
+      {pool_offset(75),                                 202},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(79),                            124},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(84),                                39},\r
+\r
+      {pool_offset(85),                              39},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(89),                                 198},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(95),                                 203},\r
+\r
+      {pool_offset(96),                               112},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(99),                       149},\r
+      {-1},\r
+\r
+      {pool_offset(101),                                79},\r
+\r
+      {pool_offset(102),                        148},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(105),                               136},\r
+      {-1},\r
+\r
+      {pool_offset(107),                                  136},\r
+      {-1},\r
+\r
+      {pool_offset(109),                                86},\r
+      {-1},\r
+\r
+      {pool_offset(111),                               151},\r
+      {-1},\r
+\r
+      {pool_offset(113),                                156},\r
+\r
+      {pool_offset(114),                               156},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(120),                               143},\r
+      {-1},\r
+\r
+      {pool_offset(122),                                   37},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(132),                                45},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(135),                               86},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(138),                       456},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(141),                            140},\r
+      {-1},\r
+\r
+      {pool_offset(143),                          442},\r
+\r
+      {pool_offset(144),                         273},\r
+\r
+      {pool_offset(145),                       459},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(149),                              55},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(156),                              504},\r
+\r
+      {pool_offset(157),                             508},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(160),                               105},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(168),                           473},\r
+      {-1},\r
+\r
+      {pool_offset(170),                                38},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1},\r
+\r
+      {pool_offset(181),               196},\r
+      {-1},\r
+\r
+      {pool_offset(183),                                 128},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(187),                               142},\r
+\r
+      {pool_offset(188),                          297},\r
+\r
+      {pool_offset(189),                                251},\r
+\r
+      {pool_offset(190),                               251},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(199), 509},\r
+      {-1},\r
+\r
+      {pool_offset(201),                               150},\r
+      {-1},\r
+\r
+      {pool_offset(203),                          460},\r
+\r
+      {pool_offset(204),   499},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(210),                          497},\r
+\r
+      {pool_offset(211),                            305},\r
+\r
+      {pool_offset(212),                           433},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(217),         204},\r
+      {-1},\r
+\r
+      {pool_offset(219),                                 119},\r
+\r
+      {pool_offset(220),                    267},\r
+      {-1},\r
+\r
+      {pool_offset(222),                            310},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(225),                               174},\r
+      {-1},\r
+\r
+      {pool_offset(227),                      136},\r
+      {-1},\r
+\r
+      {pool_offset(229),                             487},\r
+\r
+      {pool_offset(230),                                  43},\r
+      {-1},\r
+\r
+      {pool_offset(232),                         302},\r
+\r
+      {pool_offset(233),                                 145},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(245),                          475},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(251),                       143},\r
+\r
+      {pool_offset(252),                        498},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(257),                            138},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(260),                                56},\r
+\r
+      {pool_offset(261),                           340},\r
+\r
+      {pool_offset(262),                                22},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(265),                      260},\r
+\r
+      {pool_offset(266),                               104},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(275),                                 196},\r
+\r
+      {pool_offset(276),                            22},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(280),                        280},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(290),                     495},\r
+      {-1},\r
+\r
+      {pool_offset(292),                  490},\r
+\r
+      {pool_offset(293),                              207},\r
+      {-1},\r
+\r
+      {pool_offset(295),                          494},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(301),                                 262},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(314),                                  57},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(318),                         271},\r
+\r
+      {pool_offset(319),                             401},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(323),                               121},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(326),              107},\r
+\r
+      {pool_offset(327),                              121},\r
+      {-1},\r
+\r
+      {pool_offset(329),                                 209},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(336),                     316},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1},\r
+\r
+      {pool_offset(347),                                204},\r
+      {-1},\r
+\r
+      {pool_offset(349),                           278},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(355),                               148},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(358),                           276},\r
+\r
+      {pool_offset(359),                                 205},\r
+      {-1},\r
+\r
+      {pool_offset(361),                             294},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(367),                                  118},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(371),                             481},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(376),                         371},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(382),                               14},\r
+\r
+      {pool_offset(383),                 202},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(388),                           471},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(393),                              21},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(405), 368},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(417),                          446},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(423),                               140},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(429),                          155},\r
+\r
+      {pool_offset(430),                              295},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(435),                           112},\r
+      {-1},\r
+\r
+      {pool_offset(437),                               149},\r
+      {-1},\r
+\r
+      {pool_offset(439),                            486},\r
+      {-1},\r
+\r
+      {pool_offset(441),               467},\r
+\r
+      {pool_offset(442),                               107},\r
+      {-1},\r
+\r
+      {pool_offset(444),                               154},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(447),                       489},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(453),            421},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(457),                         425},\r
+\r
+      {pool_offset(458),       415},\r
+\r
+      {pool_offset(459),                               103},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(462),                          54},\r
+\r
+      {pool_offset(463),                               113},\r
+      {-1},\r
+\r
+      {pool_offset(465),                 402},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(468),                             118},\r
+\r
+      {pool_offset(469),                                34},\r
+\r
+      {pool_offset(470),                    513},\r
+      {-1},\r
+\r
+      {pool_offset(472),                                 252},\r
+\r
+      {pool_offset(473),                        255},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(477),                                6},\r
+\r
+      {pool_offset(478),                     543},\r
+      {-1},\r
+\r
+      {pool_offset(480),                             43},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(487),                            527},\r
+\r
+      {pool_offset(488),                              85},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(495),                               111},\r
+\r
+      {pool_offset(496),                      408},\r
+      {-1},\r
+\r
+      {pool_offset(498),                            111},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(511), 351},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(515),                               192},\r
+\r
+      {pool_offset(516),                           432},\r
+\r
+      {pool_offset(517),           538},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(526),                  458},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(532),                        536},\r
+\r
+      {pool_offset(533),                       165},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(536),                             484},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(539),                               255},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(543),                          131},\r
+      {-1},\r
+\r
+      {pool_offset(545),                   430},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(548),                                48},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(553),                      507},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(556),                     206},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(564),                              81},\r
+\r
+      {pool_offset(565),                     526},\r
+      {-1},\r
+\r
+      {pool_offset(567),                              33},\r
+      {-1},\r
+\r
+      {pool_offset(569),                        435},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1},\r
+\r
+      {pool_offset(580),                        292},\r
+\r
+      {pool_offset(581),                               256},\r
+\r
+      {pool_offset(582),           392},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(588),                    150},\r
+\r
+      {pool_offset(589),                 427},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(597),                  194},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(604),                        321},\r
+      {-1},\r
+\r
+      {pool_offset(606),                              109},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(611),                       468},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(619),                       376},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(626),                                 224},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(630),                      193},\r
+\r
+      {pool_offset(631),                                 132},\r
+\r
+      {pool_offset(632), 549},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(635),                          281},\r
+\r
+      {pool_offset(636),                      391},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(641),                                101},\r
+\r
+      {pool_offset(642),                                 222},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(656),                               13},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(670),                               227},\r
+\r
+      {pool_offset(671),                               26},\r
+\r
+      {pool_offset(672),                  457},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(675),                              194},\r
+\r
+      {pool_offset(676),                   518},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(690),                   99},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(699),                      531},\r
+      {-1},\r
+\r
+      {pool_offset(701),                                27},\r
+      {-1},\r
+\r
+      {pool_offset(703),                        315},\r
+      {-1},\r
+\r
+      {pool_offset(705),                               172},\r
+      {-1},\r
+\r
+      {pool_offset(707),             349},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(710),      344},\r
+\r
+      {pool_offset(711),                               84},\r
+\r
+      {pool_offset(712),                   512},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(716),    357},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(721), 535},\r
+      {-1},\r
+\r
+      {pool_offset(723),                            249},\r
+\r
+      {pool_offset(724),              389},\r
+\r
+      {pool_offset(725),                                102},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(729),                                 260},\r
+\r
+      {pool_offset(730),                   265},\r
+\r
+      {pool_offset(731),                                 127},\r
+\r
+      {pool_offset(732),                            314},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(738),                  343},\r
+      {-1},\r
+\r
+      {pool_offset(740),                                  212},\r
+\r
+      {pool_offset(741),                                28},\r
+\r
+      {pool_offset(742),                               213},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1},\r
+\r
+      {pool_offset(753),                               126},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(756),                                7},\r
+\r
+      {pool_offset(757),                          213},\r
+\r
+      {pool_offset(758),                   406},\r
+\r
+      {pool_offset(759),                          318},\r
+\r
+      {pool_offset(760),                               195},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(767),                               28},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(770),                                 223},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(773),                                25},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(778),      519},\r
+\r
+      {pool_offset(779),                              248},\r
+      {-1},\r
+\r
+      {pool_offset(781),               521},\r
+\r
+      {pool_offset(782),                              179},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(791),                364},\r
+      {-1},\r
+\r
+      {pool_offset(793),                             29},\r
+\r
+      {pool_offset(794),                         438},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(801),                            25},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(806),                                 215},\r
+\r
+      {pool_offset(807),                            289},\r
+\r
+      {pool_offset(808),                           453},\r
+\r
+      {pool_offset(809),                          478},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(814),                                88},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(817),                                2},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(823),                          480},\r
+\r
+      {pool_offset(824),                               155},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(833),           500},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(838),                       394},\r
+\r
+      {pool_offset(839),                            79},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(846),                               105},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(849),                            443},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(854),               334},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(857),                445},\r
+      {-1},\r
+\r
+      {pool_offset(859),                                 197},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(866),                  38},\r
+\r
+      {pool_offset(867),                          80},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(870),           268},\r
+\r
+      {pool_offset(871),                         101},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(875),                        464},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(884),                               152},\r
+\r
+      {pool_offset(885),                        109},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(890),                               100},\r
+      {-1},\r
+\r
+      {pool_offset(892),                   466},\r
+\r
+      {pool_offset(893),                              180},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(898),                325},\r
+      {-1},\r
+\r
+      {pool_offset(900),                         298},\r
+      {-1},\r
+\r
+      {pool_offset(902),                          53},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(907),                    127},\r
+\r
+      {pool_offset(908),                               71},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(912),                          440},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(916),              429},\r
+\r
+      {pool_offset(917),                        311},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(922),                                52},\r
+\r
+      {pool_offset(923),                            52},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(928),                         370},\r
+      {-1},\r
+\r
+      {pool_offset(930),                         201},\r
+\r
+      {pool_offset(931),                            142},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(937),                                58},\r
+\r
+      {pool_offset(938),                                46},\r
+      {-1},\r
+\r
+      {pool_offset(940),                              45},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(943),            404},\r
+\r
+      {pool_offset(944),                   359},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(947),                             110},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(951),                        83},\r
+\r
+      {pool_offset(952),                            102},\r
+\r
+      {pool_offset(953),                               181},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(962),                                16},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(965),                         474},\r
+\r
+      {pool_offset(966),                               41},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(969),                               211},\r
+\r
+      {pool_offset(970),                            221},\r
+\r
+      {pool_offset(971),                         141},\r
+\r
+      {pool_offset(972),                            304},\r
+\r
+      {pool_offset(973),                        85},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(976),                         286},\r
+\r
+      {pool_offset(977),                                 50},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(982),                             116},\r
+\r
+      {pool_offset(983),                               114},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(987),                            157},\r
+      {-1},\r
+\r
+      {pool_offset(989),                        88},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(995),                        119},\r
+      {-1},\r
+\r
+      {pool_offset(997),                         300},\r
+      {-1},\r
+\r
+      {pool_offset(999),                          324},\r
+\r
+      {pool_offset(1000),                  252},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1003),                               117},\r
+\r
+      {pool_offset(1004),              522},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1007),              130},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1020),                          293},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1024),                               31},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1034),                                 66},\r
+\r
+      {pool_offset(1035),                      472},\r
+\r
+      {pool_offset(1036),                19},\r
+      {-1},\r
+\r
+      {pool_offset(1038),                    413},\r
+      {-1},\r
+\r
+      {pool_offset(1040),                                  62},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1048),                                17},\r
+      {-1},\r
+\r
+      {pool_offset(1050),            345},\r
+      {-1},\r
+\r
+      {pool_offset(1052),                               16},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1060),                        479},\r
+\r
+      {pool_offset(1061),                                3},\r
+\r
+      {pool_offset(1062),                           256},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1067),                              11},\r
+      {-1},\r
+\r
+      {pool_offset(1069),                               201},\r
+      {-1},\r
+\r
+      {pool_offset(1071),                       73},\r
+\r
+      {pool_offset(1072),                               115},\r
+\r
+      {pool_offset(1073),                          483},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1077),                                 49},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1082),                                26},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1086),                   270},\r
+\r
+      {pool_offset(1087),           342},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1100),                              216},\r
+\r
+      {pool_offset(1101),               106},\r
+\r
+      {pool_offset(1102),          332},\r
+\r
+      {pool_offset(1103),                         114},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1125),                              211},\r
+      {-1},\r
+\r
+      {pool_offset(1127),                                183},\r
+\r
+      {pool_offset(1128),                                15},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1132),                              115},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1138),               272},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1145),               407},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1153),              454},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1156),                      146},\r
+\r
+      {pool_offset(1157),                                80},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1160),                   367},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1165),                               144},\r
+\r
+      {pool_offset(1166),                      207},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1172),                                81},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1179),                   74},\r
+\r
+      {pool_offset(1180),                               247},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1185),                                 133},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1189),                            208},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1198),   380},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1203),                                29},\r
+      {-1},\r
+\r
+      {pool_offset(1205),                             34},\r
+      {-1},\r
+\r
+      {pool_offset(1207),                                  159},\r
+      {-1},\r
+\r
+      {pool_offset(1209),                          229},\r
+\r
+      {pool_offset(1210),                               170},\r
+      {-1},\r
+\r
+      {pool_offset(1212),   547},\r
+\r
+      {pool_offset(1213),                           66},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1217),                             82},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1223),   533},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1227),                            170},\r
+\r
+      {pool_offset(1228),                               185},\r
+\r
+      {pool_offset(1229),                             187},\r
+\r
+      {pool_offset(1230),                  209},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1239),                                 166},\r
+\r
+      {pool_offset(1240),                          482},\r
+      {-1},\r
+\r
+      {pool_offset(1242),                           451},\r
+\r
+      {pool_offset(1243),                               214},\r
+\r
+      {pool_offset(1244),                               110},\r
+      {-1},\r
+\r
+      {pool_offset(1246),                  348},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1250),                                89},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1256),                    333},\r
+      {-1},\r
+\r
+      {pool_offset(1258),                          195},\r
+      {-1},\r
+\r
+      {pool_offset(1260),                               175},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1263),                                  190},\r
+\r
+      {pool_offset(1264),                               106},\r
+\r
+      {pool_offset(1265),                                164},\r
+\r
+      {pool_offset(1266),                               164},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1270),                               186},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1276),                            488},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1280),                       452},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1283),                                8},\r
+\r
+      {pool_offset(1284),                              123},\r
+      {-1},\r
+\r
+      {pool_offset(1286),                            89},\r
+\r
+      {pool_offset(1287),                               157},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1293),                                33},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1297),                              234},\r
+      {-1},\r
+\r
+      {pool_offset(1299),                     465},\r
+      {-1},\r
+\r
+      {pool_offset(1301),                              237},\r
+      {-1},\r
+\r
+      {pool_offset(1303),                         31},\r
+\r
+      {pool_offset(1304),                              386},\r
+\r
+      {pool_offset(1305),   545},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1314),    534},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1320),                      161},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1},\r
+\r
+      {pool_offset(1331),                               122},\r
+      {-1},\r
+\r
+      {pool_offset(1333),                          105},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1337),             382},\r
+\r
+      {pool_offset(1338),                      84},\r
+\r
+      {pool_offset(1339),                         214},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1343),                       40},\r
+\r
+      {pool_offset(1344),                      72},\r
+\r
+      {pool_offset(1345),                               237},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1360),             502},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1363),               537},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1366),                     431},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1371),                          469},\r
+\r
+      {pool_offset(1372),                         350},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1390),                                 225},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1395),                               259},\r
+      {-1},\r
+\r
+      {pool_offset(1397),            476},\r
+\r
+      {pool_offset(1398),                        103},\r
+\r
+      {pool_offset(1399),                               219},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1404),                               125},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1407),                            226},\r
+\r
+      {pool_offset(1408),                                30},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1411),                               176},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1420),                           30},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1423),                               241},\r
+      {-1},\r
+\r
+      {pool_offset(1425),              327},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1428),                             550},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1432),                        450},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1435),                               221},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1438),                            218},\r
+      {-1},\r
+\r
+      {pool_offset(1440),                        493},\r
+\r
+      {pool_offset(1441),                          444},\r
+\r
+      {pool_offset(1442),                  448},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1446),                          441},\r
+      {-1},\r
+\r
+      {pool_offset(1448),                           510},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1451),          516},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1454),                           374},\r
+\r
+      {pool_offset(1455),                   216},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1458),                               147},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1461),                              56},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1466),                            125},\r
+      {-1},\r
+\r
+      {pool_offset(1468),                        147},\r
+      {-1},\r
+\r
+      {pool_offset(1470),                405},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1478),                          307},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1482),                                 90},\r
+\r
+      {pool_offset(1483),                                47},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1487),                                90},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1490),                               123},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1497),                                93},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1504),          540},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1520),                             93},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1528),                   390},\r
+      {-1},\r
+\r
+      {pool_offset(1530),                           275},\r
+\r
+      {pool_offset(1531),                                 51},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1534),                       15},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1537),            461},\r
+      {-1},\r
+\r
+      {pool_offset(1539),                              44},\r
+\r
+      {pool_offset(1540),             462},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1543),                                97},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1549),                                64},\r
+      {-1},\r
+\r
+      {pool_offset(1551),                                56},\r
+\r
+      {pool_offset(1552),                           247},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1555),                               163},\r
+      {-1},\r
+\r
+      {pool_offset(1557),                                21},\r
+\r
+      {pool_offset(1558),                           477},\r
+\r
+      {pool_offset(1559),                         175},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1569),                        190},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1},\r
+\r
+      {pool_offset(1580),                             64},\r
+\r
+      {pool_offset(1581),                          162},\r
+\r
+      {pool_offset(1582),                              0},\r
+      {-1},\r
+\r
+      {pool_offset(1584),                                 78},\r
+      {-1},\r
+\r
+      {pool_offset(1586),                               229},\r
+\r
+      {pool_offset(1587),                               169},\r
+      {-1},\r
+\r
+      {pool_offset(1589),                       263},\r
+\r
+      {pool_offset(1590),         417},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1593),                                59},\r
+\r
+      {pool_offset(1594),                    104},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1597),   546},\r
+\r
+      {pool_offset(1598),                            23},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1605),                            236},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1608),                            514},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1618),                            288},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1622),                               253},\r
+      {-1},\r
+\r
+      {pool_offset(1624),                               108},\r
+      {-1},\r
+\r
+      {pool_offset(1626),                        227},\r
+      {-1},\r
+\r
+      {pool_offset(1628),                          396},\r
+      {-1},\r
+\r
+      {pool_offset(1630),                               178},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1633),                   198},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1636),                              83},\r
+      {-1},\r
+\r
+      {pool_offset(1638),                               234},\r
+      {-1},\r
+\r
+      {pool_offset(1640),                                32},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1659),                           108},\r
+      {-1},\r
+\r
+      {pool_offset(1661),                               180},\r
+\r
+      {pool_offset(1662),                          174},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1665),                       439},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1677),                               200},\r
+\r
+      {pool_offset(1678),                                1},\r
+      {-1},\r
+\r
+      {pool_offset(1680),                               134},\r
+\r
+      {pool_offset(1681),                             134},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1687),       377},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1690),         369},\r
+\r
+      {pool_offset(1691),                       299},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1697),              398},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1701),                             24},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1708),                        449},\r
+\r
+      {pool_offset(1709),                           323},\r
+\r
+      {pool_offset(1710),                       284},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1713),                               238},\r
+\r
+      {pool_offset(1714),                               220},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1717),                    347},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1726),                             385},\r
+      {-1},\r
+\r
+      {pool_offset(1728),                               158},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1731),                            158},\r
+      {-1},\r
+\r
+      {pool_offset(1733),                                5},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1736),                           58},\r
+\r
+      {pool_offset(1737),                            78},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1741),               329},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1749),              485},\r
+\r
+      {pool_offset(1750),                            32},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1754),                          296},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1758),                      339},\r
+\r
+      {pool_offset(1759),                               218},\r
+\r
+      {pool_offset(1760),                            322},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1765),                        437},\r
+\r
+      {pool_offset(1766),                           360},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1776),               418},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1779),                          491},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1782),                241},\r
+\r
+      {pool_offset(1783),                                35},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1791),                 282},\r
+      {-1},\r
+\r
+      {pool_offset(1793),                               226},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1798),                              94},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1807),          517},\r
+      {-1},\r
+\r
+      {pool_offset(1809),                         320},\r
+      {-1},\r
+\r
+      {pool_offset(1811),                            35},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1815),                          554},\r
+      {-1},\r
+\r
+      {pool_offset(1817),               301},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1820),                       358},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1824),               361},\r
+      {-1},\r
+\r
+      {pool_offset(1826),                                9},\r
+\r
+      {pool_offset(1827),                            217},\r
+      {-1},\r
+\r
+      {pool_offset(1829),                               67},\r
+\r
+      {pool_offset(1830),                                24},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1834),                                 96},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1837), 303},\r
+\r
+      {pool_offset(1838),                    419},\r
+\r
+      {pool_offset(1839),                        145},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1845),                  283},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1849),                                94},\r
+\r
+      {pool_offset(1850),                     128},\r
+      {-1},\r
+\r
+      {pool_offset(1852),                 400},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1858),                 379},\r
+      {-1},\r
+\r
+      {pool_offset(1860),                          117},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1863),                  328},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1868),                 363},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1875),                 326},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1883),                               217},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1887),                                67},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1892),                           290},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1898), 355},\r
+\r
+      {pool_offset(1899),                    520},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1902),                          172},\r
+      {-1},\r
+\r
+      {pool_offset(1904),                  353},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1911),                             182},\r
+      {-1},\r
+\r
+      {pool_offset(1913),  523},\r
+      {-1},\r
+\r
+      {pool_offset(1915),     330},\r
+\r
+      {pool_offset(1916),                          306},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1921),                524},\r
+      {-1},\r
+\r
+      {pool_offset(1923),                            219},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1927),                          403},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1931),                                 165},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1934),                          258},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1938),                                76},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1943),                             193},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1948),                                92},\r
+      {-1},\r
+\r
+      {pool_offset(1950),     551},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1956),                       384},\r
+\r
+      {pool_offset(1957),                    185},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1964),                                99},\r
+\r
+      {pool_offset(1965),                422},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1972),                               135},\r
+\r
+      {pool_offset(1973),                             135},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1978),                               37},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(1987),                        166},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(1999),                                60},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2003),                                 161},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2006),                         515},\r
+      {-1},\r
+\r
+      {pool_offset(2008),                                61},\r
+      {-1},\r
+\r
+      {pool_offset(2010),                    259},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2016),               434},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2020),                             159},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2023),                          393},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2032),                               139},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2037),                          139},\r
+\r
+      {pool_offset(2038),                                12},\r
+      {-1},\r
+\r
+      {pool_offset(2040),                               177},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2047),                               239},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2050),                    182},\r
+\r
+      {pool_offset(2051),                           233},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2057),                             122},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2062),                           57},\r
+\r
+      {pool_offset(2063),                          192},\r
+\r
+      {pool_offset(2064),                                  44},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2070),                           436},\r
+\r
+      {pool_offset(2071),                  455},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2077),                              238},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2084),                       171},\r
+\r
+      {pool_offset(2085),                    132},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2092),                               242},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2095), 312},\r
+      {-1},\r
+\r
+      {pool_offset(2097),                             242},\r
+      {-1},\r
+\r
+      {pool_offset(2099),                               243},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2109),                                 199},\r
+\r
+      {pool_offset(2110),                77},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1},\r
+\r
+      {pool_offset(2121),            366},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2124),               395},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2133),                                87},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1},\r
+\r
+      {pool_offset(2144),                            87},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2158),                               246},\r
+      {-1},\r
+\r
+      {pool_offset(2160),                   42},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2178),                387},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2187),                               228},\r
+\r
+      {pool_offset(2188),                  409},\r
+      {-1},\r
+\r
+      {pool_offset(2190),                            388},\r
+\r
+      {pool_offset(2191),                            235},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2196),                151},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2213),                         362},\r
+\r
+      {pool_offset(2214),                               162},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2217),                          285},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2222),   548},\r
+\r
+      {pool_offset(2223),                                36},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2228),                               240},\r
+\r
+      {pool_offset(2229),                         317},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2232),                 100},\r
+\r
+      {pool_offset(2233),                            246},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2238),                          178},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2245),        269},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2249),                            200},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2255), 337},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2258),               48},\r
+\r
+      {pool_offset(2259),                 264},\r
+      {-1},\r
+\r
+      {pool_offset(2261),                           470},\r
+      {-1},\r
+\r
+      {pool_offset(2263),                                91},\r
+\r
+      {pool_offset(2264),                              167},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2286),                         176},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2299),                                65},\r
+      {-1},\r
+\r
+      {pool_offset(2301),                         287},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2305),                     187},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2311),                     496},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2315),                          65},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2319),                               231},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2325),                               137},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2330),                            97},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2333),                               179},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2336),                           137},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2341),                  336},\r
+\r
+      {pool_offset(2342),                     262},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2347),                        129},\r
+\r
+      {pool_offset(2348),                 426},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2351),                           397},\r
+\r
+      {pool_offset(2352),                               191},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2357),                             184},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2376),                    428},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2389),               50},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1},\r
+\r
+      {pool_offset(2409),                                 261},\r
+      {-1},\r
+\r
+      {pool_offset(2411),                         223},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2414),                               116},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2419), 331},\r
+      {-1},\r
+\r
+      {pool_offset(2421),                         253},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2428),                             231},\r
+\r
+      {pool_offset(2429),                   199},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2437),                        224},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2444),                     215},\r
+\r
+      {pool_offset(2445),                                4},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2449),                   75},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2455),                   463},\r
+\r
+      {pool_offset(2456),                         225},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2460),                               206},\r
+\r
+      {pool_offset(2461),              167},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2464),                            313},\r
+\r
+      {pool_offset(2465),                     153},\r
+      {-1},\r
+\r
+      {pool_offset(2467),                              188},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2473),                            60},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2476),      378},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2482),                             239},\r
+      {-1},\r
+\r
+      {pool_offset(2484),               49},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2496),      416},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2500),                 511},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2503), 319},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2508),                              169},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2518),                            181},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2521),                         309},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2525),                   414},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2529),                        492},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2532),                     189},\r
+\r
+      {pool_offset(2533),                               230},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2537),                                70},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2553),                 261},\r
+\r
+      {pool_offset(2554),                         505},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2559),                       186},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2567),                        220},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2576),                               210},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2584),                         254},\r
+\r
+      {pool_offset(2585),   544},\r
+\r
+      {pool_offset(2586),                338},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2623),                               36},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2642),                             189},\r
+      {-1},\r
+\r
+      {pool_offset(2644),                            27},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2647),                           274},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2653),                               173},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2659),                            308},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2662),                         372},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2692),                             70},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2700),               420},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2707),                528},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2711),               51},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2743),            341},\r
+      {-1},\r
+\r
+      {pool_offset(2745), 529},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2764),                                19},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2770),                            96},\r
+\r
+      {pool_offset(2771),                          63},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2776),        335},\r
+\r
+      {pool_offset(2777),                               168},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2782),                         399},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2790),                  503},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2798),                              91},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2826),                   248},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2831),                               236},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2843),                          188},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2849),                        191},\r
+\r
+      {pool_offset(2850),                        230},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2853),                               171},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2856),                            113},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2861),                      506},\r
+      {-1},\r
+\r
+      {pool_offset(2863),                               10},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(2884),                539},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2907),                               160},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2915),                          160},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2929),                          250},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2937),                                95},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2947),                     530},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2954),                    173},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2963),                 277},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2968),                               244},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2974),                            244},\r
+\r
+      {pool_offset(2975),         412},\r
+\r
+      {pool_offset(2976),              352},\r
+\r
+      {pool_offset(2977),         423},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(2986),     183},\r
+\r
+      {pool_offset(2987),                             212},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3012),                     532},\r
+\r
+      {pool_offset(3013),       424},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(3052),                             254},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3071),                               245},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3080), 356},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(3083),              541},\r
+\r
+      {pool_offset(3084),              410},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3112),                                42},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3120),                             59},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3127),                              168},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(3130),                           245},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3139),                   203},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1},\r
+\r
+      {pool_offset(3177),                          18},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3184),                                68},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3190),                               232},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(3193),               47},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3210),                            232},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3228),                     222},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(3231),                                 20},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3239),             525},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3262),                            76},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3293),                    133},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3297),                    197},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3304),                      92},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3328),            381},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3337),                 447},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1},\r
+\r
+      {pool_offset(3375),                             210},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3426),           62},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3431),                               233},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3447),                                 63},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3471),                      383},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3485),                    177},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3504),                   266},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3514),          365},\r
+      {-1}, {-1},\r
+\r
+      {pool_offset(3517),                184},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3562),                              95},\r
+      {-1},\r
+\r
+      {pool_offset(3564),                       346},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3570),                   411},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3603),                             240},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1},\r
+\r
+      {pool_offset(3623),                 375},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3666),                            228},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(3764),              501},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(4052),                    205},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(4129),     552},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(4261),                              98},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(4277),          373},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(4332),                                69},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(4363),              354},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(4404),                            68},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(4639), 542},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(4682),                                55},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(5231),                 69},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(5516),     553}\r
+    };\r
+\r
+  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)\r
+    {\r
+      register unsigned int key = hash (str, len);\r
+\r
+      if (key <= MAX_HASH_VALUE)\r
+        {\r
+          register int o = wordlist[key].name;\r
+          if (o >= 0)\r
+            {\r
+              register const char *s = o + unicode_prop_name_pool;\r
+\r
+              if ((((unsigned char)*str ^ (unsigned char)*s) & ~32) == 0 && !gperf_case_strncmp (str, s, len) && s[len] == '\0')\r
+                return &wordlist[key];\r
+            }\r
+        }\r
+    }\r
+  return 0;\r
+}\r
+\r
+\r
+\r
+#define UNICODE_PROPERTY_VERSION  11_0_0\r
+\r
+#define PROPERTY_NAME_MAX_SIZE  59\r
+#define CODE_RANGES_NUM         555\r
+\r
+#define PROP_INDEX_NEWLINE 0\r
+#define PROP_INDEX_ALPHA 1\r
+#define PROP_INDEX_BLANK 2\r
+#define PROP_INDEX_CNTRL 3\r
+#define PROP_INDEX_DIGIT 4\r
+#define PROP_INDEX_GRAPH 5\r
+#define PROP_INDEX_LOWER 6\r
+#define PROP_INDEX_PRINT 7\r
+#define PROP_INDEX_PUNCT 8\r
+#define PROP_INDEX_SPACE 9\r
+#define PROP_INDEX_UPPER 10\r
+#define PROP_INDEX_XDIGIT 11\r
+#define PROP_INDEX_WORD 12\r
+#define PROP_INDEX_ALNUM 13\r
+#define PROP_INDEX_ASCII 14\r
+#define PROP_INDEX_ASCIIHEXDIGIT 15\r
+#define PROP_INDEX_AHEX 15\r
+#define PROP_INDEX_ADLM 16\r
+#define PROP_INDEX_ADLAM 16\r
+#define PROP_INDEX_AHOM 17\r
+#define PROP_INDEX_ALPHABETIC 18\r
+#define PROP_INDEX_ANATOLIANHIEROGLYPHS 19\r
+#define PROP_INDEX_HLUW 19\r
+#define PROP_INDEX_ANY 20\r
+#define PROP_INDEX_ARAB 21\r
+#define PROP_INDEX_ARABIC 21\r
+#define PROP_INDEX_ARMN 22\r
+#define PROP_INDEX_ARMENIAN 22\r
+#define PROP_INDEX_ASSIGNED 23\r
+#define PROP_INDEX_AVST 24\r
+#define PROP_INDEX_AVESTAN 24\r
+#define PROP_INDEX_BALINESE 25\r
+#define PROP_INDEX_BALI 25\r
+#define PROP_INDEX_BAMUM 26\r
+#define PROP_INDEX_BAMU 26\r
+#define PROP_INDEX_BASSAVAH 27\r
+#define PROP_INDEX_BASS 27\r
+#define PROP_INDEX_BATAK 28\r
+#define PROP_INDEX_BATK 28\r
+#define PROP_INDEX_BENG 29\r
+#define PROP_INDEX_BENGALI 29\r
+#define PROP_INDEX_BHKS 30\r
+#define PROP_INDEX_BHAIKSUKI 30\r
+#define PROP_INDEX_BIDICONTROL 31\r
+#define PROP_INDEX_BIDIC 31\r
+#define PROP_INDEX_BOPO 32\r
+#define PROP_INDEX_BOPOMOFO 32\r
+#define PROP_INDEX_BRAHMI 33\r
+#define PROP_INDEX_BRAH 33\r
+#define PROP_INDEX_BRAI 34\r
+#define PROP_INDEX_BRAILLE 34\r
+#define PROP_INDEX_BUGI 35\r
+#define PROP_INDEX_BUGINESE 35\r
+#define PROP_INDEX_BUHD 36\r
+#define PROP_INDEX_BUHID 36\r
+#define PROP_INDEX_C 37\r
+#define PROP_INDEX_OTHER 37\r
+#define PROP_INDEX_CANS 38\r
+#define PROP_INDEX_CANADIANABORIGINAL 38\r
+#define PROP_INDEX_CARI 39\r
+#define PROP_INDEX_CARIAN 39\r
+#define PROP_INDEX_CI 40\r
+#define PROP_INDEX_CASEIGNORABLE 40\r
+#define PROP_INDEX_CASED 41\r
+#define PROP_INDEX_AGHB 42\r
+#define PROP_INDEX_CAUCASIANALBANIAN 42\r
+#define PROP_INDEX_CONTROL 43\r
+#define PROP_INDEX_CC 43\r
+#define PROP_INDEX_CF 44\r
+#define PROP_INDEX_FORMAT 44\r
+#define PROP_INDEX_CHAKMA 45\r
+#define PROP_INDEX_CAKM 45\r
+#define PROP_INDEX_CHAM 46\r
+#define PROP_INDEX_CWCF 47\r
+#define PROP_INDEX_CHANGESWHENCASEFOLDED 47\r
+#define PROP_INDEX_CWCM 48\r
+#define PROP_INDEX_CHANGESWHENCASEMAPPED 48\r
+#define PROP_INDEX_CWL 49\r
+#define PROP_INDEX_CHANGESWHENLOWERCASED 49\r
+#define PROP_INDEX_CWT 50\r
+#define PROP_INDEX_CHANGESWHENTITLECASED 50\r
+#define PROP_INDEX_CWU 51\r
+#define PROP_INDEX_CHANGESWHENUPPERCASED 51\r
+#define PROP_INDEX_CHER 52\r
+#define PROP_INDEX_CHEROKEE 52\r
+#define PROP_INDEX_CN 53\r
+#define PROP_INDEX_UNASSIGNED 53\r
+#define PROP_INDEX_PRIVATEUSE 54\r
+#define PROP_INDEX_CO 54\r
+#define PROP_INDEX_ZYYY 55\r
+#define PROP_INDEX_COMMON 55\r
+#define PROP_INDEX_COPT 56\r
+#define PROP_INDEX_COPTIC 56\r
+#define PROP_INDEX_QAAC 56\r
+#define PROP_INDEX_CS 57\r
+#define PROP_INDEX_SURROGATE 57\r
+#define PROP_INDEX_XSUX 58\r
+#define PROP_INDEX_CUNEIFORM 58\r
+#define PROP_INDEX_CPRT 59\r
+#define PROP_INDEX_CYPRIOT 59\r
+#define PROP_INDEX_CYRILLIC 60\r
+#define PROP_INDEX_CYRL 60\r
+#define PROP_INDEX_DASH 61\r
+#define PROP_INDEX_DEFAULTIGNORABLECODEPOINT 62\r
+#define PROP_INDEX_DI 62\r
+#define PROP_INDEX_DEP 63\r
+#define PROP_INDEX_DEPRECATED 63\r
+#define PROP_INDEX_DSRT 64\r
+#define PROP_INDEX_DESERET 64\r
+#define PROP_INDEX_DEVA 65\r
+#define PROP_INDEX_DEVANAGARI 65\r
+#define PROP_INDEX_DIACRITIC 66\r
+#define PROP_INDEX_DIA 66\r
+#define PROP_INDEX_DOGRA 67\r
+#define PROP_INDEX_DOGR 67\r
+#define PROP_INDEX_DUPL 68\r
+#define PROP_INDEX_DUPLOYAN 68\r
+#define PROP_INDEX_EGYPTIANHIEROGLYPHS 69\r
+#define PROP_INDEX_EGYP 69\r
+#define PROP_INDEX_ELBA 70\r
+#define PROP_INDEX_ELBASAN 70\r
+#define PROP_INDEX_EMOJI 71\r
+#define PROP_INDEX_EMOJICOMPONENT 72\r
+#define PROP_INDEX_EMOJIMODIFIER 73\r
+#define PROP_INDEX_EMOJIMODIFIERBASE 74\r
+#define PROP_INDEX_EMOJIPRESENTATION 75\r
+#define PROP_INDEX_ETHIOPIC 76\r
+#define PROP_INDEX_ETHI 76\r
+#define PROP_INDEX_EXTENDEDPICTOGRAPHIC 77\r
+#define PROP_INDEX_EXT 78\r
+#define PROP_INDEX_EXTENDER 78\r
+#define PROP_INDEX_GEORGIAN 79\r
+#define PROP_INDEX_GEOR 79\r
+#define PROP_INDEX_GLAG 80\r
+#define PROP_INDEX_GLAGOLITIC 80\r
+#define PROP_INDEX_GOTH 81\r
+#define PROP_INDEX_GOTHIC 81\r
+#define PROP_INDEX_GRAN 82\r
+#define PROP_INDEX_GRANTHA 82\r
+#define PROP_INDEX_GRBASE 83\r
+#define PROP_INDEX_GRAPHEMEBASE 83\r
+#define PROP_INDEX_GREXT 84\r
+#define PROP_INDEX_GRAPHEMEEXTEND 84\r
+#define PROP_INDEX_GRAPHEMELINK 85\r
+#define PROP_INDEX_GRLINK 85\r
+#define PROP_INDEX_GREEK 86\r
+#define PROP_INDEX_GREK 86\r
+#define PROP_INDEX_GUJARATI 87\r
+#define PROP_INDEX_GUJR 87\r
+#define PROP_INDEX_GUNJALAGONDI 88\r
+#define PROP_INDEX_GONG 88\r
+#define PROP_INDEX_GURU 89\r
+#define PROP_INDEX_GURMUKHI 89\r
+#define PROP_INDEX_HANI 90\r
+#define PROP_INDEX_HAN 90\r
+#define PROP_INDEX_HANG 91\r
+#define PROP_INDEX_HANGUL 91\r
+#define PROP_INDEX_HANIFIROHINGYA 92\r
+#define PROP_INDEX_ROHG 92\r
+#define PROP_INDEX_HANUNOO 93\r
+#define PROP_INDEX_HANO 93\r
+#define PROP_INDEX_HATR 94\r
+#define PROP_INDEX_HATRAN 94\r
+#define PROP_INDEX_HEBREW 95\r
+#define PROP_INDEX_HEBR 95\r
+#define PROP_INDEX_HEXDIGIT 96\r
+#define PROP_INDEX_HEX 96\r
+#define PROP_INDEX_HIRAGANA 97\r
+#define PROP_INDEX_HIRA 97\r
+#define PROP_INDEX_HYPHEN 98\r
+#define PROP_INDEX_IDSB 99\r
+#define PROP_INDEX_IDSBINARYOPERATOR 99\r
+#define PROP_INDEX_IDST 100\r
+#define PROP_INDEX_IDSTRINARYOPERATOR 100\r
+#define PROP_INDEX_IDCONTINUE 101\r
+#define PROP_INDEX_IDC 101\r
+#define PROP_INDEX_IDS 102\r
+#define PROP_INDEX_IDSTART 102\r
+#define PROP_INDEX_IDEO 103\r
+#define PROP_INDEX_IDEOGRAPHIC 103\r
+#define PROP_INDEX_ARMI 104\r
+#define PROP_INDEX_IMPERIALARAMAIC 104\r
+#define PROP_INDEX_ZINH 105\r
+#define PROP_INDEX_INHERITED 105\r
+#define PROP_INDEX_QAAI 105\r
+#define PROP_INDEX_PHLI 106\r
+#define PROP_INDEX_INSCRIPTIONALPAHLAVI 106\r
+#define PROP_INDEX_INSCRIPTIONALPARTHIAN 107\r
+#define PROP_INDEX_PRTI 107\r
+#define PROP_INDEX_JAVANESE 108\r
+#define PROP_INDEX_JAVA 108\r
+#define PROP_INDEX_JOINC 109\r
+#define PROP_INDEX_JOINCONTROL 109\r
+#define PROP_INDEX_KAITHI 110\r
+#define PROP_INDEX_KTHI 110\r
+#define PROP_INDEX_KNDA 111\r
+#define PROP_INDEX_KANNADA 111\r
+#define PROP_INDEX_KATAKANA 112\r
+#define PROP_INDEX_KANA 112\r
+#define PROP_INDEX_KAYAHLI 113\r
+#define PROP_INDEX_KALI 113\r
+#define PROP_INDEX_KHAROSHTHI 114\r
+#define PROP_INDEX_KHAR 114\r
+#define PROP_INDEX_KHMR 115\r
+#define PROP_INDEX_KHMER 115\r
+#define PROP_INDEX_KHOJ 116\r
+#define PROP_INDEX_KHOJKI 116\r
+#define PROP_INDEX_KHUDAWADI 117\r
+#define PROP_INDEX_SIND 117\r
+#define PROP_INDEX_L 118\r
+#define PROP_INDEX_LETTER 118\r
+#define PROP_INDEX_LC 119\r
+#define PROP_INDEX_CASEDLETTER 119\r
+#define PROP_INDEX_LAO 120\r
+#define PROP_INDEX_LAOO 120\r
+#define PROP_INDEX_LATN 121\r
+#define PROP_INDEX_LATIN 121\r
+#define PROP_INDEX_LEPC 122\r
+#define PROP_INDEX_LEPCHA 122\r
+#define PROP_INDEX_LIMBU 123\r
+#define PROP_INDEX_LIMB 123\r
+#define PROP_INDEX_LINA 124\r
+#define PROP_INDEX_LINEARA 124\r
+#define PROP_INDEX_LINB 125\r
+#define PROP_INDEX_LINEARB 125\r
+#define PROP_INDEX_LISU 126\r
+#define PROP_INDEX_LOWERCASELETTER 127\r
+#define PROP_INDEX_LL 127\r
+#define PROP_INDEX_LM 128\r
+#define PROP_INDEX_MODIFIERLETTER 128\r
+#define PROP_INDEX_LO 129\r
+#define PROP_INDEX_OTHERLETTER 129\r
+#define PROP_INDEX_LOGICALORDEREXCEPTION 130\r
+#define PROP_INDEX_LOE 130\r
+#define PROP_INDEX_LOWERCASE 131\r
+#define PROP_INDEX_LT 132\r
+#define PROP_INDEX_TITLECASELETTER 132\r
+#define PROP_INDEX_UPPERCASELETTER 133\r
+#define PROP_INDEX_LU 133\r
+#define PROP_INDEX_LYCI 134\r
+#define PROP_INDEX_LYCIAN 134\r
+#define PROP_INDEX_LYDI 135\r
+#define PROP_INDEX_LYDIAN 135\r
+#define PROP_INDEX_M 136\r
+#define PROP_INDEX_COMBININGMARK 136\r
+#define PROP_INDEX_MARK 136\r
+#define PROP_INDEX_MAHJ 137\r
+#define PROP_INDEX_MAHAJANI 137\r
+#define PROP_INDEX_MAKASAR 138\r
+#define PROP_INDEX_MAKA 138\r
+#define PROP_INDEX_MALAYALAM 139\r
+#define PROP_INDEX_MLYM 139\r
+#define PROP_INDEX_MAND 140\r
+#define PROP_INDEX_MANDAIC 140\r
+#define PROP_INDEX_MANI 141\r
+#define PROP_INDEX_MANICHAEAN 141\r
+#define PROP_INDEX_MARC 142\r
+#define PROP_INDEX_MARCHEN 142\r
+#define PROP_INDEX_MASARAMGONDI 143\r
+#define PROP_INDEX_GONM 143\r
+#define PROP_INDEX_MATH 144\r
+#define PROP_INDEX_MC 145\r
+#define PROP_INDEX_SPACINGMARK 145\r
+#define PROP_INDEX_ENCLOSINGMARK 146\r
+#define PROP_INDEX_ME 146\r
+#define PROP_INDEX_MEDEFAIDRIN 147\r
+#define PROP_INDEX_MEDF 147\r
+#define PROP_INDEX_MEETEIMAYEK 148\r
+#define PROP_INDEX_MTEI 148\r
+#define PROP_INDEX_MENDEKIKAKUI 149\r
+#define PROP_INDEX_MEND 149\r
+#define PROP_INDEX_MEROITICCURSIVE 150\r
+#define PROP_INDEX_MERC 150\r
+#define PROP_INDEX_MEROITICHIEROGLYPHS 151\r
+#define PROP_INDEX_MERO 151\r
+#define PROP_INDEX_PLRD 152\r
+#define PROP_INDEX_MIAO 152\r
+#define PROP_INDEX_MN 153\r
+#define PROP_INDEX_NONSPACINGMARK 153\r
+#define PROP_INDEX_MODI 154\r
+#define PROP_INDEX_MONGOLIAN 155\r
+#define PROP_INDEX_MONG 155\r
+#define PROP_INDEX_MRO 156\r
+#define PROP_INDEX_MROO 156\r
+#define PROP_INDEX_MULT 157\r
+#define PROP_INDEX_MULTANI 157\r
+#define PROP_INDEX_MYANMAR 158\r
+#define PROP_INDEX_MYMR 158\r
+#define PROP_INDEX_NUMBER 159\r
+#define PROP_INDEX_N 159\r
+#define PROP_INDEX_NABATAEAN 160\r
+#define PROP_INDEX_NBAT 160\r
+#define PROP_INDEX_DECIMALNUMBER 161\r
+#define PROP_INDEX_ND 161\r
+#define PROP_INDEX_TALU 162\r
+#define PROP_INDEX_NEWTAILUE 162\r
+#define PROP_INDEX_NEWA 163\r
+#define PROP_INDEX_NKO 164\r
+#define PROP_INDEX_NKOO 164\r
+#define PROP_INDEX_LETTERNUMBER 165\r
+#define PROP_INDEX_NL 165\r
+#define PROP_INDEX_OTHERNUMBER 166\r
+#define PROP_INDEX_NO 166\r
+#define PROP_INDEX_NONCHARACTERCODEPOINT 167\r
+#define PROP_INDEX_NCHAR 167\r
+#define PROP_INDEX_NSHU 168\r
+#define PROP_INDEX_NUSHU 168\r
+#define PROP_INDEX_OGHAM 169\r
+#define PROP_INDEX_OGAM 169\r
+#define PROP_INDEX_OLCK 170\r
+#define PROP_INDEX_OLCHIKI 170\r
+#define PROP_INDEX_HUNG 171\r
+#define PROP_INDEX_OLDHUNGARIAN 171\r
+#define PROP_INDEX_ITAL 172\r
+#define PROP_INDEX_OLDITALIC 172\r
+#define PROP_INDEX_NARB 173\r
+#define PROP_INDEX_OLDNORTHARABIAN 173\r
+#define PROP_INDEX_OLDPERMIC 174\r
+#define PROP_INDEX_PERM 174\r
+#define PROP_INDEX_OLDPERSIAN 175\r
+#define PROP_INDEX_XPEO 175\r
+#define PROP_INDEX_SOGO 176\r
+#define PROP_INDEX_OLDSOGDIAN 176\r
+#define PROP_INDEX_SARB 177\r
+#define PROP_INDEX_OLDSOUTHARABIAN 177\r
+#define PROP_INDEX_OLDTURKIC 178\r
+#define PROP_INDEX_ORKH 178\r
+#define PROP_INDEX_ORYA 179\r
+#define PROP_INDEX_ORIYA 179\r
+#define PROP_INDEX_OSAGE 180\r
+#define PROP_INDEX_OSGE 180\r
+#define PROP_INDEX_OSMANYA 181\r
+#define PROP_INDEX_OSMA 181\r
+#define PROP_INDEX_OTHERALPHABETIC 182\r
+#define PROP_INDEX_OALPHA 182\r
+#define PROP_INDEX_ODI 183\r
+#define PROP_INDEX_OTHERDEFAULTIGNORABLECODEPOINT 183\r
+#define PROP_INDEX_OGREXT 184\r
+#define PROP_INDEX_OTHERGRAPHEMEEXTEND 184\r
+#define PROP_INDEX_OIDC 185\r
+#define PROP_INDEX_OTHERIDCONTINUE 185\r
+#define PROP_INDEX_OTHERIDSTART 186\r
+#define PROP_INDEX_OIDS 186\r
+#define PROP_INDEX_OTHERLOWERCASE 187\r
+#define PROP_INDEX_OLOWER 187\r
+#define PROP_INDEX_OTHERMATH 188\r
+#define PROP_INDEX_OMATH 188\r
+#define PROP_INDEX_OTHERUPPERCASE 189\r
+#define PROP_INDEX_OUPPER 189\r
+#define PROP_INDEX_P 190\r
+#define PROP_INDEX_PUNCTUATION 190\r
+#define PROP_INDEX_PAHAWHHMONG 191\r
+#define PROP_INDEX_HMNG 191\r
+#define PROP_INDEX_PALMYRENE 192\r
+#define PROP_INDEX_PALM 192\r
+#define PROP_INDEX_PATTERNSYNTAX 193\r
+#define PROP_INDEX_PATSYN 193\r
+#define PROP_INDEX_PATWS 194\r
+#define PROP_INDEX_PATTERNWHITESPACE 194\r
+#define PROP_INDEX_PAUCINHAU 195\r
+#define PROP_INDEX_PAUC 195\r
+#define PROP_INDEX_CONNECTORPUNCTUATION 196\r
+#define PROP_INDEX_PC 196\r
+#define PROP_INDEX_DASHPUNCTUATION 197\r
+#define PROP_INDEX_PD 197\r
+#define PROP_INDEX_PE 198\r
+#define PROP_INDEX_CLOSEPUNCTUATION 198\r
+#define PROP_INDEX_FINALPUNCTUATION 199\r
+#define PROP_INDEX_PF 199\r
+#define PROP_INDEX_PHAG 200\r
+#define PROP_INDEX_PHAGSPA 200\r
+#define PROP_INDEX_PHOENICIAN 201\r
+#define PROP_INDEX_PHNX 201\r
+#define PROP_INDEX_PI 202\r
+#define PROP_INDEX_INITIALPUNCTUATION 202\r
+#define PROP_INDEX_OTHERPUNCTUATION 203\r
+#define PROP_INDEX_PO 203\r
+#define PROP_INDEX_PREPENDEDCONCATENATIONMARK 204\r
+#define PROP_INDEX_PCM 204\r
+#define PROP_INDEX_PS 205\r
+#define PROP_INDEX_OPENPUNCTUATION 205\r
+#define PROP_INDEX_PHLP 206\r
+#define PROP_INDEX_PSALTERPAHLAVI 206\r
+#define PROP_INDEX_QUOTATIONMARK 207\r
+#define PROP_INDEX_QMARK 207\r
+#define PROP_INDEX_RADICAL 208\r
+#define PROP_INDEX_RI 209\r
+#define PROP_INDEX_REGIONALINDICATOR 209\r
+#define PROP_INDEX_REJANG 210\r
+#define PROP_INDEX_RJNG 210\r
+#define PROP_INDEX_RUNIC 211\r
+#define PROP_INDEX_RUNR 211\r
+#define PROP_INDEX_S 212\r
+#define PROP_INDEX_SYMBOL 212\r
+#define PROP_INDEX_SAMARITAN 213\r
+#define PROP_INDEX_SAMR 213\r
+#define PROP_INDEX_SAURASHTRA 214\r
+#define PROP_INDEX_SAUR 214\r
+#define PROP_INDEX_SC 215\r
+#define PROP_INDEX_CURRENCYSYMBOL 215\r
+#define PROP_INDEX_SENTENCETERMINAL 216\r
+#define PROP_INDEX_STERM 216\r
+#define PROP_INDEX_SHARADA 217\r
+#define PROP_INDEX_SHRD 217\r
+#define PROP_INDEX_SHAVIAN 218\r
+#define PROP_INDEX_SHAW 218\r
+#define PROP_INDEX_SIDDHAM 219\r
+#define PROP_INDEX_SIDD 219\r
+#define PROP_INDEX_SIGNWRITING 220\r
+#define PROP_INDEX_SGNW 220\r
+#define PROP_INDEX_SINH 221\r
+#define PROP_INDEX_SINHALA 221\r
+#define PROP_INDEX_SK 222\r
+#define PROP_INDEX_MODIFIERSYMBOL 222\r
+#define PROP_INDEX_MATHSYMBOL 223\r
+#define PROP_INDEX_SM 223\r
+#define PROP_INDEX_SO 224\r
+#define PROP_INDEX_OTHERSYMBOL 224\r
+#define PROP_INDEX_SD 225\r
+#define PROP_INDEX_SOFTDOTTED 225\r
+#define PROP_INDEX_SOGD 226\r
+#define PROP_INDEX_SOGDIAN 226\r
+#define PROP_INDEX_SORASOMPENG 227\r
+#define PROP_INDEX_SORA 227\r
+#define PROP_INDEX_SOYO 228\r
+#define PROP_INDEX_SOYOMBO 228\r
+#define PROP_INDEX_SUND 229\r
+#define PROP_INDEX_SUNDANESE 229\r
+#define PROP_INDEX_SYLO 230\r
+#define PROP_INDEX_SYLOTINAGRI 230\r
+#define PROP_INDEX_SYRC 231\r
+#define PROP_INDEX_SYRIAC 231\r
+#define PROP_INDEX_TGLG 232\r
+#define PROP_INDEX_TAGALOG 232\r
+#define PROP_INDEX_TAGBANWA 233\r
+#define PROP_INDEX_TAGB 233\r
+#define PROP_INDEX_TAILE 234\r
+#define PROP_INDEX_TALE 234\r
+#define PROP_INDEX_TAITHAM 235\r
+#define PROP_INDEX_LANA 235\r
+#define PROP_INDEX_TAIVIET 236\r
+#define PROP_INDEX_TAVT 236\r
+#define PROP_INDEX_TAKRI 237\r
+#define PROP_INDEX_TAKR 237\r
+#define PROP_INDEX_TAMIL 238\r
+#define PROP_INDEX_TAML 238\r
+#define PROP_INDEX_TANG 239\r
+#define PROP_INDEX_TANGUT 239\r
+#define PROP_INDEX_TELUGU 240\r
+#define PROP_INDEX_TELU 240\r
+#define PROP_INDEX_TERM 241\r
+#define PROP_INDEX_TERMINALPUNCTUATION 241\r
+#define PROP_INDEX_THAA 242\r
+#define PROP_INDEX_THAANA 242\r
+#define PROP_INDEX_THAI 243\r
+#define PROP_INDEX_TIBT 244\r
+#define PROP_INDEX_TIBETAN 244\r
+#define PROP_INDEX_TFNG 245\r
+#define PROP_INDEX_TIFINAGH 245\r
+#define PROP_INDEX_TIRHUTA 246\r
+#define PROP_INDEX_TIRH 246\r
+#define PROP_INDEX_UGAR 247\r
+#define PROP_INDEX_UGARITIC 247\r
+#define PROP_INDEX_UNIFIEDIDEOGRAPH 248\r
+#define PROP_INDEX_UIDEO 248\r
+#define PROP_INDEX_ZZZZ 249\r
+#define PROP_INDEX_UNKNOWN 249\r
+#define PROP_INDEX_UPPERCASE 250\r
+#define PROP_INDEX_VAII 251\r
+#define PROP_INDEX_VAI 251\r
+#define PROP_INDEX_VARIATIONSELECTOR 252\r
+#define PROP_INDEX_VS 252\r
+#define PROP_INDEX_WARANGCITI 253\r
+#define PROP_INDEX_WARA 253\r
+#define PROP_INDEX_WHITESPACE 254\r
+#define PROP_INDEX_WSPACE 254\r
+#define PROP_INDEX_XIDC 255\r
+#define PROP_INDEX_XIDCONTINUE 255\r
+#define PROP_INDEX_XIDS 256\r
+#define PROP_INDEX_XIDSTART 256\r
+#define PROP_INDEX_YI 257\r
+#define PROP_INDEX_YIII 257\r
+#define PROP_INDEX_SEPARATOR 258\r
+#define PROP_INDEX_Z 258\r
+#define PROP_INDEX_ZANABAZARSQUARE 259\r
+#define PROP_INDEX_ZANB 259\r
+#define PROP_INDEX_ZL 260\r
+#define PROP_INDEX_LINESEPARATOR 260\r
+#define PROP_INDEX_ZP 261\r
+#define PROP_INDEX_PARAGRAPHSEPARATOR 261\r
+#define PROP_INDEX_ZS 262\r
+#define PROP_INDEX_SPACESEPARATOR 262\r
+#define PROP_INDEX_INBASICLATIN 263\r
+#define PROP_INDEX_INLATIN1SUPPLEMENT 264\r
+#define PROP_INDEX_INLATINEXTENDEDA 265\r
+#define PROP_INDEX_INLATINEXTENDEDB 266\r
+#define PROP_INDEX_INIPAEXTENSIONS 267\r
+#define PROP_INDEX_INSPACINGMODIFIERLETTERS 268\r
+#define PROP_INDEX_INCOMBININGDIACRITICALMARKS 269\r
+#define PROP_INDEX_INGREEKANDCOPTIC 270\r
+#define PROP_INDEX_INCYRILLIC 271\r
+#define PROP_INDEX_INCYRILLICSUPPLEMENT 272\r
+#define PROP_INDEX_INARMENIAN 273\r
+#define PROP_INDEX_INHEBREW 274\r
+#define PROP_INDEX_INARABIC 275\r
+#define PROP_INDEX_INSYRIAC 276\r
+#define PROP_INDEX_INARABICSUPPLEMENT 277\r
+#define PROP_INDEX_INTHAANA 278\r
+#define PROP_INDEX_INNKO 279\r
+#define PROP_INDEX_INSAMARITAN 280\r
+#define PROP_INDEX_INMANDAIC 281\r
+#define PROP_INDEX_INSYRIACSUPPLEMENT 282\r
+#define PROP_INDEX_INARABICEXTENDEDA 283\r
+#define PROP_INDEX_INDEVANAGARI 284\r
+#define PROP_INDEX_INBENGALI 285\r
+#define PROP_INDEX_INGURMUKHI 286\r
+#define PROP_INDEX_INGUJARATI 287\r
+#define PROP_INDEX_INORIYA 288\r
+#define PROP_INDEX_INTAMIL 289\r
+#define PROP_INDEX_INTELUGU 290\r
+#define PROP_INDEX_INKANNADA 291\r
+#define PROP_INDEX_INMALAYALAM 292\r
+#define PROP_INDEX_INSINHALA 293\r
+#define PROP_INDEX_INTHAI 294\r
+#define PROP_INDEX_INLAO 295\r
+#define PROP_INDEX_INTIBETAN 296\r
+#define PROP_INDEX_INMYANMAR 297\r
+#define PROP_INDEX_INGEORGIAN 298\r
+#define PROP_INDEX_INHANGULJAMO 299\r
+#define PROP_INDEX_INETHIOPIC 300\r
+#define PROP_INDEX_INETHIOPICSUPPLEMENT 301\r
+#define PROP_INDEX_INCHEROKEE 302\r
+#define PROP_INDEX_INUNIFIEDCANADIANABORIGINALSYLLABICS 303\r
+#define PROP_INDEX_INOGHAM 304\r
+#define PROP_INDEX_INRUNIC 305\r
+#define PROP_INDEX_INTAGALOG 306\r
+#define PROP_INDEX_INHANUNOO 307\r
+#define PROP_INDEX_INBUHID 308\r
+#define PROP_INDEX_INTAGBANWA 309\r
+#define PROP_INDEX_INKHMER 310\r
+#define PROP_INDEX_INMONGOLIAN 311\r
+#define PROP_INDEX_INUNIFIEDCANADIANABORIGINALSYLLABICSEXTENDED 312\r
+#define PROP_INDEX_INLIMBU 313\r
+#define PROP_INDEX_INTAILE 314\r
+#define PROP_INDEX_INNEWTAILUE 315\r
+#define PROP_INDEX_INKHMERSYMBOLS 316\r
+#define PROP_INDEX_INBUGINESE 317\r
+#define PROP_INDEX_INTAITHAM 318\r
+#define PROP_INDEX_INCOMBININGDIACRITICALMARKSEXTENDED 319\r
+#define PROP_INDEX_INBALINESE 320\r
+#define PROP_INDEX_INSUNDANESE 321\r
+#define PROP_INDEX_INBATAK 322\r
+#define PROP_INDEX_INLEPCHA 323\r
+#define PROP_INDEX_INOLCHIKI 324\r
+#define PROP_INDEX_INCYRILLICEXTENDEDC 325\r
+#define PROP_INDEX_INGEORGIANEXTENDED 326\r
+#define PROP_INDEX_INSUNDANESESUPPLEMENT 327\r
+#define PROP_INDEX_INVEDICEXTENSIONS 328\r
+#define PROP_INDEX_INPHONETICEXTENSIONS 329\r
+#define PROP_INDEX_INPHONETICEXTENSIONSSUPPLEMENT 330\r
+#define PROP_INDEX_INCOMBININGDIACRITICALMARKSSUPPLEMENT 331\r
+#define PROP_INDEX_INLATINEXTENDEDADDITIONAL 332\r
+#define PROP_INDEX_INGREEKEXTENDED 333\r
+#define PROP_INDEX_INGENERALPUNCTUATION 334\r
+#define PROP_INDEX_INSUPERSCRIPTSANDSUBSCRIPTS 335\r
+#define PROP_INDEX_INCURRENCYSYMBOLS 336\r
+#define PROP_INDEX_INCOMBININGDIACRITICALMARKSFORSYMBOLS 337\r
+#define PROP_INDEX_INLETTERLIKESYMBOLS 338\r
+#define PROP_INDEX_INNUMBERFORMS 339\r
+#define PROP_INDEX_INARROWS 340\r
+#define PROP_INDEX_INMATHEMATICALOPERATORS 341\r
+#define PROP_INDEX_INMISCELLANEOUSTECHNICAL 342\r
+#define PROP_INDEX_INCONTROLPICTURES 343\r
+#define PROP_INDEX_INOPTICALCHARACTERRECOGNITION 344\r
+#define PROP_INDEX_INENCLOSEDALPHANUMERICS 345\r
+#define PROP_INDEX_INBOXDRAWING 346\r
+#define PROP_INDEX_INBLOCKELEMENTS 347\r
+#define PROP_INDEX_INGEOMETRICSHAPES 348\r
+#define PROP_INDEX_INMISCELLANEOUSSYMBOLS 349\r
+#define PROP_INDEX_INDINGBATS 350\r
+#define PROP_INDEX_INMISCELLANEOUSMATHEMATICALSYMBOLSA 351\r
+#define PROP_INDEX_INSUPPLEMENTALARROWSA 352\r
+#define PROP_INDEX_INBRAILLEPATTERNS 353\r
+#define PROP_INDEX_INSUPPLEMENTALARROWSB 354\r
+#define PROP_INDEX_INMISCELLANEOUSMATHEMATICALSYMBOLSB 355\r
+#define PROP_INDEX_INSUPPLEMENTALMATHEMATICALOPERATORS 356\r
+#define PROP_INDEX_INMISCELLANEOUSSYMBOLSANDARROWS 357\r
+#define PROP_INDEX_INGLAGOLITIC 358\r
+#define PROP_INDEX_INLATINEXTENDEDC 359\r
+#define PROP_INDEX_INCOPTIC 360\r
+#define PROP_INDEX_INGEORGIANSUPPLEMENT 361\r
+#define PROP_INDEX_INTIFINAGH 362\r
+#define PROP_INDEX_INETHIOPICEXTENDED 363\r
+#define PROP_INDEX_INCYRILLICEXTENDEDA 364\r
+#define PROP_INDEX_INSUPPLEMENTALPUNCTUATION 365\r
+#define PROP_INDEX_INCJKRADICALSSUPPLEMENT 366\r
+#define PROP_INDEX_INKANGXIRADICALS 367\r
+#define PROP_INDEX_INIDEOGRAPHICDESCRIPTIONCHARACTERS 368\r
+#define PROP_INDEX_INCJKSYMBOLSANDPUNCTUATION 369\r
+#define PROP_INDEX_INHIRAGANA 370\r
+#define PROP_INDEX_INKATAKANA 371\r
+#define PROP_INDEX_INBOPOMOFO 372\r
+#define PROP_INDEX_INHANGULCOMPATIBILITYJAMO 373\r
+#define PROP_INDEX_INKANBUN 374\r
+#define PROP_INDEX_INBOPOMOFOEXTENDED 375\r
+#define PROP_INDEX_INCJKSTROKES 376\r
+#define PROP_INDEX_INKATAKANAPHONETICEXTENSIONS 377\r
+#define PROP_INDEX_INENCLOSEDCJKLETTERSANDMONTHS 378\r
+#define PROP_INDEX_INCJKCOMPATIBILITY 379\r
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONA 380\r
+#define PROP_INDEX_INYIJINGHEXAGRAMSYMBOLS 381\r
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHS 382\r
+#define PROP_INDEX_INYISYLLABLES 383\r
+#define PROP_INDEX_INYIRADICALS 384\r
+#define PROP_INDEX_INLISU 385\r
+#define PROP_INDEX_INVAI 386\r
+#define PROP_INDEX_INCYRILLICEXTENDEDB 387\r
+#define PROP_INDEX_INBAMUM 388\r
+#define PROP_INDEX_INMODIFIERTONELETTERS 389\r
+#define PROP_INDEX_INLATINEXTENDEDD 390\r
+#define PROP_INDEX_INSYLOTINAGRI 391\r
+#define PROP_INDEX_INCOMMONINDICNUMBERFORMS 392\r
+#define PROP_INDEX_INPHAGSPA 393\r
+#define PROP_INDEX_INSAURASHTRA 394\r
+#define PROP_INDEX_INDEVANAGARIEXTENDED 395\r
+#define PROP_INDEX_INKAYAHLI 396\r
+#define PROP_INDEX_INREJANG 397\r
+#define PROP_INDEX_INHANGULJAMOEXTENDEDA 398\r
+#define PROP_INDEX_INJAVANESE 399\r
+#define PROP_INDEX_INMYANMAREXTENDEDB 400\r
+#define PROP_INDEX_INCHAM 401\r
+#define PROP_INDEX_INMYANMAREXTENDEDA 402\r
+#define PROP_INDEX_INTAIVIET 403\r
+#define PROP_INDEX_INMEETEIMAYEKEXTENSIONS 404\r
+#define PROP_INDEX_INETHIOPICEXTENDEDA 405\r
+#define PROP_INDEX_INLATINEXTENDEDE 406\r
+#define PROP_INDEX_INCHEROKEESUPPLEMENT 407\r
+#define PROP_INDEX_INMEETEIMAYEK 408\r
+#define PROP_INDEX_INHANGULSYLLABLES 409\r
+#define PROP_INDEX_INHANGULJAMOEXTENDEDB 410\r
+#define PROP_INDEX_INHIGHSURROGATES 411\r
+#define PROP_INDEX_INHIGHPRIVATEUSESURROGATES 412\r
+#define PROP_INDEX_INLOWSURROGATES 413\r
+#define PROP_INDEX_INPRIVATEUSEAREA 414\r
+#define PROP_INDEX_INCJKCOMPATIBILITYIDEOGRAPHS 415\r
+#define PROP_INDEX_INALPHABETICPRESENTATIONFORMS 416\r
+#define PROP_INDEX_INARABICPRESENTATIONFORMSA 417\r
+#define PROP_INDEX_INVARIATIONSELECTORS 418\r
+#define PROP_INDEX_INVERTICALFORMS 419\r
+#define PROP_INDEX_INCOMBININGHALFMARKS 420\r
+#define PROP_INDEX_INCJKCOMPATIBILITYFORMS 421\r
+#define PROP_INDEX_INSMALLFORMVARIANTS 422\r
+#define PROP_INDEX_INARABICPRESENTATIONFORMSB 423\r
+#define PROP_INDEX_INHALFWIDTHANDFULLWIDTHFORMS 424\r
+#define PROP_INDEX_INSPECIALS 425\r
+#define PROP_INDEX_INLINEARBSYLLABARY 426\r
+#define PROP_INDEX_INLINEARBIDEOGRAMS 427\r
+#define PROP_INDEX_INAEGEANNUMBERS 428\r
+#define PROP_INDEX_INANCIENTGREEKNUMBERS 429\r
+#define PROP_INDEX_INANCIENTSYMBOLS 430\r
+#define PROP_INDEX_INPHAISTOSDISC 431\r
+#define PROP_INDEX_INLYCIAN 432\r
+#define PROP_INDEX_INCARIAN 433\r
+#define PROP_INDEX_INCOPTICEPACTNUMBERS 434\r
+#define PROP_INDEX_INOLDITALIC 435\r
+#define PROP_INDEX_INGOTHIC 436\r
+#define PROP_INDEX_INOLDPERMIC 437\r
+#define PROP_INDEX_INUGARITIC 438\r
+#define PROP_INDEX_INOLDPERSIAN 439\r
+#define PROP_INDEX_INDESERET 440\r
+#define PROP_INDEX_INSHAVIAN 441\r
+#define PROP_INDEX_INOSMANYA 442\r
+#define PROP_INDEX_INOSAGE 443\r
+#define PROP_INDEX_INELBASAN 444\r
+#define PROP_INDEX_INCAUCASIANALBANIAN 445\r
+#define PROP_INDEX_INLINEARA 446\r
+#define PROP_INDEX_INCYPRIOTSYLLABARY 447\r
+#define PROP_INDEX_INIMPERIALARAMAIC 448\r
+#define PROP_INDEX_INPALMYRENE 449\r
+#define PROP_INDEX_INNABATAEAN 450\r
+#define PROP_INDEX_INHATRAN 451\r
+#define PROP_INDEX_INPHOENICIAN 452\r
+#define PROP_INDEX_INLYDIAN 453\r
+#define PROP_INDEX_INMEROITICHIEROGLYPHS 454\r
+#define PROP_INDEX_INMEROITICCURSIVE 455\r
+#define PROP_INDEX_INKHAROSHTHI 456\r
+#define PROP_INDEX_INOLDSOUTHARABIAN 457\r
+#define PROP_INDEX_INOLDNORTHARABIAN 458\r
+#define PROP_INDEX_INMANICHAEAN 459\r
+#define PROP_INDEX_INAVESTAN 460\r
+#define PROP_INDEX_ININSCRIPTIONALPARTHIAN 461\r
+#define PROP_INDEX_ININSCRIPTIONALPAHLAVI 462\r
+#define PROP_INDEX_INPSALTERPAHLAVI 463\r
+#define PROP_INDEX_INOLDTURKIC 464\r
+#define PROP_INDEX_INOLDHUNGARIAN 465\r
+#define PROP_INDEX_INHANIFIROHINGYA 466\r
+#define PROP_INDEX_INRUMINUMERALSYMBOLS 467\r
+#define PROP_INDEX_INOLDSOGDIAN 468\r
+#define PROP_INDEX_INSOGDIAN 469\r
+#define PROP_INDEX_INBRAHMI 470\r
+#define PROP_INDEX_INKAITHI 471\r
+#define PROP_INDEX_INSORASOMPENG 472\r
+#define PROP_INDEX_INCHAKMA 473\r
+#define PROP_INDEX_INMAHAJANI 474\r
+#define PROP_INDEX_INSHARADA 475\r
+#define PROP_INDEX_INSINHALAARCHAICNUMBERS 476\r
+#define PROP_INDEX_INKHOJKI 477\r
+#define PROP_INDEX_INMULTANI 478\r
+#define PROP_INDEX_INKHUDAWADI 479\r
+#define PROP_INDEX_INGRANTHA 480\r
+#define PROP_INDEX_INNEWA 481\r
+#define PROP_INDEX_INTIRHUTA 482\r
+#define PROP_INDEX_INSIDDHAM 483\r
+#define PROP_INDEX_INMODI 484\r
+#define PROP_INDEX_INMONGOLIANSUPPLEMENT 485\r
+#define PROP_INDEX_INTAKRI 486\r
+#define PROP_INDEX_INAHOM 487\r
+#define PROP_INDEX_INDOGRA 488\r
+#define PROP_INDEX_INWARANGCITI 489\r
+#define PROP_INDEX_INZANABAZARSQUARE 490\r
+#define PROP_INDEX_INSOYOMBO 491\r
+#define PROP_INDEX_INPAUCINHAU 492\r
+#define PROP_INDEX_INBHAIKSUKI 493\r
+#define PROP_INDEX_INMARCHEN 494\r
+#define PROP_INDEX_INMASARAMGONDI 495\r
+#define PROP_INDEX_INGUNJALAGONDI 496\r
+#define PROP_INDEX_INMAKASAR 497\r
+#define PROP_INDEX_INCUNEIFORM 498\r
+#define PROP_INDEX_INCUNEIFORMNUMBERSANDPUNCTUATION 499\r
+#define PROP_INDEX_INEARLYDYNASTICCUNEIFORM 500\r
+#define PROP_INDEX_INEGYPTIANHIEROGLYPHS 501\r
+#define PROP_INDEX_INANATOLIANHIEROGLYPHS 502\r
+#define PROP_INDEX_INBAMUMSUPPLEMENT 503\r
+#define PROP_INDEX_INMRO 504\r
+#define PROP_INDEX_INBASSAVAH 505\r
+#define PROP_INDEX_INPAHAWHHMONG 506\r
+#define PROP_INDEX_INMEDEFAIDRIN 507\r
+#define PROP_INDEX_INMIAO 508\r
+#define PROP_INDEX_INIDEOGRAPHICSYMBOLSANDPUNCTUATION 509\r
+#define PROP_INDEX_INTANGUT 510\r
+#define PROP_INDEX_INTANGUTCOMPONENTS 511\r
+#define PROP_INDEX_INKANASUPPLEMENT 512\r
+#define PROP_INDEX_INKANAEXTENDEDA 513\r
+#define PROP_INDEX_INNUSHU 514\r
+#define PROP_INDEX_INDUPLOYAN 515\r
+#define PROP_INDEX_INSHORTHANDFORMATCONTROLS 516\r
+#define PROP_INDEX_INBYZANTINEMUSICALSYMBOLS 517\r
+#define PROP_INDEX_INMUSICALSYMBOLS 518\r
+#define PROP_INDEX_INANCIENTGREEKMUSICALNOTATION 519\r
+#define PROP_INDEX_INMAYANNUMERALS 520\r
+#define PROP_INDEX_INTAIXUANJINGSYMBOLS 521\r
+#define PROP_INDEX_INCOUNTINGRODNUMERALS 522\r
+#define PROP_INDEX_INMATHEMATICALALPHANUMERICSYMBOLS 523\r
+#define PROP_INDEX_INSUTTONSIGNWRITING 524\r
+#define PROP_INDEX_INGLAGOLITICSUPPLEMENT 525\r
+#define PROP_INDEX_INMENDEKIKAKUI 526\r
+#define PROP_INDEX_INADLAM 527\r
+#define PROP_INDEX_ININDICSIYAQNUMBERS 528\r
+#define PROP_INDEX_INARABICMATHEMATICALALPHABETICSYMBOLS 529\r
+#define PROP_INDEX_INMAHJONGTILES 530\r
+#define PROP_INDEX_INDOMINOTILES 531\r
+#define PROP_INDEX_INPLAYINGCARDS 532\r
+#define PROP_INDEX_INENCLOSEDALPHANUMERICSUPPLEMENT 533\r
+#define PROP_INDEX_INENCLOSEDIDEOGRAPHICSUPPLEMENT 534\r
+#define PROP_INDEX_INMISCELLANEOUSSYMBOLSANDPICTOGRAPHS 535\r
+#define PROP_INDEX_INEMOTICONS 536\r
+#define PROP_INDEX_INORNAMENTALDINGBATS 537\r
+#define PROP_INDEX_INTRANSPORTANDMAPSYMBOLS 538\r
+#define PROP_INDEX_INALCHEMICALSYMBOLS 539\r
+#define PROP_INDEX_INGEOMETRICSHAPESEXTENDED 540\r
+#define PROP_INDEX_INSUPPLEMENTALARROWSC 541\r
+#define PROP_INDEX_INSUPPLEMENTALSYMBOLSANDPICTOGRAPHS 542\r
+#define PROP_INDEX_INCHESSSYMBOLS 543\r
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONB 544\r
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONC 545\r
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIOND 546\r
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONE 547\r
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONF 548\r
+#define PROP_INDEX_INCJKCOMPATIBILITYIDEOGRAPHSSUPPLEMENT 549\r
+#define PROP_INDEX_INTAGS 550\r
+#define PROP_INDEX_INVARIATIONSELECTORSSUPPLEMENT 551\r
+#define PROP_INDEX_INSUPPLEMENTARYPRIVATEUSEAREAA 552\r
+#define PROP_INDEX_INSUPPLEMENTARYPRIVATEUSEAREAB 553\r
+#define PROP_INDEX_INNOBLOCK 554\r
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_property_data_posix.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_property_data_posix.c
new file mode 100644 (file)
index 0000000..b3b7272
--- /dev/null
@@ -0,0 +1,5305 @@
+/* ANSI-C code produced by gperf version 3.1 */\r
+/* Command-line: /usr/bin/gperf -T -C -c -t -j1 -L ANSI-C --ignore-case --pic -Q unicode_prop_name_pool -N unicode_lookup_property_name --output-file gperf2.tmp unicode_property_data_posix.gperf  */\r
+/* Computed positions: -k'1,3' */\r
+\r
+#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \\r
+      && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \\r
+      && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \\r
+      && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \\r
+      && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \\r
+      && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \\r
+      && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \\r
+      && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \\r
+      && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \\r
+      && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \\r
+      && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \\r
+      && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \\r
+      && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \\r
+      && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \\r
+      && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \\r
+      && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \\r
+      && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \\r
+      && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \\r
+      && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \\r
+      && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \\r
+      && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \\r
+      && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \\r
+      && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))\r
+/* The character set is not based on ISO-646.  */\r
+#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gperf@gnu.org>."\r
+#endif\r
+\r
+\r
+\r
+/* Generated by make_unicode_property_data.py. */\r
+\r
+\r
+/* PROPERTY: 'NEWLINE': POSIX [[:NEWLINE:]] */\r
+static const OnigCodePoint\r
+CR_NEWLINE[] = { 1,\r
+0x000a, 0x000a,\r
+}; /* END of CR_NEWLINE */\r
+\r
+/* PROPERTY: 'Alpha': POSIX [[:Alpha:]] */\r
+static const OnigCodePoint\r
+CR_Alpha[] = { 676,\r
+0x0041, 0x005a,\r
+0x0061, 0x007a,\r
+0x00aa, 0x00aa,\r
+0x00b5, 0x00b5,\r
+0x00ba, 0x00ba,\r
+0x00c0, 0x00d6,\r
+0x00d8, 0x00f6,\r
+0x00f8, 0x02c1,\r
+0x02c6, 0x02d1,\r
+0x02e0, 0x02e4,\r
+0x02ec, 0x02ec,\r
+0x02ee, 0x02ee,\r
+0x0345, 0x0345,\r
+0x0370, 0x0374,\r
+0x0376, 0x0377,\r
+0x037a, 0x037d,\r
+0x037f, 0x037f,\r
+0x0386, 0x0386,\r
+0x0388, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x03f5,\r
+0x03f7, 0x0481,\r
+0x048a, 0x052f,\r
+0x0531, 0x0556,\r
+0x0559, 0x0559,\r
+0x0560, 0x0588,\r
+0x05b0, 0x05bd,\r
+0x05bf, 0x05bf,\r
+0x05c1, 0x05c2,\r
+0x05c4, 0x05c5,\r
+0x05c7, 0x05c7,\r
+0x05d0, 0x05ea,\r
+0x05ef, 0x05f2,\r
+0x0610, 0x061a,\r
+0x0620, 0x0657,\r
+0x0659, 0x065f,\r
+0x066e, 0x06d3,\r
+0x06d5, 0x06dc,\r
+0x06e1, 0x06e8,\r
+0x06ed, 0x06ef,\r
+0x06fa, 0x06fc,\r
+0x06ff, 0x06ff,\r
+0x0710, 0x073f,\r
+0x074d, 0x07b1,\r
+0x07ca, 0x07ea,\r
+0x07f4, 0x07f5,\r
+0x07fa, 0x07fa,\r
+0x0800, 0x0817,\r
+0x081a, 0x082c,\r
+0x0840, 0x0858,\r
+0x0860, 0x086a,\r
+0x08a0, 0x08b4,\r
+0x08b6, 0x08bd,\r
+0x08d4, 0x08df,\r
+0x08e3, 0x08e9,\r
+0x08f0, 0x093b,\r
+0x093d, 0x094c,\r
+0x094e, 0x0950,\r
+0x0955, 0x0963,\r
+0x0971, 0x0983,\r
+0x0985, 0x098c,\r
+0x098f, 0x0990,\r
+0x0993, 0x09a8,\r
+0x09aa, 0x09b0,\r
+0x09b2, 0x09b2,\r
+0x09b6, 0x09b9,\r
+0x09bd, 0x09c4,\r
+0x09c7, 0x09c8,\r
+0x09cb, 0x09cc,\r
+0x09ce, 0x09ce,\r
+0x09d7, 0x09d7,\r
+0x09dc, 0x09dd,\r
+0x09df, 0x09e3,\r
+0x09f0, 0x09f1,\r
+0x09fc, 0x09fc,\r
+0x0a01, 0x0a03,\r
+0x0a05, 0x0a0a,\r
+0x0a0f, 0x0a10,\r
+0x0a13, 0x0a28,\r
+0x0a2a, 0x0a30,\r
+0x0a32, 0x0a33,\r
+0x0a35, 0x0a36,\r
+0x0a38, 0x0a39,\r
+0x0a3e, 0x0a42,\r
+0x0a47, 0x0a48,\r
+0x0a4b, 0x0a4c,\r
+0x0a51, 0x0a51,\r
+0x0a59, 0x0a5c,\r
+0x0a5e, 0x0a5e,\r
+0x0a70, 0x0a75,\r
+0x0a81, 0x0a83,\r
+0x0a85, 0x0a8d,\r
+0x0a8f, 0x0a91,\r
+0x0a93, 0x0aa8,\r
+0x0aaa, 0x0ab0,\r
+0x0ab2, 0x0ab3,\r
+0x0ab5, 0x0ab9,\r
+0x0abd, 0x0ac5,\r
+0x0ac7, 0x0ac9,\r
+0x0acb, 0x0acc,\r
+0x0ad0, 0x0ad0,\r
+0x0ae0, 0x0ae3,\r
+0x0af9, 0x0afc,\r
+0x0b01, 0x0b03,\r
+0x0b05, 0x0b0c,\r
+0x0b0f, 0x0b10,\r
+0x0b13, 0x0b28,\r
+0x0b2a, 0x0b30,\r
+0x0b32, 0x0b33,\r
+0x0b35, 0x0b39,\r
+0x0b3d, 0x0b44,\r
+0x0b47, 0x0b48,\r
+0x0b4b, 0x0b4c,\r
+0x0b56, 0x0b57,\r
+0x0b5c, 0x0b5d,\r
+0x0b5f, 0x0b63,\r
+0x0b71, 0x0b71,\r
+0x0b82, 0x0b83,\r
+0x0b85, 0x0b8a,\r
+0x0b8e, 0x0b90,\r
+0x0b92, 0x0b95,\r
+0x0b99, 0x0b9a,\r
+0x0b9c, 0x0b9c,\r
+0x0b9e, 0x0b9f,\r
+0x0ba3, 0x0ba4,\r
+0x0ba8, 0x0baa,\r
+0x0bae, 0x0bb9,\r
+0x0bbe, 0x0bc2,\r
+0x0bc6, 0x0bc8,\r
+0x0bca, 0x0bcc,\r
+0x0bd0, 0x0bd0,\r
+0x0bd7, 0x0bd7,\r
+0x0c00, 0x0c03,\r
+0x0c05, 0x0c0c,\r
+0x0c0e, 0x0c10,\r
+0x0c12, 0x0c28,\r
+0x0c2a, 0x0c39,\r
+0x0c3d, 0x0c44,\r
+0x0c46, 0x0c48,\r
+0x0c4a, 0x0c4c,\r
+0x0c55, 0x0c56,\r
+0x0c58, 0x0c5a,\r
+0x0c60, 0x0c63,\r
+0x0c80, 0x0c83,\r
+0x0c85, 0x0c8c,\r
+0x0c8e, 0x0c90,\r
+0x0c92, 0x0ca8,\r
+0x0caa, 0x0cb3,\r
+0x0cb5, 0x0cb9,\r
+0x0cbd, 0x0cc4,\r
+0x0cc6, 0x0cc8,\r
+0x0cca, 0x0ccc,\r
+0x0cd5, 0x0cd6,\r
+0x0cde, 0x0cde,\r
+0x0ce0, 0x0ce3,\r
+0x0cf1, 0x0cf2,\r
+0x0d00, 0x0d03,\r
+0x0d05, 0x0d0c,\r
+0x0d0e, 0x0d10,\r
+0x0d12, 0x0d3a,\r
+0x0d3d, 0x0d44,\r
+0x0d46, 0x0d48,\r
+0x0d4a, 0x0d4c,\r
+0x0d4e, 0x0d4e,\r
+0x0d54, 0x0d57,\r
+0x0d5f, 0x0d63,\r
+0x0d7a, 0x0d7f,\r
+0x0d82, 0x0d83,\r
+0x0d85, 0x0d96,\r
+0x0d9a, 0x0db1,\r
+0x0db3, 0x0dbb,\r
+0x0dbd, 0x0dbd,\r
+0x0dc0, 0x0dc6,\r
+0x0dcf, 0x0dd4,\r
+0x0dd6, 0x0dd6,\r
+0x0dd8, 0x0ddf,\r
+0x0df2, 0x0df3,\r
+0x0e01, 0x0e3a,\r
+0x0e40, 0x0e46,\r
+0x0e4d, 0x0e4d,\r
+0x0e81, 0x0e82,\r
+0x0e84, 0x0e84,\r
+0x0e87, 0x0e88,\r
+0x0e8a, 0x0e8a,\r
+0x0e8d, 0x0e8d,\r
+0x0e94, 0x0e97,\r
+0x0e99, 0x0e9f,\r
+0x0ea1, 0x0ea3,\r
+0x0ea5, 0x0ea5,\r
+0x0ea7, 0x0ea7,\r
+0x0eaa, 0x0eab,\r
+0x0ead, 0x0eb9,\r
+0x0ebb, 0x0ebd,\r
+0x0ec0, 0x0ec4,\r
+0x0ec6, 0x0ec6,\r
+0x0ecd, 0x0ecd,\r
+0x0edc, 0x0edf,\r
+0x0f00, 0x0f00,\r
+0x0f40, 0x0f47,\r
+0x0f49, 0x0f6c,\r
+0x0f71, 0x0f81,\r
+0x0f88, 0x0f97,\r
+0x0f99, 0x0fbc,\r
+0x1000, 0x1036,\r
+0x1038, 0x1038,\r
+0x103b, 0x103f,\r
+0x1050, 0x1062,\r
+0x1065, 0x1068,\r
+0x106e, 0x1086,\r
+0x108e, 0x108e,\r
+0x109c, 0x109d,\r
+0x10a0, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x10fa,\r
+0x10fc, 0x1248,\r
+0x124a, 0x124d,\r
+0x1250, 0x1256,\r
+0x1258, 0x1258,\r
+0x125a, 0x125d,\r
+0x1260, 0x1288,\r
+0x128a, 0x128d,\r
+0x1290, 0x12b0,\r
+0x12b2, 0x12b5,\r
+0x12b8, 0x12be,\r
+0x12c0, 0x12c0,\r
+0x12c2, 0x12c5,\r
+0x12c8, 0x12d6,\r
+0x12d8, 0x1310,\r
+0x1312, 0x1315,\r
+0x1318, 0x135a,\r
+0x135f, 0x135f,\r
+0x1380, 0x138f,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0x1401, 0x166c,\r
+0x166f, 0x167f,\r
+0x1681, 0x169a,\r
+0x16a0, 0x16ea,\r
+0x16ee, 0x16f8,\r
+0x1700, 0x170c,\r
+0x170e, 0x1713,\r
+0x1720, 0x1733,\r
+0x1740, 0x1753,\r
+0x1760, 0x176c,\r
+0x176e, 0x1770,\r
+0x1772, 0x1773,\r
+0x1780, 0x17b3,\r
+0x17b6, 0x17c8,\r
+0x17d7, 0x17d7,\r
+0x17dc, 0x17dc,\r
+0x1820, 0x1878,\r
+0x1880, 0x18aa,\r
+0x18b0, 0x18f5,\r
+0x1900, 0x191e,\r
+0x1920, 0x192b,\r
+0x1930, 0x1938,\r
+0x1950, 0x196d,\r
+0x1970, 0x1974,\r
+0x1980, 0x19ab,\r
+0x19b0, 0x19c9,\r
+0x1a00, 0x1a1b,\r
+0x1a20, 0x1a5e,\r
+0x1a61, 0x1a74,\r
+0x1aa7, 0x1aa7,\r
+0x1b00, 0x1b33,\r
+0x1b35, 0x1b43,\r
+0x1b45, 0x1b4b,\r
+0x1b80, 0x1ba9,\r
+0x1bac, 0x1baf,\r
+0x1bba, 0x1be5,\r
+0x1be7, 0x1bf1,\r
+0x1c00, 0x1c35,\r
+0x1c4d, 0x1c4f,\r
+0x1c5a, 0x1c7d,\r
+0x1c80, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cbf,\r
+0x1ce9, 0x1cec,\r
+0x1cee, 0x1cf3,\r
+0x1cf5, 0x1cf6,\r
+0x1d00, 0x1dbf,\r
+0x1de7, 0x1df4,\r
+0x1e00, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fbc,\r
+0x1fbe, 0x1fbe,\r
+0x1fc2, 0x1fc4,\r
+0x1fc6, 0x1fcc,\r
+0x1fd0, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fe0, 0x1fec,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffc,\r
+0x2071, 0x2071,\r
+0x207f, 0x207f,\r
+0x2090, 0x209c,\r
+0x2102, 0x2102,\r
+0x2107, 0x2107,\r
+0x210a, 0x2113,\r
+0x2115, 0x2115,\r
+0x2119, 0x211d,\r
+0x2124, 0x2124,\r
+0x2126, 0x2126,\r
+0x2128, 0x2128,\r
+0x212a, 0x212d,\r
+0x212f, 0x2139,\r
+0x213c, 0x213f,\r
+0x2145, 0x2149,\r
+0x214e, 0x214e,\r
+0x2160, 0x2188,\r
+0x24b6, 0x24e9,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x2c60, 0x2ce4,\r
+0x2ceb, 0x2cee,\r
+0x2cf2, 0x2cf3,\r
+0x2d00, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0x2d30, 0x2d67,\r
+0x2d6f, 0x2d6f,\r
+0x2d80, 0x2d96,\r
+0x2da0, 0x2da6,\r
+0x2da8, 0x2dae,\r
+0x2db0, 0x2db6,\r
+0x2db8, 0x2dbe,\r
+0x2dc0, 0x2dc6,\r
+0x2dc8, 0x2dce,\r
+0x2dd0, 0x2dd6,\r
+0x2dd8, 0x2dde,\r
+0x2de0, 0x2dff,\r
+0x2e2f, 0x2e2f,\r
+0x3005, 0x3007,\r
+0x3021, 0x3029,\r
+0x3031, 0x3035,\r
+0x3038, 0x303c,\r
+0x3041, 0x3096,\r
+0x309d, 0x309f,\r
+0x30a1, 0x30fa,\r
+0x30fc, 0x30ff,\r
+0x3105, 0x312f,\r
+0x3131, 0x318e,\r
+0x31a0, 0x31ba,\r
+0x31f0, 0x31ff,\r
+0x3400, 0x4db5,\r
+0x4e00, 0x9fef,\r
+0xa000, 0xa48c,\r
+0xa4d0, 0xa4fd,\r
+0xa500, 0xa60c,\r
+0xa610, 0xa61f,\r
+0xa62a, 0xa62b,\r
+0xa640, 0xa66e,\r
+0xa674, 0xa67b,\r
+0xa67f, 0xa6ef,\r
+0xa717, 0xa71f,\r
+0xa722, 0xa788,\r
+0xa78b, 0xa7b9,\r
+0xa7f7, 0xa801,\r
+0xa803, 0xa805,\r
+0xa807, 0xa80a,\r
+0xa80c, 0xa827,\r
+0xa840, 0xa873,\r
+0xa880, 0xa8c3,\r
+0xa8c5, 0xa8c5,\r
+0xa8f2, 0xa8f7,\r
+0xa8fb, 0xa8fb,\r
+0xa8fd, 0xa8fe,\r
+0xa90a, 0xa92a,\r
+0xa930, 0xa952,\r
+0xa960, 0xa97c,\r
+0xa980, 0xa9b2,\r
+0xa9b4, 0xa9bf,\r
+0xa9cf, 0xa9cf,\r
+0xa9e0, 0xa9e4,\r
+0xa9e6, 0xa9ef,\r
+0xa9fa, 0xa9fe,\r
+0xaa00, 0xaa36,\r
+0xaa40, 0xaa4d,\r
+0xaa60, 0xaa76,\r
+0xaa7a, 0xaa7a,\r
+0xaa7e, 0xaabe,\r
+0xaac0, 0xaac0,\r
+0xaac2, 0xaac2,\r
+0xaadb, 0xaadd,\r
+0xaae0, 0xaaef,\r
+0xaaf2, 0xaaf5,\r
+0xab01, 0xab06,\r
+0xab09, 0xab0e,\r
+0xab11, 0xab16,\r
+0xab20, 0xab26,\r
+0xab28, 0xab2e,\r
+0xab30, 0xab5a,\r
+0xab5c, 0xab65,\r
+0xab70, 0xabea,\r
+0xac00, 0xd7a3,\r
+0xd7b0, 0xd7c6,\r
+0xd7cb, 0xd7fb,\r
+0xf900, 0xfa6d,\r
+0xfa70, 0xfad9,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xfb1d, 0xfb28,\r
+0xfb2a, 0xfb36,\r
+0xfb38, 0xfb3c,\r
+0xfb3e, 0xfb3e,\r
+0xfb40, 0xfb41,\r
+0xfb43, 0xfb44,\r
+0xfb46, 0xfbb1,\r
+0xfbd3, 0xfd3d,\r
+0xfd50, 0xfd8f,\r
+0xfd92, 0xfdc7,\r
+0xfdf0, 0xfdfb,\r
+0xfe70, 0xfe74,\r
+0xfe76, 0xfefc,\r
+0xff21, 0xff3a,\r
+0xff41, 0xff5a,\r
+0xff66, 0xffbe,\r
+0xffc2, 0xffc7,\r
+0xffca, 0xffcf,\r
+0xffd2, 0xffd7,\r
+0xffda, 0xffdc,\r
+0x10000, 0x1000b,\r
+0x1000d, 0x10026,\r
+0x10028, 0x1003a,\r
+0x1003c, 0x1003d,\r
+0x1003f, 0x1004d,\r
+0x10050, 0x1005d,\r
+0x10080, 0x100fa,\r
+0x10140, 0x10174,\r
+0x10280, 0x1029c,\r
+0x102a0, 0x102d0,\r
+0x10300, 0x1031f,\r
+0x1032d, 0x1034a,\r
+0x10350, 0x1037a,\r
+0x10380, 0x1039d,\r
+0x103a0, 0x103c3,\r
+0x103c8, 0x103cf,\r
+0x103d1, 0x103d5,\r
+0x10400, 0x1049d,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+0x10500, 0x10527,\r
+0x10530, 0x10563,\r
+0x10600, 0x10736,\r
+0x10740, 0x10755,\r
+0x10760, 0x10767,\r
+0x10800, 0x10805,\r
+0x10808, 0x10808,\r
+0x1080a, 0x10835,\r
+0x10837, 0x10838,\r
+0x1083c, 0x1083c,\r
+0x1083f, 0x10855,\r
+0x10860, 0x10876,\r
+0x10880, 0x1089e,\r
+0x108e0, 0x108f2,\r
+0x108f4, 0x108f5,\r
+0x10900, 0x10915,\r
+0x10920, 0x10939,\r
+0x10980, 0x109b7,\r
+0x109be, 0x109bf,\r
+0x10a00, 0x10a03,\r
+0x10a05, 0x10a06,\r
+0x10a0c, 0x10a13,\r
+0x10a15, 0x10a17,\r
+0x10a19, 0x10a35,\r
+0x10a60, 0x10a7c,\r
+0x10a80, 0x10a9c,\r
+0x10ac0, 0x10ac7,\r
+0x10ac9, 0x10ae4,\r
+0x10b00, 0x10b35,\r
+0x10b40, 0x10b55,\r
+0x10b60, 0x10b72,\r
+0x10b80, 0x10b91,\r
+0x10c00, 0x10c48,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x10d00, 0x10d27,\r
+0x10f00, 0x10f1c,\r
+0x10f27, 0x10f27,\r
+0x10f30, 0x10f45,\r
+0x11000, 0x11045,\r
+0x11082, 0x110b8,\r
+0x110d0, 0x110e8,\r
+0x11100, 0x11132,\r
+0x11144, 0x11146,\r
+0x11150, 0x11172,\r
+0x11176, 0x11176,\r
+0x11180, 0x111bf,\r
+0x111c1, 0x111c4,\r
+0x111da, 0x111da,\r
+0x111dc, 0x111dc,\r
+0x11200, 0x11211,\r
+0x11213, 0x11234,\r
+0x11237, 0x11237,\r
+0x1123e, 0x1123e,\r
+0x11280, 0x11286,\r
+0x11288, 0x11288,\r
+0x1128a, 0x1128d,\r
+0x1128f, 0x1129d,\r
+0x1129f, 0x112a8,\r
+0x112b0, 0x112e8,\r
+0x11300, 0x11303,\r
+0x11305, 0x1130c,\r
+0x1130f, 0x11310,\r
+0x11313, 0x11328,\r
+0x1132a, 0x11330,\r
+0x11332, 0x11333,\r
+0x11335, 0x11339,\r
+0x1133d, 0x11344,\r
+0x11347, 0x11348,\r
+0x1134b, 0x1134c,\r
+0x11350, 0x11350,\r
+0x11357, 0x11357,\r
+0x1135d, 0x11363,\r
+0x11400, 0x11441,\r
+0x11443, 0x11445,\r
+0x11447, 0x1144a,\r
+0x11480, 0x114c1,\r
+0x114c4, 0x114c5,\r
+0x114c7, 0x114c7,\r
+0x11580, 0x115b5,\r
+0x115b8, 0x115be,\r
+0x115d8, 0x115dd,\r
+0x11600, 0x1163e,\r
+0x11640, 0x11640,\r
+0x11644, 0x11644,\r
+0x11680, 0x116b5,\r
+0x11700, 0x1171a,\r
+0x1171d, 0x1172a,\r
+0x11800, 0x11838,\r
+0x118a0, 0x118df,\r
+0x118ff, 0x118ff,\r
+0x11a00, 0x11a32,\r
+0x11a35, 0x11a3e,\r
+0x11a50, 0x11a83,\r
+0x11a86, 0x11a97,\r
+0x11a9d, 0x11a9d,\r
+0x11ac0, 0x11af8,\r
+0x11c00, 0x11c08,\r
+0x11c0a, 0x11c36,\r
+0x11c38, 0x11c3e,\r
+0x11c40, 0x11c40,\r
+0x11c72, 0x11c8f,\r
+0x11c92, 0x11ca7,\r
+0x11ca9, 0x11cb6,\r
+0x11d00, 0x11d06,\r
+0x11d08, 0x11d09,\r
+0x11d0b, 0x11d36,\r
+0x11d3a, 0x11d3a,\r
+0x11d3c, 0x11d3d,\r
+0x11d3f, 0x11d41,\r
+0x11d43, 0x11d43,\r
+0x11d46, 0x11d47,\r
+0x11d60, 0x11d65,\r
+0x11d67, 0x11d68,\r
+0x11d6a, 0x11d8e,\r
+0x11d90, 0x11d91,\r
+0x11d93, 0x11d96,\r
+0x11d98, 0x11d98,\r
+0x11ee0, 0x11ef6,\r
+0x12000, 0x12399,\r
+0x12400, 0x1246e,\r
+0x12480, 0x12543,\r
+0x13000, 0x1342e,\r
+0x14400, 0x14646,\r
+0x16800, 0x16a38,\r
+0x16a40, 0x16a5e,\r
+0x16ad0, 0x16aed,\r
+0x16b00, 0x16b36,\r
+0x16b40, 0x16b43,\r
+0x16b63, 0x16b77,\r
+0x16b7d, 0x16b8f,\r
+0x16e40, 0x16e7f,\r
+0x16f00, 0x16f44,\r
+0x16f50, 0x16f7e,\r
+0x16f93, 0x16f9f,\r
+0x16fe0, 0x16fe1,\r
+0x17000, 0x187f1,\r
+0x18800, 0x18af2,\r
+0x1b000, 0x1b11e,\r
+0x1b170, 0x1b2fb,\r
+0x1bc00, 0x1bc6a,\r
+0x1bc70, 0x1bc7c,\r
+0x1bc80, 0x1bc88,\r
+0x1bc90, 0x1bc99,\r
+0x1bc9e, 0x1bc9e,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d6c0,\r
+0x1d6c2, 0x1d6da,\r
+0x1d6dc, 0x1d6fa,\r
+0x1d6fc, 0x1d714,\r
+0x1d716, 0x1d734,\r
+0x1d736, 0x1d74e,\r
+0x1d750, 0x1d76e,\r
+0x1d770, 0x1d788,\r
+0x1d78a, 0x1d7a8,\r
+0x1d7aa, 0x1d7c2,\r
+0x1d7c4, 0x1d7cb,\r
+0x1e000, 0x1e006,\r
+0x1e008, 0x1e018,\r
+0x1e01b, 0x1e021,\r
+0x1e023, 0x1e024,\r
+0x1e026, 0x1e02a,\r
+0x1e800, 0x1e8c4,\r
+0x1e900, 0x1e943,\r
+0x1e947, 0x1e947,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+0x1f130, 0x1f149,\r
+0x1f150, 0x1f169,\r
+0x1f170, 0x1f189,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+0x2f800, 0x2fa1d,\r
+}; /* END of CR_Alpha */\r
+\r
+/* PROPERTY: 'Blank': POSIX [[:Blank:]] */\r
+static const OnigCodePoint\r
+CR_Blank[] = { 8,\r
+0x0009, 0x0009,\r
+0x0020, 0x0020,\r
+0x00a0, 0x00a0,\r
+0x1680, 0x1680,\r
+0x2000, 0x200a,\r
+0x202f, 0x202f,\r
+0x205f, 0x205f,\r
+0x3000, 0x3000,\r
+}; /* END of CR_Blank */\r
+\r
+/* PROPERTY: 'Cntrl': POSIX [[:Cntrl:]] */\r
+static const OnigCodePoint\r
+CR_Cntrl[] = { 2,\r
+0x0000, 0x001f,\r
+0x007f, 0x009f,\r
+}; /* END of CR_Cntrl */\r
+\r
+/* PROPERTY: 'Digit': POSIX [[:Digit:]] */\r
+static const OnigCodePoint\r
+CR_Digit[] = { 57,\r
+0x0030, 0x0039,\r
+0x0660, 0x0669,\r
+0x06f0, 0x06f9,\r
+0x07c0, 0x07c9,\r
+0x0966, 0x096f,\r
+0x09e6, 0x09ef,\r
+0x0a66, 0x0a6f,\r
+0x0ae6, 0x0aef,\r
+0x0b66, 0x0b6f,\r
+0x0be6, 0x0bef,\r
+0x0c66, 0x0c6f,\r
+0x0ce6, 0x0cef,\r
+0x0d66, 0x0d6f,\r
+0x0de6, 0x0def,\r
+0x0e50, 0x0e59,\r
+0x0ed0, 0x0ed9,\r
+0x0f20, 0x0f29,\r
+0x1040, 0x1049,\r
+0x1090, 0x1099,\r
+0x17e0, 0x17e9,\r
+0x1810, 0x1819,\r
+0x1946, 0x194f,\r
+0x19d0, 0x19d9,\r
+0x1a80, 0x1a89,\r
+0x1a90, 0x1a99,\r
+0x1b50, 0x1b59,\r
+0x1bb0, 0x1bb9,\r
+0x1c40, 0x1c49,\r
+0x1c50, 0x1c59,\r
+0xa620, 0xa629,\r
+0xa8d0, 0xa8d9,\r
+0xa900, 0xa909,\r
+0xa9d0, 0xa9d9,\r
+0xa9f0, 0xa9f9,\r
+0xaa50, 0xaa59,\r
+0xabf0, 0xabf9,\r
+0xff10, 0xff19,\r
+0x104a0, 0x104a9,\r
+0x10d30, 0x10d39,\r
+0x11066, 0x1106f,\r
+0x110f0, 0x110f9,\r
+0x11136, 0x1113f,\r
+0x111d0, 0x111d9,\r
+0x112f0, 0x112f9,\r
+0x11450, 0x11459,\r
+0x114d0, 0x114d9,\r
+0x11650, 0x11659,\r
+0x116c0, 0x116c9,\r
+0x11730, 0x11739,\r
+0x118e0, 0x118e9,\r
+0x11c50, 0x11c59,\r
+0x11d50, 0x11d59,\r
+0x11da0, 0x11da9,\r
+0x16a60, 0x16a69,\r
+0x16b50, 0x16b59,\r
+0x1d7ce, 0x1d7ff,\r
+0x1e950, 0x1e959,\r
+}; /* END of CR_Digit */\r
+\r
+/* PROPERTY: 'Graph': POSIX [[:Graph:]] */\r
+static const OnigCodePoint\r
+CR_Graph[] = { 663,\r
+0x0021, 0x007e,\r
+0x00a1, 0x0377,\r
+0x037a, 0x037f,\r
+0x0384, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x052f,\r
+0x0531, 0x0556,\r
+0x0559, 0x058a,\r
+0x058d, 0x058f,\r
+0x0591, 0x05c7,\r
+0x05d0, 0x05ea,\r
+0x05ef, 0x05f4,\r
+0x0600, 0x061c,\r
+0x061e, 0x070d,\r
+0x070f, 0x074a,\r
+0x074d, 0x07b1,\r
+0x07c0, 0x07fa,\r
+0x07fd, 0x082d,\r
+0x0830, 0x083e,\r
+0x0840, 0x085b,\r
+0x085e, 0x085e,\r
+0x0860, 0x086a,\r
+0x08a0, 0x08b4,\r
+0x08b6, 0x08bd,\r
+0x08d3, 0x0983,\r
+0x0985, 0x098c,\r
+0x098f, 0x0990,\r
+0x0993, 0x09a8,\r
+0x09aa, 0x09b0,\r
+0x09b2, 0x09b2,\r
+0x09b6, 0x09b9,\r
+0x09bc, 0x09c4,\r
+0x09c7, 0x09c8,\r
+0x09cb, 0x09ce,\r
+0x09d7, 0x09d7,\r
+0x09dc, 0x09dd,\r
+0x09df, 0x09e3,\r
+0x09e6, 0x09fe,\r
+0x0a01, 0x0a03,\r
+0x0a05, 0x0a0a,\r
+0x0a0f, 0x0a10,\r
+0x0a13, 0x0a28,\r
+0x0a2a, 0x0a30,\r
+0x0a32, 0x0a33,\r
+0x0a35, 0x0a36,\r
+0x0a38, 0x0a39,\r
+0x0a3c, 0x0a3c,\r
+0x0a3e, 0x0a42,\r
+0x0a47, 0x0a48,\r
+0x0a4b, 0x0a4d,\r
+0x0a51, 0x0a51,\r
+0x0a59, 0x0a5c,\r
+0x0a5e, 0x0a5e,\r
+0x0a66, 0x0a76,\r
+0x0a81, 0x0a83,\r
+0x0a85, 0x0a8d,\r
+0x0a8f, 0x0a91,\r
+0x0a93, 0x0aa8,\r
+0x0aaa, 0x0ab0,\r
+0x0ab2, 0x0ab3,\r
+0x0ab5, 0x0ab9,\r
+0x0abc, 0x0ac5,\r
+0x0ac7, 0x0ac9,\r
+0x0acb, 0x0acd,\r
+0x0ad0, 0x0ad0,\r
+0x0ae0, 0x0ae3,\r
+0x0ae6, 0x0af1,\r
+0x0af9, 0x0aff,\r
+0x0b01, 0x0b03,\r
+0x0b05, 0x0b0c,\r
+0x0b0f, 0x0b10,\r
+0x0b13, 0x0b28,\r
+0x0b2a, 0x0b30,\r
+0x0b32, 0x0b33,\r
+0x0b35, 0x0b39,\r
+0x0b3c, 0x0b44,\r
+0x0b47, 0x0b48,\r
+0x0b4b, 0x0b4d,\r
+0x0b56, 0x0b57,\r
+0x0b5c, 0x0b5d,\r
+0x0b5f, 0x0b63,\r
+0x0b66, 0x0b77,\r
+0x0b82, 0x0b83,\r
+0x0b85, 0x0b8a,\r
+0x0b8e, 0x0b90,\r
+0x0b92, 0x0b95,\r
+0x0b99, 0x0b9a,\r
+0x0b9c, 0x0b9c,\r
+0x0b9e, 0x0b9f,\r
+0x0ba3, 0x0ba4,\r
+0x0ba8, 0x0baa,\r
+0x0bae, 0x0bb9,\r
+0x0bbe, 0x0bc2,\r
+0x0bc6, 0x0bc8,\r
+0x0bca, 0x0bcd,\r
+0x0bd0, 0x0bd0,\r
+0x0bd7, 0x0bd7,\r
+0x0be6, 0x0bfa,\r
+0x0c00, 0x0c0c,\r
+0x0c0e, 0x0c10,\r
+0x0c12, 0x0c28,\r
+0x0c2a, 0x0c39,\r
+0x0c3d, 0x0c44,\r
+0x0c46, 0x0c48,\r
+0x0c4a, 0x0c4d,\r
+0x0c55, 0x0c56,\r
+0x0c58, 0x0c5a,\r
+0x0c60, 0x0c63,\r
+0x0c66, 0x0c6f,\r
+0x0c78, 0x0c8c,\r
+0x0c8e, 0x0c90,\r
+0x0c92, 0x0ca8,\r
+0x0caa, 0x0cb3,\r
+0x0cb5, 0x0cb9,\r
+0x0cbc, 0x0cc4,\r
+0x0cc6, 0x0cc8,\r
+0x0cca, 0x0ccd,\r
+0x0cd5, 0x0cd6,\r
+0x0cde, 0x0cde,\r
+0x0ce0, 0x0ce3,\r
+0x0ce6, 0x0cef,\r
+0x0cf1, 0x0cf2,\r
+0x0d00, 0x0d03,\r
+0x0d05, 0x0d0c,\r
+0x0d0e, 0x0d10,\r
+0x0d12, 0x0d44,\r
+0x0d46, 0x0d48,\r
+0x0d4a, 0x0d4f,\r
+0x0d54, 0x0d63,\r
+0x0d66, 0x0d7f,\r
+0x0d82, 0x0d83,\r
+0x0d85, 0x0d96,\r
+0x0d9a, 0x0db1,\r
+0x0db3, 0x0dbb,\r
+0x0dbd, 0x0dbd,\r
+0x0dc0, 0x0dc6,\r
+0x0dca, 0x0dca,\r
+0x0dcf, 0x0dd4,\r
+0x0dd6, 0x0dd6,\r
+0x0dd8, 0x0ddf,\r
+0x0de6, 0x0def,\r
+0x0df2, 0x0df4,\r
+0x0e01, 0x0e3a,\r
+0x0e3f, 0x0e5b,\r
+0x0e81, 0x0e82,\r
+0x0e84, 0x0e84,\r
+0x0e87, 0x0e88,\r
+0x0e8a, 0x0e8a,\r
+0x0e8d, 0x0e8d,\r
+0x0e94, 0x0e97,\r
+0x0e99, 0x0e9f,\r
+0x0ea1, 0x0ea3,\r
+0x0ea5, 0x0ea5,\r
+0x0ea7, 0x0ea7,\r
+0x0eaa, 0x0eab,\r
+0x0ead, 0x0eb9,\r
+0x0ebb, 0x0ebd,\r
+0x0ec0, 0x0ec4,\r
+0x0ec6, 0x0ec6,\r
+0x0ec8, 0x0ecd,\r
+0x0ed0, 0x0ed9,\r
+0x0edc, 0x0edf,\r
+0x0f00, 0x0f47,\r
+0x0f49, 0x0f6c,\r
+0x0f71, 0x0f97,\r
+0x0f99, 0x0fbc,\r
+0x0fbe, 0x0fcc,\r
+0x0fce, 0x0fda,\r
+0x1000, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x1248,\r
+0x124a, 0x124d,\r
+0x1250, 0x1256,\r
+0x1258, 0x1258,\r
+0x125a, 0x125d,\r
+0x1260, 0x1288,\r
+0x128a, 0x128d,\r
+0x1290, 0x12b0,\r
+0x12b2, 0x12b5,\r
+0x12b8, 0x12be,\r
+0x12c0, 0x12c0,\r
+0x12c2, 0x12c5,\r
+0x12c8, 0x12d6,\r
+0x12d8, 0x1310,\r
+0x1312, 0x1315,\r
+0x1318, 0x135a,\r
+0x135d, 0x137c,\r
+0x1380, 0x1399,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0x1400, 0x167f,\r
+0x1681, 0x169c,\r
+0x16a0, 0x16f8,\r
+0x1700, 0x170c,\r
+0x170e, 0x1714,\r
+0x1720, 0x1736,\r
+0x1740, 0x1753,\r
+0x1760, 0x176c,\r
+0x176e, 0x1770,\r
+0x1772, 0x1773,\r
+0x1780, 0x17dd,\r
+0x17e0, 0x17e9,\r
+0x17f0, 0x17f9,\r
+0x1800, 0x180e,\r
+0x1810, 0x1819,\r
+0x1820, 0x1878,\r
+0x1880, 0x18aa,\r
+0x18b0, 0x18f5,\r
+0x1900, 0x191e,\r
+0x1920, 0x192b,\r
+0x1930, 0x193b,\r
+0x1940, 0x1940,\r
+0x1944, 0x196d,\r
+0x1970, 0x1974,\r
+0x1980, 0x19ab,\r
+0x19b0, 0x19c9,\r
+0x19d0, 0x19da,\r
+0x19de, 0x1a1b,\r
+0x1a1e, 0x1a5e,\r
+0x1a60, 0x1a7c,\r
+0x1a7f, 0x1a89,\r
+0x1a90, 0x1a99,\r
+0x1aa0, 0x1aad,\r
+0x1ab0, 0x1abe,\r
+0x1b00, 0x1b4b,\r
+0x1b50, 0x1b7c,\r
+0x1b80, 0x1bf3,\r
+0x1bfc, 0x1c37,\r
+0x1c3b, 0x1c49,\r
+0x1c4d, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cc7,\r
+0x1cd0, 0x1cf9,\r
+0x1d00, 0x1df9,\r
+0x1dfb, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fc4,\r
+0x1fc6, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fdd, 0x1fef,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffe,\r
+0x200b, 0x2027,\r
+0x202a, 0x202e,\r
+0x2030, 0x205e,\r
+0x2060, 0x2064,\r
+0x2066, 0x2071,\r
+0x2074, 0x208e,\r
+0x2090, 0x209c,\r
+0x20a0, 0x20bf,\r
+0x20d0, 0x20f0,\r
+0x2100, 0x218b,\r
+0x2190, 0x2426,\r
+0x2440, 0x244a,\r
+0x2460, 0x2b73,\r
+0x2b76, 0x2b95,\r
+0x2b98, 0x2bc8,\r
+0x2bca, 0x2bfe,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x2c60, 0x2cf3,\r
+0x2cf9, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0x2d30, 0x2d67,\r
+0x2d6f, 0x2d70,\r
+0x2d7f, 0x2d96,\r
+0x2da0, 0x2da6,\r
+0x2da8, 0x2dae,\r
+0x2db0, 0x2db6,\r
+0x2db8, 0x2dbe,\r
+0x2dc0, 0x2dc6,\r
+0x2dc8, 0x2dce,\r
+0x2dd0, 0x2dd6,\r
+0x2dd8, 0x2dde,\r
+0x2de0, 0x2e4e,\r
+0x2e80, 0x2e99,\r
+0x2e9b, 0x2ef3,\r
+0x2f00, 0x2fd5,\r
+0x2ff0, 0x2ffb,\r
+0x3001, 0x303f,\r
+0x3041, 0x3096,\r
+0x3099, 0x30ff,\r
+0x3105, 0x312f,\r
+0x3131, 0x318e,\r
+0x3190, 0x31ba,\r
+0x31c0, 0x31e3,\r
+0x31f0, 0x321e,\r
+0x3220, 0x32fe,\r
+0x3300, 0x4db5,\r
+0x4dc0, 0x9fef,\r
+0xa000, 0xa48c,\r
+0xa490, 0xa4c6,\r
+0xa4d0, 0xa62b,\r
+0xa640, 0xa6f7,\r
+0xa700, 0xa7b9,\r
+0xa7f7, 0xa82b,\r
+0xa830, 0xa839,\r
+0xa840, 0xa877,\r
+0xa880, 0xa8c5,\r
+0xa8ce, 0xa8d9,\r
+0xa8e0, 0xa953,\r
+0xa95f, 0xa97c,\r
+0xa980, 0xa9cd,\r
+0xa9cf, 0xa9d9,\r
+0xa9de, 0xa9fe,\r
+0xaa00, 0xaa36,\r
+0xaa40, 0xaa4d,\r
+0xaa50, 0xaa59,\r
+0xaa5c, 0xaac2,\r
+0xaadb, 0xaaf6,\r
+0xab01, 0xab06,\r
+0xab09, 0xab0e,\r
+0xab11, 0xab16,\r
+0xab20, 0xab26,\r
+0xab28, 0xab2e,\r
+0xab30, 0xab65,\r
+0xab70, 0xabed,\r
+0xabf0, 0xabf9,\r
+0xac00, 0xd7a3,\r
+0xd7b0, 0xd7c6,\r
+0xd7cb, 0xd7fb,\r
+0xe000, 0xfa6d,\r
+0xfa70, 0xfad9,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xfb1d, 0xfb36,\r
+0xfb38, 0xfb3c,\r
+0xfb3e, 0xfb3e,\r
+0xfb40, 0xfb41,\r
+0xfb43, 0xfb44,\r
+0xfb46, 0xfbc1,\r
+0xfbd3, 0xfd3f,\r
+0xfd50, 0xfd8f,\r
+0xfd92, 0xfdc7,\r
+0xfdf0, 0xfdfd,\r
+0xfe00, 0xfe19,\r
+0xfe20, 0xfe52,\r
+0xfe54, 0xfe66,\r
+0xfe68, 0xfe6b,\r
+0xfe70, 0xfe74,\r
+0xfe76, 0xfefc,\r
+0xfeff, 0xfeff,\r
+0xff01, 0xffbe,\r
+0xffc2, 0xffc7,\r
+0xffca, 0xffcf,\r
+0xffd2, 0xffd7,\r
+0xffda, 0xffdc,\r
+0xffe0, 0xffe6,\r
+0xffe8, 0xffee,\r
+0xfff9, 0xfffd,\r
+0x10000, 0x1000b,\r
+0x1000d, 0x10026,\r
+0x10028, 0x1003a,\r
+0x1003c, 0x1003d,\r
+0x1003f, 0x1004d,\r
+0x10050, 0x1005d,\r
+0x10080, 0x100fa,\r
+0x10100, 0x10102,\r
+0x10107, 0x10133,\r
+0x10137, 0x1018e,\r
+0x10190, 0x1019b,\r
+0x101a0, 0x101a0,\r
+0x101d0, 0x101fd,\r
+0x10280, 0x1029c,\r
+0x102a0, 0x102d0,\r
+0x102e0, 0x102fb,\r
+0x10300, 0x10323,\r
+0x1032d, 0x1034a,\r
+0x10350, 0x1037a,\r
+0x10380, 0x1039d,\r
+0x1039f, 0x103c3,\r
+0x103c8, 0x103d5,\r
+0x10400, 0x1049d,\r
+0x104a0, 0x104a9,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+0x10500, 0x10527,\r
+0x10530, 0x10563,\r
+0x1056f, 0x1056f,\r
+0x10600, 0x10736,\r
+0x10740, 0x10755,\r
+0x10760, 0x10767,\r
+0x10800, 0x10805,\r
+0x10808, 0x10808,\r
+0x1080a, 0x10835,\r
+0x10837, 0x10838,\r
+0x1083c, 0x1083c,\r
+0x1083f, 0x10855,\r
+0x10857, 0x1089e,\r
+0x108a7, 0x108af,\r
+0x108e0, 0x108f2,\r
+0x108f4, 0x108f5,\r
+0x108fb, 0x1091b,\r
+0x1091f, 0x10939,\r
+0x1093f, 0x1093f,\r
+0x10980, 0x109b7,\r
+0x109bc, 0x109cf,\r
+0x109d2, 0x10a03,\r
+0x10a05, 0x10a06,\r
+0x10a0c, 0x10a13,\r
+0x10a15, 0x10a17,\r
+0x10a19, 0x10a35,\r
+0x10a38, 0x10a3a,\r
+0x10a3f, 0x10a48,\r
+0x10a50, 0x10a58,\r
+0x10a60, 0x10a9f,\r
+0x10ac0, 0x10ae6,\r
+0x10aeb, 0x10af6,\r
+0x10b00, 0x10b35,\r
+0x10b39, 0x10b55,\r
+0x10b58, 0x10b72,\r
+0x10b78, 0x10b91,\r
+0x10b99, 0x10b9c,\r
+0x10ba9, 0x10baf,\r
+0x10c00, 0x10c48,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x10cfa, 0x10d27,\r
+0x10d30, 0x10d39,\r
+0x10e60, 0x10e7e,\r
+0x10f00, 0x10f27,\r
+0x10f30, 0x10f59,\r
+0x11000, 0x1104d,\r
+0x11052, 0x1106f,\r
+0x1107f, 0x110c1,\r
+0x110cd, 0x110cd,\r
+0x110d0, 0x110e8,\r
+0x110f0, 0x110f9,\r
+0x11100, 0x11134,\r
+0x11136, 0x11146,\r
+0x11150, 0x11176,\r
+0x11180, 0x111cd,\r
+0x111d0, 0x111df,\r
+0x111e1, 0x111f4,\r
+0x11200, 0x11211,\r
+0x11213, 0x1123e,\r
+0x11280, 0x11286,\r
+0x11288, 0x11288,\r
+0x1128a, 0x1128d,\r
+0x1128f, 0x1129d,\r
+0x1129f, 0x112a9,\r
+0x112b0, 0x112ea,\r
+0x112f0, 0x112f9,\r
+0x11300, 0x11303,\r
+0x11305, 0x1130c,\r
+0x1130f, 0x11310,\r
+0x11313, 0x11328,\r
+0x1132a, 0x11330,\r
+0x11332, 0x11333,\r
+0x11335, 0x11339,\r
+0x1133b, 0x11344,\r
+0x11347, 0x11348,\r
+0x1134b, 0x1134d,\r
+0x11350, 0x11350,\r
+0x11357, 0x11357,\r
+0x1135d, 0x11363,\r
+0x11366, 0x1136c,\r
+0x11370, 0x11374,\r
+0x11400, 0x11459,\r
+0x1145b, 0x1145b,\r
+0x1145d, 0x1145e,\r
+0x11480, 0x114c7,\r
+0x114d0, 0x114d9,\r
+0x11580, 0x115b5,\r
+0x115b8, 0x115dd,\r
+0x11600, 0x11644,\r
+0x11650, 0x11659,\r
+0x11660, 0x1166c,\r
+0x11680, 0x116b7,\r
+0x116c0, 0x116c9,\r
+0x11700, 0x1171a,\r
+0x1171d, 0x1172b,\r
+0x11730, 0x1173f,\r
+0x11800, 0x1183b,\r
+0x118a0, 0x118f2,\r
+0x118ff, 0x118ff,\r
+0x11a00, 0x11a47,\r
+0x11a50, 0x11a83,\r
+0x11a86, 0x11aa2,\r
+0x11ac0, 0x11af8,\r
+0x11c00, 0x11c08,\r
+0x11c0a, 0x11c36,\r
+0x11c38, 0x11c45,\r
+0x11c50, 0x11c6c,\r
+0x11c70, 0x11c8f,\r
+0x11c92, 0x11ca7,\r
+0x11ca9, 0x11cb6,\r
+0x11d00, 0x11d06,\r
+0x11d08, 0x11d09,\r
+0x11d0b, 0x11d36,\r
+0x11d3a, 0x11d3a,\r
+0x11d3c, 0x11d3d,\r
+0x11d3f, 0x11d47,\r
+0x11d50, 0x11d59,\r
+0x11d60, 0x11d65,\r
+0x11d67, 0x11d68,\r
+0x11d6a, 0x11d8e,\r
+0x11d90, 0x11d91,\r
+0x11d93, 0x11d98,\r
+0x11da0, 0x11da9,\r
+0x11ee0, 0x11ef8,\r
+0x12000, 0x12399,\r
+0x12400, 0x1246e,\r
+0x12470, 0x12474,\r
+0x12480, 0x12543,\r
+0x13000, 0x1342e,\r
+0x14400, 0x14646,\r
+0x16800, 0x16a38,\r
+0x16a40, 0x16a5e,\r
+0x16a60, 0x16a69,\r
+0x16a6e, 0x16a6f,\r
+0x16ad0, 0x16aed,\r
+0x16af0, 0x16af5,\r
+0x16b00, 0x16b45,\r
+0x16b50, 0x16b59,\r
+0x16b5b, 0x16b61,\r
+0x16b63, 0x16b77,\r
+0x16b7d, 0x16b8f,\r
+0x16e40, 0x16e9a,\r
+0x16f00, 0x16f44,\r
+0x16f50, 0x16f7e,\r
+0x16f8f, 0x16f9f,\r
+0x16fe0, 0x16fe1,\r
+0x17000, 0x187f1,\r
+0x18800, 0x18af2,\r
+0x1b000, 0x1b11e,\r
+0x1b170, 0x1b2fb,\r
+0x1bc00, 0x1bc6a,\r
+0x1bc70, 0x1bc7c,\r
+0x1bc80, 0x1bc88,\r
+0x1bc90, 0x1bc99,\r
+0x1bc9c, 0x1bca3,\r
+0x1d000, 0x1d0f5,\r
+0x1d100, 0x1d126,\r
+0x1d129, 0x1d1e8,\r
+0x1d200, 0x1d245,\r
+0x1d2e0, 0x1d2f3,\r
+0x1d300, 0x1d356,\r
+0x1d360, 0x1d378,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d7cb,\r
+0x1d7ce, 0x1da8b,\r
+0x1da9b, 0x1da9f,\r
+0x1daa1, 0x1daaf,\r
+0x1e000, 0x1e006,\r
+0x1e008, 0x1e018,\r
+0x1e01b, 0x1e021,\r
+0x1e023, 0x1e024,\r
+0x1e026, 0x1e02a,\r
+0x1e800, 0x1e8c4,\r
+0x1e8c7, 0x1e8d6,\r
+0x1e900, 0x1e94a,\r
+0x1e950, 0x1e959,\r
+0x1e95e, 0x1e95f,\r
+0x1ec71, 0x1ecb4,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+0x1eef0, 0x1eef1,\r
+0x1f000, 0x1f02b,\r
+0x1f030, 0x1f093,\r
+0x1f0a0, 0x1f0ae,\r
+0x1f0b1, 0x1f0bf,\r
+0x1f0c1, 0x1f0cf,\r
+0x1f0d1, 0x1f0f5,\r
+0x1f100, 0x1f10c,\r
+0x1f110, 0x1f16b,\r
+0x1f170, 0x1f1ac,\r
+0x1f1e6, 0x1f202,\r
+0x1f210, 0x1f23b,\r
+0x1f240, 0x1f248,\r
+0x1f250, 0x1f251,\r
+0x1f260, 0x1f265,\r
+0x1f300, 0x1f6d4,\r
+0x1f6e0, 0x1f6ec,\r
+0x1f6f0, 0x1f6f9,\r
+0x1f700, 0x1f773,\r
+0x1f780, 0x1f7d8,\r
+0x1f800, 0x1f80b,\r
+0x1f810, 0x1f847,\r
+0x1f850, 0x1f859,\r
+0x1f860, 0x1f887,\r
+0x1f890, 0x1f8ad,\r
+0x1f900, 0x1f90b,\r
+0x1f910, 0x1f93e,\r
+0x1f940, 0x1f970,\r
+0x1f973, 0x1f976,\r
+0x1f97a, 0x1f97a,\r
+0x1f97c, 0x1f9a2,\r
+0x1f9b0, 0x1f9b9,\r
+0x1f9c0, 0x1f9c2,\r
+0x1f9d0, 0x1f9ff,\r
+0x1fa60, 0x1fa6d,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+0x2f800, 0x2fa1d,\r
+0xe0001, 0xe0001,\r
+0xe0020, 0xe007f,\r
+0xe0100, 0xe01ef,\r
+0xf0000, 0xffffd,\r
+0x100000, 0x10fffd,\r
+}; /* END of CR_Graph */\r
+\r
+/* PROPERTY: 'Lower': POSIX [[:Lower:]] */\r
+static const OnigCodePoint\r
+CR_Lower[] = { 645,\r
+0x0061, 0x007a,\r
+0x00aa, 0x00aa,\r
+0x00b5, 0x00b5,\r
+0x00ba, 0x00ba,\r
+0x00df, 0x00f6,\r
+0x00f8, 0x00ff,\r
+0x0101, 0x0101,\r
+0x0103, 0x0103,\r
+0x0105, 0x0105,\r
+0x0107, 0x0107,\r
+0x0109, 0x0109,\r
+0x010b, 0x010b,\r
+0x010d, 0x010d,\r
+0x010f, 0x010f,\r
+0x0111, 0x0111,\r
+0x0113, 0x0113,\r
+0x0115, 0x0115,\r
+0x0117, 0x0117,\r
+0x0119, 0x0119,\r
+0x011b, 0x011b,\r
+0x011d, 0x011d,\r
+0x011f, 0x011f,\r
+0x0121, 0x0121,\r
+0x0123, 0x0123,\r
+0x0125, 0x0125,\r
+0x0127, 0x0127,\r
+0x0129, 0x0129,\r
+0x012b, 0x012b,\r
+0x012d, 0x012d,\r
+0x012f, 0x012f,\r
+0x0131, 0x0131,\r
+0x0133, 0x0133,\r
+0x0135, 0x0135,\r
+0x0137, 0x0138,\r
+0x013a, 0x013a,\r
+0x013c, 0x013c,\r
+0x013e, 0x013e,\r
+0x0140, 0x0140,\r
+0x0142, 0x0142,\r
+0x0144, 0x0144,\r
+0x0146, 0x0146,\r
+0x0148, 0x0149,\r
+0x014b, 0x014b,\r
+0x014d, 0x014d,\r
+0x014f, 0x014f,\r
+0x0151, 0x0151,\r
+0x0153, 0x0153,\r
+0x0155, 0x0155,\r
+0x0157, 0x0157,\r
+0x0159, 0x0159,\r
+0x015b, 0x015b,\r
+0x015d, 0x015d,\r
+0x015f, 0x015f,\r
+0x0161, 0x0161,\r
+0x0163, 0x0163,\r
+0x0165, 0x0165,\r
+0x0167, 0x0167,\r
+0x0169, 0x0169,\r
+0x016b, 0x016b,\r
+0x016d, 0x016d,\r
+0x016f, 0x016f,\r
+0x0171, 0x0171,\r
+0x0173, 0x0173,\r
+0x0175, 0x0175,\r
+0x0177, 0x0177,\r
+0x017a, 0x017a,\r
+0x017c, 0x017c,\r
+0x017e, 0x0180,\r
+0x0183, 0x0183,\r
+0x0185, 0x0185,\r
+0x0188, 0x0188,\r
+0x018c, 0x018d,\r
+0x0192, 0x0192,\r
+0x0195, 0x0195,\r
+0x0199, 0x019b,\r
+0x019e, 0x019e,\r
+0x01a1, 0x01a1,\r
+0x01a3, 0x01a3,\r
+0x01a5, 0x01a5,\r
+0x01a8, 0x01a8,\r
+0x01aa, 0x01ab,\r
+0x01ad, 0x01ad,\r
+0x01b0, 0x01b0,\r
+0x01b4, 0x01b4,\r
+0x01b6, 0x01b6,\r
+0x01b9, 0x01ba,\r
+0x01bd, 0x01bf,\r
+0x01c6, 0x01c6,\r
+0x01c9, 0x01c9,\r
+0x01cc, 0x01cc,\r
+0x01ce, 0x01ce,\r
+0x01d0, 0x01d0,\r
+0x01d2, 0x01d2,\r
+0x01d4, 0x01d4,\r
+0x01d6, 0x01d6,\r
+0x01d8, 0x01d8,\r
+0x01da, 0x01da,\r
+0x01dc, 0x01dd,\r
+0x01df, 0x01df,\r
+0x01e1, 0x01e1,\r
+0x01e3, 0x01e3,\r
+0x01e5, 0x01e5,\r
+0x01e7, 0x01e7,\r
+0x01e9, 0x01e9,\r
+0x01eb, 0x01eb,\r
+0x01ed, 0x01ed,\r
+0x01ef, 0x01f0,\r
+0x01f3, 0x01f3,\r
+0x01f5, 0x01f5,\r
+0x01f9, 0x01f9,\r
+0x01fb, 0x01fb,\r
+0x01fd, 0x01fd,\r
+0x01ff, 0x01ff,\r
+0x0201, 0x0201,\r
+0x0203, 0x0203,\r
+0x0205, 0x0205,\r
+0x0207, 0x0207,\r
+0x0209, 0x0209,\r
+0x020b, 0x020b,\r
+0x020d, 0x020d,\r
+0x020f, 0x020f,\r
+0x0211, 0x0211,\r
+0x0213, 0x0213,\r
+0x0215, 0x0215,\r
+0x0217, 0x0217,\r
+0x0219, 0x0219,\r
+0x021b, 0x021b,\r
+0x021d, 0x021d,\r
+0x021f, 0x021f,\r
+0x0221, 0x0221,\r
+0x0223, 0x0223,\r
+0x0225, 0x0225,\r
+0x0227, 0x0227,\r
+0x0229, 0x0229,\r
+0x022b, 0x022b,\r
+0x022d, 0x022d,\r
+0x022f, 0x022f,\r
+0x0231, 0x0231,\r
+0x0233, 0x0239,\r
+0x023c, 0x023c,\r
+0x023f, 0x0240,\r
+0x0242, 0x0242,\r
+0x0247, 0x0247,\r
+0x0249, 0x0249,\r
+0x024b, 0x024b,\r
+0x024d, 0x024d,\r
+0x024f, 0x0293,\r
+0x0295, 0x02b8,\r
+0x02c0, 0x02c1,\r
+0x02e0, 0x02e4,\r
+0x0345, 0x0345,\r
+0x0371, 0x0371,\r
+0x0373, 0x0373,\r
+0x0377, 0x0377,\r
+0x037a, 0x037d,\r
+0x0390, 0x0390,\r
+0x03ac, 0x03ce,\r
+0x03d0, 0x03d1,\r
+0x03d5, 0x03d7,\r
+0x03d9, 0x03d9,\r
+0x03db, 0x03db,\r
+0x03dd, 0x03dd,\r
+0x03df, 0x03df,\r
+0x03e1, 0x03e1,\r
+0x03e3, 0x03e3,\r
+0x03e5, 0x03e5,\r
+0x03e7, 0x03e7,\r
+0x03e9, 0x03e9,\r
+0x03eb, 0x03eb,\r
+0x03ed, 0x03ed,\r
+0x03ef, 0x03f3,\r
+0x03f5, 0x03f5,\r
+0x03f8, 0x03f8,\r
+0x03fb, 0x03fc,\r
+0x0430, 0x045f,\r
+0x0461, 0x0461,\r
+0x0463, 0x0463,\r
+0x0465, 0x0465,\r
+0x0467, 0x0467,\r
+0x0469, 0x0469,\r
+0x046b, 0x046b,\r
+0x046d, 0x046d,\r
+0x046f, 0x046f,\r
+0x0471, 0x0471,\r
+0x0473, 0x0473,\r
+0x0475, 0x0475,\r
+0x0477, 0x0477,\r
+0x0479, 0x0479,\r
+0x047b, 0x047b,\r
+0x047d, 0x047d,\r
+0x047f, 0x047f,\r
+0x0481, 0x0481,\r
+0x048b, 0x048b,\r
+0x048d, 0x048d,\r
+0x048f, 0x048f,\r
+0x0491, 0x0491,\r
+0x0493, 0x0493,\r
+0x0495, 0x0495,\r
+0x0497, 0x0497,\r
+0x0499, 0x0499,\r
+0x049b, 0x049b,\r
+0x049d, 0x049d,\r
+0x049f, 0x049f,\r
+0x04a1, 0x04a1,\r
+0x04a3, 0x04a3,\r
+0x04a5, 0x04a5,\r
+0x04a7, 0x04a7,\r
+0x04a9, 0x04a9,\r
+0x04ab, 0x04ab,\r
+0x04ad, 0x04ad,\r
+0x04af, 0x04af,\r
+0x04b1, 0x04b1,\r
+0x04b3, 0x04b3,\r
+0x04b5, 0x04b5,\r
+0x04b7, 0x04b7,\r
+0x04b9, 0x04b9,\r
+0x04bb, 0x04bb,\r
+0x04bd, 0x04bd,\r
+0x04bf, 0x04bf,\r
+0x04c2, 0x04c2,\r
+0x04c4, 0x04c4,\r
+0x04c6, 0x04c6,\r
+0x04c8, 0x04c8,\r
+0x04ca, 0x04ca,\r
+0x04cc, 0x04cc,\r
+0x04ce, 0x04cf,\r
+0x04d1, 0x04d1,\r
+0x04d3, 0x04d3,\r
+0x04d5, 0x04d5,\r
+0x04d7, 0x04d7,\r
+0x04d9, 0x04d9,\r
+0x04db, 0x04db,\r
+0x04dd, 0x04dd,\r
+0x04df, 0x04df,\r
+0x04e1, 0x04e1,\r
+0x04e3, 0x04e3,\r
+0x04e5, 0x04e5,\r
+0x04e7, 0x04e7,\r
+0x04e9, 0x04e9,\r
+0x04eb, 0x04eb,\r
+0x04ed, 0x04ed,\r
+0x04ef, 0x04ef,\r
+0x04f1, 0x04f1,\r
+0x04f3, 0x04f3,\r
+0x04f5, 0x04f5,\r
+0x04f7, 0x04f7,\r
+0x04f9, 0x04f9,\r
+0x04fb, 0x04fb,\r
+0x04fd, 0x04fd,\r
+0x04ff, 0x04ff,\r
+0x0501, 0x0501,\r
+0x0503, 0x0503,\r
+0x0505, 0x0505,\r
+0x0507, 0x0507,\r
+0x0509, 0x0509,\r
+0x050b, 0x050b,\r
+0x050d, 0x050d,\r
+0x050f, 0x050f,\r
+0x0511, 0x0511,\r
+0x0513, 0x0513,\r
+0x0515, 0x0515,\r
+0x0517, 0x0517,\r
+0x0519, 0x0519,\r
+0x051b, 0x051b,\r
+0x051d, 0x051d,\r
+0x051f, 0x051f,\r
+0x0521, 0x0521,\r
+0x0523, 0x0523,\r
+0x0525, 0x0525,\r
+0x0527, 0x0527,\r
+0x0529, 0x0529,\r
+0x052b, 0x052b,\r
+0x052d, 0x052d,\r
+0x052f, 0x052f,\r
+0x0560, 0x0588,\r
+0x10d0, 0x10fa,\r
+0x10fd, 0x10ff,\r
+0x13f8, 0x13fd,\r
+0x1c80, 0x1c88,\r
+0x1d00, 0x1dbf,\r
+0x1e01, 0x1e01,\r
+0x1e03, 0x1e03,\r
+0x1e05, 0x1e05,\r
+0x1e07, 0x1e07,\r
+0x1e09, 0x1e09,\r
+0x1e0b, 0x1e0b,\r
+0x1e0d, 0x1e0d,\r
+0x1e0f, 0x1e0f,\r
+0x1e11, 0x1e11,\r
+0x1e13, 0x1e13,\r
+0x1e15, 0x1e15,\r
+0x1e17, 0x1e17,\r
+0x1e19, 0x1e19,\r
+0x1e1b, 0x1e1b,\r
+0x1e1d, 0x1e1d,\r
+0x1e1f, 0x1e1f,\r
+0x1e21, 0x1e21,\r
+0x1e23, 0x1e23,\r
+0x1e25, 0x1e25,\r
+0x1e27, 0x1e27,\r
+0x1e29, 0x1e29,\r
+0x1e2b, 0x1e2b,\r
+0x1e2d, 0x1e2d,\r
+0x1e2f, 0x1e2f,\r
+0x1e31, 0x1e31,\r
+0x1e33, 0x1e33,\r
+0x1e35, 0x1e35,\r
+0x1e37, 0x1e37,\r
+0x1e39, 0x1e39,\r
+0x1e3b, 0x1e3b,\r
+0x1e3d, 0x1e3d,\r
+0x1e3f, 0x1e3f,\r
+0x1e41, 0x1e41,\r
+0x1e43, 0x1e43,\r
+0x1e45, 0x1e45,\r
+0x1e47, 0x1e47,\r
+0x1e49, 0x1e49,\r
+0x1e4b, 0x1e4b,\r
+0x1e4d, 0x1e4d,\r
+0x1e4f, 0x1e4f,\r
+0x1e51, 0x1e51,\r
+0x1e53, 0x1e53,\r
+0x1e55, 0x1e55,\r
+0x1e57, 0x1e57,\r
+0x1e59, 0x1e59,\r
+0x1e5b, 0x1e5b,\r
+0x1e5d, 0x1e5d,\r
+0x1e5f, 0x1e5f,\r
+0x1e61, 0x1e61,\r
+0x1e63, 0x1e63,\r
+0x1e65, 0x1e65,\r
+0x1e67, 0x1e67,\r
+0x1e69, 0x1e69,\r
+0x1e6b, 0x1e6b,\r
+0x1e6d, 0x1e6d,\r
+0x1e6f, 0x1e6f,\r
+0x1e71, 0x1e71,\r
+0x1e73, 0x1e73,\r
+0x1e75, 0x1e75,\r
+0x1e77, 0x1e77,\r
+0x1e79, 0x1e79,\r
+0x1e7b, 0x1e7b,\r
+0x1e7d, 0x1e7d,\r
+0x1e7f, 0x1e7f,\r
+0x1e81, 0x1e81,\r
+0x1e83, 0x1e83,\r
+0x1e85, 0x1e85,\r
+0x1e87, 0x1e87,\r
+0x1e89, 0x1e89,\r
+0x1e8b, 0x1e8b,\r
+0x1e8d, 0x1e8d,\r
+0x1e8f, 0x1e8f,\r
+0x1e91, 0x1e91,\r
+0x1e93, 0x1e93,\r
+0x1e95, 0x1e9d,\r
+0x1e9f, 0x1e9f,\r
+0x1ea1, 0x1ea1,\r
+0x1ea3, 0x1ea3,\r
+0x1ea5, 0x1ea5,\r
+0x1ea7, 0x1ea7,\r
+0x1ea9, 0x1ea9,\r
+0x1eab, 0x1eab,\r
+0x1ead, 0x1ead,\r
+0x1eaf, 0x1eaf,\r
+0x1eb1, 0x1eb1,\r
+0x1eb3, 0x1eb3,\r
+0x1eb5, 0x1eb5,\r
+0x1eb7, 0x1eb7,\r
+0x1eb9, 0x1eb9,\r
+0x1ebb, 0x1ebb,\r
+0x1ebd, 0x1ebd,\r
+0x1ebf, 0x1ebf,\r
+0x1ec1, 0x1ec1,\r
+0x1ec3, 0x1ec3,\r
+0x1ec5, 0x1ec5,\r
+0x1ec7, 0x1ec7,\r
+0x1ec9, 0x1ec9,\r
+0x1ecb, 0x1ecb,\r
+0x1ecd, 0x1ecd,\r
+0x1ecf, 0x1ecf,\r
+0x1ed1, 0x1ed1,\r
+0x1ed3, 0x1ed3,\r
+0x1ed5, 0x1ed5,\r
+0x1ed7, 0x1ed7,\r
+0x1ed9, 0x1ed9,\r
+0x1edb, 0x1edb,\r
+0x1edd, 0x1edd,\r
+0x1edf, 0x1edf,\r
+0x1ee1, 0x1ee1,\r
+0x1ee3, 0x1ee3,\r
+0x1ee5, 0x1ee5,\r
+0x1ee7, 0x1ee7,\r
+0x1ee9, 0x1ee9,\r
+0x1eeb, 0x1eeb,\r
+0x1eed, 0x1eed,\r
+0x1eef, 0x1eef,\r
+0x1ef1, 0x1ef1,\r
+0x1ef3, 0x1ef3,\r
+0x1ef5, 0x1ef5,\r
+0x1ef7, 0x1ef7,\r
+0x1ef9, 0x1ef9,\r
+0x1efb, 0x1efb,\r
+0x1efd, 0x1efd,\r
+0x1eff, 0x1f07,\r
+0x1f10, 0x1f15,\r
+0x1f20, 0x1f27,\r
+0x1f30, 0x1f37,\r
+0x1f40, 0x1f45,\r
+0x1f50, 0x1f57,\r
+0x1f60, 0x1f67,\r
+0x1f70, 0x1f7d,\r
+0x1f80, 0x1f87,\r
+0x1f90, 0x1f97,\r
+0x1fa0, 0x1fa7,\r
+0x1fb0, 0x1fb4,\r
+0x1fb6, 0x1fb7,\r
+0x1fbe, 0x1fbe,\r
+0x1fc2, 0x1fc4,\r
+0x1fc6, 0x1fc7,\r
+0x1fd0, 0x1fd3,\r
+0x1fd6, 0x1fd7,\r
+0x1fe0, 0x1fe7,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ff7,\r
+0x2071, 0x2071,\r
+0x207f, 0x207f,\r
+0x2090, 0x209c,\r
+0x210a, 0x210a,\r
+0x210e, 0x210f,\r
+0x2113, 0x2113,\r
+0x212f, 0x212f,\r
+0x2134, 0x2134,\r
+0x2139, 0x2139,\r
+0x213c, 0x213d,\r
+0x2146, 0x2149,\r
+0x214e, 0x214e,\r
+0x2170, 0x217f,\r
+0x2184, 0x2184,\r
+0x24d0, 0x24e9,\r
+0x2c30, 0x2c5e,\r
+0x2c61, 0x2c61,\r
+0x2c65, 0x2c66,\r
+0x2c68, 0x2c68,\r
+0x2c6a, 0x2c6a,\r
+0x2c6c, 0x2c6c,\r
+0x2c71, 0x2c71,\r
+0x2c73, 0x2c74,\r
+0x2c76, 0x2c7d,\r
+0x2c81, 0x2c81,\r
+0x2c83, 0x2c83,\r
+0x2c85, 0x2c85,\r
+0x2c87, 0x2c87,\r
+0x2c89, 0x2c89,\r
+0x2c8b, 0x2c8b,\r
+0x2c8d, 0x2c8d,\r
+0x2c8f, 0x2c8f,\r
+0x2c91, 0x2c91,\r
+0x2c93, 0x2c93,\r
+0x2c95, 0x2c95,\r
+0x2c97, 0x2c97,\r
+0x2c99, 0x2c99,\r
+0x2c9b, 0x2c9b,\r
+0x2c9d, 0x2c9d,\r
+0x2c9f, 0x2c9f,\r
+0x2ca1, 0x2ca1,\r
+0x2ca3, 0x2ca3,\r
+0x2ca5, 0x2ca5,\r
+0x2ca7, 0x2ca7,\r
+0x2ca9, 0x2ca9,\r
+0x2cab, 0x2cab,\r
+0x2cad, 0x2cad,\r
+0x2caf, 0x2caf,\r
+0x2cb1, 0x2cb1,\r
+0x2cb3, 0x2cb3,\r
+0x2cb5, 0x2cb5,\r
+0x2cb7, 0x2cb7,\r
+0x2cb9, 0x2cb9,\r
+0x2cbb, 0x2cbb,\r
+0x2cbd, 0x2cbd,\r
+0x2cbf, 0x2cbf,\r
+0x2cc1, 0x2cc1,\r
+0x2cc3, 0x2cc3,\r
+0x2cc5, 0x2cc5,\r
+0x2cc7, 0x2cc7,\r
+0x2cc9, 0x2cc9,\r
+0x2ccb, 0x2ccb,\r
+0x2ccd, 0x2ccd,\r
+0x2ccf, 0x2ccf,\r
+0x2cd1, 0x2cd1,\r
+0x2cd3, 0x2cd3,\r
+0x2cd5, 0x2cd5,\r
+0x2cd7, 0x2cd7,\r
+0x2cd9, 0x2cd9,\r
+0x2cdb, 0x2cdb,\r
+0x2cdd, 0x2cdd,\r
+0x2cdf, 0x2cdf,\r
+0x2ce1, 0x2ce1,\r
+0x2ce3, 0x2ce4,\r
+0x2cec, 0x2cec,\r
+0x2cee, 0x2cee,\r
+0x2cf3, 0x2cf3,\r
+0x2d00, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0xa641, 0xa641,\r
+0xa643, 0xa643,\r
+0xa645, 0xa645,\r
+0xa647, 0xa647,\r
+0xa649, 0xa649,\r
+0xa64b, 0xa64b,\r
+0xa64d, 0xa64d,\r
+0xa64f, 0xa64f,\r
+0xa651, 0xa651,\r
+0xa653, 0xa653,\r
+0xa655, 0xa655,\r
+0xa657, 0xa657,\r
+0xa659, 0xa659,\r
+0xa65b, 0xa65b,\r
+0xa65d, 0xa65d,\r
+0xa65f, 0xa65f,\r
+0xa661, 0xa661,\r
+0xa663, 0xa663,\r
+0xa665, 0xa665,\r
+0xa667, 0xa667,\r
+0xa669, 0xa669,\r
+0xa66b, 0xa66b,\r
+0xa66d, 0xa66d,\r
+0xa681, 0xa681,\r
+0xa683, 0xa683,\r
+0xa685, 0xa685,\r
+0xa687, 0xa687,\r
+0xa689, 0xa689,\r
+0xa68b, 0xa68b,\r
+0xa68d, 0xa68d,\r
+0xa68f, 0xa68f,\r
+0xa691, 0xa691,\r
+0xa693, 0xa693,\r
+0xa695, 0xa695,\r
+0xa697, 0xa697,\r
+0xa699, 0xa699,\r
+0xa69b, 0xa69d,\r
+0xa723, 0xa723,\r
+0xa725, 0xa725,\r
+0xa727, 0xa727,\r
+0xa729, 0xa729,\r
+0xa72b, 0xa72b,\r
+0xa72d, 0xa72d,\r
+0xa72f, 0xa731,\r
+0xa733, 0xa733,\r
+0xa735, 0xa735,\r
+0xa737, 0xa737,\r
+0xa739, 0xa739,\r
+0xa73b, 0xa73b,\r
+0xa73d, 0xa73d,\r
+0xa73f, 0xa73f,\r
+0xa741, 0xa741,\r
+0xa743, 0xa743,\r
+0xa745, 0xa745,\r
+0xa747, 0xa747,\r
+0xa749, 0xa749,\r
+0xa74b, 0xa74b,\r
+0xa74d, 0xa74d,\r
+0xa74f, 0xa74f,\r
+0xa751, 0xa751,\r
+0xa753, 0xa753,\r
+0xa755, 0xa755,\r
+0xa757, 0xa757,\r
+0xa759, 0xa759,\r
+0xa75b, 0xa75b,\r
+0xa75d, 0xa75d,\r
+0xa75f, 0xa75f,\r
+0xa761, 0xa761,\r
+0xa763, 0xa763,\r
+0xa765, 0xa765,\r
+0xa767, 0xa767,\r
+0xa769, 0xa769,\r
+0xa76b, 0xa76b,\r
+0xa76d, 0xa76d,\r
+0xa76f, 0xa778,\r
+0xa77a, 0xa77a,\r
+0xa77c, 0xa77c,\r
+0xa77f, 0xa77f,\r
+0xa781, 0xa781,\r
+0xa783, 0xa783,\r
+0xa785, 0xa785,\r
+0xa787, 0xa787,\r
+0xa78c, 0xa78c,\r
+0xa78e, 0xa78e,\r
+0xa791, 0xa791,\r
+0xa793, 0xa795,\r
+0xa797, 0xa797,\r
+0xa799, 0xa799,\r
+0xa79b, 0xa79b,\r
+0xa79d, 0xa79d,\r
+0xa79f, 0xa79f,\r
+0xa7a1, 0xa7a1,\r
+0xa7a3, 0xa7a3,\r
+0xa7a5, 0xa7a5,\r
+0xa7a7, 0xa7a7,\r
+0xa7a9, 0xa7a9,\r
+0xa7af, 0xa7af,\r
+0xa7b5, 0xa7b5,\r
+0xa7b7, 0xa7b7,\r
+0xa7b9, 0xa7b9,\r
+0xa7f8, 0xa7fa,\r
+0xab30, 0xab5a,\r
+0xab5c, 0xab65,\r
+0xab70, 0xabbf,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xff41, 0xff5a,\r
+0x10428, 0x1044f,\r
+0x104d8, 0x104fb,\r
+0x10cc0, 0x10cf2,\r
+0x118c0, 0x118df,\r
+0x16e60, 0x16e7f,\r
+0x1d41a, 0x1d433,\r
+0x1d44e, 0x1d454,\r
+0x1d456, 0x1d467,\r
+0x1d482, 0x1d49b,\r
+0x1d4b6, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d4cf,\r
+0x1d4ea, 0x1d503,\r
+0x1d51e, 0x1d537,\r
+0x1d552, 0x1d56b,\r
+0x1d586, 0x1d59f,\r
+0x1d5ba, 0x1d5d3,\r
+0x1d5ee, 0x1d607,\r
+0x1d622, 0x1d63b,\r
+0x1d656, 0x1d66f,\r
+0x1d68a, 0x1d6a5,\r
+0x1d6c2, 0x1d6da,\r
+0x1d6dc, 0x1d6e1,\r
+0x1d6fc, 0x1d714,\r
+0x1d716, 0x1d71b,\r
+0x1d736, 0x1d74e,\r
+0x1d750, 0x1d755,\r
+0x1d770, 0x1d788,\r
+0x1d78a, 0x1d78f,\r
+0x1d7aa, 0x1d7c2,\r
+0x1d7c4, 0x1d7c9,\r
+0x1d7cb, 0x1d7cb,\r
+0x1e922, 0x1e943,\r
+}; /* END of CR_Lower */\r
+\r
+/* PROPERTY: 'Print': POSIX [[:Print:]] */\r
+static const OnigCodePoint\r
+CR_Print[] = { 660,\r
+0x0020, 0x007e,\r
+0x00a0, 0x0377,\r
+0x037a, 0x037f,\r
+0x0384, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x052f,\r
+0x0531, 0x0556,\r
+0x0559, 0x058a,\r
+0x058d, 0x058f,\r
+0x0591, 0x05c7,\r
+0x05d0, 0x05ea,\r
+0x05ef, 0x05f4,\r
+0x0600, 0x061c,\r
+0x061e, 0x070d,\r
+0x070f, 0x074a,\r
+0x074d, 0x07b1,\r
+0x07c0, 0x07fa,\r
+0x07fd, 0x082d,\r
+0x0830, 0x083e,\r
+0x0840, 0x085b,\r
+0x085e, 0x085e,\r
+0x0860, 0x086a,\r
+0x08a0, 0x08b4,\r
+0x08b6, 0x08bd,\r
+0x08d3, 0x0983,\r
+0x0985, 0x098c,\r
+0x098f, 0x0990,\r
+0x0993, 0x09a8,\r
+0x09aa, 0x09b0,\r
+0x09b2, 0x09b2,\r
+0x09b6, 0x09b9,\r
+0x09bc, 0x09c4,\r
+0x09c7, 0x09c8,\r
+0x09cb, 0x09ce,\r
+0x09d7, 0x09d7,\r
+0x09dc, 0x09dd,\r
+0x09df, 0x09e3,\r
+0x09e6, 0x09fe,\r
+0x0a01, 0x0a03,\r
+0x0a05, 0x0a0a,\r
+0x0a0f, 0x0a10,\r
+0x0a13, 0x0a28,\r
+0x0a2a, 0x0a30,\r
+0x0a32, 0x0a33,\r
+0x0a35, 0x0a36,\r
+0x0a38, 0x0a39,\r
+0x0a3c, 0x0a3c,\r
+0x0a3e, 0x0a42,\r
+0x0a47, 0x0a48,\r
+0x0a4b, 0x0a4d,\r
+0x0a51, 0x0a51,\r
+0x0a59, 0x0a5c,\r
+0x0a5e, 0x0a5e,\r
+0x0a66, 0x0a76,\r
+0x0a81, 0x0a83,\r
+0x0a85, 0x0a8d,\r
+0x0a8f, 0x0a91,\r
+0x0a93, 0x0aa8,\r
+0x0aaa, 0x0ab0,\r
+0x0ab2, 0x0ab3,\r
+0x0ab5, 0x0ab9,\r
+0x0abc, 0x0ac5,\r
+0x0ac7, 0x0ac9,\r
+0x0acb, 0x0acd,\r
+0x0ad0, 0x0ad0,\r
+0x0ae0, 0x0ae3,\r
+0x0ae6, 0x0af1,\r
+0x0af9, 0x0aff,\r
+0x0b01, 0x0b03,\r
+0x0b05, 0x0b0c,\r
+0x0b0f, 0x0b10,\r
+0x0b13, 0x0b28,\r
+0x0b2a, 0x0b30,\r
+0x0b32, 0x0b33,\r
+0x0b35, 0x0b39,\r
+0x0b3c, 0x0b44,\r
+0x0b47, 0x0b48,\r
+0x0b4b, 0x0b4d,\r
+0x0b56, 0x0b57,\r
+0x0b5c, 0x0b5d,\r
+0x0b5f, 0x0b63,\r
+0x0b66, 0x0b77,\r
+0x0b82, 0x0b83,\r
+0x0b85, 0x0b8a,\r
+0x0b8e, 0x0b90,\r
+0x0b92, 0x0b95,\r
+0x0b99, 0x0b9a,\r
+0x0b9c, 0x0b9c,\r
+0x0b9e, 0x0b9f,\r
+0x0ba3, 0x0ba4,\r
+0x0ba8, 0x0baa,\r
+0x0bae, 0x0bb9,\r
+0x0bbe, 0x0bc2,\r
+0x0bc6, 0x0bc8,\r
+0x0bca, 0x0bcd,\r
+0x0bd0, 0x0bd0,\r
+0x0bd7, 0x0bd7,\r
+0x0be6, 0x0bfa,\r
+0x0c00, 0x0c0c,\r
+0x0c0e, 0x0c10,\r
+0x0c12, 0x0c28,\r
+0x0c2a, 0x0c39,\r
+0x0c3d, 0x0c44,\r
+0x0c46, 0x0c48,\r
+0x0c4a, 0x0c4d,\r
+0x0c55, 0x0c56,\r
+0x0c58, 0x0c5a,\r
+0x0c60, 0x0c63,\r
+0x0c66, 0x0c6f,\r
+0x0c78, 0x0c8c,\r
+0x0c8e, 0x0c90,\r
+0x0c92, 0x0ca8,\r
+0x0caa, 0x0cb3,\r
+0x0cb5, 0x0cb9,\r
+0x0cbc, 0x0cc4,\r
+0x0cc6, 0x0cc8,\r
+0x0cca, 0x0ccd,\r
+0x0cd5, 0x0cd6,\r
+0x0cde, 0x0cde,\r
+0x0ce0, 0x0ce3,\r
+0x0ce6, 0x0cef,\r
+0x0cf1, 0x0cf2,\r
+0x0d00, 0x0d03,\r
+0x0d05, 0x0d0c,\r
+0x0d0e, 0x0d10,\r
+0x0d12, 0x0d44,\r
+0x0d46, 0x0d48,\r
+0x0d4a, 0x0d4f,\r
+0x0d54, 0x0d63,\r
+0x0d66, 0x0d7f,\r
+0x0d82, 0x0d83,\r
+0x0d85, 0x0d96,\r
+0x0d9a, 0x0db1,\r
+0x0db3, 0x0dbb,\r
+0x0dbd, 0x0dbd,\r
+0x0dc0, 0x0dc6,\r
+0x0dca, 0x0dca,\r
+0x0dcf, 0x0dd4,\r
+0x0dd6, 0x0dd6,\r
+0x0dd8, 0x0ddf,\r
+0x0de6, 0x0def,\r
+0x0df2, 0x0df4,\r
+0x0e01, 0x0e3a,\r
+0x0e3f, 0x0e5b,\r
+0x0e81, 0x0e82,\r
+0x0e84, 0x0e84,\r
+0x0e87, 0x0e88,\r
+0x0e8a, 0x0e8a,\r
+0x0e8d, 0x0e8d,\r
+0x0e94, 0x0e97,\r
+0x0e99, 0x0e9f,\r
+0x0ea1, 0x0ea3,\r
+0x0ea5, 0x0ea5,\r
+0x0ea7, 0x0ea7,\r
+0x0eaa, 0x0eab,\r
+0x0ead, 0x0eb9,\r
+0x0ebb, 0x0ebd,\r
+0x0ec0, 0x0ec4,\r
+0x0ec6, 0x0ec6,\r
+0x0ec8, 0x0ecd,\r
+0x0ed0, 0x0ed9,\r
+0x0edc, 0x0edf,\r
+0x0f00, 0x0f47,\r
+0x0f49, 0x0f6c,\r
+0x0f71, 0x0f97,\r
+0x0f99, 0x0fbc,\r
+0x0fbe, 0x0fcc,\r
+0x0fce, 0x0fda,\r
+0x1000, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x1248,\r
+0x124a, 0x124d,\r
+0x1250, 0x1256,\r
+0x1258, 0x1258,\r
+0x125a, 0x125d,\r
+0x1260, 0x1288,\r
+0x128a, 0x128d,\r
+0x1290, 0x12b0,\r
+0x12b2, 0x12b5,\r
+0x12b8, 0x12be,\r
+0x12c0, 0x12c0,\r
+0x12c2, 0x12c5,\r
+0x12c8, 0x12d6,\r
+0x12d8, 0x1310,\r
+0x1312, 0x1315,\r
+0x1318, 0x135a,\r
+0x135d, 0x137c,\r
+0x1380, 0x1399,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0x1400, 0x169c,\r
+0x16a0, 0x16f8,\r
+0x1700, 0x170c,\r
+0x170e, 0x1714,\r
+0x1720, 0x1736,\r
+0x1740, 0x1753,\r
+0x1760, 0x176c,\r
+0x176e, 0x1770,\r
+0x1772, 0x1773,\r
+0x1780, 0x17dd,\r
+0x17e0, 0x17e9,\r
+0x17f0, 0x17f9,\r
+0x1800, 0x180e,\r
+0x1810, 0x1819,\r
+0x1820, 0x1878,\r
+0x1880, 0x18aa,\r
+0x18b0, 0x18f5,\r
+0x1900, 0x191e,\r
+0x1920, 0x192b,\r
+0x1930, 0x193b,\r
+0x1940, 0x1940,\r
+0x1944, 0x196d,\r
+0x1970, 0x1974,\r
+0x1980, 0x19ab,\r
+0x19b0, 0x19c9,\r
+0x19d0, 0x19da,\r
+0x19de, 0x1a1b,\r
+0x1a1e, 0x1a5e,\r
+0x1a60, 0x1a7c,\r
+0x1a7f, 0x1a89,\r
+0x1a90, 0x1a99,\r
+0x1aa0, 0x1aad,\r
+0x1ab0, 0x1abe,\r
+0x1b00, 0x1b4b,\r
+0x1b50, 0x1b7c,\r
+0x1b80, 0x1bf3,\r
+0x1bfc, 0x1c37,\r
+0x1c3b, 0x1c49,\r
+0x1c4d, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cc7,\r
+0x1cd0, 0x1cf9,\r
+0x1d00, 0x1df9,\r
+0x1dfb, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fc4,\r
+0x1fc6, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fdd, 0x1fef,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffe,\r
+0x2000, 0x2027,\r
+0x202a, 0x2064,\r
+0x2066, 0x2071,\r
+0x2074, 0x208e,\r
+0x2090, 0x209c,\r
+0x20a0, 0x20bf,\r
+0x20d0, 0x20f0,\r
+0x2100, 0x218b,\r
+0x2190, 0x2426,\r
+0x2440, 0x244a,\r
+0x2460, 0x2b73,\r
+0x2b76, 0x2b95,\r
+0x2b98, 0x2bc8,\r
+0x2bca, 0x2bfe,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x2c60, 0x2cf3,\r
+0x2cf9, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0x2d30, 0x2d67,\r
+0x2d6f, 0x2d70,\r
+0x2d7f, 0x2d96,\r
+0x2da0, 0x2da6,\r
+0x2da8, 0x2dae,\r
+0x2db0, 0x2db6,\r
+0x2db8, 0x2dbe,\r
+0x2dc0, 0x2dc6,\r
+0x2dc8, 0x2dce,\r
+0x2dd0, 0x2dd6,\r
+0x2dd8, 0x2dde,\r
+0x2de0, 0x2e4e,\r
+0x2e80, 0x2e99,\r
+0x2e9b, 0x2ef3,\r
+0x2f00, 0x2fd5,\r
+0x2ff0, 0x2ffb,\r
+0x3000, 0x303f,\r
+0x3041, 0x3096,\r
+0x3099, 0x30ff,\r
+0x3105, 0x312f,\r
+0x3131, 0x318e,\r
+0x3190, 0x31ba,\r
+0x31c0, 0x31e3,\r
+0x31f0, 0x321e,\r
+0x3220, 0x32fe,\r
+0x3300, 0x4db5,\r
+0x4dc0, 0x9fef,\r
+0xa000, 0xa48c,\r
+0xa490, 0xa4c6,\r
+0xa4d0, 0xa62b,\r
+0xa640, 0xa6f7,\r
+0xa700, 0xa7b9,\r
+0xa7f7, 0xa82b,\r
+0xa830, 0xa839,\r
+0xa840, 0xa877,\r
+0xa880, 0xa8c5,\r
+0xa8ce, 0xa8d9,\r
+0xa8e0, 0xa953,\r
+0xa95f, 0xa97c,\r
+0xa980, 0xa9cd,\r
+0xa9cf, 0xa9d9,\r
+0xa9de, 0xa9fe,\r
+0xaa00, 0xaa36,\r
+0xaa40, 0xaa4d,\r
+0xaa50, 0xaa59,\r
+0xaa5c, 0xaac2,\r
+0xaadb, 0xaaf6,\r
+0xab01, 0xab06,\r
+0xab09, 0xab0e,\r
+0xab11, 0xab16,\r
+0xab20, 0xab26,\r
+0xab28, 0xab2e,\r
+0xab30, 0xab65,\r
+0xab70, 0xabed,\r
+0xabf0, 0xabf9,\r
+0xac00, 0xd7a3,\r
+0xd7b0, 0xd7c6,\r
+0xd7cb, 0xd7fb,\r
+0xe000, 0xfa6d,\r
+0xfa70, 0xfad9,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xfb1d, 0xfb36,\r
+0xfb38, 0xfb3c,\r
+0xfb3e, 0xfb3e,\r
+0xfb40, 0xfb41,\r
+0xfb43, 0xfb44,\r
+0xfb46, 0xfbc1,\r
+0xfbd3, 0xfd3f,\r
+0xfd50, 0xfd8f,\r
+0xfd92, 0xfdc7,\r
+0xfdf0, 0xfdfd,\r
+0xfe00, 0xfe19,\r
+0xfe20, 0xfe52,\r
+0xfe54, 0xfe66,\r
+0xfe68, 0xfe6b,\r
+0xfe70, 0xfe74,\r
+0xfe76, 0xfefc,\r
+0xfeff, 0xfeff,\r
+0xff01, 0xffbe,\r
+0xffc2, 0xffc7,\r
+0xffca, 0xffcf,\r
+0xffd2, 0xffd7,\r
+0xffda, 0xffdc,\r
+0xffe0, 0xffe6,\r
+0xffe8, 0xffee,\r
+0xfff9, 0xfffd,\r
+0x10000, 0x1000b,\r
+0x1000d, 0x10026,\r
+0x10028, 0x1003a,\r
+0x1003c, 0x1003d,\r
+0x1003f, 0x1004d,\r
+0x10050, 0x1005d,\r
+0x10080, 0x100fa,\r
+0x10100, 0x10102,\r
+0x10107, 0x10133,\r
+0x10137, 0x1018e,\r
+0x10190, 0x1019b,\r
+0x101a0, 0x101a0,\r
+0x101d0, 0x101fd,\r
+0x10280, 0x1029c,\r
+0x102a0, 0x102d0,\r
+0x102e0, 0x102fb,\r
+0x10300, 0x10323,\r
+0x1032d, 0x1034a,\r
+0x10350, 0x1037a,\r
+0x10380, 0x1039d,\r
+0x1039f, 0x103c3,\r
+0x103c8, 0x103d5,\r
+0x10400, 0x1049d,\r
+0x104a0, 0x104a9,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+0x10500, 0x10527,\r
+0x10530, 0x10563,\r
+0x1056f, 0x1056f,\r
+0x10600, 0x10736,\r
+0x10740, 0x10755,\r
+0x10760, 0x10767,\r
+0x10800, 0x10805,\r
+0x10808, 0x10808,\r
+0x1080a, 0x10835,\r
+0x10837, 0x10838,\r
+0x1083c, 0x1083c,\r
+0x1083f, 0x10855,\r
+0x10857, 0x1089e,\r
+0x108a7, 0x108af,\r
+0x108e0, 0x108f2,\r
+0x108f4, 0x108f5,\r
+0x108fb, 0x1091b,\r
+0x1091f, 0x10939,\r
+0x1093f, 0x1093f,\r
+0x10980, 0x109b7,\r
+0x109bc, 0x109cf,\r
+0x109d2, 0x10a03,\r
+0x10a05, 0x10a06,\r
+0x10a0c, 0x10a13,\r
+0x10a15, 0x10a17,\r
+0x10a19, 0x10a35,\r
+0x10a38, 0x10a3a,\r
+0x10a3f, 0x10a48,\r
+0x10a50, 0x10a58,\r
+0x10a60, 0x10a9f,\r
+0x10ac0, 0x10ae6,\r
+0x10aeb, 0x10af6,\r
+0x10b00, 0x10b35,\r
+0x10b39, 0x10b55,\r
+0x10b58, 0x10b72,\r
+0x10b78, 0x10b91,\r
+0x10b99, 0x10b9c,\r
+0x10ba9, 0x10baf,\r
+0x10c00, 0x10c48,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x10cfa, 0x10d27,\r
+0x10d30, 0x10d39,\r
+0x10e60, 0x10e7e,\r
+0x10f00, 0x10f27,\r
+0x10f30, 0x10f59,\r
+0x11000, 0x1104d,\r
+0x11052, 0x1106f,\r
+0x1107f, 0x110c1,\r
+0x110cd, 0x110cd,\r
+0x110d0, 0x110e8,\r
+0x110f0, 0x110f9,\r
+0x11100, 0x11134,\r
+0x11136, 0x11146,\r
+0x11150, 0x11176,\r
+0x11180, 0x111cd,\r
+0x111d0, 0x111df,\r
+0x111e1, 0x111f4,\r
+0x11200, 0x11211,\r
+0x11213, 0x1123e,\r
+0x11280, 0x11286,\r
+0x11288, 0x11288,\r
+0x1128a, 0x1128d,\r
+0x1128f, 0x1129d,\r
+0x1129f, 0x112a9,\r
+0x112b0, 0x112ea,\r
+0x112f0, 0x112f9,\r
+0x11300, 0x11303,\r
+0x11305, 0x1130c,\r
+0x1130f, 0x11310,\r
+0x11313, 0x11328,\r
+0x1132a, 0x11330,\r
+0x11332, 0x11333,\r
+0x11335, 0x11339,\r
+0x1133b, 0x11344,\r
+0x11347, 0x11348,\r
+0x1134b, 0x1134d,\r
+0x11350, 0x11350,\r
+0x11357, 0x11357,\r
+0x1135d, 0x11363,\r
+0x11366, 0x1136c,\r
+0x11370, 0x11374,\r
+0x11400, 0x11459,\r
+0x1145b, 0x1145b,\r
+0x1145d, 0x1145e,\r
+0x11480, 0x114c7,\r
+0x114d0, 0x114d9,\r
+0x11580, 0x115b5,\r
+0x115b8, 0x115dd,\r
+0x11600, 0x11644,\r
+0x11650, 0x11659,\r
+0x11660, 0x1166c,\r
+0x11680, 0x116b7,\r
+0x116c0, 0x116c9,\r
+0x11700, 0x1171a,\r
+0x1171d, 0x1172b,\r
+0x11730, 0x1173f,\r
+0x11800, 0x1183b,\r
+0x118a0, 0x118f2,\r
+0x118ff, 0x118ff,\r
+0x11a00, 0x11a47,\r
+0x11a50, 0x11a83,\r
+0x11a86, 0x11aa2,\r
+0x11ac0, 0x11af8,\r
+0x11c00, 0x11c08,\r
+0x11c0a, 0x11c36,\r
+0x11c38, 0x11c45,\r
+0x11c50, 0x11c6c,\r
+0x11c70, 0x11c8f,\r
+0x11c92, 0x11ca7,\r
+0x11ca9, 0x11cb6,\r
+0x11d00, 0x11d06,\r
+0x11d08, 0x11d09,\r
+0x11d0b, 0x11d36,\r
+0x11d3a, 0x11d3a,\r
+0x11d3c, 0x11d3d,\r
+0x11d3f, 0x11d47,\r
+0x11d50, 0x11d59,\r
+0x11d60, 0x11d65,\r
+0x11d67, 0x11d68,\r
+0x11d6a, 0x11d8e,\r
+0x11d90, 0x11d91,\r
+0x11d93, 0x11d98,\r
+0x11da0, 0x11da9,\r
+0x11ee0, 0x11ef8,\r
+0x12000, 0x12399,\r
+0x12400, 0x1246e,\r
+0x12470, 0x12474,\r
+0x12480, 0x12543,\r
+0x13000, 0x1342e,\r
+0x14400, 0x14646,\r
+0x16800, 0x16a38,\r
+0x16a40, 0x16a5e,\r
+0x16a60, 0x16a69,\r
+0x16a6e, 0x16a6f,\r
+0x16ad0, 0x16aed,\r
+0x16af0, 0x16af5,\r
+0x16b00, 0x16b45,\r
+0x16b50, 0x16b59,\r
+0x16b5b, 0x16b61,\r
+0x16b63, 0x16b77,\r
+0x16b7d, 0x16b8f,\r
+0x16e40, 0x16e9a,\r
+0x16f00, 0x16f44,\r
+0x16f50, 0x16f7e,\r
+0x16f8f, 0x16f9f,\r
+0x16fe0, 0x16fe1,\r
+0x17000, 0x187f1,\r
+0x18800, 0x18af2,\r
+0x1b000, 0x1b11e,\r
+0x1b170, 0x1b2fb,\r
+0x1bc00, 0x1bc6a,\r
+0x1bc70, 0x1bc7c,\r
+0x1bc80, 0x1bc88,\r
+0x1bc90, 0x1bc99,\r
+0x1bc9c, 0x1bca3,\r
+0x1d000, 0x1d0f5,\r
+0x1d100, 0x1d126,\r
+0x1d129, 0x1d1e8,\r
+0x1d200, 0x1d245,\r
+0x1d2e0, 0x1d2f3,\r
+0x1d300, 0x1d356,\r
+0x1d360, 0x1d378,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d7cb,\r
+0x1d7ce, 0x1da8b,\r
+0x1da9b, 0x1da9f,\r
+0x1daa1, 0x1daaf,\r
+0x1e000, 0x1e006,\r
+0x1e008, 0x1e018,\r
+0x1e01b, 0x1e021,\r
+0x1e023, 0x1e024,\r
+0x1e026, 0x1e02a,\r
+0x1e800, 0x1e8c4,\r
+0x1e8c7, 0x1e8d6,\r
+0x1e900, 0x1e94a,\r
+0x1e950, 0x1e959,\r
+0x1e95e, 0x1e95f,\r
+0x1ec71, 0x1ecb4,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+0x1eef0, 0x1eef1,\r
+0x1f000, 0x1f02b,\r
+0x1f030, 0x1f093,\r
+0x1f0a0, 0x1f0ae,\r
+0x1f0b1, 0x1f0bf,\r
+0x1f0c1, 0x1f0cf,\r
+0x1f0d1, 0x1f0f5,\r
+0x1f100, 0x1f10c,\r
+0x1f110, 0x1f16b,\r
+0x1f170, 0x1f1ac,\r
+0x1f1e6, 0x1f202,\r
+0x1f210, 0x1f23b,\r
+0x1f240, 0x1f248,\r
+0x1f250, 0x1f251,\r
+0x1f260, 0x1f265,\r
+0x1f300, 0x1f6d4,\r
+0x1f6e0, 0x1f6ec,\r
+0x1f6f0, 0x1f6f9,\r
+0x1f700, 0x1f773,\r
+0x1f780, 0x1f7d8,\r
+0x1f800, 0x1f80b,\r
+0x1f810, 0x1f847,\r
+0x1f850, 0x1f859,\r
+0x1f860, 0x1f887,\r
+0x1f890, 0x1f8ad,\r
+0x1f900, 0x1f90b,\r
+0x1f910, 0x1f93e,\r
+0x1f940, 0x1f970,\r
+0x1f973, 0x1f976,\r
+0x1f97a, 0x1f97a,\r
+0x1f97c, 0x1f9a2,\r
+0x1f9b0, 0x1f9b9,\r
+0x1f9c0, 0x1f9c2,\r
+0x1f9d0, 0x1f9ff,\r
+0x1fa60, 0x1fa6d,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+0x2f800, 0x2fa1d,\r
+0xe0001, 0xe0001,\r
+0xe0020, 0xe007f,\r
+0xe0100, 0xe01ef,\r
+0xf0000, 0xffffd,\r
+0x100000, 0x10fffd,\r
+}; /* END of CR_Print */\r
+\r
+/* PROPERTY: 'Punct': POSIX [[:Punct:]] */\r
+static const OnigCodePoint\r
+CR_Punct[] = { 178,\r
+0x0021, 0x0023,\r
+0x0025, 0x002a,\r
+0x002c, 0x002f,\r
+0x003a, 0x003b,\r
+0x003f, 0x0040,\r
+0x005b, 0x005d,\r
+0x005f, 0x005f,\r
+0x007b, 0x007b,\r
+0x007d, 0x007d,\r
+0x00a1, 0x00a1,\r
+0x00a7, 0x00a7,\r
+0x00ab, 0x00ab,\r
+0x00b6, 0x00b7,\r
+0x00bb, 0x00bb,\r
+0x00bf, 0x00bf,\r
+0x037e, 0x037e,\r
+0x0387, 0x0387,\r
+0x055a, 0x055f,\r
+0x0589, 0x058a,\r
+0x05be, 0x05be,\r
+0x05c0, 0x05c0,\r
+0x05c3, 0x05c3,\r
+0x05c6, 0x05c6,\r
+0x05f3, 0x05f4,\r
+0x0609, 0x060a,\r
+0x060c, 0x060d,\r
+0x061b, 0x061b,\r
+0x061e, 0x061f,\r
+0x066a, 0x066d,\r
+0x06d4, 0x06d4,\r
+0x0700, 0x070d,\r
+0x07f7, 0x07f9,\r
+0x0830, 0x083e,\r
+0x085e, 0x085e,\r
+0x0964, 0x0965,\r
+0x0970, 0x0970,\r
+0x09fd, 0x09fd,\r
+0x0a76, 0x0a76,\r
+0x0af0, 0x0af0,\r
+0x0c84, 0x0c84,\r
+0x0df4, 0x0df4,\r
+0x0e4f, 0x0e4f,\r
+0x0e5a, 0x0e5b,\r
+0x0f04, 0x0f12,\r
+0x0f14, 0x0f14,\r
+0x0f3a, 0x0f3d,\r
+0x0f85, 0x0f85,\r
+0x0fd0, 0x0fd4,\r
+0x0fd9, 0x0fda,\r
+0x104a, 0x104f,\r
+0x10fb, 0x10fb,\r
+0x1360, 0x1368,\r
+0x1400, 0x1400,\r
+0x166d, 0x166e,\r
+0x169b, 0x169c,\r
+0x16eb, 0x16ed,\r
+0x1735, 0x1736,\r
+0x17d4, 0x17d6,\r
+0x17d8, 0x17da,\r
+0x1800, 0x180a,\r
+0x1944, 0x1945,\r
+0x1a1e, 0x1a1f,\r
+0x1aa0, 0x1aa6,\r
+0x1aa8, 0x1aad,\r
+0x1b5a, 0x1b60,\r
+0x1bfc, 0x1bff,\r
+0x1c3b, 0x1c3f,\r
+0x1c7e, 0x1c7f,\r
+0x1cc0, 0x1cc7,\r
+0x1cd3, 0x1cd3,\r
+0x2010, 0x2027,\r
+0x2030, 0x2043,\r
+0x2045, 0x2051,\r
+0x2053, 0x205e,\r
+0x207d, 0x207e,\r
+0x208d, 0x208e,\r
+0x2308, 0x230b,\r
+0x2329, 0x232a,\r
+0x2768, 0x2775,\r
+0x27c5, 0x27c6,\r
+0x27e6, 0x27ef,\r
+0x2983, 0x2998,\r
+0x29d8, 0x29db,\r
+0x29fc, 0x29fd,\r
+0x2cf9, 0x2cfc,\r
+0x2cfe, 0x2cff,\r
+0x2d70, 0x2d70,\r
+0x2e00, 0x2e2e,\r
+0x2e30, 0x2e4e,\r
+0x3001, 0x3003,\r
+0x3008, 0x3011,\r
+0x3014, 0x301f,\r
+0x3030, 0x3030,\r
+0x303d, 0x303d,\r
+0x30a0, 0x30a0,\r
+0x30fb, 0x30fb,\r
+0xa4fe, 0xa4ff,\r
+0xa60d, 0xa60f,\r
+0xa673, 0xa673,\r
+0xa67e, 0xa67e,\r
+0xa6f2, 0xa6f7,\r
+0xa874, 0xa877,\r
+0xa8ce, 0xa8cf,\r
+0xa8f8, 0xa8fa,\r
+0xa8fc, 0xa8fc,\r
+0xa92e, 0xa92f,\r
+0xa95f, 0xa95f,\r
+0xa9c1, 0xa9cd,\r
+0xa9de, 0xa9df,\r
+0xaa5c, 0xaa5f,\r
+0xaade, 0xaadf,\r
+0xaaf0, 0xaaf1,\r
+0xabeb, 0xabeb,\r
+0xfd3e, 0xfd3f,\r
+0xfe10, 0xfe19,\r
+0xfe30, 0xfe52,\r
+0xfe54, 0xfe61,\r
+0xfe63, 0xfe63,\r
+0xfe68, 0xfe68,\r
+0xfe6a, 0xfe6b,\r
+0xff01, 0xff03,\r
+0xff05, 0xff0a,\r
+0xff0c, 0xff0f,\r
+0xff1a, 0xff1b,\r
+0xff1f, 0xff20,\r
+0xff3b, 0xff3d,\r
+0xff3f, 0xff3f,\r
+0xff5b, 0xff5b,\r
+0xff5d, 0xff5d,\r
+0xff5f, 0xff65,\r
+0x10100, 0x10102,\r
+0x1039f, 0x1039f,\r
+0x103d0, 0x103d0,\r
+0x1056f, 0x1056f,\r
+0x10857, 0x10857,\r
+0x1091f, 0x1091f,\r
+0x1093f, 0x1093f,\r
+0x10a50, 0x10a58,\r
+0x10a7f, 0x10a7f,\r
+0x10af0, 0x10af6,\r
+0x10b39, 0x10b3f,\r
+0x10b99, 0x10b9c,\r
+0x10f55, 0x10f59,\r
+0x11047, 0x1104d,\r
+0x110bb, 0x110bc,\r
+0x110be, 0x110c1,\r
+0x11140, 0x11143,\r
+0x11174, 0x11175,\r
+0x111c5, 0x111c8,\r
+0x111cd, 0x111cd,\r
+0x111db, 0x111db,\r
+0x111dd, 0x111df,\r
+0x11238, 0x1123d,\r
+0x112a9, 0x112a9,\r
+0x1144b, 0x1144f,\r
+0x1145b, 0x1145b,\r
+0x1145d, 0x1145d,\r
+0x114c6, 0x114c6,\r
+0x115c1, 0x115d7,\r
+0x11641, 0x11643,\r
+0x11660, 0x1166c,\r
+0x1173c, 0x1173e,\r
+0x1183b, 0x1183b,\r
+0x11a3f, 0x11a46,\r
+0x11a9a, 0x11a9c,\r
+0x11a9e, 0x11aa2,\r
+0x11c41, 0x11c45,\r
+0x11c70, 0x11c71,\r
+0x11ef7, 0x11ef8,\r
+0x12470, 0x12474,\r
+0x16a6e, 0x16a6f,\r
+0x16af5, 0x16af5,\r
+0x16b37, 0x16b3b,\r
+0x16b44, 0x16b44,\r
+0x16e97, 0x16e9a,\r
+0x1bc9f, 0x1bc9f,\r
+0x1da87, 0x1da8b,\r
+0x1e95e, 0x1e95f,\r
+}; /* END of CR_Punct */\r
+\r
+/* PROPERTY: 'Space': POSIX [[:Space:]] */\r
+static const OnigCodePoint\r
+CR_Space[] = { 10,\r
+0x0009, 0x000d,\r
+0x0020, 0x0020,\r
+0x0085, 0x0085,\r
+0x00a0, 0x00a0,\r
+0x1680, 0x1680,\r
+0x2000, 0x200a,\r
+0x2028, 0x2029,\r
+0x202f, 0x202f,\r
+0x205f, 0x205f,\r
+0x3000, 0x3000,\r
+}; /* END of CR_Space */\r
+\r
+/* PROPERTY: 'Upper': POSIX [[:Upper:]] */\r
+static const OnigCodePoint\r
+CR_Upper[] = { 636,\r
+0x0041, 0x005a,\r
+0x00c0, 0x00d6,\r
+0x00d8, 0x00de,\r
+0x0100, 0x0100,\r
+0x0102, 0x0102,\r
+0x0104, 0x0104,\r
+0x0106, 0x0106,\r
+0x0108, 0x0108,\r
+0x010a, 0x010a,\r
+0x010c, 0x010c,\r
+0x010e, 0x010e,\r
+0x0110, 0x0110,\r
+0x0112, 0x0112,\r
+0x0114, 0x0114,\r
+0x0116, 0x0116,\r
+0x0118, 0x0118,\r
+0x011a, 0x011a,\r
+0x011c, 0x011c,\r
+0x011e, 0x011e,\r
+0x0120, 0x0120,\r
+0x0122, 0x0122,\r
+0x0124, 0x0124,\r
+0x0126, 0x0126,\r
+0x0128, 0x0128,\r
+0x012a, 0x012a,\r
+0x012c, 0x012c,\r
+0x012e, 0x012e,\r
+0x0130, 0x0130,\r
+0x0132, 0x0132,\r
+0x0134, 0x0134,\r
+0x0136, 0x0136,\r
+0x0139, 0x0139,\r
+0x013b, 0x013b,\r
+0x013d, 0x013d,\r
+0x013f, 0x013f,\r
+0x0141, 0x0141,\r
+0x0143, 0x0143,\r
+0x0145, 0x0145,\r
+0x0147, 0x0147,\r
+0x014a, 0x014a,\r
+0x014c, 0x014c,\r
+0x014e, 0x014e,\r
+0x0150, 0x0150,\r
+0x0152, 0x0152,\r
+0x0154, 0x0154,\r
+0x0156, 0x0156,\r
+0x0158, 0x0158,\r
+0x015a, 0x015a,\r
+0x015c, 0x015c,\r
+0x015e, 0x015e,\r
+0x0160, 0x0160,\r
+0x0162, 0x0162,\r
+0x0164, 0x0164,\r
+0x0166, 0x0166,\r
+0x0168, 0x0168,\r
+0x016a, 0x016a,\r
+0x016c, 0x016c,\r
+0x016e, 0x016e,\r
+0x0170, 0x0170,\r
+0x0172, 0x0172,\r
+0x0174, 0x0174,\r
+0x0176, 0x0176,\r
+0x0178, 0x0179,\r
+0x017b, 0x017b,\r
+0x017d, 0x017d,\r
+0x0181, 0x0182,\r
+0x0184, 0x0184,\r
+0x0186, 0x0187,\r
+0x0189, 0x018b,\r
+0x018e, 0x0191,\r
+0x0193, 0x0194,\r
+0x0196, 0x0198,\r
+0x019c, 0x019d,\r
+0x019f, 0x01a0,\r
+0x01a2, 0x01a2,\r
+0x01a4, 0x01a4,\r
+0x01a6, 0x01a7,\r
+0x01a9, 0x01a9,\r
+0x01ac, 0x01ac,\r
+0x01ae, 0x01af,\r
+0x01b1, 0x01b3,\r
+0x01b5, 0x01b5,\r
+0x01b7, 0x01b8,\r
+0x01bc, 0x01bc,\r
+0x01c4, 0x01c4,\r
+0x01c7, 0x01c7,\r
+0x01ca, 0x01ca,\r
+0x01cd, 0x01cd,\r
+0x01cf, 0x01cf,\r
+0x01d1, 0x01d1,\r
+0x01d3, 0x01d3,\r
+0x01d5, 0x01d5,\r
+0x01d7, 0x01d7,\r
+0x01d9, 0x01d9,\r
+0x01db, 0x01db,\r
+0x01de, 0x01de,\r
+0x01e0, 0x01e0,\r
+0x01e2, 0x01e2,\r
+0x01e4, 0x01e4,\r
+0x01e6, 0x01e6,\r
+0x01e8, 0x01e8,\r
+0x01ea, 0x01ea,\r
+0x01ec, 0x01ec,\r
+0x01ee, 0x01ee,\r
+0x01f1, 0x01f1,\r
+0x01f4, 0x01f4,\r
+0x01f6, 0x01f8,\r
+0x01fa, 0x01fa,\r
+0x01fc, 0x01fc,\r
+0x01fe, 0x01fe,\r
+0x0200, 0x0200,\r
+0x0202, 0x0202,\r
+0x0204, 0x0204,\r
+0x0206, 0x0206,\r
+0x0208, 0x0208,\r
+0x020a, 0x020a,\r
+0x020c, 0x020c,\r
+0x020e, 0x020e,\r
+0x0210, 0x0210,\r
+0x0212, 0x0212,\r
+0x0214, 0x0214,\r
+0x0216, 0x0216,\r
+0x0218, 0x0218,\r
+0x021a, 0x021a,\r
+0x021c, 0x021c,\r
+0x021e, 0x021e,\r
+0x0220, 0x0220,\r
+0x0222, 0x0222,\r
+0x0224, 0x0224,\r
+0x0226, 0x0226,\r
+0x0228, 0x0228,\r
+0x022a, 0x022a,\r
+0x022c, 0x022c,\r
+0x022e, 0x022e,\r
+0x0230, 0x0230,\r
+0x0232, 0x0232,\r
+0x023a, 0x023b,\r
+0x023d, 0x023e,\r
+0x0241, 0x0241,\r
+0x0243, 0x0246,\r
+0x0248, 0x0248,\r
+0x024a, 0x024a,\r
+0x024c, 0x024c,\r
+0x024e, 0x024e,\r
+0x0370, 0x0370,\r
+0x0372, 0x0372,\r
+0x0376, 0x0376,\r
+0x037f, 0x037f,\r
+0x0386, 0x0386,\r
+0x0388, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x038f,\r
+0x0391, 0x03a1,\r
+0x03a3, 0x03ab,\r
+0x03cf, 0x03cf,\r
+0x03d2, 0x03d4,\r
+0x03d8, 0x03d8,\r
+0x03da, 0x03da,\r
+0x03dc, 0x03dc,\r
+0x03de, 0x03de,\r
+0x03e0, 0x03e0,\r
+0x03e2, 0x03e2,\r
+0x03e4, 0x03e4,\r
+0x03e6, 0x03e6,\r
+0x03e8, 0x03e8,\r
+0x03ea, 0x03ea,\r
+0x03ec, 0x03ec,\r
+0x03ee, 0x03ee,\r
+0x03f4, 0x03f4,\r
+0x03f7, 0x03f7,\r
+0x03f9, 0x03fa,\r
+0x03fd, 0x042f,\r
+0x0460, 0x0460,\r
+0x0462, 0x0462,\r
+0x0464, 0x0464,\r
+0x0466, 0x0466,\r
+0x0468, 0x0468,\r
+0x046a, 0x046a,\r
+0x046c, 0x046c,\r
+0x046e, 0x046e,\r
+0x0470, 0x0470,\r
+0x0472, 0x0472,\r
+0x0474, 0x0474,\r
+0x0476, 0x0476,\r
+0x0478, 0x0478,\r
+0x047a, 0x047a,\r
+0x047c, 0x047c,\r
+0x047e, 0x047e,\r
+0x0480, 0x0480,\r
+0x048a, 0x048a,\r
+0x048c, 0x048c,\r
+0x048e, 0x048e,\r
+0x0490, 0x0490,\r
+0x0492, 0x0492,\r
+0x0494, 0x0494,\r
+0x0496, 0x0496,\r
+0x0498, 0x0498,\r
+0x049a, 0x049a,\r
+0x049c, 0x049c,\r
+0x049e, 0x049e,\r
+0x04a0, 0x04a0,\r
+0x04a2, 0x04a2,\r
+0x04a4, 0x04a4,\r
+0x04a6, 0x04a6,\r
+0x04a8, 0x04a8,\r
+0x04aa, 0x04aa,\r
+0x04ac, 0x04ac,\r
+0x04ae, 0x04ae,\r
+0x04b0, 0x04b0,\r
+0x04b2, 0x04b2,\r
+0x04b4, 0x04b4,\r
+0x04b6, 0x04b6,\r
+0x04b8, 0x04b8,\r
+0x04ba, 0x04ba,\r
+0x04bc, 0x04bc,\r
+0x04be, 0x04be,\r
+0x04c0, 0x04c1,\r
+0x04c3, 0x04c3,\r
+0x04c5, 0x04c5,\r
+0x04c7, 0x04c7,\r
+0x04c9, 0x04c9,\r
+0x04cb, 0x04cb,\r
+0x04cd, 0x04cd,\r
+0x04d0, 0x04d0,\r
+0x04d2, 0x04d2,\r
+0x04d4, 0x04d4,\r
+0x04d6, 0x04d6,\r
+0x04d8, 0x04d8,\r
+0x04da, 0x04da,\r
+0x04dc, 0x04dc,\r
+0x04de, 0x04de,\r
+0x04e0, 0x04e0,\r
+0x04e2, 0x04e2,\r
+0x04e4, 0x04e4,\r
+0x04e6, 0x04e6,\r
+0x04e8, 0x04e8,\r
+0x04ea, 0x04ea,\r
+0x04ec, 0x04ec,\r
+0x04ee, 0x04ee,\r
+0x04f0, 0x04f0,\r
+0x04f2, 0x04f2,\r
+0x04f4, 0x04f4,\r
+0x04f6, 0x04f6,\r
+0x04f8, 0x04f8,\r
+0x04fa, 0x04fa,\r
+0x04fc, 0x04fc,\r
+0x04fe, 0x04fe,\r
+0x0500, 0x0500,\r
+0x0502, 0x0502,\r
+0x0504, 0x0504,\r
+0x0506, 0x0506,\r
+0x0508, 0x0508,\r
+0x050a, 0x050a,\r
+0x050c, 0x050c,\r
+0x050e, 0x050e,\r
+0x0510, 0x0510,\r
+0x0512, 0x0512,\r
+0x0514, 0x0514,\r
+0x0516, 0x0516,\r
+0x0518, 0x0518,\r
+0x051a, 0x051a,\r
+0x051c, 0x051c,\r
+0x051e, 0x051e,\r
+0x0520, 0x0520,\r
+0x0522, 0x0522,\r
+0x0524, 0x0524,\r
+0x0526, 0x0526,\r
+0x0528, 0x0528,\r
+0x052a, 0x052a,\r
+0x052c, 0x052c,\r
+0x052e, 0x052e,\r
+0x0531, 0x0556,\r
+0x10a0, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x13a0, 0x13f5,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cbf,\r
+0x1e00, 0x1e00,\r
+0x1e02, 0x1e02,\r
+0x1e04, 0x1e04,\r
+0x1e06, 0x1e06,\r
+0x1e08, 0x1e08,\r
+0x1e0a, 0x1e0a,\r
+0x1e0c, 0x1e0c,\r
+0x1e0e, 0x1e0e,\r
+0x1e10, 0x1e10,\r
+0x1e12, 0x1e12,\r
+0x1e14, 0x1e14,\r
+0x1e16, 0x1e16,\r
+0x1e18, 0x1e18,\r
+0x1e1a, 0x1e1a,\r
+0x1e1c, 0x1e1c,\r
+0x1e1e, 0x1e1e,\r
+0x1e20, 0x1e20,\r
+0x1e22, 0x1e22,\r
+0x1e24, 0x1e24,\r
+0x1e26, 0x1e26,\r
+0x1e28, 0x1e28,\r
+0x1e2a, 0x1e2a,\r
+0x1e2c, 0x1e2c,\r
+0x1e2e, 0x1e2e,\r
+0x1e30, 0x1e30,\r
+0x1e32, 0x1e32,\r
+0x1e34, 0x1e34,\r
+0x1e36, 0x1e36,\r
+0x1e38, 0x1e38,\r
+0x1e3a, 0x1e3a,\r
+0x1e3c, 0x1e3c,\r
+0x1e3e, 0x1e3e,\r
+0x1e40, 0x1e40,\r
+0x1e42, 0x1e42,\r
+0x1e44, 0x1e44,\r
+0x1e46, 0x1e46,\r
+0x1e48, 0x1e48,\r
+0x1e4a, 0x1e4a,\r
+0x1e4c, 0x1e4c,\r
+0x1e4e, 0x1e4e,\r
+0x1e50, 0x1e50,\r
+0x1e52, 0x1e52,\r
+0x1e54, 0x1e54,\r
+0x1e56, 0x1e56,\r
+0x1e58, 0x1e58,\r
+0x1e5a, 0x1e5a,\r
+0x1e5c, 0x1e5c,\r
+0x1e5e, 0x1e5e,\r
+0x1e60, 0x1e60,\r
+0x1e62, 0x1e62,\r
+0x1e64, 0x1e64,\r
+0x1e66, 0x1e66,\r
+0x1e68, 0x1e68,\r
+0x1e6a, 0x1e6a,\r
+0x1e6c, 0x1e6c,\r
+0x1e6e, 0x1e6e,\r
+0x1e70, 0x1e70,\r
+0x1e72, 0x1e72,\r
+0x1e74, 0x1e74,\r
+0x1e76, 0x1e76,\r
+0x1e78, 0x1e78,\r
+0x1e7a, 0x1e7a,\r
+0x1e7c, 0x1e7c,\r
+0x1e7e, 0x1e7e,\r
+0x1e80, 0x1e80,\r
+0x1e82, 0x1e82,\r
+0x1e84, 0x1e84,\r
+0x1e86, 0x1e86,\r
+0x1e88, 0x1e88,\r
+0x1e8a, 0x1e8a,\r
+0x1e8c, 0x1e8c,\r
+0x1e8e, 0x1e8e,\r
+0x1e90, 0x1e90,\r
+0x1e92, 0x1e92,\r
+0x1e94, 0x1e94,\r
+0x1e9e, 0x1e9e,\r
+0x1ea0, 0x1ea0,\r
+0x1ea2, 0x1ea2,\r
+0x1ea4, 0x1ea4,\r
+0x1ea6, 0x1ea6,\r
+0x1ea8, 0x1ea8,\r
+0x1eaa, 0x1eaa,\r
+0x1eac, 0x1eac,\r
+0x1eae, 0x1eae,\r
+0x1eb0, 0x1eb0,\r
+0x1eb2, 0x1eb2,\r
+0x1eb4, 0x1eb4,\r
+0x1eb6, 0x1eb6,\r
+0x1eb8, 0x1eb8,\r
+0x1eba, 0x1eba,\r
+0x1ebc, 0x1ebc,\r
+0x1ebe, 0x1ebe,\r
+0x1ec0, 0x1ec0,\r
+0x1ec2, 0x1ec2,\r
+0x1ec4, 0x1ec4,\r
+0x1ec6, 0x1ec6,\r
+0x1ec8, 0x1ec8,\r
+0x1eca, 0x1eca,\r
+0x1ecc, 0x1ecc,\r
+0x1ece, 0x1ece,\r
+0x1ed0, 0x1ed0,\r
+0x1ed2, 0x1ed2,\r
+0x1ed4, 0x1ed4,\r
+0x1ed6, 0x1ed6,\r
+0x1ed8, 0x1ed8,\r
+0x1eda, 0x1eda,\r
+0x1edc, 0x1edc,\r
+0x1ede, 0x1ede,\r
+0x1ee0, 0x1ee0,\r
+0x1ee2, 0x1ee2,\r
+0x1ee4, 0x1ee4,\r
+0x1ee6, 0x1ee6,\r
+0x1ee8, 0x1ee8,\r
+0x1eea, 0x1eea,\r
+0x1eec, 0x1eec,\r
+0x1eee, 0x1eee,\r
+0x1ef0, 0x1ef0,\r
+0x1ef2, 0x1ef2,\r
+0x1ef4, 0x1ef4,\r
+0x1ef6, 0x1ef6,\r
+0x1ef8, 0x1ef8,\r
+0x1efa, 0x1efa,\r
+0x1efc, 0x1efc,\r
+0x1efe, 0x1efe,\r
+0x1f08, 0x1f0f,\r
+0x1f18, 0x1f1d,\r
+0x1f28, 0x1f2f,\r
+0x1f38, 0x1f3f,\r
+0x1f48, 0x1f4d,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f5f,\r
+0x1f68, 0x1f6f,\r
+0x1fb8, 0x1fbb,\r
+0x1fc8, 0x1fcb,\r
+0x1fd8, 0x1fdb,\r
+0x1fe8, 0x1fec,\r
+0x1ff8, 0x1ffb,\r
+0x2102, 0x2102,\r
+0x2107, 0x2107,\r
+0x210b, 0x210d,\r
+0x2110, 0x2112,\r
+0x2115, 0x2115,\r
+0x2119, 0x211d,\r
+0x2124, 0x2124,\r
+0x2126, 0x2126,\r
+0x2128, 0x2128,\r
+0x212a, 0x212d,\r
+0x2130, 0x2133,\r
+0x213e, 0x213f,\r
+0x2145, 0x2145,\r
+0x2160, 0x216f,\r
+0x2183, 0x2183,\r
+0x24b6, 0x24cf,\r
+0x2c00, 0x2c2e,\r
+0x2c60, 0x2c60,\r
+0x2c62, 0x2c64,\r
+0x2c67, 0x2c67,\r
+0x2c69, 0x2c69,\r
+0x2c6b, 0x2c6b,\r
+0x2c6d, 0x2c70,\r
+0x2c72, 0x2c72,\r
+0x2c75, 0x2c75,\r
+0x2c7e, 0x2c80,\r
+0x2c82, 0x2c82,\r
+0x2c84, 0x2c84,\r
+0x2c86, 0x2c86,\r
+0x2c88, 0x2c88,\r
+0x2c8a, 0x2c8a,\r
+0x2c8c, 0x2c8c,\r
+0x2c8e, 0x2c8e,\r
+0x2c90, 0x2c90,\r
+0x2c92, 0x2c92,\r
+0x2c94, 0x2c94,\r
+0x2c96, 0x2c96,\r
+0x2c98, 0x2c98,\r
+0x2c9a, 0x2c9a,\r
+0x2c9c, 0x2c9c,\r
+0x2c9e, 0x2c9e,\r
+0x2ca0, 0x2ca0,\r
+0x2ca2, 0x2ca2,\r
+0x2ca4, 0x2ca4,\r
+0x2ca6, 0x2ca6,\r
+0x2ca8, 0x2ca8,\r
+0x2caa, 0x2caa,\r
+0x2cac, 0x2cac,\r
+0x2cae, 0x2cae,\r
+0x2cb0, 0x2cb0,\r
+0x2cb2, 0x2cb2,\r
+0x2cb4, 0x2cb4,\r
+0x2cb6, 0x2cb6,\r
+0x2cb8, 0x2cb8,\r
+0x2cba, 0x2cba,\r
+0x2cbc, 0x2cbc,\r
+0x2cbe, 0x2cbe,\r
+0x2cc0, 0x2cc0,\r
+0x2cc2, 0x2cc2,\r
+0x2cc4, 0x2cc4,\r
+0x2cc6, 0x2cc6,\r
+0x2cc8, 0x2cc8,\r
+0x2cca, 0x2cca,\r
+0x2ccc, 0x2ccc,\r
+0x2cce, 0x2cce,\r
+0x2cd0, 0x2cd0,\r
+0x2cd2, 0x2cd2,\r
+0x2cd4, 0x2cd4,\r
+0x2cd6, 0x2cd6,\r
+0x2cd8, 0x2cd8,\r
+0x2cda, 0x2cda,\r
+0x2cdc, 0x2cdc,\r
+0x2cde, 0x2cde,\r
+0x2ce0, 0x2ce0,\r
+0x2ce2, 0x2ce2,\r
+0x2ceb, 0x2ceb,\r
+0x2ced, 0x2ced,\r
+0x2cf2, 0x2cf2,\r
+0xa640, 0xa640,\r
+0xa642, 0xa642,\r
+0xa644, 0xa644,\r
+0xa646, 0xa646,\r
+0xa648, 0xa648,\r
+0xa64a, 0xa64a,\r
+0xa64c, 0xa64c,\r
+0xa64e, 0xa64e,\r
+0xa650, 0xa650,\r
+0xa652, 0xa652,\r
+0xa654, 0xa654,\r
+0xa656, 0xa656,\r
+0xa658, 0xa658,\r
+0xa65a, 0xa65a,\r
+0xa65c, 0xa65c,\r
+0xa65e, 0xa65e,\r
+0xa660, 0xa660,\r
+0xa662, 0xa662,\r
+0xa664, 0xa664,\r
+0xa666, 0xa666,\r
+0xa668, 0xa668,\r
+0xa66a, 0xa66a,\r
+0xa66c, 0xa66c,\r
+0xa680, 0xa680,\r
+0xa682, 0xa682,\r
+0xa684, 0xa684,\r
+0xa686, 0xa686,\r
+0xa688, 0xa688,\r
+0xa68a, 0xa68a,\r
+0xa68c, 0xa68c,\r
+0xa68e, 0xa68e,\r
+0xa690, 0xa690,\r
+0xa692, 0xa692,\r
+0xa694, 0xa694,\r
+0xa696, 0xa696,\r
+0xa698, 0xa698,\r
+0xa69a, 0xa69a,\r
+0xa722, 0xa722,\r
+0xa724, 0xa724,\r
+0xa726, 0xa726,\r
+0xa728, 0xa728,\r
+0xa72a, 0xa72a,\r
+0xa72c, 0xa72c,\r
+0xa72e, 0xa72e,\r
+0xa732, 0xa732,\r
+0xa734, 0xa734,\r
+0xa736, 0xa736,\r
+0xa738, 0xa738,\r
+0xa73a, 0xa73a,\r
+0xa73c, 0xa73c,\r
+0xa73e, 0xa73e,\r
+0xa740, 0xa740,\r
+0xa742, 0xa742,\r
+0xa744, 0xa744,\r
+0xa746, 0xa746,\r
+0xa748, 0xa748,\r
+0xa74a, 0xa74a,\r
+0xa74c, 0xa74c,\r
+0xa74e, 0xa74e,\r
+0xa750, 0xa750,\r
+0xa752, 0xa752,\r
+0xa754, 0xa754,\r
+0xa756, 0xa756,\r
+0xa758, 0xa758,\r
+0xa75a, 0xa75a,\r
+0xa75c, 0xa75c,\r
+0xa75e, 0xa75e,\r
+0xa760, 0xa760,\r
+0xa762, 0xa762,\r
+0xa764, 0xa764,\r
+0xa766, 0xa766,\r
+0xa768, 0xa768,\r
+0xa76a, 0xa76a,\r
+0xa76c, 0xa76c,\r
+0xa76e, 0xa76e,\r
+0xa779, 0xa779,\r
+0xa77b, 0xa77b,\r
+0xa77d, 0xa77e,\r
+0xa780, 0xa780,\r
+0xa782, 0xa782,\r
+0xa784, 0xa784,\r
+0xa786, 0xa786,\r
+0xa78b, 0xa78b,\r
+0xa78d, 0xa78d,\r
+0xa790, 0xa790,\r
+0xa792, 0xa792,\r
+0xa796, 0xa796,\r
+0xa798, 0xa798,\r
+0xa79a, 0xa79a,\r
+0xa79c, 0xa79c,\r
+0xa79e, 0xa79e,\r
+0xa7a0, 0xa7a0,\r
+0xa7a2, 0xa7a2,\r
+0xa7a4, 0xa7a4,\r
+0xa7a6, 0xa7a6,\r
+0xa7a8, 0xa7a8,\r
+0xa7aa, 0xa7ae,\r
+0xa7b0, 0xa7b4,\r
+0xa7b6, 0xa7b6,\r
+0xa7b8, 0xa7b8,\r
+0xff21, 0xff3a,\r
+0x10400, 0x10427,\r
+0x104b0, 0x104d3,\r
+0x10c80, 0x10cb2,\r
+0x118a0, 0x118bf,\r
+0x16e40, 0x16e5f,\r
+0x1d400, 0x1d419,\r
+0x1d434, 0x1d44d,\r
+0x1d468, 0x1d481,\r
+0x1d49c, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b5,\r
+0x1d4d0, 0x1d4e9,\r
+0x1d504, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d538, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d56c, 0x1d585,\r
+0x1d5a0, 0x1d5b9,\r
+0x1d5d4, 0x1d5ed,\r
+0x1d608, 0x1d621,\r
+0x1d63c, 0x1d655,\r
+0x1d670, 0x1d689,\r
+0x1d6a8, 0x1d6c0,\r
+0x1d6e2, 0x1d6fa,\r
+0x1d71c, 0x1d734,\r
+0x1d756, 0x1d76e,\r
+0x1d790, 0x1d7a8,\r
+0x1d7ca, 0x1d7ca,\r
+0x1e900, 0x1e921,\r
+0x1f130, 0x1f149,\r
+0x1f150, 0x1f169,\r
+0x1f170, 0x1f189,\r
+}; /* END of CR_Upper */\r
+\r
+/* PROPERTY: 'XDigit': POSIX [[:XDigit:]] */\r
+static const OnigCodePoint\r
+CR_XDigit[] = { 3,\r
+0x0030, 0x0039,\r
+0x0041, 0x0046,\r
+0x0061, 0x0066,\r
+}; /* END of CR_XDigit */\r
+\r
+/* PROPERTY: 'Word': POSIX [[:Word:]] */\r
+static const OnigCodePoint\r
+CR_Word[] = { 710,\r
+0x0030, 0x0039,\r
+0x0041, 0x005a,\r
+0x005f, 0x005f,\r
+0x0061, 0x007a,\r
+0x00aa, 0x00aa,\r
+0x00b5, 0x00b5,\r
+0x00ba, 0x00ba,\r
+0x00c0, 0x00d6,\r
+0x00d8, 0x00f6,\r
+0x00f8, 0x02c1,\r
+0x02c6, 0x02d1,\r
+0x02e0, 0x02e4,\r
+0x02ec, 0x02ec,\r
+0x02ee, 0x02ee,\r
+0x0300, 0x0374,\r
+0x0376, 0x0377,\r
+0x037a, 0x037d,\r
+0x037f, 0x037f,\r
+0x0386, 0x0386,\r
+0x0388, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x03f5,\r
+0x03f7, 0x0481,\r
+0x0483, 0x052f,\r
+0x0531, 0x0556,\r
+0x0559, 0x0559,\r
+0x0560, 0x0588,\r
+0x0591, 0x05bd,\r
+0x05bf, 0x05bf,\r
+0x05c1, 0x05c2,\r
+0x05c4, 0x05c5,\r
+0x05c7, 0x05c7,\r
+0x05d0, 0x05ea,\r
+0x05ef, 0x05f2,\r
+0x0610, 0x061a,\r
+0x0620, 0x0669,\r
+0x066e, 0x06d3,\r
+0x06d5, 0x06dc,\r
+0x06df, 0x06e8,\r
+0x06ea, 0x06fc,\r
+0x06ff, 0x06ff,\r
+0x0710, 0x074a,\r
+0x074d, 0x07b1,\r
+0x07c0, 0x07f5,\r
+0x07fa, 0x07fa,\r
+0x07fd, 0x07fd,\r
+0x0800, 0x082d,\r
+0x0840, 0x085b,\r
+0x0860, 0x086a,\r
+0x08a0, 0x08b4,\r
+0x08b6, 0x08bd,\r
+0x08d3, 0x08e1,\r
+0x08e3, 0x0963,\r
+0x0966, 0x096f,\r
+0x0971, 0x0983,\r
+0x0985, 0x098c,\r
+0x098f, 0x0990,\r
+0x0993, 0x09a8,\r
+0x09aa, 0x09b0,\r
+0x09b2, 0x09b2,\r
+0x09b6, 0x09b9,\r
+0x09bc, 0x09c4,\r
+0x09c7, 0x09c8,\r
+0x09cb, 0x09ce,\r
+0x09d7, 0x09d7,\r
+0x09dc, 0x09dd,\r
+0x09df, 0x09e3,\r
+0x09e6, 0x09f1,\r
+0x09fc, 0x09fc,\r
+0x09fe, 0x09fe,\r
+0x0a01, 0x0a03,\r
+0x0a05, 0x0a0a,\r
+0x0a0f, 0x0a10,\r
+0x0a13, 0x0a28,\r
+0x0a2a, 0x0a30,\r
+0x0a32, 0x0a33,\r
+0x0a35, 0x0a36,\r
+0x0a38, 0x0a39,\r
+0x0a3c, 0x0a3c,\r
+0x0a3e, 0x0a42,\r
+0x0a47, 0x0a48,\r
+0x0a4b, 0x0a4d,\r
+0x0a51, 0x0a51,\r
+0x0a59, 0x0a5c,\r
+0x0a5e, 0x0a5e,\r
+0x0a66, 0x0a75,\r
+0x0a81, 0x0a83,\r
+0x0a85, 0x0a8d,\r
+0x0a8f, 0x0a91,\r
+0x0a93, 0x0aa8,\r
+0x0aaa, 0x0ab0,\r
+0x0ab2, 0x0ab3,\r
+0x0ab5, 0x0ab9,\r
+0x0abc, 0x0ac5,\r
+0x0ac7, 0x0ac9,\r
+0x0acb, 0x0acd,\r
+0x0ad0, 0x0ad0,\r
+0x0ae0, 0x0ae3,\r
+0x0ae6, 0x0aef,\r
+0x0af9, 0x0aff,\r
+0x0b01, 0x0b03,\r
+0x0b05, 0x0b0c,\r
+0x0b0f, 0x0b10,\r
+0x0b13, 0x0b28,\r
+0x0b2a, 0x0b30,\r
+0x0b32, 0x0b33,\r
+0x0b35, 0x0b39,\r
+0x0b3c, 0x0b44,\r
+0x0b47, 0x0b48,\r
+0x0b4b, 0x0b4d,\r
+0x0b56, 0x0b57,\r
+0x0b5c, 0x0b5d,\r
+0x0b5f, 0x0b63,\r
+0x0b66, 0x0b6f,\r
+0x0b71, 0x0b71,\r
+0x0b82, 0x0b83,\r
+0x0b85, 0x0b8a,\r
+0x0b8e, 0x0b90,\r
+0x0b92, 0x0b95,\r
+0x0b99, 0x0b9a,\r
+0x0b9c, 0x0b9c,\r
+0x0b9e, 0x0b9f,\r
+0x0ba3, 0x0ba4,\r
+0x0ba8, 0x0baa,\r
+0x0bae, 0x0bb9,\r
+0x0bbe, 0x0bc2,\r
+0x0bc6, 0x0bc8,\r
+0x0bca, 0x0bcd,\r
+0x0bd0, 0x0bd0,\r
+0x0bd7, 0x0bd7,\r
+0x0be6, 0x0bef,\r
+0x0c00, 0x0c0c,\r
+0x0c0e, 0x0c10,\r
+0x0c12, 0x0c28,\r
+0x0c2a, 0x0c39,\r
+0x0c3d, 0x0c44,\r
+0x0c46, 0x0c48,\r
+0x0c4a, 0x0c4d,\r
+0x0c55, 0x0c56,\r
+0x0c58, 0x0c5a,\r
+0x0c60, 0x0c63,\r
+0x0c66, 0x0c6f,\r
+0x0c80, 0x0c83,\r
+0x0c85, 0x0c8c,\r
+0x0c8e, 0x0c90,\r
+0x0c92, 0x0ca8,\r
+0x0caa, 0x0cb3,\r
+0x0cb5, 0x0cb9,\r
+0x0cbc, 0x0cc4,\r
+0x0cc6, 0x0cc8,\r
+0x0cca, 0x0ccd,\r
+0x0cd5, 0x0cd6,\r
+0x0cde, 0x0cde,\r
+0x0ce0, 0x0ce3,\r
+0x0ce6, 0x0cef,\r
+0x0cf1, 0x0cf2,\r
+0x0d00, 0x0d03,\r
+0x0d05, 0x0d0c,\r
+0x0d0e, 0x0d10,\r
+0x0d12, 0x0d44,\r
+0x0d46, 0x0d48,\r
+0x0d4a, 0x0d4e,\r
+0x0d54, 0x0d57,\r
+0x0d5f, 0x0d63,\r
+0x0d66, 0x0d6f,\r
+0x0d7a, 0x0d7f,\r
+0x0d82, 0x0d83,\r
+0x0d85, 0x0d96,\r
+0x0d9a, 0x0db1,\r
+0x0db3, 0x0dbb,\r
+0x0dbd, 0x0dbd,\r
+0x0dc0, 0x0dc6,\r
+0x0dca, 0x0dca,\r
+0x0dcf, 0x0dd4,\r
+0x0dd6, 0x0dd6,\r
+0x0dd8, 0x0ddf,\r
+0x0de6, 0x0def,\r
+0x0df2, 0x0df3,\r
+0x0e01, 0x0e3a,\r
+0x0e40, 0x0e4e,\r
+0x0e50, 0x0e59,\r
+0x0e81, 0x0e82,\r
+0x0e84, 0x0e84,\r
+0x0e87, 0x0e88,\r
+0x0e8a, 0x0e8a,\r
+0x0e8d, 0x0e8d,\r
+0x0e94, 0x0e97,\r
+0x0e99, 0x0e9f,\r
+0x0ea1, 0x0ea3,\r
+0x0ea5, 0x0ea5,\r
+0x0ea7, 0x0ea7,\r
+0x0eaa, 0x0eab,\r
+0x0ead, 0x0eb9,\r
+0x0ebb, 0x0ebd,\r
+0x0ec0, 0x0ec4,\r
+0x0ec6, 0x0ec6,\r
+0x0ec8, 0x0ecd,\r
+0x0ed0, 0x0ed9,\r
+0x0edc, 0x0edf,\r
+0x0f00, 0x0f00,\r
+0x0f18, 0x0f19,\r
+0x0f20, 0x0f29,\r
+0x0f35, 0x0f35,\r
+0x0f37, 0x0f37,\r
+0x0f39, 0x0f39,\r
+0x0f3e, 0x0f47,\r
+0x0f49, 0x0f6c,\r
+0x0f71, 0x0f84,\r
+0x0f86, 0x0f97,\r
+0x0f99, 0x0fbc,\r
+0x0fc6, 0x0fc6,\r
+0x1000, 0x1049,\r
+0x1050, 0x109d,\r
+0x10a0, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x10fa,\r
+0x10fc, 0x1248,\r
+0x124a, 0x124d,\r
+0x1250, 0x1256,\r
+0x1258, 0x1258,\r
+0x125a, 0x125d,\r
+0x1260, 0x1288,\r
+0x128a, 0x128d,\r
+0x1290, 0x12b0,\r
+0x12b2, 0x12b5,\r
+0x12b8, 0x12be,\r
+0x12c0, 0x12c0,\r
+0x12c2, 0x12c5,\r
+0x12c8, 0x12d6,\r
+0x12d8, 0x1310,\r
+0x1312, 0x1315,\r
+0x1318, 0x135a,\r
+0x135d, 0x135f,\r
+0x1380, 0x138f,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0x1401, 0x166c,\r
+0x166f, 0x167f,\r
+0x1681, 0x169a,\r
+0x16a0, 0x16ea,\r
+0x16ee, 0x16f8,\r
+0x1700, 0x170c,\r
+0x170e, 0x1714,\r
+0x1720, 0x1734,\r
+0x1740, 0x1753,\r
+0x1760, 0x176c,\r
+0x176e, 0x1770,\r
+0x1772, 0x1773,\r
+0x1780, 0x17d3,\r
+0x17d7, 0x17d7,\r
+0x17dc, 0x17dd,\r
+0x17e0, 0x17e9,\r
+0x180b, 0x180d,\r
+0x1810, 0x1819,\r
+0x1820, 0x1878,\r
+0x1880, 0x18aa,\r
+0x18b0, 0x18f5,\r
+0x1900, 0x191e,\r
+0x1920, 0x192b,\r
+0x1930, 0x193b,\r
+0x1946, 0x196d,\r
+0x1970, 0x1974,\r
+0x1980, 0x19ab,\r
+0x19b0, 0x19c9,\r
+0x19d0, 0x19d9,\r
+0x1a00, 0x1a1b,\r
+0x1a20, 0x1a5e,\r
+0x1a60, 0x1a7c,\r
+0x1a7f, 0x1a89,\r
+0x1a90, 0x1a99,\r
+0x1aa7, 0x1aa7,\r
+0x1ab0, 0x1abe,\r
+0x1b00, 0x1b4b,\r
+0x1b50, 0x1b59,\r
+0x1b6b, 0x1b73,\r
+0x1b80, 0x1bf3,\r
+0x1c00, 0x1c37,\r
+0x1c40, 0x1c49,\r
+0x1c4d, 0x1c7d,\r
+0x1c80, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cbf,\r
+0x1cd0, 0x1cd2,\r
+0x1cd4, 0x1cf9,\r
+0x1d00, 0x1df9,\r
+0x1dfb, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fbc,\r
+0x1fbe, 0x1fbe,\r
+0x1fc2, 0x1fc4,\r
+0x1fc6, 0x1fcc,\r
+0x1fd0, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fe0, 0x1fec,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffc,\r
+0x203f, 0x2040,\r
+0x2054, 0x2054,\r
+0x2071, 0x2071,\r
+0x207f, 0x207f,\r
+0x2090, 0x209c,\r
+0x20d0, 0x20f0,\r
+0x2102, 0x2102,\r
+0x2107, 0x2107,\r
+0x210a, 0x2113,\r
+0x2115, 0x2115,\r
+0x2119, 0x211d,\r
+0x2124, 0x2124,\r
+0x2126, 0x2126,\r
+0x2128, 0x2128,\r
+0x212a, 0x212d,\r
+0x212f, 0x2139,\r
+0x213c, 0x213f,\r
+0x2145, 0x2149,\r
+0x214e, 0x214e,\r
+0x2160, 0x2188,\r
+0x24b6, 0x24e9,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x2c60, 0x2ce4,\r
+0x2ceb, 0x2cf3,\r
+0x2d00, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0x2d30, 0x2d67,\r
+0x2d6f, 0x2d6f,\r
+0x2d7f, 0x2d96,\r
+0x2da0, 0x2da6,\r
+0x2da8, 0x2dae,\r
+0x2db0, 0x2db6,\r
+0x2db8, 0x2dbe,\r
+0x2dc0, 0x2dc6,\r
+0x2dc8, 0x2dce,\r
+0x2dd0, 0x2dd6,\r
+0x2dd8, 0x2dde,\r
+0x2de0, 0x2dff,\r
+0x2e2f, 0x2e2f,\r
+0x3005, 0x3007,\r
+0x3021, 0x302f,\r
+0x3031, 0x3035,\r
+0x3038, 0x303c,\r
+0x3041, 0x3096,\r
+0x3099, 0x309a,\r
+0x309d, 0x309f,\r
+0x30a1, 0x30fa,\r
+0x30fc, 0x30ff,\r
+0x3105, 0x312f,\r
+0x3131, 0x318e,\r
+0x31a0, 0x31ba,\r
+0x31f0, 0x31ff,\r
+0x3400, 0x4db5,\r
+0x4e00, 0x9fef,\r
+0xa000, 0xa48c,\r
+0xa4d0, 0xa4fd,\r
+0xa500, 0xa60c,\r
+0xa610, 0xa62b,\r
+0xa640, 0xa672,\r
+0xa674, 0xa67d,\r
+0xa67f, 0xa6f1,\r
+0xa717, 0xa71f,\r
+0xa722, 0xa788,\r
+0xa78b, 0xa7b9,\r
+0xa7f7, 0xa827,\r
+0xa840, 0xa873,\r
+0xa880, 0xa8c5,\r
+0xa8d0, 0xa8d9,\r
+0xa8e0, 0xa8f7,\r
+0xa8fb, 0xa8fb,\r
+0xa8fd, 0xa92d,\r
+0xa930, 0xa953,\r
+0xa960, 0xa97c,\r
+0xa980, 0xa9c0,\r
+0xa9cf, 0xa9d9,\r
+0xa9e0, 0xa9fe,\r
+0xaa00, 0xaa36,\r
+0xaa40, 0xaa4d,\r
+0xaa50, 0xaa59,\r
+0xaa60, 0xaa76,\r
+0xaa7a, 0xaac2,\r
+0xaadb, 0xaadd,\r
+0xaae0, 0xaaef,\r
+0xaaf2, 0xaaf6,\r
+0xab01, 0xab06,\r
+0xab09, 0xab0e,\r
+0xab11, 0xab16,\r
+0xab20, 0xab26,\r
+0xab28, 0xab2e,\r
+0xab30, 0xab5a,\r
+0xab5c, 0xab65,\r
+0xab70, 0xabea,\r
+0xabec, 0xabed,\r
+0xabf0, 0xabf9,\r
+0xac00, 0xd7a3,\r
+0xd7b0, 0xd7c6,\r
+0xd7cb, 0xd7fb,\r
+0xf900, 0xfa6d,\r
+0xfa70, 0xfad9,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xfb1d, 0xfb28,\r
+0xfb2a, 0xfb36,\r
+0xfb38, 0xfb3c,\r
+0xfb3e, 0xfb3e,\r
+0xfb40, 0xfb41,\r
+0xfb43, 0xfb44,\r
+0xfb46, 0xfbb1,\r
+0xfbd3, 0xfd3d,\r
+0xfd50, 0xfd8f,\r
+0xfd92, 0xfdc7,\r
+0xfdf0, 0xfdfb,\r
+0xfe00, 0xfe0f,\r
+0xfe20, 0xfe2f,\r
+0xfe33, 0xfe34,\r
+0xfe4d, 0xfe4f,\r
+0xfe70, 0xfe74,\r
+0xfe76, 0xfefc,\r
+0xff10, 0xff19,\r
+0xff21, 0xff3a,\r
+0xff3f, 0xff3f,\r
+0xff41, 0xff5a,\r
+0xff66, 0xffbe,\r
+0xffc2, 0xffc7,\r
+0xffca, 0xffcf,\r
+0xffd2, 0xffd7,\r
+0xffda, 0xffdc,\r
+0x10000, 0x1000b,\r
+0x1000d, 0x10026,\r
+0x10028, 0x1003a,\r
+0x1003c, 0x1003d,\r
+0x1003f, 0x1004d,\r
+0x10050, 0x1005d,\r
+0x10080, 0x100fa,\r
+0x10140, 0x10174,\r
+0x101fd, 0x101fd,\r
+0x10280, 0x1029c,\r
+0x102a0, 0x102d0,\r
+0x102e0, 0x102e0,\r
+0x10300, 0x1031f,\r
+0x1032d, 0x1034a,\r
+0x10350, 0x1037a,\r
+0x10380, 0x1039d,\r
+0x103a0, 0x103c3,\r
+0x103c8, 0x103cf,\r
+0x103d1, 0x103d5,\r
+0x10400, 0x1049d,\r
+0x104a0, 0x104a9,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+0x10500, 0x10527,\r
+0x10530, 0x10563,\r
+0x10600, 0x10736,\r
+0x10740, 0x10755,\r
+0x10760, 0x10767,\r
+0x10800, 0x10805,\r
+0x10808, 0x10808,\r
+0x1080a, 0x10835,\r
+0x10837, 0x10838,\r
+0x1083c, 0x1083c,\r
+0x1083f, 0x10855,\r
+0x10860, 0x10876,\r
+0x10880, 0x1089e,\r
+0x108e0, 0x108f2,\r
+0x108f4, 0x108f5,\r
+0x10900, 0x10915,\r
+0x10920, 0x10939,\r
+0x10980, 0x109b7,\r
+0x109be, 0x109bf,\r
+0x10a00, 0x10a03,\r
+0x10a05, 0x10a06,\r
+0x10a0c, 0x10a13,\r
+0x10a15, 0x10a17,\r
+0x10a19, 0x10a35,\r
+0x10a38, 0x10a3a,\r
+0x10a3f, 0x10a3f,\r
+0x10a60, 0x10a7c,\r
+0x10a80, 0x10a9c,\r
+0x10ac0, 0x10ac7,\r
+0x10ac9, 0x10ae6,\r
+0x10b00, 0x10b35,\r
+0x10b40, 0x10b55,\r
+0x10b60, 0x10b72,\r
+0x10b80, 0x10b91,\r
+0x10c00, 0x10c48,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x10d00, 0x10d27,\r
+0x10d30, 0x10d39,\r
+0x10f00, 0x10f1c,\r
+0x10f27, 0x10f27,\r
+0x10f30, 0x10f50,\r
+0x11000, 0x11046,\r
+0x11066, 0x1106f,\r
+0x1107f, 0x110ba,\r
+0x110d0, 0x110e8,\r
+0x110f0, 0x110f9,\r
+0x11100, 0x11134,\r
+0x11136, 0x1113f,\r
+0x11144, 0x11146,\r
+0x11150, 0x11173,\r
+0x11176, 0x11176,\r
+0x11180, 0x111c4,\r
+0x111c9, 0x111cc,\r
+0x111d0, 0x111da,\r
+0x111dc, 0x111dc,\r
+0x11200, 0x11211,\r
+0x11213, 0x11237,\r
+0x1123e, 0x1123e,\r
+0x11280, 0x11286,\r
+0x11288, 0x11288,\r
+0x1128a, 0x1128d,\r
+0x1128f, 0x1129d,\r
+0x1129f, 0x112a8,\r
+0x112b0, 0x112ea,\r
+0x112f0, 0x112f9,\r
+0x11300, 0x11303,\r
+0x11305, 0x1130c,\r
+0x1130f, 0x11310,\r
+0x11313, 0x11328,\r
+0x1132a, 0x11330,\r
+0x11332, 0x11333,\r
+0x11335, 0x11339,\r
+0x1133b, 0x11344,\r
+0x11347, 0x11348,\r
+0x1134b, 0x1134d,\r
+0x11350, 0x11350,\r
+0x11357, 0x11357,\r
+0x1135d, 0x11363,\r
+0x11366, 0x1136c,\r
+0x11370, 0x11374,\r
+0x11400, 0x1144a,\r
+0x11450, 0x11459,\r
+0x1145e, 0x1145e,\r
+0x11480, 0x114c5,\r
+0x114c7, 0x114c7,\r
+0x114d0, 0x114d9,\r
+0x11580, 0x115b5,\r
+0x115b8, 0x115c0,\r
+0x115d8, 0x115dd,\r
+0x11600, 0x11640,\r
+0x11644, 0x11644,\r
+0x11650, 0x11659,\r
+0x11680, 0x116b7,\r
+0x116c0, 0x116c9,\r
+0x11700, 0x1171a,\r
+0x1171d, 0x1172b,\r
+0x11730, 0x11739,\r
+0x11800, 0x1183a,\r
+0x118a0, 0x118e9,\r
+0x118ff, 0x118ff,\r
+0x11a00, 0x11a3e,\r
+0x11a47, 0x11a47,\r
+0x11a50, 0x11a83,\r
+0x11a86, 0x11a99,\r
+0x11a9d, 0x11a9d,\r
+0x11ac0, 0x11af8,\r
+0x11c00, 0x11c08,\r
+0x11c0a, 0x11c36,\r
+0x11c38, 0x11c40,\r
+0x11c50, 0x11c59,\r
+0x11c72, 0x11c8f,\r
+0x11c92, 0x11ca7,\r
+0x11ca9, 0x11cb6,\r
+0x11d00, 0x11d06,\r
+0x11d08, 0x11d09,\r
+0x11d0b, 0x11d36,\r
+0x11d3a, 0x11d3a,\r
+0x11d3c, 0x11d3d,\r
+0x11d3f, 0x11d47,\r
+0x11d50, 0x11d59,\r
+0x11d60, 0x11d65,\r
+0x11d67, 0x11d68,\r
+0x11d6a, 0x11d8e,\r
+0x11d90, 0x11d91,\r
+0x11d93, 0x11d98,\r
+0x11da0, 0x11da9,\r
+0x11ee0, 0x11ef6,\r
+0x12000, 0x12399,\r
+0x12400, 0x1246e,\r
+0x12480, 0x12543,\r
+0x13000, 0x1342e,\r
+0x14400, 0x14646,\r
+0x16800, 0x16a38,\r
+0x16a40, 0x16a5e,\r
+0x16a60, 0x16a69,\r
+0x16ad0, 0x16aed,\r
+0x16af0, 0x16af4,\r
+0x16b00, 0x16b36,\r
+0x16b40, 0x16b43,\r
+0x16b50, 0x16b59,\r
+0x16b63, 0x16b77,\r
+0x16b7d, 0x16b8f,\r
+0x16e40, 0x16e7f,\r
+0x16f00, 0x16f44,\r
+0x16f50, 0x16f7e,\r
+0x16f8f, 0x16f9f,\r
+0x16fe0, 0x16fe1,\r
+0x17000, 0x187f1,\r
+0x18800, 0x18af2,\r
+0x1b000, 0x1b11e,\r
+0x1b170, 0x1b2fb,\r
+0x1bc00, 0x1bc6a,\r
+0x1bc70, 0x1bc7c,\r
+0x1bc80, 0x1bc88,\r
+0x1bc90, 0x1bc99,\r
+0x1bc9d, 0x1bc9e,\r
+0x1d165, 0x1d169,\r
+0x1d16d, 0x1d172,\r
+0x1d17b, 0x1d182,\r
+0x1d185, 0x1d18b,\r
+0x1d1aa, 0x1d1ad,\r
+0x1d242, 0x1d244,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d6c0,\r
+0x1d6c2, 0x1d6da,\r
+0x1d6dc, 0x1d6fa,\r
+0x1d6fc, 0x1d714,\r
+0x1d716, 0x1d734,\r
+0x1d736, 0x1d74e,\r
+0x1d750, 0x1d76e,\r
+0x1d770, 0x1d788,\r
+0x1d78a, 0x1d7a8,\r
+0x1d7aa, 0x1d7c2,\r
+0x1d7c4, 0x1d7cb,\r
+0x1d7ce, 0x1d7ff,\r
+0x1da00, 0x1da36,\r
+0x1da3b, 0x1da6c,\r
+0x1da75, 0x1da75,\r
+0x1da84, 0x1da84,\r
+0x1da9b, 0x1da9f,\r
+0x1daa1, 0x1daaf,\r
+0x1e000, 0x1e006,\r
+0x1e008, 0x1e018,\r
+0x1e01b, 0x1e021,\r
+0x1e023, 0x1e024,\r
+0x1e026, 0x1e02a,\r
+0x1e800, 0x1e8c4,\r
+0x1e8d0, 0x1e8d6,\r
+0x1e900, 0x1e94a,\r
+0x1e950, 0x1e959,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+0x1f130, 0x1f149,\r
+0x1f150, 0x1f169,\r
+0x1f170, 0x1f189,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+0x2f800, 0x2fa1d,\r
+0xe0100, 0xe01ef,\r
+}; /* END of CR_Word */\r
+\r
+/* PROPERTY: 'Alnum': POSIX [[:Alnum:]] */\r
+static const OnigCodePoint\r
+CR_Alnum[] = { 713,\r
+0x0030, 0x0039,\r
+0x0041, 0x005a,\r
+0x0061, 0x007a,\r
+0x00aa, 0x00aa,\r
+0x00b5, 0x00b5,\r
+0x00ba, 0x00ba,\r
+0x00c0, 0x00d6,\r
+0x00d8, 0x00f6,\r
+0x00f8, 0x02c1,\r
+0x02c6, 0x02d1,\r
+0x02e0, 0x02e4,\r
+0x02ec, 0x02ec,\r
+0x02ee, 0x02ee,\r
+0x0345, 0x0345,\r
+0x0370, 0x0374,\r
+0x0376, 0x0377,\r
+0x037a, 0x037d,\r
+0x037f, 0x037f,\r
+0x0386, 0x0386,\r
+0x0388, 0x038a,\r
+0x038c, 0x038c,\r
+0x038e, 0x03a1,\r
+0x03a3, 0x03f5,\r
+0x03f7, 0x0481,\r
+0x048a, 0x052f,\r
+0x0531, 0x0556,\r
+0x0559, 0x0559,\r
+0x0560, 0x0588,\r
+0x05b0, 0x05bd,\r
+0x05bf, 0x05bf,\r
+0x05c1, 0x05c2,\r
+0x05c4, 0x05c5,\r
+0x05c7, 0x05c7,\r
+0x05d0, 0x05ea,\r
+0x05ef, 0x05f2,\r
+0x0610, 0x061a,\r
+0x0620, 0x0657,\r
+0x0659, 0x0669,\r
+0x066e, 0x06d3,\r
+0x06d5, 0x06dc,\r
+0x06e1, 0x06e8,\r
+0x06ed, 0x06fc,\r
+0x06ff, 0x06ff,\r
+0x0710, 0x073f,\r
+0x074d, 0x07b1,\r
+0x07c0, 0x07ea,\r
+0x07f4, 0x07f5,\r
+0x07fa, 0x07fa,\r
+0x0800, 0x0817,\r
+0x081a, 0x082c,\r
+0x0840, 0x0858,\r
+0x0860, 0x086a,\r
+0x08a0, 0x08b4,\r
+0x08b6, 0x08bd,\r
+0x08d4, 0x08df,\r
+0x08e3, 0x08e9,\r
+0x08f0, 0x093b,\r
+0x093d, 0x094c,\r
+0x094e, 0x0950,\r
+0x0955, 0x0963,\r
+0x0966, 0x096f,\r
+0x0971, 0x0983,\r
+0x0985, 0x098c,\r
+0x098f, 0x0990,\r
+0x0993, 0x09a8,\r
+0x09aa, 0x09b0,\r
+0x09b2, 0x09b2,\r
+0x09b6, 0x09b9,\r
+0x09bd, 0x09c4,\r
+0x09c7, 0x09c8,\r
+0x09cb, 0x09cc,\r
+0x09ce, 0x09ce,\r
+0x09d7, 0x09d7,\r
+0x09dc, 0x09dd,\r
+0x09df, 0x09e3,\r
+0x09e6, 0x09f1,\r
+0x09fc, 0x09fc,\r
+0x0a01, 0x0a03,\r
+0x0a05, 0x0a0a,\r
+0x0a0f, 0x0a10,\r
+0x0a13, 0x0a28,\r
+0x0a2a, 0x0a30,\r
+0x0a32, 0x0a33,\r
+0x0a35, 0x0a36,\r
+0x0a38, 0x0a39,\r
+0x0a3e, 0x0a42,\r
+0x0a47, 0x0a48,\r
+0x0a4b, 0x0a4c,\r
+0x0a51, 0x0a51,\r
+0x0a59, 0x0a5c,\r
+0x0a5e, 0x0a5e,\r
+0x0a66, 0x0a75,\r
+0x0a81, 0x0a83,\r
+0x0a85, 0x0a8d,\r
+0x0a8f, 0x0a91,\r
+0x0a93, 0x0aa8,\r
+0x0aaa, 0x0ab0,\r
+0x0ab2, 0x0ab3,\r
+0x0ab5, 0x0ab9,\r
+0x0abd, 0x0ac5,\r
+0x0ac7, 0x0ac9,\r
+0x0acb, 0x0acc,\r
+0x0ad0, 0x0ad0,\r
+0x0ae0, 0x0ae3,\r
+0x0ae6, 0x0aef,\r
+0x0af9, 0x0afc,\r
+0x0b01, 0x0b03,\r
+0x0b05, 0x0b0c,\r
+0x0b0f, 0x0b10,\r
+0x0b13, 0x0b28,\r
+0x0b2a, 0x0b30,\r
+0x0b32, 0x0b33,\r
+0x0b35, 0x0b39,\r
+0x0b3d, 0x0b44,\r
+0x0b47, 0x0b48,\r
+0x0b4b, 0x0b4c,\r
+0x0b56, 0x0b57,\r
+0x0b5c, 0x0b5d,\r
+0x0b5f, 0x0b63,\r
+0x0b66, 0x0b6f,\r
+0x0b71, 0x0b71,\r
+0x0b82, 0x0b83,\r
+0x0b85, 0x0b8a,\r
+0x0b8e, 0x0b90,\r
+0x0b92, 0x0b95,\r
+0x0b99, 0x0b9a,\r
+0x0b9c, 0x0b9c,\r
+0x0b9e, 0x0b9f,\r
+0x0ba3, 0x0ba4,\r
+0x0ba8, 0x0baa,\r
+0x0bae, 0x0bb9,\r
+0x0bbe, 0x0bc2,\r
+0x0bc6, 0x0bc8,\r
+0x0bca, 0x0bcc,\r
+0x0bd0, 0x0bd0,\r
+0x0bd7, 0x0bd7,\r
+0x0be6, 0x0bef,\r
+0x0c00, 0x0c03,\r
+0x0c05, 0x0c0c,\r
+0x0c0e, 0x0c10,\r
+0x0c12, 0x0c28,\r
+0x0c2a, 0x0c39,\r
+0x0c3d, 0x0c44,\r
+0x0c46, 0x0c48,\r
+0x0c4a, 0x0c4c,\r
+0x0c55, 0x0c56,\r
+0x0c58, 0x0c5a,\r
+0x0c60, 0x0c63,\r
+0x0c66, 0x0c6f,\r
+0x0c80, 0x0c83,\r
+0x0c85, 0x0c8c,\r
+0x0c8e, 0x0c90,\r
+0x0c92, 0x0ca8,\r
+0x0caa, 0x0cb3,\r
+0x0cb5, 0x0cb9,\r
+0x0cbd, 0x0cc4,\r
+0x0cc6, 0x0cc8,\r
+0x0cca, 0x0ccc,\r
+0x0cd5, 0x0cd6,\r
+0x0cde, 0x0cde,\r
+0x0ce0, 0x0ce3,\r
+0x0ce6, 0x0cef,\r
+0x0cf1, 0x0cf2,\r
+0x0d00, 0x0d03,\r
+0x0d05, 0x0d0c,\r
+0x0d0e, 0x0d10,\r
+0x0d12, 0x0d3a,\r
+0x0d3d, 0x0d44,\r
+0x0d46, 0x0d48,\r
+0x0d4a, 0x0d4c,\r
+0x0d4e, 0x0d4e,\r
+0x0d54, 0x0d57,\r
+0x0d5f, 0x0d63,\r
+0x0d66, 0x0d6f,\r
+0x0d7a, 0x0d7f,\r
+0x0d82, 0x0d83,\r
+0x0d85, 0x0d96,\r
+0x0d9a, 0x0db1,\r
+0x0db3, 0x0dbb,\r
+0x0dbd, 0x0dbd,\r
+0x0dc0, 0x0dc6,\r
+0x0dcf, 0x0dd4,\r
+0x0dd6, 0x0dd6,\r
+0x0dd8, 0x0ddf,\r
+0x0de6, 0x0def,\r
+0x0df2, 0x0df3,\r
+0x0e01, 0x0e3a,\r
+0x0e40, 0x0e46,\r
+0x0e4d, 0x0e4d,\r
+0x0e50, 0x0e59,\r
+0x0e81, 0x0e82,\r
+0x0e84, 0x0e84,\r
+0x0e87, 0x0e88,\r
+0x0e8a, 0x0e8a,\r
+0x0e8d, 0x0e8d,\r
+0x0e94, 0x0e97,\r
+0x0e99, 0x0e9f,\r
+0x0ea1, 0x0ea3,\r
+0x0ea5, 0x0ea5,\r
+0x0ea7, 0x0ea7,\r
+0x0eaa, 0x0eab,\r
+0x0ead, 0x0eb9,\r
+0x0ebb, 0x0ebd,\r
+0x0ec0, 0x0ec4,\r
+0x0ec6, 0x0ec6,\r
+0x0ecd, 0x0ecd,\r
+0x0ed0, 0x0ed9,\r
+0x0edc, 0x0edf,\r
+0x0f00, 0x0f00,\r
+0x0f20, 0x0f29,\r
+0x0f40, 0x0f47,\r
+0x0f49, 0x0f6c,\r
+0x0f71, 0x0f81,\r
+0x0f88, 0x0f97,\r
+0x0f99, 0x0fbc,\r
+0x1000, 0x1036,\r
+0x1038, 0x1038,\r
+0x103b, 0x1049,\r
+0x1050, 0x1062,\r
+0x1065, 0x1068,\r
+0x106e, 0x1086,\r
+0x108e, 0x108e,\r
+0x1090, 0x1099,\r
+0x109c, 0x109d,\r
+0x10a0, 0x10c5,\r
+0x10c7, 0x10c7,\r
+0x10cd, 0x10cd,\r
+0x10d0, 0x10fa,\r
+0x10fc, 0x1248,\r
+0x124a, 0x124d,\r
+0x1250, 0x1256,\r
+0x1258, 0x1258,\r
+0x125a, 0x125d,\r
+0x1260, 0x1288,\r
+0x128a, 0x128d,\r
+0x1290, 0x12b0,\r
+0x12b2, 0x12b5,\r
+0x12b8, 0x12be,\r
+0x12c0, 0x12c0,\r
+0x12c2, 0x12c5,\r
+0x12c8, 0x12d6,\r
+0x12d8, 0x1310,\r
+0x1312, 0x1315,\r
+0x1318, 0x135a,\r
+0x135f, 0x135f,\r
+0x1380, 0x138f,\r
+0x13a0, 0x13f5,\r
+0x13f8, 0x13fd,\r
+0x1401, 0x166c,\r
+0x166f, 0x167f,\r
+0x1681, 0x169a,\r
+0x16a0, 0x16ea,\r
+0x16ee, 0x16f8,\r
+0x1700, 0x170c,\r
+0x170e, 0x1713,\r
+0x1720, 0x1733,\r
+0x1740, 0x1753,\r
+0x1760, 0x176c,\r
+0x176e, 0x1770,\r
+0x1772, 0x1773,\r
+0x1780, 0x17b3,\r
+0x17b6, 0x17c8,\r
+0x17d7, 0x17d7,\r
+0x17dc, 0x17dc,\r
+0x17e0, 0x17e9,\r
+0x1810, 0x1819,\r
+0x1820, 0x1878,\r
+0x1880, 0x18aa,\r
+0x18b0, 0x18f5,\r
+0x1900, 0x191e,\r
+0x1920, 0x192b,\r
+0x1930, 0x1938,\r
+0x1946, 0x196d,\r
+0x1970, 0x1974,\r
+0x1980, 0x19ab,\r
+0x19b0, 0x19c9,\r
+0x19d0, 0x19d9,\r
+0x1a00, 0x1a1b,\r
+0x1a20, 0x1a5e,\r
+0x1a61, 0x1a74,\r
+0x1a80, 0x1a89,\r
+0x1a90, 0x1a99,\r
+0x1aa7, 0x1aa7,\r
+0x1b00, 0x1b33,\r
+0x1b35, 0x1b43,\r
+0x1b45, 0x1b4b,\r
+0x1b50, 0x1b59,\r
+0x1b80, 0x1ba9,\r
+0x1bac, 0x1be5,\r
+0x1be7, 0x1bf1,\r
+0x1c00, 0x1c35,\r
+0x1c40, 0x1c49,\r
+0x1c4d, 0x1c7d,\r
+0x1c80, 0x1c88,\r
+0x1c90, 0x1cba,\r
+0x1cbd, 0x1cbf,\r
+0x1ce9, 0x1cec,\r
+0x1cee, 0x1cf3,\r
+0x1cf5, 0x1cf6,\r
+0x1d00, 0x1dbf,\r
+0x1de7, 0x1df4,\r
+0x1e00, 0x1f15,\r
+0x1f18, 0x1f1d,\r
+0x1f20, 0x1f45,\r
+0x1f48, 0x1f4d,\r
+0x1f50, 0x1f57,\r
+0x1f59, 0x1f59,\r
+0x1f5b, 0x1f5b,\r
+0x1f5d, 0x1f5d,\r
+0x1f5f, 0x1f7d,\r
+0x1f80, 0x1fb4,\r
+0x1fb6, 0x1fbc,\r
+0x1fbe, 0x1fbe,\r
+0x1fc2, 0x1fc4,\r
+0x1fc6, 0x1fcc,\r
+0x1fd0, 0x1fd3,\r
+0x1fd6, 0x1fdb,\r
+0x1fe0, 0x1fec,\r
+0x1ff2, 0x1ff4,\r
+0x1ff6, 0x1ffc,\r
+0x2071, 0x2071,\r
+0x207f, 0x207f,\r
+0x2090, 0x209c,\r
+0x2102, 0x2102,\r
+0x2107, 0x2107,\r
+0x210a, 0x2113,\r
+0x2115, 0x2115,\r
+0x2119, 0x211d,\r
+0x2124, 0x2124,\r
+0x2126, 0x2126,\r
+0x2128, 0x2128,\r
+0x212a, 0x212d,\r
+0x212f, 0x2139,\r
+0x213c, 0x213f,\r
+0x2145, 0x2149,\r
+0x214e, 0x214e,\r
+0x2160, 0x2188,\r
+0x24b6, 0x24e9,\r
+0x2c00, 0x2c2e,\r
+0x2c30, 0x2c5e,\r
+0x2c60, 0x2ce4,\r
+0x2ceb, 0x2cee,\r
+0x2cf2, 0x2cf3,\r
+0x2d00, 0x2d25,\r
+0x2d27, 0x2d27,\r
+0x2d2d, 0x2d2d,\r
+0x2d30, 0x2d67,\r
+0x2d6f, 0x2d6f,\r
+0x2d80, 0x2d96,\r
+0x2da0, 0x2da6,\r
+0x2da8, 0x2dae,\r
+0x2db0, 0x2db6,\r
+0x2db8, 0x2dbe,\r
+0x2dc0, 0x2dc6,\r
+0x2dc8, 0x2dce,\r
+0x2dd0, 0x2dd6,\r
+0x2dd8, 0x2dde,\r
+0x2de0, 0x2dff,\r
+0x2e2f, 0x2e2f,\r
+0x3005, 0x3007,\r
+0x3021, 0x3029,\r
+0x3031, 0x3035,\r
+0x3038, 0x303c,\r
+0x3041, 0x3096,\r
+0x309d, 0x309f,\r
+0x30a1, 0x30fa,\r
+0x30fc, 0x30ff,\r
+0x3105, 0x312f,\r
+0x3131, 0x318e,\r
+0x31a0, 0x31ba,\r
+0x31f0, 0x31ff,\r
+0x3400, 0x4db5,\r
+0x4e00, 0x9fef,\r
+0xa000, 0xa48c,\r
+0xa4d0, 0xa4fd,\r
+0xa500, 0xa60c,\r
+0xa610, 0xa62b,\r
+0xa640, 0xa66e,\r
+0xa674, 0xa67b,\r
+0xa67f, 0xa6ef,\r
+0xa717, 0xa71f,\r
+0xa722, 0xa788,\r
+0xa78b, 0xa7b9,\r
+0xa7f7, 0xa801,\r
+0xa803, 0xa805,\r
+0xa807, 0xa80a,\r
+0xa80c, 0xa827,\r
+0xa840, 0xa873,\r
+0xa880, 0xa8c3,\r
+0xa8c5, 0xa8c5,\r
+0xa8d0, 0xa8d9,\r
+0xa8f2, 0xa8f7,\r
+0xa8fb, 0xa8fb,\r
+0xa8fd, 0xa8fe,\r
+0xa900, 0xa92a,\r
+0xa930, 0xa952,\r
+0xa960, 0xa97c,\r
+0xa980, 0xa9b2,\r
+0xa9b4, 0xa9bf,\r
+0xa9cf, 0xa9d9,\r
+0xa9e0, 0xa9e4,\r
+0xa9e6, 0xa9fe,\r
+0xaa00, 0xaa36,\r
+0xaa40, 0xaa4d,\r
+0xaa50, 0xaa59,\r
+0xaa60, 0xaa76,\r
+0xaa7a, 0xaa7a,\r
+0xaa7e, 0xaabe,\r
+0xaac0, 0xaac0,\r
+0xaac2, 0xaac2,\r
+0xaadb, 0xaadd,\r
+0xaae0, 0xaaef,\r
+0xaaf2, 0xaaf5,\r
+0xab01, 0xab06,\r
+0xab09, 0xab0e,\r
+0xab11, 0xab16,\r
+0xab20, 0xab26,\r
+0xab28, 0xab2e,\r
+0xab30, 0xab5a,\r
+0xab5c, 0xab65,\r
+0xab70, 0xabea,\r
+0xabf0, 0xabf9,\r
+0xac00, 0xd7a3,\r
+0xd7b0, 0xd7c6,\r
+0xd7cb, 0xd7fb,\r
+0xf900, 0xfa6d,\r
+0xfa70, 0xfad9,\r
+0xfb00, 0xfb06,\r
+0xfb13, 0xfb17,\r
+0xfb1d, 0xfb28,\r
+0xfb2a, 0xfb36,\r
+0xfb38, 0xfb3c,\r
+0xfb3e, 0xfb3e,\r
+0xfb40, 0xfb41,\r
+0xfb43, 0xfb44,\r
+0xfb46, 0xfbb1,\r
+0xfbd3, 0xfd3d,\r
+0xfd50, 0xfd8f,\r
+0xfd92, 0xfdc7,\r
+0xfdf0, 0xfdfb,\r
+0xfe70, 0xfe74,\r
+0xfe76, 0xfefc,\r
+0xff10, 0xff19,\r
+0xff21, 0xff3a,\r
+0xff41, 0xff5a,\r
+0xff66, 0xffbe,\r
+0xffc2, 0xffc7,\r
+0xffca, 0xffcf,\r
+0xffd2, 0xffd7,\r
+0xffda, 0xffdc,\r
+0x10000, 0x1000b,\r
+0x1000d, 0x10026,\r
+0x10028, 0x1003a,\r
+0x1003c, 0x1003d,\r
+0x1003f, 0x1004d,\r
+0x10050, 0x1005d,\r
+0x10080, 0x100fa,\r
+0x10140, 0x10174,\r
+0x10280, 0x1029c,\r
+0x102a0, 0x102d0,\r
+0x10300, 0x1031f,\r
+0x1032d, 0x1034a,\r
+0x10350, 0x1037a,\r
+0x10380, 0x1039d,\r
+0x103a0, 0x103c3,\r
+0x103c8, 0x103cf,\r
+0x103d1, 0x103d5,\r
+0x10400, 0x1049d,\r
+0x104a0, 0x104a9,\r
+0x104b0, 0x104d3,\r
+0x104d8, 0x104fb,\r
+0x10500, 0x10527,\r
+0x10530, 0x10563,\r
+0x10600, 0x10736,\r
+0x10740, 0x10755,\r
+0x10760, 0x10767,\r
+0x10800, 0x10805,\r
+0x10808, 0x10808,\r
+0x1080a, 0x10835,\r
+0x10837, 0x10838,\r
+0x1083c, 0x1083c,\r
+0x1083f, 0x10855,\r
+0x10860, 0x10876,\r
+0x10880, 0x1089e,\r
+0x108e0, 0x108f2,\r
+0x108f4, 0x108f5,\r
+0x10900, 0x10915,\r
+0x10920, 0x10939,\r
+0x10980, 0x109b7,\r
+0x109be, 0x109bf,\r
+0x10a00, 0x10a03,\r
+0x10a05, 0x10a06,\r
+0x10a0c, 0x10a13,\r
+0x10a15, 0x10a17,\r
+0x10a19, 0x10a35,\r
+0x10a60, 0x10a7c,\r
+0x10a80, 0x10a9c,\r
+0x10ac0, 0x10ac7,\r
+0x10ac9, 0x10ae4,\r
+0x10b00, 0x10b35,\r
+0x10b40, 0x10b55,\r
+0x10b60, 0x10b72,\r
+0x10b80, 0x10b91,\r
+0x10c00, 0x10c48,\r
+0x10c80, 0x10cb2,\r
+0x10cc0, 0x10cf2,\r
+0x10d00, 0x10d27,\r
+0x10d30, 0x10d39,\r
+0x10f00, 0x10f1c,\r
+0x10f27, 0x10f27,\r
+0x10f30, 0x10f45,\r
+0x11000, 0x11045,\r
+0x11066, 0x1106f,\r
+0x11082, 0x110b8,\r
+0x110d0, 0x110e8,\r
+0x110f0, 0x110f9,\r
+0x11100, 0x11132,\r
+0x11136, 0x1113f,\r
+0x11144, 0x11146,\r
+0x11150, 0x11172,\r
+0x11176, 0x11176,\r
+0x11180, 0x111bf,\r
+0x111c1, 0x111c4,\r
+0x111d0, 0x111da,\r
+0x111dc, 0x111dc,\r
+0x11200, 0x11211,\r
+0x11213, 0x11234,\r
+0x11237, 0x11237,\r
+0x1123e, 0x1123e,\r
+0x11280, 0x11286,\r
+0x11288, 0x11288,\r
+0x1128a, 0x1128d,\r
+0x1128f, 0x1129d,\r
+0x1129f, 0x112a8,\r
+0x112b0, 0x112e8,\r
+0x112f0, 0x112f9,\r
+0x11300, 0x11303,\r
+0x11305, 0x1130c,\r
+0x1130f, 0x11310,\r
+0x11313, 0x11328,\r
+0x1132a, 0x11330,\r
+0x11332, 0x11333,\r
+0x11335, 0x11339,\r
+0x1133d, 0x11344,\r
+0x11347, 0x11348,\r
+0x1134b, 0x1134c,\r
+0x11350, 0x11350,\r
+0x11357, 0x11357,\r
+0x1135d, 0x11363,\r
+0x11400, 0x11441,\r
+0x11443, 0x11445,\r
+0x11447, 0x1144a,\r
+0x11450, 0x11459,\r
+0x11480, 0x114c1,\r
+0x114c4, 0x114c5,\r
+0x114c7, 0x114c7,\r
+0x114d0, 0x114d9,\r
+0x11580, 0x115b5,\r
+0x115b8, 0x115be,\r
+0x115d8, 0x115dd,\r
+0x11600, 0x1163e,\r
+0x11640, 0x11640,\r
+0x11644, 0x11644,\r
+0x11650, 0x11659,\r
+0x11680, 0x116b5,\r
+0x116c0, 0x116c9,\r
+0x11700, 0x1171a,\r
+0x1171d, 0x1172a,\r
+0x11730, 0x11739,\r
+0x11800, 0x11838,\r
+0x118a0, 0x118e9,\r
+0x118ff, 0x118ff,\r
+0x11a00, 0x11a32,\r
+0x11a35, 0x11a3e,\r
+0x11a50, 0x11a83,\r
+0x11a86, 0x11a97,\r
+0x11a9d, 0x11a9d,\r
+0x11ac0, 0x11af8,\r
+0x11c00, 0x11c08,\r
+0x11c0a, 0x11c36,\r
+0x11c38, 0x11c3e,\r
+0x11c40, 0x11c40,\r
+0x11c50, 0x11c59,\r
+0x11c72, 0x11c8f,\r
+0x11c92, 0x11ca7,\r
+0x11ca9, 0x11cb6,\r
+0x11d00, 0x11d06,\r
+0x11d08, 0x11d09,\r
+0x11d0b, 0x11d36,\r
+0x11d3a, 0x11d3a,\r
+0x11d3c, 0x11d3d,\r
+0x11d3f, 0x11d41,\r
+0x11d43, 0x11d43,\r
+0x11d46, 0x11d47,\r
+0x11d50, 0x11d59,\r
+0x11d60, 0x11d65,\r
+0x11d67, 0x11d68,\r
+0x11d6a, 0x11d8e,\r
+0x11d90, 0x11d91,\r
+0x11d93, 0x11d96,\r
+0x11d98, 0x11d98,\r
+0x11da0, 0x11da9,\r
+0x11ee0, 0x11ef6,\r
+0x12000, 0x12399,\r
+0x12400, 0x1246e,\r
+0x12480, 0x12543,\r
+0x13000, 0x1342e,\r
+0x14400, 0x14646,\r
+0x16800, 0x16a38,\r
+0x16a40, 0x16a5e,\r
+0x16a60, 0x16a69,\r
+0x16ad0, 0x16aed,\r
+0x16b00, 0x16b36,\r
+0x16b40, 0x16b43,\r
+0x16b50, 0x16b59,\r
+0x16b63, 0x16b77,\r
+0x16b7d, 0x16b8f,\r
+0x16e40, 0x16e7f,\r
+0x16f00, 0x16f44,\r
+0x16f50, 0x16f7e,\r
+0x16f93, 0x16f9f,\r
+0x16fe0, 0x16fe1,\r
+0x17000, 0x187f1,\r
+0x18800, 0x18af2,\r
+0x1b000, 0x1b11e,\r
+0x1b170, 0x1b2fb,\r
+0x1bc00, 0x1bc6a,\r
+0x1bc70, 0x1bc7c,\r
+0x1bc80, 0x1bc88,\r
+0x1bc90, 0x1bc99,\r
+0x1bc9e, 0x1bc9e,\r
+0x1d400, 0x1d454,\r
+0x1d456, 0x1d49c,\r
+0x1d49e, 0x1d49f,\r
+0x1d4a2, 0x1d4a2,\r
+0x1d4a5, 0x1d4a6,\r
+0x1d4a9, 0x1d4ac,\r
+0x1d4ae, 0x1d4b9,\r
+0x1d4bb, 0x1d4bb,\r
+0x1d4bd, 0x1d4c3,\r
+0x1d4c5, 0x1d505,\r
+0x1d507, 0x1d50a,\r
+0x1d50d, 0x1d514,\r
+0x1d516, 0x1d51c,\r
+0x1d51e, 0x1d539,\r
+0x1d53b, 0x1d53e,\r
+0x1d540, 0x1d544,\r
+0x1d546, 0x1d546,\r
+0x1d54a, 0x1d550,\r
+0x1d552, 0x1d6a5,\r
+0x1d6a8, 0x1d6c0,\r
+0x1d6c2, 0x1d6da,\r
+0x1d6dc, 0x1d6fa,\r
+0x1d6fc, 0x1d714,\r
+0x1d716, 0x1d734,\r
+0x1d736, 0x1d74e,\r
+0x1d750, 0x1d76e,\r
+0x1d770, 0x1d788,\r
+0x1d78a, 0x1d7a8,\r
+0x1d7aa, 0x1d7c2,\r
+0x1d7c4, 0x1d7cb,\r
+0x1d7ce, 0x1d7ff,\r
+0x1e000, 0x1e006,\r
+0x1e008, 0x1e018,\r
+0x1e01b, 0x1e021,\r
+0x1e023, 0x1e024,\r
+0x1e026, 0x1e02a,\r
+0x1e800, 0x1e8c4,\r
+0x1e900, 0x1e943,\r
+0x1e947, 0x1e947,\r
+0x1e950, 0x1e959,\r
+0x1ee00, 0x1ee03,\r
+0x1ee05, 0x1ee1f,\r
+0x1ee21, 0x1ee22,\r
+0x1ee24, 0x1ee24,\r
+0x1ee27, 0x1ee27,\r
+0x1ee29, 0x1ee32,\r
+0x1ee34, 0x1ee37,\r
+0x1ee39, 0x1ee39,\r
+0x1ee3b, 0x1ee3b,\r
+0x1ee42, 0x1ee42,\r
+0x1ee47, 0x1ee47,\r
+0x1ee49, 0x1ee49,\r
+0x1ee4b, 0x1ee4b,\r
+0x1ee4d, 0x1ee4f,\r
+0x1ee51, 0x1ee52,\r
+0x1ee54, 0x1ee54,\r
+0x1ee57, 0x1ee57,\r
+0x1ee59, 0x1ee59,\r
+0x1ee5b, 0x1ee5b,\r
+0x1ee5d, 0x1ee5d,\r
+0x1ee5f, 0x1ee5f,\r
+0x1ee61, 0x1ee62,\r
+0x1ee64, 0x1ee64,\r
+0x1ee67, 0x1ee6a,\r
+0x1ee6c, 0x1ee72,\r
+0x1ee74, 0x1ee77,\r
+0x1ee79, 0x1ee7c,\r
+0x1ee7e, 0x1ee7e,\r
+0x1ee80, 0x1ee89,\r
+0x1ee8b, 0x1ee9b,\r
+0x1eea1, 0x1eea3,\r
+0x1eea5, 0x1eea9,\r
+0x1eeab, 0x1eebb,\r
+0x1f130, 0x1f149,\r
+0x1f150, 0x1f169,\r
+0x1f170, 0x1f189,\r
+0x20000, 0x2a6d6,\r
+0x2a700, 0x2b734,\r
+0x2b740, 0x2b81d,\r
+0x2b820, 0x2cea1,\r
+0x2ceb0, 0x2ebe0,\r
+0x2f800, 0x2fa1d,\r
+}; /* END of CR_Alnum */\r
+\r
+/* PROPERTY: 'ASCII': POSIX [[:ASCII:]] */\r
+static const OnigCodePoint\r
+CR_ASCII[] = { 1,\r
+0x0000, 0x007f,\r
+}; /* END of CR_ASCII */\r
+\r
+\r
+static const OnigCodePoint*\r
+const CodeRanges[] = {\r
+  CR_NEWLINE,\r
+  CR_Alpha,\r
+  CR_Blank,\r
+  CR_Cntrl,\r
+  CR_Digit,\r
+  CR_Graph,\r
+  CR_Lower,\r
+  CR_Print,\r
+  CR_Punct,\r
+  CR_Space,\r
+  CR_Upper,\r
+  CR_XDigit,\r
+  CR_Word,\r
+  CR_Alnum,\r
+  CR_ASCII,\r
+};\r
+\r
+#define pool_offset(s) offsetof(struct unicode_prop_name_pool_t, unicode_prop_name_pool_str##s)\r
+\r
+\r
+#define TOTAL_KEYWORDS 15\r
+#define MIN_WORD_LENGTH 4\r
+#define MAX_WORD_LENGTH 7\r
+#define MIN_HASH_VALUE 5\r
+#define MAX_HASH_VALUE 19\r
+/* maximum key range = 15, duplicates = 0 */\r
+\r
+#ifndef GPERF_DOWNCASE\r
+#define GPERF_DOWNCASE 1\r
+static unsigned char gperf_downcase[256] =\r
+  {\r
+      0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,\r
+     15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,\r
+     30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,\r
+     45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,\r
+     60,  61,  62,  63,  64,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106,\r
+    107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,\r
+    122,  91,  92,  93,  94,  95,  96,  97,  98,  99, 100, 101, 102, 103, 104,\r
+    105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\r
+    120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,\r
+    135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,\r
+    150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,\r
+    165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,\r
+    180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,\r
+    195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,\r
+    210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,\r
+    225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,\r
+    240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,\r
+    255\r
+  };\r
+#endif\r
+\r
+#ifndef GPERF_CASE_STRNCMP\r
+#define GPERF_CASE_STRNCMP 1\r
+static int\r
+gperf_case_strncmp (register const char *s1, register const char *s2, register size_t n)\r
+{\r
+  for (; n > 0;)\r
+    {\r
+      unsigned char c1 = gperf_downcase[(unsigned char)*s1++];\r
+      unsigned char c2 = gperf_downcase[(unsigned char)*s2++];\r
+      if (c1 != 0 && c1 == c2)\r
+        {\r
+          n--;\r
+          continue;\r
+        }\r
+      return (int)c1 - (int)c2;\r
+    }\r
+  return 0;\r
+}\r
+#endif\r
+\r
+#ifdef __GNUC__\r
+__inline\r
+#else\r
+#ifdef __cplusplus\r
+inline\r
+#endif\r
+#endif\r
+static unsigned int\r
+hash (register const char *str, register size_t len)\r
+{\r
+  static const unsigned char asso_values[] =\r
+    {\r
+      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\r
+      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\r
+      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\r
+      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\r
+      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\r
+      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\r
+      20, 20, 20, 20, 20,  2, 12,  5,  3, 20,\r
+      20, 10, 20,  0, 20, 20,  9, 20,  1, 20,\r
+       0, 20,  9,  7,  3,  6, 20,  2,  3, 20,\r
+      20, 20, 20, 20, 20, 20, 20,  2, 12,  5,\r
+       3, 20, 20, 10, 20,  0, 20, 20,  9, 20,\r
+       1, 20,  0, 20,  9,  7,  3,  6, 20,  2,\r
+       3, 20, 20, 20, 20, 20, 20, 20, 20, 20,\r
+      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\r
+      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\r
+      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\r
+      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\r
+      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\r
+      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\r
+      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\r
+      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\r
+      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\r
+      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\r
+      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\r
+      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\r
+      20, 20, 20, 20, 20, 20\r
+    };\r
+  return len + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[0]];\r
+}\r
+\r
+struct unicode_prop_name_pool_t\r
+  {\r
+    char unicode_prop_name_pool_str5[sizeof("print")];\r
+    char unicode_prop_name_pool_str6[sizeof("punct")];\r
+    char unicode_prop_name_pool_str7[sizeof("alpha")];\r
+    char unicode_prop_name_pool_str8[sizeof("alnum")];\r
+    char unicode_prop_name_pool_str9[sizeof("xdigit")];\r
+    char unicode_prop_name_pool_str10[sizeof("newline")];\r
+    char unicode_prop_name_pool_str11[sizeof("upper")];\r
+    char unicode_prop_name_pool_str12[sizeof("ascii")];\r
+    char unicode_prop_name_pool_str13[sizeof("cntrl")];\r
+    char unicode_prop_name_pool_str14[sizeof("space")];\r
+    char unicode_prop_name_pool_str15[sizeof("word")];\r
+    char unicode_prop_name_pool_str16[sizeof("lower")];\r
+    char unicode_prop_name_pool_str17[sizeof("graph")];\r
+    char unicode_prop_name_pool_str18[sizeof("digit")];\r
+    char unicode_prop_name_pool_str19[sizeof("blank")];\r
+  };\r
+static const struct unicode_prop_name_pool_t unicode_prop_name_pool_contents =\r
+  {\r
+    "print",\r
+    "punct",\r
+    "alpha",\r
+    "alnum",\r
+    "xdigit",\r
+    "newline",\r
+    "upper",\r
+    "ascii",\r
+    "cntrl",\r
+    "space",\r
+    "word",\r
+    "lower",\r
+    "graph",\r
+    "digit",\r
+    "blank"\r
+  };\r
+#define unicode_prop_name_pool ((const char *) &unicode_prop_name_pool_contents)\r
+static const struct PoolPropertyNameCtype *\r
+unicode_lookup_property_name (register const char *str, register size_t len)\r
+{\r
+  static const struct PoolPropertyNameCtype wordlist[] =\r
+    {\r
+      {-1}, {-1}, {-1}, {-1}, {-1},\r
+\r
+      {pool_offset(5),                                7},\r
+\r
+      {pool_offset(6),                                8},\r
+\r
+      {pool_offset(7),                                1},\r
+\r
+      {pool_offset(8),                               13},\r
+\r
+      {pool_offset(9),                              11},\r
+\r
+      {pool_offset(10),                              0},\r
+\r
+      {pool_offset(11),                               10},\r
+\r
+      {pool_offset(12),                               14},\r
+\r
+      {pool_offset(13),                                3},\r
+\r
+      {pool_offset(14),                                9},\r
+\r
+      {pool_offset(15),                                12},\r
+\r
+      {pool_offset(16),                                6},\r
+\r
+      {pool_offset(17),                                5},\r
+\r
+      {pool_offset(18),                                4},\r
+\r
+      {pool_offset(19),                                2}\r
+    };\r
+\r
+  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)\r
+    {\r
+      register unsigned int key = hash (str, len);\r
+\r
+      if (key <= MAX_HASH_VALUE)\r
+        {\r
+          register int o = wordlist[key].name;\r
+          if (o >= 0)\r
+            {\r
+              register const char *s = o + unicode_prop_name_pool;\r
+\r
+              if ((((unsigned char)*str ^ (unsigned char)*s) & ~32) == 0 && !gperf_case_strncmp (str, s, len) && s[len] == '\0')\r
+                return &wordlist[key];\r
+            }\r
+        }\r
+    }\r
+  return 0;\r
+}\r
+\r
+\r
+\r
+#define PROPERTY_NAME_MAX_SIZE  17\r
+#define CODE_RANGES_NUM         15\r
+\r
+#define PROP_INDEX_NEWLINE 0\r
+#define PROP_INDEX_ALPHA 1\r
+#define PROP_INDEX_BLANK 2\r
+#define PROP_INDEX_CNTRL 3\r
+#define PROP_INDEX_DIGIT 4\r
+#define PROP_INDEX_GRAPH 5\r
+#define PROP_INDEX_LOWER 6\r
+#define PROP_INDEX_PRINT 7\r
+#define PROP_INDEX_PUNCT 8\r
+#define PROP_INDEX_SPACE 9\r
+#define PROP_INDEX_UPPER 10\r
+#define PROP_INDEX_XDIGIT 11\r
+#define PROP_INDEX_WORD 12\r
+#define PROP_INDEX_ALNUM 13\r
+#define PROP_INDEX_ASCII 14\r
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_unfold_key.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/unicode_unfold_key.c
new file mode 100644 (file)
index 0000000..37a147e
--- /dev/null
@@ -0,0 +1,3287 @@
+/* This file was converted by gperf_unfold_key_conv.py\r
+      from gperf output file. */\r
+/* ANSI-C code produced by gperf version 3.1 */\r
+/* Command-line: /usr/bin/gperf -n -C -T -c -t -j1 -L ANSI-C -F,-1,0 -N onigenc_unicode_unfold_key unicode_unfold_key.gperf  */\r
+/* Computed positions: -k'1-3' */\r
+\r
+\r
+\r
+/* This gperf source file was generated by make_unicode_fold_data.py */\r
+\r
+/*-\r
+ * Copyright (c) 2017-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
+ * SUCH DAMAGE.\r
+ */\r
+//#include <string.h>\r
+#include "regenc.h"\r
+\r
+#define TOTAL_KEYWORDS 1480\r
+#define MIN_WORD_LENGTH 3\r
+#define MAX_WORD_LENGTH 3\r
+#define MIN_HASH_VALUE 10\r
+#define MAX_HASH_VALUE 1993\r
+/* maximum key range = 1984, duplicates = 0 */\r
+\r
+#ifdef __GNUC__\r
+__inline\r
+#else\r
+#ifdef __cplusplus\r
+inline\r
+#endif\r
+#endif\r
+/*ARGSUSED*/\r
+static unsigned int\r
+hash(OnigCodePoint codes[])\r
+{\r
+  static const unsigned short asso_values[] =\r
+    {\r
+         9,    5,    2,  214,  176,    1,  110, 1994, 1994, 1994,\r
+      1994, 1994, 1994,   13, 1994, 1994, 1994,   77, 1994, 1994,\r
+        71, 1994, 1994, 1994, 1994,   86, 1994, 1994, 1994,    7,\r
+      1994,    0,    3, 1994,   50,  560, 1509,  132, 1501,  552,\r
+      1492,  546, 1586,  538, 1491,    4, 1480,  518, 1475,  510,\r
+      1467,  879, 1578,  855, 1459,  527, 1426,  234, 1067,  497,\r
+      1458,  486, 1450,  352, 1436,  831, 1577,  783,  285,  639,\r
+      1576,  629, 1567,  575, 1566,  609, 1556,  567, 1425,  598,\r
+      1151,  587, 1064,  461,  668, 1035,  427, 1414,  160, 1411,\r
+        21, 1404, 1253, 1289, 1416, 1537,  482, 1402,  669, 1391,\r
+      1302, 1305, 1277, 1095, 1220, 1076,  261,  869, 1387,  475,\r
+      1340,  151,  327,  845,  859,  824,  731,  816,  539,  715,\r
+       212,  707,   83, 1297, 1046, 1278,  529, 1380,  520, 1352,\r
+       184, 1086,  235, 1073,  275, 1052,  193, 1258,    8, 1060,\r
+       655, 1030,  513, 1022,  393,  254,  344, 1265,  203, 1246,\r
+       193, 1548,   15, 1376,  120, 1545, 1591,  525, 1590,  232,\r
+      1583, 1365, 1465,  464, 1011,  451, 1353,   18,    6,  383,\r
+      1236,  802,    8,  438,  940,  163, 1533,  427,  858,  244,\r
+      1225,  360, 1212,  333,  575,  219, 1002,  206, 1209,  320,\r
+       735,  140, 1199,  410, 1188,   73,  973,  103,  965,   63,\r
+       944,   53,  791,  196,  788,  116,  695,   93,  921,   83,\r
+       930,  182,  762,   31,  685,  311,  913,  268,  671,   44,\r
+       906,  302, 1186,  293, 1180,  280, 1154,  885, 1354,  660,\r
+       760,  650, 1174, 1169,  402,  897,  641,  726, 1162, 1153,\r
+       622, 1316,  994, 1143,  664, 1134,  447,  173,  375, 1124,\r
+         0, 1111,  371,  956,  156, 1270,  147, 1117,  113,  504,\r
+      1994, 1105,  112, 1347, 1994, 1339,   75, 1335,   65, 1331,\r
+       591, 1096,   45, 1393, 1994, 1198,  239, 1324,   26,  984,\r
+        18, 1528,   40, 1517,  124,  421,   27,  904,   91,  137,\r
+        16\r
+    };\r
+  return asso_values[(unsigned char)onig_codes_byte_at(codes, 2)+35] + asso_values[(unsigned char)onig_codes_byte_at(codes, 1)+1] + asso_values[(unsigned char)onig_codes_byte_at(codes, 0)];\r
+}\r
+\r
+const struct ByUnfoldKey *\r
+onigenc_unicode_unfold_key(OnigCodePoint code)\r
+{\r
+  static const struct ByUnfoldKey wordlist[] =\r
+    {\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x1040a, 3420, 1},\r
+\r
+      {0x01d7, 444, 1},\r
+\r
+      {0x1fd7, 31, 3},\r
+\r
+      {0x1e0a, 1876, 1},\r
+\r
+      {0x040a, 1026, 1},\r
+\r
+      {0x010a, 186, 1},\r
+\r
+      {0x1f0a, 2237, 1},\r
+\r
+      {0x2c0a, 2600, 1},\r
+\r
+      {0x1f85, 154, 2},\r
+\r
+      {0x0189, 619, 1},\r
+\r
+      {0x1f89, 134, 2},\r
+\r
+      {0x2c67, 2720, 1},\r
+\r
+      {0x1c85, 951, 1},\r
+\r
+      {0xab85, 1660, 1},\r
+\r
+      {0x10c85, 3633, 1},\r
+\r
+      {0xab89, 1672, 1},\r
+\r
+      {0x10c89, 3645, 1},\r
+\r
+      {0x1e84, 2060, 1},\r
+\r
+      {0x2c75, 2732, 1},\r
+\r
+      {0x0184, 360, 1},\r
+\r
+      {0x1f84, 149, 2},\r
+\r
+      {0x2c84, 2741, 1},\r
+\r
+      {0xab75, 1612, 1},\r
+\r
+      {0xa784, 3255, 1},\r
+\r
+      {0x1c84, 951, 1},\r
+\r
+      {0xab84, 1657, 1},\r
+\r
+      {0x10c84, 3630, 1},\r
+\r
+      {0x104b2, 3516, 1},\r
+\r
+      {0x1ff3, 96, 2},\r
+\r
+      {0x1ffb, 2414, 1},\r
+\r
+      {0x1eb2, 2114, 1},\r
+\r
+      {0x04b2, 1156, 1},\r
+\r
+      {0x01b2, 697, 1},\r
+\r
+      {0x1fb2, 249, 2},\r
+\r
+      {0x2cb2, 2810, 1},\r
+\r
+      {0xa684, 3090, 1},\r
+\r
+      {0xa7b2, 706, 1},\r
+\r
+      {0x1cb2, 1561, 1},\r
+\r
+      {0xabb2, 1795, 1},\r
+\r
+      {0x10cb2, 3768, 1},\r
+\r
+      {0x104b8, 3534, 1},\r
+\r
+      {0x01f7, 414, 1},\r
+\r
+      {0x1ff7, 67, 3},\r
+\r
+      {0x1eb8, 2123, 1},\r
+\r
+      {0x04b8, 1165, 1},\r
+\r
+      {0x01b8, 408, 1},\r
+\r
+      {0x1fb8, 2417, 1},\r
+\r
+      {0x2cb8, 2819, 1},\r
+\r
+      {0x2ced, 2888, 1},\r
+\r
+      {0xa7b8, 3306, 1},\r
+\r
+      {0x1cb8, 1579, 1},\r
+\r
+      {0xabb8, 1813, 1},\r
+\r
+      {0x1ea6, 2096, 1},\r
+\r
+      {0x04a6, 1138, 1},\r
+\r
+      {0x01a6, 679, 1},\r
+\r
+      {0x1fa6, 239, 2},\r
+\r
+      {0x2ca6, 2792, 1},\r
+\r
+      {0x2167, 2462, 1},\r
+\r
+      {0xa7a6, 3294, 1},\r
+\r
+      {0x1ca6, 1525, 1},\r
+\r
+      {0xaba6, 1759, 1},\r
+\r
+      {0x10ca6, 3732, 1},\r
+\r
+      {0x1ea4, 2093, 1},\r
+\r
+      {0x04a4, 1135, 1},\r
+\r
+      {0x01a4, 390, 1},\r
+\r
+      {0x1fa4, 229, 2},\r
+\r
+      {0x2ca4, 2789, 1},\r
+\r
+      {0x1fe9, 2432, 1},\r
+\r
+      {0xa7a4, 3291, 1},\r
+\r
+      {0x1ca4, 1519, 1},\r
+\r
+      {0xaba4, 1753, 1},\r
+\r
+      {0x10ca4, 3726, 1},\r
+\r
+      {0x1ea0, 2087, 1},\r
+\r
+      {0x04a0, 1129, 1},\r
+\r
+      {0x01a0, 384, 1},\r
+\r
+      {0x1fa0, 209, 2},\r
+\r
+      {0x2ca0, 2783, 1},\r
+\r
+      {0x1fe7, 47, 3},\r
+\r
+      {0xa7a0, 3285, 1},\r
+\r
+      {0x1ca0, 1507, 1},\r
+\r
+      {0xaba0, 1741, 1},\r
+\r
+      {0x10ca0, 3714, 1},\r
+\r
+      {0x1eae, 2108, 1},\r
+\r
+      {0x04ae, 1150, 1},\r
+\r
+      {0x01ae, 688, 1},\r
+\r
+      {0x1fae, 239, 2},\r
+\r
+      {0x2cae, 2804, 1},\r
+\r
+      {0x0057, 65, 1},\r
+\r
+      {0xa7ae, 655, 1},\r
+\r
+      {0x1cae, 1549, 1},\r
+\r
+      {0xabae, 1783, 1},\r
+\r
+      {0x10cae, 3756, 1},\r
+\r
+      {0x1eac, 2105, 1},\r
+\r
+      {0x04ac, 1147, 1},\r
+\r
+      {0x01ac, 396, 1},\r
+\r
+      {0x1fac, 229, 2},\r
+\r
+      {0x2cac, 2801, 1},\r
+\r
+      {0x13fb, 1846, 1},\r
+\r
+      {0xa7ac, 637, 1},\r
+\r
+      {0x1cac, 1543, 1},\r
+\r
+      {0xabac, 1777, 1},\r
+\r
+      {0x10cac, 3750, 1},\r
+\r
+      {0x1ea2, 2090, 1},\r
+\r
+      {0x04a2, 1132, 1},\r
+\r
+      {0x01a2, 387, 1},\r
+\r
+      {0x1fa2, 219, 2},\r
+\r
+      {0x2ca2, 2786, 1},\r
+\r
+      {0x10b2, 2948, 1},\r
+\r
+      {0xa7a2, 3288, 1},\r
+\r
+      {0x1ca2, 1513, 1},\r
+\r
+      {0xaba2, 1747, 1},\r
+\r
+      {0x10ca2, 3720, 1},\r
+\r
+      {0x118b2, 3825, 1},\r
+\r
+      {0x050a, 1288, 1},\r
+\r
+      {0x1fe3, 41, 3},\r
+\r
+      {0x1eaa, 2102, 1},\r
+\r
+      {0x04aa, 1144, 1},\r
+\r
+      {0x00df, 24, 2},\r
+\r
+      {0x1faa, 219, 2},\r
+\r
+      {0x2caa, 2798, 1},\r
+\r
+      {0x10b8, 2966, 1},\r
+\r
+      {0xa7aa, 646, 1},\r
+\r
+      {0x1caa, 1537, 1},\r
+\r
+      {0xabaa, 1771, 1},\r
+\r
+      {0x10caa, 3744, 1},\r
+\r
+      {0x118b8, 3843, 1},\r
+\r
+      {0x1ff9, 2402, 1},\r
+\r
+      {0xab77, 1618, 1},\r
+\r
+      {0x10402, 3396, 1},\r
+\r
+      {0x10a6, 2912, 1},\r
+\r
+      {0x0537, 1363, 1},\r
+\r
+      {0x1e02, 1864, 1},\r
+\r
+      {0x0402, 1002, 1},\r
+\r
+      {0x0102, 174, 1},\r
+\r
+      {0x118a6, 3789, 1},\r
+\r
+      {0x2c02, 2576, 1},\r
+\r
+      {0x1efe, 2228, 1},\r
+\r
+      {0x04fe, 1270, 1},\r
+\r
+      {0x01fe, 499, 1},\r
+\r
+      {0x10a4, 2906, 1},\r
+\r
+      {0x049c, 1123, 1},\r
+\r
+      {0x019c, 664, 1},\r
+\r
+      {0x1f9c, 189, 2},\r
+\r
+      {0x2c9c, 2777, 1},\r
+\r
+      {0x118a4, 3783, 1},\r
+\r
+      {0xa79c, 3279, 1},\r
+\r
+      {0x1c9c, 1495, 1},\r
+\r
+      {0xab9c, 1729, 1},\r
+\r
+      {0x10c9c, 3702, 1},\r
+\r
+      {0x10a0, 2894, 1},\r
+\r
+      {0x1e4c, 1975, 1},\r
+\r
+      {0x00dd, 162, 1},\r
+\r
+      {0x014c, 279, 1},\r
+\r
+      {0x1f4c, 2333, 1},\r
+\r
+      {0x118a0, 3771, 1},\r
+\r
+      {0x004c, 31, 1},\r
+\r
+      {0xa74c, 3186, 1},\r
+\r
+      {0x01db, 450, 1},\r
+\r
+      {0x1fdb, 2396, 1},\r
+\r
+      {0x10ae, 2936, 1},\r
+\r
+      {0x00db, 156, 1},\r
+\r
+      {0x13fd, 1852, 1},\r
+\r
+      {0x1e8c, 2072, 1},\r
+\r
+      {0x048c, 1099, 1},\r
+\r
+      {0x118ae, 3813, 1},\r
+\r
+      {0x1f8c, 149, 2},\r
+\r
+      {0x2c8c, 2753, 1},\r
+\r
+      {0xff37, 3378, 1},\r
+\r
+      {0xa64c, 3033, 1},\r
+\r
+      {0x10ac, 2930, 1},\r
+\r
+      {0xab8c, 1681, 1},\r
+\r
+      {0x10c8c, 3654, 1},\r
+\r
+      {0x1ed4, 2165, 1},\r
+\r
+      {0x04d4, 1207, 1},\r
+\r
+      {0x118ac, 3807, 1},\r
+\r
+      {0x24b8, 2498, 1},\r
+\r
+      {0x2cd4, 2861, 1},\r
+\r
+      {0x00d4, 138, 1},\r
+\r
+      {0x104b0, 3510, 1},\r
+\r
+      {0x10a2, 2900, 1},\r
+\r
+      {0xa68c, 3102, 1},\r
+\r
+      {0x1eb0, 2111, 1},\r
+\r
+      {0x04b0, 1153, 1},\r
+\r
+      {0x0389, 736, 1},\r
+\r
+      {0x118a2, 3777, 1},\r
+\r
+      {0x2cb0, 2807, 1},\r
+\r
+      {0x1f5f, 2348, 1},\r
+\r
+      {0xa7b0, 709, 1},\r
+\r
+      {0x1cb0, 1555, 1},\r
+\r
+      {0xabb0, 1789, 1},\r
+\r
+      {0x10cb0, 3762, 1},\r
+\r
+      {0x03ff, 727, 1},\r
+\r
+      {0x10aa, 2924, 1},\r
+\r
+      {0x03f5, 755, 1},\r
+\r
+      {0x13f9, 1840, 1},\r
+\r
+      {0x1ea8, 2099, 1},\r
+\r
+      {0x04a8, 1141, 1},\r
+\r
+      {0x118aa, 3801, 1},\r
+\r
+      {0x1fa8, 209, 2},\r
+\r
+      {0x2ca8, 2795, 1},\r
+\r
+      {0xab73, 1606, 1},\r
+\r
+      {0xa7a8, 3297, 1},\r
+\r
+      {0x1ca8, 1531, 1},\r
+\r
+      {0xaba8, 1765, 1},\r
+\r
+      {0x10ca8, 3738, 1},\r
+\r
+      {0x1e98, 38, 2},\r
+\r
+      {0x0498, 1117, 1},\r
+\r
+      {0x0198, 375, 1},\r
+\r
+      {0x1f98, 169, 2},\r
+\r
+      {0x2c98, 2771, 1},\r
+\r
+      {0xab71, 1600, 1},\r
+\r
+      {0xa798, 3273, 1},\r
+\r
+      {0x1c98, 1483, 1},\r
+\r
+      {0xab98, 1717, 1},\r
+\r
+      {0x10c98, 3690, 1},\r
+\r
+      {0x03f7, 887, 1},\r
+\r
+      {0x0055, 59, 1},\r
+\r
+      {0x020a, 517, 1},\r
+\r
+      {0x1e96, 16, 2},\r
+\r
+      {0x0496, 1114, 1},\r
+\r
+      {0x0196, 652, 1},\r
+\r
+      {0x1f96, 199, 2},\r
+\r
+      {0x2c96, 2768, 1},\r
+\r
+      {0xa698, 3120, 1},\r
+\r
+      {0xa796, 3270, 1},\r
+\r
+      {0x1c96, 1477, 1},\r
+\r
+      {0xab96, 1711, 1},\r
+\r
+      {0x10c96, 3684, 1},\r
+\r
+      {0x03a6, 813, 1},\r
+\r
+      {0x16e57, 3936, 1},\r
+\r
+      {0x10416, 3456, 1},\r
+\r
+      {0x1e7c, 2048, 1},\r
+\r
+      {0x047c, 1087, 1},\r
+\r
+      {0x1e16, 1894, 1},\r
+\r
+      {0x0416, 913, 1},\r
+\r
+      {0x0116, 204, 1},\r
+\r
+      {0xa696, 3117, 1},\r
+\r
+      {0x2c16, 2636, 1},\r
+\r
+      {0x03a4, 807, 1},\r
+\r
+      {0xab7c, 1633, 1},\r
+\r
+      {0x01f1, 483, 1},\r
+\r
+      {0x0502, 1276, 1},\r
+\r
+      {0x2165, 2456, 1},\r
+\r
+      {0x1e90, 2078, 1},\r
+\r
+      {0x0490, 1105, 1},\r
+\r
+      {0x0190, 628, 1},\r
+\r
+      {0x1f90, 169, 2},\r
+\r
+      {0x2c90, 2759, 1},\r
+\r
+      {0x03a0, 795, 1},\r
+\r
+      {0xa790, 3264, 1},\r
+\r
+      {0x1c90, 1459, 1},\r
+\r
+      {0xab90, 1693, 1},\r
+\r
+      {0x10c90, 3666, 1},\r
+\r
+      {0x1e6e, 2027, 1},\r
+\r
+      {0x046e, 1066, 1},\r
+\r
+      {0x016e, 330, 1},\r
+\r
+      {0x1f6e, 2369, 1},\r
+\r
+      {0x2c6e, 667, 1},\r
+\r
+      {0x10b0, 2942, 1},\r
+\r
+      {0xa76e, 3237, 1},\r
+\r
+      {0x054c, 1426, 1},\r
+\r
+      {0xa690, 3108, 1},\r
+\r
+      {0x0147, 273, 1},\r
+\r
+      {0x118b0, 3819, 1},\r
+\r
+      {0x104b6, 3528, 1},\r
+\r
+      {0x0047, 18, 1},\r
+\r
+      {0x03fd, 721, 1},\r
+\r
+      {0x1eb6, 2120, 1},\r
+\r
+      {0x04b6, 1162, 1},\r
+\r
+      {0x0535, 1357, 1},\r
+\r
+      {0x1fb6, 58, 2},\r
+\r
+      {0x2cb6, 2816, 1},\r
+\r
+      {0x10a8, 2918, 1},\r
+\r
+      {0xa7b6, 3303, 1},\r
+\r
+      {0x1cb6, 1573, 1},\r
+\r
+      {0xabb6, 1807, 1},\r
+\r
+      {0x104be, 3552, 1},\r
+\r
+      {0x118a8, 3795, 1},\r
+\r
+      {0x2c63, 1858, 1},\r
+\r
+      {0x1ebe, 2132, 1},\r
+\r
+      {0x04be, 1174, 1},\r
+\r
+      {0x10421, 3489, 1},\r
+\r
+      {0x1fbe, 770, 1},\r
+\r
+      {0x2cbe, 2828, 1},\r
+\r
+      {0x2161, 2444, 1},\r
+\r
+      {0x0421, 947, 1},\r
+\r
+      {0x1cbe, 1591, 1},\r
+\r
+      {0xabbe, 1831, 1},\r
+\r
+      {0x2c21, 2669, 1},\r
+\r
+      {0x104bc, 3546, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x03aa, 827, 1},\r
+\r
+      {0x1ebc, 2129, 1},\r
+\r
+      {0x04bc, 1171, 1},\r
+\r
+      {0x01bc, 411, 1},\r
+\r
+      {0x1fbc, 62, 2},\r
+\r
+      {0x2cbc, 2825, 1},\r
+\r
+      {0x16e4c, 3903, 1},\r
+\r
+      {0x104ba, 3540, 1},\r
+\r
+      {0x03f9, 881, 1},\r
+\r
+      {0xabbc, 1825, 1},\r
+\r
+      {0x1eba, 2126, 1},\r
+\r
+      {0x04ba, 1168, 1},\r
+\r
+      {0x216e, 2483, 1},\r
+\r
+      {0x1fba, 2375, 1},\r
+\r
+      {0x2cba, 2822, 1},\r
+\r
+      {0xff35, 3372, 1},\r
+\r
+      {0x104b4, 3522, 1},\r
+\r
+      {0x1cba, 1585, 1},\r
+\r
+      {0xabba, 1819, 1},\r
+\r
+      {0x1eb4, 2117, 1},\r
+\r
+      {0x04b4, 1159, 1},\r
+\r
+      {0x03fe, 724, 1},\r
+\r
+      {0x1fb4, 50, 2},\r
+\r
+      {0x2cb4, 2813, 1},\r
+\r
+      {0x039c, 782, 1},\r
+\r
+      {0xa7b4, 3300, 1},\r
+\r
+      {0x1cb4, 1567, 1},\r
+\r
+      {0xabb4, 1801, 1},\r
+\r
+      {0x1e9a, 0, 2},\r
+\r
+      {0x049a, 1120, 1},\r
+\r
+      {0x0555, 1453, 1},\r
+\r
+      {0x1f9a, 179, 2},\r
+\r
+      {0x2c9a, 2774, 1},\r
+\r
+      {0x2163, 2450, 1},\r
+\r
+      {0xa79a, 3276, 1},\r
+\r
+      {0x1c9a, 1489, 1},\r
+\r
+      {0xab9a, 1723, 1},\r
+\r
+      {0x10c9a, 3696, 1},\r
+\r
+      {0x1f4d, 2336, 1},\r
+\r
+      {0x16e5f, 3960, 1},\r
+\r
+      {0x004d, 34, 1},\r
+\r
+      {0x1e94, 2084, 1},\r
+\r
+      {0x0494, 1111, 1},\r
+\r
+      {0x0194, 640, 1},\r
+\r
+      {0x1f94, 189, 2},\r
+\r
+      {0x2c94, 2765, 1},\r
+\r
+      {0xa69a, 3123, 1},\r
+\r
+      {0x038c, 833, 1},\r
+\r
+      {0x1c94, 1471, 1},\r
+\r
+      {0xab94, 1705, 1},\r
+\r
+      {0x10c94, 3678, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x0516, 1306, 1},\r
+\r
+      {0x10b6, 2960, 1},\r
+\r
+      {0x0202, 505, 1},\r
+\r
+      {0x1f6f, 2372, 1},\r
+\r
+      {0x2c6f, 604, 1},\r
+\r
+      {0x1041c, 3474, 1},\r
+\r
+      {0x118b6, 3837, 1},\r
+\r
+      {0xa694, 3114, 1},\r
+\r
+      {0x1e1c, 1903, 1},\r
+\r
+      {0x041c, 931, 1},\r
+\r
+      {0x011c, 213, 1},\r
+\r
+      {0x1f1c, 2267, 1},\r
+\r
+      {0x2c1c, 2654, 1},\r
+\r
+      {0x10be, 2984, 1},\r
+\r
+      {0x03b0, 41, 3},\r
+\r
+      {0x16e55, 3930, 1},\r
+\r
+      {0x1e92, 2081, 1},\r
+\r
+      {0x0492, 1108, 1},\r
+\r
+      {0x118be, 3861, 1},\r
+\r
+      {0x1f92, 179, 2},\r
+\r
+      {0x2c92, 2762, 1},\r
+\r
+      {0x024c, 598, 1},\r
+\r
+      {0xa792, 3267, 1},\r
+\r
+      {0x1c92, 1465, 1},\r
+\r
+      {0xab92, 1699, 1},\r
+\r
+      {0x10c92, 3672, 1},\r
+\r
+      {0x10bc, 2978, 1},\r
+\r
+      {0x0547, 1411, 1},\r
+\r
+      {0x03a8, 820, 1},\r
+\r
+      {0x01d9, 447, 1},\r
+\r
+      {0x1fd9, 2426, 1},\r
+\r
+      {0x118bc, 3855, 1},\r
+\r
+      {0x00d9, 150, 1},\r
+\r
+      {0x01d5, 441, 1},\r
+\r
+      {0xa692, 3111, 1},\r
+\r
+      {0x10ba, 2972, 1},\r
+\r
+      {0x00d5, 141, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x0398, 765, 1},\r
+\r
+      {0x1e86, 2063, 1},\r
+\r
+      {0x118ba, 3849, 1},\r
+\r
+      {0x0186, 616, 1},\r
+\r
+      {0x1f86, 159, 2},\r
+\r
+      {0x2c86, 2744, 1},\r
+\r
+      {0x10b4, 2954, 1},\r
+\r
+      {0xa786, 3258, 1},\r
+\r
+      {0x1c86, 977, 1},\r
+\r
+      {0xab86, 1663, 1},\r
+\r
+      {0x10c86, 3636, 1},\r
+\r
+      {0x118b4, 3831, 1},\r
+\r
+      {0x216f, 2486, 1},\r
+\r
+      {0x0396, 759, 1},\r
+\r
+      {0x1f6d, 2366, 1},\r
+\r
+      {0x2c6d, 607, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x104c7, 3579, 1},\r
+\r
+      {0x24b6, 2492, 1},\r
+\r
+      {0xa686, 3093, 1},\r
+\r
+      {0x1e90a, 3993, 1},\r
+\r
+      {0x04c7, 1186, 1},\r
+\r
+      {0x01c7, 421, 1},\r
+\r
+      {0x1fc7, 15, 3},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x00c7, 99, 1},\r
+\r
+      {0x16e47, 3888, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1e9e, 24, 2},\r
+\r
+      {0x049e, 1126, 1},\r
+\r
+      {0x24be, 2516, 1},\r
+\r
+      {0x1f9e, 199, 2},\r
+\r
+      {0x2c9e, 2780, 1},\r
+\r
+      {0x03f1, 799, 1},\r
+\r
+      {0xa79e, 3282, 1},\r
+\r
+      {0x1c9e, 1501, 1},\r
+\r
+      {0xab9e, 1735, 1},\r
+\r
+      {0x10c9e, 3708, 1},\r
+\r
+      {0x0390, 25, 3},\r
+\r
+      {0x1efa, 2222, 1},\r
+\r
+      {0x04fa, 1264, 1},\r
+\r
+      {0x01fa, 493, 1},\r
+\r
+      {0x1ffa, 2411, 1},\r
+\r
+      {0x24bc, 2510, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1e8e, 2075, 1},\r
+\r
+      {0x048e, 1102, 1},\r
+\r
+      {0x018e, 453, 1},\r
+\r
+      {0x1f8e, 159, 2},\r
+\r
+      {0x2c8e, 2756, 1},\r
+\r
+      {0xff21, 3312, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x24ba, 2504, 1},\r
+\r
+      {0xab8e, 1687, 1},\r
+\r
+      {0x10c8e, 3660, 1},\r
+\r
+      {0x054d, 1429, 1},\r
+\r
+      {0x1e8a, 2069, 1},\r
+\r
+      {0x048a, 1096, 1},\r
+\r
+      {0x018a, 622, 1},\r
+\r
+      {0x1f8a, 139, 2},\r
+\r
+      {0x2c8a, 2750, 1},\r
+\r
+      {0x216d, 2480, 1},\r
+\r
+      {0x104d3, 3615, 1},\r
+\r
+      {0xa68e, 3105, 1},\r
+\r
+      {0xab8a, 1675, 1},\r
+\r
+      {0x10c8a, 3648, 1},\r
+\r
+      {0x0216, 535, 1},\r
+\r
+      {0x01d3, 438, 1},\r
+\r
+      {0x1fd3, 25, 3},\r
+\r
+      {0x1e82, 2057, 1},\r
+\r
+      {0x00d3, 135, 1},\r
+\r
+      {0x0182, 357, 1},\r
+\r
+      {0x1f82, 139, 2},\r
+\r
+      {0x2c82, 2738, 1},\r
+\r
+      {0xa68a, 3099, 1},\r
+\r
+      {0xa782, 3252, 1},\r
+\r
+      {0x1c82, 937, 1},\r
+\r
+      {0xab82, 1651, 1},\r
+\r
+      {0x10c82, 3624, 1},\r
+\r
+      {0x1e30, 1933, 1},\r
+\r
+      {0x051c, 1315, 1},\r
+\r
+      {0x0130, 261, 2},\r
+\r
+      {0x1e80, 2054, 1},\r
+\r
+      {0x0480, 1093, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1f80, 129, 2},\r
+\r
+      {0x2c80, 2735, 1},\r
+\r
+      {0xa682, 3087, 1},\r
+\r
+      {0xa780, 3249, 1},\r
+\r
+      {0x1c80, 899, 1},\r
+\r
+      {0xab80, 1645, 1},\r
+\r
+      {0x10c80, 3618, 1},\r
+\r
+      {0x16e4d, 3906, 1},\r
+\r
+      {0x1e4a, 1972, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x014a, 276, 1},\r
+\r
+      {0x1f4a, 2327, 1},\r
+\r
+      {0x10c7, 3008, 1},\r
+\r
+      {0x004a, 24, 1},\r
+\r
+      {0xa74a, 3183, 1},\r
+\r
+      {0xa680, 3084, 1},\r
+\r
+      {0x1041a, 3468, 1},\r
+\r
+      {0x013d, 258, 1},\r
+\r
+      {0x1f3d, 2312, 1},\r
+\r
+      {0x1e1a, 1900, 1},\r
+\r
+      {0x041a, 925, 1},\r
+\r
+      {0x011a, 210, 1},\r
+\r
+      {0x1f1a, 2261, 1},\r
+\r
+      {0x2c1a, 2648, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x13fa, 1843, 1},\r
+\r
+      {0xa64a, 3029, 1},\r
+\r
+      {0x10418, 3462, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x039a, 775, 1},\r
+\r
+      {0x1e18, 1897, 1},\r
+\r
+      {0x0418, 919, 1},\r
+\r
+      {0x0118, 207, 1},\r
+\r
+      {0x1f18, 2255, 1},\r
+\r
+      {0x2c18, 2642, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xfb02, 12, 2},\r
+\r
+      {0x1ee0, 2183, 1},\r
+\r
+      {0x04e0, 1225, 1},\r
+\r
+      {0x01e0, 459, 1},\r
+\r
+      {0x1040e, 3432, 1},\r
+\r
+      {0x2ce0, 2879, 1},\r
+\r
+      {0x0394, 752, 1},\r
+\r
+      {0x1e0e, 1882, 1},\r
+\r
+      {0x040e, 1038, 1},\r
+\r
+      {0x010e, 192, 1},\r
+\r
+      {0x1f0e, 2249, 1},\r
+\r
+      {0x2c0e, 2612, 1},\r
+\r
+      {0x1040c, 3426, 1},\r
+\r
+      {0x1f6b, 2360, 1},\r
+\r
+      {0x2c6b, 2726, 1},\r
+\r
+      {0x1e0c, 1879, 1},\r
+\r
+      {0x040c, 1032, 1},\r
+\r
+      {0x010c, 189, 1},\r
+\r
+      {0x1f0c, 2243, 1},\r
+\r
+      {0x2c0c, 2606, 1},\r
+\r
+      {0x1f5d, 2345, 1},\r
+\r
+      {0x10414, 3450, 1},\r
+\r
+      {0x1e7a, 2045, 1},\r
+\r
+      {0x047a, 1084, 1},\r
+\r
+      {0x1e14, 1891, 1},\r
+\r
+      {0x0414, 906, 1},\r
+\r
+      {0x0114, 201, 1},\r
+\r
+      {0x1e902, 3969, 1},\r
+\r
+      {0x2c14, 2630, 1},\r
+\r
+      {0x1f5b, 2342, 1},\r
+\r
+      {0xab7a, 1627, 1},\r
+\r
+      {0x24c7, 2543, 1},\r
+\r
+      {0x10408, 3414, 1},\r
+\r
+      {0x0392, 745, 1},\r
+\r
+      {0x0533, 1351, 1},\r
+\r
+      {0x1e08, 1873, 1},\r
+\r
+      {0x0408, 1020, 1},\r
+\r
+      {0x0108, 183, 1},\r
+\r
+      {0x1f08, 2231, 1},\r
+\r
+      {0x2c08, 2594, 1},\r
+\r
+      {0x10406, 3408, 1},\r
+\r
+      {0x0053, 52, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1e06, 1870, 1},\r
+\r
+      {0x0406, 1014, 1},\r
+\r
+      {0x0106, 180, 1},\r
+\r
+      {0x10404, 3402, 1},\r
+\r
+      {0x2c06, 2588, 1},\r
+\r
+      {0x03d5, 813, 1},\r
+\r
+      {0x1e04, 1867, 1},\r
+\r
+      {0x0404, 1008, 1},\r
+\r
+      {0x0104, 177, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x2c04, 2582, 1},\r
+\r
+      {0x10400, 3390, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x0386, 730, 1},\r
+\r
+      {0x1e00, 1861, 1},\r
+\r
+      {0x0400, 996, 1},\r
+\r
+      {0x0100, 171, 1},\r
+\r
+      {0x216b, 2474, 1},\r
+\r
+      {0x2c00, 2570, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x021c, 544, 1},\r
+\r
+      {0x1e2a, 1924, 1},\r
+\r
+      {0x042a, 977, 1},\r
+\r
+      {0x012a, 234, 1},\r
+\r
+      {0x1f2a, 2279, 1},\r
+\r
+      {0x2c2a, 2696, 1},\r
+\r
+      {0x10426, 3504, 1},\r
+\r
+      {0xa72a, 3138, 1},\r
+\r
+      {0xff33, 3366, 1},\r
+\r
+      {0x1e26, 1918, 1},\r
+\r
+      {0x0426, 965, 1},\r
+\r
+      {0x0126, 228, 1},\r
+\r
+      {0x1f95, 194, 2},\r
+\r
+      {0x2c26, 2684, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xa726, 3132, 1},\r
+\r
+      {0x1c95, 1474, 1},\r
+\r
+      {0xab95, 1708, 1},\r
+\r
+      {0x10c95, 3681, 1},\r
+\r
+      {0x054a, 1420, 1},\r
+\r
+      {0x039e, 789, 1},\r
+\r
+      {0x1e2e, 1930, 1},\r
+\r
+      {0x042e, 990, 1},\r
+\r
+      {0x012e, 240, 1},\r
+\r
+      {0x1f2e, 2291, 1},\r
+\r
+      {0x2c2e, 2708, 1},\r
+\r
+      {0x053d, 1381, 1},\r
+\r
+      {0xa72e, 3144, 1},\r
+\r
+      {0x1feb, 2408, 1},\r
+\r
+      {0x2ceb, 2885, 1},\r
+\r
+      {0x051a, 1312, 1},\r
+\r
+      {0x03fa, 890, 1},\r
+\r
+      {0x1e2c, 1927, 1},\r
+\r
+      {0x042c, 984, 1},\r
+\r
+      {0x012c, 237, 1},\r
+\r
+      {0x1f2c, 2285, 1},\r
+\r
+      {0x2c2c, 2702, 1},\r
+\r
+      {0x038e, 836, 1},\r
+\r
+      {0xa72c, 3141, 1},\r
+\r
+      {0xfb16, 125, 2},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x0518, 1309, 1},\r
+\r
+      {0xff30, 3357, 1},\r
+\r
+      {0x1e28, 1921, 1},\r
+\r
+      {0x0428, 971, 1},\r
+\r
+      {0x0128, 231, 1},\r
+\r
+      {0x1f28, 2273, 1},\r
+\r
+      {0x2c28, 2690, 1},\r
+\r
+      {0x038a, 739, 1},\r
+\r
+      {0xa728, 3135, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x212a, 27, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x104cd, 3597, 1},\r
+\r
+      {0x050e, 1294, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x16e4a, 3897, 1},\r
+\r
+      {0x04cd, 1195, 1},\r
+\r
+      {0x01cd, 429, 1},\r
+\r
+      {0x2126, 823, 1},\r
+\r
+      {0x10424, 3498, 1},\r
+\r
+      {0x00cd, 117, 1},\r
+\r
+      {0x050c, 1291, 1},\r
+\r
+      {0x1e24, 1915, 1},\r
+\r
+      {0x0424, 959, 1},\r
+\r
+      {0x0124, 225, 1},\r
+\r
+      {0x1e916, 4029, 1},\r
+\r
+      {0x2c24, 2678, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xa724, 3129, 1},\r
+\r
+      {0x10422, 3492, 1},\r
+\r
+      {0x0514, 1303, 1},\r
+\r
+      {0x104c9, 3585, 1},\r
+\r
+      {0x1e22, 1912, 1},\r
+\r
+      {0x0422, 951, 1},\r
+\r
+      {0x0122, 222, 1},\r
+\r
+      {0x04c9, 1189, 1},\r
+\r
+      {0x2c22, 2672, 1},\r
+\r
+      {0x1fc9, 2384, 1},\r
+\r
+      {0xa722, 3126, 1},\r
+\r
+      {0x00c9, 105, 1},\r
+\r
+      {0x104c4, 3570, 1},\r
+\r
+      {0x0508, 1285, 1},\r
+\r
+      {0x0553, 1447, 1},\r
+\r
+      {0x1ec4, 2141, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x01c4, 417, 1},\r
+\r
+      {0x1fc4, 54, 2},\r
+\r
+      {0x2cc4, 2837, 1},\r
+\r
+      {0x00c4, 89, 1},\r
+\r
+      {0x0506, 1282, 1},\r
+\r
+      {0x104c2, 3564, 1},\r
+\r
+      {0x1f69, 2354, 1},\r
+\r
+      {0x2c69, 2723, 1},\r
+\r
+      {0x1ec2, 2138, 1},\r
+\r
+      {0x104d1, 3609, 1},\r
+\r
+      {0x0504, 1279, 1},\r
+\r
+      {0x1fc2, 253, 2},\r
+\r
+      {0x2cc2, 2834, 1},\r
+\r
+      {0x00c2, 83, 1},\r
+\r
+      {0x01d1, 435, 1},\r
+\r
+      {0x16e5d, 3954, 1},\r
+\r
+      {0x104b7, 3531, 1},\r
+\r
+      {0x00d1, 129, 1},\r
+\r
+      {0x0500, 1273, 1},\r
+\r
+      {0x013f, 261, 1},\r
+\r
+      {0x1f3f, 2318, 1},\r
+\r
+      {0x01b7, 703, 1},\r
+\r
+      {0x1fb7, 10, 3},\r
+\r
+      {0x0230, 571, 1},\r
+\r
+      {0x16e5b, 3948, 1},\r
+\r
+      {0x052a, 1336, 1},\r
+\r
+      {0x1cb7, 1576, 1},\r
+\r
+      {0xabb7, 1810, 1},\r
+\r
+      {0x03e0, 857, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x104b3, 3519, 1},\r
+\r
+      {0x1e921, 4062, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x0526, 1330, 1},\r
+\r
+      {0x16e53, 3924, 1},\r
+\r
+      {0x01b3, 402, 1},\r
+\r
+      {0x1fb3, 62, 2},\r
+\r
+      {0x024a, 595, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xa7b3, 3309, 1},\r
+\r
+      {0x1cb3, 1564, 1},\r
+\r
+      {0xabb3, 1798, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x023d, 378, 1},\r
+\r
+      {0x052e, 1342, 1},\r
+\r
+      {0x1fab, 224, 2},\r
+\r
+      {0x10cd, 3011, 1},\r
+\r
+      {0x021a, 541, 1},\r
+\r
+      {0xa7ab, 631, 1},\r
+\r
+      {0x1cab, 1540, 1},\r
+\r
+      {0xabab, 1774, 1},\r
+\r
+      {0x10cab, 3747, 1},\r
+\r
+      {0x2169, 2468, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1e56, 1990, 1},\r
+\r
+      {0x052c, 1339, 1},\r
+\r
+      {0x0156, 294, 1},\r
+\r
+      {0x1f56, 62, 3},\r
+\r
+      {0x0218, 538, 1},\r
+\r
+      {0x0056, 62, 1},\r
+\r
+      {0xa756, 3201, 1},\r
+\r
+      {0xff2a, 3339, 1},\r
+\r
+      {0x1e54, 1987, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x0154, 291, 1},\r
+\r
+      {0x1f54, 57, 3},\r
+\r
+      {0x0528, 1333, 1},\r
+\r
+      {0x0054, 56, 1},\r
+\r
+      {0xa754, 3198, 1},\r
+\r
+      {0xff26, 3327, 1},\r
+\r
+      {0x104ca, 3588, 1},\r
+\r
+      {0x020e, 523, 1},\r
+\r
+      {0xa656, 3048, 1},\r
+\r
+      {0x1eca, 2150, 1},\r
+\r
+      {0x10c4, 3002, 1},\r
+\r
+      {0x01ca, 425, 1},\r
+\r
+      {0x1fca, 2387, 1},\r
+\r
+      {0x2cca, 2846, 1},\r
+\r
+      {0x00ca, 108, 1},\r
+\r
+      {0x020c, 520, 1},\r
+\r
+      {0xa654, 3045, 1},\r
+\r
+      {0xff2e, 3351, 1},\r
+\r
+      {0x1e9b, 2005, 1},\r
+\r
+      {0x0051, 46, 1},\r
+\r
+      {0x10c2, 2996, 1},\r
+\r
+      {0x1f9b, 184, 2},\r
+\r
+      {0x0524, 1327, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x0214, 532, 1},\r
+\r
+      {0x1c9b, 1492, 1},\r
+\r
+      {0xab9b, 1726, 1},\r
+\r
+      {0x10c9b, 3699, 1},\r
+\r
+      {0xff2c, 3345, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x10b7, 2963, 1},\r
+\r
+      {0x0522, 1324, 1},\r
+\r
+      {0x1e91c, 4047, 1},\r
+\r
+      {0x0395, 755, 1},\r
+\r
+      {0x0208, 514, 1},\r
+\r
+      {0x118b7, 3840, 1},\r
+\r
+      {0x24cd, 2561, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xff28, 3333, 1},\r
+\r
+      {0x104c3, 3567, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x104b1, 3513, 1},\r
+\r
+      {0x0206, 511, 1},\r
+\r
+      {0x04c3, 1180, 1},\r
+\r
+      {0x10b3, 2951, 1},\r
+\r
+      {0x1fc3, 71, 2},\r
+\r
+      {0x01b1, 694, 1},\r
+\r
+      {0x00c3, 86, 1},\r
+\r
+      {0x0204, 508, 1},\r
+\r
+      {0x118b3, 3828, 1},\r
+\r
+      {0xa7b1, 685, 1},\r
+\r
+      {0x1cb1, 1558, 1},\r
+\r
+      {0xabb1, 1792, 1},\r
+\r
+      {0x10cb1, 3765, 1},\r
+\r
+      {0x10ab, 2927, 1},\r
+\r
+      {0x24c9, 2549, 1},\r
+\r
+      {0x0200, 502, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xff24, 3321, 1},\r
+\r
+      {0x118ab, 3804, 1},\r
+\r
+      {0x0531, 1345, 1},\r
+\r
+      {0x053f, 1387, 1},\r
+\r
+      {0x10420, 3486, 1},\r
+\r
+      {0x022a, 562, 1},\r
+\r
+      {0x24c4, 2534, 1},\r
+\r
+      {0x1e20, 1909, 1},\r
+\r
+      {0x0420, 944, 1},\r
+\r
+      {0x0120, 219, 1},\r
+\r
+      {0xff22, 3315, 1},\r
+\r
+      {0x2c20, 2666, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x0226, 556, 1},\r
+\r
+      {0x01a9, 682, 1},\r
+\r
+      {0x1fa9, 214, 2},\r
+\r
+      {0x24c2, 2528, 1},\r
+\r
+      {0x01a7, 393, 1},\r
+\r
+      {0x1fa7, 244, 2},\r
+\r
+      {0x1ca9, 1534, 1},\r
+\r
+      {0xaba9, 1768, 1},\r
+\r
+      {0x10ca9, 3741, 1},\r
+\r
+      {0x1ca7, 1528, 1},\r
+\r
+      {0xaba7, 1762, 1},\r
+\r
+      {0x10ca7, 3735, 1},\r
+\r
+      {0x022e, 568, 1},\r
+\r
+      {0x1e88, 2066, 1},\r
+\r
+      {0x24b7, 2495, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1f88, 129, 2},\r
+\r
+      {0x2c88, 2747, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x1c88, 3029, 1},\r
+\r
+      {0xab88, 1669, 1},\r
+\r
+      {0x10c88, 3642, 1},\r
+\r
+      {0x022c, 565, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0xff31, 3360, 1},\r
+\r
+      {0x1e52, 1984, 1},\r
+\r
+      {0x0556, 1456, 1},\r
+\r
+      {0x0152, 288, 1},\r
+\r
+      {0x1f52, 52, 3},\r
+\r
+      {0xa688, 3096, 1},\r
+\r
+      {0x0052, 49, 1},\r
+\r
+      {0xa752, 3195, 1},\r
+\r
+      {0x0228, 559, 1},\r
+\r
+      {0x1e50, 1981, 1},\r
+\r
+      {0x0554, 1450, 1},\r
+\r
+      {0x0150, 285, 1},\r
+\r
+      {0x1f50, 84, 2},\r
+\r
+      {0x1041e, 3480, 1},\r
+\r
+      {0x0050, 43, 1},\r
+\r
+      {0xa750, 3192, 1},\r
+\r
+      {0x1e1e, 1906, 1},\r
+\r
+      {0x041e, 937, 1},\r
+\r
+      {0x011e, 216, 1},\r
+\r
+      {0xa652, 3042, 1},\r
+\r
+      {0x2c1e, 2660, 1},\r
+\r
+      {0x03c2, 803, 1},\r
+\r
+      {0x10c3, 2999, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x10b1, 2945, 1},\r
+\r
+      {0x03d1, 765, 1},\r
+\r
+      {0x0551, 1441, 1},\r
+\r
+      {0xa650, 3039, 1},\r
+\r
+      {0x0224, 553, 1},\r
+\r
+      {0x118b1, 3822, 1},\r
+\r
+      {0x1e4e, 1978, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x014e, 282, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x004e, 37, 1},\r
+\r
+      {0xa74e, 3189, 1},\r
+\r
+      {0x10412, 3444, 1},\r
+\r
+      {0x0222, 550, 1},\r
+\r
+      {0x16e56, 3933, 1},\r
+\r
+      {0x1e12, 1888, 1},\r
+\r
+      {0x0412, 899, 1},\r
+\r
+      {0x0112, 198, 1},\r
+\r
+      {0x24ca, 2552, 1},\r
+\r
+      {0x2c12, 2624, 1},\r
+\r
+      {0x018f, 625, 1},\r
+\r
+      {0x1f8f, 164, 2},\r
+\r
+      {0x16e54, 3927, 1},\r
+\r
+      {0xa64e, 3036, 1},\r
+\r
+      {0x004f, 40, 1},\r
+\r
+      {0x10a9, 2921, 1},\r
+\r
+      {0xab8f, 1690, 1},\r
+\r
+      {0x10c8f, 3663, 1},\r
+\r
+      {0x10a7, 2915, 1},\r
+\r
+      {0x1e48, 1969, 1},\r
+\r
+      {0x118a9, 3798, 1},\r
+\r
+      {0x03ab, 830, 1},\r
+\r
+      {0x1f48, 2321, 1},\r
+\r
+      {0x118a7, 3792, 1},\r
+\r
+      {0x0048, 21, 1},\r
+\r
+      {0xa748, 3180, 1},\r
+\r
+      {0x10410, 3438, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x16e51, 3918, 1},\r
+\r
+      {0x1e10, 1885, 1},\r
+\r
+      {0x0410, 893, 1},\r
+\r
+      {0x0110, 195, 1},\r
+\r
+      {0x104c0, 3558, 1},\r
+\r
+      {0x2c10, 2618, 1},\r
+\r
+      {0x1e91a, 4041, 1},\r
+\r
+      {0x1ec0, 2135, 1},\r
+\r
+      {0x04c0, 1198, 1},\r
+\r
+      {0xa648, 3026, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x2cc0, 2831, 1},\r
+\r
+      {0x00c0, 77, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x24c3, 2531, 1},\r
+\r
+      {0x0520, 1321, 1},\r
+\r
+      {0x104c8, 3582, 1},\r
+\r
+      {0x1e918, 4035, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1ec8, 2147, 1},\r
+\r
+      {0xfb14, 109, 2},\r
+\r
+      {0x01c8, 421, 1},\r
+\r
+      {0x1fc8, 2381, 1},\r
+\r
+      {0x2cc8, 2843, 1},\r
+\r
+      {0x00c8, 102, 1},\r
+\r
+      {0x104b9, 3537, 1},\r
+\r
+      {0x1efc, 2225, 1},\r
+\r
+      {0x04fc, 1267, 1},\r
+\r
+      {0x01fc, 496, 1},\r
+\r
+      {0x1ffc, 96, 2},\r
+\r
+      {0x1e90e, 4005, 1},\r
+\r
+      {0x1fb9, 2420, 1},\r
+\r
+      {0x104b5, 3525, 1},\r
+\r
+      {0x039b, 779, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1cb9, 1582, 1},\r
+\r
+      {0xabb9, 1816, 1},\r
+\r
+      {0x01b5, 405, 1},\r
+\r
+      {0x1e90c, 3999, 1},\r
+\r
+      {0xfb06, 29, 2},\r
+\r
+      {0x00b5, 782, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1cb5, 1570, 1},\r
+\r
+      {0xabb5, 1804, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xfb04, 5, 3},\r
+\r
+      {0x1fad, 234, 2},\r
+\r
+      {0x1e914, 4023, 1},\r
+\r
+      {0x0552, 1444, 1},\r
+\r
+      {0xa7ad, 661, 1},\r
+\r
+      {0x1cad, 1546, 1},\r
+\r
+      {0xabad, 1780, 1},\r
+\r
+      {0x10cad, 3753, 1},\r
+\r
+      {0xfb00, 4, 2},\r
+\r
+      {0x01af, 399, 1},\r
+\r
+      {0x1faf, 244, 2},\r
+\r
+      {0x0550, 1438, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1e908, 3987, 1},\r
+\r
+      {0x1caf, 1552, 1},\r
+\r
+      {0xabaf, 1786, 1},\r
+\r
+      {0x10caf, 3759, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x051e, 1318, 1},\r
+\r
+      {0x018b, 366, 1},\r
+\r
+      {0x1f8b, 144, 2},\r
+\r
+      {0x1e906, 3981, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xa78b, 3261, 1},\r
+\r
+      {0x1fa5, 234, 2},\r
+\r
+      {0xab8b, 1678, 1},\r
+\r
+      {0x10c8b, 3651, 1},\r
+\r
+      {0x1e904, 3975, 1},\r
+\r
+      {0x1ca5, 1522, 1},\r
+\r
+      {0xaba5, 1756, 1},\r
+\r
+      {0x10ca5, 3729, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x054e, 1432, 1},\r
+\r
+      {0x1eda, 2174, 1},\r
+\r
+      {0x04da, 1216, 1},\r
+\r
+      {0x1e900, 3963, 1},\r
+\r
+      {0x1fda, 2393, 1},\r
+\r
+      {0x2cda, 2870, 1},\r
+\r
+      {0x00da, 153, 1},\r
+\r
+      {0x10c0, 2990, 1},\r
+\r
+      {0x16e52, 3921, 1},\r
+\r
+      {0x03a9, 823, 1},\r
+\r
+      {0x0512, 1300, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x03a7, 817, 1},\r
+\r
+      {0x1fa3, 224, 2},\r
+\r
+      {0x054f, 1435, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x16e50, 3915, 1},\r
+\r
+      {0x1ca3, 1516, 1},\r
+\r
+      {0xaba3, 1750, 1},\r
+\r
+      {0x10ca3, 3723, 1},\r
+\r
+      {0x13fc, 1849, 1},\r
+\r
+      {0x1fa1, 214, 2},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x0388, 733, 1},\r
+\r
+      {0x0548, 1414, 1},\r
+\r
+      {0x1ca1, 1510, 1},\r
+\r
+      {0xaba1, 1744, 1},\r
+\r
+      {0x10ca1, 3717, 1},\r
+\r
+      {0x10b9, 2969, 1},\r
+\r
+      {0x1ef4, 2213, 1},\r
+\r
+      {0x04f4, 1255, 1},\r
+\r
+      {0x01f4, 487, 1},\r
+\r
+      {0x1ff4, 101, 2},\r
+\r
+      {0x118b9, 3846, 1},\r
+\r
+      {0x0510, 1297, 1},\r
+\r
+      {0x10b5, 2957, 1},\r
+\r
+      {0x104cf, 3603, 1},\r
+\r
+      {0x16e4e, 3909, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x118b5, 3834, 1},\r
+\r
+      {0x01cf, 432, 1},\r
+\r
+      {0x0220, 381, 1},\r
+\r
+      {0x10ad, 2933, 1},\r
+\r
+      {0x00cf, 123, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x1e97, 34, 2},\r
+\r
+      {0x118ad, 3810, 1},\r
+\r
+      {0x0197, 649, 1},\r
+\r
+      {0x1f97, 204, 2},\r
+\r
+      {0x16e4f, 3912, 1},\r
+\r
+      {0x10af, 2939, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1c97, 1480, 1},\r
+\r
+      {0xab97, 1714, 1},\r
+\r
+      {0x10c97, 3687, 1},\r
+\r
+      {0x118af, 3816, 1},\r
+\r
+      {0x0181, 613, 1},\r
+\r
+      {0x1f81, 134, 2},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x16e48, 3891, 1},\r
+\r
+      {0x24c0, 2522, 1},\r
+\r
+      {0x1c81, 906, 1},\r
+\r
+      {0xab81, 1648, 1},\r
+\r
+      {0x10c81, 3621, 1},\r
+\r
+      {0x10a5, 2909, 1},\r
+\r
+      {0x1e6c, 2024, 1},\r
+\r
+      {0x046c, 1063, 1},\r
+\r
+      {0x016c, 327, 1},\r
+\r
+      {0x1f6c, 2363, 1},\r
+\r
+      {0x118a5, 3786, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xa76c, 3234, 1},\r
+\r
+      {0x24c8, 2546, 1},\r
+\r
+      {0x1e6a, 2021, 1},\r
+\r
+      {0x046a, 1060, 1},\r
+\r
+      {0x016a, 324, 1},\r
+\r
+      {0x1f6a, 2357, 1},\r
+\r
+      {0x038f, 839, 1},\r
+\r
+      {0x1e32, 1936, 1},\r
+\r
+      {0xa76a, 3231, 1},\r
+\r
+      {0x0132, 243, 1},\r
+\r
+      {0x24b9, 2501, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xa66c, 3081, 1},\r
+\r
+      {0xa732, 3147, 1},\r
+\r
+      {0x10a3, 2903, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x021e, 547, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x118a3, 3780, 1},\r
+\r
+      {0xa66a, 3078, 1},\r
+\r
+      {0x1f59, 2339, 1},\r
+\r
+      {0x10a1, 2897, 1},\r
+\r
+      {0x0059, 71, 1},\r
+\r
+      {0x1e64, 2012, 1},\r
+\r
+      {0x0464, 1051, 1},\r
+\r
+      {0x0164, 315, 1},\r
+\r
+      {0x118a1, 3774, 1},\r
+\r
+      {0x2c64, 676, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xa764, 3222, 1},\r
+\r
+      {0x024e, 601, 1},\r
+\r
+      {0x1e68, 2018, 1},\r
+\r
+      {0x0468, 1057, 1},\r
+\r
+      {0x0168, 321, 1},\r
+\r
+      {0x1f68, 2351, 1},\r
+\r
+      {0x10417, 3459, 1},\r
+\r
+      {0x042f, 993, 1},\r
+\r
+      {0xa768, 3228, 1},\r
+\r
+      {0x1f2f, 2294, 1},\r
+\r
+      {0x0417, 916, 1},\r
+\r
+      {0x0212, 529, 1},\r
+\r
+      {0xa664, 3069, 1},\r
+\r
+      {0x2c17, 2639, 1},\r
+\r
+      {0x216c, 2477, 1},\r
+\r
+      {0x1e62, 2009, 1},\r
+\r
+      {0x0462, 1047, 1},\r
+\r
+      {0x0162, 312, 1},\r
+\r
+      {0x1e46, 1966, 1},\r
+\r
+      {0x2c62, 658, 1},\r
+\r
+      {0xa668, 3075, 1},\r
+\r
+      {0xa762, 3219, 1},\r
+\r
+      {0x216a, 2471, 1},\r
+\r
+      {0x0046, 15, 1},\r
+\r
+      {0xa746, 3177, 1},\r
+\r
+      {0x0248, 592, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x2132, 2438, 1},\r
+\r
+      {0x1e60, 2005, 1},\r
+\r
+      {0x0460, 1044, 1},\r
+\r
+      {0x0160, 309, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x2c60, 2711, 1},\r
+\r
+      {0xa662, 3066, 1},\r
+\r
+      {0xa760, 3216, 1},\r
+\r
+      {0x0210, 526, 1},\r
+\r
+      {0xa646, 3023, 1},\r
+\r
+      {0x1e44, 1963, 1},\r
+\r
+      {0x1eec, 2201, 1},\r
+\r
+      {0x04ec, 1243, 1},\r
+\r
+      {0x01ec, 477, 1},\r
+\r
+      {0x1fec, 2435, 1},\r
+\r
+      {0x0044, 9, 1},\r
+\r
+      {0xa744, 3174, 1},\r
+\r
+      {0x2164, 2453, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xa660, 3063, 1},\r
+\r
+      {0x1ee2, 2186, 1},\r
+\r
+      {0x04e2, 1228, 1},\r
+\r
+      {0x01e2, 462, 1},\r
+\r
+      {0x1fe2, 36, 3},\r
+\r
+      {0x2ce2, 2882, 1},\r
+\r
+      {0x2168, 2465, 1},\r
+\r
+      {0x1ed8, 2171, 1},\r
+\r
+      {0x04d8, 1213, 1},\r
+\r
+      {0xa644, 3020, 1},\r
+\r
+      {0x1fd8, 2423, 1},\r
+\r
+      {0x2cd8, 2867, 1},\r
+\r
+      {0x00d8, 147, 1},\r
+\r
+      {0x1ede, 2180, 1},\r
+\r
+      {0x04de, 1222, 1},\r
+\r
+      {0x01de, 456, 1},\r
+\r
+      {0x03a5, 810, 1},\r
+\r
+      {0x2cde, 2876, 1},\r
+\r
+      {0x00de, 165, 1},\r
+\r
+      {0x2162, 2447, 1},\r
+\r
+      {0x1ed6, 2168, 1},\r
+\r
+      {0x04d6, 1210, 1},\r
+\r
+      {0x24cf, 2567, 1},\r
+\r
+      {0x1fd6, 76, 2},\r
+\r
+      {0x2cd6, 2864, 1},\r
+\r
+      {0x00d6, 144, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x104d2, 3612, 1},\r
+\r
+      {0x03da, 848, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1ed2, 2162, 1},\r
+\r
+      {0x04d2, 1204, 1},\r
+\r
+      {0x2160, 2441, 1},\r
+\r
+      {0x1fd2, 20, 3},\r
+\r
+      {0x2cd2, 2858, 1},\r
+\r
+      {0x00d2, 132, 1},\r
+\r
+      {0x104d0, 3606, 1},\r
+\r
+      {0x03a3, 803, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1ed0, 2159, 1},\r
+\r
+      {0x04d0, 1201, 1},\r
+\r
+      {0x0532, 1348, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x2cd0, 2855, 1},\r
+\r
+      {0x00d0, 126, 1},\r
+\r
+      {0x03a1, 799, 1},\r
+\r
+      {0x104cc, 3594, 1},\r
+\r
+      {0x104bf, 3555, 1},\r
+\r
+      {0x042d, 987, 1},\r
+\r
+      {0x1ecc, 2153, 1},\r
+\r
+      {0x1f2d, 2288, 1},\r
+\r
+      {0x2c2d, 2705, 1},\r
+\r
+      {0x1fcc, 71, 2},\r
+\r
+      {0x2ccc, 2849, 1},\r
+\r
+      {0x00cc, 114, 1},\r
+\r
+      {0x104cb, 3591, 1},\r
+\r
+      {0x03f4, 765, 1},\r
+\r
+      {0x1cbf, 1594, 1},\r
+\r
+      {0xabbf, 1834, 1},\r
+\r
+      {0x04cb, 1192, 1},\r
+\r
+      {0x01cb, 425, 1},\r
+\r
+      {0x1fcb, 2390, 1},\r
+\r
+      {0x104c6, 3576, 1},\r
+\r
+      {0x00cb, 111, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1ec6, 2144, 1},\r
+\r
+      {0x03cf, 842, 1},\r
+\r
+      {0x104c5, 3573, 1},\r
+\r
+      {0x1fc6, 67, 2},\r
+\r
+      {0x2cc6, 2840, 1},\r
+\r
+      {0x00c6, 96, 1},\r
+\r
+      {0x04c5, 1183, 1},\r
+\r
+      {0x01c5, 417, 1},\r
+\r
+      {0x104bd, 3549, 1},\r
+\r
+      {0x0397, 762, 1},\r
+\r
+      {0x00c5, 92, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1e920, 4059, 1},\r
+\r
+      {0xff32, 3363, 1},\r
+\r
+      {0x104bb, 3543, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x0546, 1408, 1},\r
+\r
+      {0x1cbd, 1588, 1},\r
+\r
+      {0xabbd, 1828, 1},\r
+\r
+      {0x1fbb, 2378, 1},\r
+\r
+      {0x019f, 673, 1},\r
+\r
+      {0x1f9f, 204, 2},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x16e59, 3942, 1},\r
+\r
+      {0xabbb, 1822, 1},\r
+\r
+      {0x1c9f, 1504, 1},\r
+\r
+      {0xab9f, 1738, 1},\r
+\r
+      {0x10c9f, 3711, 1},\r
+\r
+      {0x1ef0, 2207, 1},\r
+\r
+      {0x04f0, 1249, 1},\r
+\r
+      {0x01f0, 20, 2},\r
+\r
+      {0x019d, 670, 1},\r
+\r
+      {0x1f9d, 194, 2},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x0544, 1402, 1},\r
+\r
+      {0x1c9d, 1498, 1},\r
+\r
+      {0xab9d, 1732, 1},\r
+\r
+      {0x10c9d, 3705, 1},\r
+\r
+      {0x1e99, 42, 2},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xff2f, 3354, 1},\r
+\r
+      {0x1f99, 174, 2},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x0193, 634, 1},\r
+\r
+      {0x1f93, 184, 2},\r
+\r
+      {0x1c99, 1486, 1},\r
+\r
+      {0xab99, 1720, 1},\r
+\r
+      {0x10c99, 3693, 1},\r
+\r
+      {0x1c93, 1468, 1},\r
+\r
+      {0xab93, 1702, 1},\r
+\r
+      {0x10c93, 3675, 1},\r
+\r
+      {0x0145, 270, 1},\r
+\r
+      {0x16e46, 3885, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x0045, 12, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x0191, 369, 1},\r
+\r
+      {0x1f91, 174, 2},\r
+\r
+      {0x1e91e, 4053, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x10bf, 2987, 1},\r
+\r
+      {0x1c91, 1462, 1},\r
+\r
+      {0xab91, 1696, 1},\r
+\r
+      {0x10c91, 3669, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x118bf, 3864, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x0187, 363, 1},\r
+\r
+      {0x1f87, 164, 2},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x16e44, 3879, 1},\r
+\r
+      {0x1c87, 1047, 1},\r
+\r
+      {0xab87, 1666, 1},\r
+\r
+      {0x10c87, 3639, 1},\r
+\r
+      {0x1e72, 2033, 1},\r
+\r
+      {0x0472, 1072, 1},\r
+\r
+      {0x0172, 336, 1},\r
+\r
+      {0x0232, 574, 1},\r
+\r
+      {0x2c72, 2729, 1},\r
+\r
+      {0x10c5, 3005, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1e912, 4017, 1},\r
+\r
+      {0xab72, 1603, 1},\r
+\r
+      {0x0139, 252, 1},\r
+\r
+      {0x1f39, 2300, 1},\r
+\r
+      {0x10bd, 2981, 1},\r
+\r
+      {0x1e66, 2015, 1},\r
+\r
+      {0x0466, 1054, 1},\r
+\r
+      {0x0166, 318, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x118bd, 3858, 1},\r
+\r
+      {0x10bb, 2975, 1},\r
+\r
+      {0xa766, 3225, 1},\r
+\r
+      {0x1e70, 2030, 1},\r
+\r
+      {0x0470, 1069, 1},\r
+\r
+      {0x0170, 333, 1},\r
+\r
+      {0x118bb, 3852, 1},\r
+\r
+      {0x2c70, 610, 1},\r
+\r
+      {0x1edc, 2177, 1},\r
+\r
+      {0x04dc, 1219, 1},\r
+\r
+      {0x03ec, 875, 1},\r
+\r
+      {0xab70, 1597, 1},\r
+\r
+      {0x2cdc, 2873, 1},\r
+\r
+      {0x00dc, 159, 1},\r
+\r
+      {0xa666, 3072, 1},\r
+\r
+      {0x1e910, 4011, 1},\r
+\r
+      {0x1e5a, 1996, 1},\r
+\r
+      {0x0143, 267, 1},\r
+\r
+      {0x015a, 300, 1},\r
+\r
+      {0x03e2, 860, 1},\r
+\r
+      {0x0043, 6, 1},\r
+\r
+      {0x005a, 74, 1},\r
+\r
+      {0xa75a, 3207, 1},\r
+\r
+      {0x24cc, 2558, 1},\r
+\r
+      {0x24bf, 2519, 1},\r
+\r
+      {0x03d8, 845, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1e3a, 1948, 1},\r
+\r
+      {0x0246, 589, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1f3a, 2303, 1},\r
+\r
+      {0x03de, 854, 1},\r
+\r
+      {0x24cb, 2555, 1},\r
+\r
+      {0xa73a, 3159, 1},\r
+\r
+      {0xa65a, 3054, 1},\r
+\r
+      {0x1e58, 1993, 1},\r
+\r
+      {0xff2d, 3348, 1},\r
+\r
+      {0x0158, 297, 1},\r
+\r
+      {0x03d6, 795, 1},\r
+\r
+      {0x24c6, 2540, 1},\r
+\r
+      {0x0058, 68, 1},\r
+\r
+      {0xa758, 3204, 1},\r
+\r
+      {0x0141, 264, 1},\r
+\r
+      {0x1e42, 1960, 1},\r
+\r
+      {0x24c5, 2537, 1},\r
+\r
+      {0x0041, 0, 1},\r
+\r
+      {0x2166, 2459, 1},\r
+\r
+      {0x0244, 691, 1},\r
+\r
+      {0x0042, 3, 1},\r
+\r
+      {0xa742, 3171, 1},\r
+\r
+      {0x24bd, 2513, 1},\r
+\r
+      {0x104ce, 3600, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xa658, 3051, 1},\r
+\r
+      {0x1ece, 2156, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x24bb, 2507, 1},\r
+\r
+      {0x03d0, 745, 1},\r
+\r
+      {0x2cce, 2852, 1},\r
+\r
+      {0x00ce, 120, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xa642, 3017, 1},\r
+\r
+      {0x1ef2, 2210, 1},\r
+\r
+      {0x04f2, 1252, 1},\r
+\r
+      {0x01f2, 483, 1},\r
+\r
+      {0x1ff2, 257, 2},\r
+\r
+      {0x2cf2, 2891, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x0545, 1405, 1},\r
+\r
+      {0x1eea, 2198, 1},\r
+\r
+      {0x04ea, 1240, 1},\r
+\r
+      {0x01ea, 474, 1},\r
+\r
+      {0x1fea, 2405, 1},\r
+\r
+      {0x1ee8, 2195, 1},\r
+\r
+      {0x04e8, 1237, 1},\r
+\r
+      {0x01e8, 471, 1},\r
+\r
+      {0x1fe8, 2429, 1},\r
+\r
+      {0x1ee6, 2192, 1},\r
+\r
+      {0x04e6, 1234, 1},\r
+\r
+      {0x01e6, 468, 1},\r
+\r
+      {0x1fe6, 88, 2},\r
+\r
+      {0x1f4b, 2330, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x004b, 27, 1},\r
+\r
+      {0x0587, 105, 2},\r
+\r
+      {0x1ee4, 2189, 1},\r
+\r
+      {0x04e4, 1231, 1},\r
+\r
+      {0x01e4, 465, 1},\r
+\r
+      {0x1fe4, 80, 2},\r
+\r
+      {0x104c1, 3561, 1},\r
+\r
+      {0x1e5e, 2002, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x015e, 306, 1},\r
+\r
+      {0x04c1, 1177, 1},\r
+\r
+      {0x1f83, 144, 2},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xa75e, 3213, 1},\r
+\r
+      {0x00c1, 80, 1},\r
+\r
+      {0x1c83, 947, 1},\r
+\r
+      {0xab83, 1654, 1},\r
+\r
+      {0x10c83, 3627, 1},\r
+\r
+      {0x0539, 1369, 1},\r
+\r
+      {0x039f, 792, 1},\r
+\r
+      {0x1e7e, 2051, 1},\r
+\r
+      {0x047e, 1090, 1},\r
+\r
+      {0x16e45, 3882, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x2c7e, 580, 1},\r
+\r
+      {0xa65e, 3060, 1},\r
+\r
+      {0xa77e, 3246, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xab7e, 1639, 1},\r
+\r
+      {0x03f0, 775, 1},\r
+\r
+      {0x039d, 786, 1},\r
+\r
+      {0x1e76, 2039, 1},\r
+\r
+      {0x0476, 1078, 1},\r
+\r
+      {0x0176, 342, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1e5c, 1999, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x015c, 303, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xab76, 1615, 1},\r
+\r
+      {0x0399, 770, 1},\r
+\r
+      {0xa75c, 3210, 1},\r
+\r
+      {0x0543, 1399, 1},\r
+\r
+      {0x0393, 749, 1},\r
+\r
+      {0x0149, 46, 2},\r
+\r
+      {0x1f49, 2324, 1},\r
+\r
+      {0x1e40, 1957, 1},\r
+\r
+      {0x0049, 4065, 1},\r
+\r
+      {0x1eee, 2204, 1},\r
+\r
+      {0x04ee, 1246, 1},\r
+\r
+      {0x01ee, 480, 1},\r
+\r
+      {0x0345, 770, 1},\r
+\r
+      {0xa740, 3168, 1},\r
+\r
+      {0xa65c, 3057, 1},\r
+\r
+      {0x053a, 1372, 1},\r
+\r
+      {0xff39, 3384, 1},\r
+\r
+      {0x0391, 742, 1},\r
+\r
+      {0x1e3e, 1954, 1},\r
+\r
+      {0x2183, 2489, 1},\r
+\r
+      {0x1e38, 1945, 1},\r
+\r
+      {0x1f3e, 2315, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1f38, 2297, 1},\r
+\r
+      {0xa73e, 3165, 1},\r
+\r
+      {0xa640, 3014, 1},\r
+\r
+      {0xa738, 3156, 1},\r
+\r
+      {0x1e36, 1942, 1},\r
+\r
+      {0x0541, 1393, 1},\r
+\r
+      {0x0136, 249, 1},\r
+\r
+      {0x1e34, 1939, 1},\r
+\r
+      {0x0542, 1396, 1},\r
+\r
+      {0x0134, 246, 1},\r
+\r
+      {0xa736, 3153, 1},\r
+\r
+      {0x013b, 255, 1},\r
+\r
+      {0x1f3b, 2306, 1},\r
+\r
+      {0xa734, 3150, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x0372, 715, 1},\r
+\r
+      {0x10415, 3453, 1},\r
+\r
+      {0x16e43, 3876, 1},\r
+\r
+      {0x16e5a, 3945, 1},\r
+\r
+      {0x042b, 981, 1},\r
+\r
+      {0x0415, 910, 1},\r
+\r
+      {0x1f2b, 2282, 1},\r
+\r
+      {0x2c2b, 2699, 1},\r
+\r
+      {0x2c15, 2633, 1},\r
+\r
+      {0x10c1, 2993, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1041d, 3477, 1},\r
+\r
+      {0x0245, 700, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xff3a, 3387, 1},\r
+\r
+      {0x041d, 934, 1},\r
+\r
+      {0xfb17, 117, 2},\r
+\r
+      {0x1f1d, 2270, 1},\r
+\r
+      {0x2c1d, 2657, 1},\r
+\r
+      {0x0370, 712, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x16e58, 3939, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x03dc, 851, 1},\r
+\r
+      {0x1041b, 3471, 1},\r
+\r
+      {0x24ce, 2564, 1},\r
+\r
+      {0x16e41, 3870, 1},\r
+\r
+      {0x054b, 1423, 1},\r
+\r
+      {0x041b, 928, 1},\r
+\r
+      {0x16e42, 3873, 1},\r
+\r
+      {0x1f1b, 2264, 1},\r
+\r
+      {0x2c1b, 2651, 1},\r
+\r
+      {0x10419, 3465, 1},\r
+\r
+      {0x10413, 3447, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x0419, 922, 1},\r
+\r
+      {0x0413, 903, 1},\r
+\r
+      {0x1f19, 2258, 1},\r
+\r
+      {0x2c19, 2645, 1},\r
+\r
+      {0x2c13, 2627, 1},\r
+\r
+      {0x1040f, 3435, 1},\r
+\r
+      {0x1e917, 4032, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x017f, 52, 1},\r
+\r
+      {0x040f, 1041, 1},\r
+\r
+      {0x2c7f, 583, 1},\r
+\r
+      {0x1f0f, 2252, 1},\r
+\r
+      {0x2c0f, 2615, 1},\r
+\r
+      {0x1040d, 3429, 1},\r
+\r
+      {0xab7f, 1642, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x212b, 92, 1},\r
+\r
+      {0x040d, 1035, 1},\r
+\r
+      {0x1040b, 3423, 1},\r
+\r
+      {0x1f0d, 2246, 1},\r
+\r
+      {0x2c0d, 2609, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x040b, 1029, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1f0b, 2240, 1},\r
+\r
+      {0x2c0b, 2603, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x24c1, 2525, 1},\r
+\r
+      {0x16e4b, 3900, 1},\r
+\r
+      {0x10409, 3417, 1},\r
+\r
+      {0x10405, 3405, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x0243, 354, 1},\r
+\r
+      {0x0409, 1023, 1},\r
+\r
+      {0x0405, 1011, 1},\r
+\r
+      {0x1f09, 2234, 1},\r
+\r
+      {0x2c09, 2597, 1},\r
+\r
+      {0x2c05, 2585, 1},\r
+\r
+      {0x0549, 1417, 1},\r
+\r
+      {0x10403, 3399, 1},\r
+\r
+      {0x16e5e, 3957, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x0540, 1390, 1},\r
+\r
+      {0x0403, 1005, 1},\r
+\r
+      {0x023a, 2714, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x2c03, 2579, 1},\r
+\r
+      {0x10401, 3393, 1},\r
+\r
+      {0x03ea, 872, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x0401, 999, 1},\r
+\r
+      {0x03e8, 869, 1},\r
+\r
+      {0x053e, 1384, 1},\r
+\r
+      {0x2c01, 2573, 1},\r
+\r
+      {0x0538, 1366, 1},\r
+\r
+      {0x03e6, 866, 1},\r
+\r
+      {0x0241, 586, 1},\r
+\r
+      {0x1ef8, 2219, 1},\r
+\r
+      {0x04f8, 1261, 1},\r
+\r
+      {0x01f8, 490, 1},\r
+\r
+      {0x1ff8, 2399, 1},\r
+\r
+      {0x0536, 1360, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x03e4, 863, 1},\r
+\r
+      {0x0534, 1354, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x053b, 1375, 1},\r
+\r
+      {0x16e5c, 3951, 1},\r
+\r
+      {0x1ef6, 2216, 1},\r
+\r
+      {0x04f6, 1258, 1},\r
+\r
+      {0x01f6, 372, 1},\r
+\r
+      {0x1ff6, 92, 2},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x16e49, 3894, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1f8d, 154, 2},\r
+\r
+      {0x1e3c, 1951, 1},\r
+\r
+      {0x16e40, 3867, 1},\r
+\r
+      {0xa78d, 643, 1},\r
+\r
+      {0x1f3c, 2309, 1},\r
+\r
+      {0xab8d, 1684, 1},\r
+\r
+      {0x10c8d, 3657, 1},\r
+\r
+      {0xa73c, 3162, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1e78, 2042, 1},\r
+\r
+      {0x0478, 1081, 1},\r
+\r
+      {0x0178, 168, 1},\r
+\r
+      {0x1e74, 2036, 1},\r
+\r
+      {0x0474, 1075, 1},\r
+\r
+      {0x0174, 339, 1},\r
+\r
+      {0xff38, 3381, 1},\r
+\r
+      {0x0376, 718, 1},\r
+\r
+      {0xab78, 1621, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0xab74, 1609, 1},\r
+\r
+      {0x0429, 974, 1},\r
+\r
+      {0xff36, 3375, 1},\r
+\r
+      {0x1f29, 2276, 1},\r
+\r
+      {0x2c29, 2693, 1},\r
+\r
+      {0xff34, 3369, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x10427, 3507, 1},\r
+\r
+      {0x10425, 3501, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x0427, 968, 1},\r
+\r
+      {0x0425, 962, 1},\r
+\r
+      {0x03ee, 878, 1},\r
+\r
+      {0x2c27, 2687, 1},\r
+\r
+      {0x2c25, 2681, 1},\r
+\r
+      {0xff2b, 3342, 1},\r
+\r
+      {0x10423, 3495, 1},\r
+\r
+      {0x1041f, 3483, 1},\r
+\r
+      {0x10411, 3441, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x0423, 956, 1},\r
+\r
+      {0x041f, 941, 1},\r
+\r
+      {0x0411, 896, 1},\r
+\r
+      {0x2c23, 2675, 1},\r
+\r
+      {0x2c1f, 2663, 1},\r
+\r
+      {0x2c11, 2621, 1},\r
+\r
+      {0x10407, 3411, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x017d, 351, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x0407, 1017, 1},\r
+\r
+      {0x13f8, 1837, 1},\r
+\r
+      {0xa77d, 1855, 1},\r
+\r
+      {0x2c07, 2591, 1},\r
+\r
+      {0xab7d, 1636, 1},\r
+\r
+      {0x017b, 348, 1},\r
+\r
+      {0x0179, 345, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0xa77b, 3243, 1},\r
+\r
+      {0xa779, 3240, 1},\r
+\r
+      {0xab7b, 1630, 1},\r
+\r
+      {0xab79, 1624, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x023e, 2717, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x023b, 577, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x037f, 884, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x053c, 1378, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0xff29, 3336, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0xff27, 3330, 1},\r
+\r
+      {0xff25, 3324, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0xff23, 3318, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0xfb15, 113, 2},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1e915, 4026, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0xfb13, 121, 2},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x1e91d, 4050, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x1e91b, 4044, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x1e919, 4038, 1},\r
+\r
+      {0x1e913, 4020, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0xfb05, 29, 2},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0x1e90f, 4008, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xfb03, 0, 3},\r
+\r
+      {0x1e90d, 4002, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x1e90b, 3996, 1},\r
+      {0xffffffff, -1, 0},\r
+\r
+      {0xfb01, 8, 2},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x1e909, 3990, 1},\r
+\r
+      {0x1e905, 3978, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x1e903, 3972, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x1e901, 3966, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x1e91f, 4056, 1},\r
+\r
+      {0x1e911, 4014, 1},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},\r
+\r
+      {0x1e907, 3984, 1}\r
+    };\r
+\r
+  if (0 == 0)\r
+    {\r
+      int key = hash(&code);\r
+\r
+      if (key <= MAX_HASH_VALUE)\r
+        {\r
+          OnigCodePoint gcode = wordlist[key].code;\r
+\r
+          if (code == gcode && wordlist[key].index >= 0)\r
+            return &wordlist[key];\r
+        }\r
+    }\r
+  return 0;\r
+}\r
+\r
+\r
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/utf16_le.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/utf16_le.c
new file mode 100644 (file)
index 0000000..b139f83
--- /dev/null
@@ -0,0 +1,291 @@
+/**********************************************************************\r
+  utf16_le.c -  Oniguruma (regular expression library)\r
+**********************************************************************/\r
+/*-\r
+ * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
+ * SUCH DAMAGE.\r
+ */\r
+#include "regint.h"  /* for USE_CALLOUT */\r
+\r
+static int\r
+init(void)\r
+{\r
+#ifdef USE_CALLOUT\r
+\r
+    int id;\r
+    OnigEncoding enc;\r
+    char* name;\r
+    unsigned int args[4];\r
+    OnigValue    opts[4];\r
+\r
+    enc = ONIG_ENCODING_UTF16_LE;\r
+\r
+    name = "F\000A\000I\000L\000\000\000";            BC0_P(name, fail);\r
+    name = "M\000I\000S\000M\000A\000T\000C\000H\000\000\000"; BC0_P(name, mismatch);\r
+\r
+    name = "M\000A\000X\000\000\000";\r
+    args[0] = ONIG_TYPE_TAG | ONIG_TYPE_LONG;\r
+    args[1] = ONIG_TYPE_CHAR;\r
+    opts[0].c = 'X';\r
+    BC_B_O(name, max, 2, args, 1, opts);\r
+\r
+    name = "E\000R\000R\000O\000R\000\000\000";\r
+    args[0] = ONIG_TYPE_LONG; opts[0].l = ONIG_ABORT;\r
+    BC_P_O(name, error, 1, args, 1, opts);\r
+\r
+    name = "C\000O\000U\000N\000T\000\000\000";\r
+    args[0] = ONIG_TYPE_CHAR; opts[0].c = '>';\r
+    BC_B_O(name, count, 1, args, 1, opts);\r
+\r
+    name = "T\000O\000T\000A\000L\000_\000C\000O\000U\000N\000T\000\000\000";\r
+    args[0] = ONIG_TYPE_CHAR; opts[0].c = '>';\r
+    BC_B_O(name, total_count, 1, args, 1, opts);\r
+\r
+    name = "C\000M\000P\000\000\000";\r
+    args[0] = ONIG_TYPE_TAG | ONIG_TYPE_LONG;\r
+    args[1] = ONIG_TYPE_STRING;\r
+    args[2] = ONIG_TYPE_TAG | ONIG_TYPE_LONG;\r
+    BC_P(name, cmp, 3, args);\r
+\r
+#endif /* USE_CALLOUT */\r
+\r
+  return ONIG_NORMAL;\r
+}\r
+\r
+static const int EncLen_UTF16[] = {\r
+  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
+  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
+  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
+  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
+  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
+  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
+  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
+  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
+  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
+  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
+  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
+  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
+  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
+  2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 2, 2, 2, 2,\r
+  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
+  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2\r
+};\r
+\r
+static int\r
+utf16le_code_to_mbclen(OnigCodePoint code)\r
+{\r
+  return (code > 0xffff ? 4 : 2);\r
+}\r
+\r
+static int\r
+utf16le_mbc_enc_len(const UChar* p)\r
+{\r
+  return EncLen_UTF16[*(p+1)];\r
+}\r
+\r
+static int\r
+is_valid_mbc_string(const UChar* p, const UChar* end)\r
+{\r
+  const UChar* end1 = end - 1;\r
+\r
+  while (p < end1) {\r
+    p += utf16le_mbc_enc_len(p);\r
+  }\r
+\r
+  if (p != end)\r
+    return FALSE;\r
+  else\r
+    return TRUE;\r
+}\r
+\r
+static int\r
+utf16le_is_mbc_newline(const UChar* p, const UChar* end)\r
+{\r
+  if (p + 1 < end) {\r
+    if (*p == 0x0a && *(p+1) == 0x00)\r
+      return 1;\r
+#ifdef USE_UNICODE_ALL_LINE_TERMINATORS\r
+    if ((\r
+#ifndef USE_CRNL_AS_LINE_TERMINATOR\r
+         *p == 0x0d ||\r
+#endif\r
+         *p == 0x85) && *(p+1) == 0x00)\r
+      return 1;\r
+\r
+    if (*(p+1) == 0x20 && (*p == 0x29 || *p == 0x28))\r
+      return 1;\r
+#endif\r
+  }\r
+  return 0;\r
+}\r
+\r
+static OnigCodePoint\r
+utf16le_mbc_to_code(const UChar* p, const UChar* end ARG_UNUSED)\r
+{\r
+  OnigCodePoint code;\r
+  UChar c0 = *p;\r
+  UChar c1 = *(p+1);\r
+\r
+  if (UTF16_IS_SURROGATE_FIRST(c1)) {\r
+    code = ((((c1 - 0xd8) << 2) + ((c0  & 0xc0) >> 6) + 1) << 16)\r
+         + ((((c0 & 0x3f) << 2) + (p[3] - 0xdc)) << 8)\r
+         + p[2];\r
+  }\r
+  else {\r
+    code = c1 * 256 + p[0];\r
+  }\r
+  return code;\r
+}\r
+\r
+static int\r
+utf16le_code_to_mbc(OnigCodePoint code, UChar *buf)\r
+{\r
+  UChar* p = buf;\r
+\r
+  if (code > 0xffff) {\r
+    unsigned int plane, high;\r
+\r
+    plane = (code >> 16) - 1;\r
+    high = (code & 0xff00) >> 8;\r
+\r
+    *p++ = ((plane & 0x03) << 6) + (high >> 2);\r
+    *p++ = (plane >> 2) + 0xd8;\r
+    *p++ = (UChar )(code & 0xff);\r
+    *p   = (high & 0x03) + 0xdc;\r
+    return 4;\r
+  }\r
+  else {\r
+    *p++ = (UChar )(code & 0xff);\r
+    *p++ = (UChar )((code & 0xff00) >> 8);\r
+    return 2;\r
+  }\r
+}\r
+\r
+static int\r
+utf16le_mbc_case_fold(OnigCaseFoldType flag,\r
+                     const UChar** pp, const UChar* end, UChar* fold)\r
+{\r
+  const UChar* p = *pp;\r
+\r
+  if (ONIGENC_IS_ASCII_CODE(*p) && *(p+1) == 0) {\r
+#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
+    if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {\r
+      if (*p == 0x49) {\r
+        *fold++ = 0x31;\r
+        *fold   = 0x01;\r
+        (*pp) += 2;\r
+        return 2;\r
+      }\r
+    }\r
+#endif\r
+\r
+    *fold++ = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p);\r
+    *fold   = 0;\r
+    *pp += 2;\r
+    return 2;\r
+  }\r
+  else\r
+    return onigenc_unicode_mbc_case_fold(ONIG_ENCODING_UTF16_LE, flag, pp, end,\r
+                                        fold);\r
+}\r
+\r
+#if 0\r
+static int\r
+utf16le_is_mbc_ambiguous(OnigCaseFoldType flag, const UChar** pp,\r
+                        const UChar* end)\r
+{\r
+  const UChar* p = *pp;\r
+\r
+  (*pp) += EncLen_UTF16[*(p+1)];\r
+\r
+  if (*(p+1) == 0) {\r
+    int c, v;\r
+\r
+    if (*p == 0xdf && (flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {\r
+      return TRUE;\r
+    }\r
+\r
+    c = *p;\r
+    v = ONIGENC_IS_UNICODE_ISO_8859_1_BIT_CTYPE(c,\r
+                       (BIT_CTYPE_UPPER | BIT_CTYPE_LOWER));\r
+    if ((v | BIT_CTYPE_LOWER) != 0) {\r
+      /* 0xaa, 0xb5, 0xba are lower case letter, but can't convert. */\r
+      if (c >= 0xaa && c <= 0xba)\r
+        return FALSE;\r
+      else\r
+        return TRUE;\r
+    }\r
+    return (v != 0 ? TRUE : FALSE);\r
+  }\r
+\r
+  return FALSE;\r
+}\r
+#endif\r
+\r
+static UChar*\r
+utf16le_left_adjust_char_head(const UChar* start, const UChar* s)\r
+{\r
+  if (s <= start) return (UChar* )s;\r
+\r
+  if ((s - start) % 2 == 1) {\r
+    s--;\r
+  }\r
+\r
+  if (UTF16_IS_SURROGATE_SECOND(*(s+1)) && s > start + 1)\r
+    s -= 2;\r
+\r
+  return (UChar* )s;\r
+}\r
+\r
+static int\r
+utf16le_get_case_fold_codes_by_str(OnigCaseFoldType flag,\r
+    const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])\r
+{\r
+  return onigenc_unicode_get_case_fold_codes_by_str(ONIG_ENCODING_UTF16_LE,\r
+                                                   flag, p, end, items);\r
+}\r
+\r
+OnigEncodingType OnigEncodingUTF16_LE = {\r
+  utf16le_mbc_enc_len,\r
+  "UTF-16LE",   /* name */\r
+  4,            /* max enc length */\r
+  2,            /* min enc length */\r
+  utf16le_is_mbc_newline,\r
+  utf16le_mbc_to_code,\r
+  utf16le_code_to_mbclen,\r
+  utf16le_code_to_mbc,\r
+  utf16le_mbc_case_fold,\r
+  onigenc_unicode_apply_all_case_fold,\r
+  utf16le_get_case_fold_codes_by_str,\r
+  onigenc_unicode_property_name_to_ctype,\r
+  onigenc_unicode_is_code_ctype,\r
+  onigenc_utf16_32_get_ctype_code_range,\r
+  utf16le_left_adjust_char_head,\r
+  onigenc_always_false_is_allowed_reverse_match,\r
+  init,\r
+  0, /* is_initialized */\r
+  is_valid_mbc_string,\r
+  ENC_FLAG_UNICODE,\r
+  0, 0\r
+};\r
index 4bf8502e7ed46dc2fed9f6e3146ca302896946c3..7490a03c5c116ac1331712016f0cab4d82fb7c87 100644 (file)
@@ -29,6 +29,7 @@
   Oniguruma/OnigurumaIntrinsics.c | MSFT\r
 \r
 # Upstream Oniguruma code\r
+  Oniguruma/onig_init.c\r
   Oniguruma/oniguruma.h\r
   Oniguruma/regcomp.c\r
   Oniguruma/regenc.c\r
   Oniguruma/st.h\r
 \r
 # Supported Character Encodings\r
-  Oniguruma/enc/ascii.c\r
-  Oniguruma/enc/unicode.c\r
-  Oniguruma/enc/utf16_le.c\r
+  Oniguruma/ascii.c\r
+  Oniguruma/unicode.c\r
+  Oniguruma/unicode_fold1_key.c\r
+  Oniguruma/unicode_fold2_key.c\r
+  Oniguruma/unicode_fold3_key.c\r
+  Oniguruma/unicode_unfold_key.c\r
+  Oniguruma/utf16_le.c\r
 \r
 [Packages]\r
   MdePkg/MdePkg.dec\r
 \r
 [BuildOptions]\r
   # Override MSFT build option to remove /Oi and /GL\r
-  MSFT:DEBUG_*_IA32_CC_FLAGS   == /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2  /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm\r
-  MSFT:RELEASE_*_IA32_CC_FLAGS == /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2  /FIAutoGen.h /EHs-c- /GR- /GF\r
-  MSFT:DEBUG_*_X64_CC_FLAGS    == /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2s /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm /X\r
-  MSFT:RELEASE_*_X64_CC_FLAGS  == /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2s /FIAutoGen.h /EHs-c- /GR- /GF /Gy /X\r
-  INTEL:*_*_*_CC_FLAGS         =  /Oi-\r
+  MSFT:*_*_*_CC_FLAGS          = /GL-\r
+  INTEL:*_*_*_CC_FLAGS         = /Oi-\r
 \r
   # Oniguruma: potentially uninitialized local variable used\r
   MSFT:*_*_*_CC_FLAGS = /wd4701\r
   # Oniguruma: 'type cast' : truncation from 'OnigUChar *' to 'unsigned int'\r
   MSFT:*_*_*_CC_FLAGS = /wd4305 /wd4306\r
 \r
+  # Oniguruma: nameless union declared in regparse.h\r
+  MSFT:*_*_*_CC_FLAGS = /wd4201\r
+\r
+  # Oniguruma: 'type cast' : "int" to "OnigUChar", function pointer to "void *"\r
+  MSFT:*_*_*_CC_FLAGS = /wd4244 /wd4054\r
+\r
+  # Oniguruma: previous local declaration\r
+  MSFT:*_*_*_CC_FLAGS = /wd4456\r
+\r
+  # Oniguruma: signed and unsigned mismatch/cast\r
+  MSFT:*_*_*_CC_FLAGS = /wd4018 /wd4245 /wd4389\r
+\r
+  # Oniguruma: error: variable 'fp' set but not used\r
+  GCC:*_*_*_CC_FLAGS = -Wno-error=unused-but-set-variable\r