two-split switch
authorMichael Wallner <mike@php.net>
Mon, 5 Mar 2018 08:11:20 +0000 (09:11 +0100)
committerMichael Wallner <mike@php.net>
Mon, 5 Mar 2018 08:11:20 +0000 (09:11 +0100)
scripts/gen_switch_utf8.php
src/php_http_utf8.h

index 242450a..f1811d8 100755 (executable)
@@ -9,12 +9,19 @@ set_error_handler(function($c, $e, $f, $l) {
 $i18n = $argc >= 2 ? $argv[1] : "/usr/share/i18n/locales/i18n";
 
 $b = 10;
+$m = 0xfffff000 >> $b;
+$b2 = 8;
+$x = $m >> $b2;
 
 $f = fopen($i18n, "r");
 $c = false;
 $a = false;
 
 ob_start(null, 0xfffff);
+
+printf("/* generated on %s with\n b = %d\n m = 0x%08x\n b2= %d\n*/", 
+       strftime("%x %X"), $b, $m, $b2);
+
 while (!feof($f)) {
        $line = fgets($f);
        if (!$c && $line !== "LC_CTYPE\n") {
@@ -57,7 +64,7 @@ while (!feof($f)) {
                                        sscanf($sstart, "<U%X>", $start);
                                        break;
                                }
-                               $r[$start >> $b][]=[$start,$end,$step];
+                               $r[$start >> $b][($start & $m) >> $b2][]=[$start,$end,$step];
                        }
                }
                break;
@@ -73,9 +80,12 @@ while (!feof($f)) {
 
 function sp($sp, $ch = " ") { return str_repeat($ch, $sp); }
 printf("switch (ch >> %d) {\n", $b);
-foreach ($r as $sw => $specs) {
+foreach ($r as $sw => $sws) {
        printf("case 0x%08X:\n", $sw);
-       $sp = 1;
+       printf(" switch((ch & 0x%08X) >> %d) {\n", $m, $b2);
+       foreach ($sws as $sw2 => $specs) {
+       printf(" case 0x%08X:\n", $sw2);
+       $sp = 2;
        foreach ($specs as list($start, $end, $step)) {
                if ($end) {
                        if ($step > 1) {
@@ -90,7 +100,9 @@ foreach ($r as $sw => $specs) {
                        printf("%sif (ch == 0x%08X) return 1;\n", sp($sp), $start);
                }
        }
-       printf(" %s\n break;\n", sp(--$sp, "}"));
+       printf("  %s\n  break;\n", sp($sp-2, "}"));
+       }
+       printf(" }\n break;\n");
 }
 printf("}\n");
 
index f1de053..1dfb23e 100644 (file)
@@ -811,50 +811,69 @@ static inline zend_bool isualpha(unsigned ch)
 #else
 
 /* BEGIN::UTF8SWITCH */
-switch (ch >> 10) {
+/* generated on 03/03/18 15:03:45 with
+ b = 10
+ m = 0x003ffffc
+ b2= 8
+*/switch (ch >> 10) {
 case 0x00000000:
- if (ch >= 0x00000041) {
-  if (ch <= 0x0000005A) return 1;
-  if (ch >= 0x00000061) {
-   if (ch <= 0x0000007A) return 1;
-   if (ch == 0x000000AA) return 1;
-   if (ch == 0x000000B5) return 1;
-   if (ch == 0x000000BA) return 1;
-   if (ch >= 0x000000C0) {
-    if (ch <= 0x000000D6) return 1;
-    if (ch >= 0x000000D8) {
-     if (ch <= 0x000000F6) return 1;
-     if (ch >= 0x000000F8) {
-      if (ch <= 0x000002C1) return 1;
-      if (ch >= 0x000002C6) {
-       if (ch <= 0x000002D1) return 1;
-       if (ch >= 0x000002E0) {
-        if (ch <= 0x000002E4) return 1;
-        if (ch == 0x000002EC) return 1;
-        if (ch == 0x000002EE) return 1;
-        if (ch == 0x00000345) return 1;
-        if (ch >= 0x00000370) {
-         if (ch <= 0x00000374) return 1;
-         if (ch >= 0x00000376) {
-          if (ch <= 0x00000377) return 1;
-          if (ch >= 0x0000037A) {
-           if (ch <= 0x0000037D) return 1;
-           if (ch == 0x0000037F) return 1;
-           if (ch == 0x00000386) return 1;
-           if (ch >= 0x00000388) {
-            if (ch <= 0x0000038A) return 1;
-            if (ch == 0x0000038C) return 1;
-            if (ch >= 0x0000038E) {
-             if (ch <= 0x000003A1) return 1;
-             if (ch >= 0x000003A3) {
-              if (ch <= 0x000003F5) return 1;
-              if (ch >= 0x000003F7) {
-               if (ch <= 0x00000481) return 1;
- }}}}}}}}}}}}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000000:
+  if (ch >= 0x00000041) {
+   if (ch <= 0x0000005A) return 1;
+   if (ch >= 0x00000061) {
+    if (ch <= 0x0000007A) return 1;
+    if (ch == 0x000000AA) return 1;
+    if (ch == 0x000000B5) return 1;
+    if (ch == 0x000000BA) return 1;
+    if (ch >= 0x000000C0) {
+     if (ch <= 0x000000D6) return 1;
+     if (ch >= 0x000000D8) {
+      if (ch <= 0x000000F6) return 1;
+      if (ch >= 0x000000F8) {
+       if (ch <= 0x000002C1) return 1;
+  }}}}}
+  break;
+ case 0x00000002:
+  if (ch >= 0x000002C6) {
+   if (ch <= 0x000002D1) return 1;
+   if (ch >= 0x000002E0) {
+    if (ch <= 0x000002E4) return 1;
+    if (ch == 0x000002EC) return 1;
+    if (ch == 0x000002EE) return 1;
+  }}
+  break;
+ case 0x00000003:
+  if (ch == 0x00000345) return 1;
+  if (ch >= 0x00000370) {
+   if (ch <= 0x00000374) return 1;
+   if (ch >= 0x00000376) {
+    if (ch <= 0x00000377) return 1;
+    if (ch >= 0x0000037A) {
+     if (ch <= 0x0000037D) return 1;
+     if (ch == 0x0000037F) return 1;
+     if (ch == 0x00000386) return 1;
+     if (ch >= 0x00000388) {
+      if (ch <= 0x0000038A) return 1;
+      if (ch == 0x0000038C) return 1;
+      if (ch >= 0x0000038E) {
+       if (ch <= 0x000003A1) return 1;
+       if (ch >= 0x000003A3) {
+        if (ch <= 0x000003F5) return 1;
+        if (ch >= 0x000003F7) {
+         if (ch <= 0x00000481) return 1;
+  }}}}}}}
+  break;
+ }
  break;
 case 0x00000001:
- if (ch >= 0x0000048A) {
-  if (ch <= 0x0000052F) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000004:
+  if (ch >= 0x0000048A) {
+   if (ch <= 0x0000052F) return 1;
+  }
+  break;
+ case 0x00000005:
   if (ch >= 0x00000531) {
    if (ch <= 0x00000556) return 1;
    if (ch == 0x00000559) return 1;
@@ -872,413 +891,462 @@ case 0x00000001:
         if (ch <= 0x000005EA) return 1;
         if (ch >= 0x000005F0) {
          if (ch <= 0x000005F2) return 1;
-         if (ch >= 0x00000610) {
-          if (ch <= 0x0000061A) return 1;
-          if (ch >= 0x00000620) {
-           if (ch <= 0x00000657) return 1;
-           if (ch >= 0x00000659) {
-            if (ch <= 0x00000669) return 1;
-            if (ch >= 0x0000066E) {
-             if (ch <= 0x000006D3) return 1;
-             if (ch >= 0x000006D5) {
-              if (ch <= 0x000006DC) return 1;
-              if (ch >= 0x000006E1) {
-               if (ch <= 0x000006E8) return 1;
-               if (ch >= 0x000006ED) {
-                if (ch <= 0x000006FC) return 1;
-                if (ch == 0x000006FF) return 1;
-                if (ch >= 0x00000710) {
-                 if (ch <= 0x0000073F) return 1;
-                 if (ch >= 0x0000074D) {
-                  if (ch <= 0x000007B1) return 1;
-                  if (ch >= 0x000007C0) {
-                   if (ch <= 0x000007EA) return 1;
-                   if (ch >= 0x000007F4) {
-                    if (ch <= 0x000007F5) return 1;
-                    if (ch == 0x000007FA) return 1;
- }}}}}}}}}}}}}}}}}}}
+  }}}}}}}
+  break;
+ case 0x00000006:
+  if (ch >= 0x00000610) {
+   if (ch <= 0x0000061A) return 1;
+   if (ch >= 0x00000620) {
+    if (ch <= 0x00000657) return 1;
+    if (ch >= 0x00000659) {
+     if (ch <= 0x00000669) return 1;
+     if (ch >= 0x0000066E) {
+      if (ch <= 0x000006D3) return 1;
+      if (ch >= 0x000006D5) {
+       if (ch <= 0x000006DC) return 1;
+       if (ch >= 0x000006E1) {
+        if (ch <= 0x000006E8) return 1;
+        if (ch >= 0x000006ED) {
+         if (ch <= 0x000006FC) return 1;
+         if (ch == 0x000006FF) return 1;
+  }}}}}}}
+  break;
+ case 0x00000007:
+  if (ch >= 0x00000710) {
+   if (ch <= 0x0000073F) return 1;
+   if (ch >= 0x0000074D) {
+    if (ch <= 0x000007B1) return 1;
+    if (ch >= 0x000007C0) {
+     if (ch <= 0x000007EA) return 1;
+     if (ch >= 0x000007F4) {
+      if (ch <= 0x000007F5) return 1;
+      if (ch == 0x000007FA) return 1;
+  }}}}
+  break;
+ }
  break;
 case 0x00000002:
- if (ch >= 0x00000800) {
-  if (ch <= 0x00000817) return 1;
-  if (ch >= 0x0000081A) {
-   if (ch <= 0x0000082C) return 1;
-   if (ch >= 0x00000840) {
-    if (ch <= 0x00000858) return 1;
-    if (ch >= 0x00000860) {
-     if (ch <= 0x0000086A) return 1;
-     if (ch >= 0x000008A0) {
-      if (ch <= 0x000008B4) return 1;
-      if (ch >= 0x000008B6) {
-       if (ch <= 0x000008BD) return 1;
-       if (ch >= 0x000008D4) {
-        if (ch <= 0x000008DF) return 1;
-        if (ch >= 0x000008E3) {
-         if (ch <= 0x000008E9) return 1;
-         if (ch >= 0x000008F0) {
-          if (ch <= 0x0000093B) return 1;
-          if (ch >= 0x0000093D) {
-           if (ch <= 0x0000094C) return 1;
-           if (ch >= 0x0000094E) {
-            if (ch <= 0x00000950) return 1;
-            if (ch >= 0x00000955) {
-             if (ch <= 0x00000963) return 1;
-             if (ch >= 0x00000966) {
-              if (ch <= 0x0000096F) return 1;
-              if (ch >= 0x00000971) {
-               if (ch <= 0x00000983) return 1;
-               if (ch >= 0x00000985) {
-                if (ch <= 0x0000098C) return 1;
-                if (ch >= 0x0000098F) {
-                 if (ch <= 0x00000990) return 1;
-                 if (ch >= 0x00000993) {
-                  if (ch <= 0x000009A8) return 1;
-                  if (ch >= 0x000009AA) {
-                   if (ch <= 0x000009B0) return 1;
-                   if (ch == 0x000009B2) return 1;
-                   if (ch >= 0x000009B6) {
-                    if (ch <= 0x000009B9) return 1;
-                    if (ch >= 0x000009BD) {
-                     if (ch <= 0x000009C4) return 1;
-                     if (ch >= 0x000009C7) {
-                      if (ch <= 0x000009C8) return 1;
-                      if (ch >= 0x000009CB) {
-                       if (ch <= 0x000009CC) return 1;
-                       if (ch == 0x000009CE) return 1;
-                       if (ch == 0x000009D7) return 1;
-                       if (ch >= 0x000009DC) {
-                        if (ch <= 0x000009DD) return 1;
-                        if (ch >= 0x000009DF) {
-                         if (ch <= 0x000009E3) return 1;
-                         if (ch >= 0x000009E6) {
-                          if (ch <= 0x000009F1) return 1;
-                          if (ch == 0x000009FC) return 1;
-                          if (ch >= 0x00000A01) {
-                           if (ch <= 0x00000A03) return 1;
-                           if (ch >= 0x00000A05) {
-                            if (ch <= 0x00000A0A) return 1;
-                            if (ch >= 0x00000A0F) {
-                             if (ch <= 0x00000A10) return 1;
-                             if (ch >= 0x00000A13) {
-                              if (ch <= 0x00000A28) return 1;
-                              if (ch >= 0x00000A2A) {
-                               if (ch <= 0x00000A30) return 1;
-                               if (ch >= 0x00000A32) {
-                                if (ch <= 0x00000A33) return 1;
-                                if (ch >= 0x00000A35) {
-                                 if (ch <= 0x00000A36) return 1;
-                                 if (ch >= 0x00000A38) {
-                                  if (ch <= 0x00000A39) return 1;
-                                  if (ch >= 0x00000A3E) {
-                                   if (ch <= 0x00000A42) return 1;
-                                   if (ch >= 0x00000A47) {
-                                    if (ch <= 0x00000A48) return 1;
-                                    if (ch >= 0x00000A4B) {
-                                     if (ch <= 0x00000A4C) return 1;
-                                     if (ch == 0x00000A51) return 1;
-                                     if (ch >= 0x00000A59) {
-                                      if (ch <= 0x00000A5C) return 1;
-                                      if (ch == 0x00000A5E) return 1;
-                                      if (ch >= 0x00000A66) {
-                                       if (ch <= 0x00000A75) return 1;
-                                       if (ch >= 0x00000A81) {
-                                        if (ch <= 0x00000A83) return 1;
-                                        if (ch >= 0x00000A85) {
-                                         if (ch <= 0x00000A8D) return 1;
-                                         if (ch >= 0x00000A8F) {
-                                          if (ch <= 0x00000A91) return 1;
-                                          if (ch >= 0x00000A93) {
-                                           if (ch <= 0x00000AA8) return 1;
-                                           if (ch >= 0x00000AAA) {
-                                            if (ch <= 0x00000AB0) return 1;
-                                            if (ch >= 0x00000AB2) {
-                                             if (ch <= 0x00000AB3) return 1;
-                                             if (ch >= 0x00000AB5) {
-                                              if (ch <= 0x00000AB9) return 1;
-                                              if (ch >= 0x00000ABD) {
-                                               if (ch <= 0x00000AC5) return 1;
-                                               if (ch >= 0x00000AC7) {
-                                                if (ch <= 0x00000AC9) return 1;
-                                                if (ch >= 0x00000ACB) {
-                                                 if (ch <= 0x00000ACC) return 1;
-                                                 if (ch == 0x00000AD0) return 1;
-                                                 if (ch >= 0x00000AE0) {
-                                                  if (ch <= 0x00000AE3) return 1;
-                                                  if (ch >= 0x00000AE6) {
-                                                   if (ch <= 0x00000AEF) return 1;
-                                                   if (ch >= 0x00000AF9) {
-                                                    if (ch <= 0x00000AFC) return 1;
-                                                    if (ch >= 0x00000B01) {
-                                                     if (ch <= 0x00000B03) return 1;
-                                                     if (ch >= 0x00000B05) {
-                                                      if (ch <= 0x00000B0C) return 1;
-                                                      if (ch >= 0x00000B0F) {
-                                                       if (ch <= 0x00000B10) return 1;
-                                                       if (ch >= 0x00000B13) {
-                                                        if (ch <= 0x00000B28) return 1;
-                                                        if (ch >= 0x00000B2A) {
-                                                         if (ch <= 0x00000B30) return 1;
-                                                         if (ch >= 0x00000B32) {
-                                                          if (ch <= 0x00000B33) return 1;
-                                                          if (ch >= 0x00000B35) {
-                                                           if (ch <= 0x00000B39) return 1;
-                                                           if (ch >= 0x00000B3D) {
-                                                            if (ch <= 0x00000B44) return 1;
-                                                            if (ch >= 0x00000B47) {
-                                                             if (ch <= 0x00000B48) return 1;
-                                                             if (ch >= 0x00000B4B) {
-                                                              if (ch <= 0x00000B4C) return 1;
-                                                              if (ch >= 0x00000B56) {
-                                                               if (ch <= 0x00000B57) return 1;
-                                                               if (ch >= 0x00000B5C) {
-                                                                if (ch <= 0x00000B5D) return 1;
-                                                                if (ch >= 0x00000B5F) {
-                                                                 if (ch <= 0x00000B63) return 1;
-                                                                 if (ch >= 0x00000B66) {
-                                                                  if (ch <= 0x00000B6F) return 1;
-                                                                  if (ch == 0x00000B71) return 1;
-                                                                  if (ch >= 0x00000B82) {
-                                                                   if (ch <= 0x00000B83) return 1;
-                                                                   if (ch >= 0x00000B85) {
-                                                                    if (ch <= 0x00000B8A) return 1;
-                                                                    if (ch >= 0x00000B8E) {
-                                                                     if (ch <= 0x00000B90) return 1;
-                                                                     if (ch >= 0x00000B92) {
-                                                                      if (ch <= 0x00000B95) return 1;
-                                                                      if (ch >= 0x00000B99) {
-                                                                       if (ch <= 0x00000B9A) return 1;
-                                                                       if (ch == 0x00000B9C) return 1;
-                                                                       if (ch >= 0x00000B9E) {
-                                                                        if (ch <= 0x00000B9F) return 1;
-                                                                        if (ch >= 0x00000BA3) {
-                                                                         if (ch <= 0x00000BA4) return 1;
-                                                                         if (ch >= 0x00000BA8) {
-                                                                          if (ch <= 0x00000BAA) return 1;
-                                                                          if (ch >= 0x00000BAE) {
-                                                                           if (ch <= 0x00000BB9) return 1;
-                                                                           if (ch >= 0x00000BBE) {
-                                                                            if (ch <= 0x00000BC2) return 1;
-                                                                            if (ch >= 0x00000BC6) {
-                                                                             if (ch <= 0x00000BC8) return 1;
-                                                                             if (ch >= 0x00000BCA) {
-                                                                              if (ch <= 0x00000BCC) return 1;
-                                                                              if (ch == 0x00000BD0) return 1;
-                                                                              if (ch == 0x00000BD7) return 1;
-                                                                              if (ch >= 0x00000BE6) {
-                                                                               if (ch <= 0x00000BEF) return 1;
- }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000008:
+  if (ch >= 0x00000800) {
+   if (ch <= 0x00000817) return 1;
+   if (ch >= 0x0000081A) {
+    if (ch <= 0x0000082C) return 1;
+    if (ch >= 0x00000840) {
+     if (ch <= 0x00000858) return 1;
+     if (ch >= 0x00000860) {
+      if (ch <= 0x0000086A) return 1;
+      if (ch >= 0x000008A0) {
+       if (ch <= 0x000008B4) return 1;
+       if (ch >= 0x000008B6) {
+        if (ch <= 0x000008BD) return 1;
+        if (ch >= 0x000008D4) {
+         if (ch <= 0x000008DF) return 1;
+         if (ch >= 0x000008E3) {
+          if (ch <= 0x000008E9) return 1;
+          if (ch >= 0x000008F0) {
+           if (ch <= 0x0000093B) return 1;
+  }}}}}}}}}
+  break;
+ case 0x00000009:
+  if (ch >= 0x0000093D) {
+   if (ch <= 0x0000094C) return 1;
+   if (ch >= 0x0000094E) {
+    if (ch <= 0x00000950) return 1;
+    if (ch >= 0x00000955) {
+     if (ch <= 0x00000963) return 1;
+     if (ch >= 0x00000966) {
+      if (ch <= 0x0000096F) return 1;
+      if (ch >= 0x00000971) {
+       if (ch <= 0x00000983) return 1;
+       if (ch >= 0x00000985) {
+        if (ch <= 0x0000098C) return 1;
+        if (ch >= 0x0000098F) {
+         if (ch <= 0x00000990) return 1;
+         if (ch >= 0x00000993) {
+          if (ch <= 0x000009A8) return 1;
+          if (ch >= 0x000009AA) {
+           if (ch <= 0x000009B0) return 1;
+           if (ch == 0x000009B2) return 1;
+           if (ch >= 0x000009B6) {
+            if (ch <= 0x000009B9) return 1;
+            if (ch >= 0x000009BD) {
+             if (ch <= 0x000009C4) return 1;
+             if (ch >= 0x000009C7) {
+              if (ch <= 0x000009C8) return 1;
+              if (ch >= 0x000009CB) {
+               if (ch <= 0x000009CC) return 1;
+               if (ch == 0x000009CE) return 1;
+               if (ch == 0x000009D7) return 1;
+               if (ch >= 0x000009DC) {
+                if (ch <= 0x000009DD) return 1;
+                if (ch >= 0x000009DF) {
+                 if (ch <= 0x000009E3) return 1;
+                 if (ch >= 0x000009E6) {
+                  if (ch <= 0x000009F1) return 1;
+                  if (ch == 0x000009FC) return 1;
+  }}}}}}}}}}}}}}}}
+  break;
+ case 0x0000000A:
+  if (ch >= 0x00000A01) {
+   if (ch <= 0x00000A03) return 1;
+   if (ch >= 0x00000A05) {
+    if (ch <= 0x00000A0A) return 1;
+    if (ch >= 0x00000A0F) {
+     if (ch <= 0x00000A10) return 1;
+     if (ch >= 0x00000A13) {
+      if (ch <= 0x00000A28) return 1;
+      if (ch >= 0x00000A2A) {
+       if (ch <= 0x00000A30) return 1;
+       if (ch >= 0x00000A32) {
+        if (ch <= 0x00000A33) return 1;
+        if (ch >= 0x00000A35) {
+         if (ch <= 0x00000A36) return 1;
+         if (ch >= 0x00000A38) {
+          if (ch <= 0x00000A39) return 1;
+          if (ch >= 0x00000A3E) {
+           if (ch <= 0x00000A42) return 1;
+           if (ch >= 0x00000A47) {
+            if (ch <= 0x00000A48) return 1;
+            if (ch >= 0x00000A4B) {
+             if (ch <= 0x00000A4C) return 1;
+             if (ch == 0x00000A51) return 1;
+             if (ch >= 0x00000A59) {
+              if (ch <= 0x00000A5C) return 1;
+              if (ch == 0x00000A5E) return 1;
+              if (ch >= 0x00000A66) {
+               if (ch <= 0x00000A75) return 1;
+               if (ch >= 0x00000A81) {
+                if (ch <= 0x00000A83) return 1;
+                if (ch >= 0x00000A85) {
+                 if (ch <= 0x00000A8D) return 1;
+                 if (ch >= 0x00000A8F) {
+                  if (ch <= 0x00000A91) return 1;
+                  if (ch >= 0x00000A93) {
+                   if (ch <= 0x00000AA8) return 1;
+                   if (ch >= 0x00000AAA) {
+                    if (ch <= 0x00000AB0) return 1;
+                    if (ch >= 0x00000AB2) {
+                     if (ch <= 0x00000AB3) return 1;
+                     if (ch >= 0x00000AB5) {
+                      if (ch <= 0x00000AB9) return 1;
+                      if (ch >= 0x00000ABD) {
+                       if (ch <= 0x00000AC5) return 1;
+                       if (ch >= 0x00000AC7) {
+                        if (ch <= 0x00000AC9) return 1;
+                        if (ch >= 0x00000ACB) {
+                         if (ch <= 0x00000ACC) return 1;
+                         if (ch == 0x00000AD0) return 1;
+                         if (ch >= 0x00000AE0) {
+                          if (ch <= 0x00000AE3) return 1;
+                          if (ch >= 0x00000AE6) {
+                           if (ch <= 0x00000AEF) return 1;
+                           if (ch >= 0x00000AF9) {
+                            if (ch <= 0x00000AFC) return 1;
+  }}}}}}}}}}}}}}}}}}}}}}}}}}
+  break;
+ case 0x0000000B:
+  if (ch >= 0x00000B01) {
+   if (ch <= 0x00000B03) return 1;
+   if (ch >= 0x00000B05) {
+    if (ch <= 0x00000B0C) return 1;
+    if (ch >= 0x00000B0F) {
+     if (ch <= 0x00000B10) return 1;
+     if (ch >= 0x00000B13) {
+      if (ch <= 0x00000B28) return 1;
+      if (ch >= 0x00000B2A) {
+       if (ch <= 0x00000B30) return 1;
+       if (ch >= 0x00000B32) {
+        if (ch <= 0x00000B33) return 1;
+        if (ch >= 0x00000B35) {
+         if (ch <= 0x00000B39) return 1;
+         if (ch >= 0x00000B3D) {
+          if (ch <= 0x00000B44) return 1;
+          if (ch >= 0x00000B47) {
+           if (ch <= 0x00000B48) return 1;
+           if (ch >= 0x00000B4B) {
+            if (ch <= 0x00000B4C) return 1;
+            if (ch >= 0x00000B56) {
+             if (ch <= 0x00000B57) return 1;
+             if (ch >= 0x00000B5C) {
+              if (ch <= 0x00000B5D) return 1;
+              if (ch >= 0x00000B5F) {
+               if (ch <= 0x00000B63) return 1;
+               if (ch >= 0x00000B66) {
+                if (ch <= 0x00000B6F) return 1;
+                if (ch == 0x00000B71) return 1;
+                if (ch >= 0x00000B82) {
+                 if (ch <= 0x00000B83) return 1;
+                 if (ch >= 0x00000B85) {
+                  if (ch <= 0x00000B8A) return 1;
+                  if (ch >= 0x00000B8E) {
+                   if (ch <= 0x00000B90) return 1;
+                   if (ch >= 0x00000B92) {
+                    if (ch <= 0x00000B95) return 1;
+                    if (ch >= 0x00000B99) {
+                     if (ch <= 0x00000B9A) return 1;
+                     if (ch == 0x00000B9C) return 1;
+                     if (ch >= 0x00000B9E) {
+                      if (ch <= 0x00000B9F) return 1;
+                      if (ch >= 0x00000BA3) {
+                       if (ch <= 0x00000BA4) return 1;
+                       if (ch >= 0x00000BA8) {
+                        if (ch <= 0x00000BAA) return 1;
+                        if (ch >= 0x00000BAE) {
+                         if (ch <= 0x00000BB9) return 1;
+                         if (ch >= 0x00000BBE) {
+                          if (ch <= 0x00000BC2) return 1;
+                          if (ch >= 0x00000BC6) {
+                           if (ch <= 0x00000BC8) return 1;
+                           if (ch >= 0x00000BCA) {
+                            if (ch <= 0x00000BCC) return 1;
+                            if (ch == 0x00000BD0) return 1;
+                            if (ch == 0x00000BD7) return 1;
+                            if (ch >= 0x00000BE6) {
+                             if (ch <= 0x00000BEF) return 1;
+  }}}}}}}}}}}}}}}}}}}}}}}}}}}
+  break;
+ }
  break;
 case 0x00000003:
- if (ch >= 0x00000C00) {
-  if (ch <= 0x00000C03) return 1;
-  if (ch >= 0x00000C05) {
-   if (ch <= 0x00000C0C) return 1;
-   if (ch >= 0x00000C0E) {
-    if (ch <= 0x00000C10) return 1;
-    if (ch >= 0x00000C12) {
-     if (ch <= 0x00000C28) return 1;
-     if (ch >= 0x00000C2A) {
-      if (ch <= 0x00000C39) return 1;
-      if (ch >= 0x00000C3D) {
-       if (ch <= 0x00000C44) return 1;
-       if (ch >= 0x00000C46) {
-        if (ch <= 0x00000C48) return 1;
-        if (ch >= 0x00000C4A) {
-         if (ch <= 0x00000C4C) return 1;
-         if (ch >= 0x00000C55) {
-          if (ch <= 0x00000C56) return 1;
-          if (ch >= 0x00000C58) {
-           if (ch <= 0x00000C5A) return 1;
-           if (ch >= 0x00000C60) {
-            if (ch <= 0x00000C63) return 1;
-            if (ch >= 0x00000C66) {
-             if (ch <= 0x00000C6F) return 1;
-             if (ch >= 0x00000C80) {
-              if (ch <= 0x00000C83) return 1;
-              if (ch >= 0x00000C85) {
-               if (ch <= 0x00000C8C) return 1;
-               if (ch >= 0x00000C8E) {
-                if (ch <= 0x00000C90) return 1;
-                if (ch >= 0x00000C92) {
-                 if (ch <= 0x00000CA8) return 1;
-                 if (ch >= 0x00000CAA) {
-                  if (ch <= 0x00000CB3) return 1;
-                  if (ch >= 0x00000CB5) {
-                   if (ch <= 0x00000CB9) return 1;
-                   if (ch >= 0x00000CBD) {
-                    if (ch <= 0x00000CC4) return 1;
-                    if (ch >= 0x00000CC6) {
-                     if (ch <= 0x00000CC8) return 1;
-                     if (ch >= 0x00000CCA) {
-                      if (ch <= 0x00000CCC) return 1;
-                      if (ch >= 0x00000CD5) {
-                       if (ch <= 0x00000CD6) return 1;
-                       if (ch == 0x00000CDE) return 1;
-                       if (ch >= 0x00000CE0) {
-                        if (ch <= 0x00000CE3) return 1;
-                        if (ch >= 0x00000CE6) {
-                         if (ch <= 0x00000CEF) return 1;
-                         if (ch >= 0x00000CF1) {
-                          if (ch <= 0x00000CF2) return 1;
-                          if (ch >= 0x00000D00) {
-                           if (ch <= 0x00000D03) return 1;
-                           if (ch >= 0x00000D05) {
-                            if (ch <= 0x00000D0C) return 1;
-                            if (ch >= 0x00000D0E) {
-                             if (ch <= 0x00000D10) return 1;
-                             if (ch >= 0x00000D12) {
-                              if (ch <= 0x00000D3A) return 1;
-                              if (ch >= 0x00000D3D) {
-                               if (ch <= 0x00000D44) return 1;
-                               if (ch >= 0x00000D46) {
-                                if (ch <= 0x00000D48) return 1;
-                                if (ch >= 0x00000D4A) {
-                                 if (ch <= 0x00000D4C) return 1;
-                                 if (ch == 0x00000D4E) return 1;
-                                 if (ch >= 0x00000D54) {
-                                  if (ch <= 0x00000D57) return 1;
-                                  if (ch >= 0x00000D5F) {
-                                   if (ch <= 0x00000D63) return 1;
-                                   if (ch >= 0x00000D66) {
-                                    if (ch <= 0x00000D6F) return 1;
-                                    if (ch >= 0x00000D7A) {
-                                     if (ch <= 0x00000D7F) return 1;
-                                     if (ch >= 0x00000D82) {
-                                      if (ch <= 0x00000D83) return 1;
-                                      if (ch >= 0x00000D85) {
-                                       if (ch <= 0x00000D96) return 1;
-                                       if (ch >= 0x00000D9A) {
-                                        if (ch <= 0x00000DB1) return 1;
-                                        if (ch >= 0x00000DB3) {
-                                         if (ch <= 0x00000DBB) return 1;
-                                         if (ch == 0x00000DBD) return 1;
-                                         if (ch >= 0x00000DC0) {
-                                          if (ch <= 0x00000DC6) return 1;
-                                          if (ch >= 0x00000DCF) {
-                                           if (ch <= 0x00000DD4) return 1;
-                                           if (ch == 0x00000DD6) return 1;
-                                           if (ch >= 0x00000DD8) {
-                                            if (ch <= 0x00000DDF) return 1;
-                                            if (ch >= 0x00000DE6) {
-                                             if (ch <= 0x00000DEF) return 1;
-                                             if (ch >= 0x00000DF2) {
-                                              if (ch <= 0x00000DF3) return 1;
-                                              if (ch >= 0x00000E01) {
-                                               if (ch <= 0x00000E3A) return 1;
-                                               if (ch >= 0x00000E40) {
-                                                if (ch <= 0x00000E46) return 1;
-                                                if (ch == 0x00000E4D) return 1;
-                                                if (ch >= 0x00000E50) {
-                                                 if (ch <= 0x00000E59) return 1;
-                                                 if (ch >= 0x00000E81) {
-                                                  if (ch <= 0x00000E82) return 1;
-                                                  if (ch == 0x00000E84) return 1;
-                                                  if (ch >= 0x00000E87) {
-                                                   if (ch <= 0x00000E88) return 1;
-                                                   if (ch == 0x00000E8A) return 1;
-                                                   if (ch == 0x00000E8D) return 1;
-                                                   if (ch >= 0x00000E94) {
-                                                    if (ch <= 0x00000E97) return 1;
-                                                    if (ch >= 0x00000E99) {
-                                                     if (ch <= 0x00000E9F) return 1;
-                                                     if (ch >= 0x00000EA1) {
-                                                      if (ch <= 0x00000EA3) return 1;
-                                                      if (ch == 0x00000EA5) return 1;
-                                                      if (ch == 0x00000EA7) return 1;
-                                                      if (ch >= 0x00000EAA) {
-                                                       if (ch <= 0x00000EAB) return 1;
-                                                       if (ch >= 0x00000EAD) {
-                                                        if (ch <= 0x00000EB9) return 1;
-                                                        if (ch >= 0x00000EBB) {
-                                                         if (ch <= 0x00000EBD) return 1;
-                                                         if (ch >= 0x00000EC0) {
-                                                          if (ch <= 0x00000EC4) return 1;
-                                                          if (ch == 0x00000EC6) return 1;
-                                                          if (ch == 0x00000ECD) return 1;
-                                                          if (ch >= 0x00000ED0) {
-                                                           if (ch <= 0x00000ED9) return 1;
-                                                           if (ch >= 0x00000EDC) {
-                                                            if (ch <= 0x00000EDF) return 1;
-                                                            if (ch == 0x00000F00) return 1;
-                                                            if (ch >= 0x00000F20) {
-                                                             if (ch <= 0x00000F29) return 1;
-                                                             if (ch >= 0x00000F40) {
-                                                              if (ch <= 0x00000F47) return 1;
-                                                              if (ch >= 0x00000F49) {
-                                                               if (ch <= 0x00000F6C) return 1;
-                                                               if (ch >= 0x00000F71) {
-                                                                if (ch <= 0x00000F81) return 1;
-                                                                if (ch >= 0x00000F88) {
-                                                                 if (ch <= 0x00000F97) return 1;
-                                                                 if (ch >= 0x00000F99) {
-                                                                  if (ch <= 0x00000FBC) return 1;
- }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x0000000C:
+  if (ch >= 0x00000C00) {
+   if (ch <= 0x00000C03) return 1;
+   if (ch >= 0x00000C05) {
+    if (ch <= 0x00000C0C) return 1;
+    if (ch >= 0x00000C0E) {
+     if (ch <= 0x00000C10) return 1;
+     if (ch >= 0x00000C12) {
+      if (ch <= 0x00000C28) return 1;
+      if (ch >= 0x00000C2A) {
+       if (ch <= 0x00000C39) return 1;
+       if (ch >= 0x00000C3D) {
+        if (ch <= 0x00000C44) return 1;
+        if (ch >= 0x00000C46) {
+         if (ch <= 0x00000C48) return 1;
+         if (ch >= 0x00000C4A) {
+          if (ch <= 0x00000C4C) return 1;
+          if (ch >= 0x00000C55) {
+           if (ch <= 0x00000C56) return 1;
+           if (ch >= 0x00000C58) {
+            if (ch <= 0x00000C5A) return 1;
+            if (ch >= 0x00000C60) {
+             if (ch <= 0x00000C63) return 1;
+             if (ch >= 0x00000C66) {
+              if (ch <= 0x00000C6F) return 1;
+              if (ch >= 0x00000C80) {
+               if (ch <= 0x00000C83) return 1;
+               if (ch >= 0x00000C85) {
+                if (ch <= 0x00000C8C) return 1;
+                if (ch >= 0x00000C8E) {
+                 if (ch <= 0x00000C90) return 1;
+                 if (ch >= 0x00000C92) {
+                  if (ch <= 0x00000CA8) return 1;
+                  if (ch >= 0x00000CAA) {
+                   if (ch <= 0x00000CB3) return 1;
+                   if (ch >= 0x00000CB5) {
+                    if (ch <= 0x00000CB9) return 1;
+                    if (ch >= 0x00000CBD) {
+                     if (ch <= 0x00000CC4) return 1;
+                     if (ch >= 0x00000CC6) {
+                      if (ch <= 0x00000CC8) return 1;
+                      if (ch >= 0x00000CCA) {
+                       if (ch <= 0x00000CCC) return 1;
+                       if (ch >= 0x00000CD5) {
+                        if (ch <= 0x00000CD6) return 1;
+                        if (ch == 0x00000CDE) return 1;
+                        if (ch >= 0x00000CE0) {
+                         if (ch <= 0x00000CE3) return 1;
+                         if (ch >= 0x00000CE6) {
+                          if (ch <= 0x00000CEF) return 1;
+                          if (ch >= 0x00000CF1) {
+                           if (ch <= 0x00000CF2) return 1;
+  }}}}}}}}}}}}}}}}}}}}}}}}}
+  break;
+ case 0x0000000D:
+  if (ch >= 0x00000D00) {
+   if (ch <= 0x00000D03) return 1;
+   if (ch >= 0x00000D05) {
+    if (ch <= 0x00000D0C) return 1;
+    if (ch >= 0x00000D0E) {
+     if (ch <= 0x00000D10) return 1;
+     if (ch >= 0x00000D12) {
+      if (ch <= 0x00000D3A) return 1;
+      if (ch >= 0x00000D3D) {
+       if (ch <= 0x00000D44) return 1;
+       if (ch >= 0x00000D46) {
+        if (ch <= 0x00000D48) return 1;
+        if (ch >= 0x00000D4A) {
+         if (ch <= 0x00000D4C) return 1;
+         if (ch == 0x00000D4E) return 1;
+         if (ch >= 0x00000D54) {
+          if (ch <= 0x00000D57) return 1;
+          if (ch >= 0x00000D5F) {
+           if (ch <= 0x00000D63) return 1;
+           if (ch >= 0x00000D66) {
+            if (ch <= 0x00000D6F) return 1;
+            if (ch >= 0x00000D7A) {
+             if (ch <= 0x00000D7F) return 1;
+             if (ch >= 0x00000D82) {
+              if (ch <= 0x00000D83) return 1;
+              if (ch >= 0x00000D85) {
+               if (ch <= 0x00000D96) return 1;
+               if (ch >= 0x00000D9A) {
+                if (ch <= 0x00000DB1) return 1;
+                if (ch >= 0x00000DB3) {
+                 if (ch <= 0x00000DBB) return 1;
+                 if (ch == 0x00000DBD) return 1;
+                 if (ch >= 0x00000DC0) {
+                  if (ch <= 0x00000DC6) return 1;
+                  if (ch >= 0x00000DCF) {
+                   if (ch <= 0x00000DD4) return 1;
+                   if (ch == 0x00000DD6) return 1;
+                   if (ch >= 0x00000DD8) {
+                    if (ch <= 0x00000DDF) return 1;
+                    if (ch >= 0x00000DE6) {
+                     if (ch <= 0x00000DEF) return 1;
+                     if (ch >= 0x00000DF2) {
+                      if (ch <= 0x00000DF3) return 1;
+  }}}}}}}}}}}}}}}}}}}}
+  break;
+ case 0x0000000E:
+  if (ch >= 0x00000E01) {
+   if (ch <= 0x00000E3A) return 1;
+   if (ch >= 0x00000E40) {
+    if (ch <= 0x00000E46) return 1;
+    if (ch == 0x00000E4D) return 1;
+    if (ch >= 0x00000E50) {
+     if (ch <= 0x00000E59) return 1;
+     if (ch >= 0x00000E81) {
+      if (ch <= 0x00000E82) return 1;
+      if (ch == 0x00000E84) return 1;
+      if (ch >= 0x00000E87) {
+       if (ch <= 0x00000E88) return 1;
+       if (ch == 0x00000E8A) return 1;
+       if (ch == 0x00000E8D) return 1;
+       if (ch >= 0x00000E94) {
+        if (ch <= 0x00000E97) return 1;
+        if (ch >= 0x00000E99) {
+         if (ch <= 0x00000E9F) return 1;
+         if (ch >= 0x00000EA1) {
+          if (ch <= 0x00000EA3) return 1;
+          if (ch == 0x00000EA5) return 1;
+          if (ch == 0x00000EA7) return 1;
+          if (ch >= 0x00000EAA) {
+           if (ch <= 0x00000EAB) return 1;
+           if (ch >= 0x00000EAD) {
+            if (ch <= 0x00000EB9) return 1;
+            if (ch >= 0x00000EBB) {
+             if (ch <= 0x00000EBD) return 1;
+             if (ch >= 0x00000EC0) {
+              if (ch <= 0x00000EC4) return 1;
+              if (ch == 0x00000EC6) return 1;
+              if (ch == 0x00000ECD) return 1;
+              if (ch >= 0x00000ED0) {
+               if (ch <= 0x00000ED9) return 1;
+               if (ch >= 0x00000EDC) {
+                if (ch <= 0x00000EDF) return 1;
+  }}}}}}}}}}}}}}
+  break;
+ case 0x0000000F:
+  if (ch == 0x00000F00) return 1;
+  if (ch >= 0x00000F20) {
+   if (ch <= 0x00000F29) return 1;
+   if (ch >= 0x00000F40) {
+    if (ch <= 0x00000F47) return 1;
+    if (ch >= 0x00000F49) {
+     if (ch <= 0x00000F6C) return 1;
+     if (ch >= 0x00000F71) {
+      if (ch <= 0x00000F81) return 1;
+      if (ch >= 0x00000F88) {
+       if (ch <= 0x00000F97) return 1;
+       if (ch >= 0x00000F99) {
+        if (ch <= 0x00000FBC) return 1;
+  }}}}}}
+  break;
+ }
  break;
 case 0x00000004:
- if (ch >= 0x00001000) {
-  if (ch <= 0x00001036) return 1;
-  if (ch == 0x00001038) return 1;
-  if (ch >= 0x0000103B) {
-   if (ch <= 0x00001049) return 1;
-   if (ch >= 0x00001050) {
-    if (ch <= 0x00001062) return 1;
-    if (ch >= 0x00001065) {
-     if (ch <= 0x00001068) return 1;
-     if (ch >= 0x0000106E) {
-      if (ch <= 0x00001086) return 1;
-      if (ch == 0x0000108E) return 1;
-      if (ch >= 0x00001090) {
-       if (ch <= 0x00001099) return 1;
-       if (ch >= 0x0000109C) {
-        if (ch <= 0x0000109D) return 1;
-        if (ch >= 0x000010A0) {
-         if (ch <= 0x000010C5) return 1;
-         if (ch == 0x000010C7) return 1;
-         if (ch == 0x000010CD) return 1;
-         if (ch >= 0x000010D0) {
-          if (ch <= 0x000010FA) return 1;
-          if (ch >= 0x000010FC) {
-           if (ch <= 0x00001248) return 1;
-           if (ch >= 0x0000124A) {
-            if (ch <= 0x0000124D) return 1;
-            if (ch >= 0x00001250) {
-             if (ch <= 0x00001256) return 1;
-             if (ch == 0x00001258) return 1;
-             if (ch >= 0x0000125A) {
-              if (ch <= 0x0000125D) return 1;
-              if (ch >= 0x00001260) {
-               if (ch <= 0x00001288) return 1;
-               if (ch >= 0x0000128A) {
-                if (ch <= 0x0000128D) return 1;
-                if (ch >= 0x00001290) {
-                 if (ch <= 0x000012B0) return 1;
-                 if (ch >= 0x000012B2) {
-                  if (ch <= 0x000012B5) return 1;
-                  if (ch >= 0x000012B8) {
-                   if (ch <= 0x000012BE) return 1;
-                   if (ch == 0x000012C0) return 1;
-                   if (ch >= 0x000012C2) {
-                    if (ch <= 0x000012C5) return 1;
-                    if (ch >= 0x000012C8) {
-                     if (ch <= 0x000012D6) return 1;
-                     if (ch >= 0x000012D8) {
-                      if (ch <= 0x00001310) return 1;
-                      if (ch >= 0x00001312) {
-                       if (ch <= 0x00001315) return 1;
-                       if (ch >= 0x00001318) {
-                        if (ch <= 0x0000135A) return 1;
-                        if (ch == 0x0000135F) return 1;
-                        if (ch >= 0x00001380) {
-                         if (ch <= 0x0000138F) return 1;
-                         if (ch >= 0x000013A0) {
-                          if (ch <= 0x000013F5) return 1;
-                          if (ch >= 0x000013F8) {
-                           if (ch <= 0x000013FD) return 1;
- }}}}}}}}}}}}}}}}}}}}}}}}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000010:
+  if (ch >= 0x00001000) {
+   if (ch <= 0x00001036) return 1;
+   if (ch == 0x00001038) return 1;
+   if (ch >= 0x0000103B) {
+    if (ch <= 0x00001049) return 1;
+    if (ch >= 0x00001050) {
+     if (ch <= 0x00001062) return 1;
+     if (ch >= 0x00001065) {
+      if (ch <= 0x00001068) return 1;
+      if (ch >= 0x0000106E) {
+       if (ch <= 0x00001086) return 1;
+       if (ch == 0x0000108E) return 1;
+       if (ch >= 0x00001090) {
+        if (ch <= 0x00001099) return 1;
+        if (ch >= 0x0000109C) {
+         if (ch <= 0x0000109D) return 1;
+         if (ch >= 0x000010A0) {
+          if (ch <= 0x000010C5) return 1;
+          if (ch == 0x000010C7) return 1;
+          if (ch == 0x000010CD) return 1;
+          if (ch >= 0x000010D0) {
+           if (ch <= 0x000010FA) return 1;
+           if (ch >= 0x000010FC) {
+            if (ch <= 0x00001248) return 1;
+  }}}}}}}}}}
+  break;
+ case 0x00000012:
+  if (ch >= 0x0000124A) {
+   if (ch <= 0x0000124D) return 1;
+   if (ch >= 0x00001250) {
+    if (ch <= 0x00001256) return 1;
+    if (ch == 0x00001258) return 1;
+    if (ch >= 0x0000125A) {
+     if (ch <= 0x0000125D) return 1;
+     if (ch >= 0x00001260) {
+      if (ch <= 0x00001288) return 1;
+      if (ch >= 0x0000128A) {
+       if (ch <= 0x0000128D) return 1;
+       if (ch >= 0x00001290) {
+        if (ch <= 0x000012B0) return 1;
+        if (ch >= 0x000012B2) {
+         if (ch <= 0x000012B5) return 1;
+         if (ch >= 0x000012B8) {
+          if (ch <= 0x000012BE) return 1;
+          if (ch == 0x000012C0) return 1;
+          if (ch >= 0x000012C2) {
+           if (ch <= 0x000012C5) return 1;
+           if (ch >= 0x000012C8) {
+            if (ch <= 0x000012D6) return 1;
+            if (ch >= 0x000012D8) {
+             if (ch <= 0x00001310) return 1;
+  }}}}}}}}}}}
+  break;
+ case 0x00000013:
+  if (ch >= 0x00001312) {
+   if (ch <= 0x00001315) return 1;
+   if (ch >= 0x00001318) {
+    if (ch <= 0x0000135A) return 1;
+    if (ch == 0x0000135F) return 1;
+    if (ch >= 0x00001380) {
+     if (ch <= 0x0000138F) return 1;
+     if (ch >= 0x000013A0) {
+      if (ch <= 0x000013F5) return 1;
+      if (ch >= 0x000013F8) {
+       if (ch <= 0x000013FD) return 1;
+  }}}}}
+  break;
+ }
  break;
 case 0x00000005:
- if (ch >= 0x00001401) {
-  if (ch <= 0x0000166C) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000014:
+  if (ch >= 0x00001401) {
+   if (ch <= 0x0000166C) return 1;
+  }
+  break;
+ case 0x00000016:
   if (ch >= 0x0000166F) {
    if (ch <= 0x0000167F) return 1;
    if (ch >= 0x00001681) {
@@ -1287,142 +1355,178 @@ case 0x00000005:
      if (ch <= 0x000016EA) return 1;
      if (ch >= 0x000016EE) {
       if (ch <= 0x000016F8) return 1;
-      if (ch >= 0x00001700) {
-       if (ch <= 0x0000170C) return 1;
-       if (ch >= 0x0000170E) {
-        if (ch <= 0x00001713) return 1;
-        if (ch >= 0x00001720) {
-         if (ch <= 0x00001733) return 1;
-         if (ch >= 0x00001740) {
-          if (ch <= 0x00001753) return 1;
-          if (ch >= 0x00001760) {
-           if (ch <= 0x0000176C) return 1;
-           if (ch >= 0x0000176E) {
-            if (ch <= 0x00001770) return 1;
-            if (ch >= 0x00001772) {
-             if (ch <= 0x00001773) return 1;
-             if (ch >= 0x00001780) {
-              if (ch <= 0x000017B3) return 1;
-              if (ch >= 0x000017B6) {
-               if (ch <= 0x000017C8) return 1;
-               if (ch == 0x000017D7) return 1;
-               if (ch == 0x000017DC) return 1;
-               if (ch >= 0x000017E0) {
-                if (ch <= 0x000017E9) return 1;
- }}}}}}}}}}}}}}}
+  }}}}
+  break;
+ case 0x00000017:
+  if (ch >= 0x00001700) {
+   if (ch <= 0x0000170C) return 1;
+   if (ch >= 0x0000170E) {
+    if (ch <= 0x00001713) return 1;
+    if (ch >= 0x00001720) {
+     if (ch <= 0x00001733) return 1;
+     if (ch >= 0x00001740) {
+      if (ch <= 0x00001753) return 1;
+      if (ch >= 0x00001760) {
+       if (ch <= 0x0000176C) return 1;
+       if (ch >= 0x0000176E) {
+        if (ch <= 0x00001770) return 1;
+        if (ch >= 0x00001772) {
+         if (ch <= 0x00001773) return 1;
+         if (ch >= 0x00001780) {
+          if (ch <= 0x000017B3) return 1;
+          if (ch >= 0x000017B6) {
+           if (ch <= 0x000017C8) return 1;
+           if (ch == 0x000017D7) return 1;
+           if (ch == 0x000017DC) return 1;
+           if (ch >= 0x000017E0) {
+            if (ch <= 0x000017E9) return 1;
+  }}}}}}}}}}
+  break;
+ }
  break;
 case 0x00000006:
- if (ch >= 0x00001810) {
-  if (ch <= 0x00001819) return 1;
-  if (ch >= 0x00001820) {
-   if (ch <= 0x00001877) return 1;
-   if (ch >= 0x00001880) {
-    if (ch <= 0x000018AA) return 1;
-    if (ch >= 0x000018B0) {
-     if (ch <= 0x000018F5) return 1;
-     if (ch >= 0x00001900) {
-      if (ch <= 0x0000191E) return 1;
-      if (ch >= 0x00001920) {
-       if (ch <= 0x0000192B) return 1;
-       if (ch >= 0x00001930) {
-        if (ch <= 0x00001938) return 1;
-        if (ch >= 0x00001946) {
-         if (ch <= 0x0000196D) return 1;
-         if (ch >= 0x00001970) {
-          if (ch <= 0x00001974) return 1;
-          if (ch >= 0x00001980) {
-           if (ch <= 0x000019AB) return 1;
-           if (ch >= 0x000019B0) {
-            if (ch <= 0x000019C9) return 1;
-            if (ch >= 0x000019D0) {
-             if (ch <= 0x000019D9) return 1;
-             if (ch >= 0x00001A00) {
-              if (ch <= 0x00001A1B) return 1;
-              if (ch >= 0x00001A20) {
-               if (ch <= 0x00001A5E) return 1;
-               if (ch >= 0x00001A61) {
-                if (ch <= 0x00001A74) return 1;
-                if (ch >= 0x00001A80) {
-                 if (ch <= 0x00001A89) return 1;
-                 if (ch >= 0x00001A90) {
-                  if (ch <= 0x00001A99) return 1;
-                  if (ch == 0x00001AA7) return 1;
-                  if (ch >= 0x00001B00) {
-                   if (ch <= 0x00001B33) return 1;
-                   if (ch >= 0x00001B35) {
-                    if (ch <= 0x00001B43) return 1;
-                    if (ch >= 0x00001B45) {
-                     if (ch <= 0x00001B4B) return 1;
-                     if (ch >= 0x00001B50) {
-                      if (ch <= 0x00001B59) return 1;
-                      if (ch >= 0x00001B80) {
-                       if (ch <= 0x00001BA9) return 1;
-                       if (ch >= 0x00001BAC) {
-                        if (ch <= 0x00001BE5) return 1;
-                        if (ch >= 0x00001BE7) {
-                         if (ch <= 0x00001BF1) return 1;
- }}}}}}}}}}}}}}}}}}}}}}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000018:
+  if (ch >= 0x00001810) {
+   if (ch <= 0x00001819) return 1;
+   if (ch >= 0x00001820) {
+    if (ch <= 0x00001877) return 1;
+    if (ch >= 0x00001880) {
+     if (ch <= 0x000018AA) return 1;
+     if (ch >= 0x000018B0) {
+      if (ch <= 0x000018F5) return 1;
+  }}}}
+  break;
+ case 0x00000019:
+  if (ch >= 0x00001900) {
+   if (ch <= 0x0000191E) return 1;
+   if (ch >= 0x00001920) {
+    if (ch <= 0x0000192B) return 1;
+    if (ch >= 0x00001930) {
+     if (ch <= 0x00001938) return 1;
+     if (ch >= 0x00001946) {
+      if (ch <= 0x0000196D) return 1;
+      if (ch >= 0x00001970) {
+       if (ch <= 0x00001974) return 1;
+       if (ch >= 0x00001980) {
+        if (ch <= 0x000019AB) return 1;
+        if (ch >= 0x000019B0) {
+         if (ch <= 0x000019C9) return 1;
+         if (ch >= 0x000019D0) {
+          if (ch <= 0x000019D9) return 1;
+  }}}}}}}}
+  break;
+ case 0x0000001A:
+  if (ch >= 0x00001A00) {
+   if (ch <= 0x00001A1B) return 1;
+   if (ch >= 0x00001A20) {
+    if (ch <= 0x00001A5E) return 1;
+    if (ch >= 0x00001A61) {
+     if (ch <= 0x00001A74) return 1;
+     if (ch >= 0x00001A80) {
+      if (ch <= 0x00001A89) return 1;
+      if (ch >= 0x00001A90) {
+       if (ch <= 0x00001A99) return 1;
+       if (ch == 0x00001AA7) return 1;
+  }}}}}
+  break;
+ case 0x0000001B:
+  if (ch >= 0x00001B00) {
+   if (ch <= 0x00001B33) return 1;
+   if (ch >= 0x00001B35) {
+    if (ch <= 0x00001B43) return 1;
+    if (ch >= 0x00001B45) {
+     if (ch <= 0x00001B4B) return 1;
+     if (ch >= 0x00001B50) {
+      if (ch <= 0x00001B59) return 1;
+      if (ch >= 0x00001B80) {
+       if (ch <= 0x00001BA9) return 1;
+       if (ch >= 0x00001BAC) {
+        if (ch <= 0x00001BE5) return 1;
+        if (ch >= 0x00001BE7) {
+         if (ch <= 0x00001BF1) return 1;
+  }}}}}}}
+  break;
+ }
  break;
 case 0x00000007:
- if (ch >= 0x00001C00) {
-  if (ch <= 0x00001C35) return 1;
-  if (ch >= 0x00001C40) {
-   if (ch <= 0x00001C49) return 1;
-   if (ch >= 0x00001C4D) {
-    if (ch <= 0x00001C7D) return 1;
-    if (ch >= 0x00001C80) {
-     if (ch <= 0x00001C88) return 1;
-     if (ch >= 0x00001CE9) {
-      if (ch <= 0x00001CEC) return 1;
-      if (ch >= 0x00001CEE) {
-       if (ch <= 0x00001CF3) return 1;
-       if (ch >= 0x00001CF5) {
-        if (ch <= 0x00001CF6) return 1;
-        if (ch >= 0x00001D00) {
-         if (ch <= 0x00001DBF) return 1;
-         if (ch >= 0x00001DE7) {
-          if (ch <= 0x00001DF4) return 1;
-          if (ch >= 0x00001E00) {
-           if (ch <= 0x00001F15) return 1;
-           if (ch >= 0x00001F18) {
-            if (ch <= 0x00001F1D) return 1;
-            if (ch >= 0x00001F20) {
-             if (ch <= 0x00001F45) return 1;
-             if (ch >= 0x00001F48) {
-              if (ch <= 0x00001F4D) return 1;
-              if (ch >= 0x00001F50) {
-               if (ch <= 0x00001F57) return 1;
-               if (ch == 0x00001F59) return 1;
-               if (ch == 0x00001F5B) return 1;
-               if (ch == 0x00001F5D) return 1;
-               if (ch >= 0x00001F5F) {
-                if (ch <= 0x00001F7D) return 1;
-                if (ch >= 0x00001F80) {
-                 if (ch <= 0x00001FB4) return 1;
-                 if (ch >= 0x00001FB6) {
-                  if (ch <= 0x00001FBC) return 1;
-                  if (ch == 0x00001FBE) return 1;
-                  if (ch >= 0x00001FC2) {
-                   if (ch <= 0x00001FC4) return 1;
-                   if (ch >= 0x00001FC6) {
-                    if (ch <= 0x00001FCC) return 1;
-                    if (ch >= 0x00001FD0) {
-                     if (ch <= 0x00001FD3) return 1;
-                     if (ch >= 0x00001FD6) {
-                      if (ch <= 0x00001FDB) return 1;
-                      if (ch >= 0x00001FE0) {
-                       if (ch <= 0x00001FEC) return 1;
-                       if (ch >= 0x00001FF2) {
-                        if (ch <= 0x00001FF4) return 1;
-                        if (ch >= 0x00001FF6) {
-                         if (ch <= 0x00001FFC) return 1;
- }}}}}}}}}}}}}}}}}}}}}}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x0000001C:
+  if (ch >= 0x00001C00) {
+   if (ch <= 0x00001C35) return 1;
+   if (ch >= 0x00001C40) {
+    if (ch <= 0x00001C49) return 1;
+    if (ch >= 0x00001C4D) {
+     if (ch <= 0x00001C7D) return 1;
+     if (ch >= 0x00001C80) {
+      if (ch <= 0x00001C88) return 1;
+      if (ch >= 0x00001CE9) {
+       if (ch <= 0x00001CEC) return 1;
+       if (ch >= 0x00001CEE) {
+        if (ch <= 0x00001CF3) return 1;
+        if (ch >= 0x00001CF5) {
+         if (ch <= 0x00001CF6) return 1;
+  }}}}}}}
+  break;
+ case 0x0000001D:
+  if (ch >= 0x00001D00) {
+   if (ch <= 0x00001DBF) return 1;
+   if (ch >= 0x00001DE7) {
+    if (ch <= 0x00001DF4) return 1;
+  }}
+  break;
+ case 0x0000001E:
+  if (ch >= 0x00001E00) {
+   if (ch <= 0x00001F15) return 1;
+  }
+  break;
+ case 0x0000001F:
+  if (ch >= 0x00001F18) {
+   if (ch <= 0x00001F1D) return 1;
+   if (ch >= 0x00001F20) {
+    if (ch <= 0x00001F45) return 1;
+    if (ch >= 0x00001F48) {
+     if (ch <= 0x00001F4D) return 1;
+     if (ch >= 0x00001F50) {
+      if (ch <= 0x00001F57) return 1;
+      if (ch == 0x00001F59) return 1;
+      if (ch == 0x00001F5B) return 1;
+      if (ch == 0x00001F5D) return 1;
+      if (ch >= 0x00001F5F) {
+       if (ch <= 0x00001F7D) return 1;
+       if (ch >= 0x00001F80) {
+        if (ch <= 0x00001FB4) return 1;
+        if (ch >= 0x00001FB6) {
+         if (ch <= 0x00001FBC) return 1;
+         if (ch == 0x00001FBE) return 1;
+         if (ch >= 0x00001FC2) {
+          if (ch <= 0x00001FC4) return 1;
+          if (ch >= 0x00001FC6) {
+           if (ch <= 0x00001FCC) return 1;
+           if (ch >= 0x00001FD0) {
+            if (ch <= 0x00001FD3) return 1;
+            if (ch >= 0x00001FD6) {
+             if (ch <= 0x00001FDB) return 1;
+             if (ch >= 0x00001FE0) {
+              if (ch <= 0x00001FEC) return 1;
+              if (ch >= 0x00001FF2) {
+               if (ch <= 0x00001FF4) return 1;
+               if (ch >= 0x00001FF6) {
+                if (ch <= 0x00001FFC) return 1;
+  }}}}}}}}}}}}}}
+  break;
+ }
  break;
 case 0x00000008:
- if (ch == 0x00002071) return 1;
- if (ch == 0x0000207F) return 1;
- if (ch >= 0x00002090) {
-  if (ch <= 0x0000209C) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000020:
+  if (ch == 0x00002071) return 1;
+  if (ch == 0x0000207F) return 1;
+  if (ch >= 0x00002090) {
+   if (ch <= 0x0000209C) return 1;
+  }
+  break;
+ case 0x00000021:
   if (ch == 0x00002102) return 1;
   if (ch == 0x00002107) return 1;
   if (ch >= 0x0000210A) {
@@ -1444,497 +1548,660 @@ case 0x00000008:
         if (ch == 0x0000214E) return 1;
         if (ch >= 0x00002160) {
          if (ch <= 0x00002188) return 1;
- }}}}}}}}
+  }}}}}}}
+  break;
+ }
  break;
 case 0x00000009:
- if (ch >= 0x000024B6) {
-  if (ch <= 0x000024E9) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000024:
+  if (ch >= 0x000024B6) {
+   if (ch <= 0x000024E9) return 1;
+  }
+  break;
  }
  break;
 case 0x0000000B:
- if (ch >= 0x00002C00) {
-  if (ch <= 0x00002C2E) return 1;
-  if (ch >= 0x00002C30) {
-   if (ch <= 0x00002C5E) return 1;
-   if (ch >= 0x00002C60) {
-    if (ch <= 0x00002CE4) return 1;
-    if (ch >= 0x00002CEB) {
-     if (ch <= 0x00002CEE) return 1;
-     if (ch >= 0x00002CF2) {
-      if (ch <= 0x00002CF3) return 1;
-      if (ch >= 0x00002D00) {
-       if (ch <= 0x00002D25) return 1;
-       if (ch == 0x00002D27) return 1;
-       if (ch == 0x00002D2D) return 1;
-       if (ch >= 0x00002D30) {
-        if (ch <= 0x00002D67) return 1;
-        if (ch == 0x00002D6F) return 1;
-        if (ch >= 0x00002D80) {
-         if (ch <= 0x00002D96) return 1;
-         if (ch >= 0x00002DA0) {
-          if (ch <= 0x00002DA6) return 1;
-          if (ch >= 0x00002DA8) {
-           if (ch <= 0x00002DAE) return 1;
-           if (ch >= 0x00002DB0) {
-            if (ch <= 0x00002DB6) return 1;
-            if (ch >= 0x00002DB8) {
-             if (ch <= 0x00002DBE) return 1;
-             if (ch >= 0x00002DC0) {
-              if (ch <= 0x00002DC6) return 1;
-              if (ch >= 0x00002DC8) {
-               if (ch <= 0x00002DCE) return 1;
-               if (ch >= 0x00002DD0) {
-                if (ch <= 0x00002DD6) return 1;
-                if (ch >= 0x00002DD8) {
-                 if (ch <= 0x00002DDE) return 1;
-                 if (ch >= 0x00002DE0) {
-                  if (ch <= 0x00002DFF) return 1;
-                  if (ch == 0x00002E2F) return 1;
- }}}}}}}}}}}}}}}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x0000002C:
+  if (ch >= 0x00002C00) {
+   if (ch <= 0x00002C2E) return 1;
+   if (ch >= 0x00002C30) {
+    if (ch <= 0x00002C5E) return 1;
+    if (ch >= 0x00002C60) {
+     if (ch <= 0x00002CE4) return 1;
+     if (ch >= 0x00002CEB) {
+      if (ch <= 0x00002CEE) return 1;
+      if (ch >= 0x00002CF2) {
+       if (ch <= 0x00002CF3) return 1;
+  }}}}}
+  break;
+ case 0x0000002D:
+  if (ch >= 0x00002D00) {
+   if (ch <= 0x00002D25) return 1;
+   if (ch == 0x00002D27) return 1;
+   if (ch == 0x00002D2D) return 1;
+   if (ch >= 0x00002D30) {
+    if (ch <= 0x00002D67) return 1;
+    if (ch == 0x00002D6F) return 1;
+    if (ch >= 0x00002D80) {
+     if (ch <= 0x00002D96) return 1;
+     if (ch >= 0x00002DA0) {
+      if (ch <= 0x00002DA6) return 1;
+      if (ch >= 0x00002DA8) {
+       if (ch <= 0x00002DAE) return 1;
+       if (ch >= 0x00002DB0) {
+        if (ch <= 0x00002DB6) return 1;
+        if (ch >= 0x00002DB8) {
+         if (ch <= 0x00002DBE) return 1;
+         if (ch >= 0x00002DC0) {
+          if (ch <= 0x00002DC6) return 1;
+          if (ch >= 0x00002DC8) {
+           if (ch <= 0x00002DCE) return 1;
+           if (ch >= 0x00002DD0) {
+            if (ch <= 0x00002DD6) return 1;
+            if (ch >= 0x00002DD8) {
+             if (ch <= 0x00002DDE) return 1;
+             if (ch >= 0x00002DE0) {
+              if (ch <= 0x00002DFF) return 1;
+  }}}}}}}}}}}}
+  break;
+ case 0x0000002E:
+  if (ch == 0x00002E2F) return 1;
+  
+  break;
+ }
  break;
 case 0x0000000C:
- if (ch >= 0x00003005) {
-  if (ch <= 0x00003007) return 1;
-  if (ch >= 0x00003021) {
-   if (ch <= 0x00003029) return 1;
-   if (ch >= 0x00003031) {
-    if (ch <= 0x00003035) return 1;
-    if (ch >= 0x00003038) {
-     if (ch <= 0x0000303C) return 1;
-     if (ch >= 0x00003041) {
-      if (ch <= 0x00003096) return 1;
-      if (ch >= 0x0000309D) {
-       if (ch <= 0x0000309F) return 1;
-       if (ch >= 0x000030A1) {
-        if (ch <= 0x000030FA) return 1;
-        if (ch >= 0x000030FC) {
-         if (ch <= 0x000030FF) return 1;
-         if (ch >= 0x00003105) {
-          if (ch <= 0x0000312E) return 1;
-          if (ch >= 0x00003131) {
-           if (ch <= 0x0000318E) return 1;
-           if (ch >= 0x000031A0) {
-            if (ch <= 0x000031BA) return 1;
-            if (ch >= 0x000031F0) {
-             if (ch <= 0x000031FF) return 1;
- }}}}}}}}}}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000030:
+  if (ch >= 0x00003005) {
+   if (ch <= 0x00003007) return 1;
+   if (ch >= 0x00003021) {
+    if (ch <= 0x00003029) return 1;
+    if (ch >= 0x00003031) {
+     if (ch <= 0x00003035) return 1;
+     if (ch >= 0x00003038) {
+      if (ch <= 0x0000303C) return 1;
+      if (ch >= 0x00003041) {
+       if (ch <= 0x00003096) return 1;
+       if (ch >= 0x0000309D) {
+        if (ch <= 0x0000309F) return 1;
+        if (ch >= 0x000030A1) {
+         if (ch <= 0x000030FA) return 1;
+         if (ch >= 0x000030FC) {
+          if (ch <= 0x000030FF) return 1;
+  }}}}}}}}
+  break;
+ case 0x00000031:
+  if (ch >= 0x00003105) {
+   if (ch <= 0x0000312E) return 1;
+   if (ch >= 0x00003131) {
+    if (ch <= 0x0000318E) return 1;
+    if (ch >= 0x000031A0) {
+     if (ch <= 0x000031BA) return 1;
+     if (ch >= 0x000031F0) {
+      if (ch <= 0x000031FF) return 1;
+  }}}}
+  break;
+ }
  break;
 case 0x0000000D:
- if (ch >= 0x00003400) {
-  if (ch <= 0x00004DB5) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000034:
+  if (ch >= 0x00003400) {
+   if (ch <= 0x00004DB5) return 1;
+  }
+  break;
  }
  break;
 case 0x00000013:
- if (ch >= 0x00004E00) {
-  if (ch <= 0x00009FEA) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x0000004E:
+  if (ch >= 0x00004E00) {
+   if (ch <= 0x00009FEA) return 1;
+  }
+  break;
  }
  break;
 case 0x00000028:
- if (ch >= 0x0000A000) {
-  if (ch <= 0x0000A48C) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x000000A0:
+  if (ch >= 0x0000A000) {
+   if (ch <= 0x0000A48C) return 1;
+  }
+  break;
  }
  break;
 case 0x00000029:
- if (ch >= 0x0000A4D0) {
-  if (ch <= 0x0000A4FD) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x000000A4:
+  if (ch >= 0x0000A4D0) {
+   if (ch <= 0x0000A4FD) return 1;
+  }
+  break;
+ case 0x000000A5:
   if (ch >= 0x0000A500) {
    if (ch <= 0x0000A60C) return 1;
-   if (ch >= 0x0000A610) {
-    if (ch <= 0x0000A62B) return 1;
-    if (ch >= 0x0000A640) {
-     if (ch <= 0x0000A66E) return 1;
-     if (ch >= 0x0000A674) {
-      if (ch <= 0x0000A67B) return 1;
-      if (ch >= 0x0000A67F) {
-       if (ch <= 0x0000A6EF) return 1;
-       if (ch >= 0x0000A717) {
-        if (ch <= 0x0000A71F) return 1;
-        if (ch >= 0x0000A722) {
-         if (ch <= 0x0000A788) return 1;
-         if (ch >= 0x0000A78B) {
-          if (ch <= 0x0000A7AE) return 1;
-          if (ch >= 0x0000A7B0) {
-           if (ch <= 0x0000A7B7) return 1;
-           if (ch >= 0x0000A7F7) {
-            if (ch <= 0x0000A801) return 1;
- }}}}}}}}}}}
+  }
+  break;
+ case 0x000000A6:
+  if (ch >= 0x0000A610) {
+   if (ch <= 0x0000A62B) return 1;
+   if (ch >= 0x0000A640) {
+    if (ch <= 0x0000A66E) return 1;
+    if (ch >= 0x0000A674) {
+     if (ch <= 0x0000A67B) return 1;
+     if (ch >= 0x0000A67F) {
+      if (ch <= 0x0000A6EF) return 1;
+  }}}}
+  break;
+ case 0x000000A7:
+  if (ch >= 0x0000A717) {
+   if (ch <= 0x0000A71F) return 1;
+   if (ch >= 0x0000A722) {
+    if (ch <= 0x0000A788) return 1;
+    if (ch >= 0x0000A78B) {
+     if (ch <= 0x0000A7AE) return 1;
+     if (ch >= 0x0000A7B0) {
+      if (ch <= 0x0000A7B7) return 1;
+      if (ch >= 0x0000A7F7) {
+       if (ch <= 0x0000A801) return 1;
+  }}}}}
+  break;
+ }
  break;
 case 0x0000002A:
- if (ch >= 0x0000A803) {
-  if (ch <= 0x0000A805) return 1;
-  if (ch >= 0x0000A807) {
-   if (ch <= 0x0000A80A) return 1;
-   if (ch >= 0x0000A80C) {
-    if (ch <= 0x0000A827) return 1;
-    if (ch >= 0x0000A840) {
-     if (ch <= 0x0000A873) return 1;
-     if (ch >= 0x0000A880) {
-      if (ch <= 0x0000A8C3) return 1;
-      if (ch == 0x0000A8C5) return 1;
-      if (ch >= 0x0000A8D0) {
-       if (ch <= 0x0000A8D9) return 1;
-       if (ch >= 0x0000A8F2) {
-        if (ch <= 0x0000A8F7) return 1;
-        if (ch == 0x0000A8FB) return 1;
-        if (ch == 0x0000A8FD) return 1;
-        if (ch >= 0x0000A900) {
-         if (ch <= 0x0000A92A) return 1;
-         if (ch >= 0x0000A930) {
-          if (ch <= 0x0000A952) return 1;
-          if (ch >= 0x0000A960) {
-           if (ch <= 0x0000A97C) return 1;
-           if (ch >= 0x0000A980) {
-            if (ch <= 0x0000A9B2) return 1;
-            if (ch >= 0x0000A9B4) {
-             if (ch <= 0x0000A9BF) return 1;
-             if (ch >= 0x0000A9CF) {
-              if (ch <= 0x0000A9D9) return 1;
-              if (ch >= 0x0000A9E0) {
-               if (ch <= 0x0000A9E4) return 1;
-               if (ch >= 0x0000A9E6) {
-                if (ch <= 0x0000A9FE) return 1;
-                if (ch >= 0x0000AA00) {
-                 if (ch <= 0x0000AA36) return 1;
-                 if (ch >= 0x0000AA40) {
-                  if (ch <= 0x0000AA4D) return 1;
-                  if (ch >= 0x0000AA50) {
-                   if (ch <= 0x0000AA59) return 1;
-                   if (ch >= 0x0000AA60) {
-                    if (ch <= 0x0000AA76) return 1;
-                    if (ch == 0x0000AA7A) return 1;
-                    if (ch >= 0x0000AA7E) {
-                     if (ch <= 0x0000AABE) return 1;
-                     if (ch == 0x0000AAC0) return 1;
-                     if (ch == 0x0000AAC2) return 1;
-                     if (ch >= 0x0000AADB) {
-                      if (ch <= 0x0000AADD) return 1;
-                      if (ch >= 0x0000AAE0) {
-                       if (ch <= 0x0000AAEF) return 1;
-                       if (ch >= 0x0000AAF2) {
-                        if (ch <= 0x0000AAF5) return 1;
-                        if (ch >= 0x0000AB01) {
-                         if (ch <= 0x0000AB06) return 1;
-                         if (ch >= 0x0000AB09) {
-                          if (ch <= 0x0000AB0E) return 1;
-                          if (ch >= 0x0000AB11) {
-                           if (ch <= 0x0000AB16) return 1;
-                           if (ch >= 0x0000AB20) {
-                            if (ch <= 0x0000AB26) return 1;
-                            if (ch >= 0x0000AB28) {
-                             if (ch <= 0x0000AB2E) return 1;
-                             if (ch >= 0x0000AB30) {
-                              if (ch <= 0x0000AB5A) return 1;
-                              if (ch >= 0x0000AB5C) {
-                               if (ch <= 0x0000AB65) return 1;
-                               if (ch >= 0x0000AB70) {
-                                if (ch <= 0x0000ABEA) return 1;
-                                if (ch >= 0x0000ABF0) {
-                                 if (ch <= 0x0000ABF9) return 1;
- }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x000000A8:
+  if (ch >= 0x0000A803) {
+   if (ch <= 0x0000A805) return 1;
+   if (ch >= 0x0000A807) {
+    if (ch <= 0x0000A80A) return 1;
+    if (ch >= 0x0000A80C) {
+     if (ch <= 0x0000A827) return 1;
+     if (ch >= 0x0000A840) {
+      if (ch <= 0x0000A873) return 1;
+      if (ch >= 0x0000A880) {
+       if (ch <= 0x0000A8C3) return 1;
+       if (ch == 0x0000A8C5) return 1;
+       if (ch >= 0x0000A8D0) {
+        if (ch <= 0x0000A8D9) return 1;
+        if (ch >= 0x0000A8F2) {
+         if (ch <= 0x0000A8F7) return 1;
+         if (ch == 0x0000A8FB) return 1;
+         if (ch == 0x0000A8FD) return 1;
+  }}}}}}}
+  break;
+ case 0x000000A9:
+  if (ch >= 0x0000A900) {
+   if (ch <= 0x0000A92A) return 1;
+   if (ch >= 0x0000A930) {
+    if (ch <= 0x0000A952) return 1;
+    if (ch >= 0x0000A960) {
+     if (ch <= 0x0000A97C) return 1;
+     if (ch >= 0x0000A980) {
+      if (ch <= 0x0000A9B2) return 1;
+      if (ch >= 0x0000A9B4) {
+       if (ch <= 0x0000A9BF) return 1;
+       if (ch >= 0x0000A9CF) {
+        if (ch <= 0x0000A9D9) return 1;
+        if (ch >= 0x0000A9E0) {
+         if (ch <= 0x0000A9E4) return 1;
+         if (ch >= 0x0000A9E6) {
+          if (ch <= 0x0000A9FE) return 1;
+  }}}}}}}}
+  break;
+ case 0x000000AA:
+  if (ch >= 0x0000AA00) {
+   if (ch <= 0x0000AA36) return 1;
+   if (ch >= 0x0000AA40) {
+    if (ch <= 0x0000AA4D) return 1;
+    if (ch >= 0x0000AA50) {
+     if (ch <= 0x0000AA59) return 1;
+     if (ch >= 0x0000AA60) {
+      if (ch <= 0x0000AA76) return 1;
+      if (ch == 0x0000AA7A) return 1;
+      if (ch >= 0x0000AA7E) {
+       if (ch <= 0x0000AABE) return 1;
+       if (ch == 0x0000AAC0) return 1;
+       if (ch == 0x0000AAC2) return 1;
+       if (ch >= 0x0000AADB) {
+        if (ch <= 0x0000AADD) return 1;
+        if (ch >= 0x0000AAE0) {
+         if (ch <= 0x0000AAEF) return 1;
+         if (ch >= 0x0000AAF2) {
+          if (ch <= 0x0000AAF5) return 1;
+  }}}}}}}}
+  break;
+ case 0x000000AB:
+  if (ch >= 0x0000AB01) {
+   if (ch <= 0x0000AB06) return 1;
+   if (ch >= 0x0000AB09) {
+    if (ch <= 0x0000AB0E) return 1;
+    if (ch >= 0x0000AB11) {
+     if (ch <= 0x0000AB16) return 1;
+     if (ch >= 0x0000AB20) {
+      if (ch <= 0x0000AB26) return 1;
+      if (ch >= 0x0000AB28) {
+       if (ch <= 0x0000AB2E) return 1;
+       if (ch >= 0x0000AB30) {
+        if (ch <= 0x0000AB5A) return 1;
+        if (ch >= 0x0000AB5C) {
+         if (ch <= 0x0000AB65) return 1;
+         if (ch >= 0x0000AB70) {
+          if (ch <= 0x0000ABEA) return 1;
+          if (ch >= 0x0000ABF0) {
+           if (ch <= 0x0000ABF9) return 1;
+  }}}}}}}}}
+  break;
+ }
  break;
 case 0x0000002B:
- if (ch >= 0x0000AC00) {
-  if (ch <= 0x0000D7A3) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x000000AC:
+  if (ch >= 0x0000AC00) {
+   if (ch <= 0x0000D7A3) return 1;
+  }
+  break;
  }
  break;
 case 0x00000035:
- if (ch >= 0x0000D7B0) {
-  if (ch <= 0x0000D7C6) return 1;
-  if (ch >= 0x0000D7CB) {
-   if (ch <= 0x0000D7FB) return 1;
- }}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x000000D7:
+  if (ch >= 0x0000D7B0) {
+   if (ch <= 0x0000D7C6) return 1;
+   if (ch >= 0x0000D7CB) {
+    if (ch <= 0x0000D7FB) return 1;
+  }}
+  break;
+ }
  break;
 case 0x0000003E:
- if (ch >= 0x0000F900) {
-  if (ch <= 0x0000FA6D) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x000000F9:
+  if (ch >= 0x0000F900) {
+   if (ch <= 0x0000FA6D) return 1;
+  }
+  break;
+ case 0x000000FA:
   if (ch >= 0x0000FA70) {
    if (ch <= 0x0000FAD9) return 1;
-   if (ch >= 0x0000FB00) {
-    if (ch <= 0x0000FB06) return 1;
-    if (ch >= 0x0000FB13) {
-     if (ch <= 0x0000FB17) return 1;
-     if (ch >= 0x0000FB1D) {
-      if (ch <= 0x0000FB28) return 1;
-      if (ch >= 0x0000FB2A) {
-       if (ch <= 0x0000FB36) return 1;
-       if (ch >= 0x0000FB38) {
-        if (ch <= 0x0000FB3C) return 1;
-        if (ch == 0x0000FB3E) return 1;
-        if (ch >= 0x0000FB40) {
-         if (ch <= 0x0000FB41) return 1;
-         if (ch >= 0x0000FB43) {
-          if (ch <= 0x0000FB44) return 1;
-          if (ch >= 0x0000FB46) {
-           if (ch <= 0x0000FBB1) return 1;
-           if (ch >= 0x0000FBD3) {
-            if (ch <= 0x0000FD3D) return 1;
- }}}}}}}}}}}
+  }
+  break;
+ case 0x000000FB:
+  if (ch >= 0x0000FB00) {
+   if (ch <= 0x0000FB06) return 1;
+   if (ch >= 0x0000FB13) {
+    if (ch <= 0x0000FB17) return 1;
+    if (ch >= 0x0000FB1D) {
+     if (ch <= 0x0000FB28) return 1;
+     if (ch >= 0x0000FB2A) {
+      if (ch <= 0x0000FB36) return 1;
+      if (ch >= 0x0000FB38) {
+       if (ch <= 0x0000FB3C) return 1;
+       if (ch == 0x0000FB3E) return 1;
+       if (ch >= 0x0000FB40) {
+        if (ch <= 0x0000FB41) return 1;
+        if (ch >= 0x0000FB43) {
+         if (ch <= 0x0000FB44) return 1;
+         if (ch >= 0x0000FB46) {
+          if (ch <= 0x0000FBB1) return 1;
+          if (ch >= 0x0000FBD3) {
+           if (ch <= 0x0000FD3D) return 1;
+  }}}}}}}}}
+  break;
+ }
  break;
 case 0x0000003F:
- if (ch >= 0x0000FD50) {
-  if (ch <= 0x0000FD8F) return 1;
-  if (ch >= 0x0000FD92) {
-   if (ch <= 0x0000FDC7) return 1;
-   if (ch >= 0x0000FDF0) {
-    if (ch <= 0x0000FDFB) return 1;
-    if (ch >= 0x0000FE70) {
-     if (ch <= 0x0000FE74) return 1;
-     if (ch >= 0x0000FE76) {
-      if (ch <= 0x0000FEFC) return 1;
-      if (ch >= 0x0000FF10) {
-       if (ch <= 0x0000FF19) return 1;
-       if (ch >= 0x0000FF21) {
-        if (ch <= 0x0000FF3A) return 1;
-        if (ch >= 0x0000FF41) {
-         if (ch <= 0x0000FF5A) return 1;
-         if (ch >= 0x0000FF66) {
-          if (ch <= 0x0000FFBE) return 1;
-          if (ch >= 0x0000FFC2) {
-           if (ch <= 0x0000FFC7) return 1;
-           if (ch >= 0x0000FFCA) {
-            if (ch <= 0x0000FFCF) return 1;
-            if (ch >= 0x0000FFD2) {
-             if (ch <= 0x0000FFD7) return 1;
-             if (ch >= 0x0000FFDA) {
-              if (ch <= 0x0000FFDC) return 1;
- }}}}}}}}}}}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x000000FD:
+  if (ch >= 0x0000FD50) {
+   if (ch <= 0x0000FD8F) return 1;
+   if (ch >= 0x0000FD92) {
+    if (ch <= 0x0000FDC7) return 1;
+    if (ch >= 0x0000FDF0) {
+     if (ch <= 0x0000FDFB) return 1;
+  }}}
+  break;
+ case 0x000000FE:
+  if (ch >= 0x0000FE70) {
+   if (ch <= 0x0000FE74) return 1;
+   if (ch >= 0x0000FE76) {
+    if (ch <= 0x0000FEFC) return 1;
+  }}
+  break;
+ case 0x000000FF:
+  if (ch >= 0x0000FF10) {
+   if (ch <= 0x0000FF19) return 1;
+   if (ch >= 0x0000FF21) {
+    if (ch <= 0x0000FF3A) return 1;
+    if (ch >= 0x0000FF41) {
+     if (ch <= 0x0000FF5A) return 1;
+     if (ch >= 0x0000FF66) {
+      if (ch <= 0x0000FFBE) return 1;
+      if (ch >= 0x0000FFC2) {
+       if (ch <= 0x0000FFC7) return 1;
+       if (ch >= 0x0000FFCA) {
+        if (ch <= 0x0000FFCF) return 1;
+        if (ch >= 0x0000FFD2) {
+         if (ch <= 0x0000FFD7) return 1;
+         if (ch >= 0x0000FFDA) {
+          if (ch <= 0x0000FFDC) return 1;
+  }}}}}}}}
+  break;
+ }
  break;
 case 0x00000040:
- if (ch >= 0x00010000) {
-  if (ch <= 0x0001000B) return 1;
-  if (ch >= 0x0001000D) {
-   if (ch <= 0x00010026) return 1;
-   if (ch >= 0x00010028) {
-    if (ch <= 0x0001003A) return 1;
-    if (ch >= 0x0001003C) {
-     if (ch <= 0x0001003D) return 1;
-     if (ch >= 0x0001003F) {
-      if (ch <= 0x0001004D) return 1;
-      if (ch >= 0x00010050) {
-       if (ch <= 0x0001005D) return 1;
-       if (ch >= 0x00010080) {
-        if (ch <= 0x000100FA) return 1;
-        if (ch >= 0x00010140) {
-         if (ch <= 0x00010174) return 1;
-         if (ch >= 0x00010280) {
-          if (ch <= 0x0001029C) return 1;
-          if (ch >= 0x000102A0) {
-           if (ch <= 0x000102D0) return 1;
-           if (ch >= 0x00010300) {
-            if (ch <= 0x0001031F) return 1;
-            if (ch >= 0x0001032D) {
-             if (ch <= 0x0001034A) return 1;
-             if (ch >= 0x00010350) {
-              if (ch <= 0x0001037A) return 1;
-              if (ch >= 0x00010380) {
-               if (ch <= 0x0001039D) return 1;
-               if (ch >= 0x000103A0) {
-                if (ch <= 0x000103C3) return 1;
-                if (ch >= 0x000103C8) {
-                 if (ch <= 0x000103CF) return 1;
-                 if (ch >= 0x000103D1) {
-                  if (ch <= 0x000103D5) return 1;
- }}}}}}}}}}}}}}}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000100:
+  if (ch >= 0x00010000) {
+   if (ch <= 0x0001000B) return 1;
+   if (ch >= 0x0001000D) {
+    if (ch <= 0x00010026) return 1;
+    if (ch >= 0x00010028) {
+     if (ch <= 0x0001003A) return 1;
+     if (ch >= 0x0001003C) {
+      if (ch <= 0x0001003D) return 1;
+      if (ch >= 0x0001003F) {
+       if (ch <= 0x0001004D) return 1;
+       if (ch >= 0x00010050) {
+        if (ch <= 0x0001005D) return 1;
+        if (ch >= 0x00010080) {
+         if (ch <= 0x000100FA) return 1;
+  }}}}}}}
+  break;
+ case 0x00000101:
+  if (ch >= 0x00010140) {
+   if (ch <= 0x00010174) return 1;
+  }
+  break;
+ case 0x00000102:
+  if (ch >= 0x00010280) {
+   if (ch <= 0x0001029C) return 1;
+   if (ch >= 0x000102A0) {
+    if (ch <= 0x000102D0) return 1;
+  }}
+  break;
+ case 0x00000103:
+  if (ch >= 0x00010300) {
+   if (ch <= 0x0001031F) return 1;
+   if (ch >= 0x0001032D) {
+    if (ch <= 0x0001034A) return 1;
+    if (ch >= 0x00010350) {
+     if (ch <= 0x0001037A) return 1;
+     if (ch >= 0x00010380) {
+      if (ch <= 0x0001039D) return 1;
+      if (ch >= 0x000103A0) {
+       if (ch <= 0x000103C3) return 1;
+       if (ch >= 0x000103C8) {
+        if (ch <= 0x000103CF) return 1;
+        if (ch >= 0x000103D1) {
+         if (ch <= 0x000103D5) return 1;
+  }}}}}}}
+  break;
+ }
  break;
 case 0x00000041:
- if (ch >= 0x00010400) {
-  if (ch <= 0x0001049D) return 1;
-  if (ch >= 0x000104A0) {
-   if (ch <= 0x000104A9) return 1;
-   if (ch >= 0x000104B0) {
-    if (ch <= 0x000104D3) return 1;
-    if (ch >= 0x000104D8) {
-     if (ch <= 0x000104FB) return 1;
-     if (ch >= 0x00010500) {
-      if (ch <= 0x00010527) return 1;
-      if (ch >= 0x00010530) {
-       if (ch <= 0x00010563) return 1;
-       if (ch >= 0x00010600) {
-        if (ch <= 0x00010736) return 1;
-        if (ch >= 0x00010740) {
-         if (ch <= 0x00010755) return 1;
-         if (ch >= 0x00010760) {
-          if (ch <= 0x00010767) return 1;
- }}}}}}}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000104:
+  if (ch >= 0x00010400) {
+   if (ch <= 0x0001049D) return 1;
+   if (ch >= 0x000104A0) {
+    if (ch <= 0x000104A9) return 1;
+    if (ch >= 0x000104B0) {
+     if (ch <= 0x000104D3) return 1;
+     if (ch >= 0x000104D8) {
+      if (ch <= 0x000104FB) return 1;
+  }}}}
+  break;
+ case 0x00000105:
+  if (ch >= 0x00010500) {
+   if (ch <= 0x00010527) return 1;
+   if (ch >= 0x00010530) {
+    if (ch <= 0x00010563) return 1;
+  }}
+  break;
+ case 0x00000106:
+  if (ch >= 0x00010600) {
+   if (ch <= 0x00010736) return 1;
+  }
+  break;
+ case 0x00000107:
+  if (ch >= 0x00010740) {
+   if (ch <= 0x00010755) return 1;
+   if (ch >= 0x00010760) {
+    if (ch <= 0x00010767) return 1;
+  }}
+  break;
+ }
  break;
 case 0x00000042:
- if (ch >= 0x00010800) {
-  if (ch <= 0x00010805) return 1;
-  if (ch == 0x00010808) return 1;
-  if (ch >= 0x0001080A) {
-   if (ch <= 0x00010835) return 1;
-   if (ch >= 0x00010837) {
-    if (ch <= 0x00010838) return 1;
-    if (ch == 0x0001083C) return 1;
-    if (ch >= 0x0001083F) {
-     if (ch <= 0x00010855) return 1;
-     if (ch >= 0x00010860) {
-      if (ch <= 0x00010876) return 1;
-      if (ch >= 0x00010880) {
-       if (ch <= 0x0001089E) return 1;
-       if (ch >= 0x000108E0) {
-        if (ch <= 0x000108F2) return 1;
-        if (ch >= 0x000108F4) {
-         if (ch <= 0x000108F5) return 1;
-         if (ch >= 0x00010900) {
-          if (ch <= 0x00010915) return 1;
-          if (ch >= 0x00010920) {
-           if (ch <= 0x00010939) return 1;
-           if (ch >= 0x00010980) {
-            if (ch <= 0x000109B7) return 1;
-            if (ch >= 0x000109BE) {
-             if (ch <= 0x000109BF) return 1;
-             if (ch >= 0x00010A00) {
-              if (ch <= 0x00010A03) return 1;
-              if (ch >= 0x00010A05) {
-               if (ch <= 0x00010A06) return 1;
-               if (ch >= 0x00010A0C) {
-                if (ch <= 0x00010A13) return 1;
-                if (ch >= 0x00010A15) {
-                 if (ch <= 0x00010A17) return 1;
-                 if (ch >= 0x00010A19) {
-                  if (ch <= 0x00010A33) return 1;
-                  if (ch >= 0x00010A60) {
-                   if (ch <= 0x00010A7C) return 1;
-                   if (ch >= 0x00010A80) {
-                    if (ch <= 0x00010A9C) return 1;
-                    if (ch >= 0x00010AC0) {
-                     if (ch <= 0x00010AC7) return 1;
-                     if (ch >= 0x00010AC9) {
-                      if (ch <= 0x00010AE4) return 1;
-                      if (ch >= 0x00010B00) {
-                       if (ch <= 0x00010B35) return 1;
-                       if (ch >= 0x00010B40) {
-                        if (ch <= 0x00010B55) return 1;
-                        if (ch >= 0x00010B60) {
-                         if (ch <= 0x00010B72) return 1;
-                         if (ch >= 0x00010B80) {
-                          if (ch <= 0x00010B91) return 1;
- }}}}}}}}}}}}}}}}}}}}}}}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000108:
+  if (ch >= 0x00010800) {
+   if (ch <= 0x00010805) return 1;
+   if (ch == 0x00010808) return 1;
+   if (ch >= 0x0001080A) {
+    if (ch <= 0x00010835) return 1;
+    if (ch >= 0x00010837) {
+     if (ch <= 0x00010838) return 1;
+     if (ch == 0x0001083C) return 1;
+     if (ch >= 0x0001083F) {
+      if (ch <= 0x00010855) return 1;
+      if (ch >= 0x00010860) {
+       if (ch <= 0x00010876) return 1;
+       if (ch >= 0x00010880) {
+        if (ch <= 0x0001089E) return 1;
+        if (ch >= 0x000108E0) {
+         if (ch <= 0x000108F2) return 1;
+         if (ch >= 0x000108F4) {
+          if (ch <= 0x000108F5) return 1;
+  }}}}}}}}
+  break;
+ case 0x00000109:
+  if (ch >= 0x00010900) {
+   if (ch <= 0x00010915) return 1;
+   if (ch >= 0x00010920) {
+    if (ch <= 0x00010939) return 1;
+    if (ch >= 0x00010980) {
+     if (ch <= 0x000109B7) return 1;
+     if (ch >= 0x000109BE) {
+      if (ch <= 0x000109BF) return 1;
+  }}}}
+  break;
+ case 0x0000010A:
+  if (ch >= 0x00010A00) {
+   if (ch <= 0x00010A03) return 1;
+   if (ch >= 0x00010A05) {
+    if (ch <= 0x00010A06) return 1;
+    if (ch >= 0x00010A0C) {
+     if (ch <= 0x00010A13) return 1;
+     if (ch >= 0x00010A15) {
+      if (ch <= 0x00010A17) return 1;
+      if (ch >= 0x00010A19) {
+       if (ch <= 0x00010A33) return 1;
+       if (ch >= 0x00010A60) {
+        if (ch <= 0x00010A7C) return 1;
+        if (ch >= 0x00010A80) {
+         if (ch <= 0x00010A9C) return 1;
+         if (ch >= 0x00010AC0) {
+          if (ch <= 0x00010AC7) return 1;
+          if (ch >= 0x00010AC9) {
+           if (ch <= 0x00010AE4) return 1;
+  }}}}}}}}}
+  break;
+ case 0x0000010B:
+  if (ch >= 0x00010B00) {
+   if (ch <= 0x00010B35) return 1;
+   if (ch >= 0x00010B40) {
+    if (ch <= 0x00010B55) return 1;
+    if (ch >= 0x00010B60) {
+     if (ch <= 0x00010B72) return 1;
+     if (ch >= 0x00010B80) {
+      if (ch <= 0x00010B91) return 1;
+  }}}}
+  break;
+ }
  break;
 case 0x00000043:
- if (ch >= 0x00010C00) {
-  if (ch <= 0x00010C48) return 1;
-  if (ch >= 0x00010C80) {
-   if (ch <= 0x00010CB2) return 1;
-   if (ch >= 0x00010CC0) {
-    if (ch <= 0x00010CF2) return 1;
- }}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x0000010C:
+  if (ch >= 0x00010C00) {
+   if (ch <= 0x00010C48) return 1;
+   if (ch >= 0x00010C80) {
+    if (ch <= 0x00010CB2) return 1;
+    if (ch >= 0x00010CC0) {
+     if (ch <= 0x00010CF2) return 1;
+  }}}
+  break;
+ }
  break;
 case 0x00000044:
- if (ch >= 0x00011000) {
-  if (ch <= 0x00011045) return 1;
-  if (ch >= 0x00011066) {
-   if (ch <= 0x0001106F) return 1;
-   if (ch >= 0x00011082) {
-    if (ch <= 0x000110B8) return 1;
-    if (ch >= 0x000110D0) {
-     if (ch <= 0x000110E8) return 1;
-     if (ch >= 0x000110F0) {
-      if (ch <= 0x000110F9) return 1;
-      if (ch >= 0x00011100) {
-       if (ch <= 0x00011132) return 1;
-       if (ch >= 0x00011136) {
-        if (ch <= 0x0001113F) return 1;
-        if (ch >= 0x00011150) {
-         if (ch <= 0x00011172) return 1;
-         if (ch == 0x00011176) return 1;
-         if (ch >= 0x00011180) {
-          if (ch <= 0x000111BF) return 1;
-          if (ch >= 0x000111C1) {
-           if (ch <= 0x000111C4) return 1;
-           if (ch >= 0x000111D0) {
-            if (ch <= 0x000111DA) return 1;
-            if (ch == 0x000111DC) return 1;
-            if (ch >= 0x00011200) {
-             if (ch <= 0x00011211) return 1;
-             if (ch >= 0x00011213) {
-              if (ch <= 0x00011234) return 1;
-              if (ch == 0x00011237) return 1;
-              if (ch == 0x0001123E) return 1;
-              if (ch >= 0x00011280) {
-               if (ch <= 0x00011286) return 1;
-               if (ch == 0x00011288) return 1;
-               if (ch >= 0x0001128A) {
-                if (ch <= 0x0001128D) return 1;
-                if (ch >= 0x0001128F) {
-                 if (ch <= 0x0001129D) return 1;
-                 if (ch >= 0x0001129F) {
-                  if (ch <= 0x000112A8) return 1;
-                  if (ch >= 0x000112B0) {
-                   if (ch <= 0x000112E8) return 1;
-                   if (ch >= 0x000112F0) {
-                    if (ch <= 0x000112F9) return 1;
-                    if (ch >= 0x00011300) {
-                     if (ch <= 0x00011303) return 1;
-                     if (ch >= 0x00011305) {
-                      if (ch <= 0x0001130C) return 1;
-                      if (ch >= 0x0001130F) {
-                       if (ch <= 0x00011310) return 1;
-                       if (ch >= 0x00011313) {
-                        if (ch <= 0x00011328) return 1;
-                        if (ch >= 0x0001132A) {
-                         if (ch <= 0x00011330) return 1;
-                         if (ch >= 0x00011332) {
-                          if (ch <= 0x00011333) return 1;
-                          if (ch >= 0x00011335) {
-                           if (ch <= 0x00011339) return 1;
-                           if (ch >= 0x0001133D) {
-                            if (ch <= 0x00011344) return 1;
-                            if (ch >= 0x00011347) {
-                             if (ch <= 0x00011348) return 1;
-                             if (ch >= 0x0001134B) {
-                              if (ch <= 0x0001134C) return 1;
-                              if (ch == 0x00011350) return 1;
-                              if (ch == 0x00011357) return 1;
-                              if (ch >= 0x0001135D) {
-                               if (ch <= 0x00011363) return 1;
- }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000110:
+  if (ch >= 0x00011000) {
+   if (ch <= 0x00011045) return 1;
+   if (ch >= 0x00011066) {
+    if (ch <= 0x0001106F) return 1;
+    if (ch >= 0x00011082) {
+     if (ch <= 0x000110B8) return 1;
+     if (ch >= 0x000110D0) {
+      if (ch <= 0x000110E8) return 1;
+      if (ch >= 0x000110F0) {
+       if (ch <= 0x000110F9) return 1;
+  }}}}}
+  break;
+ case 0x00000111:
+  if (ch >= 0x00011100) {
+   if (ch <= 0x00011132) return 1;
+   if (ch >= 0x00011136) {
+    if (ch <= 0x0001113F) return 1;
+    if (ch >= 0x00011150) {
+     if (ch <= 0x00011172) return 1;
+     if (ch == 0x00011176) return 1;
+     if (ch >= 0x00011180) {
+      if (ch <= 0x000111BF) return 1;
+      if (ch >= 0x000111C1) {
+       if (ch <= 0x000111C4) return 1;
+       if (ch >= 0x000111D0) {
+        if (ch <= 0x000111DA) return 1;
+        if (ch == 0x000111DC) return 1;
+  }}}}}}
+  break;
+ case 0x00000112:
+  if (ch >= 0x00011200) {
+   if (ch <= 0x00011211) return 1;
+   if (ch >= 0x00011213) {
+    if (ch <= 0x00011234) return 1;
+    if (ch == 0x00011237) return 1;
+    if (ch == 0x0001123E) return 1;
+    if (ch >= 0x00011280) {
+     if (ch <= 0x00011286) return 1;
+     if (ch == 0x00011288) return 1;
+     if (ch >= 0x0001128A) {
+      if (ch <= 0x0001128D) return 1;
+      if (ch >= 0x0001128F) {
+       if (ch <= 0x0001129D) return 1;
+       if (ch >= 0x0001129F) {
+        if (ch <= 0x000112A8) return 1;
+        if (ch >= 0x000112B0) {
+         if (ch <= 0x000112E8) return 1;
+         if (ch >= 0x000112F0) {
+          if (ch <= 0x000112F9) return 1;
+  }}}}}}}}
+  break;
+ case 0x00000113:
+  if (ch >= 0x00011300) {
+   if (ch <= 0x00011303) return 1;
+   if (ch >= 0x00011305) {
+    if (ch <= 0x0001130C) return 1;
+    if (ch >= 0x0001130F) {
+     if (ch <= 0x00011310) return 1;
+     if (ch >= 0x00011313) {
+      if (ch <= 0x00011328) return 1;
+      if (ch >= 0x0001132A) {
+       if (ch <= 0x00011330) return 1;
+       if (ch >= 0x00011332) {
+        if (ch <= 0x00011333) return 1;
+        if (ch >= 0x00011335) {
+         if (ch <= 0x00011339) return 1;
+         if (ch >= 0x0001133D) {
+          if (ch <= 0x00011344) return 1;
+          if (ch >= 0x00011347) {
+           if (ch <= 0x00011348) return 1;
+           if (ch >= 0x0001134B) {
+            if (ch <= 0x0001134C) return 1;
+            if (ch == 0x00011350) return 1;
+            if (ch == 0x00011357) return 1;
+            if (ch >= 0x0001135D) {
+             if (ch <= 0x00011363) return 1;
+  }}}}}}}}}}}
+  break;
+ }
  break;
 case 0x00000045:
- if (ch >= 0x00011400) {
-  if (ch <= 0x00011441) return 1;
-  if (ch >= 0x00011443) {
-   if (ch <= 0x00011445) return 1;
-   if (ch >= 0x00011447) {
-    if (ch <= 0x0001144A) return 1;
-    if (ch >= 0x00011450) {
-     if (ch <= 0x00011459) return 1;
-     if (ch >= 0x00011480) {
-      if (ch <= 0x000114C1) return 1;
-      if (ch >= 0x000114C4) {
-       if (ch <= 0x000114C5) return 1;
-       if (ch == 0x000114C7) return 1;
-       if (ch >= 0x000114D0) {
-        if (ch <= 0x000114D9) return 1;
-        if (ch >= 0x00011580) {
-         if (ch <= 0x000115B5) return 1;
-         if (ch >= 0x000115B8) {
-          if (ch <= 0x000115BE) return 1;
-          if (ch >= 0x000115D8) {
-           if (ch <= 0x000115DD) return 1;
-           if (ch >= 0x00011600) {
-            if (ch <= 0x0001163E) return 1;
-            if (ch == 0x00011640) return 1;
-            if (ch == 0x00011644) return 1;
-            if (ch >= 0x00011650) {
-             if (ch <= 0x00011659) return 1;
-             if (ch >= 0x00011680) {
-              if (ch <= 0x000116B5) return 1;
-              if (ch >= 0x000116C0) {
-               if (ch <= 0x000116C9) return 1;
-               if (ch >= 0x00011700) {
-                if (ch <= 0x00011719) return 1;
-                if (ch >= 0x0001171D) {
-                 if (ch <= 0x0001172A) return 1;
-                 if (ch >= 0x00011730) {
-                  if (ch <= 0x00011739) return 1;
- }}}}}}}}}}}}}}}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000114:
+  if (ch >= 0x00011400) {
+   if (ch <= 0x00011441) return 1;
+   if (ch >= 0x00011443) {
+    if (ch <= 0x00011445) return 1;
+    if (ch >= 0x00011447) {
+     if (ch <= 0x0001144A) return 1;
+     if (ch >= 0x00011450) {
+      if (ch <= 0x00011459) return 1;
+      if (ch >= 0x00011480) {
+       if (ch <= 0x000114C1) return 1;
+       if (ch >= 0x000114C4) {
+        if (ch <= 0x000114C5) return 1;
+        if (ch == 0x000114C7) return 1;
+        if (ch >= 0x000114D0) {
+         if (ch <= 0x000114D9) return 1;
+  }}}}}}}
+  break;
+ case 0x00000115:
+  if (ch >= 0x00011580) {
+   if (ch <= 0x000115B5) return 1;
+   if (ch >= 0x000115B8) {
+    if (ch <= 0x000115BE) return 1;
+    if (ch >= 0x000115D8) {
+     if (ch <= 0x000115DD) return 1;
+  }}}
+  break;
+ case 0x00000116:
+  if (ch >= 0x00011600) {
+   if (ch <= 0x0001163E) return 1;
+   if (ch == 0x00011640) return 1;
+   if (ch == 0x00011644) return 1;
+   if (ch >= 0x00011650) {
+    if (ch <= 0x00011659) return 1;
+    if (ch >= 0x00011680) {
+     if (ch <= 0x000116B5) return 1;
+     if (ch >= 0x000116C0) {
+      if (ch <= 0x000116C9) return 1;
+  }}}}
+  break;
+ case 0x00000117:
+  if (ch >= 0x00011700) {
+   if (ch <= 0x00011719) return 1;
+   if (ch >= 0x0001171D) {
+    if (ch <= 0x0001172A) return 1;
+    if (ch >= 0x00011730) {
+     if (ch <= 0x00011739) return 1;
+  }}}
+  break;
+ }
  break;
 case 0x00000046:
- if (ch >= 0x000118A0) {
-  if (ch <= 0x000118E9) return 1;
-  if (ch == 0x000118FF) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000118:
+  if (ch >= 0x000118A0) {
+   if (ch <= 0x000118E9) return 1;
+   if (ch == 0x000118FF) return 1;
+  }
+  break;
+ case 0x0000011A:
   if (ch >= 0x00011A00) {
    if (ch <= 0x00011A32) return 1;
    if (ch >= 0x00011A35) {
@@ -1945,300 +2212,414 @@ case 0x00000046:
       if (ch <= 0x00011A97) return 1;
       if (ch >= 0x00011AC0) {
        if (ch <= 0x00011AF8) return 1;
- }}}}}}
+  }}}}}
+  break;
+ }
  break;
 case 0x00000047:
- if (ch >= 0x00011C00) {
-  if (ch <= 0x00011C08) return 1;
-  if (ch >= 0x00011C0A) {
-   if (ch <= 0x00011C36) return 1;
-   if (ch >= 0x00011C38) {
-    if (ch <= 0x00011C3E) return 1;
-    if (ch == 0x00011C40) return 1;
-    if (ch >= 0x00011C50) {
-     if (ch <= 0x00011C59) return 1;
-     if (ch >= 0x00011C72) {
-      if (ch <= 0x00011C8F) return 1;
-      if (ch >= 0x00011C92) {
-       if (ch <= 0x00011CA7) return 1;
-       if (ch >= 0x00011CA9) {
-        if (ch <= 0x00011CB6) return 1;
-        if (ch >= 0x00011D00) {
-         if (ch <= 0x00011D06) return 1;
-         if (ch >= 0x00011D08) {
-          if (ch <= 0x00011D09) return 1;
-          if (ch >= 0x00011D0B) {
-           if (ch <= 0x00011D36) return 1;
-           if (ch == 0x00011D3A) return 1;
-           if (ch >= 0x00011D3C) {
-            if (ch <= 0x00011D3D) return 1;
-            if (ch >= 0x00011D3F) {
-             if (ch <= 0x00011D41) return 1;
-             if (ch == 0x00011D43) return 1;
-             if (ch >= 0x00011D46) {
-              if (ch <= 0x00011D47) return 1;
-              if (ch >= 0x00011D50) {
-               if (ch <= 0x00011D59) return 1;
- }}}}}}}}}}}}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x0000011C:
+  if (ch >= 0x00011C00) {
+   if (ch <= 0x00011C08) return 1;
+   if (ch >= 0x00011C0A) {
+    if (ch <= 0x00011C36) return 1;
+    if (ch >= 0x00011C38) {
+     if (ch <= 0x00011C3E) return 1;
+     if (ch == 0x00011C40) return 1;
+     if (ch >= 0x00011C50) {
+      if (ch <= 0x00011C59) return 1;
+      if (ch >= 0x00011C72) {
+       if (ch <= 0x00011C8F) return 1;
+       if (ch >= 0x00011C92) {
+        if (ch <= 0x00011CA7) return 1;
+        if (ch >= 0x00011CA9) {
+         if (ch <= 0x00011CB6) return 1;
+  }}}}}}}
+  break;
+ case 0x0000011D:
+  if (ch >= 0x00011D00) {
+   if (ch <= 0x00011D06) return 1;
+   if (ch >= 0x00011D08) {
+    if (ch <= 0x00011D09) return 1;
+    if (ch >= 0x00011D0B) {
+     if (ch <= 0x00011D36) return 1;
+     if (ch == 0x00011D3A) return 1;
+     if (ch >= 0x00011D3C) {
+      if (ch <= 0x00011D3D) return 1;
+      if (ch >= 0x00011D3F) {
+       if (ch <= 0x00011D41) return 1;
+       if (ch == 0x00011D43) return 1;
+       if (ch >= 0x00011D46) {
+        if (ch <= 0x00011D47) return 1;
+        if (ch >= 0x00011D50) {
+         if (ch <= 0x00011D59) return 1;
+  }}}}}}}
+  break;
+ }
  break;
 case 0x00000048:
- if (ch >= 0x00012000) {
-  if (ch <= 0x00012399) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000120:
+  if (ch >= 0x00012000) {
+   if (ch <= 0x00012399) return 1;
+  }
+  break;
  }
  break;
 case 0x00000049:
- if (ch >= 0x00012400) {
-  if (ch <= 0x0001246E) return 1;
-  if (ch >= 0x00012480) {
-   if (ch <= 0x00012543) return 1;
- }}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000124:
+  if (ch >= 0x00012400) {
+   if (ch <= 0x0001246E) return 1;
+   if (ch >= 0x00012480) {
+    if (ch <= 0x00012543) return 1;
+  }}
+  break;
+ }
  break;
 case 0x0000004C:
- if (ch >= 0x00013000) {
-  if (ch <= 0x0001342E) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000130:
+  if (ch >= 0x00013000) {
+   if (ch <= 0x0001342E) return 1;
+  }
+  break;
  }
  break;
 case 0x00000051:
- if (ch >= 0x00014400) {
-  if (ch <= 0x00014646) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000144:
+  if (ch >= 0x00014400) {
+   if (ch <= 0x00014646) return 1;
+  }
+  break;
  }
  break;
 case 0x0000005A:
- if (ch >= 0x00016800) {
-  if (ch <= 0x00016A38) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000168:
+  if (ch >= 0x00016800) {
+   if (ch <= 0x00016A38) return 1;
+  }
+  break;
+ case 0x0000016A:
   if (ch >= 0x00016A40) {
    if (ch <= 0x00016A5E) return 1;
    if (ch >= 0x00016A60) {
     if (ch <= 0x00016A69) return 1;
     if (ch >= 0x00016AD0) {
      if (ch <= 0x00016AED) return 1;
-     if (ch >= 0x00016B00) {
-      if (ch <= 0x00016B36) return 1;
-      if (ch >= 0x00016B40) {
-       if (ch <= 0x00016B43) return 1;
-       if (ch >= 0x00016B50) {
-        if (ch <= 0x00016B59) return 1;
-        if (ch >= 0x00016B63) {
-         if (ch <= 0x00016B77) return 1;
-         if (ch >= 0x00016B7D) {
-          if (ch <= 0x00016B8F) return 1;
- }}}}}}}}}
+  }}}
+  break;
+ case 0x0000016B:
+  if (ch >= 0x00016B00) {
+   if (ch <= 0x00016B36) return 1;
+   if (ch >= 0x00016B40) {
+    if (ch <= 0x00016B43) return 1;
+    if (ch >= 0x00016B50) {
+     if (ch <= 0x00016B59) return 1;
+     if (ch >= 0x00016B63) {
+      if (ch <= 0x00016B77) return 1;
+      if (ch >= 0x00016B7D) {
+       if (ch <= 0x00016B8F) return 1;
+  }}}}}
+  break;
+ }
  break;
 case 0x0000005B:
- if (ch >= 0x00016F00) {
-  if (ch <= 0x00016F44) return 1;
-  if (ch >= 0x00016F50) {
-   if (ch <= 0x00016F7E) return 1;
-   if (ch >= 0x00016F93) {
-    if (ch <= 0x00016F9F) return 1;
-    if (ch >= 0x00016FE0) {
-     if (ch <= 0x00016FE1) return 1;
- }}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x0000016F:
+  if (ch >= 0x00016F00) {
+   if (ch <= 0x00016F44) return 1;
+   if (ch >= 0x00016F50) {
+    if (ch <= 0x00016F7E) return 1;
+    if (ch >= 0x00016F93) {
+     if (ch <= 0x00016F9F) return 1;
+     if (ch >= 0x00016FE0) {
+      if (ch <= 0x00016FE1) return 1;
+  }}}}
+  break;
+ }
  break;
 case 0x0000005C:
- if (ch >= 0x00017000) {
-  if (ch <= 0x000187EC) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000170:
+  if (ch >= 0x00017000) {
+   if (ch <= 0x000187EC) return 1;
+  }
+  break;
  }
  break;
 case 0x00000062:
- if (ch >= 0x00018800) {
-  if (ch <= 0x00018AF2) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000188:
+  if (ch >= 0x00018800) {
+   if (ch <= 0x00018AF2) return 1;
+  }
+  break;
  }
  break;
 case 0x0000006C:
- if (ch >= 0x0001B000) {
-  if (ch <= 0x0001B11E) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x000001B0:
+  if (ch >= 0x0001B000) {
+   if (ch <= 0x0001B11E) return 1;
+  }
+  break;
+ case 0x000001B1:
   if (ch >= 0x0001B170) {
    if (ch <= 0x0001B2FB) return 1;
- }}
+  }
+  break;
+ }
  break;
 case 0x0000006F:
- if (ch >= 0x0001BC00) {
-  if (ch <= 0x0001BC6A) return 1;
-  if (ch >= 0x0001BC70) {
-   if (ch <= 0x0001BC7C) return 1;
-   if (ch >= 0x0001BC80) {
-    if (ch <= 0x0001BC88) return 1;
-    if (ch >= 0x0001BC90) {
-     if (ch <= 0x0001BC99) return 1;
-     if (ch == 0x0001BC9E) return 1;
- }}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x000001BC:
+  if (ch >= 0x0001BC00) {
+   if (ch <= 0x0001BC6A) return 1;
+   if (ch >= 0x0001BC70) {
+    if (ch <= 0x0001BC7C) return 1;
+    if (ch >= 0x0001BC80) {
+     if (ch <= 0x0001BC88) return 1;
+     if (ch >= 0x0001BC90) {
+      if (ch <= 0x0001BC99) return 1;
+      if (ch == 0x0001BC9E) return 1;
+  }}}}
+  break;
+ }
  break;
 case 0x00000075:
- if (ch >= 0x0001D400) {
-  if (ch <= 0x0001D454) return 1;
-  if (ch >= 0x0001D456) {
-   if (ch <= 0x0001D49C) return 1;
-   if (ch >= 0x0001D49E) {
-    if (ch <= 0x0001D49F) return 1;
-    if (ch == 0x0001D4A2) return 1;
-    if (ch >= 0x0001D4A5) {
-     if (ch <= 0x0001D4A6) return 1;
-     if (ch >= 0x0001D4A9) {
-      if (ch <= 0x0001D4AC) return 1;
-      if (ch >= 0x0001D4AE) {
-       if (ch <= 0x0001D4B9) return 1;
-       if (ch == 0x0001D4BB) return 1;
-       if (ch >= 0x0001D4BD) {
-        if (ch <= 0x0001D4C3) return 1;
-        if (ch >= 0x0001D4C5) {
-         if (ch <= 0x0001D505) return 1;
-         if (ch >= 0x0001D507) {
-          if (ch <= 0x0001D50A) return 1;
-          if (ch >= 0x0001D50D) {
-           if (ch <= 0x0001D514) return 1;
-           if (ch >= 0x0001D516) {
-            if (ch <= 0x0001D51C) return 1;
-            if (ch >= 0x0001D51E) {
-             if (ch <= 0x0001D539) return 1;
-             if (ch >= 0x0001D53B) {
-              if (ch <= 0x0001D53E) return 1;
-              if (ch >= 0x0001D540) {
-               if (ch <= 0x0001D544) return 1;
-               if (ch == 0x0001D546) return 1;
-               if (ch >= 0x0001D54A) {
-                if (ch <= 0x0001D550) return 1;
-                if (ch >= 0x0001D552) {
-                 if (ch <= 0x0001D6A5) return 1;
-                 if (ch >= 0x0001D6A8) {
-                  if (ch <= 0x0001D6C0) return 1;
-                  if (ch >= 0x0001D6C2) {
-                   if (ch <= 0x0001D6DA) return 1;
-                   if (ch >= 0x0001D6DC) {
-                    if (ch <= 0x0001D6FA) return 1;
-                    if (ch >= 0x0001D6FC) {
-                     if (ch <= 0x0001D714) return 1;
-                     if (ch >= 0x0001D716) {
-                      if (ch <= 0x0001D734) return 1;
-                      if (ch >= 0x0001D736) {
-                       if (ch <= 0x0001D74E) return 1;
-                       if (ch >= 0x0001D750) {
-                        if (ch <= 0x0001D76E) return 1;
-                        if (ch >= 0x0001D770) {
-                         if (ch <= 0x0001D788) return 1;
-                         if (ch >= 0x0001D78A) {
-                          if (ch <= 0x0001D7A8) return 1;
-                          if (ch >= 0x0001D7AA) {
-                           if (ch <= 0x0001D7C2) return 1;
-                           if (ch >= 0x0001D7C4) {
-                            if (ch <= 0x0001D7CB) return 1;
-                            if (ch >= 0x0001D7CE) {
-                             if (ch <= 0x0001D7FF) return 1;
- }}}}}}}}}}}}}}}}}}}}}}}}}}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x000001D4:
+  if (ch >= 0x0001D400) {
+   if (ch <= 0x0001D454) return 1;
+   if (ch >= 0x0001D456) {
+    if (ch <= 0x0001D49C) return 1;
+    if (ch >= 0x0001D49E) {
+     if (ch <= 0x0001D49F) return 1;
+     if (ch == 0x0001D4A2) return 1;
+     if (ch >= 0x0001D4A5) {
+      if (ch <= 0x0001D4A6) return 1;
+      if (ch >= 0x0001D4A9) {
+       if (ch <= 0x0001D4AC) return 1;
+       if (ch >= 0x0001D4AE) {
+        if (ch <= 0x0001D4B9) return 1;
+        if (ch == 0x0001D4BB) return 1;
+        if (ch >= 0x0001D4BD) {
+         if (ch <= 0x0001D4C3) return 1;
+         if (ch >= 0x0001D4C5) {
+          if (ch <= 0x0001D505) return 1;
+  }}}}}}}}
+  break;
+ case 0x000001D5:
+  if (ch >= 0x0001D507) {
+   if (ch <= 0x0001D50A) return 1;
+   if (ch >= 0x0001D50D) {
+    if (ch <= 0x0001D514) return 1;
+    if (ch >= 0x0001D516) {
+     if (ch <= 0x0001D51C) return 1;
+     if (ch >= 0x0001D51E) {
+      if (ch <= 0x0001D539) return 1;
+      if (ch >= 0x0001D53B) {
+       if (ch <= 0x0001D53E) return 1;
+       if (ch >= 0x0001D540) {
+        if (ch <= 0x0001D544) return 1;
+        if (ch == 0x0001D546) return 1;
+        if (ch >= 0x0001D54A) {
+         if (ch <= 0x0001D550) return 1;
+         if (ch >= 0x0001D552) {
+          if (ch <= 0x0001D6A5) return 1;
+  }}}}}}}}
+  break;
+ case 0x000001D6:
+  if (ch >= 0x0001D6A8) {
+   if (ch <= 0x0001D6C0) return 1;
+   if (ch >= 0x0001D6C2) {
+    if (ch <= 0x0001D6DA) return 1;
+    if (ch >= 0x0001D6DC) {
+     if (ch <= 0x0001D6FA) return 1;
+     if (ch >= 0x0001D6FC) {
+      if (ch <= 0x0001D714) return 1;
+  }}}}
+  break;
+ case 0x000001D7:
+  if (ch >= 0x0001D716) {
+   if (ch <= 0x0001D734) return 1;
+   if (ch >= 0x0001D736) {
+    if (ch <= 0x0001D74E) return 1;
+    if (ch >= 0x0001D750) {
+     if (ch <= 0x0001D76E) return 1;
+     if (ch >= 0x0001D770) {
+      if (ch <= 0x0001D788) return 1;
+      if (ch >= 0x0001D78A) {
+       if (ch <= 0x0001D7A8) return 1;
+       if (ch >= 0x0001D7AA) {
+        if (ch <= 0x0001D7C2) return 1;
+        if (ch >= 0x0001D7C4) {
+         if (ch <= 0x0001D7CB) return 1;
+         if (ch >= 0x0001D7CE) {
+          if (ch <= 0x0001D7FF) return 1;
+  }}}}}}}}
+  break;
+ }
  break;
 case 0x00000078:
- if (ch >= 0x0001E000) {
-  if (ch <= 0x0001E006) return 1;
-  if (ch >= 0x0001E008) {
-   if (ch <= 0x0001E018) return 1;
-   if (ch >= 0x0001E01B) {
-    if (ch <= 0x0001E021) return 1;
-    if (ch >= 0x0001E023) {
-     if (ch <= 0x0001E024) return 1;
-     if (ch >= 0x0001E026) {
-      if (ch <= 0x0001E02A) return 1;
- }}}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x000001E0:
+  if (ch >= 0x0001E000) {
+   if (ch <= 0x0001E006) return 1;
+   if (ch >= 0x0001E008) {
+    if (ch <= 0x0001E018) return 1;
+    if (ch >= 0x0001E01B) {
+     if (ch <= 0x0001E021) return 1;
+     if (ch >= 0x0001E023) {
+      if (ch <= 0x0001E024) return 1;
+      if (ch >= 0x0001E026) {
+       if (ch <= 0x0001E02A) return 1;
+  }}}}}
+  break;
+ }
  break;
 case 0x0000007A:
- if (ch >= 0x0001E800) {
-  if (ch <= 0x0001E8C4) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x000001E8:
+  if (ch >= 0x0001E800) {
+   if (ch <= 0x0001E8C4) return 1;
+  }
+  break;
+ case 0x000001E9:
   if (ch >= 0x0001E900) {
    if (ch <= 0x0001E943) return 1;
    if (ch == 0x0001E947) return 1;
    if (ch >= 0x0001E950) {
     if (ch <= 0x0001E959) return 1;
- }}}
+  }}
+  break;
+ }
  break;
 case 0x0000007B:
- if (ch >= 0x0001EE00) {
-  if (ch <= 0x0001EE03) return 1;
-  if (ch >= 0x0001EE05) {
-   if (ch <= 0x0001EE1F) return 1;
-   if (ch >= 0x0001EE21) {
-    if (ch <= 0x0001EE22) return 1;
-    if (ch == 0x0001EE24) return 1;
-    if (ch == 0x0001EE27) return 1;
-    if (ch >= 0x0001EE29) {
-     if (ch <= 0x0001EE32) return 1;
-     if (ch >= 0x0001EE34) {
-      if (ch <= 0x0001EE37) return 1;
-      if (ch == 0x0001EE39) return 1;
-      if (ch == 0x0001EE3B) return 1;
-      if (ch == 0x0001EE42) return 1;
-      if (ch == 0x0001EE47) return 1;
-      if (ch == 0x0001EE49) return 1;
-      if (ch == 0x0001EE4B) return 1;
-      if (ch >= 0x0001EE4D) {
-       if (ch <= 0x0001EE4F) return 1;
-       if (ch >= 0x0001EE51) {
-        if (ch <= 0x0001EE52) return 1;
-        if (ch == 0x0001EE54) return 1;
-        if (ch == 0x0001EE57) return 1;
-        if (ch == 0x0001EE59) return 1;
-        if (ch == 0x0001EE5B) return 1;
-        if (ch == 0x0001EE5D) return 1;
-        if (ch == 0x0001EE5F) return 1;
-        if (ch >= 0x0001EE61) {
-         if (ch <= 0x0001EE62) return 1;
-         if (ch == 0x0001EE64) return 1;
-         if (ch >= 0x0001EE67) {
-          if (ch <= 0x0001EE6A) return 1;
-          if (ch >= 0x0001EE6C) {
-           if (ch <= 0x0001EE72) return 1;
-           if (ch >= 0x0001EE74) {
-            if (ch <= 0x0001EE77) return 1;
-            if (ch >= 0x0001EE79) {
-             if (ch <= 0x0001EE7C) return 1;
-             if (ch == 0x0001EE7E) return 1;
-             if (ch >= 0x0001EE80) {
-              if (ch <= 0x0001EE89) return 1;
-              if (ch >= 0x0001EE8B) {
-               if (ch <= 0x0001EE9B) return 1;
-               if (ch >= 0x0001EEA1) {
-                if (ch <= 0x0001EEA3) return 1;
-                if (ch >= 0x0001EEA5) {
-                 if (ch <= 0x0001EEA9) return 1;
-                 if (ch >= 0x0001EEAB) {
-                  if (ch <= 0x0001EEBB) return 1;
- }}}}}}}}}}}}}}}}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x000001EE:
+  if (ch >= 0x0001EE00) {
+   if (ch <= 0x0001EE03) return 1;
+   if (ch >= 0x0001EE05) {
+    if (ch <= 0x0001EE1F) return 1;
+    if (ch >= 0x0001EE21) {
+     if (ch <= 0x0001EE22) return 1;
+     if (ch == 0x0001EE24) return 1;
+     if (ch == 0x0001EE27) return 1;
+     if (ch >= 0x0001EE29) {
+      if (ch <= 0x0001EE32) return 1;
+      if (ch >= 0x0001EE34) {
+       if (ch <= 0x0001EE37) return 1;
+       if (ch == 0x0001EE39) return 1;
+       if (ch == 0x0001EE3B) return 1;
+       if (ch == 0x0001EE42) return 1;
+       if (ch == 0x0001EE47) return 1;
+       if (ch == 0x0001EE49) return 1;
+       if (ch == 0x0001EE4B) return 1;
+       if (ch >= 0x0001EE4D) {
+        if (ch <= 0x0001EE4F) return 1;
+        if (ch >= 0x0001EE51) {
+         if (ch <= 0x0001EE52) return 1;
+         if (ch == 0x0001EE54) return 1;
+         if (ch == 0x0001EE57) return 1;
+         if (ch == 0x0001EE59) return 1;
+         if (ch == 0x0001EE5B) return 1;
+         if (ch == 0x0001EE5D) return 1;
+         if (ch == 0x0001EE5F) return 1;
+         if (ch >= 0x0001EE61) {
+          if (ch <= 0x0001EE62) return 1;
+          if (ch == 0x0001EE64) return 1;
+          if (ch >= 0x0001EE67) {
+           if (ch <= 0x0001EE6A) return 1;
+           if (ch >= 0x0001EE6C) {
+            if (ch <= 0x0001EE72) return 1;
+            if (ch >= 0x0001EE74) {
+             if (ch <= 0x0001EE77) return 1;
+             if (ch >= 0x0001EE79) {
+              if (ch <= 0x0001EE7C) return 1;
+              if (ch == 0x0001EE7E) return 1;
+              if (ch >= 0x0001EE80) {
+               if (ch <= 0x0001EE89) return 1;
+               if (ch >= 0x0001EE8B) {
+                if (ch <= 0x0001EE9B) return 1;
+                if (ch >= 0x0001EEA1) {
+                 if (ch <= 0x0001EEA3) return 1;
+                 if (ch >= 0x0001EEA5) {
+                  if (ch <= 0x0001EEA9) return 1;
+                  if (ch >= 0x0001EEAB) {
+                   if (ch <= 0x0001EEBB) return 1;
+  }}}}}}}}}}}}}}}}}
+  break;
+ }
  break;
 case 0x0000007C:
- if (ch >= 0x0001F130) {
-  if (ch <= 0x0001F149) return 1;
-  if (ch >= 0x0001F150) {
-   if (ch <= 0x0001F169) return 1;
-   if (ch >= 0x0001F170) {
-    if (ch <= 0x0001F189) return 1;
- }}}
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x000001F1:
+  if (ch >= 0x0001F130) {
+   if (ch <= 0x0001F149) return 1;
+   if (ch >= 0x0001F150) {
+    if (ch <= 0x0001F169) return 1;
+    if (ch >= 0x0001F170) {
+     if (ch <= 0x0001F189) return 1;
+  }}}
+  break;
+ }
  break;
 case 0x00000080:
- if (ch >= 0x00020000) {
-  if (ch <= 0x0002A6D6) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x00000200:
+  if (ch >= 0x00020000) {
+   if (ch <= 0x0002A6D6) return 1;
+  }
+  break;
  }
  break;
 case 0x000000A9:
- if (ch >= 0x0002A700) {
-  if (ch <= 0x0002B734) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x000002A7:
+  if (ch >= 0x0002A700) {
+   if (ch <= 0x0002B734) return 1;
+  }
+  break;
  }
  break;
 case 0x000000AD:
- if (ch >= 0x0002B740) {
-  if (ch <= 0x0002B81D) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x000002B7:
+  if (ch >= 0x0002B740) {
+   if (ch <= 0x0002B81D) return 1;
+  }
+  break;
  }
  break;
 case 0x000000AE:
- if (ch >= 0x0002B820) {
-  if (ch <= 0x0002CEA1) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x000002B8:
+  if (ch >= 0x0002B820) {
+   if (ch <= 0x0002CEA1) return 1;
+  }
+  break;
  }
  break;
 case 0x000000B3:
- if (ch >= 0x0002CEB0) {
-  if (ch <= 0x0002EBE0) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x000002CE:
+  if (ch >= 0x0002CEB0) {
+   if (ch <= 0x0002EBE0) return 1;
+  }
+  break;
  }
  break;
 case 0x000000BE:
- if (ch >= 0x0002F800) {
-  if (ch <= 0x0002FA1D) return 1;
+ switch((ch & 0x003FFFFC) >> 8) {
+ case 0x000002F8:
+  if (ch >= 0x0002F800) {
+   if (ch <= 0x0002FA1D) return 1;
+  }
+  break;
  }
  break;
 }